From a3e304d522623f64890e898b995f3454a1f445fe Mon Sep 17 00:00:00 2001 From: Alexander Aghili <alexander.w.aghili@gmail.com> Date: Thu, 13 Mar 2025 22:20:42 -0700 Subject: [PATCH] added new b asic prozxy --- tests/proxy/basic_proxy.py | 43 +++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/tests/proxy/basic_proxy.py b/tests/proxy/basic_proxy.py index e2a8762..c3c97d7 100644 --- a/tests/proxy/basic_proxy.py +++ b/tests/proxy/basic_proxy.py @@ -4,7 +4,7 @@ from ...utils.util import Logger from ..helper import KVSMultiClient, KVSTestFixture from ...utils.kvs_api import DEFAULT_TIMEOUT -def basic_proxy(conductor: ClusterConductor, dir, log: Logger): +def basic_proxy_one_client(conductor: ClusterConductor, dir, log: Logger): with KVSTestFixture(conductor, dir, log, node_count=4) as fx: c = KVSMultiClient(fx.clients, "client", log) conductor.add_shard("shard1", conductor.get_nodes([0, 1])) @@ -17,18 +17,51 @@ def basic_proxy(conductor: ClusterConductor, dir, log: Logger): node_to_put = 0 base_key = "key" - for i in range(0, 50): + for i in range(0, 300): r = c.put(node_to_put, f"{base_key}{i}", f"{i}", timeout=10) assert r.ok, f"expected ok for new key, got {r.status_code}" node_to_put += 1 node_to_put = node_to_put % 4 - r = c.get_all(0, timeout=10) # should get all of shard 1's keys + r = c.get_all(0, timeout=None) # should get all of shard 1's keys assert r.ok, f"expected ok for get, got {r.status_code}" items = r.json()["items"] keys = items.keys() for key in keys: - r = c.get(2, key, timeout=10) + r = c.get(2, key, timeout=30) + assert r.ok, f"expected ok for get, got {r.status_code}" + assert r.json()["value"] == items[key], f"wrong value returned: {r.json()}" + + return True, "ok" + + +def basic_proxy_many_clients(conductor: ClusterConductor, dir, log: Logger): + with KVSTestFixture(conductor, dir, log, node_count=7) as fx: + c = KVSMultiClient(fx.clients, "client", log) + conductor.add_shard("shard1", conductor.get_nodes([0, 1])) + conductor.add_shard("shard2", conductor.get_nodes([2, 3])) + conductor.add_shard("shard3", conductor.get_nodes([4, 5, 6])) + fx.broadcast_view(conductor.get_shard_view()) + # test 1 + # put 50 keys (at least one proxy expected here) + # get_all() on one shard + # then ask the other shard for that key (proxy MUST happen here) + + node_to_put = 0 + base_key = "key" + for i in range(0, 1000): + c1 = KVSMultiClient(fx.clients, "client", log) + r = c1.put(node_to_put, f"{base_key}{i}", f"{i}", timeout=10) + assert r.ok, f"expected ok for new key, got {r.status_code}" + node_to_put += 1 + node_to_put = node_to_put % 7 + + r = c.get_all(0, timeout=None) # should get all of shard 1's keys + assert r.ok, f"expected ok for get, got {r.status_code}" + items = r.json()["items"] + keys = items.keys() + for key in keys: + r = c.get(2, key, timeout=30) assert r.ok, f"expected ok for get, got {r.status_code}" assert r.json()["value"] == items[key], f"wrong value returned: {r.json()}" @@ -44,4 +77,4 @@ def partitioned_shards(conductor: ClusterConductor, dir, log: Logger): # have a time out where if it doesnt hang after like 50 keys, then its just wrong. return True, "ok" -PROXY_TESTS = [TestCase("basic_proxy", basic_proxy)] \ No newline at end of file +PROXY_TESTS = [TestCase("basic_proxy_one_client", basic_proxy_one_client), TestCase("basic_proxy_many_clients", basic_proxy_many_clients)] -- GitLab