forked from oamg/convert2rhel
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add missing integration tests for single yum transaction
While testing convert2rhel manually in a vagrant box, I realized that the conversion stopped in the yum transaction validation phase, generating a traceback and not doing a proper rollback after the error appeared. Since the transaction validation is supposed to trigger the rollback in case of any failures, it was strange that the tool was not behaving the way it should. As part of oamg#674 that introduced the fix, we left out the integration tests that were supposed to cover this scenario. Signed-off-by: Rodolfo Olivieri <[email protected]>
- Loading branch information
Showing
8 changed files
with
173 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
tests/integration/tier0/single-yum-transaction-validation/main.fmf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
summary: Single Yum Transaction Validation | ||
description: > | ||
Verify that we are doing a proper rollback during (and before) the | ||
validation phase in our transactions. | ||
|
||
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 |
105 changes: 105 additions & 0 deletions
105
...gration/tier0/single-yum-transaction-validation/test_single_yum_transaction_validation.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
import os | ||
import shutil | ||
|
||
import pytest | ||
|
||
from conftest import SYSTEM_RELEASE | ||
from envparse import env | ||
|
||
|
||
PKI_ENTITLEMENT_KEYS_PATH = "/etc/pki/entitlement" | ||
|
||
|
||
def backup_entitlement_keys(): | ||
original_keys = os.listdir(PKI_ENTITLEMENT_KEYS_PATH) | ||
|
||
for key in original_keys: | ||
full_key = "{}/{}".format(PKI_ENTITLEMENT_KEYS_PATH, key) | ||
new_key = "{}.bk".format(full_key) | ||
shutil.move(full_key, new_key) | ||
|
||
|
||
def rollback_entitlement_keys(): | ||
"""""" | ||
backup_keys = os.listdir(PKI_ENTITLEMENT_KEYS_PATH) | ||
|
||
for key in backup_keys: | ||
# This is already in the format with a .bk at the end of it | ||
backup_key = "{}/{}".format(PKI_ENTITLEMENT_KEYS_PATH, key) | ||
original_key = "{}".format(backup_key) | ||
shutil.move(backup_key, original_key) | ||
|
||
|
||
@pytest.mark.package_download_error | ||
def test_package_download_error(convert2rhel): | ||
""" | ||
Remove the entitlement keys 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 keys 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: | ||
server_sub = "Oracle Linux Server" | ||
|
||
if "8" in SYSTEM_RELEASE: | ||
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)) | ||
backup_entitlement_keys() | ||
assert c2r.expect_exact(final_message, timeout=600) == 0 | ||
|
||
assert c2r.exitstatus == 1 | ||
|
||
rollback_entitlement_keys() | ||
|
||
|
||
@pytest.mark.transaction_validation_error | ||
def test_transaction_validation_error(convert2rhel): | ||
""" | ||
Remove the entitlement keys 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 keys 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("Validating the yum transaction set, no modifications to the system will happen this time.") | ||
backup_entitlement_keys() | ||
assert c2r.expect_exact("Failed to validate the yum transaction.", timeout=600) == 0 | ||
|
||
assert c2r.exitstatus == 1 | ||
|
||
rollback_entitlement_keys() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters