diff --git a/releasenotes/notes/add-floating-ip-config-option-e5774bf77702ce9f.yaml b/releasenotes/notes/add-floating-ip-config-option-e5774bf77702ce9f.yaml new file mode 100644 index 0000000000..8221d7882b --- /dev/null +++ b/releasenotes/notes/add-floating-ip-config-option-e5774bf77702ce9f.yaml @@ -0,0 +1,5 @@ +--- +features: + - A new config option in the network-feature-enabled section, floating_ips, + to specify whether floating ips are available in the cloud under test. By + default this is set to True. diff --git a/tempest/api/compute/floating_ips/test_floating_ips_actions.py b/tempest/api/compute/floating_ips/test_floating_ips_actions.py index 2769245d2b..faa7b5d926 100644 --- a/tempest/api/compute/floating_ips/test_floating_ips_actions.py +++ b/tempest/api/compute/floating_ips/test_floating_ips_actions.py @@ -29,6 +29,12 @@ class FloatingIPsTestJSON(base.BaseFloatingIPsTest): server_id = None floating_ip = None + @classmethod + def skip_checks(cls): + super(FloatingIPsTestJSON, cls).skip_checks() + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") + @classmethod def setup_clients(cls): super(FloatingIPsTestJSON, cls).setup_clients() diff --git a/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py b/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py index 96983b018f..483bd953af 100644 --- a/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py +++ b/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py @@ -27,6 +27,12 @@ CONF = config.CONF class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest): + @classmethod + def skip_checks(cls): + super(FloatingIPsNegativeTestJSON, cls).skip_checks() + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") + @classmethod def setup_clients(cls): super(FloatingIPsNegativeTestJSON, cls).setup_clients() diff --git a/tempest/api/compute/floating_ips/test_list_floating_ips.py b/tempest/api/compute/floating_ips/test_list_floating_ips.py index 71f5f13fad..74d2dc475d 100644 --- a/tempest/api/compute/floating_ips/test_list_floating_ips.py +++ b/tempest/api/compute/floating_ips/test_list_floating_ips.py @@ -23,6 +23,12 @@ CONF = config.CONF class FloatingIPDetailsTestJSON(base.BaseV2ComputeTest): + @classmethod + def skip_checks(cls): + super(FloatingIPDetailsTestJSON, cls).skip_checks() + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") + @classmethod def setup_clients(cls): super(FloatingIPDetailsTestJSON, cls).setup_clients() diff --git a/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py b/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py index 9d70bf7063..b5bbb8c69a 100644 --- a/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py +++ b/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py @@ -25,6 +25,12 @@ CONF = config.CONF class FloatingIPDetailsNegativeTestJSON(base.BaseV2ComputeTest): + @classmethod + def skip_checks(cls): + super(FloatingIPDetailsNegativeTestJSON, cls).skip_checks() + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") + @classmethod def setup_clients(cls): super(FloatingIPDetailsNegativeTestJSON, cls).setup_clients() diff --git a/tempest/api/compute/servers/test_server_rescue.py b/tempest/api/compute/servers/test_server_rescue.py index 83151b321d..b0ef3bcb54 100644 --- a/tempest/api/compute/servers/test_server_rescue.py +++ b/tempest/api/compute/servers/test_server_rescue.py @@ -65,6 +65,8 @@ class ServerRescueTestJSON(base.BaseV2ComputeTest): @decorators.idempotent_id('4842e0cf-e87d-4d9d-b61f-f4791da3cacc') @testtools.skipUnless(CONF.network.public_network_id, 'The public_network_id option must be specified.') + @testtools.skipUnless(CONF.network_feature_enabled.floating_ips, + "Floating ips are not available") def test_rescued_vm_associate_dissociate_floating_ip(self): # Association of floating IP to a rescued vm floating_ip_body = self.floating_ips_client.create_floating_ip( diff --git a/tempest/api/network/admin/test_external_network_extension.py b/tempest/api/network/admin/test_external_network_extension.py index c83dd7fd6e..4d41e33545 100644 --- a/tempest/api/network/admin/test_external_network_extension.py +++ b/tempest/api/network/admin/test_external_network_extension.py @@ -10,11 +10,16 @@ # License for the specific language governing permissions and limitations # under the License. +import testtools + from tempest.api.network import base +from tempest import config from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import test_utils from tempest.lib import decorators +CONF = config.CONF + class ExternalNetworksTestJSON(base.BaseAdminNetworkTest): @@ -91,6 +96,8 @@ class ExternalNetworksTestJSON(base.BaseAdminNetworkTest): self.assertFalse(show_net['router:external']) @decorators.idempotent_id('82068503-2cf2-4ed4-b3be-ecb89432e4bb') + @testtools.skipUnless(CONF.network_feature_enabled.floating_ips, + 'Floating ips are not availabled') def test_delete_external_networks_with_floating_ip(self): # Verifies external network can be deleted while still holding # (unassociated) floating IPs diff --git a/tempest/api/network/admin/test_floating_ips_admin_actions.py b/tempest/api/network/admin/test_floating_ips_admin_actions.py index 11f520a3c3..7ee819ea7d 100644 --- a/tempest/api/network/admin/test_floating_ips_admin_actions.py +++ b/tempest/api/network/admin/test_floating_ips_admin_actions.py @@ -34,6 +34,8 @@ class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest): if not CONF.network.public_network_id: msg = "The public_network_id option must be specified." raise cls.skipException(msg) + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") @classmethod def setup_clients(cls): diff --git a/tempest/api/network/test_floating_ips.py b/tempest/api/network/test_floating_ips.py index f0f92acfa6..c799b15a3c 100644 --- a/tempest/api/network/test_floating_ips.py +++ b/tempest/api/network/test_floating_ips.py @@ -49,6 +49,8 @@ class FloatingIPTestJSON(base.BaseNetworkTest): if not CONF.network.public_network_id: msg = "The public_network_id option must be specified." raise cls.skipException(msg) + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") @classmethod def resource_setup(cls): diff --git a/tempest/api/network/test_floating_ips_negative.py b/tempest/api/network/test_floating_ips_negative.py index f5830ab4cc..5ca17fec06 100644 --- a/tempest/api/network/test_floating_ips_negative.py +++ b/tempest/api/network/test_floating_ips_negative.py @@ -40,6 +40,8 @@ class FloatingIPNegativeTestJSON(base.BaseNetworkTest): if not CONF.network.public_network_id: msg = "The public_network_id option must be specified." raise cls.skipException(msg) + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") @classmethod def resource_setup(cls): diff --git a/tempest/config.py b/tempest/config.py index a2e0877d70..989d53aa1f 100644 --- a/tempest/config.py +++ b/tempest/config.py @@ -647,6 +647,9 @@ NetworkFeaturesGroup = [ cfg.BoolOpt('port_security', default=False, help="Does the test environment support port security?"), + cfg.BoolOpt('floating_ips', + default=True, + help='Does the test environment support floating_ips') ] validation_group = cfg.OptGroup(name='validation', diff --git a/tempest/scenario/test_minimum_basic.py b/tempest/scenario/test_minimum_basic.py index 5fee801a30..eae1056534 100644 --- a/tempest/scenario/test_minimum_basic.py +++ b/tempest/scenario/test_minimum_basic.py @@ -103,6 +103,8 @@ class TestMinimumBasicScenario(manager.ScenarioTest): @decorators.idempotent_id('bdbb5441-9204-419d-a225-b4fdbfb1a1a8') @testtools.skipUnless(CONF.network.public_network_id, 'The public_network_id option must be specified.') + @testtools.skipUnless(CONF.network_feature_enabled.floating_ips, + 'Floating ips are not available') @test.services('compute', 'volume', 'image', 'network') def test_minimum_basic_scenario(self): image = self.glance_image_create() diff --git a/tempest/scenario/test_network_advanced_server_ops.py b/tempest/scenario/test_network_advanced_server_ops.py index c2fc1a77ae..ec6d3621b2 100644 --- a/tempest/scenario/test_network_advanced_server_ops.py +++ b/tempest/scenario/test_network_advanced_server_ops.py @@ -48,6 +48,8 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest): msg = ('Either project_networks_reachable must be "true", or ' 'public_network_id must be defined.') raise cls.skipException(msg) + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") @classmethod def setup_credentials(cls): diff --git a/tempest/scenario/test_network_basic_ops.py b/tempest/scenario/test_network_basic_ops.py index 756ca4d42c..472d7b7315 100644 --- a/tempest/scenario/test_network_basic_ops.py +++ b/tempest/scenario/test_network_basic_ops.py @@ -90,6 +90,8 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest): if not test.is_extension_enabled(ext, 'network'): msg = "%s extension not enabled." % ext raise cls.skipException(msg) + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") @classmethod def setup_credentials(cls): diff --git a/tempest/scenario/test_network_v6.py b/tempest/scenario/test_network_v6.py index daf4d13c3e..731aae8d5e 100644 --- a/tempest/scenario/test_network_v6.py +++ b/tempest/scenario/test_network_v6.py @@ -51,6 +51,8 @@ class TestGettingAddress(manager.NetworkScenarioTest): if CONF.network.shared_physical_network: msg = 'Deployment uses a shared physical network' raise cls.skipException(msg) + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") @classmethod def setup_credentials(cls): diff --git a/tempest/scenario/test_security_groups_basic_ops.py b/tempest/scenario/test_security_groups_basic_ops.py index 2116fe8465..d82d7b5735 100644 --- a/tempest/scenario/test_security_groups_basic_ops.py +++ b/tempest/scenario/test_security_groups_basic_ops.py @@ -148,6 +148,8 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest): msg = ('Deployment uses a shared physical network, security ' 'groups not supported') raise cls.skipException(msg) + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") @classmethod def setup_credentials(cls): diff --git a/tempest/scenario/test_server_basic_ops.py b/tempest/scenario/test_server_basic_ops.py index 2be9e067c4..77563b3709 100644 --- a/tempest/scenario/test_server_basic_ops.py +++ b/tempest/scenario/test_server_basic_ops.py @@ -43,6 +43,12 @@ class TestServerBasicOps(manager.ScenarioTest): * Terminate the instance """ + @classmethod + def skip_checks(cls): + super(TestServerBasicOps, cls).skip_checks() + if not CONF.network_feature_enabled.floating_ips: + raise cls.skipException("Floating ips are not available") + def setUp(self): super(TestServerBasicOps, self).setUp() self.run_ssh = CONF.validation.run_validation