Skip to content
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

codecoverage bug2173870 #14273

Merged
merged 16 commits into from
May 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions robottelo/utils/virtwho.py
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,33 @@ def hypervisor_json_create(hypervisors, guests):
return {"hypervisors": hypervisors_list}


def hypervisor_fake_json_create(hypervisors, guests):
"""
Create a hypervisor guest json data for fake config usages. For example:
{'hypervisors': [{'uuid': '820b5143-3885-4dba-9358-4ce8c30d934e',
'guests': [{'guestId': 'afb91b1f-8438-46f5-bc67-d7ab328ef782', 'state': 1,
'attributes': {'active': 1, 'virtWhoType': 'esx'}}]}]}
:param hypervisors: how many hypervisors will be created
:param guests: how many guests will be created
"""
hypervisors_list = [
{
'guests': [
{
"guestId": str(uuid.uuid4()),
"state": 1,
"attributes": {"active": 1, "virtWhoType": "esx"},
yanpliu marked this conversation as resolved.
Show resolved Hide resolved
}
for _ in range(guests)
],
'name': str(uuid.uuid4()),
'uuid': str(uuid.uuid4()),
}
for _ in range(hypervisors)
]
return {"hypervisors": hypervisors_list}


def create_fake_hypervisor_content(org_label, hypervisors, guests):
"""
Post the fake hypervisor content to satellite server
Expand Down Expand Up @@ -527,3 +554,49 @@ def get_configure_command_option(deploy_type, args, org=DEFAULT_ORG):
if deploy_type == 'name':
return f"hammer -u {username} -p {password} virt-who-config deploy --name {args['name']} --organization '{org}' "
return None


def vw_fake_conf_create(
owner,
rhsm_hostname,
rhsm_username,
rhsm_encrypted_password,
fake_conf_file,
json_file,
is_hypervisor=True,
):
"""Create fake config file
:param owner: Name of the Owner
:param rhsm_hostname: Name of the rhsm_hostname
:param rhsm_username: Name of the rhsm_username
:param rhsm_encrypted_password: Value of the rhsm_encrypted_password
:param fake_conf_file: Name of the fake_conf_file
:param json_file: Name of the json_file
:param is_hypervisor: Default ir True
:return:
"""
conf_name = fake_conf_file.split("/")[-1].split(".")[0]
Gauravtalreja1 marked this conversation as resolved.
Show resolved Hide resolved
file = f'{fake_conf_file}\n'
title = f'[{conf_name}]\n'
Gauravtalreja1 marked this conversation as resolved.
Show resolved Hide resolved
type = 'type=fake\n'
json = f'file={json_file}\n'
is_hypervisor = f'is_hypervisor={is_hypervisor}\n'
owner = f'owner={owner}\n'
env = 'env = Library\n'
rhsm_hostname = f'rhsm_hostname={rhsm_hostname}\n'
rhsm_username = f'rhsm_username={rhsm_username}\n'
rhsm_encrypted_password = f'rhsm_encrypted_password={rhsm_encrypted_password}\n'
rhsm_prefix = 'rhsm_prefix=/rhsm\n'
rhsm_port = 'rhsm_port=443\n'
cmd = f'cat <<EOF > {file}{title}{type}{json}{is_hypervisor}{owner}{env}{rhsm_hostname}{rhsm_username}{rhsm_encrypted_password}{rhsm_prefix}{rhsm_port}EOF'
runcmd(cmd)


def vw_run_option(option):
"""virt who run by option
:param option: -d, --debug -o, --one-shot -i INTERVAL, --interval INTERVAL -p, --print -c CONFIGS, --config CONFIGS --version
:ruturn:
"""
runcmd('systemctl stop virt-who')
runcmd('pkill -9 virt-who')
runcmd(f'virt-who -{option}')
90 changes: 90 additions & 0 deletions tests/foreman/virtwho/cli/test_esx_sca.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

"""

import json
from pathlib import Path
import re

from fauxfactory import gen_string
Expand All @@ -26,10 +28,13 @@
get_configure_command,
get_configure_file,
get_configure_option,
hypervisor_fake_json_create,
hypervisor_json_create,
restart_virtwho_service,
runcmd,
virtwho_package_locked,
vw_fake_conf_create,
vw_run_option,
)


Expand Down Expand Up @@ -593,3 +598,88 @@ def test_positive_rhsm_username_option(
elif index == 1:
restart_virtwho_service()
assert not check_message_in_rhsm_log(messages[1])

@pytest.mark.tier2
def test_positive_post_hypervisors_with_fake_different_org_simultaneous(
self, module_sca_manifest_org, form_data_cli, target_sat
):
"""create many fake conf files in two orgs with specific service account rhsm_username=virt_who_reporter_X post to satellite without task errors"

:id: ee2ec178-01e0-48b9-8c2f-5c3279eef796

:expectedresults:
hypervisor/guest json can be posted and the task is success status

:customerscenario: true

:CaseImportance: Medium

:BZ: 2173870
"""

# create json file for 3 hyperviors, each with 3 guests
json_file = Path("/tmp/fake.json")
data = hypervisor_fake_json_create(hypervisors=3, guests=3)
json_file.write_text(json.dumps(data))
yanpliu marked this conversation as resolved.
Show resolved Hide resolved
# create 10 fake files in module_sca_manifest_org
virtwho_config_cli = target_sat.cli.VirtWhoConfig.create(form_data_cli)[
'general-information'
]
command = get_configure_command(virtwho_config_cli['id'], module_sca_manifest_org.name)
deploy_configure_by_command(
command, form_data_cli['hypervisor-type'], org=module_sca_manifest_org.label
)
config_file_1 = get_configure_file(virtwho_config_cli['id'])
owner_1 = get_configure_option('owner', config_file_1)
rhsm_hostname_1 = get_configure_option('rhsm_hostname', config_file_1)
rhsm_username_1 = get_configure_option('rhsm_username', config_file_1)
rhsm_encrypted_password_1 = get_configure_option('rhsm_encrypted_password', config_file_1)
# create another org and create fake conf files in this org
ORG_DATA = {'name': f'virtwho_fake_{gen_string("alpha")}'}
org = target_sat.api.Organization(name=ORG_DATA['name']).create()
target_sat.api.Location(organization=[org]).create()
form_data_cli['organization-id'] = org.id
virtwho_config_cli = target_sat.cli.VirtWhoConfig.create(form_data_cli)[
'general-information'
]
command = get_configure_command(virtwho_config_cli['id'], org.name)
deploy_configure_by_command(
command, form_data_cli['hypervisor-type'], debug=True, org=org.label
)
config_file_2 = get_configure_file(virtwho_config_cli['id'])
owner_2 = get_configure_option('owner', config_file_2)
rhsm_hostname_2 = get_configure_option('rhsm_hostname', config_file_2)
rhsm_username_2 = get_configure_option('rhsm_username', config_file_2)
rhsm_encrypted_password_2 = get_configure_option('rhsm_encrypted_password', config_file_2)
for i in range(5):
fake_conf_file = f"/etc/virt-who.d/virt-who-config-fake{i}.conf"
vw_fake_conf_create(
owner_1,
rhsm_hostname_1,
rhsm_username_1,
rhsm_encrypted_password_1,
fake_conf_file,
json_file,
)
for i in range(5, 10):
fake_conf_file = f"/etc/virt-who.d/virt-who-config-fake{i}.conf"
vw_fake_conf_create(
owner_2,
rhsm_hostname_2,
rhsm_username_2,
rhsm_encrypted_password_2,
fake_conf_file,
json_file,
)
# run virt-who with option -d, --debug and -o, --one-shot
vw_run_option("od")
yanpliu marked this conversation as resolved.
Show resolved Hide resolved
for i in range(10):
fake_conf_file = f"/etc/virt-who.d/virt-who-config-fake{i}.conf"
conf_name = fake_conf_file.split("/")[-1].split(".")[0]
config_str = f'Using configuration "{conf_name}" ("fake" mode)'
check_message_in_rhsm_log(config_str)
check_message_in_rhsm_log(f"Host-to-guest mapping being sent to '{org}'")
task = target_sat.cli.Task.list_tasks({'search': 'label ~ Hyper'})
for item in task:
assert "Job blocked by the following existing jobs" not in item['task-errors']
assert "success" in item['result']
Loading