コード例 #1
0
def test_test_context():

    assert testing.get_sentry_messages() == []

    logger = logging.getLogger('test_test_context')
    with testing.TestContext() as ctx:
        logger.info('foo', extra={'a': 1})
        logger.warning('bar', extra={'b': 2})
        talisker.statsd.get_client().timing('statsd', 3)
        talisker.sentry.get_client().capture(
            'Message',
            message='test',
            extra={'foo': 'bar'},
        )

    ctx.assert_log(name=logger.name, msg='foo', level='info', extra={'a': 1})
    ctx.assert_log(name=logger.name,
                   msg='bar',
                   level='warning',
                   extra={'b': 2})

    with pytest.raises(AssertionError) as exc:
        ctx.assert_log(name=logger.name,
                       msg='XXX',
                       level='info',
                       extra={"baz": 1})

    assert str(exc.value) == textwrap.dedent("""
        Could not find log out of {0} logs.
        Search terms that could not be found:
            msg=XXX
            extra["baz"]=1
    """).strip().format(len(ctx.logs), 'u' if sys.version_info[0] == 2 else '')

    with pytest.raises(AssertionError) as exc:
        ctx.assert_not_log(name=logger.name, msg='foo', level='info')

    assert str(exc.value) == textwrap.dedent("""
        Found log matching the following:
            level={0}'info'
            msg={0}'foo'
            name='test_test_context'
    """).strip().format('u' if sys.version_info[0] == 2 else '')

    assert ctx.statsd == ['statsd:3.000000|ms']

    # ensure there are not sentry messages left over
    assert testing.get_sentry_messages() == []
    assert len(ctx.sentry) == 1
    assert ctx.sentry[0]['message'] == 'test'
    # check that extra values have been decoded correctly
    assert ctx.sentry[0]['extra']['foo'] == 'bar'
コード例 #2
0
ファイル: test_sentry.py プロジェクト: hackoder/talisker
def test_talisker_client_defaults_explicit_config(config):
    config['TALISKER_ENV'] = 'production'
    config['TALISKER_UNIT'] = 'talisker-1'
    config['TALISKER_DOMAIN'] = 'example.com'

    # raven flask integration passes in all possible kwargs as None
    kwargs = {
        'release': 'release',
        'hook_libraries': ['requests'],
        'site': 'site',
        'environment': 'environment',
        'name': 'name',
    }
    client = create_test_client(**kwargs)

    # this is unpleasant, but it saves us mocking
    assert raven.breadcrumbs.install_logging_hook.called is False
    assert raven.breadcrumbs._hook_requests.called is True
    assert raven.breadcrumbs._install_httplib.called is False

    # check message
    try:
        raise Exception('test')
    except Exception:
        client.captureException()

    messages = testing.get_sentry_messages(client)
    data = messages[0]

    assert data['release'] == 'release'
    assert data['environment'] == 'environment'
    assert data['server_name'] == 'name'
    assert data['tags']['site'] == 'site'
コード例 #3
0
def test_flask_sentry_app_tag(flask_app):
    sentry = talisker.flask.sentry(flask_app)
    response = get_url(flask_app, '/')

    assert response.status_code == 500
    msgs = get_sentry_messages(sentry.client)
    assert msgs[0]['tags']['flask_app'] == flask_app.name
コード例 #4
0
ファイル: test_sentry.py プロジェクト: canonical-ols/talisker
def test_talisker_client_defaults_explicit_config(config):
    config['TALISKER_ENV'] = 'production'
    config['TALISKER_UNIT'] = 'talisker-1'
    config['TALISKER_DOMAIN'] = 'example.com'

    # raven flask integration passes in all possible kwargs as None
    kwargs = {
        'release': 'release',
        'hook_libraries': ['requests'],
        'site': 'site',
        'environment': 'environment',
        'name': 'name',
    }
    client = create_test_client(**kwargs)

    # this is unpleasant, but it saves us mocking
    assert raven.breadcrumbs.install_logging_hook.called is False
    assert raven.breadcrumbs._hook_requests.called is True
    assert raven.breadcrumbs._install_httplib.called is False

    # check message
    try:
        raise Exception('test')
    except Exception:
        client.captureException()

    messages = testing.get_sentry_messages(client)
    data = messages[0]

    assert data['release'] == 'release'
    assert data['environment'] == 'environment'
    assert data['server_name'] == 'name'
    assert data['tags']['site'] == 'site'
コード例 #5
0
def test_flask_sentry_app_config_ignore_exc(flask_app, monkeypatch, context):
    monkeypatch.setitem(flask_app.config, 'SENTRY_CONFIG',
                        {'ignore_exceptions': ['IgnoredException']})
    sentry = talisker.flask.sentry(flask_app)

    assert 'IgnoredException' in sentry.client.ignore_exceptions

    response = get_url(flask_app, '/ignored')

    assert response.status_code == 500
    assert len(get_sentry_messages(sentry.client)) == 0
コード例 #6
0
def test_flask_sentry_sends_message(flask_app):
    sentry = talisker.flask.sentry(flask_app)
    response = get_url(flask_app, '/')

    assert response.status_code == 500
    msgs = get_sentry_messages(sentry.client)
    assert len(msgs) == 1
    msg = msgs[0]
    if 'culprit' in msg:
        assert msg['culprit'] == '/'
    else:
        assert msg['transaction'] == '/'
コード例 #7
0
def test_flask_sentry_uses_app_config_to_set_name(flask_app, monkeypatch):
    monkeypatch.setitem(flask_app.config, 'SENTRY_NAME', 'SomeName')
    sentry = talisker.flask.sentry(flask_app)
    assert sentry.client.name == 'SomeName'

    response = get_url(flask_app, '/')

    assert response.status_code == 500
    msgs = get_sentry_messages(sentry.client)
    assert len(msgs) == 1
    msg = msgs[0]
    assert msg['server_name'] == 'SomeName'
コード例 #8
0
ファイル: test_sentry.py プロジェクト: hackoder/talisker
def test_logs_ignored():
    client = create_test_client()

    client.context.clear()
    # set up a root logger with a formatter
    logging.getLogger('talisker.slowqueries').info('talisker.slowqueries')
    logging.getLogger('talisker.requests').info('talisker.requests')
    logging.getLogger('talisker').info('talisker')
    try:
        raise Exception('test')
    except Exception:
        client.captureException()

    messages = testing.get_sentry_messages(client)
    data = messages[0]
    assert len(data['breadcrumbs']) == 1
    crumb = data['breadcrumbs']['values'][0]
    assert crumb['message'] == 'talisker'
    assert crumb['category'] == 'talisker'
コード例 #9
0
ファイル: test_sentry.py プロジェクト: canonical-ols/talisker
def test_logs_ignored():
    client = create_test_client()

    client.context.clear()
    # set up a root logger with a formatter
    logging.getLogger('talisker.slowqueries').info('talisker.slowqueries')
    logging.getLogger('talisker.requests').info('talisker.requests')
    logging.getLogger('talisker').info('talisker')
    try:
        raise Exception('test')
    except Exception:
        client.captureException()

    messages = testing.get_sentry_messages(client)
    data = messages[0]
    assert len(data['breadcrumbs']) == 1
    crumb = data['breadcrumbs']['values'][0]
    assert crumb['message'] == 'talisker'
    assert crumb['category'] == 'talisker'
コード例 #10
0
def test_talisker_client_defaults(config, context):
    config['TALISKER_ENV'] = 'production'
    config['TALISKER_UNIT'] = 'talisker-1'
    config['TALISKER_DOMAIN'] = 'example.com'

    client = create_test_client()
    context.assert_log(msg='configured raven')

    # check client side
    assert (list(sorted(client.processors))
            == list(sorted(talisker.sentry.default_processors)))
    # this is unpleasant, but it saves us mocking
    assert raven.breadcrumbs.install_logging_hook.called is False
    assert raven.breadcrumbs._hook_requests.called is False
    assert raven.breadcrumbs._install_httplib.called is False

    # check message
    try:
        client.extra_context({'start_time': time.time() - 1})
        client.user_context({
            'id': 'id',
            'email': 'email',
            'username': '******'
        })
        raven.breadcrumbs.record(msg='foo')
        raise Exception('test')
    except Exception:
        client.captureException()

    messages = testing.get_sentry_messages(client)
    data = messages[0]

    assert data['release'] == 'test-rev-id'
    assert data['tags'] == {
        'environment': 'production',
        'unit': 'talisker-1',
        'domain': 'example.com',
    }
    assert data['user'] == {'id': 'id'}
    assert all(
        c['data']['start'] == 1000 for c in data['breadcrumbs']['values']
    )
コード例 #11
0
ファイル: test_sentry.py プロジェクト: canonical-ols/talisker
def test_talisker_client_defaults(config, context):
    config['TALISKER_ENV'] = 'production'
    config['TALISKER_UNIT'] = 'talisker-1'
    config['TALISKER_DOMAIN'] = 'example.com'

    client = create_test_client()
    context.assert_log(msg='configured raven')

    # check client side
    assert (list(sorted(client.processors))
            == list(sorted(talisker.sentry.default_processors)))
    # this is unpleasant, but it saves us mocking
    assert raven.breadcrumbs.install_logging_hook.called is False
    assert raven.breadcrumbs._hook_requests.called is False
    assert raven.breadcrumbs._install_httplib.called is False

    # check message
    try:
        client.extra_context({'start_time': time.time() - 1})
        client.user_context({
            'id': 'id',
            'email': 'email',
            'username': '******'
        })
        raven.breadcrumbs.record(msg='foo')
        raise Exception('test')
    except Exception:
        client.captureException()

    messages = testing.get_sentry_messages(client)
    data = messages[0]

    assert data['release'] == 'test-rev-id'
    assert data['tags'] == {
        'environment': 'production',
        'unit': 'talisker-1',
        'domain': 'example.com',
    }
    assert data['user'] == {'id': 'id'}
    assert all(
        c['data']['start'] == 1000 for c in data['breadcrumbs']['values']
    )
コード例 #12
0
ファイル: test_sentry.py プロジェクト: hackoder/talisker
def test_talisker_client_sanitizes(config):
    # raven flask integration passes in all possible kwargs as None
    kwargs = {'sanitize_keys': ['foo', 'bar']}
    client = create_test_client(**kwargs)

    try:
        client.extra['foo'] = 'foo'
        client.extra['bar'] = 'bar'
        client.extra['sessionid'] = 'sessionid'
        client.extra['csrftoken'] = 'csrftoken'
        raise Exception('test')
    except Exception:
        client.captureException()

    messages = testing.get_sentry_messages(client)
    data = messages[0]

    assert data['extra']['foo'] == '********'
    assert data['extra']['bar'] == '********'
    assert data['extra']['sessionid'] == '********'
    assert data['extra']['csrftoken'] == '********'
コード例 #13
0
ファイル: test_sentry.py プロジェクト: canonical-ols/talisker
def test_talisker_client_sanitizes(config):
    # raven flask integration passes in all possible kwargs as None
    kwargs = {'sanitize_keys': ['foo', 'bar']}
    client = create_test_client(**kwargs)

    try:
        client.extra['foo'] = 'foo'
        client.extra['bar'] = 'bar'
        client.extra['sessionid'] = 'sessionid'
        client.extra['csrftoken'] = 'csrftoken'
        raise Exception('test')
    except Exception:
        client.captureException()

    messages = testing.get_sentry_messages(client)
    data = messages[0]

    assert data['extra']['foo'] == '********'
    assert data['extra']['bar'] == '********'
    assert data['extra']['sessionid'] == '********'
    assert data['extra']['csrftoken'] == '********'