Skip to content

Commit d8fc3bb

Browse files
committed
Test Errata type Other, inclusive CV Filter
1 parent 7126841 commit d8fc3bb

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed

tests/foreman/api/test_errata.py

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
"""
1414

1515
# For ease of use hc refers to host-collection throughout this document
16+
from datetime import timezone, datetime
1617
from time import sleep, time
1718

1819
import pytest
20+
import requests
1921

2022
from robottelo.config import settings
2123
from robottelo.constants import (
@@ -1618,3 +1620,145 @@ def test_positive_incremental_update_apply_to_envs_cvs(
16181620
assert response == [], (
16191621
f'No incremental updates should currently be available to host: {rhel8_contenthost.hostname}.'
16201622
)
1623+
1624+
1625+
@pytest.mark.tier3
1626+
def test_positive_filter_errata_type_other(
1627+
module_sca_manifest_org,
1628+
target_sat,
1629+
module_cv,
1630+
):
1631+
"""
1632+
Sync the EPEL repository, containing many Erratum that are not of the
1633+
usual types: 'Bugfix', 'Enhancement', 'Security'.
1634+
Publish a content view version, filtering inclusively all Errata types, including 'Other'.
1635+
1636+
We expect filtering by all types including Other, does not change package or errata counts,
1637+
between the unfiltered and filtered content view versions.
1638+
1639+
Note: We need to fetch a dynamically created PGP public key to sync the EPEL repository.
1640+
1641+
:id: 062bb1a5-814c-4573-bedc-aaa4e2ef557a
1642+
1643+
:setup:
1644+
1. Fetch the latest supported RHEL major version in supportability.yaml (ie: 10)
1645+
2. GET request to EPEL's rpm GPG-key generator (dl.fedoraproject.org/pub/epel/)
1646+
3. Create GPG-key on satellite from URL's response.
1647+
4. Create custom product using the GPG-key.
1648+
1649+
:steps:
1650+
1. Create and sync the EPEL repository as a custom repo (~5 minutes)
1651+
2. Verify presence of new Erratum types that would fall under 'other'.
1652+
3. Create a content view, add the EPEL repo, publish the first version.
1653+
4. Create a content view filter for Erratum (by Date), inclusive.
1654+
5. Update Erratum filter rules: set end_date to today (UTC),
1655+
set flag --allow-other-types to True <<<
1656+
no start_date specified.
1657+
6. Create another content view filter for RPMs, inclusive.
1658+
7. Publish a second version (~10 minutes).
1659+
1660+
:expectedresults:
1661+
1. The second published version with filters, has the same
1662+
content counts (packages and erratum) as the first unfiltered version.
1663+
2. The second version's filters applied, has published Erratum of types that
1664+
fall under 'Other' (ie 'newpackage' , 'unspecified').
1665+
3. There are significantly more Total Errata published, than the sum of
1666+
the 3 normal types of Errata (bugfix,enhancement,security).
1667+
1668+
:BZ: 2160804
1669+
1670+
:verifies: SAT-20365
1671+
1672+
:customerscenario: true
1673+
1674+
"""
1675+
# newest version rhel
1676+
rhel_N = next(
1677+
r
1678+
for r in reversed(settings.supportability.content_hosts.rhel.versions)
1679+
if 'fips' not in str(r)
1680+
)
1681+
# fetch a newly generated PGP key from address's response
1682+
gpg_url = f'https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-{rhel_N}'
1683+
_response = requests.get(gpg_url, timeout=120, verify=True)
1684+
_response.raise_for_status()
1685+
# handle a valid response that might not be a PGP key
1686+
if "-----BEGIN PGP PUBLIC KEY BLOCK-----" not in _response.text:
1687+
raise ValueError('Fetched content was not a valid credential')
1688+
1689+
# create GPG key on satellite and associated product
1690+
gpg_key = target_sat.api.GPGKey(
1691+
organization=module_sca_manifest_org.id,
1692+
content=_response.text,
1693+
).create()
1694+
epel_product = target_sat.api.Product(
1695+
organization=module_sca_manifest_org,
1696+
gpg_key=gpg_key,
1697+
).create()
1698+
1699+
# create and sync custom EPEL repo
1700+
epel_url = f'https://dl.fedoraproject.org/pub/epel/{rhel_N}/Everything/x86_64/'
1701+
epel_repo = target_sat.api.Repository(
1702+
product=epel_product,
1703+
url=epel_url,
1704+
).create()
1705+
epel_repo.sync(timeout=1800)
1706+
# add repo to CV and publish
1707+
module_cv.repository = [epel_repo.read()]
1708+
module_cv.update(['repository'])
1709+
module_cv.read().publish(timeout=240) # initial unfiltered Version publishes quick
1710+
module_cv = module_cv.read()
1711+
1712+
# create errata filter
1713+
errata_filter = target_sat.api.ErratumContentViewFilter(
1714+
content_view=module_cv,
1715+
name='errata-filter',
1716+
inclusion=True,
1717+
).create()
1718+
1719+
today_UTC = datetime.now(timezone.utc).strftime('%Y-%m-%d')
1720+
# rule to filter erratum by date, only specify end_date
1721+
errata_rule = target_sat.api.ContentViewFilterRule(
1722+
content_view_filter=errata_filter,
1723+
end_date=today_UTC,
1724+
).create()
1725+
1726+
# hammer update the Erratum filter rule, flag 'allow-other-types' set to True <<<
1727+
target_sat.cli.ContentViewFilterRule.update(
1728+
{
1729+
'id': errata_rule.id,
1730+
'allow-other-types': 'true',
1731+
'content-view-filter-id': errata_filter.id,
1732+
}
1733+
)
1734+
module_cv = module_cv.read()
1735+
1736+
# create rpm filter
1737+
target_sat.api.RPMContentViewFilter(
1738+
content_view=module_cv,
1739+
name='rpm-filter',
1740+
inclusion=True,
1741+
).create()
1742+
1743+
# Publish 2nd Version with inclusive filters applied
1744+
module_cv = module_cv.read()
1745+
module_cv.publish(timeout=1200) # can take ~10 minutes, timeout is double that
1746+
module_cv = module_cv.read()
1747+
1748+
version_1 = module_cv.version[-1].read() # unfiltered
1749+
version_2 = module_cv.version[0].read() # filtered
1750+
# errata and package counts match between the filtered and unfiltered versions
1751+
assert version_1.errata_counts == version_2.errata_counts
1752+
assert version_1.package_count == version_2.package_count
1753+
1754+
# most of the EPEL repo's erratum are of type Other (~90%),
1755+
# so we expect the total number of errata is much greater
1756+
# than the sum of the 3 regular types (bugfix,enhancement,security)
1757+
# ie. The repo has ~200 errata of the 3 types, but over 2500 total errata.
1758+
regular_types_sum = sum(
1759+
[version_2.errata_counts[key] for key in ['security', 'bugfix', 'enhancement']]
1760+
)
1761+
total_errata = version_2.errata_counts['total']
1762+
assert total_errata > 2000
1763+
# Based on counts, the 3 regular types make up less than 1/5 of the total.
1764+
assert regular_types_sum < total_errata / 5

0 commit comments

Comments
 (0)