From 6b8800760d30a2b145f8947a9d04b9b1e008b61d Mon Sep 17 00:00:00 2001 From: Ekaterina Chernitsyna Date: Wed, 18 Oct 2023 13:54:58 +0300 Subject: [PATCH] Add policy REP 1 IN SPB REP 1 IN MSK REP 3 --- .../testsuites/container/test_policy.py | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/pytest_tests/testsuites/container/test_policy.py b/pytest_tests/testsuites/container/test_policy.py index df62703..816e9df 100644 --- a/pytest_tests/testsuites/container/test_policy.py +++ b/pytest_tests/testsuites/container/test_policy.py @@ -1387,11 +1387,58 @@ class TestPolicy(ClusterTestBase): with allure.step(f"Delete the container"): delete_container(wallet=default_wallet, cid=cid, shell=self.shell, endpoint=endpoint) + @pytest.mark.policy + @allure.title("Policy: REP 1 IN SPB REP 1 IN MSK REP 3") + def test_policy_rep_1_in_spb_rep_1_in_msk_rep_3( + self, + default_wallet, + simple_object_size: ObjectSize, + ): + """ + This test checks object's copies based on container's placement policy: REP 1 IN SPB REP 1 IN MSK REP 3. + """ + placement_rule = "REP 1 IN SPB REP 1 IN MSK REP 3 CBF 1 SELECT 2 FROM LED AS SPB SELECT 2 FROM MOW AS MSK FILTER Location EQ 'Saint Petersburg (ex Leningrad)' AS LED FILTER Location EQ Moskva AS MOW" + file_path = generate_file(simple_object_size.value) + expected_copies = 3 + endpoint = self.cluster.default_rpc_endpoint + + with allure.step(f"Create container with policy {placement_rule}"): + cid = create_container( + wallet=default_wallet, rule=placement_rule, basic_acl=PUBLIC_ACL, shell=self.shell, endpoint=endpoint + ) + + with allure.step(f"Check container policy"): + self.validate_object_policy(default_wallet, placement_rule, cid, endpoint) + + with allure.step(f"Put object in container"): + oid = put_object_to_random_node(default_wallet, file_path, cid, shell=self.shell, cluster=self.cluster) + + with allure.step(f"Check object expected copies"): + resulting_copies = get_nodes_with_object(cid, oid, shell=self.shell, nodes=self.cluster.storage_nodes) + assert len(resulting_copies) >= expected_copies and len(resulting_copies) <= len( + self.cluster.storage_nodes + ), f"Expected {expected_copies} or {expected_copies + 1} copies, got {len(resulting_copies)}" + + with allure.step(f"Check the object appearance"): + nodes_without_object = get_nodes_without_object( + wallet=default_wallet, cid=cid, oid=oid, shell=self.shell, nodes=self.cluster.storage_nodes + ) + assert set(resulting_copies) | set(nodes_without_object) == set( + self.cluster.storage_nodes + ), f"nodes filling error: nodes with object = {resulting_copies}, nodes witout object = {nodes_without_object}" + self.check_for_the_uniqueness_of_the_nodes(resulting_copies) + + with allure.step(f"Delete the object from the container"): + delete_object(wallet=default_wallet, cid=cid, oid=oid, shell=self.shell, endpoint=endpoint) + + with allure.step(f"Delete the container"): + delete_container(wallet=default_wallet, cid=cid, shell=self.shell, endpoint=endpoint) + def validate_object_policy(self, wallet: str, placement_rule: str, cid: str, endpoint: str): got_policy = placement_policy_from_container( get_container(wallet, cid, json_mode=False, shell=self.shell, endpoint=endpoint) ) - assert got_policy == placement_rule.replace( + assert got_policy.replace("'", "") == placement_rule.replace( "'", "" ), f"Expected \n{placement_rule} and got policy \n{got_policy} are the same"