Esempio n. 1
0
    def test_execute_noresults(self, mock_create_logger, mock_get, mock_now):
        mock_logger = Mock()
        mock_create_logger.return_value = mock_logger

        mock_get.return_value.json.side_effect = ValueError

        now = datetime.utcnow().replace(tzinfo=utc)
        mock_now.return_value = now
        default_params = {'time__gt': now.isoformat()}

        pub = NotificationPublisher()
        pub.execute()

        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'alerts', default_params),
            call(pub.api, 'observations', default_params),
        ])

        self.assertEquals(mock_logger.info.call_args_list, [])
        self.assertEquals(mock_logger.error.call_args_list, [])

        with open(STATE_FILE, 'r') as f:
            state = json.load(f)
        self.assertEquals(state, {
            'alerts': default_params,
            'observations': default_params,
        })
Esempio n. 2
0
    def test_publish_snmpv3(self, mock_snmp):
        mock_snmp.return_value = SnmpHandler('user', '1.3.6.1.4.1.3375.2.100',
                                             port=TEST_PORT)
        with UdpReceiver(TEST_PORT) as server:
            with patch.dict('os.environ'):
                os.environ['OBSRVBL_SNMP_ENABLED'] = 'True'
                os.environ['OBSRVBL_SNMP_OBJECTID'] = '1.3.6.1.4.1.3375.2.100'
                os.environ['OBSRVBL_SNMP_SERVER'] = 'localhost'
                os.environ['OBSRVBL_SNMP_USER'] = '******'
                os.environ['OBSRVBL_SNMP_VERSION'] = '3'
                os.environ['OBSRVBL_SNMPV3_ENGINEID'] = '01020304'
                os.environ['OBSRVBL_SNMPV3_PASSPHRASE'] = 'opensesame'

                pub = NotificationPublisher()

                messages = []
                messages.append('foobar')
                pub.publish(messages, 'error')

            msg = server.pop()
            self.assertRegexpMatches(msg, 'foobar')

        self.assertEquals(mock_snmp.call_args_list, [
            call(objectID='1.3.6.1.4.1.3375.2.100', port=162, host='localhost',
                 user='******', version='3', passcode='opensesame',
                 engineID='01020304'),
        ])
Esempio n. 3
0
    def test_publish_snmpv3(self, mock_snmp):
        mock_snmp.return_value = SnmpHandler('user',
                                             '1.3.6.1.4.1.3375.2.100',
                                             port=TEST_PORT)
        with UdpReceiver(TEST_PORT) as server:
            with patch.dict('os.environ'):
                os.environ['OBSRVBL_SNMP_ENABLED'] = 'True'
                os.environ['OBSRVBL_SNMP_OBJECTID'] = '1.3.6.1.4.1.3375.2.100'
                os.environ['OBSRVBL_SNMP_SERVER'] = 'localhost'
                os.environ['OBSRVBL_SNMP_USER'] = '******'
                os.environ['OBSRVBL_SNMP_VERSION'] = '3'
                os.environ['OBSRVBL_SNMPV3_ENGINEID'] = '01020304'
                os.environ['OBSRVBL_SNMPV3_PASSPHRASE'] = 'opensesame'

                pub = NotificationPublisher()

                messages = []
                messages.append('foobar')
                pub.publish(messages, 'error')

            msg = server.pop()
            self.assertRegexpMatches(msg, 'foobar')

        self.assertEquals(mock_snmp.call_args_list, [
            call(objectID='1.3.6.1.4.1.3375.2.100',
                 port=162,
                 host='localhost',
                 user='******',
                 version='3',
                 passcode='opensesame',
                 engineID='01020304'),
        ])
Esempio n. 4
0
    def test_execute_noresults(self, mock_create_logger, mock_get, mock_now):
        mock_logger = Mock()
        mock_create_logger.return_value = mock_logger

        mock_get.return_value.json.side_effect = ValueError

        now = datetime.utcnow().replace(tzinfo=utc)
        mock_now.return_value = now
        default_params = {'time__gt': now.isoformat()}

        pub = NotificationPublisher()
        pub.execute()

        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'alerts', default_params),
            call(pub.api, 'observations', default_params),
        ])

        self.assertEquals(mock_logger.info.call_args_list, [])
        self.assertEquals(mock_logger.error.call_args_list, [])

        with open(STATE_FILE, 'r') as f:
            state = json.load(f)
        self.assertEquals(state, {
            'alerts': default_params,
            'observations': default_params,
        })
Esempio n. 5
0
    def _get_instance(self, **environment):
        with patch.dict(PATCH_PATH('os_environ'), environment):
            state_file_path = join(self.temp_dir, STATE_FILE)
            with patch(PATCH_PATH('STATE_FILE'), state_file_path):
                inst = NotificationPublisher()
                inst.api = MagicMock(inst.api)

        return inst
Esempio n. 6
0
    def test_get_data_kaboom(self, mock_get):
        mock_get.side_effect = ValueError

        pub = NotificationPublisher()
        actual = pub.get_data('thingy', 'params')

        self.assertEquals(actual, None)
        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'thingy', 'params'),
        ])
Esempio n. 7
0
    def test_get_data_kerpow(self, mock_get):
        mock_get.return_value.json.return_value = {'error': ':('}

        pub = NotificationPublisher()
        actual = pub.get_data('thingy', 'params')

        self.assertEquals(actual, None)
        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'thingy', 'params'),
        ])
Esempio n. 8
0
    def test_get_data_kerpow(self, mock_get):
        mock_get.return_value.json.return_value = {'error': ':('}

        pub = NotificationPublisher()
        actual = pub.get_data('thingy', 'params')

        self.assertEquals(actual, None)
        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'thingy', 'params'),
        ])
Esempio n. 9
0
    def test_get_data_kaboom(self, mock_get):
        mock_get.side_effect = ValueError

        pub = NotificationPublisher()
        actual = pub.get_data('thingy', 'params')

        self.assertEquals(actual, None)
        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'thingy', 'params'),
        ])
Esempio n. 10
0
    def test_execute_none(self, mock_get):
        env_override = {
            'OBSRVBL_SNMP_ENABLED': 'false',
            'OBSRVBL_SYSLOG_ENABLED': 'false',
        }
        with patch.dict('ona_service.ipfix_pusher.environ', env_override):
            pub = NotificationPublisher()
            pub.execute()

        self.assertEqual(mock_get.call_count, 0)
Esempio n. 11
0
    def test_service(self, mock_get):
        mock_get.return_value.json.return_value = {'objects': []}

        pub = NotificationPublisher()
        pub.poll_seconds = 0

        def killer(signum, frame):
            pub.stop()
        signal.signal(signal.SIGALRM, killer)
        signal.alarm(1)
        pub.run()
Esempio n. 12
0
    def test_service(self, mock_get):
        mock_get.return_value.json.return_value = {'objects': []}

        pub = NotificationPublisher()
        pub.poll_seconds = 0

        def killer(signum, frame):
            pub.stop()

        signal.signal(signal.SIGALRM, killer)
        signal.alarm(1)
        pub.run()
Esempio n. 13
0
    def test_execute_default(self, mock_create_logger, mock_get, mock_now):
        mock_logger = Mock()
        mock_create_logger.return_value = mock_logger

        messages = [
            {
                'id': 1,
                'time': '2015-05-01T01:02:03+00:00'
            },
            {
                'id': 2,
                'time': '2015-05-01T01:02:04+00:00'
            },
            {
                'id': 3,
                'time': '2015-05-01T01:02:05+00:00'
            },
        ]
        mock_get.return_value.json.return_value = {'objects': messages}

        now = datetime.utcnow().replace(tzinfo=utc)
        mock_now.return_value = now
        default_params = {'time__gt': now.isoformat()}

        pub = NotificationPublisher()
        pub.execute()

        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'alerts', default_params),
            call(pub.api, 'observations', default_params),
        ])

        self.assertEquals(mock_logger.info.call_args_list,
                          [call(m) for m in messages])
        self.assertEquals(mock_logger.error.call_args_list,
                          [call(m) for m in messages])

        with open(STATE_FILE, 'r') as f:
            state = json.load(f)

        self.assertEquals(
            state, {
                'alerts': {
                    'time__gt': '2015-05-01T01:02:05+00:00'
                },
                'observations': {
                    'time__gt': '2015-05-01T01:02:05+00:00'
                }
            })
Esempio n. 14
0
    def test_get_data(self, mock_get):
        messages = [
            {'id': 1, 'time': '2015-05-01T01:02:03+00:00'},
            {'id': 2, 'time': '2015-05-01T01:02:04+00:00'},
            {'id': 3, 'time': '2015-05-01T01:02:05+00:00'},
        ]
        mock_get.return_value.json.return_value = {'objects': messages}

        pub = NotificationPublisher()
        actual = pub.get_data('thingy', 'params')

        self.assertEquals(actual, messages)
        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'thingy', 'params'),
        ])
Esempio n. 15
0
    def test_execute_resume(self, mock_create_logger, mock_get):
        last_alert_time = '2015-05-01T01:02:03+00:00'
        last_obs_time = '2015-05-01T01:02:02+00:00'

        state = {
            'alerts': {
                'time__gt': last_alert_time
            },
            'observations': {
                'time__gt': last_obs_time
            }
        }
        with open(STATE_FILE, 'w') as f:
            json.dump(state, f)

        mock_logger = Mock()
        mock_create_logger.return_value = mock_logger

        messages = [{'id': 5, 'time': '2015-05-01T01:02:05+00:00'}]
        mock_get.return_value.json.return_value = {'objects': messages}

        pub = NotificationPublisher()
        pub.execute()

        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'alerts', {'time__gt': last_alert_time}),
            call(pub.api, 'observations', {'time__gt': last_obs_time}),
        ])

        self.assertEquals(mock_logger.info.call_args_list,
                          [call(m) for m in messages])
        self.assertEquals(mock_logger.error.call_args_list,
                          [call(m) for m in messages])

        with open(STATE_FILE, 'r') as f:
            state = json.load(f)

        self.assertEquals(
            state, {
                'alerts': {
                    'time__gt': '2015-05-01T01:02:05+00:00'
                },
                'observations': {
                    'time__gt': '2015-05-01T01:02:05+00:00'
                }
            })
Esempio n. 16
0
    def test_execute_resume(self, mock_create_logger, mock_get):
        last_alert_time = '2015-05-01T01:02:03+00:00'
        last_obs_time = '2015-05-01T01:02:02+00:00'

        state = {
            'alerts': {'time__gt': last_alert_time},
            'observations': {'time__gt': last_obs_time}
        }
        with open(STATE_FILE, 'w') as f:
            json.dump(state, f)

        mock_logger = Mock()
        mock_create_logger.return_value = mock_logger

        messages = [{'id': 5, 'time': '2015-05-01T01:02:05+00:00'}]
        mock_get.return_value.json.return_value = {'objects': messages}

        pub = NotificationPublisher()
        pub.execute()

        self.assertEquals(
            mock_get.call_args_list,
            [
                call(pub.api, 'alerts', {'time__gt': last_alert_time}),
                call(pub.api, 'observations', {'time__gt': last_obs_time}),
            ]
        )

        self.assertEquals(mock_logger.info.call_args_list, [
            call(m) for m in messages
        ])
        self.assertEquals(mock_logger.error.call_args_list, [
            call(m) for m in messages
        ])

        with open(STATE_FILE, 'r') as f:
            state = json.load(f)

        self.assertEquals(
            state,
            {
                'alerts': {'time__gt': '2015-05-01T01:02:05+00:00'},
                'observations': {'time__gt': '2015-05-01T01:02:05+00:00'}
            }
        )
Esempio n. 17
0
    def test_execute_detail_only(self, mock_create_logger, mock_get, mock_now):
        mock_logger = Mock()
        mock_create_logger.return_value = mock_logger

        messages = [
            {
                'id': 1,
                'time': '2015-05-01T01:02:03+00:00'
            },
            {
                'id': 2,
                'time': '2015-05-01T01:02:04+00:00'
            },
            {
                'id': 3,
                'time': '2015-05-01T01:02:05+00:00'
            },
        ]
        mock_get.return_value.json.return_value = {'objects': messages}

        now = datetime.utcnow().replace(tzinfo=utc)
        mock_now.return_value = now
        default_params = {'time__gt': now.isoformat()}

        with patch.dict('os.environ'):
            os.environ['OBSRVBL_NOTIFICATION_TYPES'] = 'alerts-detail bogus'
            pub = NotificationPublisher()
            pub.execute()

        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'alert-notifications', default_params),
        ])

        self.assertEquals(mock_logger.error.call_args_list,
                          [call(m) for m in messages])

        with open(STATE_FILE, 'r') as f:
            state = json.load(f)

        self.assertEquals(state, {
            'alerts-detail': {
                'time__gt': '2015-05-01T01:02:05+00:00'
            },
        })
Esempio n. 18
0
    def test_publish_syslog(self):
        with UdpReceiver(TEST_PORT) as server:
            with patch.dict('os.environ'):
                os.environ['OBSRVBL_SYSLOG_ENABLED'] = 'True'
                os.environ['OBSRVBL_SYSLOG_SERVER'] = 'localhost'
                os.environ['OBSRVBL_SYSLOG_SERVER_PORT'] = str(TEST_PORT)
                os.environ['OBSRVBL_SYSLOG_FACILITY'] = 'user'

                pub = NotificationPublisher()

                messages = []
                messages.append('foobar')
                pub.publish(messages, 'error')

            msg = server.pop()
            # expect timestamp of the form:
            time = re.search(">(\d+-\d+-\d+T\d+:\d+:\d+.\d+\+00:00)",
                             msg).groups()[0]
            self.assertEqual(
                msg, get_syslog_string(time, 'user', 'error', 'foobar'))
Esempio n. 19
0
    def test_publish_syslog(self):
        with UdpReceiver(TEST_PORT) as server:
            with patch.dict('os.environ'):
                os.environ['OBSRVBL_SYSLOG_ENABLED'] = 'True'
                os.environ['OBSRVBL_SYSLOG_SERVER'] = 'localhost'
                os.environ['OBSRVBL_SYSLOG_SERVER_PORT'] = str(TEST_PORT)
                os.environ['OBSRVBL_SYSLOG_FACILITY'] = 'user'

                pub = NotificationPublisher()

                messages = []
                messages.append('foobar')
                pub.publish(messages, 'error')

            msg = server.pop()
            # expect timestamp of the form:
            time = re.search(">(\d+-\d+-\d+T\d+:\d+:\d+.\d+\+00:00)",
                             msg).groups()[0]
            self.assertEqual(
                msg, get_syslog_string(time, 'user', 'error', 'foobar'))
Esempio n. 20
0
    def test_execute_default(self, mock_create_logger, mock_get, mock_now):
        mock_logger = Mock()
        mock_create_logger.return_value = mock_logger

        messages = [
            {'id': 1, 'time': '2015-05-01T01:02:03+00:00'},
            {'id': 2, 'time': '2015-05-01T01:02:04+00:00'},
            {'id': 3, 'time': '2015-05-01T01:02:05+00:00'},
        ]
        mock_get.return_value.json.return_value = {'objects': messages}

        now = datetime.utcnow().replace(tzinfo=utc)
        mock_now.return_value = now
        default_params = {'time__gt': now.isoformat()}

        pub = NotificationPublisher()
        pub.execute()

        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'alerts', default_params),
            call(pub.api, 'observations', default_params),
        ])

        self.assertEquals(mock_logger.info.call_args_list, [
            call(m) for m in messages
        ])
        self.assertEquals(mock_logger.error.call_args_list, [
            call(m) for m in messages
        ])

        with open(STATE_FILE, 'r') as f:
            state = json.load(f)

        self.assertEquals(
            state,
            {
                'alerts': {'time__gt': '2015-05-01T01:02:05+00:00'},
                'observations': {'time__gt': '2015-05-01T01:02:05+00:00'}
            }
        )
Esempio n. 21
0
    def test_get_data(self, mock_get):
        messages = [
            {
                'id': 1,
                'time': '2015-05-01T01:02:03+00:00'
            },
            {
                'id': 2,
                'time': '2015-05-01T01:02:04+00:00'
            },
            {
                'id': 3,
                'time': '2015-05-01T01:02:05+00:00'
            },
        ]
        mock_get.return_value.json.return_value = {'objects': messages}

        pub = NotificationPublisher()
        actual = pub.get_data('thingy', 'params')

        self.assertEquals(actual, messages)
        self.assertEquals(mock_get.call_args_list, [
            call(pub.api, 'thingy', 'params'),
        ])
Esempio n. 22
0
    def test_publish(self, mock_create_logger):
        mock_logger = Mock()
        mock_create_logger.return_value = mock_logger

        pub = NotificationPublisher()

        messages = ['foo', 'bar']
        pub.publish(messages, 'error')
        self.assertEquals(mock_logger.error.call_args_list, [
            call('foo'),
            call('bar'),
        ])

        messages = ['what?']
        pub.publish(messages, 'info')
        self.assertEquals(mock_logger.info.call_args_list, [
            call('what?'),
        ])

        pub.publish([], 'nope')
        self.assertEquals(mock_logger.nope.call_args_list, [])
Esempio n. 23
0
    def test_publish(self, mock_create_logger):
        mock_logger = Mock()
        mock_create_logger.return_value = mock_logger

        pub = NotificationPublisher()

        messages = ['foo', 'bar']
        pub.publish(messages, 'error')
        self.assertEquals(mock_logger.error.call_args_list, [
            call('foo'),
            call('bar'),
        ])

        messages = ['what?']
        pub.publish(messages, 'info')
        self.assertEquals(mock_logger.info.call_args_list, [
            call('what?'),
        ])

        pub.publish([], 'nope')
        self.assertEquals(mock_logger.nope.call_args_list, [])