From 1ac2ffade89c58df1b55cce1033485d3281ec1c3 Mon Sep 17 00:00:00 2001 From: Peter Ondrejka Date: Mon, 3 Jun 2024 08:43:29 +0200 Subject: [PATCH] eol version check (#13253) --- conf/subscription.yaml.template | 2 + robottelo/config/validators.py | 1 + robottelo/constants/__init__.py | 1 + tests/foreman/api/test_eol_banner.py | 55 ++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+) create mode 100644 tests/foreman/api/test_eol_banner.py diff --git a/conf/subscription.yaml.template b/conf/subscription.yaml.template index 54bb596a401..4de58229816 100644 --- a/conf/subscription.yaml.template +++ b/conf/subscription.yaml.template @@ -5,3 +5,5 @@ SUBSCRIPTION: RHN_PASSWORD: # subscription pool id RHN_POOLID: + # lifecycle API url + LIFECYCLE_API_URL: diff --git a/robottelo/config/validators.py b/robottelo/config/validators.py index 9a453825d47..b23d48a51e8 100644 --- a/robottelo/config/validators.py +++ b/robottelo/config/validators.py @@ -50,6 +50,7 @@ Validator('subscription.rhn_username', must_exist=True), Validator('subscription.rhn_password', must_exist=True), Validator('subscription.rhn_poolid', must_exist=True), + Validator('subscription.lifecycle_api_url', must_exist=True), ], ansible_hub=[ Validator('ansible_hub.url', must_exist=True), diff --git a/robottelo/constants/__init__.py b/robottelo/constants/__init__.py index 3d91a131b71..70b5dc3d552 100644 --- a/robottelo/constants/__init__.py +++ b/robottelo/constants/__init__.py @@ -1922,6 +1922,7 @@ "DELETE", "PATCH", ] +LIFECYCLE_METADATA_FILE = '/usr/share/satellite/lifecycle-metadata.yml' OPENSSH_RECOMMENDATION = 'Decreased security: OpenSSH config permissions' DNF_RECOMMENDATION = ( diff --git a/tests/foreman/api/test_eol_banner.py b/tests/foreman/api/test_eol_banner.py new file mode 100644 index 00000000000..99957793336 --- /dev/null +++ b/tests/foreman/api/test_eol_banner.py @@ -0,0 +1,55 @@ +"""Test module for EOL tracking + +:Requirement: Dashboard + +:CaseAutomation: Automated + +:CaseComponent: Dashboard + +:Team: Endeavour + +:CaseImportance: High +""" + +from datetime import datetime + +import pytest +import requests +import yaml + +from robottelo.config import settings +from robottelo.constants import LIFECYCLE_METADATA_FILE +from robottelo.logging import logger + + +@pytest.mark.tier2 +def test_positive_check_eol_date(target_sat): + """Check if the EOL date for the satellite version + + :id: 1c2f0d19-a357-4461-9ace-edb468f9ca5c + + :expectedresults: EOL date from satellite-lifecycle package is accurate + """ + current_version = '.'.join(target_sat.version.split('.')[0:2]) + output = yaml.load(target_sat.execute(rf'cat {LIFECYCLE_METADATA_FILE}').stdout, yaml.Loader) + logger.debug(f'contents of {LIFECYCLE_METADATA_FILE} :{output}') + eol_datetime = datetime.strptime(output['releases'][current_version]['end_of_life'], '%Y-%m-%d') + result = requests.get(settings.subscription.lifecycle_api_url, verify=False) + if result.status_code != 200: + result.raise_for_status() + versions = result.json()['data'][0]['versions'] + version = [v for v in versions if v['name'] == current_version] + if len(version) > 0: + api_date = [ + (p['date_format'], p['date']) + for p in version[0]['phases'] + if p['name'] == 'Maintenance support' + ] + if api_date[0][0] == 'string': + assert eol_datetime.strftime("%B, %Y") in api_date[0][1] + elif api_date[0][0] == 'date': + assert eol_datetime.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + 'Z' == api_date[0][1] + else: + pytest.fail("Unexpcted date format returned") + else: + pytest.skip("The Satellite version is not GA yet")