From 50ae2a55bef1175a8b7894bddfe5cf8994d2a494 Mon Sep 17 00:00:00 2001 From: Adam King Date: Wed, 22 Sep 2021 14:34:12 -0400 Subject: [PATCH] cephadm: unit tests for maitenance mode return values Signed-off-by: Adam King (cherry picked from commit 73e6aa8d9ca69c96361fae6998dd71d252808aa4) --- src/cephadm/cephadm | 6 +++- src/cephadm/tests/test_cephadm.py | 50 ++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index 24c8e8498e012..2ceefc5b6e955 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -7696,6 +7696,10 @@ def systemd_target_state(ctx: CephadmContext, target_name: str, subsystem: str = ) +def target_exists(ctx: CephadmContext) -> bool: + return os.path.exists(ctx.unit_dir + '/ceph.target') + + @infer_fsid def command_maintenance(ctx: CephadmContext) -> str: if not ctx.fsid: @@ -7732,7 +7736,7 @@ def command_maintenance(ctx: CephadmContext) -> str: # target to disable so attempting a disable will fail. We still need to # return success here or host will be permanently stuck in maintenance mode # as no daemons can be deployed so no systemd target will ever exist to disable. - if not os.path.exists(ctx.unit_dir + '/ceph.target'): + if not target_exists(ctx): return 'skipped - systemd target not present on this host. Host removed from maintenance mode.' # exit maintenance request if not systemd_target_state(ctx, target): diff --git a/src/cephadm/tests/test_cephadm.py b/src/cephadm/tests/test_cephadm.py index 43a0e4a35ed40..8a97026665168 100644 --- a/src/cephadm/tests/test_cephadm.py +++ b/src/cephadm/tests/test_cephadm.py @@ -26,7 +26,6 @@ from .fixtures import ( with_cephadm_ctx, ) - with mock.patch('builtins.open', create=True): from importlib.machinery import SourceFileLoader cd = SourceFileLoader('cephadm', 'cephadm').load_module() @@ -894,6 +893,7 @@ iMN28C2bKGao5UHvdER1rGy7 class TestMaintenance: systemd_target = "ceph.00000000-0000-0000-0000-000000c0ffee.target" + fsid = '0ea8cdd0-1bbf-11ec-a9c7-5254002763fa' def test_systemd_target_OK(self, tmp_path): base = tmp_path @@ -920,6 +920,54 @@ class TestMaintenance: with pytest.raises(SystemExit): cd._parse_args(['host-maintenance', 'wah']) + @mock.patch('cephadm.call') + @mock.patch('cephadm.systemd_target_state') + def test_enter_failure_1(self, _target_state, _call): + _call.return_value = '', '', 999 + _target_state.return_value = True + ctx: cd.CephadmContext = cd.cephadm_init_ctx( + ['host-maintenance', 'enter', '--fsid', TestMaintenance.fsid]) + ctx.container_engine = mock_podman() + retval = cd.command_maintenance(ctx) + assert retval.startswith('failed') + + @mock.patch('cephadm.call') + @mock.patch('cephadm.systemd_target_state') + def test_enter_failure_2(self, _target_state, _call): + _call.side_effect = [('', '', 0), ('', '', 999)] + _target_state.return_value = True + ctx: cd.CephadmContext = cd.cephadm_init_ctx( + ['host-maintenance', 'enter', '--fsid', TestMaintenance.fsid]) + ctx.container_engine = mock_podman() + retval = cd.command_maintenance(ctx) + assert retval.startswith('failed') + + @mock.patch('cephadm.call') + @mock.patch('cephadm.systemd_target_state') + @mock.patch('cephadm.target_exists') + def test_exit_failure_1(self, _target_exists, _target_state, _call): + _call.return_value = '', '', 999 + _target_state.return_value = False + _target_exists.return_value = True + ctx: cd.CephadmContext = cd.cephadm_init_ctx( + ['host-maintenance', 'exit', '--fsid', TestMaintenance.fsid]) + ctx.container_engine = mock_podman() + retval = cd.command_maintenance(ctx) + assert retval.startswith('failed') + + @mock.patch('cephadm.call') + @mock.patch('cephadm.systemd_target_state') + @mock.patch('cephadm.target_exists') + def test_exit_failure_2(self, _target_exists, _target_state, _call): + _call.side_effect = [('', '', 0), ('', '', 999)] + _target_state.return_value = False + _target_exists.return_value = True + ctx: cd.CephadmContext = cd.cephadm_init_ctx( + ['host-maintenance', 'exit', '--fsid', TestMaintenance.fsid]) + ctx.container_engine = mock_podman() + retval = cd.command_maintenance(ctx) + assert retval.startswith('failed') + class TestMonitoring(object): @mock.patch('cephadm.call') -- 2.39.5