Source code for rhui4_tests.test_sosreport
""" Test case for sosreport usage in RHUI """
# for RHBZ#1591027 and RHBZ#1578678
import logging
from os.path import basename, join
from shutil import rmtree
from tempfile import mkdtemp
from stitches.expect import Expect
from rhui4_tests_lib.cfg import ANSWERS, RHUI_CFG, RHUI_ROOT
from rhui4_tests_lib.conmgr import ConMgr
from rhui4_tests_lib.helpers import Helpers
from rhui4_tests_lib.rhuimanager import RHUIManager
from rhui4_tests_lib.rhuimanager_instance import RHUIManagerInstance
from rhui4_tests_lib.sos import Sos
logging.basicConfig(level=logging.DEBUG)
TMPDIR = mkdtemp()
SOSREPORT_LOCATION_RHUA = join(TMPDIR, "sosreport_location_rhua")
SOSREPORT_LOCATION_CDS = join(TMPDIR, "sosreport_location_cds")
CONNECTION_RHUA = RHUA = ConMgr.connect()
CONNECTION_CDS = ConMgr.connect(ConMgr.get_cds_hostnames()[0])
WANTED_FILES_RHUA = [ANSWERS,
"/root/.rhui/rhui.log",
RHUI_CFG,
"/etc/pulp/settings.py",
"/var/log/rhui-installer/install_logger.log.latest",
"/var/log/rhui/rhua_ansible.log",
"/var/log/rhui/rhui-subscription-sync.log"]
WANTED_FILES_CDS = ["/etc/nginx/nginx.conf",
"/etc/nginx/conf.d/ssl.conf",
"/var/log/nginx/access.log",
"/var/log/nginx/error.log"]
CMDS_RHUA = ["rhui-manager status",
"rhui-manager cert info"]
CMDS_CDS = [f"ls -lR {RHUI_ROOT}"]
WANTED_FILES_RHUA.extend([Helpers.encode_sos_command(cmd) for cmd in CMDS_RHUA])
WANTED_FILES_CDS.extend([Helpers.encode_sos_command(cmd) for cmd in CMDS_CDS])
[docs]
def setup():
'''
announce the beginning of the test run
'''
print(f"*** Running {basename(__file__)}: ***")
[docs]
def test_00_rhui_init():
'''
add a CDS and run rhui-subscription-sync to ensure their log files exist
'''
# use initial_run first to ensure we're logged in to rhui-manager
RHUIManager.initial_run(CONNECTION_RHUA)
RHUIManagerInstance.add_instance(CONNECTION_RHUA, "cds")
# can't use expect_retval as the exit code can be 0 or 1 (sync is configured or unconfigured)
Expect.ping_pong(CONNECTION_RHUA,
"rhui-subscription-sync ; echo ACK",
"ACK")
[docs]
def test_01_rhua_sosreport_run():
'''
run sosreport on the RHUA node
'''
sosreport_location = Sos.run(CONNECTION_RHUA)
with open(SOSREPORT_LOCATION_RHUA, "w", encoding="utf-8") as location:
location.write(sosreport_location)
[docs]
def test_02_rhua_sosreport_check():
'''
check if the sosreport archive from the RHUA node contains the desired files
'''
with open(SOSREPORT_LOCATION_RHUA, encoding="utf-8") as location:
sosreport_location = location.read()
Sos.check_files_in_archive(CONNECTION_RHUA, WANTED_FILES_RHUA, sosreport_location)
[docs]
def test_03_cds_sosreport_run():
'''
run sosreport on the CDS node
'''
sosreport_location = Sos.run(CONNECTION_CDS)
with open(SOSREPORT_LOCATION_CDS, "w", encoding="utf-8") as location:
location.write(sosreport_location)
[docs]
def test_04_cds_sosreport_check():
'''
check if the sosreport archive from the CDS node contains the desired files
'''
with open(SOSREPORT_LOCATION_CDS, encoding="utf-8") as location:
sosreport_location = location.read()
Sos.check_files_in_archive(CONNECTION_CDS, WANTED_FILES_CDS, sosreport_location)
[docs]
def test_05_check_confidential_data():
'''
check if known confidential information is obfuscated in the archive
'''
with open(SOSREPORT_LOCATION_RHUA, encoding="utf-8") as location:
sosreport_location = location.read()
# cookies
for cookie in ["csrftoken", "sessionid"]:
Sos.is_obfuscated(CONNECTION_RHUA,
cookie,
"/root/.rhui/http-localhost:24817/cookies.txt",
sosreport_location)
# registry password
Sos.is_obfuscated(CONNECTION_RHUA,
"registry_password",
"/etc/rhui/rhui-tools.conf",
sosreport_location)
[docs]
def test_99_cleanup():
'''
delete the archives and their checksum files, local caches; remove CDS
'''
with open(SOSREPORT_LOCATION_RHUA, encoding="utf-8") as location:
sosreport_file = location.read()
Expect.ping_pong(CONNECTION_RHUA,
"rm -f " + sosreport_file + "* ; " +
"ls " + sosreport_file + "* 2>&1",
"No such file or directory")
with open(SOSREPORT_LOCATION_CDS, encoding="utf-8") as location:
sosreport_file = location.read()
Expect.ping_pong(CONNECTION_CDS,
"rm -f " + sosreport_file + "* ; " +
"ls " + sosreport_file + "* 2>&1",
"No such file or directory")
rmtree(TMPDIR)
RHUIManagerInstance.delete_all(CONNECTION_RHUA, "cds")
[docs]
def teardown():
'''
announce the end of the test run
'''
print(f"*** Finished running {basename(__file__)}. ***")