From 8800e077e35f5edd4ce7aa6eff9be0c930fe555e Mon Sep 17 00:00:00 2001 From: Michael Fritch Date: Thu, 8 Jul 2021 19:28:39 -0600 Subject: [PATCH] cephadm: use CephadmContext rather than MagicMock MagicMock hides attribute errors: ``` ctx = , container_id = 'container_id', daemon_type = 'node-exporter' @staticmethod def get_version(ctx, container_id, daemon_type): # type: (CephadmContext, str, str) -> str """ :param: daemon_type Either "prometheus", "alertmanager" or "node-exporter" """ assert daemon_type in ('prometheus', 'alertmanager', 'node-exporter') cmd = daemon_type.replace('-', '_') code = -1 err = '' version = '' if daemon_type == 'alertmanager': for cmd in ['alertmanager', 'prometheus-alertmanager']: _, err, code = call(ctx, [ ctx.container_engine.path, 'exec', container_id, cmd, '--version' ], verbosity=CallVerbosity.DEBUG) if code == 0: break cmd = 'alertmanager' # reset cmd for version extraction else: _, err, code = call(ctx, [ > ctx.container_engine.path, 'exec', container_id, cmd, '--version' ], verbosity=CallVerbosity.DEBUG) E AttributeError: 'NoneType' object has no attribute 'path' ``` Signed-off-by: Michael Fritch (cherry picked from commit 25d62794fc3cfb6496da12a265c97871a470fa4f) Conflicts: src/cephadm/tests/test_cephadm.py --- src/cephadm/tests/test_cephadm.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/cephadm/tests/test_cephadm.py b/src/cephadm/tests/test_cephadm.py index d5f9df47c4ded..2304cf291031b 100644 --- a/src/cephadm/tests/test_cephadm.py +++ b/src/cephadm/tests/test_cephadm.py @@ -33,7 +33,7 @@ with mock.patch('builtins.open', create=True): class TestCephAdm(object): def test_docker_unit_file(self): - ctx = mock.Mock() + ctx = cd.CephadmContext() ctx.container_engine = mock_docker() r = cd.get_unit_file(ctx, '9b9d7609-f4d5-4aba-94c8-effa764d96c9') assert 'Requires=docker.service' in r @@ -91,7 +91,7 @@ class TestCephAdm(object): @mock.patch('socket.socket') @mock.patch('cephadm.logger') def test_check_ip_port_success(self, logger, _socket): - ctx = mock.Mock() + ctx = cd.CephadmContext() ctx.skip_ping_check = False # enables executing port check with `check_ip_port` for address, address_family in ( @@ -108,7 +108,7 @@ class TestCephAdm(object): @mock.patch('socket.socket') @mock.patch('cephadm.logger') def test_check_ip_port_failure(self, logger, _socket): - ctx = mock.Mock() + ctx = cd.CephadmContext() ctx.skip_ping_check = False # enables executing port check with `check_ip_port` def os_error(errno): @@ -925,7 +925,8 @@ class TestMaintenance: class TestMonitoring(object): @mock.patch('cephadm.call') def test_get_version_alertmanager(self, _call): - ctx = mock.Mock() + ctx = cd.CephadmContext() + ctx.container_engine = mock_podman() daemon_type = 'alertmanager' # binary `prometheus` @@ -943,7 +944,8 @@ class TestMonitoring(object): @mock.patch('cephadm.call') def test_get_version_prometheus(self, _call): - ctx = mock.Mock() + ctx = cd.CephadmContext() + ctx.container_engine = mock_podman() daemon_type = 'prometheus' _call.return_value = '', '{}, version 0.16.1'.format(daemon_type), 0 version = cd.Monitoring.get_version(ctx, 'container_id', daemon_type) @@ -951,7 +953,8 @@ class TestMonitoring(object): @mock.patch('cephadm.call') def test_get_version_node_exporter(self, _call): - ctx = mock.Mock() + ctx = cd.CephadmContext() + ctx.container_engine = mock_podman() daemon_type = 'node-exporter' _call.return_value = '', '{}, version 0.16.1'.format(daemon_type.replace('-', '_')), 0 version = cd.Monitoring.get_version(ctx, 'container_id', daemon_type) -- 2.39.5