forked from TrueCloudLab/frostfs-testcases
Add policy REP 1 IN SPB REP 1 IN MSK REP 3
This commit is contained in:
parent
5eae65b471
commit
6b8800760d
1 changed files with 48 additions and 1 deletions
|
@ -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"
|
||||
|
||||
|
|
Loading…
Reference in a new issue