'base_image': 'quay.io/centos/centos:stream9',
'script': 'dnf install -y python3',
},
+ 'centos-8-plusdeps': {
+ 'name': 'cephadm-build-test:centos8-py36-deps',
+ 'base_image': 'quay.io/centos/centos:stream8',
+ 'script': 'dnf install -y python36 python3-jinja2',
+ },
+ 'centos-9-plusdeps': {
+ 'name': 'cephadm-build-test:centos9-py3-deps',
+ 'base_image': 'quay.io/centos/centos:stream9',
+ 'script': 'dnf install -y python3 python3-jinja2',
+ },
'ubuntu-20.04': {
'name': 'cephadm-build-test:ubuntu-20-04-py3',
'base_image': 'docker.io/library/ubuntu:20.04',
ctr = CONTAINERS[alias]
build_container(ctr['base_image'], ctr['name'], ctr['script'], out_dir)
cmd = ['/ceph/' + BUILD_PY] + list(args or []) + ['/out/cephadm']
- run_container_cmd(ctr['name'], cmd, ceph_dir, out_dir)
+ return run_container_cmd(ctr['name'], cmd, ceph_dir, out_dir)
@pytest.fixture
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)
+
+
+@pytest.mark.parametrize(
+ 'env',
+ [
+ 'centos-8-plusdeps',
+ 'centos-9-plusdeps',
+ 'centos-9',
+ ],
+)
+def test_cephadm_build_from_rpms(env, source_dir, tmp_path):
+ res = build_in(
+ env,
+ source_dir,
+ tmp_path,
+ ['-Brpm', '-SCEPH_GIT_VER=0', '-SCEPH_GIT_NICE_VER=foobar'],
+ )
+ if 'plusdeps' not in env:
+ assert res.returncode != 0
+ return
+ binary = tmp_path / 'cephadm'
+ if 'centos-8' in env and sys.version_info[:2] >= (3, 10):
+ # The version of markupsafe in centos 8 is incompatible with
+ # python>=3.10 due to changes in the stdlib therefore we can't execute
+ # the cephadm binary, so we quit the test early.
+ return
+ 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'] == 'rpm' for v in data['bundled_packages'])
+ assert all(
+ v['name'] in ('Jinja2', 'MarkupSafe')
+ 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(e.startswith('Jinja2') for e in zre)
+ assert any(e.startswith('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)