From 46cd148ec13c7e79a93e3d9f6a5d0bd8a97e0ac3 Mon Sep 17 00:00:00 2001 From: Arif Ali Date: Fri, 15 Mar 2024 11:06:34 +0000 Subject: [cirrus] Run tests on latest daily builds for ubuntu Fix the issues reported by the tests on the new version of ubuntu Resolves: #3587 Closes: #3588 Related: SET-594,SET-595 Co-authored-by: David Negreira Signed-off-by: Arif Ali Signed-off-by: David Negreira --- .cirrus.yml | 55 ++++++++++++++++++++-- sos/policies/runtimes/lxd.py | 1 + .../basic_function_tests/report_with_mask.py | 4 +- tests/collect_tests/help_output_tests.py | 2 +- tests/report_tests/basic_report_tests.py | 6 +-- tests/report_tests/encryption_tests.py | 5 +- tests/report_tests/exception_tests.py | 6 +-- tests/report_tests/options_tests/options_tests.py | 4 +- tests/sos_tests.py | 2 +- tests/unittests/policy_tests.py | 6 +-- 10 files changed, 71 insertions(+), 20 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index a4c5d92b..7bd019bd 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -21,6 +21,7 @@ env: FEDORA_PROJECT: "fedora-cloud" SOS_PROJECT: "sos-devel-jobs" UBUNTU_PROJECT: "ubuntu-os-cloud" + UBUNTU_DEVEL_PROJECT: "ubuntu-os-cloud-devel" # Images exist on GCP already CENTOS_9_IMAGE_NAME: "centos-stream-9-v20230809" @@ -28,12 +29,14 @@ env: DEBIAN_IMAGE_NAME: "debian-11-bullseye-v20230809" FEDORA_IMAGE_NAME: "fedora-cloud-base-gcp-38-1-6-x86-64" FEDORA_PRIOR_IMAGE_NAME: "fedora-cloud-base-gcp-37-1-7-x86-64" + UBUNTU_DEB_IMAGE_NAME: "ubuntu-minimal-2310-mantic-amd64-v20231030" UBUNTU_LATEST_IMAGE_NAME: "ubuntu-2310-mantic-amd64-v20231031" UBUNTU_IMAGE_NAME: "ubuntu-2204-jammy-v20231030" UBUNTU_PRIOR_IMAGE_NAME: "ubuntu-2004-focal-v20231101" UBUNTU_PRIOR2_IMAGE_NAME: "ubuntu-1804-bionic-v20230605" UBUNTU_SNAP_IMAGE_NAME: "ubuntu-2204-jammy-v20231030" + UBUNTU_DEVEL_FAMILY_NAME: "ubuntu-2404-lts-amd64" # Curl-command prefix for downloading task artifacts, simply add the # the url-encoded task name, artifact name, and path as a suffix. @@ -226,14 +229,40 @@ report_stageone_task: pip3 install avocado-framework==94.0 ${PIP_EXTRA} # run the unittests separately as they require a different PYTHONPATH in # order for the imports to work properly under avocado - unittest_script: PYTHONPATH=. avocado run tests/unittests/ - main_script: PYTHONPATH=tests/ avocado run -p TESTLOCAL=true --test-runner=runner -t stageone tests/{cleaner,collect,report,vendor}_tests + unittest_script: &unit_test | + PYTHONPATH=. avocado run tests/unittests/ + main_script: &stageone_test + PYTHONPATH=tests/ avocado run -p TESTLOCAL=true --test-runner=runner -t stageone tests/{cleaner,collect,report,vendor}_tests on_failure: fail_script: &faillogs | ls -d /var/tmp/avocado* /root/avocado* 2> /dev/null | xargs tar cf sos-fail-logs.tar log_artifacts: &logs path: "sos-fail-logs.tar" +report_stageone_daily_task: + alias: "stageone_daily_report" + name: "Report Stage One - ${UBUNTU_DEVEL_FAMILY_NAME}" + allow_failures: true + depends_on: + - snap_build + gce_instance: + image_project: ${UBUNTU_DEVEL_PROJECT} + image_family: ${UBUNTU_DEVEL_FAMILY_NAME} + type: e2-medium + environment: + PKG: "snap" + setup_script: *setup + avocado_install_script: &avocado_setup | + pip3 uninstall -y avocado-framework --break-system-packages + git clone --single-branch -b 92lts https://github.com/avocado-framework/avocado.git + cd avocado + make install + unittest_script: *unit_test + main_script: *stageone_test + on_failure: + fail_script: *faillogs + log_artifacts: *logs + # IFF the stage one tests all pass, then run stage two for latest distros report_stagetwo_task: alias: "stagetwo_report" @@ -255,7 +284,27 @@ report_stagetwo_task: if [ $(command -v dnf) ]; then dnf -y install python3-pexpect fi - main_script: PYTHONPATH=tests/ avocado run -p TESTLOCAL=true --test-runner=runner -t stagetwo tests/{cleaner,collect,report,vendor}_tests + main_script: &stagetwo_test | + PYTHONPATH=tests/ avocado run -p TESTLOCAL=true --test-runner=runner -t stagetwo tests/{cleaner,collect,report,vendor}_tests + on_failure: + fail_script: *faillogs + log_artifacts: *logs + +report_stagetwo_daily_task: + alias: "stagetwo_daily_report" + name: "Report Stage Two - ${UBUNTU_DEVEL_FAMILY_NAME}" + allow_failures: true + depends_on: stageone_daily_report + timeout_in: 45m + gce_instance: + image_project: ${UBUNTU_DEVEL_PROJECT} + image_family: ${UBUNTU_DEVEL_FAMILY_NAME} + type: e2-medium + environment: + PKG: "snap" + setup_script: *setup + avocado_install_script: *avocado_setup + main_script: *stagetwo_test on_failure: fail_script: *faillogs log_artifacts: *logs diff --git a/sos/policies/runtimes/lxd.py b/sos/policies/runtimes/lxd.py index 2d0b5b48..a6962782 100644 --- a/sos/policies/runtimes/lxd.py +++ b/sos/policies/runtimes/lxd.py @@ -24,6 +24,7 @@ class LxdContainerRuntime(ContainerRuntime): def check_is_active(self): # the daemon must be running if (is_executable('lxc', self.policy.sysroot) and + self.policy.package_manager.pkg_by_name('lxd') and (self.policy.init_system.is_running('lxd') or self.policy.init_system.is_running('snap.lxd.daemon'))): self.active = True diff --git a/tests/cleaner_tests/basic_function_tests/report_with_mask.py b/tests/cleaner_tests/basic_function_tests/report_with_mask.py index 06bb2122..bb72cdde 100644 --- a/tests/cleaner_tests/basic_function_tests/report_with_mask.py +++ b/tests/cleaner_tests/basic_function_tests/report_with_mask.py @@ -119,7 +119,7 @@ class DefaultRemoveBinaryFilesTest(StageTwoReportTest): self.assertFileNotCollected('var/log/binary_test.tar.xz') def test_binaries_removed_reported(self): - self.assertOutputContains('\[removed .* unprocessable files\]') + self.assertOutputContains(r'\[removed .* unprocessable files\]') class KeepBinaryFilesTest(StageTwoReportTest): @@ -142,4 +142,4 @@ class KeepBinaryFilesTest(StageTwoReportTest): self.assertFileCollected('var/log/binary_test.tar.xz') def test_no_binaries_reported_removed(self): - self.assertOutputNotContains('\[removed .* unprocessable files\]') + self.assertOutputNotContains(r'\[removed .* unprocessable files\]') diff --git a/tests/collect_tests/help_output_tests.py b/tests/collect_tests/help_output_tests.py index 258bb8d7..584ad498 100644 --- a/tests/collect_tests/help_output_tests.py +++ b/tests/collect_tests/help_output_tests.py @@ -65,7 +65,7 @@ class CollectOptionsHelpTest(StageOneOutputTest): @skipIf(PEXPECT_PRESENT is False, "python3-pexpect not installed locally") def test_cluster_profiles_shown(self): - _out = re.search("Use the short name with --cluster-type or cluster options \(-c\)(.*?)The following cluster options are available:", + _out = re.search(r"Use the short name with --cluster-type or cluster options \(-c\)(.*?)The following cluster options are available:", self.cmd_output.stdout, re.S).group(1).splitlines() _profs = {} for ln in _out: diff --git a/tests/report_tests/basic_report_tests.py b/tests/report_tests/basic_report_tests.py index a6fdf003..58618cbc 100644 --- a/tests/report_tests/basic_report_tests.py +++ b/tests/report_tests/basic_report_tests.py @@ -23,7 +23,7 @@ class NormalSoSReport(StageOneReportTest): def test_debug_not_printed_to_console(self): self.assertOutputNotContains('added cmd output') - self.assertOutputNotContains('\[archive:.*\]') + self.assertOutputNotContains(r'\[archive:.*\]') def test_postproc_called(self): self.assertSosLogContains('substituting scrpath') @@ -61,11 +61,11 @@ class LogLevelTest(StageOneReportTest): sos_cmd = '-vvv -o kernel,host,boot,filesys' def test_archive_logging_enabled(self): - self.assertSosLogContains('DEBUG: \[archive:.*\]') + self.assertSosLogContains(r'DEBUG: \[archive:.*\]') self.assertSosLogContains('Making leading paths for') def test_debug_printed_to_console(self): - self.assertOutputContains('\[plugin:.*\]') + self.assertOutputContains(r'\[plugin:.*\]') class RestrictedSoSReport(StageOneReportTest): diff --git a/tests/report_tests/encryption_tests.py b/tests/report_tests/encryption_tests.py index 9ce401ec..d60d9d78 100644 --- a/tests/report_tests/encryption_tests.py +++ b/tests/report_tests/encryption_tests.py @@ -22,10 +22,11 @@ class EncryptedReportTest(StageOneReportTest): sos_cmd = "-o kernel --encrypt-pass %s" % encrypt_pass def test_archive_gpg_encrypted(self): - self.assertOutputContains('/.*sosreport-.*tar.*\.gpg') + self.assertOutputContains(r'/.*sosreport-.*tar.*\.gpg') _cmd = "file %s" % self.encrypted_path res = process.run(_cmd) - self.assertTrue("GPG symmetrically encrypted data" in res.stdout.decode()) + self.assertTrue(("GPG symmetrically encrypted data" in res.stdout.decode()) + or ("PGP symmetric key encrypted data" in res.stdout.decode())) def test_tarball_named_secure(self): self.assertTrue('secured-' in self.encrypted_path) diff --git a/tests/report_tests/exception_tests.py b/tests/report_tests/exception_tests.py index 769954a0..678c06d6 100644 --- a/tests/report_tests/exception_tests.py +++ b/tests/report_tests/exception_tests.py @@ -17,7 +17,7 @@ class InvalidPluginEnabledTest(StageOneReportExceptionTest): sos_cmd = '-o foobar' def test_caught_invalid_plugin(self): - self.assertOutputContains('a non-existing plugin \(foobar\)') + self.assertOutputContains(r'a non-existing plugin \(foobar\)') class InvalidPluginOptionTest(StageOneReportExceptionTest): @@ -28,7 +28,7 @@ class InvalidPluginOptionTest(StageOneReportExceptionTest): sos_cmd = '-o kernel -k kernel.colonel=on' def test_caught_invalid_plugin_option(self): - self.assertOutputContains('no such option "colonel" for plugin \(kernel\)') + self.assertOutputContains(r'no such option "colonel" for plugin \(kernel\)') class InvalidReportOptionTest(StageOneReportExceptionTest): @@ -39,7 +39,7 @@ class InvalidReportOptionTest(StageOneReportExceptionTest): sos_cmd = '--magic' def test_caught_invalid_option(self): - self.assertOutputContains('unrecognized arguments\: --magic') + self.assertOutputContains(r'unrecognized arguments\: --magic') class InvalidPluginDisableTest(StageOneReportTest): diff --git a/tests/report_tests/options_tests/options_tests.py b/tests/report_tests/options_tests/options_tests.py index 997042ba..e912da8d 100644 --- a/tests/report_tests/options_tests/options_tests.py +++ b/tests/report_tests/options_tests/options_tests.py @@ -27,10 +27,10 @@ class OptionsFromConfigTest(StageTwoReportTest): def test_plugopts_logged_from_config(self): self.assertSosLogContains( - "Set kernel plugin option to \(name=with-timer, desc='gather /proc/timer\* statistics', value=True, default=False\)" + r"Set kernel plugin option to \(name=with-timer, desc='gather /proc/timer\* statistics', value=True, default=False\)" ) self.assertSosLogContains( - "Set kernel plugin option to \(name=trace, desc='gather /sys/kernel/debug/tracing/trace file', value=True, default=False\)" + r"Set kernel plugin option to \(name=trace, desc='gather /sys/kernel/debug/tracing/trace file', value=True, default=False\)" ) def test_disabled_plugopts_not_loaded(self): diff --git a/tests/sos_tests.py b/tests/sos_tests.py index d15395f0..1fb31875 100644 --- a/tests/sos_tests.py +++ b/tests/sos_tests.py @@ -424,7 +424,7 @@ class BaseSoSReportTest(BaseSoSTest): override """ try: - return re.findall('/.*sosreport-.*tar.*\.gpg', self.cmd_output.stdout)[-1] + return re.findall(r'/.*sosreport-.*tar.*\.gpg', self.cmd_output.stdout)[-1] except: return None diff --git a/tests/unittests/policy_tests.py b/tests/unittests/policy_tests.py index 1cefaab7..a64275b8 100644 --- a/tests/unittests/policy_tests.py +++ b/tests/unittests/policy_tests.py @@ -108,7 +108,7 @@ class RpmPackageManagerTests(unittest.TestCase): self.pm = RpmPackageManager() def test_load_all_packages(self): - self.assertNotEquals(self.pm.packages, {}) + self.assertNotEqual(self.pm.packages, {}) def test_pkg_is_formatted(self): kpkg = self.pm.pkg_by_name('coreutils') @@ -125,7 +125,7 @@ class DpkgPackageManagerTests(unittest.TestCase): self.pm = DpkgPackageManager() def test_load_all_packages(self): - self.assertNotEquals(self.pm.packages, {}) + self.assertNotEqual(self.pm.packages, {}) def test_pkg_is_formatted(self): kpkg = self.pm.pkg_by_name('coreutils') @@ -141,7 +141,7 @@ class MultiPackageManagerTests(unittest.TestCase): fallbacks=[DpkgPackageManager]) def test_load_all_packages(self): - self.assertNotEquals(self.pm.packages, {}) + self.assertNotEqual(self.pm.packages, {}) def test_pkg_is_formatted(self): kpkg = self.pm.pkg_by_name('coreutils') -- cgit