from abc import ABC, abstractmethod from frostfs_testlib.load.load_config import LoadParams from frostfs_testlib.shell.interfaces import Shell from frostfs_testlib.storage.cluster import ClusterNode from frostfs_testlib.storage.dataclasses.wallet import WalletInfo class Loader(ABC): @abstractmethod def get_shell(self) -> Shell: """Get shell for the loader""" @property @abstractmethod def ip(self): """Get address of the loader""" class ScenarioRunner(ABC): @abstractmethod def prepare( self, load_params: LoadParams, nodes_under_load: list[ClusterNode], k6_dir: str, ): """Preparation steps before running the load""" @abstractmethod def init_k6_instances(self, load_params: LoadParams, endpoints: list[str], k6_dir: str): """Init K6 instances""" @abstractmethod def start(self): """Start K6 instances""" @abstractmethod def stop(self): """Stop K6 instances""" @property @abstractmethod def is_running(self) -> bool: """Returns True if load is running at the moment""" @abstractmethod def wait_until_finish(self): """Wait until load is finished""" @abstractmethod def get_results(self) -> dict: """Get results from K6 run"""