]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: unit tests for maitenance mode return values
authorAdam King <adking@redhat.com>
Wed, 22 Sep 2021 18:34:12 +0000 (14:34 -0400)
committerSebastian Wagner <sewagner@redhat.com>
Tue, 2 Nov 2021 09:01:18 +0000 (10:01 +0100)
Signed-off-by: Adam King <adking@redhat.com>
(cherry picked from commit 73e6aa8d9ca69c96361fae6998dd71d252808aa4)

src/cephadm/cephadm
src/cephadm/tests/test_cephadm.py

index 24c8e8498e012a395e6ad0a43ae02b8197e7cc0b..2ceefc5b6e955911070c99e7bea9be3a4cfa1237 100755 (executable)
@@ -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):
index 43a0e4a35ed4091e92fffd7de5788870806e73aa..8a97026665168271b5fb42a5bb22b10453a8630f 100644 (file)
@@ -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')