Beispiel #1
0
    def test_notify_sends_when_before_notify_throws(self):
        def callback(report):
            report.add_custom_data('foo', 'bar')
            raise ScaryException('oh no')

        bugsnag.before_notify(callback)
        bugsnag.notify(ScaryException('unexpected failover'))
        self.assertEqual(1, len(self.server.received))
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]
        self.assertEqual('bar', event['metaData']['custom']['foo'])
Beispiel #2
0
    def test_multiple_clients_different_keys(self):
        client1 = Client(api_key='abc',
                         asynchronous=False,
                         use_ssl=False,
                         endpoint=self.server.address)
        client2 = Client(api_key='456',
                         asynchronous=False,
                         use_ssl=False,
                         endpoint=self.server.address)

        client1.notify(ScaryException('foo'))
        self.assertSentReportCount(1)

        headers = self.server.received[0]['headers']

        client2.notify(ScaryException('bar'))
        self.assertSentReportCount(2)

        headers = self.server.received[1]['headers']
        self.assertEqual(headers['Bugsnag-Api-Key'], '456')
Beispiel #3
0
    def test_notify_payload_matching_filter(self):
        bugsnag.configure(params_filters=['bar'])
        bugsnag.notify(ScaryException('unexpected failover'), foo=4, bar=76)

        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]
        exception = event['exceptions'][0]

        self.assertEqual(4, event['metaData']['custom']['foo'])
        self.assertEqual('[FILTERED]', event['metaData']['custom']['bar'])
        self.assertEqual(169, exception['stacktrace'][0]['lineNumber'])
Beispiel #4
0
    def test_external_middleware_cannot_change_severity_reason(self):
        def severity_reason_callback(notification):
            notification.severity_reason['type'] = 'testReason'

        bugsnag.before_notify(severity_reason_callback)

        bugsnag.notify(ScaryException('unexpected failover'))
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]

        self.assertEqual(event['severityReason']['type'], 'handledException')
 def test_notify_override_user(self):
     bugsnag.notify(ScaryException('unexpected failover'),
                    user={
                        'name': 'bob',
                        'email': '*****@*****.**',
                        'id': '542347329'
                    })
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     self.assertEqual('bob', event['user']['name'])
     self.assertEqual('542347329', event['user']['id'])
     self.assertEqual('*****@*****.**', event['user']['email'])
    def test_notify_unhandled_severity_callback(self):
        def callback(report):
            report.severity = "info"

        bugsnag.before_notify(callback)

        bugsnag.notify(ScaryException("unexpected failover"), severity="error")

        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]
        self.assertFalse(event['unhandled'])
        self.assertEqual(event['severityReason'],
                         {"type": "userCallbackSetSeverity"})
Beispiel #7
0
    def test_external_middleware_can_change_severity(self):
        def severity_callback(event):
            event.severity = 'info'

        bugsnag.before_notify(severity_callback)

        bugsnag.notify(ScaryException('unexpected failover'))
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]

        self.assertEqual(event['severity'], 'info')
        self.assertEqual(event['severityReason']['type'],
                         'userCallbackSetSeverity')
Beispiel #8
0
    def test_meta_data_warning(self):
        with pytest.warns(DeprecationWarning) as records:
            bugsnag.notify(ScaryException('false equivalence'),
                           meta_data={'fruit': {
                               'apples': 2
                           }})

            assert len(records) == 1
            assert str(records[0].message) == ('The Event "metadata" ' +
                                               'argument has been replaced ' +
                                               'with "metadata"')

        json_body = self.server.received[0]['json_body']
        metadata = json_body['events'][0]['metaData']
        assert metadata['fruit']['apples'] == 2
Beispiel #9
0
    def test_auto_notify_exc_info(self):
        try:
            raise ScaryException('Testing Notify EXC Info')
        except Exception:
            bugsnag.auto_notify_exc_info()

        self.assertEqual(len(self.server.received), 1)
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]
        self.assertTrue(event['unhandled'])
        self.assertEqual(event['severity'], 'error')
        self.assertEqual(event['severityReason'],
                         {"type": "unhandledException"})
        self.assertEqual(event['exceptions'][0]['message'],
                         'Testing Notify EXC Info')
    def test_asynchronous_notify(self):
        bugsnag.configure(asynchronous=True)
        self.server.paused = True
        bugsnag.notify(ScaryException('unexpected failover'))
        self.server.paused = False

        start = time.time()
        while len(self.server.received) == 0:
            if time.time() > (start + 0.5):
                raise Exception(
                    'Timed out while waiting for asynchronous request.')

            time.sleep(0.001)

        self.assertEqual(len(self.server.received), 1)
 def test_notify_override_metadata_sections(self):
     bugsnag.add_metadata_tab('food', {'beans': 3, 'corn': 'purple'})
     bugsnag.notify(ScaryException('unexpected failover'),
                    meta_data={
                        'food': {
                            'beans': 5
                        },
                        'skills': {
                            'spear': 6
                        }
                    })
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     self.assertEqual(6, event['metaData']['skills']['spear'])
     self.assertEqual('purple', event['metaData']['food']['corn'])
     self.assertEqual(5, event['metaData']['food']['beans'])
    def test_notify_exception_with_traceback_option(self):
        backtrace = None
        try:
            raise ScaryException('foo')
        except ScaryException:
            backtrace = sys.exc_info()[2]

        bugsnag.notify(Exception("foo"), traceback=backtrace)
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]
        exception = event['exceptions'][0]
        stacktrace = exception['stacktrace']
        self.assertEqual(1, len(self.server.received))
        self.assertEqual('foo', exception['message'])
        self.assertEqual('test_notify_exception_with_traceback_option',
                         stacktrace[0]['method'])
Beispiel #13
0
    def test_notify_capture_types(self):
        try:
            with self.client.capture((ScaryException, )):
                raise Exception('Testing Notify Capture Types')
        except Exception:
            pass

        self.assertSentReportCount(0)

        try:
            with self.client.capture((ScaryException, )):
                raise ScaryException('Testing Notify Capture Types')
        except Exception:
            pass

        self.assertSentReportCount(1)
        self.assertExceptionName(0, 0, 'tests.utils.ScaryException')
    def test_exc_info(self):
        handler = BugsnagHandler()
        logger = logging.getLogger(__name__)
        logger.addHandler(handler)

        try:
            raise ScaryException('Oh no')
        except Exception:
            logger.exception('The system is down')

        logger.removeHandler(handler)

        self.assertSentReportCount(1)
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]
        exception = event['exceptions'][0]
        self.assertEqual(exception['errorClass'], 'tests.utils.ScaryException')
Beispiel #15
0
 def test_notify_user_filter(self):
     bugsnag.configure(params_filters=['address', 'phonenumber'])
     bugsnag.notify(ScaryException('unexpected failover'),
                    user={
                        "id": "test-man",
                        "address": "123 street\n cooltown\n ABC 123",
                        "phonenumber": "12345678900",
                        "firstname": "Test",
                        "lastname": "Man"
                        })
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     self.assertEqual('[FILTERED]', event['user']['address'])
     self.assertEqual('[FILTERED]', event['user']['phonenumber'])
     self.assertEqual('test-man', event['user']['id'])
     self.assertEqual('Test', event['user']['firstname'])
     self.assertEqual('Man', event['user']['lastname'])
Beispiel #16
0
    def test_internal_middleware_can_change_severity_reason(self):
        client = bugsnag.Client(endpoint=self.server.url,
                                api_key='tomatoes',
                                notify_release_stages=['dev'],
                                release_stage='dev',
                                asynchronous=False)

        def severity_reason_callback(event):
            event.severity_reason['type'] = 'testReason'

        internal_middleware = client.configuration.internal_middleware
        internal_middleware.before_notify(severity_reason_callback)

        client.notify(ScaryException('unexpected failover'))
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]

        self.assertEqual(event['severityReason']['type'], 'testReason')
Beispiel #17
0
    def test_middleware_stack_order_legacy(self):
        def first_callback(notification):
            notification.meta_data['test']['array'].append(1)

        def second_callback(notification):
            notification.meta_data['test']['array'].append(2)

        # Add a regular callback function
        bugsnag.before_notify(second_callback)

        # Simulate an internal middleware
        bugsnag.legacy.configuration.internal_middleware.before_notify(
                first_callback)

        bugsnag.notify(ScaryException('unexpected failover'),
                       test={'array': []})
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]

        self.assertEqual(event['metaData']['test']['array'], [1, 2])
Beispiel #18
0
    def test_internal_middleware_changes_severity(self):
        client = bugsnag.Client(use_ssl=False,
                                endpoint=self.server.address,
                                api_key='tomatoes',
                                notify_release_stages=['dev'],
                                release_stage='dev',
                                asynchronous=False)

        def severity_callback(notification):
            notification.severity = 'info'

        internal_middleware = client.configuration.internal_middleware
        internal_middleware.before_notify(severity_callback)

        client.notify(ScaryException('unexpected failover'))
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]

        self.assertEqual(event['severity'], 'info')
        self.assertEqual(event['severityReason']['type'], 'handledException')
    def test_auto_notify_overrides(self):
        bugsnag.auto_notify(ScaryException("unexpected failover"),
                            severity='info',
                            unhandled=False,
                            severity_reason={
                                "type": "middleware_handler",
                                "attributes": {
                                    "name": "test middleware"
                                }
                            })

        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]
        self.assertFalse(event['unhandled'])
        self.assertEqual(event['severity'], 'info')
        self.assertEqual(
            event['severityReason'], {
                "type": "middleware_handler",
                "attributes": {
                    "name": "test middleware"
                }
            })
Beispiel #20
0
    def test_middleware_stack_order(self):
        client = bugsnag.Client(endpoint=self.server.url,
                                api_key='tomatoes',
                                notify_release_stages=['dev'],
                                release_stage='dev',
                                asynchronous=False)

        def first_callback(event):
            event.metadata['test']['array'].append(1)

        def second_callback(event):
            event.metadata['test']['array'].append(2)

        client.configuration.middleware.before_notify(second_callback)
        client.configuration.internal_middleware.before_notify(first_callback)

        client.notify(ScaryException('unexpected failover'),
                      test={'array': []})
        json_body = self.server.received[0]['json_body']
        event = json_body['events'][0]

        self.assertEqual(event['metaData']['test']['array'], [1, 2])
 def test_notify_error_message(self):
     bugsnag.notify(ScaryException(u('unexpécted failover')))
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     exception = event['exceptions'][0]
     self.assertEqual(u('unexpécted failover'), exception['message'])
 def test_notify_override_grouping_hash(self):
     bugsnag.notify(ScaryException('unexpected failover'),
                    grouping_hash='Callout errors')
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     self.assertEqual('Callout errors', event['groupingHash'])
 def test_notify_override_context(self):
     bugsnag.notify(ScaryException('unexpected failover'),
                    context='/some/path')
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     self.assertEqual('/some/path', event['context'])
 def test_notify_configured_app_version(self):
     bugsnag.configure(app_version='343.2.10')
     bugsnag.notify(ScaryException('unexpected failover'))
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     self.assertEqual('343.2.10', event['appVersion'])
 def test_notify_override_severity(self):
     bugsnag.notify(ScaryException('unexpected failover'), severity='info')
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     self.assertEqual('info', event['severity'])
 def test_notify_default_severity(self):
     bugsnag.notify(ScaryException('unexpected failover'))
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     self.assertEqual('warning', event['severity'])
 def test_notify_unconfigured_release_stage(self):
     bugsnag.configure(release_stage=['pickles'])
     bugsnag.notify(ScaryException('unexpected failover'))
     self.assertEqual(0, len(self.server.received))
 def test_notify_configured_release_stage(self):
     bugsnag.notify(ScaryException('unexpected failover'))
     json_body = self.server.received[0]['json_body']
     event = json_body['events'][0]
     self.assertEqual('dev', event['releaseStage'])
 def test_notify_configured_api_key(self):
     bugsnag.notify(ScaryException('unexpected failover'))
     json_body = self.server.received[0]['json_body']
     self.assertEqual('tomatoes', json_body['apiKey'])
 def test_notify_request_count(self):
     bugsnag.notify(ScaryException('unexpected failover'))
     self.assertEqual(1, len(self.server.received))