From 3604f6a025e2ede20425ee40981c90498b6d603f Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Fri, 3 May 2024 22:39:30 +0100 Subject: [PATCH] Fix minion process detection to work with old pyinstaller salt packages --- .../pytests/pkg/upgrade/test_salt_upgrade.py | 74 +++++++++++-------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/tests/pytests/pkg/upgrade/test_salt_upgrade.py b/tests/pytests/pkg/upgrade/test_salt_upgrade.py index d376d581adb..4aceb0acab8 100644 --- a/tests/pytests/pkg/upgrade/test_salt_upgrade.py +++ b/tests/pytests/pkg/upgrade/test_salt_upgrade.py @@ -1,8 +1,26 @@ +import logging + import packaging.version import psutil import pytest from pytestskipmarkers.utils import platform +log = logging.getLogger(__name__) + + +def _get_running_salt_minion_pid(process_name): + # psutil process name only returning first part of the command '/opt/saltstack/' + # need to check all of command line for salt-minion + # ['/opt/saltstack/salt/bin/python3.10 /usr/bin/salt-minion MultiMinionProcessManager MinionProcessManager'] + # and psutil is only returning the salt-minion once + pids = [] + for proc in psutil.process_iter(): + if "salt" in proc.name(): + cmdl_strg = " ".join(str(element) for element in proc.cmdline()) + if process_name in cmdl_strg: + pids.append(proc.pid) + return pids + def test_salt_upgrade(salt_call_cli, install_salt): """ @@ -17,9 +35,8 @@ def test_salt_upgrade(salt_call_cli, install_salt): # Verify previous install version is setup correctly and works ret = salt_call_cli.run("test.version") assert ret.returncode == 0 - assert packaging.version.parse(ret.data) < packaging.version.parse( - install_salt.artifact_version - ) + installed_version = packaging.version.parse(ret.data) + assert installed_version < packaging.version.parse(install_salt.artifact_version) # Test pip install before an upgrade dep = "PyGithub==1.56.0" @@ -32,45 +49,38 @@ def test_salt_upgrade(salt_call_cli, install_salt): assert "Authentication information could" in use_lib.stderr # Verify there is a running minion by getting its PID - salt_name = "salt" - if platform.is_windows(): - process_name = "salt-minion.exe" + if installed_version < packaging.version.parse("3006.0"): + # This is using PyInstaller + process_name = "run minion" else: - process_name = "salt-minion" - - old_pid = [] - - # psutil process name only returning first part of the command '/opt/saltstack/' - # need to check all of command line for salt-minion - # ['/opt/saltstack/salt/bin/python3.10 /usr/bin/salt-minion MultiMinionProcessManager MinionProcessManager'] - # and psutil is only returning the salt-minion once - for proc in psutil.process_iter(): - if salt_name in proc.name(): - cmdl_strg = " ".join(str(element) for element in proc.cmdline()) - if process_name in cmdl_strg: - old_pid.append(proc.pid) - - assert old_pid + if platform.is_windows(): + process_name = "salt-minion.exe" + else: + process_name = "salt-minion" + old_pids = _get_running_salt_minion_pid(process_name) + assert old_pids # Upgrade Salt from previous version and test install_salt.install(upgrade=True) ret = salt_call_cli.run("test.version") assert ret.returncode == 0 - assert packaging.version.parse(ret.data) == packaging.version.parse( - install_salt.artifact_version - ) + installed_version = packaging.version.parse(ret.data) + assert installed_version == packaging.version.parse(install_salt.artifact_version) # Verify there is a new running minion by getting its PID and comparing it # with the PID from before the upgrade - new_pid = [] - for proc in psutil.process_iter(): - if salt_name in proc.name(): - cmdl_strg = " ".join(str(element) for element in proc.cmdline()) - if process_name in cmdl_strg: - new_pid.append(proc.pid) + if installed_version < packaging.version.parse("3006.0"): + # This is using PyInstaller + process_name = "run minion" + else: + if platform.is_windows(): + process_name = "salt-minion.exe" + else: + process_name = "salt-minion" + new_pids = _get_running_salt_minion_pid(process_name) - assert new_pid - assert new_pid != old_pid + assert new_pids + assert new_pids != old_pids if install_salt.relenv: new_py_version = install_salt.package_python_version()