diff --git a/devstack/plugin.sh b/devstack/plugin.sh index b34accf..142cb22 100644 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -17,7 +17,10 @@ customize_advanced_image(){ if [ -n "$image_file" ] && [ -s "$TOP_DIR/files/$image_file" ]; then cp -f $TOP_DIR/files/$image_file /tmp image_file_custom=/tmp/$image_file - timeout 150 sudo virt-customize -a $image_file_custom --install nmap,keepalived,iperf3 --selinux-relabel + dhcp_client_conf_file=/tmp/dhcp-client.conf + echo "[main]" > $dhcp_client_conf_file + echo "dhcp=dhclient" >> $dhcp_client_conf_file + timeout 150 sudo virt-customize -a $image_file_custom --install nmap,keepalived,iperf3,tcpdump,dhcp-client --copy-in $dhcp_client_conf_file:/etc/NetworkManager/conf.d --selinux-relabel if [ "$?" == "0" ]; then source $TOP_DIR/openrc admin old_image_id=$(openstack image show $ADVANCED_IMAGE_NAME -c id -f value) diff --git a/whitebox_neutron_tempest_plugin/tests/scenario/test_extra_dhcp_opts.py b/whitebox_neutron_tempest_plugin/tests/scenario/test_extra_dhcp_opts.py index a9ca403..a9d67b8 100644 --- a/whitebox_neutron_tempest_plugin/tests/scenario/test_extra_dhcp_opts.py +++ b/whitebox_neutron_tempest_plugin/tests/scenario/test_extra_dhcp_opts.py @@ -224,8 +224,11 @@ class ExtraDhcpOptionsTest(base.BaseTempestTestCase): self._create_port_and_check_dhcp_opts(dhcp4_enabled=False) vm_ssh_client = self._create_server_and_fip() # ipv4.domain is not expected + dhclient_and_resolvconf_cmd = ( + "sudo timeout 30 dhclient || true; " + "if [ -f /etc/resolv.conf ]; then cat /etc/resolv.conf; fi") vm_resolv_conf = vm_ssh_client.exec_command( - "sudo dhclient && cat /etc/resolv.conf") + dhclient_and_resolvconf_cmd) self.assertIsNone(re.search(r'^search\s+{}\s+'.format(domain_value), vm_resolv_conf, re.MULTILINE)) @@ -240,7 +243,7 @@ class ExtraDhcpOptionsTest(base.BaseTempestTestCase): neutron_constants.SERVER_STATUS_ACTIVE) # ipv4.domain is expected vm_resolv_conf = vm_ssh_client.exec_command( - "sudo dhclient && cat /etc/resolv.conf") + dhclient_and_resolvconf_cmd) # (rsafrono) this regex will work reliably even in case dhcp_domain in # nova.conf is defined, i.e. not an empty value. Helps to stabilize # the test on podified environments. diff --git a/whitebox_neutron_tempest_plugin/tests/scenario/test_metadata_rate_limiting.py b/whitebox_neutron_tempest_plugin/tests/scenario/test_metadata_rate_limiting.py index b7de79b..03767ca 100644 --- a/whitebox_neutron_tempest_plugin/tests/scenario/test_metadata_rate_limiting.py +++ b/whitebox_neutron_tempest_plugin/tests/scenario/test_metadata_rate_limiting.py @@ -161,7 +161,7 @@ class TestMetadataRateLimiting(wb_base.BaseTempestWhiteboxTestCase): responses = [] num_of_tries = 10 - cmd = f"curl http://{constants.METADATA_SERVICE_IP}" + cmd = "curl http://{}".format(constants.METADATA_SERVICE_IP) for i in range(num_of_tries): try: diff --git a/whitebox_neutron_tempest_plugin/tests/scenario/test_qos.py b/whitebox_neutron_tempest_plugin/tests/scenario/test_qos.py index 40a95a8..9c487df 100644 --- a/whitebox_neutron_tempest_plugin/tests/scenario/test_qos.py +++ b/whitebox_neutron_tempest_plugin/tests/scenario/test_qos.py @@ -235,12 +235,19 @@ class QosBaseTest(test_qos.QoSTestMixin, base.TrafficFlowTest): # several tests in parallel increase this application time # bw limit properly (buffer is empty when traffic starts being sent) if not self.has_ovn_support: - ignored_intervals = 3 + intervals_start = 3 elif self.sriov_test: - ignored_intervals = 2 + intervals_start = 2 else: - ignored_intervals = 1 - intervals = perf_measures['intervals'][ignored_intervals:] + intervals_start = 1 + + # For rocky images, final interval is ignored + # TODO(eolivare): provide link to iperf/rocky bug + intervals_end = (len(perf_measures['intervals']) + if self.username != "rocky" + else len(perf_measures['intervals']) - 1) + + intervals = perf_measures['intervals'][intervals_start:intervals_end] bits_received = sum([interval['sum']['bytes'] * 8 for interval in intervals]) @@ -429,17 +436,26 @@ class QosBaseTest(test_qos.QoSTestMixin, base.TrafficFlowTest): self.qos_bw_limit_rule_client.update_limit_bandwidth_rule( qos_policy_id=fip_qos_pol_id, rule_id=fip_port_rule_id, **rule_update_data) + + # For rocky images, running iperf tests with low BW limits using + # TCP does not work well, wo UDP is used instead + # TODO(eolivare): provide link to iperf/rocky bug + protocol = (constants.PROTO_NAME_TCP + if self.username != "rocky" + else constants.PROTO_NAME_UDP) # fip bw limit is lower than port bw limit, so fip_max_kbps # will be the measured bw self._validate_bw_limit(client, server, egress, - bw_limit=fip_max_kbps * 1000) + bw_limit=fip_max_kbps * 1000, + protocol=protocol) # delete bw limit rule associated to fip qos policy # port bw limit applies again self.qos_bw_limit_rule_client.delete_limit_bandwidth_rule( fip_qos_pol_id, fip_port_rule_id) self._validate_bw_limit(client, server, egress, - bw_limit=max_kbps * 1000) + bw_limit=max_kbps * 1000, + protocol=protocol) # Delete bw limit rule from the port QoS policy and validate that # bw is not limited anymore diff --git a/zuul.d/master_jobs.yaml b/zuul.d/master_jobs.yaml index b4cb695..bca430b 100644 --- a/zuul.d/master_jobs.yaml +++ b/zuul.d/master_jobs.yaml @@ -21,6 +21,10 @@ tempest_test_timeout: 2400 tempest_test_regex: "\ (^whitebox_neutron_tempest_plugin.tests.scenario)" + # NOTE(eolivare): test_extra_dhcp_opts_ipv4_ipv6_stateless is skipped + # because of some issue with rocky9.5 images - the VMs don't receive any + # DHCP6 options when dhcpv6-stateless is used, but this works well with + # other images tempest_exclude_regex: "\ (^whitebox_neutron_tempest_plugin.tests.scenario.test_metadata_rate_limiting)|\ (^whitebox_neutron_tempest_plugin.tests.scenario.test_router_flavors)|\ @@ -36,12 +40,13 @@ (^whitebox_neutron_tempest_plugin.tests.scenario.test_ovn_dbs.OvnDbsMonitoringTest.*)|\ (^whitebox_neutron_tempest_plugin.*ovn_controller_restart)|\ (^whitebox_neutron_tempest_plugin.tests.scenario.test_ovn_fdb.*)|\ - (^whitebox_neutron_tempest_plugin.tests.scenario.test_api_server.*)" + (^whitebox_neutron_tempest_plugin.tests.scenario.test_api_server.*)|\ + (test_extra_dhcp_opts_ipv4_ipv6_stateless)" devstack_localrc: USE_PYTHON3: true NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_tempest) | join(',') }}" PHYSICAL_NETWORK: public - IMAGE_URLS: https://dl.rockylinux.org/vault/rocky/9.3/images/x86_64/Rocky-9-GenericCloud.latest.x86_64.qcow2 + IMAGE_URLS: https://dl.rockylinux.org/vault/rocky/9.5/images/x86_64/Rocky-9-GenericCloud.latest.x86_64.qcow2 CIRROS_VERSION: 0.6.2 DEFAULT_IMAGE_NAME: cirros-0.6.2-x86_64-uec DEFAULT_IMAGE_FILE_NAME: cirros-0.6.2-x86_64-uec.tar.gz