|
24 | 24 |
|
25 | 25 | CMD_INFO = "monarch.tools.commands.info"
|
26 | 26 | CMD_CREATE = "monarch.tools.commands.create"
|
| 27 | +CMD_KILL = "monarch.tools.commands.kill" |
27 | 28 |
|
28 | 29 |
|
29 | 30 | class TestCommands(unittest.TestCase):
|
@@ -336,3 +337,45 @@ async def test_get_or_create_new_server_missing(
|
336 | 337 | config=config,
|
337 | 338 | check_interval=_5_MS,
|
338 | 339 | )
|
| 340 | + |
| 341 | + async def test_get_or_create_force_restart(self) -> None: |
| 342 | + with mock.patch( |
| 343 | + CMD_INFO, |
| 344 | + side_effect=[ |
| 345 | + # -- state for slurm:///123 |
| 346 | + server(AppState.RUNNING, name="123"), |
| 347 | + # -- force_restart kills the server |
| 348 | + server(AppState.CANCELLED, name="123"), |
| 349 | + # -- states for (new) slurm:///456 |
| 350 | + server(AppState.SUBMITTED, name="456"), |
| 351 | + server(AppState.PENDING, name="456"), |
| 352 | + server(AppState.RUNNING, name="456"), |
| 353 | + ], |
| 354 | + ) as mock_info, mock.patch( |
| 355 | + CMD_CREATE, return_value="slurm:///456" |
| 356 | + ) as mock_create, mock.patch(CMD_KILL) as mock_kill: |
| 357 | + config = Config( |
| 358 | + scheduler="slurm", |
| 359 | + scheduler_args={}, |
| 360 | + appdef=defaults.component_fn("slurm")(), |
| 361 | + ) |
| 362 | + server_info = await commands.get_or_create( |
| 363 | + name="123", |
| 364 | + config=config, |
| 365 | + check_interval=_5_MS, |
| 366 | + force_restart=True, |
| 367 | + ) |
| 368 | + |
| 369 | + mock_create.called_once_with(config, "123") |
| 370 | + mock_kill.assert_called_once_with("slurm:///123") |
| 371 | + self.assertEqual(server_info.server_handle, "slurm:///456") |
| 372 | + self.assertListEqual( |
| 373 | + mock_info.call_args_list, |
| 374 | + [ |
| 375 | + mock.call("slurm:///123"), |
| 376 | + mock.call("slurm:///123"), |
| 377 | + mock.call("slurm:///456"), |
| 378 | + mock.call("slurm:///456"), |
| 379 | + mock.call("slurm:///456"), |
| 380 | + ], |
| 381 | + ) |
0 commit comments