Пример #1
0
    def test_load_json(self):
        logger = Mock()

        self.assertEqual(self.reddalert.load_json('asd', logger), {})
        self.assertEqual(self.reddalert.load_json(self.test_status_file, logger), self.test_json_data)

        self.assertEqual(self.reddalert.load_json(self.test_invalid_json, logger), {})
        self.assertEqual(logger.mock_calls, [
            call.exception("Failed to read file '%s'", 'asd'),
            call.exception("Invalid JSON file '%s'", self.test_invalid_json)
        ])
Пример #2
0
    def test_load_json(self):
        logger = Mock()

        self.assertEqual(self.reddalert.load_json("asd", logger), {})
        self.assertEqual(self.reddalert.load_json(self.test_status_file, logger), self.test_json_data)

        self.assertEqual(self.reddalert.load_json(self.test_invalid_json, logger), {})
        self.assertEqual(
            logger.mock_calls,
            [
                call.exception("Failed to read file '%s'", "asd"),
                call.exception("Invalid JSON file '%s'", self.test_invalid_json),
            ],
        )
    def test_read_and_send_exception(self):

        def se_exc(*args, **kwargs):
            raise Exception()

        s1 = Mock(spec_set=BaseSensor)
        s1.read.return_value = {
            'sensor1': {'data': 's1data'},
            'sensor2': {'data': 's2data'},
        }

        self.cls.sensors = [s1]

        with patch('%s.logger' % pbm, autospec=True) as mock_logger:
            with patch('%s.requests.post' % pbm, autospec=True) as mock_post:
                mock_post.side_effect = se_exc
                self.cls.read_and_send()
        url = 'http://foo.bar.baz:1234/v1/sensors/update'
        data = {
             'host_id': 'myhostid',
             'sensors': {
                 'sensor1': {'data': 's1data'},
                 'sensor2': {'data': 's2data'}
             }
         }
        assert mock_post.mock_calls == [
            call(url, json=data)
        ]
        assert mock_logger.mock_calls == [
            call.debug('Reading sensors'),
            call.debug('POSTing sensor data to %s: %s', url, data),
            call.exception('Exception caught when trying to POST data to '
                           'Engine; will try again at next interval.')
        ]
Пример #4
0
 def test__get_version_info_py32(self):
     with patch('awslimitchecker.version.logger') as mock_logger:
         version._get_version_info()
     assert mock_logger.mock_calls == [
         call.exception(
             'Error checking installed version; this installation'
             ' may not be in compliance with the AGPLv3 license:')
     ]
Пример #5
0
    def test_read_and_send(self):
        def se_exc():
            raise Exception()

        s1 = Mock(spec_set=BaseSensor)
        s1.read.return_value = {
            'sensor1': {
                'data': 's1data'
            },
            'sensor2': {
                'data': 's2data'
            },
        }

        s2 = Mock(spec_set=BaseSensor)
        s2.read.side_effect = se_exc

        s3 = Mock(spec_set=BaseSensor)
        s3.read.return_value = {
            'sensor31': {
                'data': 's31data'
            },
            'sensor32': {
                'data': 's32data'
            },
        }

        self.cls.sensors = [s1, s2, s3]

        with patch('%s.logger' % pbm, autospec=True) as mock_logger:
            with patch('%s.requests.post' % pbm, autospec=True) as mock_post:
                mock_post.return_value = Mock(status_code=201)
                self.cls.read_and_send()
        url = 'http://foo.bar.baz:1234/v1/sensors/update'
        data = {
            'host_id': 'myhostid',
            'sensors': {
                'sensor1': {
                    'data': 's1data'
                },
                'sensor2': {
                    'data': 's2data'
                },
                'sensor31': {
                    'data': 's31data'
                },
                'sensor32': {
                    'data': 's32data'
                },
            }
        }
        assert mock_post.mock_calls == [call(url, json=data)]
        assert mock_logger.mock_calls == [
            call.debug('Reading sensors'),
            call.exception('Exception reading sensor %s', 'BaseSensor'),
            call.debug('POSTing sensor data to %s: %s', url, data),
            call.info('POSTed sensor data to Engine')
        ]
Пример #6
0
    def test_send_alerts_dynamo_exception(self, mock_logger, mock_dynamo):
        """AlertForwarder - Send Alerts with Dynamo Exception"""
        mock_dynamo.side_effect = ClientError({}, 'batch_write')
        self.forwarder.send_alerts(None)

        mock_dynamo.assert_called_once_with(None)
        mock_logger.assert_has_calls([
            call.exception('Error saving alerts to Dynamo')
        ])
Пример #7
0
    def test_save_json(self):
        logger = Mock()

        self.assertFalse(self.reddalert.save_json('/tmp', {}, logger))
        self.assertFalse(self.reddalert.save_json('/tmp' * 100, {'foo': 'bar'}, logger))
        self.assertTrue(self.reddalert.save_json('/tmp/reddalert_test.tmp', self.test_json_data, logger))

        self.assertEqual(logger.mock_calls, [
            call.warning('Got empty JSON content, not updating status file!'),
            call.exception("Failed to write file '%s'", '/tmp' * 100)
        ])
Пример #8
0
    def test_send_alert_exception(self, mock_logger):
        """Alert Processor - Send Alert - Exception"""
        dispatcher = MagicMock()
        dispatcher.dispatch.side_effect = AttributeError
        alert = Alert('hello_world', {'abc': 123}, {'output'})
        output = 'slack:unit_test_channel'

        assert_false(AlertProcessor._send_alert(alert, output, dispatcher))
        mock_logger.assert_has_calls([
            call.info('Sending %s to %s', alert, output),
            call.exception('Exception when sending %s to %s. Alert:\n%s', alert, output, ANY)
        ])
Пример #9
0
    def test_handle_files(self):
        flist = [
            'foobar',
            'pinevent_1420863332.123456_pin2_state1',
            'pinevent_csds_pin3_state1',
            'pinevent_1420863326.123456_pin3_state0',
            'pinevent_1420863326.123456_pin2_state1',
            'xsfjef_fhejfec_dfhe',
            'pinevent_1420863326.456789_pin3_state2',
        ]

        ex = Exception('foo')

        def se_handle(fname, evt_datetime, pin, state):
            if fname == 'pinevent_1420863332.123456_pin2_state1':
                raise ex

        type(self.config).QUEUE_PATH = '/foo/bar'

        with patch('%s.logger' % pbm) as mock_logger:
            with patch('%s.os.listdir' % pbm) as mock_listdir:
                with patch('%s.handle_one_file' % pb) as mock_handle:
                    with patch('%s.os.unlink' % pbm) as mock_unlink:
                        mock_listdir.return_value = flist
                        mock_handle.side_effect = se_handle
                        self.cls.handle_files()
        assert mock_logger.mock_calls == [
            call.info("Found %d new events", 3),
            call.debug('File handled; removing: %s',
                       'pinevent_1420863326.123456_pin2_state1'),
            call.debug('File handled; removing: %s',
                       'pinevent_1420863326.123456_pin3_state0'),
            call.exception('Execption while handling event file %s',
                           'pinevent_1420863332.123456_pin2_state1'),
        ]
        assert mock_listdir.mock_calls == [call('/foo/bar')]
        assert mock_handle.mock_calls == [
            call('pinevent_1420863326.123456_pin2_state1',
                 datetime(2015, 1, 9, 23, 15, 26, 123456),
                 2, 1),
            call('pinevent_1420863326.123456_pin3_state0',
                 datetime(2015, 1, 9, 23, 15, 26, 123456),
                 3, 0),
            call('pinevent_1420863332.123456_pin2_state1',
                 datetime(2015, 1, 9, 23, 15, 32, 123456),
                 2, 1),
        ]
        assert mock_unlink.mock_calls == [
            call('/foo/bar/pinevent_1420863326.123456_pin2_state1'),
            call('/foo/bar/pinevent_1420863326.123456_pin3_state0')
        ]
Пример #10
0
    def test_save_json(self):
        logger = Mock()

        self.assertFalse(self.reddalert.save_json("/tmp", {}, logger))
        self.assertFalse(self.reddalert.save_json("/tmp" * 100, {"foo": "bar"}, logger))
        self.assertTrue(self.reddalert.save_json("/tmp/reddalert_test.tmp", self.test_json_data, logger))

        self.assertEqual(
            logger.mock_calls,
            [
                call.warning("Got empty JSON content, not updating status file!"),
                call.exception("Failed to write file '%s'", "/tmp" * 100),
            ],
        )
Пример #11
0
    def test__get_version_info_fallback(self):
        def se(foo):
            raise Exception("foo")

        with patch('awslimitchecker.version.find_version') as mock_ver:
            mock_ver.side_effect = se
            with patch('awslimitchecker.version.logger') as mock_logger:
                v = version._get_version_info()
        assert v.release == version._VERSION
        assert v.url == version._PROJECT_URL
        assert v.tag is None
        assert v.commit is None
        assert mock_ver.mock_calls == [call('awslimitchecker')]
        assert mock_logger.mock_calls == [
            call.exception('Error checking installed version; this installation'
                           ' may not be in compliance with the AGPLv3 license:')
        ]
Пример #12
0
    def test_read_and_send(self):

        def se_exc():
            raise Exception()

        s1 = Mock(spec_set=BaseSensor)
        s1.read.return_value = {
            'sensor1': {'data': 's1data'},
            'sensor2': {'data': 's2data'},
        }

        s2 = Mock(spec_set=BaseSensor)
        s2.read.side_effect = se_exc

        s3 = Mock(spec_set=BaseSensor)
        s3.read.return_value = {
            'sensor31': {'data': 's31data'},
            'sensor32': {'data': 's32data'},
        }

        self.cls.sensors = [s1, s2, s3]

        with patch('%s.logger' % pbm, autospec=True) as mock_logger:
            with patch('%s.requests.post' % pbm, autospec=True) as mock_post:
                mock_post.return_value = Mock(status_code=201)
                self.cls.read_and_send()
        url = 'http://foo.bar.baz:1234/v1/sensors/update'
        data = {
             'host_id': 'myhostid',
             'sensors': {
                 'sensor1': {'data': 's1data'},
                 'sensor2': {'data': 's2data'},
                 'sensor31': {'data': 's31data'},
                 'sensor32': {'data': 's32data'},
             }
         }
        assert mock_post.mock_calls == [
            call(url, json=data)
        ]
        assert mock_logger.mock_calls == [
            call.debug('Reading sensors'),
            call.exception('Exception reading sensor %s', 'BaseSensor'),
            call.debug('POSTing sensor data to %s: %s', url, data),
            call.info('POSTed sensor data to Engine')
        ]
    def test_update_active_node_exception(self):
        self.cls.last_poll_time = 'foo'

        def se_exc():
            raise RuntimeError('foo')

        self.cls.active_node_ip_port = 'a:b'
        with patch('%s.get_active_node' % pb) as mock_get:
            mock_get.side_effect = se_exc
            with patch('%s.logger' % pbm) as mock_logger:
                self.cls.update_active_node()
        assert self.cls.active_node_ip_port is None
        assert mock_logger.mock_calls == [
            call.exception('Exception encountered when polling active node'),
            call.warning('Active vault node changed from %s to %s',
                         'a:b', None)
        ]
        assert self.cls.last_poll_time == 'foo'
Пример #14
0
    def test__get_version_info_fallback(self):
        def se(foo):
            raise Exception("foo")

        with patch('awslimitchecker.version.find_version') as mock_ver:
            mock_ver.side_effect = se
            with patch('awslimitchecker.version.logger') as mock_logger:
                v = version._get_version_info()
        assert v.release == version._VERSION
        assert v.url == version._PROJECT_URL
        assert v.tag is None
        assert v.commit is None
        assert mock_ver.mock_calls == [call('awslimitchecker')]
        assert mock_logger.mock_calls == [
            call.exception(
                'Error checking installed version; this installation'
                ' may not be in compliance with the AGPLv3 license:')
        ]
Пример #15
0
    def test_repo_commit_in_last_day_exception(self):

        def se_exc(foo):
            raise GithubException("foo", "bar")

        mock_repo = Mock(spec_set=Repository)
        type(mock_repo).full_name = 'myuser/foo'
        type(mock_repo).owner = Mock(login='******')
        mock_repo.get_branch.side_effect = se_exc

        with patch('%s.logger' % pbm) as mock_logger:
            res = self.cls.repo_commit_in_last_day(mock_repo)
        assert res is True
        assert mock_repo.mock_calls == [call.get_branch('master')]
        assert mock_logger.mock_calls == [
            call.exception("Unable to get branch %s for repo %s",
                           'master', 'myuser/foo')
        ]
Пример #16
0
    def test_update_active_node_exception(self):
        self.cls.last_poll_time = 'foo'

        def se_exc():
            raise RuntimeError('foo')

        self.cls.active_node_ip_port = 'a:b'
        with patch('%s.get_active_node' % pb) as mock_get:
            mock_get.side_effect = se_exc
            with patch('%s.logger' % pbm) as mock_logger:
                self.cls.update_active_node()
        assert self.cls.active_node_ip_port is None
        assert mock_logger.mock_calls == [
            call.exception('Exception encountered when polling active node'),
            call.warning('Active vault node changed from %s to %s', 'a:b',
                         None)
        ]
        assert self.cls.last_poll_time == 'foo'
Пример #17
0
    def test_parsing_error(self):
        bad_bank_path = "banks/bad.bank"
        self.sandbox.write(
            bad_bank_path,
            "\n".join([FEATURE_1, SCENARIO_1_1, '        """', "        THIS IS AN UNFINISHED MULTILINE TEXT"]),
        )

        self._create_dealer([bad_bank_path])

        with assert_raises(ParsingError):
            self.dealer.load()

        self.mocked_log.assert_has_calls(
            [
                call.debug("Loading banks"),
                call.info("Loading features bank '%s'", bad_bank_path),
                call.exception("Parsing error in %s:%d:%s", bad_bank_path, 3, ANY),
            ]
        )
Пример #18
0
    def test_send_alert_exception(self, mock_logger):
        """Alert Processor - Send Alert - Exception"""
        dispatcher = MagicMock()
        dispatcher.dispatch.side_effect = AttributeError
        alert = {
            'id': '123',
            'rule_name': 'hello_world',
            'record': {
                'abc': 123
            }
        }

        assert_false(
            AlertProcessor._send_alert(alert, 'slack:unit_test_channel',
                                       dispatcher))
        mock_logger.assert_has_calls([
            call.info('Sending alert %s to %s', '123',
                      'slack:unit_test_channel'),
            call.exception('Exception when sending alert %s to %s. Alert:\n%s',
                           '123', 'slack:unit_test_channel', ANY)
        ])
Пример #19
0
    def test_handle_one_file(self):

        def se_exc(*argv):
            raise Exception()

        mock_cb1 = Mock()
        mock_cb2 = Mock()
        mock_cb2.side_effect = se_exc
        cbs = [mock_cb1, mock_cb2]

        pins = [
            {'name': 'pin0', 'states': ['pin0state0', 'pin0state1']},
            {'name': 'pin1', 'states': ['pin1state0', 'pin1state1']},
            {'name': 'pin2', 'states': ['pin2state0', 'pin2state1']},
            {'name': 'pin3', 'states': ['pin3state0', 'pin3state1']},
        ]

        type(self.config).CALLBACKS = cbs
        type(self.config).PINS = pins

        with patch('%s.logger' % pbm) as mock_logger:
            self.cls.handle_one_file(
                'myfname', datetime(2015, 2, 13, 1, 2, 3, 123456), 2, 0)
        assert mock_logger.mock_calls == [
            call.debug("Handling event: pin=%d state=%d dt=%s (%s)",
                       2, 0, datetime(2015, 2, 13, 1, 2, 3, 123456), 'myfname'),
            call.debug("Running callback: %s", mock_cb1),
            call.debug("Callback finished"),
            call.debug("Running callback: %s", mock_cb2),
            call.exception("Callback raised an exception."),
            call.debug("All callbacks finished.")
        ]
        assert mock_cb1.mock_calls == [
            call(datetime(2015, 2, 13, 1, 2, 3, 123456), 2, 0, 'pin2',
                 'pin2state0')
        ]
        assert mock_cb2.mock_calls == [
            call(datetime(2015, 2, 13, 1, 2, 3, 123456), 2, 0, 'pin2',
                 'pin2state0')
        ]
Пример #20
0
    def test_read_and_send_exception(self):
        def se_exc(*args, **kwargs):
            raise Exception()

        s1 = Mock(spec_set=BaseSensor)
        s1.read.return_value = {
            'sensor1': {
                'data': 's1data'
            },
            'sensor2': {
                'data': 's2data'
            },
        }

        self.cls.sensors = [s1]

        with patch('%s.logger' % pbm, autospec=True) as mock_logger:
            with patch('%s.requests.post' % pbm, autospec=True) as mock_post:
                mock_post.side_effect = se_exc
                self.cls.read_and_send()
        url = 'http://foo.bar.baz:1234/v1/sensors/update'
        data = {
            'host_id': 'myhostid',
            'sensors': {
                'sensor1': {
                    'data': 's1data'
                },
                'sensor2': {
                    'data': 's2data'
                }
            }
        }
        assert mock_post.mock_calls == [call(url, json=data)]
        assert mock_logger.mock_calls == [
            call.debug('Reading sensors'),
            call.debug('POSTing sensor data to %s: %s', url, data),
            call.exception('Exception caught when trying to POST data to '
                           'Engine; will try again at next interval.')
        ]
Пример #21
0
def test_middleware_extraction_failed(settings, request):
    with patch('pylogctx.django.logger') as m:
        ExtractRequestContextMiddleware().process_request(request)
        assert call.exception() in m.method_calls
Пример #22
0
def test_middleware_extraction_failed(settings, request):
    with patch('pylogctx.django.logger') as m:
        ExtractRequestContextMiddleware().process_request(request)
        assert call.exception() in m.method_calls
def test_extract_request_context_middleware_extraction_failed(request):
    with patch('django_context_logging._log') as m:
        ExtractRequestContextMiddleware().process_request(request)
        assert m.method_calls == [call.exception()]