From 062d4cc0a27ec3f339965159414d093be29b96c7 Mon Sep 17 00:00:00 2001 From: Cole Higgins Date: Tue, 5 May 2026 16:36:40 -0400 Subject: [PATCH 1/4] Update IOP to support multi rhel versions --- robottelo/constants/__init__.py | 18 ++ tests/foreman/cli/test_rhcloud_iop.py | 4 +- .../ui/test_rhcloud_insights_vulnerability.py | 169 +++++++++--------- tests/foreman/ui/test_rhcloud_iop.py | 10 +- 4 files changed, 107 insertions(+), 94 deletions(-) diff --git a/robottelo/constants/__init__.py b/robottelo/constants/__init__.py index f1c0cd1ef04..46060f6ae2b 100644 --- a/robottelo/constants/__init__.py +++ b/robottelo/constants/__init__.py @@ -1001,6 +1001,24 @@ RHEL10_MARIADB_ERRATUM = 'RHSA-2026:0136' # Use the first CVE as the primary one for single-CVE tests RHEL10_VULNERABILITY_CVE_ID = RHEL10_VULNERABLE_MARIADB_CVES[0] +# Per-version vulnerability data for IoP vulnerability testing +VULNERABLE_PACKAGES = { + 8: { + 'rpm': 'mariadb-10.3.39-1.module+el8.8.0+19673+72b0d35f.x86_64', + 'cves': ['CVE-2025-13699'], + 'erratum': '', + }, + 9: { + 'rpm': 'mariadb-3:10.5.29-2.el9_6.x86_64', + 'cves': ['CVE-2025-13699'], + 'erratum': '', + }, + 10: { + 'rpm': RHEL10_VULNERABLE_MARIADB_RPM, + 'cves': RHEL10_VULNERABLE_MARIADB_CVES, + 'erratum': RHEL10_MARIADB_ERRATUM, + }, +} FAKE_1_YUM_REPOS_COUNT = 32 FAKE_3_YUM_REPOS_COUNT = 78 FAKE_9_YUM_SECURITY_ERRATUM = [ diff --git a/tests/foreman/cli/test_rhcloud_iop.py b/tests/foreman/cli/test_rhcloud_iop.py index be6936511c3..0e01fcb09bd 100644 --- a/tests/foreman/cli/test_rhcloud_iop.py +++ b/tests/foreman/cli/test_rhcloud_iop.py @@ -44,7 +44,7 @@ @pytest.mark.no_containers -@pytest.mark.rhel_ver_match('N-0') +@pytest.mark.rhel_ver_match('N-2') def test_positive_install_iop_custom_certs( certs_data, sat_ready_rhel, @@ -171,7 +171,7 @@ def test_positive_install_iop_custom_certs( @pytest.mark.no_containers -@pytest.mark.rhel_ver_match('N-0') +@pytest.mark.rhel_ver_match('N-2') def test_disable_enable_iop(module_satellite_iop, module_sca_manifest, rhel_contenthost): """Disable and re-enable IoP on Satellite. diff --git a/tests/foreman/ui/test_rhcloud_insights_vulnerability.py b/tests/foreman/ui/test_rhcloud_insights_vulnerability.py index 13fc7cc80d3..1463b817fc2 100644 --- a/tests/foreman/ui/test_rhcloud_insights_vulnerability.py +++ b/tests/foreman/ui/test_rhcloud_insights_vulnerability.py @@ -26,7 +26,10 @@ def vulnerable_rhel_host(rhel_insights_vm): """Fixture to prepare a RHEL host with a vulnerable package""" client = rhel_insights_vm - # Remove any static repos and update to the latest packages available from the Satellite + rhel_ver = client.os_version.major + vuln_data = constants.VULNERABLE_PACKAGES[rhel_ver] + assert vuln_data['rpm'], f'No vulnerable package defined for RHEL {rhel_ver}' + assert ( client.execute( 'find /etc/yum.repos.d/ -type f | grep -vF redhat.repo | xargs -I \'{}\' rm \'{}\'' @@ -34,39 +37,38 @@ def vulnerable_rhel_host(rhel_insights_vm): == 0 ) assert client.execute('dnf -y update').status == 0 - # Install vulnerable mariadb version (dnf install with NEVRA handles install/downgrade) - assert client.execute(f'dnf install -y {constants.RHEL10_VULNERABLE_MARIADB_RPM}').status == 0 - # Run insights-client to report the vulnerabilities to Satellite + assert client.execute(f'dnf install -y {vuln_data["rpm"]}').status == 0 assert client.execute('insights-client').status == 0 return client @pytest.fixture(scope='module') def setup_content_for_iop(module_target_sat_insights, rhcloud_manifest_org): - """Fixture to sync RHEL content repos""" + """Fixture to sync RHEL content repos for all supported versions""" satellite = module_target_sat_insights - # Enable and sync BaseOS and AppStram repos - for name in ['rhel10_bos', 'rhel10_aps']: - # Enable the repository - rh_repo_id = satellite.api_factory.enable_rhrepo_and_fetchid( - basearch=constants.DEFAULT_ARCHITECTURE, - org_id=rhcloud_manifest_org.id, - product=constants.REPOS[name]['product'], - repo=constants.REPOS[name]['name'], - reposet=constants.REPOS[name]['reposet'], - releasever=constants.REPOS[name]['releasever'], - ) + for rhel_ver in [8, 9, 10]: + for repo_type in ['bos', 'aps']: + name = f'rhel{rhel_ver}_{repo_type}' + if name not in constants.REPOS: + continue + rh_repo_id = satellite.api_factory.enable_rhrepo_and_fetchid( + basearch=constants.DEFAULT_ARCHITECTURE, + org_id=rhcloud_manifest_org.id, + product=constants.REPOS[name]['product'], + repo=constants.REPOS[name]['name'], + reposet=constants.REPOS[name]['reposet'], + releasever=constants.REPOS[name]['releasever'], + ) - # Sync the repository - rh_repo = satellite.api.Repository(id=rh_repo_id).read() - task = rh_repo.sync(synchronous=False) - satellite.wait_for_tasks( - search_query=(f'id = {task["id"]}'), - poll_timeout=2500, - ) - task_status = satellite.api.ForemanTask(id=task['id']).poll() - assert task_status['result'] == 'success' + rh_repo = satellite.api.Repository(id=rh_repo_id).read() + task = rh_repo.sync(synchronous=False) + satellite.wait_for_tasks( + search_query=(f'id = {task["id"]}'), + poll_timeout=2500, + ) + task_status = satellite.api.ForemanTask(id=task['id']).poll() + assert task_status['result'] == 'success' # Manually trigger CVE sync assert satellite.execute('systemctl start iop-cvemap-download').status == 0 @@ -75,8 +77,8 @@ def setup_content_for_iop(module_target_sat_insights, rhcloud_manifest_org): @pytest.mark.e2e @pytest.mark.no_containers -@pytest.mark.rhel_ver_match('10') -@pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) +@pytest.mark.rhel_ver_match(r'^(?!7).*') +@pytest.mark.parametrize('module_target_sat_insights', [True], ids=['local'], indirect=True) def test_rhcloud_insights_vulnerabilities_e2e( vulnerable_rhel_host, rhcloud_manifest_org, @@ -108,6 +110,9 @@ def test_rhcloud_insights_vulnerabilities_e2e( satellite = module_target_sat_insights client = vulnerable_rhel_host hostname = client.hostname + rhel_ver = client.os_version.major + vuln_data = constants.VULNERABLE_PACKAGES[rhel_ver] + primary_cve = vuln_data['cves'][0] with satellite.ui_session() as session: session.organization.select(org_name=rhcloud_manifest_org.name) @@ -116,29 +121,23 @@ def test_rhcloud_insights_vulnerabilities_e2e( assert status['Red Hat Lightspeed']['Status'] == 'Reporting' vulnerabilities = session.host_new.get_vulnerabilities(hostname) - assert any( - vuln.get('CVE ID') == constants.RHEL10_VULNERABILITY_CVE_ID for vuln in vulnerabilities - ) + assert any(vuln.get('CVE ID') == primary_cve for vuln in vulnerabilities) # Validate the affected Host from the Vulnerability details and list pages - affected_host = session.cloudvulnerability.get_affected_hosts_by_cve( - constants.RHEL10_VULNERABILITY_CVE_ID - ) + affected_host = session.cloudvulnerability.get_affected_hosts_by_cve(primary_cve) assert affected_host[0]['Name'] == hostname # Validate the Host's Vulnerabilities tab vulnerabilities = session.cloudvulnerability.validate_cve_to_host_details_flow( - constants.RHEL10_VULNERABILITY_CVE_ID, hostname - ) - assert any( - vuln.get('CVE ID') == constants.RHEL10_VULNERABILITY_CVE_ID for vuln in vulnerabilities + primary_cve, hostname ) + assert any(vuln.get('CVE ID') == primary_cve for vuln in vulnerabilities) # Apply the erratum that mitigates the CVEs timestamp = (datetime.now(UTC) - timedelta(minutes=2)).strftime('%Y-%m-%d %H:%M') session.host_new.apply_erratas( entity_name=hostname, - search=f'errata_id == {constants.RHEL10_MARIADB_ERRATUM}', + search=f'errata_id == {vuln_data["erratum"]}', ) # Wait for applicability to generate on the host after remediation @@ -162,14 +161,14 @@ def test_rhcloud_insights_vulnerabilities_e2e( vulnerabilities = session.host_new.get_vulnerabilities(hostname) cve_ids = [vuln['CVE ID'] for vuln in vulnerabilities] - for mariadb_cve in constants.RHEL10_VULNERABLE_MARIADB_CVES: - assert mariadb_cve not in cve_ids + for cve in vuln_data['cves']: + assert cve not in cve_ids @pytest.mark.e2e @pytest.mark.no_containers -@pytest.mark.rhel_ver_match('10') -@pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) +@pytest.mark.rhel_ver_match(r'^(?!7).*') +@pytest.mark.parametrize('module_target_sat_insights', [True], ids=['local'], indirect=True) def test_edit_business_risk_and_status_individual( vulnerable_rhel_host, rhcloud_manifest_org, @@ -193,35 +192,30 @@ def test_edit_business_risk_and_status_individual( 2. Status can be edited and persists in the table """ satellite = module_target_sat_insights + rhel_ver = vulnerable_rhel_host.os_version.major + vuln_data = constants.VULNERABLE_PACKAGES[rhel_ver] + primary_cve = vuln_data['cves'][0] with satellite.ui_session() as session: session.organization.select(org_name=rhcloud_manifest_org.name) # Edit business risk via row kebab menu - session.cloudvulnerability.edit_business_risk( - constants.RHEL10_VULNERABILITY_CVE_ID, 'High', 'Test justification' - ) + session.cloudvulnerability.edit_business_risk(primary_cve, 'High', 'Test justification') # Verify business risk in table vulns = session.cloudvulnerability.read() - cve_row = [row for row in vulns if row['CVE ID'] == constants.RHEL10_VULNERABILITY_CVE_ID] - assert len(cve_row) == 1, ( - f'Expected 1 CVE with ID {constants.RHEL10_VULNERABILITY_CVE_ID}, found {len(cve_row)}' - ) + cve_row = [row for row in vulns if row['CVE ID'] == primary_cve] + assert len(cve_row) == 1, f'Expected 1 CVE with ID {primary_cve}, found {len(cve_row)}' cve_row = cve_row[0] assert cve_row['Business risk'] == 'High' # Edit status - session.cloudvulnerability.edit_status( - constants.RHEL10_VULNERABILITY_CVE_ID, 'In review', 'Testing status edit' - ) + session.cloudvulnerability.edit_status(primary_cve, 'In review', 'Testing status edit') # Verify status in table vulns = session.cloudvulnerability.read() - cve_row = [row for row in vulns if row['CVE ID'] == constants.RHEL10_VULNERABILITY_CVE_ID] - assert len(cve_row) == 1, ( - f'Expected 1 CVE with ID {constants.RHEL10_VULNERABILITY_CVE_ID}, found {len(cve_row)}' - ) + cve_row = [row for row in vulns if row['CVE ID'] == primary_cve] + assert len(cve_row) == 1, f'Expected 1 CVE with ID {primary_cve}, found {len(cve_row)}' cve_row = cve_row[0] assert cve_row['Status'] == 'In review' @@ -241,9 +235,9 @@ def test_bulk_edit_business_risk_and_status( :id: 898904b5-fb95-43f9-8c33-cd107f00c206 :steps: - 1. Create multiple CVEs by downgrading vulnerable mariadb package + 1. Create multiple CVEs by downgrading vulnerable package 2. Navigate to Vulnerabilities page - 3. Select multiple CVEs (2 of the 3 CVEs created by mariadb) + 3. Select multiple CVEs (2 of the CVEs created by the package) 4. Use bulk actions menu to edit business risk 5. Verify business risk updated for all selected CVEs 6. Use bulk actions menu to edit status @@ -255,12 +249,13 @@ def test_bulk_edit_business_risk_and_status( 3. Bulk status edit applies to all selected CVEs """ satellite = module_target_sat_insights + rhel_ver = vulnerable_rhel_host.os_version.major + vuln_data = constants.VULNERABLE_PACKAGES[rhel_ver] with satellite.ui_session() as session: session.organization.select(org_name=rhcloud_manifest_org.name) - # Use the first 2 CVEs from the mariadb package for deterministic bulk edit testing - cve_ids = constants.RHEL10_VULNERABLE_MARIADB_CVES[:2] + cve_ids = vuln_data['cves'][:2] # Bulk edit business risk session.cloudvulnerability.bulk_edit_business_risk(cve_ids, 'Critical', 'Bulk test') @@ -287,7 +282,7 @@ def test_bulk_edit_business_risk_and_status( @pytest.mark.e2e @pytest.mark.no_containers -@pytest.mark.rhel_ver_match('10') +@pytest.mark.rhel_ver_match(r'^(?!7).*') @pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_edit_from_cve_details_page( vulnerable_rhel_host, @@ -314,42 +309,41 @@ def test_edit_from_cve_details_page( 3. Changes persist and are visible in main vulnerabilities table """ satellite = module_target_sat_insights + rhel_ver = vulnerable_rhel_host.os_version.major + vuln_data = constants.VULNERABLE_PACKAGES[rhel_ver] + primary_cve = vuln_data['cves'][0] with satellite.ui_session() as session: session.organization.select(org_name=rhcloud_manifest_org.name) # Edit business risk from CVE details page session.cloudvulnerability.edit_business_risk_from_details( - constants.RHEL10_VULNERABILITY_CVE_ID, 'Low', 'Low priority via details page' + primary_cve, 'Low', 'Low priority via details page' ) # Verify business risk in main table vulns = session.cloudvulnerability.read() - cve_row = [row for row in vulns if row['CVE ID'] == constants.RHEL10_VULNERABILITY_CVE_ID] - assert len(cve_row) == 1, ( - f'Expected 1 CVE with ID {constants.RHEL10_VULNERABILITY_CVE_ID}, found {len(cve_row)}' - ) + cve_row = [row for row in vulns if row['CVE ID'] == primary_cve] + assert len(cve_row) == 1, f'Expected 1 CVE with ID {primary_cve}, found {len(cve_row)}' assert cve_row[0]['Business risk'] == 'Low' # Edit status from CVE details page session.cloudvulnerability.edit_status_from_details( - constants.RHEL10_VULNERABILITY_CVE_ID, + primary_cve, 'No action - risk accepted', 'Risk accepted via details page', ) # Verify status in main table vulns = session.cloudvulnerability.read() - cve_row = [row for row in vulns if row['CVE ID'] == constants.RHEL10_VULNERABILITY_CVE_ID] - assert len(cve_row) == 1, ( - f'Expected 1 CVE with ID {constants.RHEL10_VULNERABILITY_CVE_ID}, found {len(cve_row)}' - ) + cve_row = [row for row in vulns if row['CVE ID'] == primary_cve] + assert len(cve_row) == 1, f'Expected 1 CVE with ID {primary_cve}, found {len(cve_row)}' assert cve_row[0]['Status'] == 'No action - risk accepted' @pytest.mark.e2e @pytest.mark.no_containers -@pytest.mark.rhel_ver_match('10') +@pytest.mark.rhel_ver_match(r'^(?!7).*') @pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_filter_by_os_version( vulnerable_rhel_host, @@ -364,7 +358,7 @@ def test_filter_by_os_version( :steps: 1. Create a CVE by downgrading a vulnerable package 2. Navigate to Vulnerabilities page - 3. Apply OS filter for RHEL 10 + 3. Apply OS filter for the host's RHEL version 4. Verify filtered results are displayed 5. Verify CVE appears in filtered results @@ -374,6 +368,9 @@ def test_filter_by_os_version( 3. The created CVE appears in the filtered results """ satellite = module_target_sat_insights + rhel_ver = vulnerable_rhel_host.os_version.major + vuln_data = constants.VULNERABLE_PACKAGES[rhel_ver] + primary_cve = vuln_data['cves'][0] with satellite.ui_session() as session: session.organization.select(org_name=rhcloud_manifest_org.name) @@ -382,8 +379,8 @@ def test_filter_by_os_version( vulns_before = session.cloudvulnerability.read() assert vulns_before, 'No vulnerabilities found before filtering' - # Apply OS filter for RHEL 10 - session.cloudvulnerability.filter_by_os(['RHEL 10']) + # Apply OS filter for the host's RHEL version + session.cloudvulnerability.filter_by_os([f'RHEL {rhel_ver}']) # Read vulnerabilities after filtering vulns_after = session.cloudvulnerability.read() @@ -396,17 +393,13 @@ def test_filter_by_os_version( ) # Verify our CVE appears in the filtered results - cve_found = any( - row['CVE ID'] == constants.RHEL10_VULNERABILITY_CVE_ID for row in vulns_after - ) - assert cve_found, ( - f'CVE {constants.RHEL10_VULNERABILITY_CVE_ID} should appear in RHEL 10 filtered results' - ) + cve_found = any(row['CVE ID'] == primary_cve for row in vulns_after) + assert cve_found, f'CVE {primary_cve} should appear in RHEL {rhel_ver} filtered results' @pytest.mark.e2e @pytest.mark.no_containers -@pytest.mark.rhel_ver_match('10') +@pytest.mark.rhel_ver_match(r'^(?!7).*') @pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_positive_disable_vulnerability_analysis_for_host( vulnerable_rhel_host, @@ -471,7 +464,7 @@ def test_positive_disable_vulnerability_analysis_for_host( @pytest.mark.e2e @pytest.mark.no_containers -@pytest.mark.rhel_ver_match('10') +@pytest.mark.rhel_ver_match(r'^(?!7).*') @pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_positive_bulk_disable_vulnerability_analysis( vulnerable_rhel_host, @@ -696,16 +689,18 @@ def test_positive_iop_cve_display_when_repos_exceeding_api_page_limit( f'This indicates VMaaS did not paginate beyond the first API page.' ) + rhel_ver = vulnerable_rhel_host.os_version.major + vuln_data = constants.VULNERABLE_PACKAGES[rhel_ver] + primary_cve = vuln_data['cves'][0] + with satellite.ui_session() as session: session.organization.select(org_name=rhcloud_manifest_org.name) # Verify the CVE appears on the Vulnerabilities page and the host is affected - affected_hosts = session.cloudvulnerability.get_affected_hosts_by_cve( - constants.RHEL10_VULNERABILITY_CVE_ID - ) + affected_hosts = session.cloudvulnerability.get_affected_hosts_by_cve(primary_cve) assert any(host['Name'] == hostname for host in affected_hosts), ( f'Host {hostname} not found in affected hosts for ' - f'CVE {constants.RHEL10_VULNERABILITY_CVE_ID}. ' + f'CVE {primary_cve}. ' f'VMaaS may not have synced repos beyond the first API page (20 repos).' ) diff --git a/tests/foreman/ui/test_rhcloud_iop.py b/tests/foreman/ui/test_rhcloud_iop.py index 0bf1b293743..dc393796baa 100644 --- a/tests/foreman/ui/test_rhcloud_iop.py +++ b/tests/foreman/ui/test_rhcloud_iop.py @@ -81,7 +81,7 @@ def create_rbac_user( @pytest.mark.pit_server @pytest.mark.pit_client @pytest.mark.no_containers -@pytest.mark.rhel_ver_match(r'^(?![78]).*') +@pytest.mark.rhel_ver_match(r'^(?!7).*') @pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_iop_recommendations_e2e( rhel_insights_vm, @@ -163,7 +163,7 @@ def test_iop_recommendations_e2e( @pytest.mark.e2e @pytest.mark.no_containers -@pytest.mark.rhel_ver_match(r'^(?![78]).*') +@pytest.mark.rhel_ver_match(r'^(?!7).*') @pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_iop_recommendations_remediate_multiple_hosts( rhel_insights_vms, @@ -237,7 +237,7 @@ def test_iop_recommendations_remediate_multiple_hosts( @pytest.mark.pit_server @pytest.mark.pit_client @pytest.mark.no_containers -@pytest.mark.rhel_ver_match(r'^(?![78]).*') +@pytest.mark.rhel_ver_match(r'^(?!7).*') @pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_iop_recommendations_host_details_e2e( rhel_insights_vm, @@ -325,8 +325,8 @@ def test_iop_negative_rhcloud_inventory_upload_not_displayed(module_target_sat_i @pytest.mark.e2e @pytest.mark.no_containers -@pytest.mark.rhel_ver_match('10') -@pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) +@pytest.mark.rhel_ver_match(r'^(?!7).*') +@pytest.mark.parametrize('module_target_sat_insights', [True], ids=['local'], indirect=True) def test_iop_recommendations_remediation_type_and_status( rhel_insights_vm, rhcloud_manifest_org, From c2e9b5316dd8ef54a9b9a808f082735c5412cc4a Mon Sep 17 00:00:00 2001 From: Cole Higgins Date: Tue, 5 May 2026 16:40:28 -0400 Subject: [PATCH 2/4] remove pytestmarker --- tests/foreman/ui/test_rhcloud_insights_vulnerability.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/foreman/ui/test_rhcloud_insights_vulnerability.py b/tests/foreman/ui/test_rhcloud_insights_vulnerability.py index 1463b817fc2..5f15e6c4dc6 100644 --- a/tests/foreman/ui/test_rhcloud_insights_vulnerability.py +++ b/tests/foreman/ui/test_rhcloud_insights_vulnerability.py @@ -168,7 +168,7 @@ def test_rhcloud_insights_vulnerabilities_e2e( @pytest.mark.e2e @pytest.mark.no_containers @pytest.mark.rhel_ver_match(r'^(?!7).*') -@pytest.mark.parametrize('module_target_sat_insights', [True], ids=['local'], indirect=True) +@pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_edit_business_risk_and_status_individual( vulnerable_rhel_host, rhcloud_manifest_org, From c1b2c89c3775db6915810afd7b4c6a9f01a296c0 Mon Sep 17 00:00:00 2001 From: Cole Higgins Date: Tue, 12 May 2026 17:09:22 -0400 Subject: [PATCH 3/4] update pytest marker to False --- tests/foreman/ui/test_rhcloud_insights_vulnerability.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/foreman/ui/test_rhcloud_insights_vulnerability.py b/tests/foreman/ui/test_rhcloud_insights_vulnerability.py index 5f15e6c4dc6..646c5752087 100644 --- a/tests/foreman/ui/test_rhcloud_insights_vulnerability.py +++ b/tests/foreman/ui/test_rhcloud_insights_vulnerability.py @@ -78,7 +78,7 @@ def setup_content_for_iop(module_target_sat_insights, rhcloud_manifest_org): @pytest.mark.e2e @pytest.mark.no_containers @pytest.mark.rhel_ver_match(r'^(?!7).*') -@pytest.mark.parametrize('module_target_sat_insights', [True], ids=['local'], indirect=True) +@pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_rhcloud_insights_vulnerabilities_e2e( vulnerable_rhel_host, rhcloud_manifest_org, From 01d2ca7e30fb9c85954c6d49a672fa46cd87ff5a Mon Sep 17 00:00:00 2001 From: Cole Higgins Date: Tue, 26 May 2026 21:53:50 -0400 Subject: [PATCH 4/4] update pytest marker --- tests/foreman/ui/test_rhcloud_iop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/foreman/ui/test_rhcloud_iop.py b/tests/foreman/ui/test_rhcloud_iop.py index dc393796baa..73b373861d3 100644 --- a/tests/foreman/ui/test_rhcloud_iop.py +++ b/tests/foreman/ui/test_rhcloud_iop.py @@ -326,7 +326,7 @@ def test_iop_negative_rhcloud_inventory_upload_not_displayed(module_target_sat_i @pytest.mark.e2e @pytest.mark.no_containers @pytest.mark.rhel_ver_match(r'^(?!7).*') -@pytest.mark.parametrize('module_target_sat_insights', [True], ids=['local'], indirect=True) +@pytest.mark.parametrize('module_target_sat_insights', [False], ids=['local'], indirect=True) def test_iop_recommendations_remediation_type_and_status( rhel_insights_vm, rhcloud_manifest_org,