From: Kefu Chai Date: Tue, 21 Oct 2025 03:26:25 +0000 (+0800) Subject: cephadm/tests: Add tests for deb bundled dependencies X-Git-Tag: testing/wip-jcollin-testing-20260212.143545-tentacle~2^2~6^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f3cb2a8229f20d5e504dff81802e52472477fc28;p=ceph-ci.git cephadm/tests: Add tests for deb bundled dependencies Add container definitions and test cases for building cephadm with Debian package dependencies. The new test_cephadm_build_from_debs function mirrors the existing RPM test structure, verifying that: - Build succeeds when required Debian packages are installed - Build fails when packages are missing - Bundled packages are correctly identified as sourced from 'deb' - All expected packages (Jinja2, MarkupSafe, PyYAML) are included - The zipapp contains expected package directories Test environments include Ubuntu 22.04 and 24.04 with and without the required python3-jinja2, python3-yaml, and python3-markupsafe packages. Signed-off-by: Kefu Chai (cherry picked from commit f670dce5d0b819f2fb105339d8611509e81a0355) --- diff --git a/src/cephadm/tests/build/test_cephadm_build.py b/src/cephadm/tests/build/test_cephadm_build.py index a07e0a1bb38..d430f9521e4 100644 --- a/src/cephadm/tests/build/test_cephadm_build.py +++ b/src/cephadm/tests/build/test_cephadm_build.py @@ -47,6 +47,16 @@ CONTAINERS = { 'base_image': 'docker.io/library/ubuntu:24.04', 'script': 'apt update && apt install -y python3-venv', }, + 'ubuntu-22.04-plusdeps': { + 'name': 'cephadm-build-test:ubuntu-22-04-py3-deps', + 'base_image': 'docker.io/library/ubuntu:22.04', + 'script': 'apt update && apt install -y python3-jinja2 python3-yaml python3-markupsafe', + }, + 'ubuntu-24.04-plusdeps': { + 'name': 'cephadm-build-test:ubuntu-24-04-py3-deps', + 'base_image': 'docker.io/library/ubuntu:24.04', + 'script': 'apt update && apt install -y python3-jinja2 python3-yaml python3-markupsafe', + }, } BUILD_PY = 'src/cephadm/build.py' @@ -193,6 +203,57 @@ def test_cephadm_build_from_rpms(env, source_dir, tmp_path): assert any(e.startswith('_cephadmmeta') for e in zre) +@pytest.mark.parametrize( + 'env', + [ + 'ubuntu-22.04-plusdeps', + 'ubuntu-24.04-plusdeps', + 'ubuntu-22.04', + ], +) +def test_cephadm_build_from_debs(env, source_dir, tmp_path): + res = build_in( + env, + source_dir, + tmp_path, + ['-Bdeb', '-SCEPH_GIT_VER=0', '-SCEPH_GIT_NICE_VER=foobar'], + ) + if 'plusdeps' not in env: + assert res.returncode != 0 + return + binary = tmp_path / 'cephadm' + assert binary.is_file() + res = subprocess.run( + [sys.executable, str(binary), 'version'], + stdout=subprocess.PIPE, + ) + out = res.stdout.decode('utf8') + assert 'version' in out + assert 'foobar' in out + assert res.returncode == 0 + res = subprocess.run( + [sys.executable, str(binary), 'version', '--verbose'], + stdout=subprocess.PIPE, + ) + data = json.loads(res.stdout) + assert isinstance(data, dict) + assert 'bundled_packages' in data + assert all(v['package_source'] == 'deb' for v in data['bundled_packages']) + assert all( + v['name'] in ('Jinja2', 'MarkupSafe', 'PyYAML') + for v in data['bundled_packages'] + ) + assert all('requirements_entry' in v for v in data['bundled_packages']) + assert 'zip_root_entries' in data + zre = data['zip_root_entries'] + assert any(_dist_info(e, 'Jinja2') for e in zre) + assert any(_dist_info(e, 'MarkupSafe') for e in zre) + assert any(e.startswith('jinja2') for e in zre) + assert any(e.startswith('markupsafe') for e in zre) + assert any(e.startswith('cephadmlib') for e in zre) + assert any(e.startswith('_cephadmmeta') for e in zre) + + def _dist_info(entry, name): return ( entry.startswith(name) or entry.startswith(name.lower())