]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: use CephadmContext rather than MagicMock 42288/head
authorMichael Fritch <mfritch@suse.com>
Fri, 9 Jul 2021 01:28:39 +0000 (19:28 -0600)
committerMichael Fritch <mfritch@suse.com>
Fri, 9 Jul 2021 19:09:18 +0000 (13:09 -0600)
MagicMock hides attribute errors:

```
ctx = <cephadm.CephadmContext object at 0x7f0a12f58eb0>, 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 <mfritch@suse.com>
src/cephadm/tests/test_cephadm.py

index cbd1e1cea8ce9d2d7fd54942e0b45f01cb6455fb..35b7b37d82385f5518222ee1ed59ac077efa5abf 100644 (file)
@@ -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):
@@ -516,7 +516,7 @@ docker.io/ceph/daemon-base:octopus
         assert image == 'docker.io/ceph/ceph:v15.2.5'
 
     def test_should_log_to_journald(self):
-        ctx = mock.Mock()
+        ctx = cd.CephadmContext()
         # explicit
         ctx.log_to_journald = True
         assert cd.should_log_to_journald(ctx)
@@ -945,7 +945,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`
@@ -963,7 +964,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)
@@ -971,7 +973,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)