]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind/mgr: properly mock the mon store for pytest 34926/head
authorSebastian Wagner <sebastian.wagner@suse.com>
Wed, 6 May 2020 13:52:36 +0000 (15:52 +0200)
committerSebastian Wagner <sebastian.wagner@suse.com>
Fri, 8 May 2020 10:01:06 +0000 (12:01 +0200)
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/cephadm/tests/fixtures.py
src/pybind/mgr/tests/__init__.py

index 66522925dd522110301471a7c6fcb7ccc4865325..42bc8a25e1ef75e3fff4b044b743f41da3a1b52d 100644 (file)
@@ -11,23 +11,6 @@ from orchestrator import raise_if_exception, Completion
 from tests import mock
 
 
-def set_store(self, k, v):
-    if v is None:
-        del self._store[k]
-    else:
-        self._store[k] = v
-
-
-def get_store(self, k):
-    return self._store.get(k, None)
-
-
-def get_store_prefix(self, prefix):
-    return {
-        k: v for k, v in self._store.items()
-        if k.startswith(prefix)
-    }
-
 
 def get_ceph_option(_, key):
     return __file__
@@ -52,30 +35,13 @@ def mon_command(*args, **kwargs):
 @pytest.yield_fixture()
 def cephadm_module():
     with mock.patch("cephadm.module.CephadmOrchestrator.get_ceph_option", get_ceph_option),\
-            mock.patch("cephadm.module.CephadmOrchestrator._configure_logging", lambda *args: None),\
             mock.patch("cephadm.module.CephadmOrchestrator.remote"),\
-            mock.patch("cephadm.module.CephadmOrchestrator.set_store", set_store), \
-            mock.patch("cephadm.module.CephadmOrchestrator.get_store", get_store),\
-            mock.patch("cephadm.inventory.HostCache.save_host"), \
-            mock.patch("cephadm.inventory.HostCache.rm_host"), \
             mock.patch("cephadm.module.CephadmOrchestrator.send_command"), \
-            mock.patch("cephadm.module.CephadmOrchestrator.mon_command", mon_command), \
-            mock.patch("cephadm.module.CephadmOrchestrator.get_store_prefix", get_store_prefix):
+            mock.patch("cephadm.module.CephadmOrchestrator.mon_command", mon_command):
 
-        CephadmOrchestrator._register_commands('')
-        CephadmOrchestrator._register_options('')
         m = CephadmOrchestrator.__new__ (CephadmOrchestrator)
-        m._root_logger = mock.MagicMock()
-        m._store = {
-            'ssh_config': '',
-            'ssh_identity_key': '',
-            'ssh_identity_pub': '',
-            'inventory': {},
-            'upgrade_state': None,
-        }
         m.__init__('cephadm', 0, 0)
         m._cluster_fsid = "fsid"
-        m.mode = "root"
         yield m
 
 
index 79c2350ee54fc835b753e1f54c2a1178d92da5c4..40c3c2c2fd68af2ccf3e7b84a4ba7714f12c6117 100644 (file)
@@ -16,19 +16,47 @@ if 'UNITTEST' in os.environ:
     except ImportError:
         import mock
 
+    M_classes = set()
+
     class M(object):
+        def _ceph_get_store(self, k):
+            return self._store.get(k, None)
+
+        def _ceph_set_store(self, k, v):
+            if v is None:
+                if k in self._store:
+                    del self._store[k]
+            else:
+                self._store[k] = v
+
+        def _ceph_get_store_prefix(self, prefix):
+            return {
+                k: v for k, v in self._store.items()
+                if k.startswith(prefix)
+            }
+
+        def _ceph_get_module_option(self, module, key, localized_prefix: None):
+            return self._ceph_get_store(f'{module}/{key}')
+
+        def _ceph_set_module_option(self, module, key, val):
+            return self._ceph_set_store(f'{module}/{key}', val)
+
         def __init__(self, *args):
+            self._store = {}
+
+            if self.__class__.__name__ not in M_classes:
+                # call those only once. 
+                self._register_commands('')
+                self._register_options('')
+                M_classes.add(self.__class__.__name__)
+
             super(M, self).__init__()
             self._ceph_get_version = mock.Mock()
             self._ceph_get = mock.MagicMock()
-            self._ceph_get_module_option = mock.MagicMock()
             self._ceph_get_option = mock.MagicMock()
-            self._validate_module_option = lambda _: True
             self._configure_logging = lambda *_: None
             self._unconfigure_logging = mock.MagicMock()
             self._ceph_log = mock.MagicMock()
-            self._ceph_get_store = lambda _: ''
-            self._ceph_get_store_prefix = lambda _: {}
             self._ceph_dispatch_remote = lambda *_: None