mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 01:30:20 +00:00
93 lines
3.4 KiB
Python
93 lines
3.4 KiB
Python
import packaging.version
|
|
import psutil
|
|
import pytest
|
|
from pytestskipmarkers.utils import platform
|
|
|
|
|
|
def test_salt_downgrade(salt_call_cli, install_salt):
|
|
"""
|
|
Test an upgrade of Salt.
|
|
"""
|
|
if not install_salt.downgrade:
|
|
pytest.skip("Not testing a downgrade, do not run")
|
|
|
|
is_downgrade_to_relenv = packaging.version.parse(
|
|
install_salt.prev_version
|
|
) >= packaging.version.parse("3006.0")
|
|
|
|
if is_downgrade_to_relenv:
|
|
original_py_version = install_salt.package_python_version()
|
|
|
|
# Verify current 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
|
|
)
|
|
|
|
# Test pip install before a downgrade
|
|
dep = "PyGithub==1.56.0"
|
|
install = salt_call_cli.run("--local", "pip.install", dep)
|
|
assert install.returncode == 0
|
|
|
|
# Verify we can use the module dependent on the installed package
|
|
repo = "https://github.com/saltstack/salt.git"
|
|
use_lib = salt_call_cli.run("--local", "github.get_repo_info", repo)
|
|
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"
|
|
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
|
|
|
|
# Downgrade Salt to the previous version and test
|
|
install_salt.install(downgrade=True)
|
|
bin_file = "salt"
|
|
if platform.is_windows():
|
|
if not is_downgrade_to_relenv:
|
|
bin_file = install_salt.install_dir / "salt-call.bat"
|
|
else:
|
|
bin_file = install_salt.install_dir / "salt-call.exe"
|
|
elif platform.is_darwin() and install_salt.classic:
|
|
bin_file = install_salt.bin_dir / "salt-call"
|
|
|
|
# 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)
|
|
|
|
assert new_pid
|
|
assert new_pid != old_pid
|
|
|
|
ret = install_salt.proc.run(bin_file, "--version")
|
|
assert ret.returncode == 0
|
|
assert packaging.version.parse(
|
|
ret.stdout.strip().split()[1]
|
|
) < packaging.version.parse(install_salt.artifact_version)
|
|
|
|
if is_downgrade_to_relenv:
|
|
new_py_version = install_salt.package_python_version()
|
|
if new_py_version == original_py_version:
|
|
# test pip install after a downgrade
|
|
use_lib = salt_call_cli.run("--local", "github.get_repo_info", repo)
|
|
assert "Authentication information could" in use_lib.stderr
|