Fix availability zone API tests

Currently, if you run the availability zone API tests when not using
the no-op drivers, the API tests will fail as they had hard-coded
availability zone names that do not exist.
Since creating availability zones requires reconfiguration of the nova
host deployments, it is not practical to create nova availability zones
for these tests.

This patch adds tempest configuration settings for the required
availability zones, and if not configured will skip the tests that
require the availability zones be present.

Change-Id: I53d5d33ae9a181b79e1d971d56452eeee5dd7759
This commit is contained in:
Michael Johnson 2020-06-21 12:15:27 -07:00
parent 5506c00b8d
commit a1862ff5cc
5 changed files with 59 additions and 9 deletions

View File

@ -195,6 +195,12 @@ OctaviaGroup = [
cfg.StrOpt('availability_zone',
default=None,
help='Availability zone to use for creating servers.'),
cfg.StrOpt('availability_zone2',
default=None,
help='A second availability zone to use for creating servers.'),
cfg.StrOpt('availability_zone3',
default=None,
help='A third availability zone to use for creating servers.'),
cfg.BoolOpt('test_reuse_connection', default=True,
help='Reuse TCP connections while testing LB with '
'HTTP members (keep-alive).'),

View File

@ -31,6 +31,15 @@ CONF = config.CONF
class AvailabilityZoneAPITest(test_base.LoadBalancerBaseTest):
"""Test the availability zone object API."""
@classmethod
def skip_checks(cls):
super(AvailabilityZoneAPITest, cls).skip_checks()
if (CONF.load_balancer.availability_zone is None and
not CONF.load_balancer.test_with_noop):
raise cls.skipException(
'Availability Zone API tests require an availability zone '
'configured in the [load_balancer] availability_zone setting.')
@classmethod
def resource_setup(cls):
"""Setup resources needed by the tests."""
@ -46,7 +55,7 @@ class AvailabilityZoneAPITest(test_base.LoadBalancerBaseTest):
availability_zone_profile_name = data_utils.rand_name(
"lb_admin_availabilityzoneprofile-setup")
availability_zone_data = {
const.COMPUTE_ZONE: 'my_compute_zone',
const.COMPUTE_ZONE: CONF.load_balancer.availability_zone,
const.MANAGEMENT_NETWORK: uuidutils.generate_uuid(),
}
availability_zone_data_json = jsonutils.dumps(availability_zone_data)

View File

@ -32,6 +32,16 @@ CONF = config.CONF
class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
"""Test the availability zone profile object API."""
@classmethod
def skip_checks(cls):
super(AvailabilityZoneProfileAPITest, cls).skip_checks()
if (CONF.load_balancer.availability_zone is None and
not CONF.load_balancer.test_with_noop):
raise cls.skipException(
'Availability zone profile API tests require an availability '
'zone configured in the [load_balancer] availability_zone '
'setting in the tempest configuration file.')
@decorators.idempotent_id('e512b580-ef32-44c3-bbd2-efdc27ba2ea6')
def test_availability_zone_profile_create(self):
"""Tests availability zone profile create and basic show APIs.
@ -53,7 +63,7 @@ class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
availability_zone_profile_name = data_utils.rand_name(
"lb_admin_availabilityzoneprofile1-create")
availability_zone_data = {
const.COMPUTE_ZONE: 'my_compute_zone',
const.COMPUTE_ZONE: CONF.load_balancer.availability_zone,
const.MANAGEMENT_NETWORK: uuidutils.generate_uuid(),
}
availability_zone_data_json = jsonutils.dumps(availability_zone_data)
@ -116,12 +126,20 @@ class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
raise self.skipException(
'Availability zone profiles are only available on '
'Octavia API version 2.14 or newer.')
if ((CONF.load_balancer.availability_zone2 is None or
CONF.load_balancer.availability_zone3 is None) and
not CONF.load_balancer.test_with_noop):
raise self.skipException(
'Availability zone profile list API test requires the '
'[load_balancer] availability_zone, availability_zone2, and '
'availability_zone3 settings be defined in the tempest '
'configuration file.')
# Create availability zone profile 1
availability_zone_profile1_name = data_utils.rand_name(
"lb_admin_availabilityzoneprofile-list-1")
availability_zone_data1 = {
const.COMPUTE_ZONE: 'my_compute_zone1',
const.COMPUTE_ZONE: CONF.load_balancer.availability_zone,
const.MANAGEMENT_NETWORK: uuidutils.generate_uuid(),
}
availability_zone_data1_json = jsonutils.dumps(availability_zone_data1)
@ -144,7 +162,7 @@ class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
availability_zone_profile2_name = data_utils.rand_name(
"lb_admin_availabilityzoneprofile-list-2")
availability_zone_data2 = {
const.COMPUTE_ZONE: 'my_compute_zone2',
const.COMPUTE_ZONE: CONF.load_balancer.availability_zone2,
const.MANAGEMENT_NETWORK: uuidutils.generate_uuid(),
}
availability_zone_data2_json = jsonutils.dumps(availability_zone_data2)
@ -167,7 +185,7 @@ class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
availability_zone_profile3_name = data_utils.rand_name(
"lb_admin_availabilityzoneprofile-list-3")
availability_zone_data3 = {
const.COMPUTE_ZONE: 'my_compute_zone3',
const.COMPUTE_ZONE: CONF.load_balancer.availability_zone3,
const.MANAGEMENT_NETWORK: uuidutils.generate_uuid(),
}
availability_zone_data3_json = jsonutils.dumps(availability_zone_data3)
@ -329,7 +347,7 @@ class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
availability_zone_profile_name = data_utils.rand_name(
"lb_admin_availabilityzoneprofile1-show")
availability_zone_data = {
const.COMPUTE_ZONE: 'my_compute_zone',
const.COMPUTE_ZONE: CONF.load_balancer.availability_zone,
const.MANAGEMENT_NETWORK: uuidutils.generate_uuid(),
}
availability_zone_data_json = jsonutils.dumps(availability_zone_data)
@ -390,11 +408,17 @@ class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
raise self.skipException(
'Availability zone profiles are only available on '
'Octavia API version 2.14 or newer.')
if (CONF.load_balancer.availability_zone2 is None and
not CONF.load_balancer.test_with_noop):
raise self.skipException(
'Availability zone profile update API tests requires '
'[load_balancer] availability_zone2 to be defined in the '
'tempest configuration file.')
availability_zone_profile_name = data_utils.rand_name(
"lb_admin_availabilityzoneprofile1-update")
availability_zone_data = {
const.COMPUTE_ZONE: 'my_compute_zone1',
const.COMPUTE_ZONE: CONF.load_balancer.availability_zone,
const.MANAGEMENT_NETWORK: uuidutils.generate_uuid(),
}
availability_zone_data_json = jsonutils.dumps(availability_zone_data)
@ -427,7 +451,7 @@ class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
availability_zone_profile_name2 = data_utils.rand_name(
"lb_admin_availabilityzoneprofile1-update2")
availability_zone_data2 = {
const.COMPUTE_ZONE: 'my_compute_zone2',
const.COMPUTE_ZONE: CONF.load_balancer.availability_zone2,
const.MANAGEMENT_NETWORK: uuidutils.generate_uuid(),
}
availability_zone_data2_json = jsonutils.dumps(availability_zone_data2)
@ -495,7 +519,7 @@ class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
availability_zone_profile_name = data_utils.rand_name(
"lb_admin_availabilityzoneprofile1-delete")
availability_zone_data = {
const.COMPUTE_ZONE: 'my_compute_zone',
const.COMPUTE_ZONE: CONF.load_balancer.availability_zone,
const.MANAGEMENT_NETWORK: uuidutils.generate_uuid(),
}
availability_zone_data_json = jsonutils.dumps(availability_zone_data)

View File

@ -0,0 +1,6 @@
---
fixes:
- |
Fixed availability zone API tests to skip if the required availability
zones are not defined in the tempest configuration file and the test run
is not using no-op drivers.

View File

@ -365,6 +365,11 @@
"$TEMPEST_CONFIG":
load_balancer:
test_with_noop: True
# AZ API tests with no-op need AZs configured but they do not
# need to actually exist in Nova due to the no-op driver.
availability_zone: bogus-az-1
availability_zone2: bogus-az-2
availability_zone3: bogus-az-3
post-config:
$OCTAVIA_CONF:
controller_worker: