Skip to content

Commit

Permalink
Update provisioning tests for IPv6 provisoning
Browse files Browse the repository at this point in the history
Signed-off-by: Shubham Ganar <sganar@redhat.com>
  • Loading branch information
shubhamsg199 committed Feb 7, 2025
1 parent 2e9f5ea commit 0a6f954
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 9 deletions.
33 changes: 25 additions & 8 deletions pytest_fixtures/component/provision_pxe.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,42 +172,45 @@ def module_provisioning_sat(
)

broker_data_out = Box(**broker_data_out['data_out'])
provisioning_interface = ipaddress.ip_interface(broker_data_out.provisioning_addr_ipv4)
provisioning_interface = ipaddress.ip_interface(broker_data_out.provisioning_addr_ip)
provisioning_network = provisioning_interface.network
# TODO: investigate DNS setup issue on Satellite,
# we might need to set up Sat's DNS server as the primary one on the Sat host
provisioning_upstream_dns_primary = (
broker_data_out.provisioning_upstream_dns.pop()
broker_data_out.provisioning_upstream_dns
if settings.server.is_ipv6
else broker_data_out.provisioning_upstream_dns.pop()
) # There should always be at least one upstream DNS
provisioning_upstream_dns_secondary = (
broker_data_out.provisioning_upstream_dns.pop()
if len(broker_data_out.provisioning_upstream_dns)
if len(broker_data_out.provisioning_upstream_dns) and not settings.server.is_ipv6
else None
)

domain = sat.api.Domain(
location=[module_location],
organization=[module_sca_manifest_org],
dns=module_provisioning_capsule.id,
dns=None if settings.server.is_ipv6 else module_provisioning_capsule.id,
name=provisioning_domain_name,
).create()

subnet = sat.api.Subnet(
location=[module_location],
organization=[module_sca_manifest_org],
network=str(provisioning_network.network_address),
network_type='IPv6' if settings.server.is_ipv6 else 'IPv4',
mask=str(provisioning_network.netmask),
gateway=broker_data_out.provisioning_gw_ipv4,
gateway=broker_data_out.provisioning_gw_ip,
from_=broker_data_out.provisioning_host_range_start,
to=broker_data_out.provisioning_host_range_end,
dns_primary=provisioning_upstream_dns_primary,
dns_secondary=provisioning_upstream_dns_secondary,
boot_mode='DHCP',
ipam='DHCP',
dhcp=module_provisioning_capsule.id,
ipam='None' if settings.server.is_ipv6 else 'DHCP',
dhcp=None if settings.server.is_ipv6 else module_provisioning_capsule.id,
tftp=module_provisioning_capsule.id,
template=module_provisioning_capsule.id,
dns=module_provisioning_capsule.id,
dns=None if settings.server.is_ipv6 else module_provisioning_capsule.id,
httpboot=module_provisioning_capsule.id,
discovery=module_provisioning_capsule.id,
remote_execution_proxy=[module_provisioning_capsule.id],
Expand Down Expand Up @@ -249,6 +252,20 @@ def provisioning_host(module_ssh_key_file, pxe_loader, module_provisioning_sat):
prov_host.blank = getattr(prov_host, 'blank', False)


@pytest.fixture(scope='module')
def configure_kea_dhcp6_server():
if settings.server.is_ipv6:
kea_host = Broker(
workflow='configure-kea-dhcp6',
artifacts='last',
host_class=ContentHost,
blank=True,
target_vlan_id=settings.provisioning.vlan_id,
).execute()
yield kea_host
Broker(workflow='remove-vm', source_vm=kea_host['_broker_facts']['name'][0]).execute()


@pytest.fixture
def provisioning_hostgroup(
module_provisioning_sat,
Expand Down
1 change: 1 addition & 0 deletions pytest_plugins/fixture_markers.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
'content_hosts',
'module_provisioning_rhel_content',
'capsule_provisioning_rhel_content',
'configure_kea_dhcp6_server',
'module_sync_kickstart_content',
'rex_contenthost',
'rex_contenthosts',
Expand Down
1 change: 1 addition & 0 deletions pytest_plugins/infra_dependent_markers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ def pytest_configure(config):
"""Register custom markers to avoid warnings."""
markers = [
"on_premises_provisioning: Tests that runs on on_premises Providers",
"ipv6_provisioning: Tests for IPv6 provisioning"
"libvirt_discovery: Tests depends on Libvirt Provider for discovery",
"external_auth: External Authentication tests",
"vlan_networking: Tests depends on static predefined vlan networking etc",
Expand Down
8 changes: 7 additions & 1 deletion pytest_plugins/marker_deselection.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ def pytest_addoption(parser):
"""Add options for pytest to collect tests than can run on SatLab infra"""
infra_options = [
'--include-onprem-provisioning',
'--include-ipv6-provisioning',
'--include-libvirt',
'--include-external-auth',
'--include-vlan-networking',
Expand All @@ -34,6 +35,7 @@ def pytest_collection_modifyitems(items, config):
Collects and modifies tests collection based on pytest option to deselect tests for new infra
"""
include_onprem_provision = config.getoption('include_onprem_provisioning', False)
include_ipv6_provisioning = config.getoption('include_ipv6_provisioning', False)
include_libvirt = config.getoption('include_libvirt', False)
include_eauth = config.getoption('include_external_auth', False)
include_vlan = config.getoption('include_vlan_networking', False)
Expand All @@ -59,6 +61,10 @@ def pytest_collection_modifyitems(items, config):
if 'on_premises_provisioning' in item_marks:
selected.append(item) if include_onprem_provision else deselected.append(item)
continue
# Include / Exclude IPv6 Provisioning Tests
if 'ipv6_provisioning' in item_marks:
selected.append(item) if include_ipv6_provisioning else deselected.append(item)
continue
# Include / Exclude External Libvirt based Tests
if 'libvirt_discovery' in item_marks:
selected.append(item) if include_libvirt else deselected.append(item)
Expand All @@ -67,7 +73,7 @@ def pytest_collection_modifyitems(items, config):
if 'external_auth' in item_marks:
selected.append(item) if include_eauth else deselected.append(item)
continue
# Include / Exclude VLAN networking based based Tests
# Include / Exclude VLAN networking based Tests
if 'vlan_networking' in item_marks:
selected.append(item) if include_vlan else deselected.append(item)
continue
Expand Down
18 changes: 18 additions & 0 deletions tests/foreman/api/test_provisioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,13 @@ def assert_host_logs(channel, pattern):
@pytest.mark.e2e
@pytest.mark.upgrade
@pytest.mark.parametrize('pxe_loader', ['bios', 'uefi'], indirect=True)
@pytest.mark.ipv6_provisioning
@pytest.mark.on_premises_provisioning
@pytest.mark.rhel_ver_match(r'^(?!.*fips).*$')
def test_rhel_pxe_provisioning(
request,
module_provisioning_sat,
configure_kea_dhcp6_server,
module_sca_manifest_org,
module_location,
provisioning_host,
Expand Down Expand Up @@ -98,8 +100,16 @@ def test_rhel_pxe_provisioning(
:parametrized: yes
"""

if pxe_loader.vm_firmware == 'bios':
pytest.skip('Test cannot be run on BIOS as its not supported')
host_mac_addr = provisioning_host._broker_facts['provisioning_nic_mac_addr']
sat = module_provisioning_sat.sat
# Configure the grubx64.efi image to setup the interface and use TFTP to load the configuration
sat.execute('net_bootp6\nset root=tftp\nset prefix=(tftp)/grub2 > pre.cfg')
sat.execute(
'grub2-mkimage -c pre.cfg -o /var/lib/tftpboot/grub2/grubx64.efi -p /grub2/ -O x86_64-efi efinet efi_netfs efienv efifwsetup efi_gop tftp net normal chain configfile loadenv procfs romfs'
)
host = sat.api.Host(
hostgroup=provisioning_hostgroup,
organization=module_sca_manifest_org,
Expand Down Expand Up @@ -848,3 +858,11 @@ def test_rhel_provisioning_using_realm():
:CaseAutomation: NotAutomated
"""


# @pytest.mark.ipv6_provisioning
# @pytest.mark.rhel_ver_match('9')
# @pytest.mark.parametrize('pxe_loader', ['uefi'], indirect=True)
# def test_123(configure_kea_dhcp6_server,pxe_loader):
# print("test")
# print("end test")

0 comments on commit 0a6f954

Please sign in to comment.