]> 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)
committerAdam King <adking@redhat.com>
Thu, 23 Sep 2021 00:21:02 +0000 (20:21 -0400)
Signed-off-by: Adam King <adking@redhat.com>
src/cephadm/cephadm
src/cephadm/tests/test_cephadm.py

index 6eb55d63c470956bbf84bb25fc30fe94af5999d1..69a852ede56089a22966f29cbcad0a1a5f28f831 100755 (executable)
@@ -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):
index 4dedeeefbeea999e4343c3c2b78455e2d6d4dc63..1ceb49cc72efb85a9929704e9e1151e7969b3a7a 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()
@@ -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')