From 612e0887631d8d4221135d5b0bb97a13baac6bae Mon Sep 17 00:00:00 2001 From: Andrey Berezin Date: Thu, 27 Jul 2023 10:49:41 +0300 Subject: [PATCH] Fix string representation for load params with empty fields Signed-off-by: Andrey Berezin --- src/frostfs_testlib/load/load_config.py | 10 +++++-- .../controllers/background_load_controller.py | 13 ++++++--- tests/test_load_config.py | 28 +++++++++++++++++-- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/frostfs_testlib/load/load_config.py b/src/frostfs_testlib/load/load_config.py index 4e0b71f..ec5d3fd 100644 --- a/src/frostfs_testlib/load/load_config.py +++ b/src/frostfs_testlib/load/load_config.py @@ -316,8 +316,14 @@ class LoadParams: return fields_with_data or [] def __str__(self) -> str: - size, unit = calc_unit(self.object_size, 1) - static_params = [f"{self.scenario.value} ({size:.4g} {unit})"] + load_type_str = self.scenario.value if self.scenario else self.load_type.value + # TODO: migrate load_params defaults to testlib + if self.object_size is not None: + size, unit = calc_unit(self.object_size, 1) + static_params = [f"{load_type_str} ({size:.4g} {unit})"] + else: + static_params = [f"{load_type_str}"] + dynamic_params = [ f"{meta_field.name}={meta_field.value}" for meta_field in self._get_applicable_fields() diff --git a/src/frostfs_testlib/storage/controllers/background_load_controller.py b/src/frostfs_testlib/storage/controllers/background_load_controller.py index 91cb1af..aa17f4e 100644 --- a/src/frostfs_testlib/storage/controllers/background_load_controller.py +++ b/src/frostfs_testlib/storage/controllers/background_load_controller.py @@ -53,10 +53,6 @@ class BackgroundLoadController: if load_params.endpoint_selection_strategy is None: raise RuntimeError("endpoint_selection_strategy should not be None") - self.endpoints = self._get_endpoints( - load_params.load_type, load_params.endpoint_selection_strategy - ) - @run_optionally(optionals.OPTIONAL_BACKGROUND_LOAD_ENABLED, []) def _get_endpoints( self, load_type: LoadType, endpoint_selection_strategy: EndpointSelectionStrategy @@ -100,6 +96,9 @@ class BackgroundLoadController: @run_optionally(optionals.OPTIONAL_BACKGROUND_LOAD_ENABLED) @reporter.step_deco("Prepare load instances") def prepare(self): + self.endpoints = self._get_endpoints( + self.load_params.load_type, self.load_params.endpoint_selection_strategy + ) self.runner.prepare(self.load_params, self.nodes_under_load, self.k6_dir) self.runner.init_k6_instances(self.load_params, self.endpoints, self.k6_dir) @@ -204,3 +203,9 @@ class BackgroundLoadController: def _get_results(self) -> dict: with reporter.step(f"Get {self.load_params.scenario.value} scenario results"): return self.runner.get_results() + + def __str__(self) -> str: + return self.load_params.__str__() + + def __repr__(self) -> str: + return repr(self.load_params) diff --git a/tests/test_load_config.py b/tests/test_load_config.py index 89a10ea..a84a188 100644 --- a/tests/test_load_config.py +++ b/tests/test_load_config.py @@ -3,7 +3,17 @@ from typing import Any, get_args import pytest -from frostfs_testlib.load.load_config import LoadParams, LoadScenario, LoadType, Preset +from frostfs_testlib.load.load_config import ( + EndpointSelectionStrategy, + LoadParams, + LoadScenario, + LoadType, + Preset, +) +from frostfs_testlib.storage.cluster import ClusterNode +from frostfs_testlib.storage.controllers.background_load_controller import BackgroundLoadController +from frostfs_testlib.storage.dataclasses.frostfs_services import StorageNode +from frostfs_testlib.storage.dataclasses.node_base import NodeBase @dataclass @@ -36,7 +46,10 @@ class TestLoadConfig: return self._get_filled_load_params(load_type, load_scenario, set_empty) def test_load_params_only_load_type_required(self): - LoadParams(load_type=LoadType.S3) + load_params = LoadParams(load_type=LoadType.S3) + expected = "load: s3" + assert repr(load_params) == expected + assert f"{load_params}" == expected def test_load_params_initially_have_all_values_none(self): load_params = LoadParams(load_type=LoadType.S3) @@ -60,6 +73,17 @@ class TestLoadConfig: assert f"{load_params}" == expected assert repr(load_params) == expected + @pytest.mark.parametrize("load_params", [LoadScenario.gRPC], indirect=True) + def test_load_controller_string_representation(self, load_params: LoadParams): + load_params.endpoint_selection_strategy = EndpointSelectionStrategy.ALL + load_params.object_size = 512 + background_load_controller = BackgroundLoadController( + "tmp", load_params, "wallet", None, None + ) + expected = "load: grpc (512 KiB), writers=7, readers=7, deleters=8" + assert f"{background_load_controller}" == expected + assert repr(background_load_controller) == expected + def test_load_set_id_changes_fields(self): load_params = LoadParams(load_type=LoadType.S3) load_params.preset = Preset()