diff --git a/tests/resources/distros/almalinux10/etc/almalinux-release b/tests/resources/distros/almalinux10/etc/almalinux-release new file mode 100644 index 0000000..c028fda --- /dev/null +++ b/tests/resources/distros/almalinux10/etc/almalinux-release @@ -0,0 +1 @@ +AlmaLinux release 10.0 (Purple Lion) diff --git a/tests/resources/distros/almalinux10/etc/almalinux-release-upstream b/tests/resources/distros/almalinux10/etc/almalinux-release-upstream new file mode 100644 index 0000000..41cb96d --- /dev/null +++ b/tests/resources/distros/almalinux10/etc/almalinux-release-upstream @@ -0,0 +1 @@ +Derived from Red Hat Enterprise Linux 10.0 diff --git a/tests/resources/distros/almalinux10/etc/centos-release b/tests/resources/distros/almalinux10/etc/centos-release new file mode 120000 index 0000000..1fe6ce0 --- /dev/null +++ b/tests/resources/distros/almalinux10/etc/centos-release @@ -0,0 +1 @@ +almalinux-release \ No newline at end of file diff --git a/tests/resources/distros/almalinux10/etc/os-release b/tests/resources/distros/almalinux10/etc/os-release new file mode 120000 index 0000000..c4c75b4 --- /dev/null +++ b/tests/resources/distros/almalinux10/etc/os-release @@ -0,0 +1 @@ +../usr/lib/os-release \ No newline at end of file diff --git a/tests/resources/distros/almalinux10/etc/redhat-release b/tests/resources/distros/almalinux10/etc/redhat-release new file mode 120000 index 0000000..1fe6ce0 --- /dev/null +++ b/tests/resources/distros/almalinux10/etc/redhat-release @@ -0,0 +1 @@ +almalinux-release \ No newline at end of file diff --git a/tests/resources/distros/almalinux10/etc/system-release b/tests/resources/distros/almalinux10/etc/system-release new file mode 120000 index 0000000..1fe6ce0 --- /dev/null +++ b/tests/resources/distros/almalinux10/etc/system-release @@ -0,0 +1 @@ +almalinux-release \ No newline at end of file diff --git a/tests/resources/distros/almalinux10/etc/system-release-cpe b/tests/resources/distros/almalinux10/etc/system-release-cpe new file mode 100644 index 0000000..44ce5c2 --- /dev/null +++ b/tests/resources/distros/almalinux10/etc/system-release-cpe @@ -0,0 +1 @@ +cpe:/o:almalinux:almalinux:10::baseos diff --git a/tests/resources/distros/almalinux10/usr/lib/almalinux-release b/tests/resources/distros/almalinux10/usr/lib/almalinux-release new file mode 100644 index 0000000..c028fda --- /dev/null +++ b/tests/resources/distros/almalinux10/usr/lib/almalinux-release @@ -0,0 +1 @@ +AlmaLinux release 10.0 (Purple Lion) diff --git a/tests/resources/distros/almalinux10/usr/lib/os-release b/tests/resources/distros/almalinux10/usr/lib/os-release new file mode 100644 index 0000000..9dec234 --- /dev/null +++ b/tests/resources/distros/almalinux10/usr/lib/os-release @@ -0,0 +1,21 @@ +NAME="AlmaLinux" +VERSION="10.0 (Purple Lion)" +ID="almalinux" +ID_LIKE="rhel centos fedora" +VERSION_ID="10.0" +PLATFORM_ID="platform:el10" +PRETTY_NAME="AlmaLinux 10.0 (Purple Lion)" +ANSI_COLOR="0;34" +LOGO="fedora-logo-icon" +CPE_NAME="cpe:/o:almalinux:almalinux:10::baseos" +HOME_URL="https://almalinux.org/" +DOCUMENTATION_URL="https://wiki.almalinux.org/" +VENDOR_NAME="AlmaLinux" +VENDOR_URL="https://almalinux.org/" +BUG_REPORT_URL="https://bugs.almalinux.org/" + +ALMALINUX_MANTISBT_PROJECT="AlmaLinux-10" +ALMALINUX_MANTISBT_PROJECT_VERSION="10.0" +REDHAT_SUPPORT_PRODUCT="AlmaLinux" +REDHAT_SUPPORT_PRODUCT_VERSION="10.0" +SUPPORT_END=2035-06-01 diff --git a/tests/resources/distros/centosstream9/etc/centos-release b/tests/resources/distros/centosstream9/etc/centos-release new file mode 100644 index 0000000..81fb0fa --- /dev/null +++ b/tests/resources/distros/centosstream9/etc/centos-release @@ -0,0 +1 @@ +CentOS Stream release 9 diff --git a/tests/resources/distros/centosstream9/etc/os-release b/tests/resources/distros/centosstream9/etc/os-release new file mode 100644 index 0000000..3ed2a15 --- /dev/null +++ b/tests/resources/distros/centosstream9/etc/os-release @@ -0,0 +1,14 @@ +NAME="CentOS Stream" +VERSION="9" +ID="centos" +ID_LIKE="rhel fedora" +VERSION_ID="9" +PLATFORM_ID="platform:el9" +PRETTY_NAME="CentOS Stream 9" +ANSI_COLOR="0;31" +LOGO="fedora-logo-icon" +CPE_NAME="cpe:/o:centos:centos:9" +HOME_URL="https://centos.org/" +BUG_REPORT_URL="https://issues.redhat.com/" +REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 9" +REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream" diff --git a/tests/resources/distros/debian13/bin/lsb_release b/tests/resources/distros/debian13/bin/lsb_release new file mode 100644 index 0000000..fa82ab8 --- /dev/null +++ b/tests/resources/distros/debian13/bin/lsb_release @@ -0,0 +1,21 @@ +#!/bin/bash +# +# lsb_release command for testing the ld module. +# Only the -a option is supported. +# +# This version of the lsb_release command works without a corresponding +# etc/lsb-release file. +# + +if [[ "$@" != "-a" ]]; then + echo "Usage: lsb_release -a" + exit 2 +fi + +echo "No LSB modules are available." +echo "Distributor ID: Debian" +echo "Description: Debian GNU/Linux 13 (trixie)" +echo "Release: 13" +echo "Codename: trixie" + +exit 0 diff --git a/tests/resources/distros/debian13/etc/debian_version b/tests/resources/distros/debian13/etc/debian_version new file mode 100644 index 0000000..cdb4ac4 --- /dev/null +++ b/tests/resources/distros/debian13/etc/debian_version @@ -0,0 +1 @@ +13.1 diff --git a/tests/resources/distros/debian13/etc/os-release b/tests/resources/distros/debian13/etc/os-release new file mode 100644 index 0000000..3325e87 --- /dev/null +++ b/tests/resources/distros/debian13/etc/os-release @@ -0,0 +1,10 @@ +PRETTY_NAME="Debian GNU/Linux 13 (trixie)" +NAME="Debian GNU/Linux" +VERSION_ID="13" +VERSION="13 (trixie)" +VERSION_CODENAME=trixie +DEBIAN_VERSION_FULL=13.1 +ID=debian +HOME_URL="https://www.debian.org/" +SUPPORT_URL="https://www.debian.org/support" +BUG_REPORT_URL="https://bugs.debian.org/" diff --git a/tests/resources/distros/fedora42/etc/fedora-release b/tests/resources/distros/fedora42/etc/fedora-release new file mode 100644 index 0000000..fe9897e --- /dev/null +++ b/tests/resources/distros/fedora42/etc/fedora-release @@ -0,0 +1 @@ +Fedora release 42 (Forty Two) diff --git a/tests/resources/distros/fedora42/usr/lib/os-release b/tests/resources/distros/fedora42/usr/lib/os-release new file mode 100644 index 0000000..8a9e09e --- /dev/null +++ b/tests/resources/distros/fedora42/usr/lib/os-release @@ -0,0 +1,20 @@ +NAME="Fedora Linux" +VERSION="42 (Forty Two)" +ID=fedora +VERSION_ID=42 +VERSION_CODENAME="" +PLATFORM_ID="platform:f42" +PRETTY_NAME="Fedora Linux 42 (Forty Two)" +ANSI_COLOR="0;38;2;60;110;180" +LOGO=fedora-logo-icon +CPE_NAME="cpe:/o:fedoraproject:fedora:42" +DEFAULT_HOSTNAME="fedora" +HOME_URL="https://fedoraproject.org/" +DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f42/" +SUPPORT_URL="https://ask.fedoraproject.org/" +BUG_REPORT_URL="https://bugzilla.redhat.com/" +REDHAT_BUGZILLA_PRODUCT="Fedora" +REDHAT_BUGZILLA_PRODUCT_VERSION=42 +REDHAT_SUPPORT_PRODUCT="Fedora" +REDHAT_SUPPORT_PRODUCT_VERSION=42 +SUPPORT_END=2026-05-13 diff --git a/tests/resources/distros/rocky9/etc/centos-release b/tests/resources/distros/rocky9/etc/centos-release new file mode 120000 index 0000000..780b78a --- /dev/null +++ b/tests/resources/distros/rocky9/etc/centos-release @@ -0,0 +1 @@ +rocky-release \ No newline at end of file diff --git a/tests/resources/distros/rocky9/etc/os-release b/tests/resources/distros/rocky9/etc/os-release new file mode 120000 index 0000000..c4c75b4 --- /dev/null +++ b/tests/resources/distros/rocky9/etc/os-release @@ -0,0 +1 @@ +../usr/lib/os-release \ No newline at end of file diff --git a/tests/resources/distros/rocky9/etc/redhat-release b/tests/resources/distros/rocky9/etc/redhat-release new file mode 120000 index 0000000..780b78a --- /dev/null +++ b/tests/resources/distros/rocky9/etc/redhat-release @@ -0,0 +1 @@ +rocky-release \ No newline at end of file diff --git a/tests/resources/distros/rocky9/etc/rocky-release b/tests/resources/distros/rocky9/etc/rocky-release new file mode 100644 index 0000000..a969ec0 --- /dev/null +++ b/tests/resources/distros/rocky9/etc/rocky-release @@ -0,0 +1 @@ +Rocky Linux release 9.3 (Blue Onyx) diff --git a/tests/resources/distros/rocky9/etc/rocky-release-upstream b/tests/resources/distros/rocky9/etc/rocky-release-upstream new file mode 100644 index 0000000..09d42ab --- /dev/null +++ b/tests/resources/distros/rocky9/etc/rocky-release-upstream @@ -0,0 +1 @@ +Derived from Red Hat Enterprise Linux 9.3 diff --git a/tests/resources/distros/rocky9/etc/system-release b/tests/resources/distros/rocky9/etc/system-release new file mode 120000 index 0000000..780b78a --- /dev/null +++ b/tests/resources/distros/rocky9/etc/system-release @@ -0,0 +1 @@ +rocky-release \ No newline at end of file diff --git a/tests/resources/distros/rocky9/etc/system-release-cpe b/tests/resources/distros/rocky9/etc/system-release-cpe new file mode 100644 index 0000000..c5c8e62 --- /dev/null +++ b/tests/resources/distros/rocky9/etc/system-release-cpe @@ -0,0 +1 @@ +cpe:/o:rocky:rocky:9::baseos diff --git a/tests/resources/distros/rocky9/usr/lib/os-release b/tests/resources/distros/rocky9/usr/lib/os-release new file mode 100644 index 0000000..615382d --- /dev/null +++ b/tests/resources/distros/rocky9/usr/lib/os-release @@ -0,0 +1,17 @@ +NAME="Rocky Linux" +VERSION="9.3 (Blue Onyx)" +ID="rocky" +ID_LIKE="rhel centos fedora" +VERSION_ID="9.3" +PLATFORM_ID="platform:el9" +PRETTY_NAME="Rocky Linux 9.3 (Blue Onyx)" +ANSI_COLOR="0;32" +LOGO="fedora-logo-icon" +CPE_NAME="cpe:/o:rocky:rocky:9::baseos" +HOME_URL="https://rockylinux.org/" +BUG_REPORT_URL="https://bugs.rockylinux.org/" +SUPPORT_END="2032-05-31" +ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9" +ROCKY_SUPPORT_PRODUCT_VERSION="9.3" +REDHAT_SUPPORT_PRODUCT="Rocky Linux" +REDHAT_SUPPORT_PRODUCT_VERSION="9.3" diff --git a/tests/resources/distros/rocky9/usr/lib/rocky-release b/tests/resources/distros/rocky9/usr/lib/rocky-release new file mode 100644 index 0000000..a969ec0 --- /dev/null +++ b/tests/resources/distros/rocky9/usr/lib/rocky-release @@ -0,0 +1 @@ +Rocky Linux release 9.3 (Blue Onyx) diff --git a/tests/resources/distros/ubuntu24/etc/debian_version b/tests/resources/distros/ubuntu24/etc/debian_version new file mode 100644 index 0000000..201ac20 --- /dev/null +++ b/tests/resources/distros/ubuntu24/etc/debian_version @@ -0,0 +1 @@ +trixie/sid diff --git a/tests/resources/distros/ubuntu24/etc/lsb-release b/tests/resources/distros/ubuntu24/etc/lsb-release new file mode 100644 index 0000000..6169539 --- /dev/null +++ b/tests/resources/distros/ubuntu24/etc/lsb-release @@ -0,0 +1,4 @@ +DISTRIB_ID=Ubuntu +DISTRIB_RELEASE=24.04 +DISTRIB_CODENAME=noble +DISTRIB_DESCRIPTION="Ubuntu 24.04.3 LTS" diff --git a/tests/resources/distros/ubuntu24/etc/os-release b/tests/resources/distros/ubuntu24/etc/os-release new file mode 100644 index 0000000..d8528ec --- /dev/null +++ b/tests/resources/distros/ubuntu24/etc/os-release @@ -0,0 +1,13 @@ +PRETTY_NAME="Ubuntu 24.04.3 LTS" +NAME="Ubuntu" +VERSION_ID="24.04" +VERSION="24.04.3 LTS (Noble Numbat)" +VERSION_CODENAME=noble +ID=ubuntu +ID_LIKE=debian +HOME_URL="https://www.ubuntu.com/" +SUPPORT_URL="https://help.ubuntu.com/" +BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" +PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" +UBUNTU_CODENAME=noble +LOGO=ubuntu-logo diff --git a/tests/test_distro.py b/tests/test_distro.py index 439a152..4d80058 100644 --- a/tests/test_distro.py +++ b/tests/test_distro.py @@ -233,6 +233,18 @@ def test_debian10_os_release(self) -> None: } self._test_outcome(desired_outcome) + def test_debian13_os_release(self) -> None: + desired_outcome = { + "id": "debian", + "name": "Debian GNU/Linux", + "pretty_name": "Debian GNU/Linux 13 (trixie)", + "version": "13", + "pretty_version": "13 (trixie)", + "best_version": "13.1", + "codename": "trixie", + } + self._test_outcome(desired_outcome) + def test_debiantesting_os_release(self) -> None: desired_outcome = { "id": "debian", @@ -285,6 +297,18 @@ def test_fedora30_os_release(self) -> None: } self._test_outcome(desired_outcome) + def test_fedora42_os_release(self) -> None: + desired_outcome = { + "id": "fedora", + "name": "Fedora Linux", + "pretty_name": "Fedora Linux 42 (Forty Two)", + "version": "42", + "pretty_version": "42", + "best_version": "42", + "codename": "", + } + self._test_outcome(desired_outcome) + def test_guix_os_release(self) -> None: desired_outcome = { "id": "guix", @@ -414,6 +438,45 @@ def test_rocky_os_release(self) -> None: } self._test_outcome(desired_outcome) + def test_almalinux10_os_release(self) -> None: + desired_outcome = { + "id": "almalinux", + "name": "AlmaLinux", + "pretty_name": "AlmaLinux 10.0 (Purple Lion)", + "version": "10.0", + "pretty_version": "10.0 (Purple Lion)", + "best_version": "10.0", + "like": "rhel centos fedora", + "codename": "Purple Lion", + } + self._test_outcome(desired_outcome) + + def test_rocky9_os_release(self) -> None: + desired_outcome = { + "id": "rocky", + "name": "Rocky Linux", + "pretty_name": "Rocky Linux 9.3 (Blue Onyx)", + "version": "9.3", + "pretty_version": "9.3 (Blue Onyx)", + "best_version": "9.3", + "like": "rhel centos fedora", + "codename": "Blue Onyx", + } + self._test_outcome(desired_outcome) + + def test_centosstream9_os_release(self) -> None: + desired_outcome = { + "id": "centos", + "name": "CentOS Stream", + "pretty_name": "CentOS Stream 9", + "version": "9", + "pretty_version": "9", + "best_version": "9", + "like": "rhel fedora", + "codename": "", + } + self._test_outcome(desired_outcome) + def test_slackware14_os_release(self) -> None: desired_outcome = { "id": "slackware", @@ -462,6 +525,19 @@ def test_ubuntu16_os_release(self) -> None: } self._test_outcome(desired_outcome) + def test_ubuntu24_os_release(self) -> None: + desired_outcome = { + "id": "ubuntu", + "name": "Ubuntu", + "pretty_name": "Ubuntu 24.04.3 LTS", + "version": "24.04", + "pretty_version": "24.04 (noble)", + "best_version": "24.04.3", + "like": "debian", + "codename": "noble", + } + self._test_outcome(desired_outcome) + def test_amazon2016_os_release(self) -> None: desired_outcome = { "id": "amzn", @@ -1328,6 +1404,20 @@ def test_debian10_release(self) -> None: self._test_outcome(desired_outcome) self._test_non_existing_release_file() + def test_debian13_release(self) -> None: + desired_outcome = { + "id": "debian", + "name": "Debian GNU/Linux", + "pretty_name": "Debian GNU/Linux 13 (trixie)", + "version": "13", + "pretty_version": "13 (trixie)", + "best_version": "13.1", + "codename": "trixie", + "major_version": "13", + } + self._test_outcome(desired_outcome) + self._test_non_existing_release_file() + def test_debiantesting_release(self) -> None: desired_outcome = { "id": "debian", @@ -1413,6 +1503,27 @@ def test_fedora30_release(self) -> None: } self._test_release_file_info("fedora-release", desired_info) + def test_fedora42_release(self) -> None: + desired_outcome = { + "id": "fedora", + "name": "Fedora Linux", + "pretty_name": "Fedora Linux 42 (Forty Two)", + "version": "42", + "pretty_version": "42", + "best_version": "42", + "codename": "", + "major_version": "42", + } + self._test_outcome(desired_outcome) + + desired_info = { + "id": "fedora", + "name": "Fedora", + "version_id": "42", + "codename": "Forty Two", + } + self._test_release_file_info("fedora-release", desired_info) + def test_kvmibm1_release(self) -> None: desired_outcome = { "id": "kvmibm", @@ -1673,6 +1784,73 @@ def test_rocky_release(self) -> None: } self._test_release_file_info("centos-release", desired_info) + def test_almalinux10_release(self) -> None: + desired_outcome = { + "id": "almalinux", + "name": "AlmaLinux", + "pretty_name": "AlmaLinux 10.0 (Purple Lion)", + "version": "10.0", + "pretty_version": "10.0 (Purple Lion)", + "best_version": "10.0", + "like": "rhel centos fedora", + "codename": "Purple Lion", + "major_version": "10", + "minor_version": "0", + } + self._test_outcome(desired_outcome) + + desired_info = { + "id": "almalinux", + "name": "AlmaLinux", + "version_id": "10.0", + "codename": "Purple Lion", + } + self._test_release_file_info("almalinux-release", desired_info) + + def test_rocky9_release(self) -> None: + desired_outcome = { + "id": "rocky", + "name": "Rocky Linux", + "pretty_name": "Rocky Linux 9.3 (Blue Onyx)", + "version": "9.3", + "pretty_version": "9.3 (Blue Onyx)", + "best_version": "9.3", + "like": "rhel centos fedora", + "codename": "Blue Onyx", + "major_version": "9", + "minor_version": "3", + } + self._test_outcome(desired_outcome) + + desired_info = { + "id": "centos", + "name": "Rocky Linux", + "version_id": "9.3", + "codename": "Blue Onyx", + } + self._test_release_file_info("centos-release", desired_info) + + def test_centosstream9_release(self) -> None: + desired_outcome = { + "id": "centos", + "name": "CentOS Stream", + "pretty_name": "CentOS Stream 9", + "version": "9", + "pretty_version": "9", + "best_version": "9", + "like": "rhel fedora", + "codename": "", + "major_version": "9", + } + self._test_outcome(desired_outcome) + + desired_info = { + "id": "centos", + "name": "CentOS Stream", + "version_id": "9", + } + self._test_release_file_info("centos-release", desired_info) + def test_slackware14_release(self) -> None: desired_outcome = { "id": "slackware", @@ -1752,6 +1930,26 @@ def test_ubuntu16_release(self) -> None: # release file: self._test_non_existing_release_file() + def test_ubuntu24_release(self) -> None: + desired_outcome = { + "id": "ubuntu", + "name": "Ubuntu", + "pretty_name": "Ubuntu 24.04.3 LTS", + "version": "24.04", + "pretty_version": "24.04 (noble)", + "best_version": "24.04.3", + "like": "debian", + "codename": "noble", + "major_version": "24", + "minor_version": "04", + } + self._test_outcome(desired_outcome) + + # Test the info from the searched distro release file + # Does not have one; /etc/debian_version is not considered a distro + # release file: + self._test_non_existing_release_file() + def test_amazon2016_release(self) -> None: desired_outcome = { "id": "amzn", @@ -1982,6 +2180,30 @@ def teardown_method(self, test_method: FunctionType) -> None: if os.listdir is _bad_os_listdir: os.listdir = self._old_listdir + def test_almalinux10_release(self) -> None: + # When /etc is not listable, centos-release is found before almalinux-release + desired_outcome = { + "id": "almalinux", + "name": "AlmaLinux", + "pretty_name": "AlmaLinux 10.0 (Purple Lion)", + "version": "10.0", + "pretty_version": "10.0 (Purple Lion)", + "best_version": "10.0", + "like": "rhel centos fedora", + "codename": "Purple Lion", + "major_version": "10", + "minor_version": "0", + } + self._test_outcome(desired_outcome) + + desired_info = { + "id": "centos", + "name": "AlmaLinux", + "version_id": "10.0", + "codename": "Purple Lion", + } + self._test_release_file_info("centos-release", desired_info) + @pytest.mark.skipif(not IS_LINUX, reason="Irrelevant on non-linux") class TestGetAttr(DistroTestCase):