Esempio n. 1
0
async def test_flags_setting_reject_default(fake_heksher_service, monkeypatch,
                                            caplog):
    monkeypatch.setattr(fake_heksher_service, 'context_features',
                        ['a', 'b', 'c'])
    monkeypatch.setitem(fake_heksher_service.declare_responses, 'c',
                        {'outcome': 'created'})

    class Color(IntFlag):
        blue = auto()
        red = auto()
        green = auto()

    c = Setting('c', Color, 'abc', default_value=Color(0))
    with fake_heksher_service.query_rules.patch(
            JSONResponse({
                'settings': {
                    'c': {
                        'rules': [{
                            'context_features': [['a', 'f']],
                            'value': ['green', 'blue'],
                            'rule_id': 1
                        }],
                        'default_value': [['blank']]
                    }
                }
            })):
        caplog.clear()
        with assert_logs(caplog, WARNING):
            async with AsyncHeksherClient(fake_heksher_service.local_url(),
                                          1000, ['a', 'b', 'c']):
                assert c.get(a='re', b='', c='') == Color(0)
Esempio n. 2
0
async def test_redundant_defaults(fake_heksher_service, caplog, monkeypatch):
    monkeypatch.setattr(fake_heksher_service, 'context_features',
                        ['a', 'b', 'c'])
    monkeypatch.setitem(fake_heksher_service.declare_responses, 'cache_size',
                        {'outcome': 'created'})

    setting = Setting('cache_size', int, ['b', 'c'], 50)
    with fake_heksher_service.query_rules.patch(
            JSONResponse({
                'settings': {
                    'cache_size': {
                        'rules': [{
                            'context_features': [['b', 'B']],
                            'value': 100,
                            'rule_id': 1
                        }],
                        'default_value':
                        100
                    }
                }
            })):
        with assert_logs(caplog, WARNING):
            async with AsyncHeksherClient(fake_heksher_service.local_url(),
                                          1000, ['a', 'b', 'c']) as client:
                client.set_defaults(b='B', d='im redundant')
                assert setting.get(c='') == 100
Esempio n. 3
0
def test_collate_conflict(caplog):
    expected = {
        'A0': {
            'B0': {
                None: 2
            },
            None: {
                None: 5
            }
        },
        None: {
            'B1': {
                None: 3
            },
            None: {
                None: 0
            }
        }
    }
    with assert_logs(caplog, ERROR):
        assert collate_rules('abc', [
            ([], 0),
            ([('a', 'A0')], 1),
            ([('a', 'A0'), ('b', 'B0')], 2),
            ([('b', 'B1')], 3),
            ([('a', 'A0')], 5),
        ]) == expected
Esempio n. 4
0
async def test_heksher_unreachable(caplog):
    setting = Setting('cache_size', int, ['b', 'c'], 50)
    caplog.clear()
    with assert_logs(caplog, ERROR), raises(HTTPError):
        async with AsyncHeksherClient('http://notreal.fake.notreal', 10000000,
                                      ['a', 'b', 'c']):
            pass
    assert setting.get(b='', c='') == 50
def test_cf_mismatch(fake_heksher_service, caplog, monkeypatch, expected):
    monkeypatch.setattr(fake_heksher_service, 'context_features',
                        ['a', 'b', 'c'])

    with assert_logs(caplog, WARNING):
        with ThreadHeksherClient(fake_heksher_service.local_url(), 1000,
                                 expected) as client:
            assert client._context_features == expected
def test_heksher_unreachable(caplog):
    setting = Setting('cache_size', int, ['b', 'c'], 50)

    with assert_logs(caplog, ERROR):
        with ThreadHeksherClient('http://notreal.fake.notreal', 10000,
                                 ['a', 'b', 'c']):
            pass
    assert setting.get(b='', c='') == 50
Esempio n. 7
0
async def test_outdated_declaration(fake_heksher_service, monkeypatch, caplog):
    monkeypatch.setattr(fake_heksher_service, 'context_features',
                        ['a', 'b', 'c'])
    monkeypatch.setitem(fake_heksher_service.declare_responses, 'cache_size', {
        'outcome': 'outdated',
        'latest_version': '2.0',
        'differences': []
    })

    setting = Setting('cache_size', int, ['b', 'c'], 50)

    with assert_logs(caplog, WARNING):
        async with AsyncHeksherClient(fake_heksher_service.local_url(),
                                      10000000, ['a', 'b', 'c']):
            pass
Esempio n. 8
0
def test_multi_switch(caplog):
    a = Setting('a', int, 'abcx', default_value=-1)
    c1 = SyncStubHeksherClient()
    c1.set_defaults(a='', b='', c='')
    c1.set_as_main()
    c1.patch(a, 10)
    assert a.get(x='') == 10
    heksher.main_client.Main = TemporaryClient()

    c2 = SyncStubHeksherClient()
    c2.set_defaults(a='', b='', c='')
    c2.set_as_main()
    with assert_logs(caplog, WARNING):
        c2.patch(a, [
            Rule({'x': '0'}, 0),
            Rule({'x': '1'}, 1)
        ])
    assert a.get(x='0') == 0
    assert a.get(x='1') == 1
    assert a.get(x='15') == -1
Esempio n. 9
0
async def test_outdated_declaration_different_default(fake_heksher_service,
                                                      monkeypatch, caplog):
    monkeypatch.setattr(fake_heksher_service, 'context_features',
                        ['a', 'b', 'c'])
    monkeypatch.setitem(
        fake_heksher_service.declare_responses, 'cache_size', {
            'outcome':
            'outdated',
            'latest_version':
            '2.0',
            'differences': [{
                'level': 'minor',
                'attribute': 'default_value',
                'latest_value': 100
            }]
        })

    setting = Setting('cache_size', int, ['b', 'c'], 50)

    with assert_logs(caplog, WARNING):
        async with AsyncHeksherClient(fake_heksher_service.local_url(),
                                      10000000, ['a', 'b', 'c']):
            assert setting.get(b='', c='') == 100
Esempio n. 10
0
async def test_switch_main_different_tracking(fake_heksher_service,
                                              monkeypatch, caplog):
    monkeypatch.setattr(fake_heksher_service, 'context_features', ['a', 'b'])
    monkeypatch.setitem(fake_heksher_service.declare_responses, 'conf1',
                        {'outcome': 'created'})
    monkeypatch.setitem(fake_heksher_service.declare_responses, 'conf2',
                        {'outcome': 'created'})
    monkeypatch.setitem(fake_heksher_service.declare_responses, 'conf3',
                        {'outcome': 'created'})
    setting1 = Setting('conf1', int, ['a'], 74)
    client1 = AsyncHeksherClient(fake_heksher_service.local_url(), 10000000,
                                 ['a', 'b'])
    client1.track_contexts(a=['a', 'b'], b=TRACK_ALL)
    await client1.set_as_main()
    setting2 = Setting('conf2', int, ['b'], 26)
    with fake_heksher_service.query_rules.patch(
            JSONResponse({
                'settings': {
                    'conf1': {
                        'rules': [{
                            'context_features': [],
                            'value': 5,
                            'rule_id': 1
                        }],
                        'default_value':
                        74
                    },
                    'conf2': {
                        'rules': [{
                            'context_features': [],
                            'value': 4,
                            'rule_id': 2
                        }],
                        'default_value':
                        26
                    }
                }
            })):
        await client1.reload()
        assert len(client1._tracked_settings) == 2
        assert setting1.get(a='') == 5
        assert setting2.get(b='') == 4
        client2 = AsyncHeksherClient(fake_heksher_service.local_url(),
                                     10000000, ['a', 'b'])
        client2.track_contexts(a=['a', 'b', 'c'], b="shoobidoobi")
        await client1.aclose()
        with assert_logs(
                caplog, WARNING
        ):  # it should warn you you're doing bad things, and that your tracking differs
            await client2.set_as_main()
    setting3 = Setting('conf3', int, ['b'], 59)
    with fake_heksher_service.query_rules.patch(
            JSONResponse({
                'settings': {
                    'conf1': {
                        'rules': [{
                            'context_features': [],
                            'value': 5,
                            'rule_id': 1
                        }],
                        'default_value':
                        74,
                    },
                    'conf2': {
                        'rules': [{
                            'context_features': [],
                            'value': 4,
                            'rule_id': 2
                        }],
                        'default_value':
                        26,
                    },
                    'conf3': {
                        'rules': [{
                            'context_features': [],
                            'value': 3,
                            'rule_id': 3
                        }],
                        'default_value':
                        59,
                    }
                }
            })):
        await client2.reload()
        assert setting1.get(a='') == 5
        assert setting2.get(b='') == 4
        assert setting3.get(b='') == 3
        await client2.aclose()
Esempio n. 11
0
async def test_redundant_trackings(caplog):
    client = AsyncHeksherClient('bla', 0, ['a', 'b', 'c'])
    with assert_logs(caplog, WARNING):
        client.track_contexts(a='j', d='t')
Esempio n. 12
0
def test_get_from_temp(caplog):
    a = Setting('a', int, 'abc', default_value=0)
    with assert_logs(caplog, INFO):
        assert a.get() == 0
Esempio n. 13
0
def test_collate_conflict_nill(caplog):
    with assert_logs(caplog, ERROR):
        assert collate_rules('', [([], 0), ([], 1)]) == 1