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, })
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'), ])
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
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'), ])
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'), ])
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)
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()
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' } })
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'), ])
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' } })
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'} } )
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' }, })
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'))
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'} } )
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'), ])
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, [])