from abc import ABC, abstractmethod from frostfs_testlib.load.interfaces.loader import Loader from frostfs_testlib.load.k6 import K6 from frostfs_testlib.load.load_config import LoadParams from frostfs_testlib.storage.cluster import ClusterNode class ScenarioRunner(ABC): @abstractmethod def prepare( self, load_params: LoadParams, cluster_nodes: list[ClusterNode], 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 get_k6_instances(self) -> list[K6]: """Get K6 instances""" @abstractmethod def start(self): """Start K6 instances""" @abstractmethod def stop(self): """Stop K6 instances""" @abstractmethod def preset(self): """Run preset for load""" @property @abstractmethod def is_running(self) -> bool: """Returns True if load is running at the moment""" @abstractmethod def wait_until_finish(self, soft_timeout: int = 0): """Wait until load is finished""" @abstractmethod def get_results(self) -> dict: """Get results from K6 run""" @abstractmethod def get_loaders(self) -> list[Loader]: """Return loaders"""