From fbc089755c3ae22854b284c1927a40204d0133fc Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Wed, 6 May 2020 15:52:36 +0200 Subject: [PATCH] pybind/mgr: properly mock the mon store for pytest Signed-off-by: Sebastian Wagner --- src/pybind/mgr/cephadm/tests/fixtures.py | 36 +----------------------- src/pybind/mgr/tests/__init__.py | 36 +++++++++++++++++++++--- 2 files changed, 33 insertions(+), 39 deletions(-) diff --git a/src/pybind/mgr/cephadm/tests/fixtures.py b/src/pybind/mgr/cephadm/tests/fixtures.py index 66522925dd522..42bc8a25e1ef7 100644 --- a/src/pybind/mgr/cephadm/tests/fixtures.py +++ b/src/pybind/mgr/cephadm/tests/fixtures.py @@ -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 diff --git a/src/pybind/mgr/tests/__init__.py b/src/pybind/mgr/tests/__init__.py index 79c2350ee54fc..40c3c2c2fd68a 100644 --- a/src/pybind/mgr/tests/__init__.py +++ b/src/pybind/mgr/tests/__init__.py @@ -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 -- 2.39.5