From: Adam King Date: Wed, 22 Sep 2021 18:34:12 +0000 (-0400) Subject: cephadm: unit tests for maitenance mode return values X-Git-Tag: v17.1.0~822^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=73e6aa8d9ca69c96361fae6998dd71d252808aa4;p=ceph.git cephadm: unit tests for maitenance mode return values Signed-off-by: Adam King --- diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index 6eb55d63c470..69a852ede560 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -7722,6 +7722,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: @@ -7758,7 +7762,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 4dedeeefbeea..1ceb49cc72ef 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() @@ -914,6 +913,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 @@ -940,6 +940,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')