def test_complex_shortcut_parsing() -> None: ge_env = common_ge_env() qsub1 = mock_driver.MockQsub(ge_env) qsub1.qsub("-l m_mem_free=2g -l exclusive=true -q htc.q sleep.sh") qsub2 = mock_driver.MockQsub(ge_env) qsub2.qsub("-l mfree=2g -l excl=true -q htc.q sleep.sh") longform = qsub1.parse_jobs() shortform = qsub2.parse_jobs() assert longform assert "mfree" not in str(longform) assert longform[0].to_dict() == shortform[0].to_dict()
def common_cluster( qsub_commands: List[str], previous_dcalc: Optional[DemandCalculator] = None, ) -> DemandCalculator: ge_env = common_ge_env(previous_dcalc) # allq = new_gequeue("all.q", "@allhosts", ["make"], [], complexes=complexes, parallel_envs=pes) qsub = mock_driver.MockQsub(ge_env) for qsub_cmd in qsub_commands: qsub.qsub(qsub_cmd) jobs = qsub.parse_jobs() def _bindings() -> MockClusterBinding: if previous_dcalc: return previous_dcalc.node_mgr.cluster_bindings mock_bindings = MockClusterBinding() mock_bindings.add_nodearray("hpc", {}, max_placement_group_size=5) mock_bindings.add_bucket("hpc", "Standard_F4", 100, 100) mock_bindings.add_nodearray("htc", {}, max_count=10) mock_bindings.add_bucket("htc", "Standard_F4", 10, 10) return mock_bindings mdriver = mock_driver.MockGridEngineDriver(ge_env) ge_env.jobs.extend(jobs) config = mdriver.preprocess_config(mock_config(_bindings())) return autoscaler.calculate_demand( config, ge_env, mdriver, CONTEXT, node_history=NullNodeHistory(), )
def _job(qsub_cmd: str, job_id: int) -> Job: ge_env = common_ge_env() qsub = mock_driver.MockQsub(ge_env) qsub.current_job_number = job_id qsub.qsub(qsub_cmd) qsub.qstat() return qsub.parse_jobs()[0]