From 271a8cec4149cfb707c531aac357f5e569a800d58726a1ef4e51374e4d7dbe4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yeray=20Guti=C3=A9rrez=20Cedr=C3=A9s?= Date: Thu, 14 Mar 2024 16:07:19 +0000 Subject: [PATCH] Accepting request 1157989 from home:PSuarezHernandez:branches:systemsmanagement:saltstack - Fix detected issues in Salt tests when running on VMs - Added: * fix-tests-failures-and-errors-when-detected-on-vm-ex.patch OBS-URL: https://build.opensuse.org/request/show/1157989 OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=238 --- _lastrevision | 2 +- ...es-and-errors-when-detected-on-vm-ex.patch | 772 ++++++++++++++++++ salt.changes | 8 + salt.spec | 2 + 4 files changed, 783 insertions(+), 1 deletion(-) create mode 100644 fix-tests-failures-and-errors-when-detected-on-vm-ex.patch diff --git a/_lastrevision b/_lastrevision index 76b8c29..990cdc7 100644 --- a/_lastrevision +++ b/_lastrevision @@ -1 +1 @@ -49e3fd4997f92fccba76eb5e4586f6eaaf7a5b8e \ No newline at end of file +37c3c283a5a6c4d2f7eadf672d34d01159c8db09 \ No newline at end of file diff --git a/fix-tests-failures-and-errors-when-detected-on-vm-ex.patch b/fix-tests-failures-and-errors-when-detected-on-vm-ex.patch new file mode 100644 index 0000000..624a532 --- /dev/null +++ b/fix-tests-failures-and-errors-when-detected-on-vm-ex.patch @@ -0,0 +1,772 @@ +From 737b0bd931c07239d50e7395eb7425c06f485848 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?= + +Date: Thu, 14 Mar 2024 13:03:00 +0000 +Subject: [PATCH] Fix tests failures and errors when detected on VM + execution from Salt Shaker (#636) + +* test_chmod: fix test expectation + +* test_pkg: Adjust package expectation for SUSE family + +* test_docker_network: Skip non-supported operation for SUSE family + +* Fix tests failing due wrong docker-py version + +* test_version: skip test in packaged scenario when setup.py is missing + +* Fix issue related to docker version used during testing + +* Fix test errors when setup.py is not available + +* test_loader: do not run if setup.py is missing + +* test_install: Fix test errors when setup.py is not available + +* test_master: use a right service name expected on SUSE family + +* test_jinja_filters: prevent test failure when which binary is not available + +* Prevent errors when x509 utils cannot be loaded + +* test_thin: skip test if virtualenv binary is missing +--- + tests/integration/pillar/test_git_pillar.py | 12 +++++++++++- + tests/pytests/functional/cache/test_consul.py | 5 +++++ + tests/pytests/functional/cache/test_mysql.py | 5 +++++ + tests/pytests/functional/loader/test_loader.py | 9 +++++++++ + .../functional/modules/state/test_jinja_filters.py | 4 ++-- + tests/pytests/functional/modules/test_cmdmod.py | 2 +- + tests/pytests/functional/modules/test_dockermod.py | 8 +++++++- + tests/pytests/functional/modules/test_pkg.py | 2 ++ + tests/pytests/functional/modules/test_swarm.py | 6 +++++- + tests/pytests/functional/states/rabbitmq/conftest.py | 11 +++++++++++ + .../functional/states/rabbitmq/test_cluster.py | 7 ++++++- + .../functional/states/rabbitmq/test_plugin.py | 8 +++++++- + .../functional/states/rabbitmq/test_policy.py | 7 ++++++- + .../functional/states/rabbitmq/test_upstream.py | 7 ++++++- + .../pytests/functional/states/rabbitmq/test_user.py | 7 ++++++- + .../pytests/functional/states/rabbitmq/test_vhost.py | 7 ++++++- + .../pytests/functional/states/test_docker_network.py | 7 ++++++- + tests/pytests/functional/states/test_pkg.py | 2 +- + tests/pytests/functional/test_version.py | 9 +++++++++ + tests/pytests/integration/modules/test_virt.py | 5 +++++ + tests/pytests/integration/modules/test_x509_v2.py | 2 +- + tests/pytests/integration/ssh/test_log.py | 7 ++++++- + tests/pytests/integration/ssh/test_master.py | 2 +- + tests/pytests/integration/ssh/test_py_versions.py | 7 ++++++- + tests/pytests/integration/ssh/test_ssh_setup.py | 7 ++++++- + tests/pytests/integration/states/test_x509_v2.py | 2 +- + tests/pytests/scenarios/setup/test_install.py | 8 ++++++++ + tests/pytests/unit/modules/test_pip.py | 8 ++++++++ + tests/pytests/unit/utils/test_x509.py | 3 ++- + tests/unit/states/test_pip_state.py | 6 ++++++ + tests/unit/utils/test_thin.py | 3 +++ + 31 files changed, 164 insertions(+), 21 deletions(-) + +diff --git a/tests/integration/pillar/test_git_pillar.py b/tests/integration/pillar/test_git_pillar.py +index 5b4cbda95c9..d56785f97c2 100644 +--- a/tests/integration/pillar/test_git_pillar.py ++++ b/tests/integration/pillar/test_git_pillar.py +@@ -79,6 +79,7 @@ from salt.utils.gitfs import ( + PYGIT2_VERSION, + FileserverConfigError, + ) ++from salt.utils.versions import Version + from tests.support.gitfs import ( # pylint: disable=unused-import + PASSWORD, + USERNAME, +@@ -101,11 +102,20 @@ try: + except Exception: # pylint: disable=broad-except + HAS_PYGIT2 = False + ++docker = pytest.importorskip("docker") ++ + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" ++ + pytestmark = [ + SKIP_INITIAL_PHOTONOS_FAILURES, + pytest.mark.skip_on_platforms(windows=True, darwin=True), +- pytest.mark.skipif(INSIDE_CONTAINER, reason="Communication problems between containers."), ++ pytest.mark.skipif( ++ INSIDE_CONTAINER, reason="Communication problems between containers." ++ ), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/cache/test_consul.py b/tests/pytests/functional/cache/test_consul.py +index c6e16d2588e..30dc6925f26 100644 +--- a/tests/pytests/functional/cache/test_consul.py ++++ b/tests/pytests/functional/cache/test_consul.py +@@ -8,6 +8,7 @@ from saltfactories.utils import random_string + + import salt.cache + import salt.loader ++from salt.utils.versions import Version + from tests.pytests.functional.cache.helpers import run_common_cache_tests + + docker = pytest.importorskip("docker") +@@ -20,6 +21,10 @@ pytestmark = [ + pytest.mark.slow_test, + pytest.mark.skip_if_binaries_missing("dockerd"), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/cache/test_mysql.py b/tests/pytests/functional/cache/test_mysql.py +index e15fc732a4a..93c6c7c6f6f 100644 +--- a/tests/pytests/functional/cache/test_mysql.py ++++ b/tests/pytests/functional/cache/test_mysql.py +@@ -5,6 +5,7 @@ import pytest + + import salt.cache + import salt.loader ++from salt.utils.versions import Version + from tests.pytests.functional.cache.helpers import run_common_cache_tests + from tests.support.pytest.mysql import * # pylint: disable=wildcard-import,unused-wildcard-import + +@@ -18,6 +19,10 @@ pytestmark = [ + pytest.mark.slow_test, + pytest.mark.skip_if_binaries_missing("dockerd"), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/loader/test_loader.py b/tests/pytests/functional/loader/test_loader.py +index 963d33f59c3..e81ef126ca3 100644 +--- a/tests/pytests/functional/loader/test_loader.py ++++ b/tests/pytests/functional/loader/test_loader.py +@@ -1,14 +1,23 @@ + import json ++import os + + import pytest + + from salt.utils.versions import Version + from tests.support.helpers import SaltVirtualEnv + from tests.support.pytest.helpers import FakeSaltExtension ++from tests.support.runtests import RUNTIME_VARS ++ ++MISSING_SETUP_PY_FILE = not os.path.exists( ++ os.path.join(RUNTIME_VARS.CODE_DIR, "setup.py") ++) + + pytestmark = [ + # These are slow because they create a virtualenv and install salt in it + pytest.mark.slow_test, ++ pytest.mark.skipif( ++ MISSING_SETUP_PY_FILE, reason="This test only work if setup.py is available" ++ ), + ] + + +diff --git a/tests/pytests/functional/modules/state/test_jinja_filters.py b/tests/pytests/functional/modules/state/test_jinja_filters.py +index 220310aaaf0..cc8ffcb731b 100644 +--- a/tests/pytests/functional/modules/state/test_jinja_filters.py ++++ b/tests/pytests/functional/modules/state/test_jinja_filters.py +@@ -798,9 +798,9 @@ def _filter_id(value): + ), + Filter( + name="which", +- expected={"ret": salt.utils.path.which("which")}, ++ expected={"ret": salt.utils.path.which("ls")}, + sls=""" +- {% set result = 'which' | which() %} ++ {% set result = 'ls' | which() %} + test: + module.run: + - name: test.echo +diff --git a/tests/pytests/functional/modules/test_cmdmod.py b/tests/pytests/functional/modules/test_cmdmod.py +index d30b474c6d2..adaf469c283 100644 +--- a/tests/pytests/functional/modules/test_cmdmod.py ++++ b/tests/pytests/functional/modules/test_cmdmod.py +@@ -105,7 +105,7 @@ def test_run(cmdmod): + template="jinja", + python_shell=True, + ) +- == "func-tests-minion" ++ == "func-tests-minion-opts" + ) + assert cmdmod.run("grep f", stdin="one\ntwo\nthree\nfour\nfive\n") == "four\nfive" + assert cmdmod.run('echo "a=b" | sed -e s/=/:/g', python_shell=True) == "a:b" +diff --git a/tests/pytests/functional/modules/test_dockermod.py b/tests/pytests/functional/modules/test_dockermod.py +index a5b40869352..eb0cc20f9ff 100644 +--- a/tests/pytests/functional/modules/test_dockermod.py ++++ b/tests/pytests/functional/modules/test_dockermod.py +@@ -8,7 +8,9 @@ import pytest + from saltfactories.utils import random_string + from saltfactories.utils.functional import StateResult + +-pytest.importorskip("docker") ++from salt.utils.versions import Version ++ ++docker = pytest.importorskip("docker") + + log = logging.getLogger(__name__) + +@@ -18,6 +20,10 @@ pytestmark = [ + pytest.mark.slow_test, + pytest.mark.skip_if_binaries_missing("docker", "dockerd", check_all=False), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run inside a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/modules/test_pkg.py b/tests/pytests/functional/modules/test_pkg.py +index 707361c227b..7cedd32bf6c 100644 +--- a/tests/pytests/functional/modules/test_pkg.py ++++ b/tests/pytests/functional/modules/test_pkg.py +@@ -67,6 +67,8 @@ def test_pkg(grains): + _pkg = "units" + elif grains["os_family"] == "Debian": + _pkg = "ifenslave" ++ elif grains["os_family"] == "Suse": ++ _pkg = "wget" + return _pkg + + +diff --git a/tests/pytests/functional/modules/test_swarm.py b/tests/pytests/functional/modules/test_swarm.py +index 9dc70f5b3dc..fc3c2b739cd 100644 +--- a/tests/pytests/functional/modules/test_swarm.py ++++ b/tests/pytests/functional/modules/test_swarm.py +@@ -20,7 +20,11 @@ pytest.importorskip("docker") + def docker_version(shell, grains): + ret = shell.run("docker", "--version") + assert ret.returncode == 0 +- return salt.utils.versions.Version(ret.stdout.split(",")[0].split()[-1].strip()) ++ # Example output: ++ # Docker version 24.0.7-ce, build 311b9ff0aa93 ++ return salt.utils.versions.Version( ++ ret.stdout.split(",")[0].split()[-1].split("-")[0].strip() ++ ) + + + @pytest.fixture +diff --git a/tests/pytests/functional/states/rabbitmq/conftest.py b/tests/pytests/functional/states/rabbitmq/conftest.py +index d8ccc1761b8..60f8206a088 100644 +--- a/tests/pytests/functional/states/rabbitmq/conftest.py ++++ b/tests/pytests/functional/states/rabbitmq/conftest.py +@@ -5,8 +5,19 @@ import attr + import pytest + from saltfactories.utils import random_string + ++from salt.utils.versions import Version ++ + log = logging.getLogger(__name__) + ++docker = pytest.importorskip("docker") ++ ++pytestmark = [ ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), ++] ++ + + @attr.s(kw_only=True, slots=True) + class RabbitMQImage: +diff --git a/tests/pytests/functional/states/rabbitmq/test_cluster.py b/tests/pytests/functional/states/rabbitmq/test_cluster.py +index 210b22a2360..df85f04f78d 100644 +--- a/tests/pytests/functional/states/rabbitmq/test_cluster.py ++++ b/tests/pytests/functional/states/rabbitmq/test_cluster.py +@@ -9,8 +9,9 @@ import pytest + + import salt.modules.rabbitmq as rabbitmq + import salt.states.rabbitmq_cluster as rabbitmq_cluster ++from salt.utils.versions import Version + +-pytest.importorskip("docker") ++docker = pytest.importorskip("docker") + + log = logging.getLogger(__name__) + +@@ -22,6 +23,10 @@ pytestmark = [ + "docker", "dockerd", reason="Docker not installed" + ), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/states/rabbitmq/test_plugin.py b/tests/pytests/functional/states/rabbitmq/test_plugin.py +index f1191490536..6ed4cdc9238 100644 +--- a/tests/pytests/functional/states/rabbitmq/test_plugin.py ++++ b/tests/pytests/functional/states/rabbitmq/test_plugin.py +@@ -9,11 +9,13 @@ import pytest + + import salt.modules.rabbitmq as rabbitmq + import salt.states.rabbitmq_plugin as rabbitmq_plugin ++from salt.utils.versions import Version + from tests.support.mock import patch + + log = logging.getLogger(__name__) + +-pytest.importorskip("docker") ++docker = pytest.importorskip("docker") ++ + + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" + +@@ -23,6 +25,10 @@ pytestmark = [ + "docker", "dockerd", reason="Docker not installed" + ), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/states/rabbitmq/test_policy.py b/tests/pytests/functional/states/rabbitmq/test_policy.py +index 7ccf6a522e0..c648c9ff947 100644 +--- a/tests/pytests/functional/states/rabbitmq/test_policy.py ++++ b/tests/pytests/functional/states/rabbitmq/test_policy.py +@@ -9,11 +9,12 @@ import pytest + + import salt.modules.rabbitmq as rabbitmq + import salt.states.rabbitmq_policy as rabbitmq_policy ++from salt.utils.versions import Version + from tests.support.mock import MagicMock, patch + + log = logging.getLogger(__name__) + +-pytest.importorskip("docker") ++docker = pytest.importorskip("docker") + + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" + +@@ -23,6 +24,10 @@ pytestmark = [ + "docker", "dockerd", reason="Docker not installed" + ), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/states/rabbitmq/test_upstream.py b/tests/pytests/functional/states/rabbitmq/test_upstream.py +index c7bcf3b0d44..0a9686d6948 100644 +--- a/tests/pytests/functional/states/rabbitmq/test_upstream.py ++++ b/tests/pytests/functional/states/rabbitmq/test_upstream.py +@@ -9,10 +9,11 @@ import pytest + + import salt.modules.rabbitmq as rabbitmq + import salt.states.rabbitmq_upstream as rabbitmq_upstream ++from salt.utils.versions import Version + + log = logging.getLogger(__name__) + +-pytest.importorskip("docker") ++docker = pytest.importorskip("docker") + + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" + +@@ -22,6 +23,10 @@ pytestmark = [ + "docker", "dockerd", reason="Docker not installed" + ), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/states/rabbitmq/test_user.py b/tests/pytests/functional/states/rabbitmq/test_user.py +index 31723df7be8..a6b0766087f 100644 +--- a/tests/pytests/functional/states/rabbitmq/test_user.py ++++ b/tests/pytests/functional/states/rabbitmq/test_user.py +@@ -9,10 +9,11 @@ import pytest + + import salt.modules.rabbitmq as rabbitmq + import salt.states.rabbitmq_user as rabbitmq_user ++from salt.utils.versions import Version + + log = logging.getLogger(__name__) + +-pytest.importorskip("docker") ++docker = pytest.importorskip("docker") + + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" + +@@ -22,6 +23,10 @@ pytestmark = [ + "docker", "dockerd", reason="Docker not installed" + ), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/states/rabbitmq/test_vhost.py b/tests/pytests/functional/states/rabbitmq/test_vhost.py +index d6ac6901a25..f3553c03e58 100644 +--- a/tests/pytests/functional/states/rabbitmq/test_vhost.py ++++ b/tests/pytests/functional/states/rabbitmq/test_vhost.py +@@ -9,10 +9,11 @@ import pytest + + import salt.modules.rabbitmq as rabbitmq + import salt.states.rabbitmq_vhost as rabbitmq_vhost ++from salt.utils.versions import Version + + log = logging.getLogger(__name__) + +-pytest.importorskip("docker") ++docker = pytest.importorskip("docker") + + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" + +@@ -22,6 +23,10 @@ pytestmark = [ + "docker", "dockerd", reason="Docker not installed" + ), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/functional/states/test_docker_network.py b/tests/pytests/functional/states/test_docker_network.py +index 0da01ed8bac..19868d03ad1 100644 +--- a/tests/pytests/functional/states/test_docker_network.py ++++ b/tests/pytests/functional/states/test_docker_network.py +@@ -220,10 +220,15 @@ def test_present_with_containers(network, docker, docker_network, container): + + + @pytest.mark.parametrize("reconnect", [True, False]) +-def test_present_with_reconnect(network, docker, docker_network, container, reconnect): ++def test_present_with_reconnect( ++ network, docker, docker_network, container, reconnect, grains ++): + """ + Test reconnecting with containers not passed to state + """ ++ if grains["os_family"] == "Suse": ++ pytest.skip("This test is failing for SUSE family") ++ + with network() as net: + ret = docker_network.present(name=net.name, driver="bridge") + assert ret.result is True +diff --git a/tests/pytests/functional/states/test_pkg.py b/tests/pytests/functional/states/test_pkg.py +index 12318c996d1..864c1d025f3 100644 +--- a/tests/pytests/functional/states/test_pkg.py ++++ b/tests/pytests/functional/states/test_pkg.py +@@ -55,7 +55,7 @@ def PKG_TARGETS(grains): + else: + _PKG_TARGETS = ["units", "zsh-html"] + elif grains["os_family"] == "Suse": +- _PKG_TARGETS = ["lynx", "htop"] ++ _PKG_TARGETS = ["iotop", "screen"] + return _PKG_TARGETS + + +diff --git a/tests/pytests/functional/test_version.py b/tests/pytests/functional/test_version.py +index dfa8850557e..3b85c05ccc6 100644 +--- a/tests/pytests/functional/test_version.py ++++ b/tests/pytests/functional/test_version.py +@@ -1,14 +1,23 @@ + import json + import logging ++import os + + import pytest + + from tests.support.helpers import SaltVirtualEnv + from tests.support.pytest.helpers import FakeSaltExtension ++from tests.support.runtests import RUNTIME_VARS ++ ++MISSING_SETUP_PY_FILE = not os.path.exists( ++ os.path.join(RUNTIME_VARS.CODE_DIR, "setup.py") ++) + + pytestmark = [ + # These are slow because they create a virtualenv and install salt in it + pytest.mark.slow_test, ++ pytest.mark.skipif( ++ MISSING_SETUP_PY_FILE, reason="This test only work if setup.py is available" ++ ), + ] + + log = logging.getLogger(__name__) +diff --git a/tests/pytests/integration/modules/test_virt.py b/tests/pytests/integration/modules/test_virt.py +index 1b7f30154a7..572923764bb 100644 +--- a/tests/pytests/integration/modules/test_virt.py ++++ b/tests/pytests/integration/modules/test_virt.py +@@ -9,6 +9,7 @@ from xml.etree import ElementTree + import pytest + + import salt.version ++from salt.utils.versions import Version + from tests.support.virt import SaltVirtMinionContainerFactory + + docker = pytest.importorskip("docker") +@@ -21,6 +22,10 @@ pytestmark = [ + pytest.mark.slow_test, + pytest.mark.skip_if_binaries_missing("docker"), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/integration/modules/test_x509_v2.py b/tests/pytests/integration/modules/test_x509_v2.py +index 2fd005778c5..cc8712e45cd 100644 +--- a/tests/pytests/integration/modules/test_x509_v2.py ++++ b/tests/pytests/integration/modules/test_x509_v2.py +@@ -11,7 +11,7 @@ from pathlib import Path + import pytest + from saltfactories.utils import random_string + +-import salt.utils.x509 as x509util ++x509util = pytest.importorskip("salt.utils.x509") + + try: + import cryptography +diff --git a/tests/pytests/integration/ssh/test_log.py b/tests/pytests/integration/ssh/test_log.py +index 683feb8bd91..a63dd72373d 100644 +--- a/tests/pytests/integration/ssh/test_log.py ++++ b/tests/pytests/integration/ssh/test_log.py +@@ -8,9 +8,10 @@ import time + import pytest + from saltfactories.utils import random_string + ++from salt.utils.versions import Version + from tests.support.helpers import Keys + +-pytest.importorskip("docker") ++docker = pytest.importorskip("docker") + + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" + +@@ -20,6 +21,10 @@ pytestmark = [ + pytest.mark.slow_test, + pytest.mark.skip_if_binaries_missing("dockerd"), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/integration/ssh/test_master.py b/tests/pytests/integration/ssh/test_master.py +index 0c2f482cf9f..c658123726b 100644 +--- a/tests/pytests/integration/ssh/test_master.py ++++ b/tests/pytests/integration/ssh/test_master.py +@@ -23,7 +23,7 @@ def test_service(salt_ssh_cli, grains): + os_release = grains["osrelease"] + if os_family == "RedHat": + service = "crond" +- elif os_family == "Arch": ++ elif os_family in ["Suse", "Arch"]: + service = "sshd" + elif os_family == "MacOS": + service = "org.ntp.ntpd" +diff --git a/tests/pytests/integration/ssh/test_py_versions.py b/tests/pytests/integration/ssh/test_py_versions.py +index 71d4cfaa94e..991a3b71c44 100644 +--- a/tests/pytests/integration/ssh/test_py_versions.py ++++ b/tests/pytests/integration/ssh/test_py_versions.py +@@ -9,9 +9,10 @@ import time + import pytest + from saltfactories.utils import random_string + ++from salt.utils.versions import Version + from tests.support.helpers import Keys + +-pytest.importorskip("docker") ++docker = pytest.importorskip("docker") + + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" + +@@ -21,6 +22,10 @@ pytestmark = [ + pytest.mark.slow_test, + pytest.mark.skip_if_binaries_missing("dockerd"), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/integration/ssh/test_ssh_setup.py b/tests/pytests/integration/ssh/test_ssh_setup.py +index 79b55ad90a5..97494bed36b 100644 +--- a/tests/pytests/integration/ssh/test_ssh_setup.py ++++ b/tests/pytests/integration/ssh/test_ssh_setup.py +@@ -13,9 +13,10 @@ import pytest + from pytestshellutils.utils.processes import ProcessResult, terminate_process + from saltfactories.utils import random_string + ++from salt.utils.versions import Version + from tests.support.helpers import Keys + +-pytest.importorskip("docker") ++docker = pytest.importorskip("docker") + + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" + +@@ -25,6 +26,10 @@ pytestmark = [ + pytest.mark.slow_test, + pytest.mark.skip_if_binaries_missing("dockerd"), + pytest.mark.skipif(INSIDE_CONTAINER, reason="Cannot run in a container"), ++ pytest.mark.skipif( ++ Version(docker.__version__) < Version("4.0.0"), ++ reason="Test does not work in this version of docker-py", ++ ), + ] + + +diff --git a/tests/pytests/integration/states/test_x509_v2.py b/tests/pytests/integration/states/test_x509_v2.py +index 9a1c09bb8bd..4f943412950 100644 +--- a/tests/pytests/integration/states/test_x509_v2.py ++++ b/tests/pytests/integration/states/test_x509_v2.py +@@ -10,7 +10,7 @@ from pathlib import Path + import pytest + from saltfactories.utils import random_string + +-import salt.utils.x509 as x509util ++x509util = pytest.importorskip("salt.utils.x509") + + try: + import cryptography +diff --git a/tests/pytests/scenarios/setup/test_install.py b/tests/pytests/scenarios/setup/test_install.py +index 7664fda804e..7a4abfc6e9e 100644 +--- a/tests/pytests/scenarios/setup/test_install.py ++++ b/tests/pytests/scenarios/setup/test_install.py +@@ -14,11 +14,16 @@ import salt.utils.path + import salt.utils.platform + import salt.version + from salt.modules.virtualenv_mod import KNOWN_BINARY_NAMES ++from tests.support.runtests import RUNTIME_VARS + + log = logging.getLogger(__name__) + + INSIDE_CONTAINER = os.getenv("HOSTNAME", "") == "salt-test-container" + ++MISSING_SETUP_PY_FILE = not os.path.exists( ++ os.path.join(RUNTIME_VARS.CODE_DIR, "setup.py") ++) ++ + pytestmark = [ + pytest.mark.core_test, + pytest.mark.windows_whitelisted, +@@ -27,6 +32,9 @@ pytestmark = [ + pytest.mark.skipif( + INSIDE_CONTAINER, reason="No gcc and python3-devel in container." + ), ++ pytest.mark.skipif( ++ MISSING_SETUP_PY_FILE, reason="This test only work if setup.py is available" ++ ), + ] + + +diff --git a/tests/pytests/unit/modules/test_pip.py b/tests/pytests/unit/modules/test_pip.py +index c03e6ed292b..4b2da77786b 100644 +--- a/tests/pytests/unit/modules/test_pip.py ++++ b/tests/pytests/unit/modules/test_pip.py +@@ -9,6 +9,11 @@ import salt.utils.files + import salt.utils.platform + from salt.exceptions import CommandExecutionError + from tests.support.mock import MagicMock, patch ++from tests.support.runtests import RUNTIME_VARS ++ ++MISSING_SETUP_PY_FILE = not os.path.exists( ++ os.path.join(RUNTIME_VARS.CODE_DIR, "setup.py") ++) + + + class FakeFopen: +@@ -1738,6 +1743,9 @@ def test_when_version_is_called_with_a_user_it_should_be_passed_to_undelying_run + ) + + ++@pytest.mark.skipif( ++ MISSING_SETUP_PY_FILE, reason="This test only work if setup.py is available" ++) + @pytest.mark.parametrize( + "bin_env,target,target_env,expected_target", + [ +diff --git a/tests/pytests/unit/utils/test_x509.py b/tests/pytests/unit/utils/test_x509.py +index 25971af40d8..dade9eda46b 100644 +--- a/tests/pytests/unit/utils/test_x509.py ++++ b/tests/pytests/unit/utils/test_x509.py +@@ -4,9 +4,10 @@ import ipaddress + import pytest + + import salt.exceptions +-import salt.utils.x509 as x509 + from tests.support.mock import ANY, Mock, patch + ++x509 = pytest.importorskip("salt.utils.x509") ++ + try: + import cryptography + import cryptography.x509 as cx509 +diff --git a/tests/unit/states/test_pip_state.py b/tests/unit/states/test_pip_state.py +index 981ad46a135..d70b1150008 100644 +--- a/tests/unit/states/test_pip_state.py ++++ b/tests/unit/states/test_pip_state.py +@@ -27,6 +27,9 @@ try: + except ImportError: + HAS_PIP = False + ++MISSING_SETUP_PY_FILE = not os.path.exists( ++ os.path.join(RUNTIME_VARS.CODE_DIR, "setup.py") ++) + + log = logging.getLogger(__name__) + +@@ -408,6 +411,9 @@ class PipStateUtilsTest(TestCase): + + @pytest.mark.skip_if_binaries_missing(*KNOWN_BINARY_NAMES, check_all=False) + @pytest.mark.requires_network ++@pytest.mark.skipif( ++ MISSING_SETUP_PY_FILE, reason="This test only work if setup.py is available" ++) + class PipStateInstallationErrorTest(TestCase): + @pytest.mark.slow_test + def test_importable_installation_error(self): +diff --git a/tests/unit/utils/test_thin.py b/tests/unit/utils/test_thin.py +index 7fd1e7b5dc3..c4e9c3b3bef 100644 +--- a/tests/unit/utils/test_thin.py ++++ b/tests/unit/utils/test_thin.py +@@ -1379,6 +1379,9 @@ class SSHThinTestCase(TestCase): + assert [x for x in calls if "{}".format(_file) in x[-2]] + + @pytest.mark.slow_test ++ @pytest.mark.skip_if_binaries_missing( ++ "virtualenv", reason="Needs virtualenv binary" ++ ) + @pytest.mark.skip_on_windows(reason="salt-ssh does not deploy to/from windows") + def test_thin_dir(self): + """ +-- +2.43.0 + + diff --git a/salt.changes b/salt.changes index 137d886..67ac797 100644 --- a/salt.changes +++ b/salt.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Thu Mar 14 13:11:21 UTC 2024 - Pablo Suárez Hernández + +- Fix detected issues in Salt tests when running on VMs + +- Added: + * fix-tests-failures-and-errors-when-detected-on-vm-ex.patch + ------------------------------------------------------------------- Wed Mar 6 13:38:29 UTC 2024 - Marek Czernek diff --git a/salt.spec b/salt.spec index fec378d..ac2d43c 100644 --- a/salt.spec +++ b/salt.spec @@ -355,6 +355,8 @@ Patch100: discover-both-.yml-and-.yaml-playbooks-bsc-1211888.patch Patch101: fix-problematic-tests-and-allow-smooth-tests-executi.patch # PATCH-FIX_OPENSUSE: https://github.com/openSUSE/salt/pull/628 Patch102: make-importing-seco.range-thread-safe-bsc-1211649.patch +# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/66130 +PAtch103: fix-tests-failures-and-errors-when-detected-on-vm-ex.patch ### IMPORTANT: The line below is used as a snippet marker. Do not touch it. ### SALT PATCHES LIST END