Add test specific to minion start event

This commit is contained in:
Daniel A. Wozniak 2025-02-19 17:16:30 -07:00 committed by Daniel Wozniak
parent 8e28d02e2f
commit 97ea9a11fb
4 changed files with 127 additions and 102 deletions

View file

@ -803,6 +803,7 @@ def salt_factories_default_root_dir(salt_factories_default_root_dir):
dictionary, then that's the value used, and not the one returned by
this fixture.
"""
print(f"WTF {salt_factories_default_root_dir}")
if os.environ.get("CI") and pytestskipmarkers.utils.platform.is_windows():
tempdir = pathlib.Path(
os.environ.get("RUNNER_TEMP", r"C:\Windows\Temp")

View file

@ -0,0 +1,103 @@
import os
import shutil
import subprocess
import pytest
import salt.utils.platform
from tests.conftest import FIPS_TESTRUN
@pytest.fixture
def salt_master_1(request, salt_factories):
config_defaults = {
"open_mode": True,
"transport": request.config.getoption("--transport"),
}
config_overrides = {
"interface": "127.0.0.1",
"fips_mode": FIPS_TESTRUN,
"publish_signing_algorithm": (
"PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1"
),
}
factory = salt_factories.salt_master_daemon(
"master-1",
defaults=config_defaults,
overrides=config_overrides,
extra_cli_arguments_after_first_start_failure=["--log-level=info"],
)
with factory.started(start_timeout=120):
yield factory
@pytest.fixture
def salt_master_2(salt_factories, salt_master_1):
if salt.utils.platform.is_darwin() or salt.utils.platform.is_freebsd():
subprocess.check_output(["ifconfig", "lo0", "alias", "127.0.0.2", "up"])
config_defaults = {
"open_mode": True,
"transport": salt_master_1.config["transport"],
}
config_overrides = {
"interface": "127.0.0.2",
"fips_mode": FIPS_TESTRUN,
"publish_signing_algorithm": (
"PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1"
),
}
# Use the same ports for both masters, they are binding to different interfaces
for key in (
"ret_port",
"publish_port",
):
config_overrides[key] = salt_master_1.config[key]
factory = salt_factories.salt_master_daemon(
"master-2",
defaults=config_defaults,
overrides=config_overrides,
extra_cli_arguments_after_first_start_failure=["--log-level=info"],
)
# The secondary salt master depends on the primarily salt master fixture
# because we need to clone the keys
for keyfile in ("master.pem", "master.pub"):
shutil.copyfile(
os.path.join(salt_master_1.config["pki_dir"], keyfile),
os.path.join(factory.config["pki_dir"], keyfile),
)
with factory.started(start_timeout=120):
yield factory
@pytest.fixture
def salt_minion_1(salt_master_1, salt_master_2):
config_defaults = {
"transport": salt_master_1.config["transport"],
}
master_1_port = salt_master_1.config["ret_port"]
master_1_addr = salt_master_1.config["interface"]
master_2_port = salt_master_2.config["ret_port"]
master_2_addr = salt_master_2.config["interface"]
config_overrides = {
"master": [
f"{master_1_addr}:{master_1_port}",
f"{master_2_addr}:{master_2_port}",
],
"test.foo": "baz",
"fips_mode": FIPS_TESTRUN,
"encryption_algorithm": "OAEP-SHA224" if FIPS_TESTRUN else "OAEP-SHA1",
"signing_algorithm": "PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1",
}
factory = salt_master_1.salt_minion_daemon(
"minion-1",
defaults=config_defaults,
overrides=config_overrides,
extra_cli_arguments_after_first_start_failure=["--log-level=info"],
)
with factory.started(start_timeout=120):
yield factory

View file

@ -1,107 +1,5 @@
import os
import shutil
import subprocess
import pytest
import salt.utils.platform
from tests.conftest import FIPS_TESTRUN
@pytest.fixture
def salt_master_1(request, salt_factories):
config_defaults = {
"open_mode": True,
"transport": request.config.getoption("--transport"),
}
config_overrides = {
"interface": "127.0.0.1",
"fips_mode": FIPS_TESTRUN,
"publish_signing_algorithm": (
"PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1"
),
}
factory = salt_factories.salt_master_daemon(
"master-1",
defaults=config_defaults,
overrides=config_overrides,
extra_cli_arguments_after_first_start_failure=["--log-level=info"],
)
with factory.started(start_timeout=120):
yield factory
@pytest.fixture
def salt_master_2(salt_factories, salt_master_1):
if salt.utils.platform.is_darwin() or salt.utils.platform.is_freebsd():
subprocess.check_output(["ifconfig", "lo0", "alias", "127.0.0.2", "up"])
config_defaults = {
"open_mode": True,
"transport": salt_master_1.config["transport"],
}
config_overrides = {
"interface": "127.0.0.2",
"fips_mode": FIPS_TESTRUN,
"publish_signing_algorithm": (
"PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1"
),
}
# Use the same ports for both masters, they are binding to different interfaces
for key in (
"ret_port",
"publish_port",
):
config_overrides[key] = salt_master_1.config[key]
factory = salt_factories.salt_master_daemon(
"master-2",
defaults=config_defaults,
overrides=config_overrides,
extra_cli_arguments_after_first_start_failure=["--log-level=info"],
)
# The secondary salt master depends on the primarily salt master fixture
# because we need to clone the keys
for keyfile in ("master.pem", "master.pub"):
shutil.copyfile(
os.path.join(salt_master_1.config["pki_dir"], keyfile),
os.path.join(factory.config["pki_dir"], keyfile),
)
with factory.started(start_timeout=120):
yield factory
@pytest.fixture
def salt_minion_1(salt_master_1, salt_master_2):
config_defaults = {
"transport": salt_master_1.config["transport"],
}
master_1_port = salt_master_1.config["ret_port"]
master_1_addr = salt_master_1.config["interface"]
master_2_port = salt_master_2.config["ret_port"]
master_2_addr = salt_master_2.config["interface"]
config_overrides = {
"master": [
f"{master_1_addr}:{master_1_port}",
f"{master_2_addr}:{master_2_port}",
],
"test.foo": "baz",
"fips_mode": FIPS_TESTRUN,
"encryption_algorithm": "OAEP-SHA224" if FIPS_TESTRUN else "OAEP-SHA1",
"signing_algorithm": "PKCS1v15-SHA224" if FIPS_TESTRUN else "PKCS1v15-SHA1",
}
factory = salt_master_1.salt_minion_daemon(
"minion-1",
defaults=config_defaults,
overrides=config_overrides,
extra_cli_arguments_after_first_start_failure=["--log-level=info"],
)
with factory.started(start_timeout=120):
yield factory
@pytest.mark.timeout_unless_on_windows(360)
def test_job_return(salt_master_1, salt_master_2, salt_minion_1):

View file

@ -0,0 +1,23 @@
import time
import pytest
@pytest.fixture
def start():
return time.time()
def test_minion_start_event(
start, event_listener, salt_master_1, salt_master_2, salt_minion_1
):
start_events = event_listener.wait_for_events(
[
(salt_master_1.id, f"salt/minion/{salt_minion_1.id}/start"),
(salt_master_2.id, f"salt/minion/{salt_minion_1.id}/start"),
],
timeout=60,
after_time=start,
)
assert not start_events.missed
assert len(start_events.matches) == 2