From afa08146862f69e25f852b9c1bd826de13300bed Mon Sep 17 00:00:00 2001 From: Alexander Aghili <alexander.w.aghili@gmail.com> Date: Tue, 11 Mar 2025 17:39:36 -0700 Subject: [PATCH] updated the view formatting --- tests/basic/basic.py | 48 ++++++++++++++++++++++++++++++-------------- utils/containers.py | 8 +++++++- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/tests/basic/basic.py b/tests/basic/basic.py index c407b95..627cd4b 100644 --- a/tests/basic/basic.py +++ b/tests/basic/basic.py @@ -4,26 +4,44 @@ from ...utils.util import Logger from ..helper import KVSMultiClient, KVSTestFixture from ...utils.kvs_api import DEFAULT_TIMEOUT +def basic_kv_view_accept(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, 2])) + fx.broadcast_view(conductor.get_shard_view()) + + r = c.put(0, "x", "1") + assert r.ok, f"expected ok for new key, got {r.status_code}" + + r = c.put(1, "y", "2") + assert r.ok, f"expected ok for new key, got {r.status_code}" + + r = c.get(0, "x") + assert r.ok, f"expected ok for get, got {r.status_code}" + assert r.json()["value"] == "1", f"wrong value returned: {r.json()}" + + r = c.get(1, "x") + assert r.ok, f"expected ok for get, got {r.status_code}" + assert r.json()["value"] == "1", f"wrong value returned: {r.json()}" + + r = c.get(0, "y") + assert r.ok, f"expected ok for get, got {r.status_code}" + assert r.json()["value"] == "2", f"wrong value returned: {r.json()}" + + r = c.get(1, "y") + assert r.ok, f"expected ok for get, got {r.status_code}" + assert r.json()["value"] == "2", f"wrong value returned: {r.json()}" + + return True, 0 + def basic_kv_1(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, 2)) + conductor.add_shard("shard1", conductor.get_nodes([0])) + conductor.add_shard("shard2", conductor.get_nodes([1])) fx.broadcast_view(conductor.get_shard_view()) - # examples of modifying shards - # conductor.add_shard("shard2", conductor.get_nodes(2, 3)) - # fx.broadcast_view(conductor.get_shard_view()) - # - # conductor.add_node_to_shard("shard2", conductor.get_node(3)) - # fx.broadcast_view(conductor.get_shard_view()) - # - # conductor.remove_node_from_shard("shard1", conductor.get_node(0)) - # fx.broadcast_view(conductor.get_shard_view()) - # - # conductor.remove_shard("shard1") - # fx.broadcast_view(conductor.get_shard_view()) - r = c.put(0, "x", "1") assert r.ok, f"expected ok for new key, got {r.status_code}" @@ -49,4 +67,4 @@ def basic_kv_1(conductor: ClusterConductor, dir, log: Logger): return True, 0 -BASIC_TESTS = [TestCase("basic_kv_1", basic_kv_1)] +BASIC_TESTS = [TestCase("basic_kv_1", basic_kv_1), TestCase("basic_kv_view_accept", basic_kv_view_accept)] diff --git a/utils/containers.py b/utils/containers.py index 95af928..dae84e4 100644 --- a/utils/containers.py +++ b/utils/containers.py @@ -463,8 +463,14 @@ class ClusterConductor: def get_node(self, index): return self.nodes[index] + def get_nodes(self, node_indexes: List[int]): + node_list = [] + for i in node_indexes: + node_list.append(self.nodes[i]) + return node_list + # from `start`` to `end`. Note that `end` is not inclusive - def get_nodes(self, start=0, end=None): + def get_nodes_seq(self, start=0, end=None): if start < 0: raise ValueError("Start index cannot be negative.") if end is not None: -- GitLab