From a1161d90de75dc3ab2d05d276cc1dd3df5f575df Mon Sep 17 00:00:00 2001 From: Michael Fritch Date: Wed, 23 Jun 2021 14:06:35 -0600 Subject: [PATCH] cephadm: add `infer_fsid` unit test Signed-off-by: Michael Fritch (cherry picked from commit c19fb2568ed06376c103bdea22816811bf30317e) --- src/cephadm/cephadm | 10 ++- src/cephadm/tests/test_cephadm.py | 108 ++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 6 deletions(-) diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index 6186d83ac8398..0da1013f52316 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -1691,10 +1691,10 @@ def infer_config(func): """ @wraps(func) def _infer_config(ctx: CephadmContext): + ctx.config = ctx.config if 'config' in ctx else None if ctx.config: logger.debug('Using specified config: %s' % ctx.config) return func(ctx) - config = None if ctx.fsid: name = ctx.name if not name: @@ -1704,11 +1704,9 @@ def infer_config(func): name = daemon['name'] break if name: - config = '/var/lib/ceph/{}/{}/config'.format(ctx.fsid, - name) - if config: - logger.info('Inferring config %s' % config) - ctx.config = config + ctx.config = f'/var/lib/ceph/{ctx.fsid}/{name}/config' + if ctx.config: + logger.info('Inferring config %s' % ctx.config) elif os.path.exists(SHELL_DEFAULT_CONF): logger.debug('Using default config: %s' % SHELL_DEFAULT_CONF) ctx.config = SHELL_DEFAULT_CONF diff --git a/src/cephadm/tests/test_cephadm.py b/src/cephadm/tests/test_cephadm.py index 2304cf291031b..e9091bc747511 100644 --- a/src/cephadm/tests/test_cephadm.py +++ b/src/cephadm/tests/test_cephadm.py @@ -30,6 +30,16 @@ with mock.patch('builtins.open', create=True): cd = SourceFileLoader('cephadm', 'cephadm').load_module() +def get_ceph_conf( + fsid='00000000-0000-0000-0000-0000deadbeef', + mon_host='[v2:192.168.1.1:3300/0,v1:192.168.1.1:6789/0]'): + return f''' +# minimal ceph.conf for {fsid} +[global] + fsid = {fsid} + mon_host = {mon_host} +''' + class TestCephAdm(object): def test_docker_unit_file(self): @@ -522,6 +532,104 @@ docker.io/ceph/daemon-base:octopus s = 'ceph/ceph:latest' assert cd.normalize_image_digest(s) == f'{cd.DEFAULT_REGISTRY}/{s}' + @pytest.mark.parametrize('fsid, ceph_conf, list_daemons, result, err, ', + [ + ( + None, + None, + [], + None, + None, + ), + ( + '00000000-0000-0000-0000-0000deadbeef', + None, + [], + '00000000-0000-0000-0000-0000deadbeef', + None, + ), + ( + '00000000-0000-0000-0000-0000deadbeef', + None, + [ + {'fsid': '10000000-0000-0000-0000-0000deadbeef'}, + {'fsid': '20000000-0000-0000-0000-0000deadbeef'}, + ], + '00000000-0000-0000-0000-0000deadbeef', + None, + ), + ( + None, + None, + [ + {'fsid': '00000000-0000-0000-0000-0000deadbeef'}, + ], + '00000000-0000-0000-0000-0000deadbeef', + None, + ), + ( + None, + None, + [ + {'fsid': '10000000-0000-0000-0000-0000deadbeef'}, + {'fsid': '20000000-0000-0000-0000-0000deadbeef'}, + ], + None, + r'Cannot infer an fsid', + ), + ( + None, + get_ceph_conf(fsid='00000000-0000-0000-0000-0000deadbeef'), + [], + '00000000-0000-0000-0000-0000deadbeef', + None, + ), + ( + None, + get_ceph_conf(fsid='00000000-0000-0000-0000-0000deadbeef'), + [ + {'fsid': '00000000-0000-0000-0000-0000deadbeef'}, + ], + '00000000-0000-0000-0000-0000deadbeef', + None, + ), + ( + None, + get_ceph_conf(fsid='00000000-0000-0000-0000-0000deadbeef'), + [ + {'fsid': '10000000-0000-0000-0000-0000deadbeef'}, + {'fsid': '20000000-0000-0000-0000-0000deadbeef'}, + ], + None, + r'Cannot infer an fsid', + ), + ]) + @mock.patch('cephadm.call') + def test_infer_fsid(self, _call, fsid, ceph_conf, list_daemons, result, err, cephadm_fs): + # build the context + ctx = cd.CephadmContext() + ctx.fsid = fsid + + # mock the decorator + mock_fn = mock.Mock() + mock_fn.return_value = 0 + infer_fsid = cd.infer_fsid(mock_fn) + + # mock the ceph.conf file content + if ceph_conf: + f = cephadm_fs.create_file('ceph.conf', contents=ceph_conf) + ctx.config = f.path + + # test + with mock.patch('cephadm.list_daemons', return_value=list_daemons): + if err: + with pytest.raises(cd.Error, match=err): + infer_fsid(ctx) + else: + infer_fsid(ctx) + assert ctx.fsid == result + + class TestCustomContainer(unittest.TestCase): cc: cd.CustomContainer -- 2.39.5