File fix-status.diskusage-and-exclude-some-tests-to-run-w.patch of Package salt

From 70a9072671c6e5ef1ef96a923df01786f7ade236 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
 <psuarezhernandez@suse.com>
Date: Tue, 18 Jun 2024 15:55:31 +0100
Subject: [PATCH] Fix "status.diskusage" and exclude some tests to run
 when testing Salt Bundle (#659)

* Show warning instead of crashing when stats cannot be fetched

* Skip tests that are not compatible with Salt Bundle

* test_syndic_eauth: do not produce error if docker service is not running

* test_cmdmod: assert properly in case of DeprecationsWarnings

* Include path as part of output in case of errors

Co-authored-by: Marek Czernek <marek.czernek@suse.com>

---------

Co-authored-by: Marek Czernek <marek.czernek@suse.com>
---
 salt/modules/status.py                             | 14 +++++++++-----
 tests/integration/ssh/test_state.py                |  6 ++++++
 tests/pytests/functional/modules/test_pip.py       |  4 ++++
 .../functional/modules/test_virtualenv_mod.py      |  5 +++++
 tests/pytests/functional/states/test_pip_state.py  |  4 ++++
 tests/pytests/integration/cli/test_syndic_eauth.py |  3 +++
 tests/pytests/integration/modules/test_cmdmod.py   |  4 +++-
 .../pytests/integration/netapi/test_ssh_client.py  |  5 +++++
 tests/pytests/integration/ssh/conftest.py          |  7 +++++++
 tests/unit/utils/test_thin.py                      |  4 ++++
 10 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/salt/modules/status.py b/salt/modules/status.py
index 1b21dfb4d6..9a5ab0d8ad 100644
--- a/salt/modules/status.py
+++ b/salt/modules/status.py
@@ -1051,11 +1051,15 @@ def diskusage(*args):
     ret = {}
     for path in selected:
         if os.path.exists(path):
-            fsstats = os.statvfs(path)
-            blksz = fsstats.f_bsize
-            available = fsstats.f_bavail * blksz
-            total = fsstats.f_blocks * blksz
-            ret[path] = {"available": available, "total": total}
+            try:
+                fsstats = os.statvfs(path)
+                blksz = fsstats.f_bsize
+                available = fsstats.f_bavail * blksz
+                total = fsstats.f_blocks * blksz
+                ret[path] = {"available": available, "total": total}
+            except OSError as exc:
+                log.warning("Cannot get stats from '{}': {}".format(path, exc))
+                ret[path] = {"available": None, "total": None}
     return ret
 
 
diff --git a/tests/integration/ssh/test_state.py b/tests/integration/ssh/test_state.py
index d56e35e08b..0e132733f0 100644
--- a/tests/integration/ssh/test_state.py
+++ b/tests/integration/ssh/test_state.py
@@ -2,6 +2,7 @@ import glob
 import logging
 import os
 import shutil
+import sys
 import threading
 import time
 
@@ -30,6 +31,11 @@ SSH_SLS_FILE = "/tmp/salt_test_file"
 log = logging.getLogger(__name__)
 
 
+@pytest.mark.slow_test
+@pytest.mark.skipif(
+    "venv-salt-minion" in sys.executable,
+    reason="Skipping for Salt Bundle (tests are not compatible)",
+)
 class SSHStateTest(SSHCase):
     """
     testing the state system with salt-ssh
diff --git a/tests/pytests/functional/modules/test_pip.py b/tests/pytests/functional/modules/test_pip.py
index e3656a34da..959cbf1e06 100644
--- a/tests/pytests/functional/modules/test_pip.py
+++ b/tests/pytests/functional/modules/test_pip.py
@@ -82,6 +82,10 @@ def _pip_successful_install(
 @pytest.mark.requires_network
 @pytest.mark.slow_test
 @pytest.mark.skip_if_binaries_missing("virtualenv", reason="Needs virtualenv binary")
+@pytest.mark.skipif(
+    "venv-salt-minion" in sys.executable,
+    reason="Skipping for Salt Bundle (tests are not compatible)",
+)
 def test_list_available_packages(pip, pip_version, tmp_path):
     with VirtualEnv(venv_dir=tmp_path, pip_requirement=pip_version) as virtualenv:
         virtualenv.install("-U", pip_version)
diff --git a/tests/pytests/functional/modules/test_virtualenv_mod.py b/tests/pytests/functional/modules/test_virtualenv_mod.py
index 2b6abf91e2..69e1866c6e 100644
--- a/tests/pytests/functional/modules/test_virtualenv_mod.py
+++ b/tests/pytests/functional/modules/test_virtualenv_mod.py
@@ -1,4 +1,5 @@
 import shutil
+import sys
 
 import pytest
 
@@ -68,6 +69,10 @@ def test_clear(virtualenv, venv_dir, modules):
     bool(salt.utils.path.which("transactional-update")),
     reason="Skipping on transactional systems",
 )
+@pytest.mark.skipif(
+    "venv-salt-minion" in sys.executable,
+    reason="Skipping for Salt Bundle (tests are not compatible)",
+)
 def test_virtualenv_ver(virtualenv, venv_dir):
     ret = virtualenv.create(str(venv_dir))
     assert ret
diff --git a/tests/pytests/functional/states/test_pip_state.py b/tests/pytests/functional/states/test_pip_state.py
index 1300f41964..6357dd60af 100644
--- a/tests/pytests/functional/states/test_pip_state.py
+++ b/tests/pytests/functional/states/test_pip_state.py
@@ -110,6 +110,10 @@ def _skip_if_pep8_installed(modules, pkg_name):
     bool(salt.utils.path.which("transactional-update")),
     reason="Skipping on transactional systems",
 )
+@pytest.mark.skipif(
+    "venv-salt-minion" in sys.executable,
+    reason="Skipping for Salt Bundle (tests are not compatible)",
+)
 def test_pip_installed_removed(states, pkg_name):
     """
     Tests installed and removed states
diff --git a/tests/pytests/integration/cli/test_syndic_eauth.py b/tests/pytests/integration/cli/test_syndic_eauth.py
index 451feb5de9..16457ccd78 100644
--- a/tests/pytests/integration/cli/test_syndic_eauth.py
+++ b/tests/pytests/integration/cli/test_syndic_eauth.py
@@ -58,6 +58,9 @@ def syndic_network():
     try:
         network = client.networks.create(name="syndic_test_net", ipam=ipam_config)
         yield network.name
+    except Exception as e:
+        # Docker failed, it's gonna be an environment issue, let's just skip
+        pytest.skip(f"Docker failed with error {e}")
     finally:
         if network is not None:
             network.remove()
diff --git a/tests/pytests/integration/modules/test_cmdmod.py b/tests/pytests/integration/modules/test_cmdmod.py
index d0b993ddbc..20a6f80893 100644
--- a/tests/pytests/integration/modules/test_cmdmod.py
+++ b/tests/pytests/integration/modules/test_cmdmod.py
@@ -75,7 +75,9 @@ def test_blacklist_glob(salt_call_cli):
     )
 
     assert (
-        ret.stderr.rstrip()
+        ret.stderr.rstrip().split("\n")[
+            -1
+        ]  # Taking only the last line in case of DeprecationWarnings
         == "Error running 'cmd.run': The shell command \"bad_command --foo\" is not permitted"
     )
 
diff --git a/tests/pytests/integration/netapi/test_ssh_client.py b/tests/pytests/integration/netapi/test_ssh_client.py
index b9428b9946..c6294af406 100644
--- a/tests/pytests/integration/netapi/test_ssh_client.py
+++ b/tests/pytests/integration/netapi/test_ssh_client.py
@@ -1,4 +1,5 @@
 import logging
+import sys
 
 import pytest
 
@@ -19,6 +20,10 @@ pytestmark = [
         # backports.ssl-match-hostname which is not installed on the system.
     ),
     pytest.mark.timeout_unless_on_windows(120),
+    pytest.mark.skipif(
+        "venv-salt-minion" in sys.executable,
+        reason="Skipping for Salt Bundle (tests are not compatible)",
+    ),
 ]
 
 log = logging.getLogger(__name__)
diff --git a/tests/pytests/integration/ssh/conftest.py b/tests/pytests/integration/ssh/conftest.py
index b0028efee1..69eb37f1e9 100644
--- a/tests/pytests/integration/ssh/conftest.py
+++ b/tests/pytests/integration/ssh/conftest.py
@@ -1,4 +1,5 @@
 import pytest
+import sys
 
 from tests.support.pytest.helpers import reap_stray_processes
 
@@ -93,3 +94,9 @@ def state_tree_dir(base_env_state_tree_root_dir):
 
     with top_tempfile, map_tempfile, state_tempfile:
         yield
+
+
+@pytest.fixture(scope="package", autouse=True)
+def _auto_skip_on_salt_bundle():
+    if "venv-salt-minion" in sys.executable:
+        pytest.skip("Skipping for Salt Bundle (tests are not compatible)")
diff --git a/tests/unit/utils/test_thin.py b/tests/unit/utils/test_thin.py
index 3d9c3390b7..ae1ce99bda 100644
--- a/tests/unit/utils/test_thin.py
+++ b/tests/unit/utils/test_thin.py
@@ -1441,6 +1441,10 @@ class SSHThinTestCase(TestCase):
         "virtualenv", reason="Needs virtualenv binary"
     )
     @pytest.mark.skip_on_windows(reason="salt-ssh does not deploy to/from windows")
+    @pytest.mark.skipif(
+        "venv-salt-minion" in sys.executable,
+        reason="Skipping for Salt Bundle (tests are not compatible)",
+    )
     def test_thin_dir(self):
         """
         Test the thin dir to make sure salt-call can run
-- 
2.47.0

openSUSE Build Service is sponsored by