Skip to content
23 changes: 8 additions & 15 deletions tests/MenderAPI/deployments.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,16 +210,14 @@ def check_not_in_status(
while time.time() <= timeout:
data = self.get_status(status=expected_status)

for deployment in data:
if deployment["id"] == deployment_id:
time.sleep(polling_frequency)
continue
else:
found = any(d["id"] == deployment_id for d in data)
if not found:
logger.info(
"left deployment status (%s) as expected for: %s"
% (expected_status, deployment_id)
)
return
time.sleep(polling_frequency)

pytest.fail(
"Never left status: %s for %s after %d seconds"
Expand All @@ -238,8 +236,6 @@ def check_expected_statistics(
seen = set()

while time.time() <= timeout:
time.sleep(polling_frequency)

data = self.get_statistics(deployment_id)
seen.add(str(data))

Expand All @@ -260,13 +256,12 @@ def check_expected_statistics(

if data[expected_status] == expected_count:
return
continue
time.sleep(polling_frequency)

if time.time() > timeout:
pytest.fail(
"Never found: %s:%s, only seen: %s after %d seconds"
% (expected_status, expected_count, str(seen), max_wait)
)
pytest.fail(
"Never found: %s:%s, only seen: %s after %d seconds"
% (expected_status, expected_count, str(seen), max_wait)
)

def get_deployment_overview(self, deployment_id):
deployments_overview_url = (
Expand Down Expand Up @@ -326,7 +321,6 @@ def abort(self, deployment_id):
headers=self.auth.get_auth_token(),
json={"status": "aborted"},
)
time.sleep(5)
assert r.status_code == requests.status_codes.codes.no_content

def abort_finished_deployment(self, deployment_id):
Expand All @@ -339,7 +333,6 @@ def abort_finished_deployment(self, deployment_id):
headers=self.auth.get_auth_token(),
json={"status": "aborted"},
)
time.sleep(5)
assert r.status_code == requests.status_codes.codes.unprocessable_entity

def patch_deployment(self, deployment_id, update_control_map):
Expand Down
4 changes: 2 additions & 2 deletions tests/MenderAPI/requests_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
from requests.packages.urllib3.util.retry import Retry


# Will retry on 500 Server error
def requests_retry(status_forcelist=[500, 502]):
# Will retry on server errors (5xx)
def requests_retry(status_forcelist=[500, 502, 503, 504]):
s = requests.Session()
retries = Retry(
total=5,
Expand Down
70 changes: 22 additions & 48 deletions tests/common_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,7 @@ def standard_setup_one_rofs_client_bootstrapped(request):
return env


@pytest.fixture(scope="function")
def standard_setup_one_docker_client_bootstrapped(request):
def standard_setup_one_docker_client_bootstrapped_impl(request):
env = container_factory.get_docker_client_setup()
request.addfinalizer(env.teardown)

Expand All @@ -132,6 +131,16 @@ def standard_setup_one_docker_client_bootstrapped(request):
return env


@pytest.fixture(scope="function")
def standard_setup_one_docker_client_bootstrapped(request):
return standard_setup_one_docker_client_bootstrapped_impl(request)


@pytest.fixture(scope="class")
def class_persistent_standard_setup_one_docker_client_bootstrapped(request):
return standard_setup_one_docker_client_bootstrapped_impl(request)


@pytest.fixture(scope="function")
def standard_setup_two_clients_bootstrapped(request):
env = container_factory.get_standard_setup(num_clients=2)
Expand Down Expand Up @@ -160,30 +169,6 @@ def standard_setup_without_client(request):
return env


@pytest.fixture(scope="function")
def setup_with_legacy_v1_client(request):
# The legacy 1.7.0 client was only built for qemux86-64, so skip tests using
# it when running other platforms.
if conftest.machine_name != "qemux86-64":
pytest.skip(
"Test only works with qemux86-64, and this is %s" % conftest.machine_name
)

env = container_factory.get_legacy_v1_client_setup()
request.addfinalizer(env.teardown)

env.setup()

env.device = MenderDevice(env.get_mender_clients()[0])
env.device.ssh_is_opened()

reset_mender_api(env)
devauth.accept_devices(1)

env.auth = auth
return env


@pytest.fixture(scope="function")
def setup_with_legacy_v3_client(request):
env = container_factory.get_legacy_v3_client_setup()
Expand Down Expand Up @@ -356,8 +341,7 @@ def enterprise_two_clients_bootstrapped(request):
return env


@pytest.fixture(scope="function")
def enterprise_one_docker_client_bootstrapped(request):
def enterprise_one_docker_client_bootstrapped_impl(request):
env = container_factory.get_enterprise_docker_client_setup(num_clients=0)
request.addfinalizer(env.teardown)

Expand All @@ -376,6 +360,16 @@ def enterprise_one_docker_client_bootstrapped(request):
return env


@pytest.fixture(scope="function")
def enterprise_one_docker_client_bootstrapped(request):
return enterprise_one_docker_client_bootstrapped_impl(request)


@pytest.fixture(scope="class")
def class_persistent_enterprise_one_docker_client_bootstrapped(request):
return enterprise_one_docker_client_bootstrapped_impl(request)


@pytest.fixture(scope="function")
def enterprise_one_rofs_client_bootstrapped(request):
env = container_factory.get_enterprise_rofs_client_setup(num_clients=0)
Expand Down Expand Up @@ -478,26 +472,6 @@ def enterprise_with_short_lived_token(request):
return env


@pytest.fixture(scope="function")
def enterprise_with_legacy_v1_client(request):
env = container_factory.get_enterprise_legacy_v1_client_setup(num_clients=0)
request.addfinalizer(env.teardown)

env.setup()
reset_mender_api(env)

tenant = create_tenant(env)
new_tenant_client(env, "mender-client", tenant["tenant_token"])
env.device_group.ssh_is_opened()

devauth_tenant = DeviceAuthV2(env.auth)
devauth_tenant.accept_devices(1)
devices = devauth_tenant.get_devices_status("accepted")
assert 1 == len(devices)

return env


@pytest.fixture(scope="function")
def enterprise_with_legacy_v3_client(request):
env = container_factory.get_enterprise_legacy_v3_client_setup(num_clients=0)
Expand Down
21 changes: 13 additions & 8 deletions tests/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import json
import time

import pytest

from .MenderAPI import devauth

logger = logging.getLogger()
Expand Down Expand Up @@ -68,25 +70,28 @@ def _check_log_for_message(device, message, since=None):
# entries since the last service restart.
cmd = f"systemctl status --no-pager --full --lines 100000 mender-authd"

sleepsec = 0
sleeptime = 2
max_sleeptime = 10
timeout = 600
while sleepsec < timeout:
deadline = time.time() + timeout
while time.time() < deadline:
out = device.run(
cmd + "| grep '" + message + "'",
warn=True,
)
if out != "":
return

time.sleep(10)
sleepsec += 10
waited = int(timeout - (deadline - time.time()))
logger.info(
f"waiting for message '{message}' in mender-authd log, waited for: {sleepsec}"
f"waiting for message '{message}' in mender-authd log, waited for: {waited}s"
)
time.sleep(sleeptime)
sleeptime = min(sleeptime * 2, max_sleeptime)

assert (
sleepsec <= timeout
), f"timeout for waiting for message '{message}' in mender-authd log"
pytest.fail(
f"timeout ({timeout}s) waiting for message '{message}' in mender-authd log"
)

@staticmethod
def check_log_is_authenticated(device, since=None):
Expand Down
Loading