diff --git a/pytest_tests/helpers/utility.py b/pytest_tests/helpers/utility.py index 69bc3ad..0f1b6ba 100644 --- a/pytest_tests/helpers/utility.py +++ b/pytest_tests/helpers/utility.py @@ -1,7 +1,11 @@ +import os import time +from typing import Any, Optional import allure +import yaml from common import STORAGE_GC_TIME +from neofs_testlib.hosting import Hosting def parse_time(value: str) -> int: @@ -60,3 +64,16 @@ def wait_for_gc_pass_on_storage_nodes() -> None: wait_time = parse_time(STORAGE_GC_TIME) with allure.step(f"Wait {wait_time}s until GC completes on storage nodes"): time.sleep(wait_time) + + +def get_wallet_password(hosting: Hosting, service_name: str) -> Optional[str]: + service_config = hosting.get_service_config(service_name) + return service_config.attributes.get("wallet_password") + + +def create_wallet_config(hosting: Hosting, service_name: str) -> Optional[str]: + password = get_wallet_password(hosting=hosting, service_name=service_name) + wallet_config_path = os.path.join(os.getcwd(), f"{service_name}_wallet_config.yml") + with open(wallet_config_path, "w") as file: + yaml.dump({"password": password}, file) + return wallet_config_path diff --git a/pytest_tests/testsuites/acl/conftest.py b/pytest_tests/testsuites/acl/conftest.py index 304a3d9..e3d0f3a 100644 --- a/pytest_tests/testsuites/acl/conftest.py +++ b/pytest_tests/testsuites/acl/conftest.py @@ -5,20 +5,14 @@ from typing import Dict, List, Optional import allure import pytest -from common import ( - ASSETS_DIR, - IR_WALLET_CONFIG, - IR_WALLET_PATH, - STORAGE_WALLET_CONFIG, - STORAGE_WALLET_PATH, - WALLET_CONFIG, - WALLET_PASS, -) +import yaml +from common import ASSETS_DIR, IR_WALLET_PATH, STORAGE_WALLET_PATH, WALLET_CONFIG, WALLET_PASS from file_helper import generate_file from neofs_testlib.utils.wallet import init_wallet from python_keywords.acl import EACLRole from python_keywords.container import create_container from python_keywords.neofs_verbs import put_object +from utility import create_wallet_config from wellknown_acl import PUBLIC_ACL OBJECT_COUNT = 5 @@ -42,13 +36,16 @@ class Wallets: @pytest.fixture(scope="module") -def wallets(prepare_wallet_and_deposit): +def wallets(prepare_wallet_and_deposit, hosting): other_wallets_paths = [ os.path.join(os.getcwd(), ASSETS_DIR, f"{str(uuid.uuid4())}.json") for _ in range(2) ] for other_wallet_path in other_wallets_paths: init_wallet(other_wallet_path, WALLET_PASS) + ir_wallet_config = create_wallet_config(hosting, "ir01") + storage_wallet_config = create_wallet_config(hosting, "s01") + yield Wallets( wallets={ EACLRole.USER: [ @@ -59,8 +56,8 @@ def wallets(prepare_wallet_and_deposit): for other_wallet_path in other_wallets_paths ], EACLRole.SYSTEM: [ - Wallet(wallet_path=IR_WALLET_PATH, config_path=IR_WALLET_CONFIG), - Wallet(wallet_path=STORAGE_WALLET_PATH, config_path=STORAGE_WALLET_CONFIG), + Wallet(wallet_path=IR_WALLET_PATH, config_path=ir_wallet_config), + Wallet(wallet_path=STORAGE_WALLET_PATH, config_path=storage_wallet_config), ], } ) diff --git a/pytest_tests/testsuites/acl/storage_group/test_storagegroup.py b/pytest_tests/testsuites/acl/storage_group/test_storagegroup.py index e74bb75..22a81b3 100644 --- a/pytest_tests/testsuites/acl/storage_group/test_storagegroup.py +++ b/pytest_tests/testsuites/acl/storage_group/test_storagegroup.py @@ -5,12 +5,11 @@ from typing import Optional import allure import pytest +import yaml from common import ( ASSETS_DIR, COMPLEX_OBJ_SIZE, FREE_STORAGE, - IR_WALLET_CONFIG, - IR_WALLET_PASS, IR_WALLET_PATH, SIMPLE_OBJ_SIZE, WALLET_PASS, @@ -18,6 +17,7 @@ from common import ( from epoch import tick_epoch from file_helper import generate_file from grpc_responses import OBJECT_ACCESS_DENIED, OBJECT_NOT_FOUND +from neofs_testlib.hosting import Hosting from neofs_testlib.shell import Shell from neofs_testlib.utils.wallet import init_wallet from python_keywords.acl import ( @@ -40,6 +40,7 @@ from python_keywords.storage_group import ( verify_get_storage_group, verify_list_storage_group, ) +from utility import get_wallet_password logger = logging.getLogger("NeoLogger") deposit = 30 @@ -73,9 +74,10 @@ class TestStorageGroup: ) @allure.title("Test Storage Group in Private Container") - def test_storagegroup_basic_private_container(self, client_shell, object_size): + def test_storagegroup_basic_private_container(self, client_shell, object_size, hosting): cid = create_container(self.main_wallet, shell=client_shell) file_path = generate_file(object_size) + password = get_wallet_password(hosting=hosting, service_name="ir01") oid = put_object(self.main_wallet, file_path, cid, shell=client_shell) objects = [oid] storage_group = put_storagegroup( @@ -102,10 +104,11 @@ class TestStorageGroup: cid=cid, obj_list=objects, object_size=object_size, + hosting=hosting, ) @allure.title("Test Storage Group in Public Container") - def test_storagegroup_basic_public_container(self, client_shell, object_size): + def test_storagegroup_basic_public_container(self, client_shell, object_size, hosting): cid = create_container(self.main_wallet, basic_acl="public-read-write", shell=client_shell) file_path = generate_file(object_size) oid = put_object(self.main_wallet, file_path, cid, shell=client_shell) @@ -130,10 +133,11 @@ class TestStorageGroup: cid=cid, obj_list=objects, object_size=object_size, + hosting=hosting, ) @allure.title("Test Storage Group in Read-Only Container") - def test_storagegroup_basic_ro_container(self, client_shell, object_size): + def test_storagegroup_basic_ro_container(self, client_shell, object_size, hosting): cid = create_container(self.main_wallet, basic_acl="public-read", shell=client_shell) file_path = generate_file(object_size) oid = put_object(self.main_wallet, file_path, cid, shell=client_shell) @@ -159,6 +163,7 @@ class TestStorageGroup: cid=cid, obj_list=objects, object_size=object_size, + hosting=hosting, ) @allure.title("Test Storage Group with Bearer Allow") @@ -302,26 +307,30 @@ class TestStorageGroup: @staticmethod @allure.step("Run Storage Group Operations On Systems's Behalf In RO Container") def storagegroup_operations_by_system_ro_container( - shell: Shell, wallet: str, cid: str, obj_list: list, object_size: int + shell: Shell, wallet: str, cid: str, obj_list: list, object_size: int, hosting: Hosting ): """ In this func we create a Storage Group on Inner Ring's key behalf and include an Object created on behalf of some user. We expect that System key is granted to make all operations except PUT and DELETE. """ + password = get_wallet_password(hosting=hosting, service_name="ir01") + ir_wallet_config = os.path.join(os.getcwd(), "ir_wallet_config.yml") + with open(ir_wallet_config, "w") as file: + yaml.dump({"password": password}, file) if not FREE_STORAGE: deposit = 30 transfer_gas( shell=shell, amount=deposit + 1, wallet_to_path=IR_WALLET_PATH, - wallet_to_password=IR_WALLET_PASS, + wallet_to_password=password, ) deposit_gas( shell=shell, amount=deposit, wallet_from_path=IR_WALLET_PATH, - wallet_from_password=IR_WALLET_PASS, + wallet_from_password=password, ) storage_group = put_storagegroup(shell, wallet, cid, obj_list) with pytest.raises(Exception, match=OBJECT_ACCESS_DENIED): @@ -330,14 +339,14 @@ class TestStorageGroup: wallet=IR_WALLET_PATH, cid=cid, objects=obj_list, - wallet_config=IR_WALLET_CONFIG, + wallet_config=ir_wallet_config, ) verify_list_storage_group( shell=shell, wallet=IR_WALLET_PATH, cid=cid, gid=storage_group, - wallet_config=IR_WALLET_CONFIG, + wallet_config=ir_wallet_config, ) verify_get_storage_group( @@ -347,7 +356,7 @@ class TestStorageGroup: gid=storage_group, obj_list=obj_list, object_size=object_size, - wallet_config=IR_WALLET_CONFIG, + wallet_config=ir_wallet_config, ) with pytest.raises(Exception, match=OBJECT_ACCESS_DENIED): delete_storagegroup( @@ -355,5 +364,5 @@ class TestStorageGroup: wallet=IR_WALLET_PATH, cid=cid, gid=storage_group, - wallet_config=IR_WALLET_CONFIG, + wallet_config=ir_wallet_config, ) diff --git a/pytest_tests/testsuites/acl/test_eacl.py b/pytest_tests/testsuites/acl/test_eacl.py index c2262f4..f27d388 100644 --- a/pytest_tests/testsuites/acl/test_eacl.py +++ b/pytest_tests/testsuites/acl/test_eacl.py @@ -236,7 +236,9 @@ class TestEACLContainer: ) @allure.title("Testcase to validate NeoFS system operations with extended ACL") - def test_extended_actions_system(self, wallets, client_shell, eacl_container_with_objects): + def test_extended_actions_system( + self, wallets, client_shell, eacl_container_with_objects, hosting + ): user_wallet = wallets.get_wallet() ir_wallet, storage_wallet = wallets.get_wallets_list(role=EACLRole.SYSTEM)[:2] diff --git a/robot/variables/common.py b/robot/variables/common.py index 2f34309..6ec641c 100644 --- a/robot/variables/common.py +++ b/robot/variables/common.py @@ -138,7 +138,3 @@ with open(STORAGE_WALLET_CONFIG, "w") as file: MAINNET_WALLET_CONFIG = os.path.join(os.getcwd(), "mainnet_wallet_config.yml") with open(MAINNET_WALLET_CONFIG, "w") as file: yaml.dump({"password": MAINNET_WALLET_PASS}, file) - -IR_WALLET_CONFIG = os.path.join(os.getcwd(), "ir_wallet_config.yml") -with open(IR_WALLET_CONFIG, "w") as file: - yaml.dump({"password": IR_WALLET_PASS}, file)