WIP Initial updated tests

This commit is contained in:
David Murphy 2024-05-24 10:34:46 -06:00 committed by Daniel Wozniak
parent 1ebb6b0b17
commit 2da91cd48d

View file

@ -3,13 +3,34 @@ import time
import packaging.version
import psutil
## import pytest
import pytest
from pytestskipmarkers.utils import platform
log = logging.getLogger(__name__)
@pytest.mark.skip_unless_on_linux(reason="Only supported on Linux family")
@pytest.fixture
def salt_systemd_setup(
salt_call_cli,
install_salt,
):
"""
Fixture to set systemd for salt packages to enabled and active
Note: assumes Salt packages already installed
"""
# ensure known state, enabled and active
test_list = ["salt-api", "salt-minion", "salt-master"]
for test_item in test_list:
test_cmd = f"systemctl enable {test_item}"
ret = salt_call_cli.run("--local", "cmd.run", test_cmd)
assert ret.returncode == 0
test_cmd = f"systemctl restart {test_item}"
ret = salt_call_cli.run("--local", "cmd.run", test_cmd)
assert ret.returncode == 0
def _get_running_named_salt_pid(
process_name,
): # pylint: disable=logging-fstring-interpolation
@ -23,67 +44,37 @@ def _get_running_named_salt_pid(
# MacOS: ['/opt/salt/bin/python3.10 /opt/salt/salt-minion', '']
pids = []
log.warning(f"DGM _get_running_named_salt_pid entry, process_name '{process_name}'")
print(
f"DGM _get_running_named_salt_pid entry, process_name '{process_name}'",
flush=True,
)
for proc in psutil.process_iter():
dgm_cmdline = proc.cmdline()
cmdl_strg = " ".join(str(element) for element in proc.cmdline())
log.warning(
f"DGM _get_running_named_salt_pid, cmdline, cmdl_strg '{cmdl_strg}'"
)
print(
f"DGM _get_running_named_salt_pid, cmdline, cmdl_strg '{cmdl_strg}', from cmdline '{dgm_cmdline}'",
flush=True,
)
if process_name in cmdl_strg:
pids.append(proc.pid)
log.warning(
f"DGM _get_running_named_salt_pid, returning for process_name '{process_name}', pids '{pids}'"
)
print(
f"DGM _get_running_named_salt_pid, returning for process_name '{process_name}', pids '{pids}'",
flush=True,
)
return pids
def test_salt_upgrade(
salt_call_cli, install_salt
): # pylint: disable=logging-fstring-interpolation
def test_salt_upgrade(salt_call_cli, install_salt):
"""
Test an upgrade of Salt, Minion, Master, etc.
Test an upgrade of Salt, Minion and Master
"""
log.warning("DGM test_salt_upgrade_minion entry")
## DGM print("DGM test_salt_upgrade_minion entry", flush=True)
if install_salt.relenv:
original_py_version = install_salt.package_python_version()
## DGM ret = salt_call_cli.run("--local", "cmd.run", "ps aux")
## DGM print(f"DGM test_salt_upgrade_minion, initial minion ps aux ret '{ret}'", flush=True)
## DGM assert ret.returncode == 0
# Verify previous install version salt-minion is setup correctly and works
ret = salt_call_cli.run("--local", "test.version")
## DGM print(f"DGM test_salt_upgrade_minion, test.version ret '{ret}'", flush=True)
assert ret.returncode == 0
installed_minion_version = packaging.version.parse(ret.data)
dgm_pkg_version_parsed = packaging.version.parse(install_salt.artifact_version)
log.warning(
f"DGM test_salt_upgrade_minion, installed_minion_version '{installed_minion_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'"
)
## DGM print(
## DGM f"DGM test_salt_upgrade_minion, installed_minion_version '{installed_minion_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'",
## DGM flush=True,
## DGM )
assert installed_minion_version < packaging.version.parse(
install_salt.artifact_version
)
# Verify previous install version salt-master is setup correctly and works
bin_file = "salt"
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)
# Test pip install before an upgrade
dep = "PyGithub==1.56.0"
install = salt_call_cli.run("--local", "pip.install", dep)
@ -94,87 +85,47 @@ def test_salt_upgrade(
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
if installed_minion_version < packaging.version.parse("3006.0"):
# This is using PyInstaller
process_minion_name = "run minion"
# Verify there is a running minion and master by getting there PIDs
process_master_name = "salt-master"
if platform.is_windows():
process_minion_name = "salt-minion.exe"
else:
if platform.is_windows():
process_minion_name = "salt-minion.exe"
else:
process_minion_name = "salt-minion"
process_minion_name = "salt-minion"
old_minion_pids = _get_running_named_salt_pid(process_minion_name)
assert old_minion_pids
# Verify previous install version salt-master is setup correctly and works
bin_file = "salt"
ret = install_salt.proc.run(bin_file, "--version")
log.warning(f"DGM test_salt_upgrade_master , installed_master_version ret '{ret}'")
## DGM print(
## DGM f"DGM test_salt_upgrade_master , installed_master_version ret '{ret}'",
## DGM flush=True,
## DGM )
dgm_ret_version = packaging.version.parse(ret.stdout.strip().split()[1])
dgm_pkg_version_parsed = packaging.version.parse(install_salt.artifact_version)
log.warning(
f"DGM test_salt_upgrade_master , installed_master_version ret parsed '{dgm_ret_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'"
)
## DGM print(
## DGM f"DGM test_salt_upgrade_master , installed_master_version ret parsed '{dgm_ret_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'",
## DGM flush=True,
## DGM )
assert ret.returncode == 0
assert packaging.version.parse(
ret.stdout.strip().split()[1]
) < packaging.version.parse(install_salt.artifact_version)
# Verify there is a running master by getting its PID
process_master_name = "salt-master"
old_master_pids = _get_running_named_salt_pid(process_master_name)
assert old_minion_pids
assert old_master_pids
# Upgrade Salt (inc. minion, master, etc.) from previous version and test
install_salt.install(upgrade=True)
time.sleep(60) # give it some time, DGM
time.sleep(6) # give it some time
ret = salt_call_cli.run("--local", "test.version")
log.warning(f"DGM test_salt_upgrade_minion, upgrade test_version ret '{ret}'")
## DGM print(f"DGM test_salt_upgrade_minion, upgrade test_version ret '{ret}'", flush=True)
assert ret.returncode == 0
installed_minion_version = packaging.version.parse(ret.data)
dgm_pkg_version_parsed = packaging.version.parse(install_salt.artifact_version)
log.warning(
f"DGM test_salt_upgrade_minion, upgrade installed_minion_version '{installed_minion_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'"
)
## DGM print(
## DGM f"DGM test_salt_upgrade_minion, upgrade installed_minion_version '{installed_minion_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'",
## DGM flush=True,
## DGM )
assert installed_minion_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
ret = salt_call_cli.run("--local", "cmd.run", "ps aux")
print(
f"DGM test_salt_upgrade_minion, upgraded minion ps aux ret '{ret}'", flush=True
)
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)
# Verify there is a new running minion and master by getting their PID and comparing them
# with previous PIDs from before the upgrade
new_minion_pids = _get_running_named_salt_pid(process_minion_name)
new_master_pids = _get_running_named_salt_pid(process_master_name)
assert new_minion_pids
assert new_master_pids
assert new_minion_pids != old_minion_pids
assert new_master_pids != old_master_pids
if install_salt.relenv:
new_py_version = install_salt.package_python_version()
@ -183,108 +134,116 @@ def test_salt_upgrade(
use_lib = salt_call_cli.run("--local", "github.get_repo_info", repo)
assert "Authentication information could" in use_lib.stderr
ret = install_salt.proc.run(bin_file, "--version")
log.warning(f"DGM test_salt_upgrade_master , upgrade_version ret '{ret}'")
## DGM print(f"DGM test_salt_upgrade_master , upgrade_version ret '{ret}'", flush=True)
dgm_ret_version = packaging.version.parse(ret.stdout.strip().split()[1])
dgm_pkg_version_parsed = packaging.version.parse(install_salt.artifact_version)
log.warning(
f"DGM test_salt_upgrade_master , upgrade_version ret parsed '{dgm_ret_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'"
)
## DGM print(
## DGM f"DGM test_salt_upgrade_master , upgrade_version ret parsed '{dgm_ret_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'",
## DGM flush=True,
## DGM )
@pytest.mark.skip_unless_on_linux(reason="Only supported on Linux family")
def test_salt_wrk(
salt_call_cli, install_salt, salt_systemd_setup
): # pylint: disable=logging-fstring-interpolation
"""
Test an upgrade working features of Salt
"""
log.warning("DGM test_salt_wrk entry")
if not install_salt.upgrade:
pytest.skip("Not testing an upgrade, do not run")
print("DGM test_salt_wrk, not testing an upgrade, do not run", flush=True)
assert ret.returncode == 0
assert packaging.version.parse(
ret.stdout.strip().split()[1]
) == packaging.version.parse(install_salt.artifact_version)
if install_salt.relenv:
original_py_version = install_salt.package_python_version()
# Verify there is a new running master by getting its PID and comparing it
# with the PID from before the upgrade
new_master_pids = _get_running_named_salt_pid(process_master_name)
# setup systemd to enabled and active for Salt packages
# pylint: disable=pointless-statement
salt_systemd_setup
assert new_master_pids
assert new_master_pids != old_master_pids
# test for enable, active and user, group
test_list = ["salt-api", "salt-minion", "salt-master"]
for test_item in test_list:
test_cmd = f"systemctl show -p UnitFileState {test_item}"
ret = salt_call_cli.run("--local", "cmd.run", test_cmd)
print(
f"DGM salt_systemd_setup, '{test_item}' systemctl enabled test, ret '{ret}'",
flush=True,
)
test_enabled = ret.stdout.strip().split("=")[1]
print(
f"DGM salt_systemd_setup, '{test_item}' systemctl enabled test produced, line '{ret.stdout.strip().split('=')}', result '{test_enabled}'",
flush=True,
)
assert ret.returncode == 0
assert test_enabled == "enabled"
test_cmd = f"systemctl is-active {test_item}"
ret = salt_call_cli.run("--local", "cmd.run", test_cmd)
print(
f"DGM salt_systemd_setup, '{test_item}' systemctl active test, ret '{ret}'",
flush=True,
)
test_active = ret.stdout.strip().split()[2]
print(
f"DGM salt_systemd_setup, '{test_item}' systemctl active test produced, line '{ret.stdout.strip().split()}', result '{test_active}'",
flush=True,
)
assert ret.returncode == 0
assert test_active == "active"
## DGM @pytest.mark.skip_unless_on_linux(reason="Only supported on Linux family")
## DGM def test_salt_upgrade_master(
## DGM salt_call_cli, install_salt,
## DGM ): # pylint: disable=logging-fstring-interpolation
## DGM """
## DGM Test an upgrade of Salt Master.
## DGM """
## DGM log.warning("DGM test_salt_upgrade_master entry")
## DGM if not install_salt.upgrade:
## DGM pytest.skip("Not testing an upgrade, do not run")
## DGM print("DGM test_salt_upgrade_master, not testing an upgrade, do not run", flush=True)
## DGM
## DGM if install_salt.relenv:
## DGM original_py_version = install_salt.package_python_version()
## DGM
## DGM # Verify previous install version is setup correctly and works
## DGM bin_file = "salt"
## DGM ret = install_salt.proc.run(bin_file, "--version")
## DGM log.warning(f"DGM test_salt_upgrade_master , installed_version ret '{ret}'")
## DGM print(f"DGM test_salt_upgrade_master , installed_version ret '{ret}'", flush=True)
## DGM
## DGM dgm_ret_version = packaging.version.parse(ret.stdout.strip().split()[1])
## DGM dgm_pkg_version_parsed = packaging.version.parse(install_salt.artifact_version)
## DGM log.warning(
## DGM f"DGM test_salt_upgrade_master , installed_version ret parsed '{dgm_ret_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'"
## DGM )
## DGM print(
## DGM f"DGM test_salt_upgrade_master , installed_version ret parsed '{dgm_ret_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'", flush=True
## DGM )
## DGM
## DGM dgm_stdout_strip = ret.stdout.strip()
## DGM dgm_stdout_strip_split = ret.stdout.strip().split()
## DGM dgm_stdout_strip_split_one = ret.stdout.strip().split()[1]
## DGM print(f"DGM test_salt_upgrade_master, dgm_stdout_strip '{dgm_stdout_strip}', dgm_stdout_strip_split '{dgm_stdout_strip_split}', dgm_stdout_strip_split_one '{dgm_stdout_strip_split_one}'")
## DGM
## DGM assert ret.returncode == 0
## DGM assert packaging.version.parse(
## DGM ret.stdout.strip().split()[1]
## DGM ) < packaging.version.parse(install_salt.artifact_version)
## DGM
## DGM ## DGM ret = salt_call_cli.run("--local", "cmd.run", "ps aux")
## DGM ## DGM print(f"DGM test_salt_upgrade_master, initial master ps aux ret '{ret}'", flush=True)
## DGM ## DGM assert ret.returncode == 0
## DGM
## DGM # Verify there is a running minion by getting its PID
## DGM salt_name = "salt"
## DGM process_name = "salt-master"
## DGM
## DGM old_pids = _get_running_named_salt_pid(process_name)
## DGM
## DGM assert old_pids
## DGM
## DGM # Upgrade Salt from previous version and test
## DGM install_salt.install(upgrade=True)
## DGM ret = install_salt.proc.run(bin_file, "--version")
## DGM log.warning(f"DGM test_salt_upgrade_master , upgrade_version ret '{ret}'")
## DGM print(f"DGM test_salt_upgrade_master , upgrade_version ret '{ret}'", flush=True)
## DGM
## DGM dgm_ret_version = packaging.version.parse(ret.stdout.strip().split()[1])
## DGM dgm_pkg_version_parsed = packaging.version.parse(install_salt.artifact_version)
## DGM log.warning(
## DGM f"DGM test_salt_upgrade_master , upgrade_version ret parsed '{dgm_ret_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'"
## DGM )
## DGM print(
## DGM f"DGM test_salt_upgrade_master , upgrade_version ret parsed '{dgm_ret_version}', artifact_version '{install_salt.artifact_version}', pkg_version_parsed '{dgm_pkg_version_parsed}'", flush=True
## DGM )
## DGM
## DGM assert ret.returncode == 0
## DGM assert packaging.version.parse(
## DGM ret.stdout.strip().split()[1]
## DGM ) == packaging.version.parse(install_salt.artifact_version)
## DGM
## DGM # Verify there is a new running master by getting its PID and comparing it
## DGM # with the PID from before the upgrade
## DGM new_pids = _get_running_named_salt_pid(process_name)
## DGM
## DGM assert new_pids
## DGM assert new_pids != old_pids
if "salt-api" == test_item:
test_cmd = f"ls -dl /run/{test_item}.pid"
ret = salt_call_cli.run("--local", "cmd.run", test_cmd)
print(
f"DGM salt_systemd_setup, '{test_item}' user test, ret '{ret}'",
flush=True,
)
test_user = ret.stdout.strip().split()[4]
print(
f"DGM salt_systemd_setup, '{test_item}' user test, line '{ret.stdout.strip().split()}', user '{test_user}'",
flush=True,
)
assert ret.returncode == 0
assert test_user == "salt"
test_cmd = f"ls -dl /run/{test_item}.pid"
ret = salt_call_cli.run("--local", "cmd.run", test_cmd)
print(
f"DGM salt_systemd_setup, '{test_item}' group test, ret '{ret}'",
flush=True,
)
test_group = ret.stdout.strip().split()[5]
print(
f"DGM salt_systemd_setup, '{test_item}' group test, line '{ret.stdout.strip().split()}', group '{test_group}'",
flush=True,
)
assert ret.returncode == 0
assert test_group == "salt"
else:
test_name = test_item.strip().split("-")[1]
test_cmd = f"ls -dl /run/salt/{test_name}"
ret = salt_call_cli.run("--local", "cmd.run", test_cmd)
print(
f"DGM salt_systemd_setup, '{test_item}' user test, ret '{ret}'",
flush=True,
)
test_user = ret.stdout.strip().split()[4]
print(
f"DGM salt_systemd_setup, '{test_item}' user test, line '{ret.stdout.strip().split()}', user '{test_user}'",
flush=True,
)
assert ret.returncode == 0
if test_name == "salt-minion":
assert test_user == "root"
else:
assert test_user == "salt"
ret = salt_call_cli.run("--local", "cmd.run", test_cmd)
print(
f"DGM salt_systemd_setup, '{test_item}' group test, ret '{ret}'",
flush=True,
)
test_group = ret.stdout.strip().split()[5]
print(
f"DGM salt_systemd_setup, '{test_item}' group test, line '{ret.stdout.strip().split()}', group '{test_group}'",
flush=True,
)
assert ret.returncode == 0
if test_name == "salt-minion":
assert test_group == "root"
else:
assert test_group == "salt"