def test_raven_method(self):
        def exception_call2(a, b, c):
            return a + b + c / (a - b)

        def exception_call1(x, y):
            return exception_call2(y, x, 42)

        try:
            exception_call1(5, 5)
        except:
            self.client.raven('some message')

        eq_(1, len(self.client.sender.msgs))

        msg = json.loads(self.client.sender.msgs[0])

        rc = RavenClient()
        sentry_fields = rc.decode(msg['payload'])
        eq_(sentry_fields['culprit'], 'test_metlog in exception_call2')
        eq_(len(sentry_fields['sentry.interfaces.Stacktrace']['frames']), 3)
        eq_(sentry_fields['extra']['msg'], 'some message')

        eq_(msg['logger'], '')
        eq_(msg['fields']['msg'], 'some message')
        eq_(msg['type'], 'sentry')
        eq_(msg['severity'], SEVERITY.ERROR)
        eq_(msg['fields']['dsn'], self.dsn)
    def test_capture_stack(self):

        ###
        def exception_call2(a, b, c):
            return a + b + c / (a - b)

        @capture_stack
        def exception_call1(x, y):
            return exception_call2(y, x, 42)

        ###

        msgs = []
        try:
            exception_call1(5, 5)
        except:
            msgs = [json.loads(m) for m in self.client.sender.msgs]

        # There should be 1 exception
        eq_(len(msgs), 1)

        # We should have a culprit of exception_call2
        event = msgs[0]

        rc = RavenClient()
        sentry_fields = rc.decode(event['payload'])

        eq_(sentry_fields['culprit'], 'test_metlog in exception_call2')

        frames = sentry_fields['sentry.interfaces.Stacktrace']['frames']
        culprit_frame = [f for f in frames \
                            if f['function'] == 'exception_call2'][0]
        # Check for the variables that cause the divide by zero
        eq_(culprit_frame['vars']['a'], culprit_frame['vars']['b'], 5)

        eq_(event['severity'], SEVERITY.ERROR)