Skip to content

Commit

Permalink
Repair setup for package w/ swidtag, install and modular update
Browse files Browse the repository at this point in the history
  • Loading branch information
damoore044 committed Apr 3, 2024
1 parent de6fc12 commit 89e8bcc
Showing 1 changed file with 136 additions and 49 deletions.
185 changes: 136 additions & 49 deletions tests/foreman/api/test_errata.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -1365,37 +1364,69 @@ def _validate_swid_tags_installed(vm, module_name):
assert module_name in result


@pytest.fixture
def errata_host_lce(module_sca_manifest_org, target_sat):
"""Create and return a new lce in module SCA org."""
return target_sat.api.LifecycleEnvironment(organization=module_sca_manifest_org).create()


def fetch_cv_by_name_and_cvv(sat, org, name=DEFAULT_CV, ver=None):
"""Fetch some CV by name, defaults to looking for Default CV.
Return the updated CV.
Return desired version of the CV, or the latest version, or the first version if DEFAULT_CV.
"""
content_view = sat.api.ContentView(
organization=org,
name=name,
).search()
assert (
len(content_view[0].version) > 0
), f'The content-view id: {content_view.id}, has no versions.'
if name == DEFAULT_CV:
content_view_version = content_view[0].version[-1]
else:
content_view_version = (
content_view[0].version[0] if ver is None else content_view[0].version[ver]
)

return content_view, content_view_version


@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
@pytest.mark.rhel_ver_match('8')
def test_errata_installation_with_swidtags(
function_repos_collection_with_manifest, rhel8_contenthost, target_sat
module_sca_manifest_org,
rhel_contenthost,
errata_host_lce,
target_sat,
):
"""Verify errata installation with swid_tags and swid tags get updated after
module stream update.
:id: 43a59b9a-eb9b-4174-8b8e-73d923b1e51e
:setup:
1. publish an empty version of the CV to LCE.
2. create activation key, for registering host to CV content.
3. create repositories having rhel8 baseOS, prereqs, custom content with swid tags.
4. associate repositories and cv / ak to contenthost, sync all content.
5. publish & promote content view version with all content.
: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. register host using cv's activation key.
2. install swid-tools, dnf-plugin-swidtags packages on content host.
3. install older module stream and generate errata, swid tag.
4. assert errata count, swid tags are generated.
5. install errata via updating module stream.
6. assert errata count and swid tag changed after module update.
:expectedresults: swid tags should get updated after errata installation via
module stream update
:expectedresults:
swid tags should get updated after errata installation via module stream update
:CaseAutomation: Automated
Expand All @@ -1406,44 +1437,100 @@ 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,
}
)
function_repos_collection_with_manifest.setup_virtual_machine(rhel8_contenthost)
_org = module_sca_manifest_org
_lce = errata_host_lce
_cv = target_sat.api.ContentView(
organization=_org,
environment=[_lce],
).create()

# install older module stream
rhel8_contenthost.add_rex_key(satellite=target_sat)
_set_prerequisites_for_swid_repos(rhel8_contenthost)
_run_remote_command_on_content_host(
f'dnf -y module install {module_name}:0:{version}', rhel8_contenthost
_repos = {
'base_os': settings.repos.rhel8_os.baseos, # base rhel8
'sat_tools': settings.repos.rhel8_os.appstream, # swid prereqs
'swid_tags': settings.repos.swid_tag.url, # module stream pkgs and errata
}
# associate repos with sat, org, lce, cv, and sync
for _r_ in _repos:
target_sat.cli_factory.setup_org_for_a_custom_repo(
{
'url': _repos[_r_],
'organization-id': _org.id,
'lifecycle-environment-id': _lce.id,
'content-view-id': _cv.id,
},
)
# promote newest cv version with all repos/content
_cv = cv_publish_promote(
sat=target_sat,
org=_org,
cv=_cv,
lce=_lce,
)['content-view']
# ak in env, tied to content-view
_ak = target_sat.api.ActivationKey(
organization=_org,
environment=_lce,
content_view=_cv,
).create()
# register host with ak, succeeds
result = rhel_contenthost.register(
activation_keys=_ak.name,
target=target_sat,
org=_org,
loc=None,
)
target_sat.cli.Host.errata_recalculate({'host-id': rhel8_contenthost.nailgun_host.id})
assert result.status == 0, f'Failed to register the host {target_sat.hostname},\n{result}'
assert (
rhel_contenthost.subscribed
), f'Failed to subscribe the host {target_sat.hostname}, to content.'
result = rhel_contenthost.execute(r'subscription-manager repos --enable \*')
assert result.status == 0, f'Failed to enable repositories with subscription-manager,\n{result}'

# install outdated module stream package
_set_prerequisites_for_swid_repos(rhel_contenthost)
result = rhel_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
rhel_contenthost.execute('subscription-manager repos')

# validate swid tags Installed
before_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,
result = rhel_contenthost.execute(
f'swidq -i -n {module_name} | grep "File" | grep -o "rpm-.*.swidtag"',
)
assert (
result.status == 0
), f'An error occured trying to fetch swid tags for {module_name}.\n{result}'
before_errata_apply_result = result.stdout
assert before_errata_apply_result != '', f'Found no swid tags contained in {module_name}.'
assert (app_errata_count := rhel_contenthost.applicable_errata_count) == 1, (
f'Found {rhel_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})
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,
result = rhel_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 rhel_contenthost.execute('dnf -y upload-profile').status == 0

# recalculate and check errata after modular update
rhel_contenthost.execute('subscription-manager repos')
app_errata_count -= 1
assert rhel_contenthost.applicable_errata_count == app_errata_count, (
f'Found {rhel_contenthost.applicable_errata_count} applicable errata, after modular update of {module_name},'
f' expected {app_errata_count}.'
)
# swidtags were updated based on package version
result = rhel_contenthost.execute(
f'swidq -i -n {module_name} | grep "File" | grep -o "rpm-.*.swidtag"',
)
# swidtags get updated based on package version
assert (
result.status == 0
), f'An error occured trying to fetch swid tags for {module_name}.\n{result}'
after_errata_apply_result = result.stdout
assert before_errata_apply_result != after_errata_apply_result


Expand Down

0 comments on commit 89e8bcc

Please sign in to comment.