diff --git a/docs/everest/config_generated.rst b/docs/everest/config_generated.rst index 4be32fedd44..9fb1bad8ee1 100644 --- a/docs/everest/config_generated.rst +++ b/docs/everest/config_generated.rst @@ -876,12 +876,6 @@ Type: *Optional[SimulatorConfig]* Simulation settings -**name (optional)** - Type: *Optional[str]* - - Specifies which queue to use - - **cores (optional)** Type: *Optional[PositiveInt]* @@ -912,32 +906,6 @@ Simulation settings Whether the batch folder for a successful simulation needs to be deleted. -**exclude_host (optional)** - Type: *Optional[str]* - - Comma separated list of nodes that should be - excluded from the slurm run. - - -**include_host (optional)** - Type: *Optional[str]* - - Comma separated list of nodes that - should be included in the slurm run - - -**max_memory (optional)** - Type: *Optional[str]* - - Maximum memory usage for a slurm job. - - -**max_memory_cpu (optional)** - Type: *Optional[str]* - - Maximum memory usage per cpu for a slurm job. - - **max_runtime (optional)** Type: *Optional[NonNegativeInt]* @@ -947,18 +915,10 @@ Simulation settings -**options (optional)** - Type: *Optional[str]* - - Used to specify options to LSF. - Examples to set memory requirement is: - * rusage[mem=1000] - - **queue_system (optional)** - Type: *Optional[Literal['lsf', 'local', 'slurm', 'torque']]* + Type: *Union[LocalQueueOptions, LsfQueueOptions, SlurmQueueOptions, TorqueQueueOptions]* - Defines which queue system the everest server runs on. + Defines which queue system the everest submits jobs to **resubmit_limit (optional)** @@ -974,48 +934,6 @@ Simulation settings If not specified, a default value of 1 will be used. -**sbatch (optional)** - Type: *Optional[str]* - - sbatch executable to be used by the slurm queue interface. - - -**scancel (optional)** - Type: *Optional[str]* - - scancel executable to be used by the slurm queue interface. - - -**scontrol (optional)** - Type: *Optional[str]* - - scontrol executable to be used by the slurm queue interface. - - -**squeue (optional)** - Type: *Optional[str]* - - squeue executable to be used by the slurm queue interface. - - -**server (optional)** - Type: *Optional[str]* - - Name of LSF server to use. This option is deprecated and no longer required - - -**slurm_timeout (optional)** - Type: *Optional[int]* - - Timeout for cached status used by the slurm queue interface - - -**squeue_timeout (optional)** - Type: *Optional[int]* - - Timeout for cached status used by the slurm queue interface. - - **enable_cache (optional)** Type: *bool* @@ -1031,72 +949,6 @@ Simulation settings optimizer. -**qsub_cmd (optional)** - Type: *Optional[str]* - - The submit command - - -**qstat_cmd (optional)** - Type: *Optional[str]* - - The query command - - -**qdel_cmd (optional)** - Type: *Optional[str]* - - The kill command - - -**qstat_options (optional)** - Type: *Optional[str]* - - Options to be supplied to the qstat command. This defaults to -x, which tells the qstat command to include exited processes. - - -**cluster_label (optional)** - Type: *Optional[str]* - - The name of the cluster you are running simulations in. - - -**memory_per_job (optional)** - Type: *Optional[str]* - - You can specify the amount of memory you will need for running your job. This will ensure that not too many jobs will run on a single shared memory node at once, possibly crashing the compute node if it runs out of memory. - You can get an indication of the memory requirement by watching the course of a local run using the htop utility. Whether you should set the peak memory usage as your requirement or a lower figure depends on how simultaneously each job will run. - The option to be supplied will be used as a string in the qsub argument. You must specify the unit, either gb or mb. - - - -**keep_qsub_output (optional)** - Type: *Optional[int]* - - Set to 1 to keep error messages from qsub. Usually only to be used if somethign is seriously wrong with the queue environment/setup. - - -**submit_sleep (optional)** - Type: *Optional[float]* - - To avoid stressing the TORQUE/PBS system you can instruct the driver to sleep for every submit request. The argument to the SUBMIT_SLEEP is the number of seconds to sleep for every submit, which can be a fraction like 0.5 - - -**queue_query_timeout (optional)** - Type: *Optional[int]* - - - The driver allows the backend TORQUE/PBS system to be flaky, i.e. it may intermittently not respond and give error messages when submitting jobs or asking for job statuses. The timeout (in seconds) determines how long ERT will wait before it will give up. Applies to job submission (qsub) and job status queries (qstat). Default is 126 seconds. - ERT will do exponential sleeps, starting at 2 seconds, and the provided timeout is a maximum. Let the timeout be sums of series like 2+4+8+16+32+64 in order to be explicit about the number of retries. Set to zero to disallow flakyness, setting it to 2 will allow for one re-attempt, and 6 will give two re-attempts. Example allowing six retries: - - - -**project_code (optional)** - Type: *Optional[str]* - - String identifier used to map hardware resource usage to a project or account. The project or account does not have to exist. - - install_jobs (optional) ----------------------- @@ -1258,32 +1110,10 @@ requirements of the forward models. -**exclude_host (optional)** - Type: *Optional[str]* - - Comma separated list of nodes that should be - excluded from the slurm run - - -**include_host (optional)** - Type: *Optional[str]* - - Comma separated list of nodes that - should be included in the slurm run - - -**options (optional)** - Type: *Optional[str]* - - Used to specify options to LSF. - Examples to set memory requirement is: - * rusage[mem=1000] - - **queue_system (optional)** - Type: *Optional[Literal['lsf', 'local', 'slurm']]* + Type: *Union[LocalQueueOptions, LsfQueueOptions, SlurmQueueOptions, TorqueQueueOptions]* - Defines which queue system the everest server runs on. + Defines which queue system the everest submits jobs to diff --git a/src/ert/config/queue_config.py b/src/ert/config/queue_config.py index 61a76f68acc..8145aceef62 100644 --- a/src/ert/config/queue_config.py +++ b/src/ert/config/queue_config.py @@ -81,7 +81,7 @@ def driver_options(self) -> Dict[str, Any]: @pydantic.dataclasses.dataclass class LocalQueueOptions(QueueOptions): - name: Literal[QueueSystem.LOCAL] = QueueSystem.LOCAL + name: Literal[QueueSystem.LOCAL, "local", "LOCAL"] = str(QueueSystem.LOCAL) @property def driver_options(self) -> Dict[str, Any]: @@ -90,7 +90,7 @@ def driver_options(self) -> Dict[str, Any]: @pydantic.dataclasses.dataclass class LsfQueueOptions(QueueOptions): - name: Literal[QueueSystem.LSF] = QueueSystem.LSF + name: Literal[QueueSystem.LSF, "lsf", "LSF"] = str(QueueSystem.LSF) bhist_cmd: Optional[NonEmptyString] = None bjobs_cmd: Optional[NonEmptyString] = None bkill_cmd: Optional[NonEmptyString] = None @@ -113,7 +113,7 @@ def driver_options(self) -> Dict[str, Any]: @pydantic.dataclasses.dataclass class TorqueQueueOptions(QueueOptions): - name: Literal[QueueSystem.TORQUE] = QueueSystem.TORQUE + name: Literal[QueueSystem.TORQUE, "torque", "TORQUE"] = str(QueueSystem.TORQUE) qsub_cmd: Optional[NonEmptyString] = None qstat_cmd: Optional[NonEmptyString] = None qdel_cmd: Optional[NonEmptyString] = None @@ -149,7 +149,7 @@ def check_memory_per_job(cls, value: Optional[str]) -> Optional[str]: @pydantic.dataclasses.dataclass class SlurmQueueOptions(QueueOptions): - name: Literal[QueueSystem.SLURM] = QueueSystem.SLURM + name: Literal[QueueSystem.SLURM, "SLURM", "slurm"] = str(QueueSystem.SLURM) sbatch: NonEmptyString = "sbatch" scancel: NonEmptyString = "scancel" scontrol: NonEmptyString = "scontrol" diff --git a/src/everest/config/everest_config.py b/src/everest/config/everest_config.py index a23f1faa749..4a81e60dfc2 100644 --- a/src/everest/config/everest_config.py +++ b/src/everest/config/everest_config.py @@ -2,6 +2,7 @@ import os import shutil from argparse import ArgumentParser +from copy import copy from io import StringIO from pathlib import Path from typing import ( @@ -183,7 +184,7 @@ class EverestConfig(BaseModelWithPropertySupport): # type: ignore """, ) server: Optional[ServerConfig] = Field( - default=None, + default_factory=ServerConfig, description="""Defines Everest server settings, i.e., which queue system, queue name and queue options are used for the everest server. The main reason for changing this section is situations where everest @@ -216,6 +217,25 @@ class EverestConfig(BaseModelWithPropertySupport): # type: ignore config_path: Path = Field() model_config = ConfigDict(extra="forbid") + @model_validator(mode="after") + def validate_queue_system(self) -> Self: # pylint: disable=E0213 + if self.server is None: + self.server = ServerConfig(queue_system=copy(self.simulator.queue_system)) + elif self.server.queue_system is None: + self.server.queue_system = copy(self.simulator.queue_system) + if ( + str(self.simulator.queue_system.name).lower() == "local" + and str(self.server.queue_system.name).lower() + != str(self.simulator.queue_system.name).lower() + ): + raise ValueError( + f"The simulator is using local as queue system " + f"while the everest server is using {self.server.queue_system.name}. " + f"If the simulator is using local, so must the everest server." + ) + self.server.queue_system.max_running = 1 + return self + @model_validator(mode="after") def validate_install_job_sources(self) -> Self: # pylint: disable=E0213 model = self.model diff --git a/src/everest/config/has_ert_queue_options.py b/src/everest/config/has_ert_queue_options.py deleted file mode 100644 index c427391455a..00000000000 --- a/src/everest/config/has_ert_queue_options.py +++ /dev/null @@ -1,13 +0,0 @@ -from typing import Any, List, Tuple - - -class HasErtQueueOptions: - def extract_ert_queue_options( - self, queue_system: str, everest_to_ert_key_tuples: List[Tuple[str, str]] - ) -> List[Tuple[str, str, Any]]: - result = [] - for ever_key, ert_key in everest_to_ert_key_tuples: - attribute = getattr(self, ever_key) - if attribute is not None: - result.append((queue_system, ert_key, attribute)) - return result diff --git a/src/everest/config/server_config.py b/src/everest/config/server_config.py index 19f219aa4b4..961cf4a7dc7 100644 --- a/src/everest/config/server_config.py +++ b/src/everest/config/server_config.py @@ -1,9 +1,16 @@ import json import os -from typing import Literal, Optional, Tuple +from typing import Optional, Tuple from pydantic import BaseModel, ConfigDict, Field +from ert.config.queue_config import ( + LocalQueueOptions, + LsfQueueOptions, + SlurmQueueOptions, + TorqueQueueOptions, +) + from ..strings import ( CERTIFICATE_DIR, DETACHED_NODE_DIR, @@ -11,10 +18,9 @@ SERVER_STATUS, SESSION_DIR, ) -from .has_ert_queue_options import HasErtQueueOptions -class ServerConfig(BaseModel, HasErtQueueOptions): # type: ignore +class ServerConfig(BaseModel): # type: ignore name: Optional[str] = Field( None, description="""Specifies which queue to use. @@ -27,25 +33,12 @@ class ServerConfig(BaseModel, HasErtQueueOptions): # type: ignore as RMS and Eclipse. """, ) # Corresponds to queue name - exclude_host: Optional[str] = Field( - "", - description="""Comma separated list of nodes that should be - excluded from the slurm run""", - ) - include_host: Optional[str] = Field( - "", - description="""Comma separated list of nodes that - should be included in the slurm run""", - ) - options: Optional[str] = Field( - None, - description="""Used to specify options to LSF. - Examples to set memory requirement is: - * rusage[mem=1000]""", - ) - queue_system: Optional[Literal["lsf", "local", "slurm"]] = Field( - None, - description="Defines which queue system the everest server runs on.", + queue_system: Optional[ + LocalQueueOptions | LsfQueueOptions | SlurmQueueOptions | TorqueQueueOptions + ] = Field( + default=None, + description="Defines which queue system the everest submits jobs to", + discriminator="name", ) model_config = ConfigDict( extra="forbid", diff --git a/src/everest/config/simulator_config.py b/src/everest/config/simulator_config.py index 4e4350a71ed..d41d30f9269 100644 --- a/src/everest/config/simulator_config.py +++ b/src/everest/config/simulator_config.py @@ -1,7 +1,6 @@ -import warnings from typing import Optional, Union -from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt, field_validator +from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt from ert.config.queue_config import ( LocalQueueOptions, @@ -14,7 +13,6 @@ class SimulatorConfig(BaseModel, extra="forbid"): # type: ignore cores: Optional[PositiveInt] = Field( default=None, - alias="max_running", description="""Defines the number of simultaneously running forward models. When using queue system lsf, this corresponds to number of nodes used at one @@ -45,17 +43,12 @@ class SimulatorConfig(BaseModel, extra="forbid"): # type: ignore A value of 0 means unlimited runtime. """, ) - options: Optional[str] = Field( - default=None, - description="""Used to specify options to LSF. - Examples to set memory requirement is: - * rusage[mem=1000]""", - ) queue_system: Union[ LocalQueueOptions, LsfQueueOptions, SlurmQueueOptions, TorqueQueueOptions ] = Field( default_factory=LocalQueueOptions, description="Defines which queue system the everest submits jobs to", + discriminator="name", ) resubmit_limit: Optional[NonNegativeInt] = Field( default=None, @@ -81,50 +74,3 @@ class SimulatorConfig(BaseModel, extra="forbid"): # type: ignore the most common use of a standard optimization with a continuous optimizer.""", ) - qsub_cmd: Optional[str] = Field(default="qsub", description="The submit command") - qstat_cmd: Optional[str] = Field(default="qstat", description="The query command") - qdel_cmd: Optional[str] = Field(default="qdel", description="The kill command") - qstat_options: Optional[str] = Field( - default="-x", - description="Options to be supplied to the qstat command. This defaults to -x, which tells the qstat command to include exited processes.", - ) - cluster_label: Optional[str] = Field( - default=None, - description="The name of the cluster you are running simulations in.", - ) - memory_per_job: Optional[str] = Field( - default=None, - description="""You can specify the amount of memory you will need for running your job. This will ensure that not too many jobs will run on a single shared memory node at once, possibly crashing the compute node if it runs out of memory. - You can get an indication of the memory requirement by watching the course of a local run using the htop utility. Whether you should set the peak memory usage as your requirement or a lower figure depends on how simultaneously each job will run. - The option to be supplied will be used as a string in the qsub argument. You must specify the unit, either gb or mb. - """, - ) - keep_qsub_output: Optional[int] = Field( - default=0, - description="Set to 1 to keep error messages from qsub. Usually only to be used if somethign is seriously wrong with the queue environment/setup.", - ) - submit_sleep: Optional[float] = Field( - default=0.5, - description="To avoid stressing the TORQUE/PBS system you can instruct the driver to sleep for every submit request. The argument to the SUBMIT_SLEEP is the number of seconds to sleep for every submit, which can be a fraction like 0.5", - ) - queue_query_timeout: Optional[int] = Field( - default=126, - description=""" - The driver allows the backend TORQUE/PBS system to be flaky, i.e. it may intermittently not respond and give error messages when submitting jobs or asking for job statuses. The timeout (in seconds) determines how long ERT will wait before it will give up. Applies to job submission (qsub) and job status queries (qstat). Default is 126 seconds. - ERT will do exponential sleeps, starting at 2 seconds, and the provided timeout is a maximum. Let the timeout be sums of series like 2+4+8+16+32+64 in order to be explicit about the number of retries. Set to zero to disallow flakyness, setting it to 2 will allow for one re-attempt, and 6 will give two re-attempts. Example allowing six retries: - """, - ) - project_code: Optional[str] = Field( - default=None, - description="String identifier used to map hardware resource usage to a project or account. The project or account does not have to exist.", - ) - - @field_validator("server") - @classmethod - def validate_server(cls, server): # pylint: disable=E0213 - if server is not None and server: - warnings.warn( - "The simulator server property was deprecated and is no longer needed", - DeprecationWarning, - stacklevel=1, - ) diff --git a/src/everest/detached/__init__.py b/src/everest/detached/__init__.py index 72c6a364bb1..e4ae3cac06c 100644 --- a/src/everest/detached/__init__.py +++ b/src/everest/detached/__init__.py @@ -13,14 +13,6 @@ from seba_sqlite.exceptions import ObjectNotFoundError from seba_sqlite.snapshot import SebaSnapshot -from ert.config import QueueSystem -from ert.config.queue_config import ( - LocalQueueOptions, - LsfQueueOptions, - QueueOptions, - SlurmQueueOptions, - TorqueQueueOptions, -) from ert.scheduler import create_driver from ert.scheduler.driver import Driver, FailedSubmit from ert.scheduler.event import StartedEvent @@ -82,7 +74,7 @@ async def start_server(config: EverestConfig, debug: bool = False) -> Driver: "Failed to save optimization config: {}".format(e) ) - driver = create_driver(get_server_queue_options(config)) + driver = create_driver(config.server.queue_system) try: args = ["--config-file", config.config_file] if debug: @@ -292,52 +284,6 @@ def start_monitor(config: EverestConfig, callback, polling_interval=5): } -def _find_res_queue_system(config: EverestConfig): - queue_system_simulator: Literal["lsf", "local", "slurm", "torque"] = "local" - if config.simulator is not None: - queue_system_simulator = config.simulator.queue_system or queue_system_simulator - - queue_system = queue_system_simulator - if config.server is not None: - queue_system = config.server.queue_system or queue_system - - if queue_system_simulator == CK.LOCAL and queue_system_simulator != queue_system: - raise ValueError( - f"The simulator is using {CK.LOCAL} as queue system " - f"while the everest server is using {queue_system}. " - f"If the simulator is using {CK.LOCAL}, so must the everest server." - ) - - assert queue_system is not None - return QueueSystem(queue_system.upper()) - - -def get_server_queue_options(config: EverestConfig) -> QueueOptions: - queue_system = _find_res_queue_system(config) - - ever_queue_config = config.server if config.server is not None else config.simulator - - if queue_system == QueueSystem.LSF: - queue = LsfQueueOptions( - lsf_queue=ever_queue_config.name, - lsf_resource=ever_queue_config.options, - ) - elif queue_system == QueueSystem.SLURM: - queue = SlurmQueueOptions( - exclude_host=ever_queue_config.exclude_host, - include_host=ever_queue_config.include_host, - partition=ever_queue_config.name, - ) - elif queue_system == QueueSystem.TORQUE: - queue = TorqueQueueOptions() - elif queue_system == QueueSystem.LOCAL: - queue = LocalQueueOptions() - else: - raise ValueError(f"Unknown queue system: {queue_system}") - queue.max_running = 1 - return queue - - def _query_server(cert, auth, endpoint): """Retrieve data from an endpoint as a dictionary""" response = requests.get(endpoint, verify=cert, auth=auth, proxies=PROXY) diff --git a/src/everest/simulator/everest_to_ert.py b/src/everest/simulator/everest_to_ert.py index 5151172d3c2..b16e6f99666 100644 --- a/src/everest/simulator/everest_to_ert.py +++ b/src/everest/simulator/everest_to_ert.py @@ -18,7 +18,6 @@ from everest.config.install_job_config import InstallJobConfig from everest.config.simulator_config import SimulatorConfig from everest.config_keys import ConfigKeys -from everest.queue_driver.queue_driver import _extract_queue_system from everest.strings import EVEREST, SIMULATION_DIR, STORAGE_DIR @@ -499,7 +498,6 @@ def _everest_to_ert_config_dict( _extract_workflow_jobs(ever_config, ert_config, config_dir) _extract_workflows(ever_config, ert_config, config_dir) _extract_model(ever_config, ert_config) - _extract_queue_system(ever_config, ert_config) _extract_seed(ever_config, ert_config) _extract_results(ever_config, ert_config) @@ -512,6 +510,7 @@ def everest_to_ert_config(ever_config: EverestConfig) -> ErtConfig: ) ert_config = ErtConfig.with_plugins().from_dict(config_dict=config_dict) + ert_config.queue_config.queue_options = ever_config.simulator.queue_system ens_config = ert_config.ensemble_config def _get_variables( diff --git a/tests/everest/test_detached.py b/tests/everest/test_detached.py index a3ca50f8d0a..7564db767e9 100644 --- a/tests/everest/test_detached.py +++ b/tests/everest/test_detached.py @@ -4,7 +4,7 @@ import pytest import requests -from ert.config import ErtConfig +from ert.config import ErtConfig, QueueSystem from ert.config.queue_config import ( LocalQueueOptions, LsfQueueOptions, @@ -18,9 +18,7 @@ _EVERSERVER_JOB_PATH, PROXY, ServerStatus, - _find_res_queue_system, everserver_status, - get_server_queue_options, server_is_running, start_server, stop_server, @@ -180,7 +178,7 @@ def _get_reference_config(): def test_detached_mode_config_base(copy_math_func_test_data_to_tmp): everest_config, _ = _get_reference_config() - queue_config = get_server_queue_options(everest_config) + queue_config = everest_config.server.queue_system assert queue_config == LocalQueueOptions(max_running=1) @@ -199,12 +197,12 @@ def test_everserver_queue_config_equal_to_run_config( ): everest_config, _ = _get_reference_config() - simulator_config = {CK.QUEUE_SYSTEM: queue_system, CK.CORES: cores} + simulator_config = {CK.QUEUE_SYSTEM: {"name": queue_system}, CK.CORES: cores} if name is not None: simulator_config.update({"name": name}) everest_config.simulator = SimulatorConfig(**simulator_config) - server_queue_option = get_server_queue_options(everest_config) + server_queue_option = everest_config.server.queue_system ert_config = _everest_to_ert_config_dict(everest_config) run_queue_option = ert_config["QUEUE_OPTION"] @@ -228,7 +226,7 @@ def test_detached_mode_config_only_sim(copy_math_func_test_data_to_tmp, queue_sy queue_options = [(queue_system.upper(), "MAX_RUNNING", 1)] reference.setdefault("QUEUE_OPTION", []).extend(queue_options) everest_config.simulator = SimulatorConfig(**{CK.QUEUE_SYSTEM: queue_system}) - queue_config = get_server_queue_options(everest_config) + queue_config = everest_config.server.queue_system assert str(queue_config.name.name).lower() == queue_system @@ -237,45 +235,46 @@ def test_detached_mode_config_error(copy_math_func_test_data_to_tmp): We are not allowing the simulator queue to be local and at the same time the everserver queue to be something other than local """ - everest_config, _ = _get_reference_config() - - everest_config.server = ServerConfig(name="server", queue_system="lsf") with pytest.raises(ValueError, match="so must the everest server"): - get_server_queue_options(everest_config) + EverestConfig.with_defaults( + **{ + "simulator": {"queue_system": {"name": "local"}}, + "server": {"queue_system": {"name": "lsf"}}, + } + ) @pytest.mark.parametrize( - "config, expected_result", + "config_input, expected_result", [ ( - EverestConfig.with_defaults(**{CK.SIMULATOR: {CK.QUEUE_SYSTEM: "lsf"}}), + {CK.SIMULATOR: {CK.QUEUE_SYSTEM: {"name": QueueSystem.LSF}}}, "LSF", ), ( - EverestConfig.with_defaults( - **{ - CK.SIMULATOR: {CK.QUEUE_SYSTEM: "lsf"}, - CK.EVERSERVER: {CK.QUEUE_SYSTEM: "lsf"}, - } - ), + { + CK.SIMULATOR: {CK.QUEUE_SYSTEM: {"name": QueueSystem.LSF}}, + CK.EVERSERVER: {CK.QUEUE_SYSTEM: {"name": QueueSystem.LSF}}, + }, "LSF", ), - (EverestConfig.with_defaults(**{}), "LOCAL"), + ({}, QueueSystem.LOCAL), ( - EverestConfig.with_defaults(**{CK.SIMULATOR: {CK.QUEUE_SYSTEM: "local"}}), + {CK.SIMULATOR: {CK.QUEUE_SYSTEM: {"name": QueueSystem.LOCAL}}}, "LOCAL", ), ], ) -def test_find_queue_system(config: EverestConfig, expected_result): - result = _find_res_queue_system(config) +def test_find_queue_system(config_input, expected_result): + config = EverestConfig.with_defaults(**config_input) + result = config.server.queue_system - assert result == expected_result + assert result.name == expected_result def test_generate_queue_options_no_config(): config = EverestConfig.with_defaults(**{}) - assert get_server_queue_options(config) == LocalQueueOptions(max_running=1) + assert config.server.queue_system == LocalQueueOptions(max_running=1) @pytest.mark.parametrize( @@ -293,4 +292,4 @@ def test_generate_queue_options_no_config(): ) def test_generate_queue_options_use_simulator_values(queue_options, expected_result): config = EverestConfig.with_defaults(**{"simulator": queue_options}) - assert get_server_queue_options(config) == expected_result + assert config.server.queue_system == expected_result