diff --git a/jobs.py b/jobs.py index 5cbc52c37..d61047a0d 100755 --- a/jobs.py +++ b/jobs.py @@ -45,6 +45,16 @@ "paths": ["tests/misc"], "markers": "multi_vms and not flaky and not reboot", }, + "packages": { + "description": "tests that packages can be installed correctly", + "requirements": [ + "Any pool.", + ], + "nb_pools": 1, + "params": {}, + "paths": ["tests/packages"], + "markers": "", + }, "quicktest": { "description": "XAPI's quicktest, not so quick by the way", "requirements": [ diff --git a/lib/host.py b/lib/host.py index 88f629011..2b3b88dc2 100644 --- a/lib/host.py +++ b/lib/host.py @@ -275,7 +275,8 @@ def get_last_yum_history_tid(self): def yum_install(self, packages, enablerepo=None): logging.info('Install packages: %s on host %s' % (' '.join(packages), self)) enablerepo_cmd = ['--enablerepo=%s' % enablerepo] if enablerepo is not None else [] - return self.ssh(['yum', 'install', '-y'] + enablerepo_cmd + packages) + return self.ssh(['yum', 'install', '--setopt=skip_missing_names_on_install=False', '-y'] + + enablerepo_cmd + packages) def yum_remove(self, packages): logging.info('Remove packages: %s from host %s' % (' '.join(packages), self)) diff --git a/tests/packages/extra/conftest.py b/tests/packages/extra/conftest.py new file mode 100644 index 000000000..b67b56356 --- /dev/null +++ b/tests/packages/extra/conftest.py @@ -0,0 +1,12 @@ +import logging +import pytest +import urllib.request + +@pytest.fixture(scope="session") +def extra_pkgs(host): + version = host.xcp_version + url = f"https://reports.xcp-ng.org/{version}/extra_installable.txt" + + logging.info(f"Getting extra packages from {url}") + response = urllib.request.urlopen(url) + return response.read().decode('utf-8').splitlines() diff --git a/tests/packages/extra/test_extra_group_pkgs.py b/tests/packages/extra/test_extra_group_pkgs.py new file mode 100644 index 000000000..ef6ce952a --- /dev/null +++ b/tests/packages/extra/test_extra_group_pkgs.py @@ -0,0 +1,15 @@ +# Explicitly import package-scoped fixtures (see explanation in pkgfixtures.py) +from pkgfixtures import host_with_saved_yum_state + +# Requirements: +# From --hosts parameter: +# - host(A1): any master host of a pool, with access to XCP-ng RPM repositories and reports.xcp-ng.org. + +def test_extra_group_packages_url_resolved(host, extra_pkgs): + for p in extra_pkgs: + host.ssh(['yumdownloader', '--resolve', '--urls', p]) + +def test_extra_group_packages_can_be_installed(host_with_saved_yum_state, extra_pkgs): + # Just try to install all packages together. Installing them one by one + # takes too much time due to the generation of the initrd. + host_with_saved_yum_state.yum_install(extra_pkgs)