forked from TrueCloudLab/frostfs-testcases
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import logging
|
|
from re import fullmatch
|
|
|
|
import allure
|
|
import pytest
|
|
from frostfs_testlib import reporter
|
|
from frostfs_testlib.hosting import Hosting
|
|
from frostfs_testlib.utils.version_utils import get_remote_binaries_versions
|
|
|
|
logger = logging.getLogger("NeoLogger")
|
|
|
|
VERSION_REGEX = r"^([a-zA-Z0-9]*/)?\d+\.\d+\.\d+(-.*)?(?<!dirty)"
|
|
VERSION_ERROR_MSG = "{name} [{host}]: Actual version doesn't conform to format '0.0.0-000-aaaaaaa': {version}"
|
|
|
|
|
|
def _check_version_format(version):
|
|
return fullmatch(VERSION_REGEX, version)
|
|
|
|
|
|
@allure.title("Check binaries versions")
|
|
@pytest.mark.check_binaries
|
|
def test_binaries_versions(hosting: Hosting):
|
|
"""
|
|
Compare binaries versions from external source (url) and deployed on servers.
|
|
"""
|
|
with reporter.step("Get binaries versions from servers"):
|
|
versions_by_host = get_remote_binaries_versions(hosting)
|
|
|
|
exсeptions = []
|
|
|
|
last_host, versions_on_last_host = versions_by_host.popitem()
|
|
for name, version in versions_on_last_host.items():
|
|
for host, versions_on_host in versions_by_host.items():
|
|
if versions_on_host[name] != version:
|
|
exсeptions.append(f"Binary of {name} has inconsistent version {versions_on_host[name]} on host {host}")
|
|
if not _check_version_format(versions_on_host[name]):
|
|
exсeptions.append(VERSION_ERROR_MSG.format(name=name, host=host, version=version))
|
|
|
|
if not _check_version_format(version):
|
|
exсeptions.append(VERSION_ERROR_MSG.format(name=name, host=last_host, version=version))
|
|
|
|
assert not exсeptions, "\n".join(exсeptions)
|