MCPcopy Create free account
hub / github.com/It4innovations/hyperqueue / MockJobManager

Class MockJobManager

tests/autoalloc/mock/mock.py:53–92  ·  view source on GitHub ↗

Creates a mock job manager that intercepts job manager (PBS/Slurm) in the given `hq_env` and passes them to the given `handler`.

Source from the content-addressed store, hash-verified

51
52
53class MockJobManager:
54 """
55 Creates a mock job manager that intercepts job manager (PBS/Slurm) in the given `hq_env` and
56 passes them to the given `handler`.
57 """
58
59 def __init__(
60 self,
61 hq_env: HqEnv,
62 handler: CommandHandler,
63 mocked_commands=("qsub", "qstat", "qdel", "sbatch", "scontrol", "scancel"),
64 ):
65 self.handler: CommandHandler = handler
66
67 # Make sure that we're not communicating with a different test instance that could target
68 # the same port.
69 self.key = generate_key()
70
71 # Prepare redirector path
72 self.redirector_path = hq_env.mock.directory / "redirector.py"
73 self.mocked_commands = mocked_commands
74 self.hq_env = hq_env
75
76 self.bg_server: Optional[BackgroundServer] = None
77
78 def __enter__(self):
79 assert self.bg_server is None
80 self.bg_server = BackgroundServer(handler=self.handler, key=self.key)
81 prepare_redirector(self.redirector_path, port=self.bg_server.port, key=self.key)
82 # Link selected commands to redirector
83 for cmd in self.mocked_commands:
84 self.hq_env.mock.redirect_program_to_binary(cmd, self.redirector_path)
85
86 logging.debug(f"Wrote redirector to {self.redirector_path}")
87 return self
88
89 def __exit__(self, exc_type, exc_val, exc_tb):
90 assert self.bg_server is not None
91 self.bg_server.stop()
92 self.bg_server = None
93
94
95def generate_key() -> str:

Calls

no outgoing calls