def test_delete_simple(): rdz = Rediz(**REDIZ_TEST_CONFIG) name = rdz.random_name() write_key = BELLEHOOD_BAT title = {'name': name, 'write_key': write_key} assert rdz.set(value="42", **title) dump(title) v = rdz.get(name) assert v == "42" rdz.delete(**title) time.sleep(1.1) assert rdz.get(name) is None
def test_set_repeatedly(): rdz = Rediz(**REDIZ_TEST_CONFIG) title = { "name": "3912eb73-f5e6-4f5e-9674-1a320779b7d9.json", "write_key": TASTEABLE_BEE } assert rdz.set(value="17", **title) is not None assert rdz.set(value="11", **title) is not None assert rdz.set(value="14", **title) is not None assert rdz.set(value="12", **title) is not None assert rdz.set(value="11", **title) is not None assert rdz.set(value="10", **title) is not None assert rdz.get(title["name"]) == "10" rdz.delete(**title)
def test_set_integer(): rdz = Rediz(**REDIZ_TEST_CONFIG) title = { "name": "3912eb73-f5e6-4f5e-9674-1a320779b7d9.json", "write_key": BELLEHOOD_BAT } rdz.delete(**title) # Previous run res = rdz._pipelined_set(values=[25], names=[title["name"]], write_keys=[title["write_key"]], budgets=[1]) dump(res) assert res["executed"][0]["value"] == 25 access = { "name": "3912eb73-f5e6-4f5e-9674-1a320779b7d9.json", "write_key": TASTEABLE_BEE, "value": 17 } assert rdz.set(**access) is not None rdz._delete_implementation(access["name"]) time.sleep(0.15) assert not rdz.exists(access["name"])
def subscription_example(plural=False, instant_recall=False): """ We subscribe first to one publisher and then to 50 at once, and verify propagation and cleanup after delete/unsubscribe """ rdz = Rediz(instant_recall=instant_recall, **REDIZ_TEST_CONFIG) assert not rdz.get_subscriptions(name='non-existent-asdfaf.json') PUBLISHER = 'PUBLISQHER_plural_' + str( plural) + '3b4e229a-ffb4-4fc2-8370-c147944aa2b.json' SUBSCRIBER = 'SUBSCRIIBER_plural_' + str( plural) + 'ed2b4f6-c6bd-464c-a9e9-322e0c3147.json' PUBLISHER_write_key = BELLEHOOD_BAT if plural else TASTEABLE_BEE SUBSCRIBER_write_key = SHOOTABLE_CAT if plural else BABLOH_CATTLE rdz._delete_implementation(PUBLISHER, SUBSCRIBER) assert rdz.set(name=SUBSCRIBER, value="some value", write_key=SUBSCRIBER_write_key) assert rdz.set(name=SUBSCRIBER, value="some value", write_key=SUBSCRIBER_write_key) assert rdz.set(name=PUBLISHER, value="some other value", write_key=PUBLISHER_write_key) if plural: rdz.msubscribe(sources=[PUBLISHER], name=SUBSCRIBER, write_key=SUBSCRIBER_write_key) else: rdz.subscribe(source=PUBLISHER, name=SUBSCRIBER, write_key=SUBSCRIBER_write_key) subscriptions = rdz.get_subscriptions(name=SUBSCRIBER) assert PUBLISHER in subscriptions subscribers = rdz.get_subscribers(name=PUBLISHER) assert SUBSCRIBER in subscribers # Check propagation assert rdz.set(name=PUBLISHER, value="propagate this", write_key=PUBLISHER_write_key) # Should trigger propagation messages = rdz.messages(name=SUBSCRIBER, write_key=SUBSCRIBER_write_key) assert messages[PUBLISHER] == "propagate this" # Test removal rdz.unsubscribe(name=SUBSCRIBER, source=PUBLISHER, write_key=SUBSCRIBER_write_key) subscriptions = rdz.get_subscriptions(name=SUBSCRIBER) assert PUBLISHER not in subscriptions subscribers = rdz.get_subscribers(name=PUBLISHER) assert SUBSCRIBER not in subscribers # Test re-subscribe rdz.subscribe(source=PUBLISHER, name=SUBSCRIBER, write_key=SUBSCRIBER_write_key) # Check propagation assert rdz.set(name=PUBLISHER, value="propagate this", write_key=PUBLISHER_write_key) # Should trigger propagation messages = rdz.messages(name=SUBSCRIBER, write_key=SUBSCRIBER_write_key) assert messages[PUBLISHER] == "propagate this" # Test removal with delete ... subscribers = rdz.get_subscribers(name=PUBLISHER) subscriptions = rdz.get_subscriptions(name=SUBSCRIBER) rdz.delete(name=SUBSCRIBER, write_key=SUBSCRIBER_write_key) subscriptions = rdz.get_subscriptions(name=SUBSCRIBER) subscribers = rdz.get_subscribers(name=PUBLISHER) assert not subscriptions assert SUBSCRIBER not in subscribers # Multiple sources publishers = dict() NUM_PUBLISHERS = 50 for k in range(NUM_PUBLISHERS): source = 'PUBLISHER_plural_' + ( str(plural).lower()) + '-number_' + str(k) + '__3b4e944aa2b.json' write_key = rdz.create_key(difficulty=6) publishers[source] = write_key sources = list(publishers.keys()) write_keys = list(publishers.values()) values = list(range(NUM_PUBLISHERS)) assert rdz.set( name=SUBSCRIBER, value="I am back again", write_key=SUBSCRIBER_write_key) # Should trigger propagation budgets = [3 for _ in sources] rdz.mset(names=sources, values=values, write_keys=write_keys, budgets=budgets) rdz.mset(names=sources, values=values, write_keys=write_keys, budgets=budgets) values_back = rdz.mget(names=sources) assert all(int(v1) == int(v2) for v1, v2 in zip(values, values_back)) m_res = rdz.msubscribe(name=SUBSCRIBER, sources=sources, write_key=SUBSCRIBER_write_key) assert m_res == len(sources) subscriptions = rdz.get_subscriptions(name=SUBSCRIBER) assert all(source in subscriptions for source in sources) for source, write_key in publishers.items(): subscribers = rdz.get_subscribers(name=source) assert SUBSCRIBER in subscribers subscribers1 = rdz.get( rdz.SUBSCRIBERS + source) # 'publisher_plural_true-number_0__3b4e944aa2b.json' assert SUBSCRIBER in subscribers1 # Propagate ... changed_values = [int(2 * v) for v in values] budgets = [2 for v in values] rdz.mset(names=sources, write_keys=write_keys, values=changed_values, budgets=budgets) messages = rdz.messages(name=SUBSCRIBER, write_key=SUBSCRIBER_write_key) for source, v in zip(sources, changed_values): assert messages[source] == str(v) # One more time with feeling .... changed_values = [int(3 * v) for v in values] rdz.mset(names=sources, write_keys=write_keys, values=changed_values, budgets=budgets) messages = rdz.messages(name=SUBSCRIBER, write_key=SUBSCRIBER_write_key) for source, v in zip(sources, changed_values): assert messages[source] == str(v) # Multiple delete of sources assert rdz.client.exists(*sources) == NUM_PUBLISHERS rdz.mdelete(names=sources, write_keys=write_keys) # Expires but does not delete time.sleep(0.15) # Redis checks every 0.1 seconds (probably) assert rdz.client.exists( * sources) < 10, "Fail could be bad luck" # Most will be deleted by now. for source, write_key in publishers.items(): assert not rdz.get_subscribers(name=source) subscriptions = rdz.get_subscriptions(SUBSCRIBER) for source in sources: assert source not in subscriptions subscriptions = rdz.get_subscriptions(name=SUBSCRIBER) for source in sources: assert source not in subscriptions # Messages may persist or not depending on settings messages = rdz.messages(name=SUBSCRIBER, write_key=SUBSCRIBER_write_key) if rdz._INSTANT_RECALL: for source in sources: assert source not in messages else: assert len(messages) == NUM_PUBLISHERS rdz.delete(name=PUBLISHER, write_key=PUBLISHER_write_key) rdz.delete(name=SUBSCRIBER, write_key=SUBSCRIBER_write_key)