salt/tests/pytests/functional/cli/test_salt.py
2025-01-29 15:22:23 -07:00

105 lines
3.1 KiB
Python

import logging
import os
import shutil
import pytest
import salt.version
from tests.conftest import CODE_DIR
log = logging.getLogger(__name__)
@pytest.fixture(autouse=True)
def _install_salt_extension(shell):
if os.environ.get("ONEDIR_TESTRUN", "0") == "0":
yield
return
script_name = "salt-pip"
if salt.utils.platform.is_windows():
script_name += ".exe"
script_path = CODE_DIR / "artifacts" / "salt" / script_name
assert script_path.exists()
try:
ret = shell.run(str(script_path), "install", "salt-analytics-framework==0.1.0")
assert ret.returncode == 0
log.info(ret)
yield
finally:
ret = shell.run(str(script_path), "uninstall", "-y", "salt-analytics-framework")
log.info(ret)
shutil.rmtree(script_path.parent / "extras-3.10", ignore_errors=True)
@pytest.mark.windows_whitelisted
def test_versions_report(salt_cli):
"""
Test that we can re-parse the version report back into
a similar format with the necessary headers
"""
expected = salt.version.versions_information()
# sanitize expected of unnnecessary whitespace
for _, section in expected.items():
for key in section:
if isinstance(section[key], str):
section[key] = section[key].strip()
ret = salt_cli.run("--versions-report")
assert ret.returncode == 0
assert ret.stdout
ret_lines = ret.stdout.split("\n")
assert ret_lines
# sanitize lines
ret_lines = [line.strip() for line in ret_lines]
for header in expected:
assert f"{header}:" in ret_lines
ret_dict = {}
expected_keys = set()
for line in ret_lines:
if not line:
continue
if line.endswith(":"):
assert not expected_keys
current_header = line.rstrip(":")
assert current_header in expected
ret_dict[current_header] = {}
expected_keys = set(expected[current_header].keys())
else:
key, *value_list = line.split(":", 1)
assert value_list
assert len(value_list) == 1
value = value_list[0].strip()
if value == "Not Installed":
value = None
ret_dict[current_header][key] = value
assert key in expected_keys
expected_keys.remove(key)
assert not expected_keys
if os.environ.get("ONEDIR_TESTRUN", "0") == "0":
assert "pip" in ret_dict["Salt Package Information"]["Package Type"]
# Stop any more testing
return
assert "onedir" in ret_dict["Salt Package Information"]["Package Type"]
assert "relenv" in ret_dict["Dependency Versions"]
assert "Salt Extensions" in ret_dict
assert "salt-analytics-framework" in ret_dict["Salt Extensions"]
def test_help_log(salt_cli):
"""
Test to ensure when we pass in `--help` the insecure
log warning is included.
"""
ret = salt_cli.run("--help")
count = 0
# This can be dependent on COLUMNS environment variable
assert "sensitive data: all, debug, garbage, profile, trace" in " ".join(
ret.stdout.split()
)