-
Notifications
You must be signed in to change notification settings - Fork 87
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RHELC-828] Add missing integration tests for single yum transaction #677
Changes from all commits
789f8f8
cc8f861
873cccd
9938034
82b5eb7
1aac9f0
eabbf05
94213f9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
summary: Verify single yum transaction validation | ||
|
||
description: > | ||
Verify that we are doing a proper rollback during the validation phase in | ||
our transactions. | ||
|
||
If any errors occurs during the transaction resolution, either by | ||
downloading a package, dependency resolver and etc... A rollback should | ||
start and revert the changes to the system. | ||
|
||
link: https://issues.redhat.com/browse/RHELC-576 | ||
|
||
tier: 0 | ||
|
||
tag+: | ||
- yum | ||
- dnf | ||
- transaction | ||
|
||
/transaction_validation_error: | ||
adjust+: | ||
- enabled: false | ||
when: distro == centos-8 or distro == oraclelinux-8 | ||
tag+: | ||
- transaction-validation-error | ||
test: | | ||
pytest -svv -m transaction_validation_error | ||
|
||
/package_download_error: | ||
tag+: | ||
- package-download-error | ||
test: | | ||
pytest -svv -m package_download_error |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
import os | ||
import shutil | ||
Check notice Code scanning / CodeQL Unused import
Import of 'shutil' is not used.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I can open a follow-up PR to remove this type of warning later... I don't want to wait for a couple of hours to get results for the 3rd time in a row. |
||
|
||
import pytest | ||
|
||
from conftest import SYSTEM_RELEASE_ENV | ||
from envparse import env | ||
|
||
|
||
PKI_ENTITLEMENT_CERTS_PATH = "/etc/pki/entitlement" | ||
|
||
|
||
def remove_entitlement_certs(): | ||
""" | ||
Utility function to remove the entitlement certificate as soon as we | ||
notice it in the `PKI_ENTITLEMENT_CERTS_PATH`. | ||
|
||
We don't need to back it up and then restore it because the PKI_ENTITLEMENT_CERTS_PATH folder is only created during | ||
the conversion when the subscription-manager package is installed. And the .pem certificate is being generated by | ||
subscription-manager in the folder during the system registration. So to have the test system clean after the test | ||
finishes the certs shouldn't be present. | ||
""" | ||
for cert_filename in os.listdir(PKI_ENTITLEMENT_CERTS_PATH): | ||
cert_path = os.path.join(PKI_ENTITLEMENT_CERTS_PATH, cert_filename) | ||
try: | ||
os.unlink(cert_path) | ||
except Exception as e: | ||
print("Failed to delete %s. Reason: %s" % (cert_path, e)) | ||
Check failure Code scanning / CodeQL Clear-text logging of sensitive information
This expression logs [sensitive data (certificate)](1) as clear text.
This expression logs [sensitive data (certificate)](2) as clear text.
|
||
|
||
|
||
@pytest.mark.package_download_error | ||
def test_package_download_error(convert2rhel): | ||
""" | ||
Remove the entitlement certs found at /etc/pki/entitlement during package | ||
download phase for both yum and dnf transactions. | ||
|
||
This will run the conversion up to the point where we valiate the | ||
transaction, when it reaches a specific point of the validation, we remove | ||
the entitlement certs found in /etc/pki/entitlement/*.pem to ensure that the | ||
tool is doing a proper rollback when there is any failure during the package | ||
download. | ||
|
||
The package download happens in different phases for yum and dnf, yum | ||
download the packages during the `processTransaction` method call, while dnf | ||
has a specific method that process and download the packages in the | ||
transaction. | ||
""" | ||
|
||
server_sub = "CentOS Linux" | ||
pkgmanager = "yum" | ||
final_message = "There are no suitable mirrors available for the loaded repositories." | ||
|
||
if "oracle" in SYSTEM_RELEASE_ENV: | ||
server_sub = "Oracle Linux Server" | ||
|
||
if "8" in SYSTEM_RELEASE_ENV: | ||
pkgmanager = "dnf" | ||
final_message = "Failed to download the transaction packages." | ||
|
||
with convert2rhel( | ||
"-y --no-rpm-va --serverurl {} --username {} --password {} --pool {} --debug".format( | ||
env.str("RHSM_SERVER_URL"), | ||
env.str("RHSM_USERNAME"), | ||
env.str("RHSM_PASSWORD"), | ||
env.str("RHSM_POOL"), | ||
) | ||
) as c2r: | ||
c2r.expect("Adding {} packages to the {} transaction set.".format(server_sub, pkgmanager)) | ||
remove_entitlement_certs() | ||
assert c2r.expect_exact(final_message, timeout=600) == 0 | ||
|
||
assert c2r.exitstatus == 1 | ||
|
||
|
||
@pytest.mark.transaction_validation_error | ||
def test_transaction_validation_error(convert2rhel): | ||
""" | ||
Remove the entitlement certs found at /etc/pki/entitlement during transaction | ||
processing to throw the following yum error: pkgmanager.Errors.YumDownloadError | ||
|
||
This will run the conversion up to the point where we valiate the | ||
transaction, when it reaches a specific point of the validation, we remove | ||
the entitlement certs found in /etc/pki/entitlement/*.pem to ensure that the | ||
tool is doing a proper rollback when the transaction is being processed. | ||
""" | ||
with convert2rhel( | ||
"-y --no-rpm-va --serverurl {} --username {} --password {} --pool {} --debug".format( | ||
env.str("RHSM_SERVER_URL"), | ||
env.str("RHSM_USERNAME"), | ||
env.str("RHSM_PASSWORD"), | ||
env.str("RHSM_POOL"), | ||
) | ||
) as c2r: | ||
c2r.expect( | ||
"Downloading and validating the yum transaction set, no modifications to the system will happen this time." | ||
) | ||
remove_entitlement_certs() | ||
assert c2r.expect_exact("Failed to validate the yum transaction.", timeout=600) == 0 | ||
|
||
assert c2r.exitstatus == 1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd love to add a
because:
here to say why I'm disabling this test for centos-8 and oraclelinux-8, but since it's been a really long time, I don't remember. I will try to get the rationale at some point.