From 53c7b83b977d9c6d4c41c05d08e947e98ee71996 Mon Sep 17 00:00:00 2001 From: David Moore Date: Fri, 22 Mar 2024 07:12:08 -0400 Subject: [PATCH] Repair setup for package w/ swidtag, install and modular update --- tests/foreman/api/test_errata.py | 138 +++++++++++++++++++++---------- 1 file changed, 94 insertions(+), 44 deletions(-) diff --git a/tests/foreman/api/test_errata.py b/tests/foreman/api/test_errata.py index da257c8d983..e3d8feb1769 100644 --- a/tests/foreman/api/test_errata.py +++ b/tests/foreman/api/test_errata.py @@ -1353,7 +1353,6 @@ def _set_prerequisites_for_swid_repos(vm): f'curl --insecure --remote-name {settings.repos.swid_tools_repo}', vm ) _run_remote_command_on_content_host('mv *swid*.repo /etc/yum.repos.d', vm) - _run_remote_command_on_content_host(r'subscription-manager repos --enable \*', vm) _run_remote_command_on_content_host('yum install -y swid-tools', vm) _run_remote_command_on_content_host('yum install -y dnf-plugin-swidtags', vm) @@ -1368,14 +1367,13 @@ def _validate_swid_tags_installed(vm, module_name): @pytest.mark.tier3 @pytest.mark.upgrade @pytest.mark.pit_client -@pytest.mark.parametrize( - 'function_repos_collection_with_manifest', - [{'YumRepository': {'url': settings.repos.swid_tag.url, 'distro': 'rhel8'}}], - indirect=True, -) @pytest.mark.no_containers def test_errata_installation_with_swidtags( - function_repos_collection_with_manifest, rhel8_contenthost, target_sat + module_sca_manifest_org, + module_lce, + module_cv, + rhel8_contenthost, + target_sat, ): """Verify errata installation with swid_tags and swid tags get updated after module stream update. @@ -1384,15 +1382,18 @@ def test_errata_installation_with_swidtags( :steps: - 1. create product and repository having swid tags - 2. create content view and published it with repository - 3. create activation key and register content host - 4. create rhel8, swid repos on content host - 5. install swid-tools, dnf-plugin-swidtags packages on content host - 6. install older module stream and generate errata, swid tag - 7. assert errata count, swid tags are generated - 8. install errata vis updating module stream - 9. assert errata count and swid tag after module update + 1. promote empty content view and create activation key + 2. create product and repository having swid tags + 3. create rhel8, swid repos on content host + 4. create custom repo with an applicable module stream package containing swid tags + 5. associate repositories and cv / ak to contenthost, sync all content + 6. publish & promote content view version with all content + 7. register host using cv's activation key + 8. install swid-tools, dnf-plugin-swidtags packages on content host + 9. install older module stream and generate errata, swid tag + 10. assert errata count, swid tags are generated + 11. install errata via updating module stream + 12. assert errata count and swid tag changed after module update :expectedresults: swid tags should get updated after errata installation via module stream update @@ -1406,44 +1407,93 @@ def test_errata_installation_with_swidtags( """ module_name = 'kangaroo' version = '20180704111719' - # setup base_rhel8 and sat_tools repos - rhel8_contenthost.create_custom_repos( - **{ - 'baseos': settings.repos.rhel8_os.baseos, - 'appstream': settings.repos.rhel8_os.appstream, - } + # new cv version for ak + cv_publish_promote( + target_sat, + module_sca_manifest_org, + module_cv, + module_lce, + ) + _ak = target_sat.api.ActivationKey( + organization=module_sca_manifest_org, + environment=module_lce, + content_view=module_cv, + ).create() + # needed repos for module stream, swid tags, prereqs + _repos = { + 'base_os': settings.repos.rhel8_os.baseos, + 'sat_tools': settings.repos.rhel8_os.appstream, + 'swid_tags': settings.repos.swid_tag.url, + } + # associate repos with host, org, lce, and sync + rhel8_contenthost.create_custom_repos(**_repos) + for _key in _repos: + target_sat.cli_factory.setup_org_for_a_custom_repo( + { + 'url': _repos[_key], + 'organization-id': module_sca_manifest_org.id, + 'lifecycle-environment-id': module_lce.id, + 'activationkey-id': _ak.id, + }, + ) + # promote new version with all repos/content + cv_publish_promote( + target_sat, + module_sca_manifest_org, + module_cv, + module_lce, ) - function_repos_collection_with_manifest.setup_virtual_machine(rhel8_contenthost) + # register host with ak, succeeds + result = rhel8_contenthost.register( + activation_keys=_ak.name, + target=target_sat, + org=module_sca_manifest_org, + loc=None, + ) + assert result.status == 0, f'Failed to register the host {target_sat.hostname},\n{result}' + assert ( + rhel8_contenthost.subscribed + ), f'Failed to subscribe the host {target_sat.hostname}, to content.' + result = rhel8_contenthost.execute(r'subscription-manager repos --enable \*') + assert result.status == 0, f'Failed to enable repositories with subscription-manager,\n{result}' - # install older module stream - rhel8_contenthost.add_rex_key(satellite=target_sat) + # install outdated module stream package _set_prerequisites_for_swid_repos(rhel8_contenthost) - _run_remote_command_on_content_host( - f'dnf -y module install {module_name}:0:{version}', rhel8_contenthost - ) - target_sat.cli.Host.errata_recalculate({'host-id': rhel8_contenthost.nailgun_host.id}) + result = rhel8_contenthost.execute(f'dnf -y module install {module_name}:0:{version}') + assert ( + result.status == 0 + ), f'Failed to install module stream package: {module_name}:0:{version}.\n{result.stdout}' + # recalculate errata after install of old module stream + rhel8_contenthost.execute('subscription-manager repos') + # validate swid tags Installed - before_errata_apply_result = _run_remote_command_on_content_host( + before_errata_apply_result = rhel8_contenthost.execute( f"swidq -i -n {module_name} | grep 'File' | grep -o 'rpm-.*.swidtag'", - rhel8_contenthost, - return_result=True, + ).stdout + assert before_errata_apply_result != '', f'Found no swid tags contained in {module_name}.' + assert (app_errata_count := rhel8_contenthost.applicable_errata_count) == 1, ( + f'Found {rhel8_contenthost.applicable_errata_count} applicable errata,' + f' after installing {module_name}:0:{version}, expected 1.' ) - assert before_errata_apply_result != '' - assert (applicable_errata_count := rhel8_contenthost.applicable_errata_count) == 1 # apply modular errata - _run_remote_command_on_content_host(f'dnf -y module update {module_name}', rhel8_contenthost) - _run_remote_command_on_content_host('dnf -y upload-profile', rhel8_contenthost) - target_sat.cli.Host.errata_recalculate({'host-id': rhel8_contenthost.nailgun_host.id}) + result = rhel8_contenthost.execute(f'dnf -y module update {module_name}') + assert ( + result.status == 0 + ), f'Failed to update module stream package: {module_name}.\n{result.stdout}' + assert rhel8_contenthost.execute('dnf -y upload-profile').status == 0 + + # recalculate and check errata after modular update rhel8_contenthost.execute('subscription-manager repos') - applicable_errata_count -= 1 - assert rhel8_contenthost.applicable_errata_count == applicable_errata_count - after_errata_apply_result = _run_remote_command_on_content_host( - f"swidq -i -n {module_name} | grep 'File'| grep -o 'rpm-.*.swidtag'", - rhel8_contenthost, - return_result=True, + app_errata_count -= 1 + assert rhel8_contenthost.applicable_errata_count == app_errata_count, ( + f'Found {rhel8_contenthost.applicable_errata_count} applicable errata, after modular update of {module_name},' + f' expected {app_errata_count}.' ) - # swidtags get updated based on package version + # swidtags were updated based on package version + after_errata_apply_result = rhel8_contenthost.execute( + f"swidq -i -n {module_name} | grep 'File' | grep -o 'rpm-.*.swidtag'", + ).stdout assert before_errata_apply_result != after_errata_apply_result