Пример #1
0
def test_store_data_set_ordering():
    store = CapturingFeatureStore()
    config = Config(
        sdk_key='SDK_KEY',
        send_events=False,
        feature_store=store,
        update_processor_class=DependencyOrderingDataUpdateProcessor)
    LDClient(config=config)

    data = store.received_data
    assert data is not None
    assert len(data) == 2
    keys = list(data.keys())
    values = list(data.values())

    assert keys[0] == SEGMENTS
    assert len(values[0]) == len(dependency_ordering_test_data[SEGMENTS])

    assert keys[1] == FEATURES
    flags_map = values[1]
    flags_list = list(flags_map.values())
    assert len(flags_list) == len(dependency_ordering_test_data[FEATURES])
    for item_index, item in enumerate(flags_list):
        for prereq in item.get("prerequisites", []):
            prereq_item = flags_map[prereq["key"]]
            prereq_index = flags_list.index(prereq_item)
            if prereq_index > item_index:
                all_keys = (f["key"] for f in flags_list)
                raise Exception(
                    "%s depends on %s, but %s was listed first; keys in order are [%s]"
                    % (item["key"], prereq["key"], item["key"],
                       ", ".join(all_keys)))
Пример #2
0
def test_client_has_null_event_processor_if_send_events_off():
    config = Config(sdk_key="secret",
                    base_uri=unreachable_uri,
                    update_processor_class=MockUpdateProcessor,
                    send_events=False)
    with LDClient(config=config) as client:
        assert isinstance(client._event_processor, NullEventProcessor)
Пример #3
0
def test_defaults():
    config = Config("SDK_KEY",
                    base_uri="http://localhost:3000",
                    defaults={"foo": "bar"},
                    offline=True)
    with LDClient(config=config) as client:
        assert "bar" == client.variation('foo', user, default=None)
Пример #4
0
def test_defaults_and_online_no_default():
    client = LDClient(config=Config(base_uri="http://localhost:3000",
                                    defaults={"foo": "bar"},
                                    event_consumer_class=MockConsumer,
                                    feature_requester_class=MockFeatureRequester))
    assert "jim" == client.variation('baz', user, default="jim")
    assert wait_for_event(client, lambda e: e['kind'] == 'feature' and e['key'] == u'baz' and e['user'] == user)
Пример #5
0
def test_client_has_streaming_processor_by_default():
    config = Config(sdk_key="secret",
                    base_uri=unreachable_uri,
                    stream_uri=unreachable_uri,
                    send_events=False)
    with LDClient(config=config, start_wait=0) as client:
        assert isinstance(client._update_processor, StreamingUpdateProcessor)
Пример #6
0
def test_client_has_polling_processor_if_streaming_is_disabled():
    config = Config(sdk_key="secret",
                    stream=False,
                    base_uri=unreachable_uri,
                    stream_uri=unreachable_uri,
                    send_events=False)
    with LDClient(config=config, start_wait=0) as client:
        assert isinstance(client._update_processor, PollingUpdateProcessor)
Пример #7
0
def make_client(store = InMemoryFeatureStore()):
    return LDClient(config=Config(sdk_key = 'SDK_KEY',
                                  base_uri=unreachable_uri,
                                  events_uri=unreachable_uri,
                                  stream_uri=unreachable_uri,
                                  event_processor_class=MockEventProcessor,
                                  update_processor_class=MockUpdateProcessor,
                                  feature_store=store))
Пример #8
0
def test_sse_init(stream):
    stream.queue.put(Event(event="put", data=feature("foo", "jim")))
    client = LDClient(
        "apikey",
        Config(feature_requester_class=partial(create_redis_ldd_requester,
                                               expiration=0),
               events=False))
    wait_until(lambda: client.toggle("foo", user('xyz'), "blah") == "jim",
               timeout=10)
Пример #9
0
def test_defaults_and_online_no_default():
    my_client = LDClient(
        config=Config(base_uri="http://localhost:3000",
                      defaults={"foo": "bar"},
                      event_processor_class=MockEventProcessor,
                      update_processor_class=MockUpdateProcessor))
    assert "jim" == my_client.variation('baz', user, default="jim")
    e = get_first_event(my_client)
    assert e['kind'] == 'feature' and e['key'] == u'baz' and e['user'] == user
Пример #10
0
def test_defaults_and_online():
    expected = "bar"
    my_client = LDClient(config=Config(base_uri="http://localhost:3000",
                                       defaults={"foo": expected},
                                       event_consumer_class=MockConsumer,
                                       feature_requester_class=MockFeatureRequester,
                                       feature_store=InMemoryFeatureStore()))
    actual = my_client.variation('foo', user, default="originalDefault")
    assert actual == expected
    assert wait_for_event(my_client, lambda e: e['kind'] == 'feature' and e['key'] == u'foo' and e['user'] == user)
Пример #11
0
def test_defaults_and_online():
    expected = "bar"
    my_client = LDClient(
        config=Config(base_uri="http://localhost:3000",
                      defaults={"foo": expected},
                      event_processor_class=MockEventProcessor,
                      update_processor_class=MockUpdateProcessor,
                      feature_store=InMemoryFeatureStore()))
    actual = my_client.variation('foo', user, default="originalDefault")
    assert actual == expected
    e = get_first_event(my_client)
    assert e['kind'] == 'feature' and e['key'] == u'foo' and e['user'] == user
Пример #12
0
def test_exception_in_retrieval():
    class ExceptionFeatureRequester(FeatureRequester):

        def __init__(self, *_):
            pass

        def get(self, key, callback):
            raise Exception("blah")

    client = LDClient("API_KEY", Config("http://localhost:3000", defaults={"foo": "bar"},
                                        feature_requester_class=ExceptionFeatureRequester,
                                        consumer_class=MockConsumer))
    assert "bar" == client.toggle('foo', user, default="jim")
    assert wait_for_event(client, lambda e: e['kind'] == 'feature' and e['key'] == u'foo' and e['user'] == user)
Пример #13
0
def test_exception_in_retrieval():
    class ExceptionFeatureRequester(FeatureRequester):
        def __init__(self, *_):
            pass

        def get_all(self):
            raise Exception("blah")

    client = LDClient(config=Config(base_uri="http://localhost:3000",
                                    defaults={"foo": "bar"},
                                    feature_store=InMemoryFeatureStore(),
                                    feature_requester_class=ExceptionFeatureRequester,
                                    event_consumer_class=MockConsumer))
    assert "bar" == client.variation('foo', user, default="jim")
    assert wait_for_event(client, lambda e: e['kind'] == 'feature' and e['key'] == u'foo' and e['user'] == user)
Пример #14
0
def make_ldd_client():
    return LDClient(config=Config(sdk_key="secret",
                                  use_ldd=True,
                                  base_uri=unreachable_uri,
                                  events_uri=unreachable_uri,
                                  stream_uri=unreachable_uri))
Пример #15
0
                u'variations': [{
                    u'value': True,
                    u'weight': 100,
                    u'targets': []
                }, {
                    u'value': False,
                    u'weight': 0,
                    u'targets': []
                }]
            }
        else:
            return None


client = LDClient(config=Config(base_uri="http://localhost:3000",
                                feature_store=MockFeatureStore(),
                                update_processor_class=MockUpdateProcessor))
offline_client = LDClient(config=Config(sdk_key="secret",
                                        base_uri="http://localhost:3000",
                                        feature_store=MockFeatureStore(),
                                        offline=True))
no_send_events_client = LDClient(
    config=Config(sdk_key="secret",
                  base_uri="http://localhost:3000",
                  feature_store=MockFeatureStore(),
                  send_events=False,
                  update_processor_class=MockUpdateProcessor))

user = {u'key': u'xyz', u'custom': {u'bizzle': u'def'}}

numeric_key_user = {}
Пример #16
0
def test_toggle(server):
    server.add_feature("foo", feature("foo", "jim")['foo'])
    client = LDClient("apikey", Config(base_uri=server.url))
    wait_until(lambda: client.toggle("foo", user('xyz'), "blah") == "jim")
Пример #17
0
def make_client(store):
    return LDClient(config=Config(sdk_key='SDK_KEY',
                                  base_uri="http://localhost:3000",
                                  event_processor_class=MockEventProcessor,
                                  update_processor_class=MockUpdateProcessor,
                                  feature_store=store))
Пример #18
0
from ldclient.client import LDClient, Config
from ldclient.event_processor import NullEventProcessor
from ldclient.feature_store import InMemoryFeatureStore
from ldclient.interfaces import UpdateProcessor
from ldclient.versioned_data_kind import FEATURES, SEGMENTS
import pytest
from testing.stub_util import CapturingFeatureStore, MockEventProcessor, MockUpdateProcessor
from testing.sync_util import wait_until

try:
    import queue
except:
    import Queue as queue

client = LDClient(config=Config(base_uri="http://localhost:3000",
                                event_processor_class=MockEventProcessor,
                                update_processor_class=MockUpdateProcessor))
offline_client = LDClient(config=Config(
    sdk_key="secret", base_uri="http://localhost:3000", offline=True))
no_send_events_client = LDClient(
    config=Config(sdk_key="secret",
                  base_uri="http://localhost:3000",
                  update_processor_class=MockUpdateProcessor,
                  send_events=False))

user = {u'key': u'xyz', u'custom': {u'bizzle': u'def'}}


def make_client(store):
    return LDClient(config=Config(sdk_key='SDK_KEY',
                                  base_uri="http://localhost:3000",
Пример #19
0
def test_sse_init(server, stream):
    stream.queue.put(Event(event="put", data=feature("foo", "jim")))
    client = LDClient(
        "apikey",
        Config(stream=True, base_uri=server.url, stream_uri=stream.url))
    wait_until(lambda: client.toggle("foo", user('xyz'), "blah") == "jim")
Пример #20
0
                u'variations': [{
                    u'value': True,
                    u'weight': 100,
                    u'targets': []
                }, {
                    u'value': False,
                    u'weight': 0,
                    u'targets': []
                }]
            }
        else:
            return None


client = LDClient(
    "SDK_KEY", Config("http://localhost:3000",
                      feature_store=MockFeatureStore()))
offline_client = LDClient(
    "secret",
    Config("http://localhost:3000",
           feature_store=MockFeatureStore(),
           offline=True))

user = {u'key': u'xyz', u'custom': {u'bizzle': u'def'}}

numeric_key_user = {}

sanitized_numeric_key_user = {u'key': '33', u'custom': {u'bizzle': u'def'}}


class MockConsumer(object):
    def __init__(self, *_):
Пример #21
0
from builtins import object
import json
from ldclient.client import Config
from ldclient.user_filter import UserFilter

base_config = Config()
config_with_all_attrs_private = Config(all_attributes_private=True)
config_with_some_attrs_private = Config(
    private_attribute_names=[u'firstName', u'bizzle'])

# users to serialize

user = {
    u'key': u'abc',
    u'firstName': u'Sue',
    u'custom': {
        u'bizzle': u'def',
        u'dizzle': u'ghi'
    }
}

user_specifying_own_private_attr = {
    u'key': u'abc',
    u'firstName': u'Sue',
    u'custom': {
        u'bizzle': u'def',
        u'dizzle': u'ghi'
    },
    u'privateAttributeNames': [u'dizzle', u'unused']
}
Пример #22
0
import json
from ldclient.client import Config
from ldclient.user_filter import UserFilter


base_config = Config("fake_sdk_key")
config_with_all_attrs_private = Config("fake_sdk_key", all_attributes_private = True)
config_with_some_attrs_private = Config("fake_sdk_key", private_attribute_names=set([u'firstName', u'bizzle']))

# users to serialize

user = {
    u'key': u'abc',
    u'firstName': u'Sue',
    u'custom': {
        u'bizzle': u'def',
        u'dizzle': u'ghi'
    }
}

user_specifying_own_private_attr = {
    u'key': u'abc',
    u'firstName': u'Sue',
    u'custom': {
        u'bizzle': u'def',
        u'dizzle': u'ghi'
    },
    u'privateAttributeNames': [ u'dizzle', u'unused' ]
}

user_with_unknown_top_level_attrs = {
Пример #23
0
def test_defaults_and_online_no_default():
    client = LDClient("API_KEY", Config("http://localhost:3000", defaults={"foo": "bar"},
                                        feature_requester_class=MockFeatureRequester,
                                        consumer_class=MockConsumer))
    assert "jim" == client.toggle('baz', user, default="jim")
    assert wait_for_event(client, lambda e: e['kind'] == 'feature' and e['key'] == u'baz' and e['user'] == user)
Пример #24
0
def test_defaults():
    client = LDClient("API_KEY", Config("http://localhost:3000", defaults={"foo": "bar"}))
    client.set_offline()
    assert "bar" == client.toggle('foo', user, default=None)
Пример #25
0
                        u'value': True,
                        u'weight': 100,
                        u'targets': []
                    },
                    {
                        u'value': False,
                        u'weight': 0,
                        u'targets': []
                    }
                ]
            }
        else:
            return None


client = LDClient(config=Config(base_uri="http://localhost:3000", feature_store=MockFeatureStore()))
offline_client = LDClient(config=
                          Config(sdk_key="secret", base_uri="http://localhost:3000", feature_store=MockFeatureStore(),
                                 offline=True))

user = {
    u'key': u'xyz',
    u'custom': {
        u'bizzle': u'def'
    }
}

numeric_key_user = {}

sanitized_numeric_key_user = {
    u'key': '33',
Пример #26
0
def test_ctor_both_sdk_keys_set():
    with pytest.raises(Exception):
        config = Config(sdk_key="sdk key a", offline=True)
        LDClient(sdk_key="sdk key b", config=config)
Пример #27
0
def test_defaults():
    client = LDClient(config=Config(base_uri="http://localhost:3000",
                                    defaults={"foo": "bar"},
                                    offline=True))
    assert "bar" == client.variation('foo', user, default=None)
Пример #28
0
                        u'value': True,
                        u'weight': 100,
                        u'targets': []
                    },
                    {
                        u'value': False,
                        u'weight': 0,
                        u'targets': []
                    }
                ]
            })
        else:
            return callback(None)


client = LDClient("API_KEY", Config("http://localhost:3000",
                                    feature_requester_class=MockFeatureRequester))

user = {
    u'key': u'xyz',
    u'custom': {
        u'bizzle': u'def'
    }
}


class MockConsumer(object):
    def __init__(self, *_):
        self._running = False

    def stop(self):
        self._running = False