Adding description for testcases - network part1
When Tempest is used in customer site, often we are required to provide a testcase list including testcase names and descriptions. Now no this kind of doc is available, so we can add descriptions with the format of doc string for every testcase, so later we can generata such a testcase description list. There are hundreds of testcases missing descriptions, so we can add them gradually, and limit the modified files in one patch for the convenience of reviewing. Change-Id: Id3e49c09116c08b6a017b6bb9d016bb31cad9fcd partially-implements: blueprint testcase-description
This commit is contained in:
parent
414f2116a0
commit
4810d887ff
@ -49,7 +49,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('86a1cb14-da37-4a70-b056-903fd56dfe29')
|
@decorators.idempotent_id('86a1cb14-da37-4a70-b056-903fd56dfe29')
|
||||||
def test_aggregate_create_as_user(self):
|
def test_aggregate_create_as_user(self):
|
||||||
# Regular user is not allowed to create an aggregate.
|
"""Regular user is not allowed to create an aggregate"""
|
||||||
aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
|
aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
|
||||||
self.assertRaises(lib_exc.Forbidden,
|
self.assertRaises(lib_exc.Forbidden,
|
||||||
self.aggregates_client.create_aggregate,
|
self.aggregates_client.create_aggregate,
|
||||||
@ -58,7 +58,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('3b8a1929-3793-4e92-bcb4-dfa572ee6c1d')
|
@decorators.idempotent_id('3b8a1929-3793-4e92-bcb4-dfa572ee6c1d')
|
||||||
def test_aggregate_create_aggregate_name_length_less_than_1(self):
|
def test_aggregate_create_aggregate_name_length_less_than_1(self):
|
||||||
# the length of aggregate name should >= 1 and <=255
|
"""The length of aggregate name should >=1"""
|
||||||
self.assertRaises(lib_exc.BadRequest,
|
self.assertRaises(lib_exc.BadRequest,
|
||||||
self.client.create_aggregate,
|
self.client.create_aggregate,
|
||||||
name='')
|
name='')
|
||||||
@ -66,7 +66,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('4c194563-543b-4e70-a719-557bbe947fac')
|
@decorators.idempotent_id('4c194563-543b-4e70-a719-557bbe947fac')
|
||||||
def test_aggregate_create_aggregate_name_length_exceeds_255(self):
|
def test_aggregate_create_aggregate_name_length_exceeds_255(self):
|
||||||
# the length of aggregate name should >= 1 and <=255
|
"""The length of aggregate name should <=255"""
|
||||||
aggregate_name = 'a' * 256
|
aggregate_name = 'a' * 256
|
||||||
self.assertRaises(lib_exc.BadRequest,
|
self.assertRaises(lib_exc.BadRequest,
|
||||||
self.client.create_aggregate,
|
self.client.create_aggregate,
|
||||||
@ -75,7 +75,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('9c23a291-b0b1-487b-b464-132e061151b3')
|
@decorators.idempotent_id('9c23a291-b0b1-487b-b464-132e061151b3')
|
||||||
def test_aggregate_create_with_existent_aggregate_name(self):
|
def test_aggregate_create_with_existent_aggregate_name(self):
|
||||||
# creating an aggregate with existent aggregate name is forbidden
|
"""Creating an aggregate with existent aggregate name is forbidden"""
|
||||||
aggregate = self._create_test_aggregate()
|
aggregate = self._create_test_aggregate()
|
||||||
self.assertRaises(lib_exc.Conflict,
|
self.assertRaises(lib_exc.Conflict,
|
||||||
self.client.create_aggregate,
|
self.client.create_aggregate,
|
||||||
@ -84,7 +84,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('cd6de795-c15d-45f1-8d9e-813c6bb72a3d')
|
@decorators.idempotent_id('cd6de795-c15d-45f1-8d9e-813c6bb72a3d')
|
||||||
def test_aggregate_delete_as_user(self):
|
def test_aggregate_delete_as_user(self):
|
||||||
# Regular user is not allowed to delete an aggregate.
|
"""Regular user is not allowed to delete an aggregate"""
|
||||||
aggregate = self._create_test_aggregate()
|
aggregate = self._create_test_aggregate()
|
||||||
self.assertRaises(lib_exc.Forbidden,
|
self.assertRaises(lib_exc.Forbidden,
|
||||||
self.aggregates_client.delete_aggregate,
|
self.aggregates_client.delete_aggregate,
|
||||||
@ -93,14 +93,14 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('b7d475a6-5dcd-4ff4-b70a-cd9de66a6672')
|
@decorators.idempotent_id('b7d475a6-5dcd-4ff4-b70a-cd9de66a6672')
|
||||||
def test_aggregate_list_as_user(self):
|
def test_aggregate_list_as_user(self):
|
||||||
# Regular user is not allowed to list aggregates.
|
"""Regular user is not allowed to list aggregates"""
|
||||||
self.assertRaises(lib_exc.Forbidden,
|
self.assertRaises(lib_exc.Forbidden,
|
||||||
self.aggregates_client.list_aggregates)
|
self.aggregates_client.list_aggregates)
|
||||||
|
|
||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('557cad12-34c9-4ff4-95f0-22f0dfbaf7dc')
|
@decorators.idempotent_id('557cad12-34c9-4ff4-95f0-22f0dfbaf7dc')
|
||||||
def test_aggregate_get_details_as_user(self):
|
def test_aggregate_get_details_as_user(self):
|
||||||
# Regular user is not allowed to get aggregate details.
|
"""Regular user is not allowed to get aggregate details"""
|
||||||
aggregate = self._create_test_aggregate()
|
aggregate = self._create_test_aggregate()
|
||||||
self.assertRaises(lib_exc.Forbidden,
|
self.assertRaises(lib_exc.Forbidden,
|
||||||
self.aggregates_client.show_aggregate,
|
self.aggregates_client.show_aggregate,
|
||||||
@ -109,21 +109,21 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('c74f4bf1-4708-4ff2-95a0-f49eaca951bd')
|
@decorators.idempotent_id('c74f4bf1-4708-4ff2-95a0-f49eaca951bd')
|
||||||
def test_aggregate_delete_with_invalid_id(self):
|
def test_aggregate_delete_with_invalid_id(self):
|
||||||
# Delete an aggregate with invalid id should raise exceptions.
|
"""Delete an aggregate with invalid id should raise exceptions"""
|
||||||
self.assertRaises(lib_exc.NotFound,
|
self.assertRaises(lib_exc.NotFound,
|
||||||
self.client.delete_aggregate, -1)
|
self.client.delete_aggregate, -1)
|
||||||
|
|
||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('3c916244-2c46-49a4-9b55-b20bb0ae512c')
|
@decorators.idempotent_id('3c916244-2c46-49a4-9b55-b20bb0ae512c')
|
||||||
def test_aggregate_get_details_with_invalid_id(self):
|
def test_aggregate_get_details_with_invalid_id(self):
|
||||||
# Get aggregate details with invalid id should raise exceptions.
|
"""Get aggregate details with invalid id should raise exceptions"""
|
||||||
self.assertRaises(lib_exc.NotFound,
|
self.assertRaises(lib_exc.NotFound,
|
||||||
self.client.show_aggregate, -1)
|
self.client.show_aggregate, -1)
|
||||||
|
|
||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('0ef07828-12b4-45ba-87cc-41425faf5711')
|
@decorators.idempotent_id('0ef07828-12b4-45ba-87cc-41425faf5711')
|
||||||
def test_aggregate_add_non_exist_host(self):
|
def test_aggregate_add_non_exist_host(self):
|
||||||
# Adding a non-exist host to an aggregate should raise exceptions.
|
"""Adding a non-exist host to an aggregate should fail"""
|
||||||
while True:
|
while True:
|
||||||
non_exist_host = data_utils.rand_name('nonexist_host')
|
non_exist_host = data_utils.rand_name('nonexist_host')
|
||||||
if non_exist_host not in self.hosts:
|
if non_exist_host not in self.hosts:
|
||||||
@ -135,7 +135,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('7324c334-bd13-4c93-8521-5877322c3d51')
|
@decorators.idempotent_id('7324c334-bd13-4c93-8521-5877322c3d51')
|
||||||
def test_aggregate_add_host_as_user(self):
|
def test_aggregate_add_host_as_user(self):
|
||||||
# Regular user is not allowed to add a host to an aggregate.
|
"""Regular user is not allowed to add a host to an aggregate"""
|
||||||
aggregate = self._create_test_aggregate()
|
aggregate = self._create_test_aggregate()
|
||||||
self.assertRaises(lib_exc.Forbidden,
|
self.assertRaises(lib_exc.Forbidden,
|
||||||
self.aggregates_client.add_host,
|
self.aggregates_client.add_host,
|
||||||
@ -144,7 +144,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('19dd44e1-c435-4ee1-a402-88c4f90b5950')
|
@decorators.idempotent_id('19dd44e1-c435-4ee1-a402-88c4f90b5950')
|
||||||
def test_aggregate_add_existent_host(self):
|
def test_aggregate_add_existent_host(self):
|
||||||
# Adding already existing host to aggregate should fail.
|
"""Adding already existing host to aggregate should fail"""
|
||||||
self.useFixture(fixtures.LockFixture('availability_zone'))
|
self.useFixture(fixtures.LockFixture('availability_zone'))
|
||||||
aggregate = self._create_test_aggregate()
|
aggregate = self._create_test_aggregate()
|
||||||
|
|
||||||
@ -158,7 +158,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('7a53af20-137a-4e44-a4ae-e19260e626d9')
|
@decorators.idempotent_id('7a53af20-137a-4e44-a4ae-e19260e626d9')
|
||||||
def test_aggregate_remove_host_as_user(self):
|
def test_aggregate_remove_host_as_user(self):
|
||||||
# Regular user is not allowed to remove a host from an aggregate.
|
"""Regular user is not allowed to remove a host from an aggregate"""
|
||||||
self.useFixture(fixtures.LockFixture('availability_zone'))
|
self.useFixture(fixtures.LockFixture('availability_zone'))
|
||||||
aggregate = self._create_test_aggregate()
|
aggregate = self._create_test_aggregate()
|
||||||
|
|
||||||
@ -173,7 +173,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('95d6a6fa-8da9-4426-84d0-eec0329f2e4d')
|
@decorators.idempotent_id('95d6a6fa-8da9-4426-84d0-eec0329f2e4d')
|
||||||
def test_aggregate_remove_nonexistent_host(self):
|
def test_aggregate_remove_nonexistent_host(self):
|
||||||
# Removing not existing host from aggregate should fail.
|
"""Removing not existing host from aggregate should fail"""
|
||||||
aggregate = self._create_test_aggregate()
|
aggregate = self._create_test_aggregate()
|
||||||
|
|
||||||
self.assertRaises(lib_exc.NotFound, self.client.remove_host,
|
self.assertRaises(lib_exc.NotFound, self.client.remove_host,
|
||||||
|
@ -27,6 +27,8 @@ CONF = config.CONF
|
|||||||
|
|
||||||
|
|
||||||
class ServersWithSpecificFlavorTestJSON(base.BaseV2ComputeAdminTest):
|
class ServersWithSpecificFlavorTestJSON(base.BaseV2ComputeAdminTest):
|
||||||
|
"""Test creating servers with specific flavor"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_credentials(cls):
|
def setup_credentials(cls):
|
||||||
cls.prepare_instance_network()
|
cls.prepare_instance_network()
|
||||||
@ -41,7 +43,7 @@ class ServersWithSpecificFlavorTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
@testtools.skipUnless(CONF.validation.run_validation,
|
@testtools.skipUnless(CONF.validation.run_validation,
|
||||||
'Instance validation tests are disabled.')
|
'Instance validation tests are disabled.')
|
||||||
def test_verify_created_server_ephemeral_disk(self):
|
def test_verify_created_server_ephemeral_disk(self):
|
||||||
# Verify that the ephemeral disk is created when creating server
|
"""Verify that the ephemeral disk is created when creating server"""
|
||||||
flavor_base = self.flavors_client.show_flavor(
|
flavor_base = self.flavors_client.show_flavor(
|
||||||
self.flavor_ref)['flavor']
|
self.flavor_ref)['flavor']
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@ from tempest.lib import decorators
|
|||||||
|
|
||||||
|
|
||||||
class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
|
class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
|
||||||
|
"""Test deletion of servers"""
|
||||||
|
|
||||||
# NOTE: Server creations of each test class should be under 10
|
# NOTE: Server creations of each test class should be under 10
|
||||||
# for preventing "Quota exceeded for instances".
|
# for preventing "Quota exceeded for instances".
|
||||||
|
|
||||||
@ -30,7 +32,7 @@ class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('99774678-e072-49d1-9d2a-49a59bc56063')
|
@decorators.idempotent_id('99774678-e072-49d1-9d2a-49a59bc56063')
|
||||||
def test_delete_server_while_in_error_state(self):
|
def test_delete_server_while_in_error_state(self):
|
||||||
# Delete a server while it's VM state is error
|
"""Delete a server while it's VM state is error"""
|
||||||
server = self.create_test_server(wait_until='ACTIVE')
|
server = self.create_test_server(wait_until='ACTIVE')
|
||||||
self.admin_client.reset_state(server['id'], state='error')
|
self.admin_client.reset_state(server['id'], state='error')
|
||||||
# Verify server's state
|
# Verify server's state
|
||||||
@ -43,7 +45,7 @@ class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('73177903-6737-4f27-a60c-379e8ae8cf48')
|
@decorators.idempotent_id('73177903-6737-4f27-a60c-379e8ae8cf48')
|
||||||
def test_admin_delete_servers_of_others(self):
|
def test_admin_delete_servers_of_others(self):
|
||||||
# Administrator can delete servers of others
|
"""Administrator can delete servers of others"""
|
||||||
server = self.create_test_server(wait_until='ACTIVE')
|
server = self.create_test_server(wait_until='ACTIVE')
|
||||||
self.admin_client.delete_server(server['id'])
|
self.admin_client.delete_server(server['id'])
|
||||||
waiters.wait_for_server_termination(self.servers_client, server['id'])
|
waiters.wait_for_server_termination(self.servers_client, server['id'])
|
||||||
|
@ -23,6 +23,8 @@ CONF = config.CONF
|
|||||||
|
|
||||||
|
|
||||||
class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest):
|
class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest):
|
||||||
|
"""Test floating ips"""
|
||||||
|
|
||||||
credentials = ['primary', 'alt', 'admin']
|
credentials = ['primary', 'alt', 'admin']
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -55,6 +57,13 @@ class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('64f2100b-5471-4ded-b46c-ddeeeb4f231b')
|
@decorators.idempotent_id('64f2100b-5471-4ded-b46c-ddeeeb4f231b')
|
||||||
def test_list_floating_ips_from_admin_and_nonadmin(self):
|
def test_list_floating_ips_from_admin_and_nonadmin(self):
|
||||||
|
"""Test listing floating ips from admin and non admin users
|
||||||
|
|
||||||
|
This test performs below operations:
|
||||||
|
1. Create couple floating ips for admin and non-admin users.
|
||||||
|
2. Verify if admin can access all floating ips including other user
|
||||||
|
and non-admin user can only access its own floating ips.
|
||||||
|
"""
|
||||||
# Create floating ip from admin user
|
# Create floating ip from admin user
|
||||||
floating_ip_admin = self.admin_floating_ips_client.create_floatingip(
|
floating_ip_admin = self.admin_floating_ips_client.create_floatingip(
|
||||||
floating_network_id=self.ext_net_id)
|
floating_network_id=self.ext_net_id)
|
||||||
@ -90,6 +99,7 @@ class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('32727cc3-abe2-4485-a16e-48f2d54c14f2')
|
@decorators.idempotent_id('32727cc3-abe2-4485-a16e-48f2d54c14f2')
|
||||||
def test_create_list_show_floating_ip_with_tenant_id_by_admin(self):
|
def test_create_list_show_floating_ip_with_tenant_id_by_admin(self):
|
||||||
|
"""Verify if admin can create/list/show floating ip with tenant id"""
|
||||||
# Creates a floating IP
|
# Creates a floating IP
|
||||||
body = self.admin_floating_ips_client.create_floatingip(
|
body = self.admin_floating_ips_client.create_floatingip(
|
||||||
floating_network_id=self.ext_net_id,
|
floating_network_id=self.ext_net_id,
|
||||||
|
@ -53,6 +53,7 @@ class QuotasNegativeTest(base.BaseAdminNetworkTest):
|
|||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('644f4e1b-1bf9-4af0-9fd8-eb56ac0f51cf')
|
@decorators.idempotent_id('644f4e1b-1bf9-4af0-9fd8-eb56ac0f51cf')
|
||||||
def test_network_quota_exceeding(self):
|
def test_network_quota_exceeding(self):
|
||||||
|
"""Test creating network when exceeding network quota will fail"""
|
||||||
# Set the network quota to two
|
# Set the network quota to two
|
||||||
self.admin_quotas_client.update_quotas(self.project['id'], network=2)
|
self.admin_quotas_client.update_quotas(self.project['id'], network=2)
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ CONF = config.CONF
|
|||||||
|
|
||||||
|
|
||||||
class PortsAdminExtendedAttrsTestJSON(base.BaseAdminNetworkTest):
|
class PortsAdminExtendedAttrsTestJSON(base.BaseAdminNetworkTest):
|
||||||
|
"""Test extended attributes of ports"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
@ -41,6 +42,7 @@ class PortsAdminExtendedAttrsTestJSON(base.BaseAdminNetworkTest):
|
|||||||
@decorators.idempotent_id('8e8569c1-9ac7-44db-8bc1-f5fb2814f29b')
|
@decorators.idempotent_id('8e8569c1-9ac7-44db-8bc1-f5fb2814f29b')
|
||||||
@utils.services('compute')
|
@utils.services('compute')
|
||||||
def test_create_port_binding_ext_attr(self):
|
def test_create_port_binding_ext_attr(self):
|
||||||
|
"""Test creating port with extended attribute"""
|
||||||
post_body = {"network_id": self.network['id'],
|
post_body = {"network_id": self.network['id'],
|
||||||
"binding:host_id": self.host_id,
|
"binding:host_id": self.host_id,
|
||||||
"name": data_utils.rand_name(self.__class__.__name__)}
|
"name": data_utils.rand_name(self.__class__.__name__)}
|
||||||
@ -56,6 +58,7 @@ class PortsAdminExtendedAttrsTestJSON(base.BaseAdminNetworkTest):
|
|||||||
@decorators.idempotent_id('6f6c412c-711f-444d-8502-0ac30fbf5dd5')
|
@decorators.idempotent_id('6f6c412c-711f-444d-8502-0ac30fbf5dd5')
|
||||||
@utils.services('compute')
|
@utils.services('compute')
|
||||||
def test_update_port_binding_ext_attr(self):
|
def test_update_port_binding_ext_attr(self):
|
||||||
|
"""Test updating port's extended attribute"""
|
||||||
post_body = {"network_id": self.network['id'],
|
post_body = {"network_id": self.network['id'],
|
||||||
"name": data_utils.rand_name(self.__class__.__name__)}
|
"name": data_utils.rand_name(self.__class__.__name__)}
|
||||||
body = self.admin_ports_client.create_port(**post_body)
|
body = self.admin_ports_client.create_port(**post_body)
|
||||||
@ -73,6 +76,7 @@ class PortsAdminExtendedAttrsTestJSON(base.BaseAdminNetworkTest):
|
|||||||
@decorators.idempotent_id('1c82a44a-6c6e-48ff-89e1-abe7eaf8f9f8')
|
@decorators.idempotent_id('1c82a44a-6c6e-48ff-89e1-abe7eaf8f9f8')
|
||||||
@utils.services('compute')
|
@utils.services('compute')
|
||||||
def test_list_ports_binding_ext_attr(self):
|
def test_list_ports_binding_ext_attr(self):
|
||||||
|
"""Test updating and listing port's extended attribute"""
|
||||||
# Create a new port
|
# Create a new port
|
||||||
post_body = {"network_id": self.network['id'],
|
post_body = {"network_id": self.network['id'],
|
||||||
"name": data_utils.rand_name(self.__class__.__name__)}
|
"name": data_utils.rand_name(self.__class__.__name__)}
|
||||||
@ -101,6 +105,7 @@ class PortsAdminExtendedAttrsTestJSON(base.BaseAdminNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('b54ac0ff-35fc-4c79-9ca3-c7dbd4ea4f13')
|
@decorators.idempotent_id('b54ac0ff-35fc-4c79-9ca3-c7dbd4ea4f13')
|
||||||
def test_show_port_binding_ext_attr(self):
|
def test_show_port_binding_ext_attr(self):
|
||||||
|
"""Test showing port's extended attribute"""
|
||||||
body = self.admin_ports_client.create_port(
|
body = self.admin_ports_client.create_port(
|
||||||
name=data_utils.rand_name(self.__class__.__name__),
|
name=data_utils.rand_name(self.__class__.__name__),
|
||||||
network_id=self.network['id'])
|
network_id=self.network['id'])
|
||||||
|
@ -89,6 +89,7 @@ class QuotasTest(base.BaseAdminNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('2390f766-836d-40ef-9aeb-e810d78207fb')
|
@decorators.idempotent_id('2390f766-836d-40ef-9aeb-e810d78207fb')
|
||||||
def test_quotas(self):
|
def test_quotas(self):
|
||||||
|
"""Test update/list/show/reset of network quotas"""
|
||||||
new_quotas = {'network': 0, 'port': 0}
|
new_quotas = {'network': 0, 'port': 0}
|
||||||
self._check_quotas(new_quotas)
|
self._check_quotas(new_quotas)
|
||||||
|
|
||||||
@ -96,6 +97,7 @@ class QuotasTest(base.BaseAdminNetworkTest):
|
|||||||
'quota_details', 'network'), 'Quota details extension not enabled.')
|
'quota_details', 'network'), 'Quota details extension not enabled.')
|
||||||
@decorators.idempotent_id('7b05ec5f-bf44-43cb-b28f-ddd72a824288')
|
@decorators.idempotent_id('7b05ec5f-bf44-43cb-b28f-ddd72a824288')
|
||||||
def test_show_quota_details(self):
|
def test_show_quota_details(self):
|
||||||
|
"""Test showing network quota details"""
|
||||||
# Show quota details for an existing project
|
# Show quota details for an existing project
|
||||||
quota_details = self.admin_quotas_client.show_quota_details(
|
quota_details = self.admin_quotas_client.show_quota_details(
|
||||||
self.admin_quotas_client.tenant_id)['quota']
|
self.admin_quotas_client.tenant_id)['quota']
|
||||||
|
@ -27,6 +27,7 @@ CONF = config.CONF
|
|||||||
|
|
||||||
|
|
||||||
class RoutersAdminNegativeTest(base.BaseAdminNetworkTest):
|
class RoutersAdminNegativeTest(base.BaseAdminNetworkTest):
|
||||||
|
"""Admin negative tests of routers"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def skip_checks(cls):
|
def skip_checks(cls):
|
||||||
@ -41,6 +42,7 @@ class RoutersAdminNegativeTest(base.BaseAdminNetworkTest):
|
|||||||
@testtools.skipUnless(CONF.network.public_network_id,
|
@testtools.skipUnless(CONF.network.public_network_id,
|
||||||
'The public_network_id option must be specified.')
|
'The public_network_id option must be specified.')
|
||||||
def test_router_set_gateway_used_ip_returns_409(self):
|
def test_router_set_gateway_used_ip_returns_409(self):
|
||||||
|
"""Test creating router with gateway set to used ip should fail"""
|
||||||
# At first create a address from public_network_id
|
# At first create a address from public_network_id
|
||||||
port = self.admin_ports_client.create_port(
|
port = self.admin_ports_client.create_port(
|
||||||
name=data_utils.rand_name(self.__class__.__name__),
|
name=data_utils.rand_name(self.__class__.__name__),
|
||||||
|
@ -32,7 +32,7 @@ class ExtensionsTestJSON(base.BaseNetworkTest):
|
|||||||
@decorators.attr(type='smoke')
|
@decorators.attr(type='smoke')
|
||||||
@decorators.idempotent_id('ef28c7e6-e646-4979-9d67-deb207bc5564')
|
@decorators.idempotent_id('ef28c7e6-e646-4979-9d67-deb207bc5564')
|
||||||
def test_list_show_extensions(self):
|
def test_list_show_extensions(self):
|
||||||
# List available extensions for the project
|
"""List available extensions and show the detail of each extension"""
|
||||||
expected_alias = ['security-group', 'l3_agent_scheduler',
|
expected_alias = ['security-group', 'l3_agent_scheduler',
|
||||||
'ext-gw-mode', 'binding', 'quotas',
|
'ext-gw-mode', 'binding', 'quotas',
|
||||||
'agent', 'dhcp_agent_scheduler', 'provider',
|
'agent', 'dhcp_agent_scheduler', 'provider',
|
||||||
|
@ -73,6 +73,7 @@ class FloatingIPTestJSON(base.BaseNetworkTest):
|
|||||||
@decorators.attr(type='smoke')
|
@decorators.attr(type='smoke')
|
||||||
@decorators.idempotent_id('62595970-ab1c-4b7f-8fcc-fddfe55e8718')
|
@decorators.idempotent_id('62595970-ab1c-4b7f-8fcc-fddfe55e8718')
|
||||||
def test_create_list_show_update_delete_floating_ip(self):
|
def test_create_list_show_update_delete_floating_ip(self):
|
||||||
|
"""Test create/list/show/update/delete floating ip"""
|
||||||
# Creates a floating IP
|
# Creates a floating IP
|
||||||
body = self.floating_ips_client.create_floatingip(
|
body = self.floating_ips_client.create_floatingip(
|
||||||
floating_network_id=self.ext_net_id,
|
floating_network_id=self.ext_net_id,
|
||||||
@ -133,6 +134,14 @@ class FloatingIPTestJSON(base.BaseNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('e1f6bffd-442f-4668-b30e-df13f2705e77')
|
@decorators.idempotent_id('e1f6bffd-442f-4668-b30e-df13f2705e77')
|
||||||
def test_floating_ip_delete_port(self):
|
def test_floating_ip_delete_port(self):
|
||||||
|
"""Test deleting floating ip's port
|
||||||
|
|
||||||
|
1. Create a floating ip
|
||||||
|
2. Create a port
|
||||||
|
3. Update the floating ip's port_id to the created port
|
||||||
|
4. Delete the port
|
||||||
|
5. Verify that the port details are cleared from the floating ip
|
||||||
|
"""
|
||||||
# Create a floating IP
|
# Create a floating IP
|
||||||
body = self.floating_ips_client.create_floatingip(
|
body = self.floating_ips_client.create_floatingip(
|
||||||
floating_network_id=self.ext_net_id)
|
floating_network_id=self.ext_net_id)
|
||||||
@ -163,6 +172,7 @@ class FloatingIPTestJSON(base.BaseNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('1bb2f731-fe5a-4b8c-8409-799ade1bed4d')
|
@decorators.idempotent_id('1bb2f731-fe5a-4b8c-8409-799ade1bed4d')
|
||||||
def test_floating_ip_update_different_router(self):
|
def test_floating_ip_update_different_router(self):
|
||||||
|
"""Test associating a floating ip to a port on different router"""
|
||||||
# Associate a floating IP to a port on a router
|
# Associate a floating IP to a port on a router
|
||||||
body = self.floating_ips_client.create_floatingip(
|
body = self.floating_ips_client.create_floatingip(
|
||||||
floating_network_id=self.ext_net_id,
|
floating_network_id=self.ext_net_id,
|
||||||
@ -211,6 +221,7 @@ class FloatingIPTestJSON(base.BaseNetworkTest):
|
|||||||
@decorators.attr(type='smoke')
|
@decorators.attr(type='smoke')
|
||||||
@decorators.idempotent_id('36de4bd0-f09c-43e3-a8e1-1decc1ffd3a5')
|
@decorators.idempotent_id('36de4bd0-f09c-43e3-a8e1-1decc1ffd3a5')
|
||||||
def test_create_floating_ip_specifying_a_fixed_ip_address(self):
|
def test_create_floating_ip_specifying_a_fixed_ip_address(self):
|
||||||
|
"""Test creating floating ip with specified fixed ip"""
|
||||||
body = self.floating_ips_client.create_floatingip(
|
body = self.floating_ips_client.create_floatingip(
|
||||||
floating_network_id=self.ext_net_id,
|
floating_network_id=self.ext_net_id,
|
||||||
port_id=self.ports[1]['id'],
|
port_id=self.ports[1]['id'],
|
||||||
@ -230,6 +241,12 @@ class FloatingIPTestJSON(base.BaseNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('45c4c683-ea97-41ef-9c51-5e9802f2f3d7')
|
@decorators.idempotent_id('45c4c683-ea97-41ef-9c51-5e9802f2f3d7')
|
||||||
def test_create_update_floatingip_with_port_multiple_ip_address(self):
|
def test_create_update_floatingip_with_port_multiple_ip_address(self):
|
||||||
|
"""Test updating floating ip's fixed_ips to another ip of same port
|
||||||
|
|
||||||
|
First we create a port with 2 fixed ips, then we create a floating ip
|
||||||
|
with one of the fixed ips, and then we update the floating ip to
|
||||||
|
another fixed ip of that port.
|
||||||
|
"""
|
||||||
# Find out ips that can be used for tests
|
# Find out ips that can be used for tests
|
||||||
list_ips = net_utils.get_unused_ip_addresses(
|
list_ips = net_utils.get_unused_ip_addresses(
|
||||||
self.ports_client,
|
self.ports_client,
|
||||||
|
@ -70,6 +70,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
@decorators.attr(type='smoke')
|
@decorators.attr(type='smoke')
|
||||||
@decorators.idempotent_id('c72c1c0c-2193-4aca-aaa4-b1442640f51c')
|
@decorators.idempotent_id('c72c1c0c-2193-4aca-aaa4-b1442640f51c')
|
||||||
def test_create_update_delete_port(self):
|
def test_create_update_delete_port(self):
|
||||||
|
"""Test creating, updating and deleting port"""
|
||||||
# Verify port creation
|
# Verify port creation
|
||||||
body = self.ports_client.create_port(
|
body = self.ports_client.create_port(
|
||||||
network_id=self.network['id'],
|
network_id=self.network['id'],
|
||||||
@ -89,6 +90,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('67f1b811-f8db-43e2-86bd-72c074d4a42c')
|
@decorators.idempotent_id('67f1b811-f8db-43e2-86bd-72c074d4a42c')
|
||||||
def test_create_bulk_port(self):
|
def test_create_bulk_port(self):
|
||||||
|
"""Test creating multiple ports in a single request"""
|
||||||
network1 = self.network
|
network1 = self.network
|
||||||
network2 = self._create_network()
|
network2 = self._create_network()
|
||||||
network_list = [network1['id'], network2['id']]
|
network_list = [network1['id'], network2['id']]
|
||||||
@ -107,6 +109,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
@decorators.attr(type='smoke')
|
@decorators.attr(type='smoke')
|
||||||
@decorators.idempotent_id('0435f278-40ae-48cb-a404-b8a087bc09b1')
|
@decorators.idempotent_id('0435f278-40ae-48cb-a404-b8a087bc09b1')
|
||||||
def test_create_port_in_allowed_allocation_pools(self):
|
def test_create_port_in_allowed_allocation_pools(self):
|
||||||
|
"""Test creating port in allowed allocation pools"""
|
||||||
network = self._create_network()
|
network = self._create_network()
|
||||||
net_id = network['id']
|
net_id = network['id']
|
||||||
address = self.cidr
|
address = self.cidr
|
||||||
@ -136,7 +139,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
@decorators.attr(type='smoke')
|
@decorators.attr(type='smoke')
|
||||||
@decorators.idempotent_id('c9a685bd-e83f-499c-939f-9f7863ca259f')
|
@decorators.idempotent_id('c9a685bd-e83f-499c-939f-9f7863ca259f')
|
||||||
def test_show_port(self):
|
def test_show_port(self):
|
||||||
# Verify the details of port
|
"""Verify the details of port"""
|
||||||
body = self.ports_client.show_port(self.port['id'])
|
body = self.ports_client.show_port(self.port['id'])
|
||||||
port = body['port']
|
port = body['port']
|
||||||
self.assertIn('id', port)
|
self.assertIn('id', port)
|
||||||
@ -152,7 +155,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('45fcdaf2-dab0-4c13-ac6c-fcddfb579dbd')
|
@decorators.idempotent_id('45fcdaf2-dab0-4c13-ac6c-fcddfb579dbd')
|
||||||
def test_show_port_fields(self):
|
def test_show_port_fields(self):
|
||||||
# Verify specific fields of a port
|
"""Verify specific fields of a port"""
|
||||||
fields = ['id', 'mac_address']
|
fields = ['id', 'mac_address']
|
||||||
body = self.ports_client.show_port(self.port['id'],
|
body = self.ports_client.show_port(self.port['id'],
|
||||||
fields=fields)
|
fields=fields)
|
||||||
@ -164,7 +167,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
@decorators.attr(type='smoke')
|
@decorators.attr(type='smoke')
|
||||||
@decorators.idempotent_id('cf95b358-3e92-4a29-a148-52445e1ac50e')
|
@decorators.idempotent_id('cf95b358-3e92-4a29-a148-52445e1ac50e')
|
||||||
def test_list_ports(self):
|
def test_list_ports(self):
|
||||||
# Verify the port exists in the list of all ports
|
"""Verify the port exists in the list of all ports"""
|
||||||
body = self.ports_client.list_ports()
|
body = self.ports_client.list_ports()
|
||||||
ports = [port['id'] for port in body['ports']
|
ports = [port['id'] for port in body['ports']
|
||||||
if port['id'] == self.port['id']]
|
if port['id'] == self.port['id']]
|
||||||
@ -172,6 +175,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('e7fe260b-1e79-4dd3-86d9-bec6a7959fc5')
|
@decorators.idempotent_id('e7fe260b-1e79-4dd3-86d9-bec6a7959fc5')
|
||||||
def test_port_list_filter_by_ip(self):
|
def test_port_list_filter_by_ip(self):
|
||||||
|
"""Test listing ports filtered by ip"""
|
||||||
# Create network and subnet
|
# Create network and subnet
|
||||||
network = self._create_network()
|
network = self._create_network()
|
||||||
self._create_subnet(network)
|
self._create_subnet(network)
|
||||||
@ -211,6 +215,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
utils.is_extension_enabled('ip-substring-filtering', 'network'),
|
utils.is_extension_enabled('ip-substring-filtering', 'network'),
|
||||||
'ip-substring-filtering extension not enabled.')
|
'ip-substring-filtering extension not enabled.')
|
||||||
def test_port_list_filter_by_ip_substr(self):
|
def test_port_list_filter_by_ip_substr(self):
|
||||||
|
"""Test listing ports filtered by part of ip address string"""
|
||||||
# Create network and subnet
|
# Create network and subnet
|
||||||
network = self._create_network()
|
network = self._create_network()
|
||||||
subnet = self._create_subnet(network)
|
subnet = self._create_subnet(network)
|
||||||
@ -289,6 +294,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('5ad01ed0-0e6e-4c5d-8194-232801b15c72')
|
@decorators.idempotent_id('5ad01ed0-0e6e-4c5d-8194-232801b15c72')
|
||||||
def test_port_list_filter_by_router_id(self):
|
def test_port_list_filter_by_router_id(self):
|
||||||
|
"""Test listing ports filtered by router id"""
|
||||||
# Create a router
|
# Create a router
|
||||||
network = self._create_network()
|
network = self._create_network()
|
||||||
self._create_subnet(network)
|
self._create_subnet(network)
|
||||||
@ -313,7 +319,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('ff7f117f-f034-4e0e-abff-ccef05c454b4')
|
@decorators.idempotent_id('ff7f117f-f034-4e0e-abff-ccef05c454b4')
|
||||||
def test_list_ports_fields(self):
|
def test_list_ports_fields(self):
|
||||||
# Verify specific fields of ports
|
"""Verify specific fields of ports"""
|
||||||
fields = ['id', 'mac_address']
|
fields = ['id', 'mac_address']
|
||||||
body = self.ports_client.list_ports(fields=fields)
|
body = self.ports_client.list_ports(fields=fields)
|
||||||
ports = body['ports']
|
ports = body['ports']
|
||||||
@ -324,6 +330,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('63aeadd4-3b49-427f-a3b1-19ca81f06270')
|
@decorators.idempotent_id('63aeadd4-3b49-427f-a3b1-19ca81f06270')
|
||||||
def test_create_update_port_with_second_ip(self):
|
def test_create_update_port_with_second_ip(self):
|
||||||
|
"""Test updating port from 2 fixed ips to 1 fixed ip and vice versa"""
|
||||||
# Create a network with two subnets
|
# Create a network with two subnets
|
||||||
network = self._create_network()
|
network = self._create_network()
|
||||||
subnet_1 = self._create_subnet(network)
|
subnet_1 = self._create_subnet(network)
|
||||||
@ -410,6 +417,12 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
utils.is_extension_enabled('security-group', 'network'),
|
utils.is_extension_enabled('security-group', 'network'),
|
||||||
'security-group extension not enabled.')
|
'security-group extension not enabled.')
|
||||||
def test_update_port_with_security_group_and_extra_attributes(self):
|
def test_update_port_with_security_group_and_extra_attributes(self):
|
||||||
|
"""Test updating port's security_group along with extra attributes
|
||||||
|
|
||||||
|
First we create a port with one security group, and then we update the
|
||||||
|
port's security_group, in the same update request we also change
|
||||||
|
the port's fixed ips.
|
||||||
|
"""
|
||||||
self._update_port_with_security_groups(
|
self._update_port_with_security_groups(
|
||||||
[data_utils.rand_name('secgroup')])
|
[data_utils.rand_name('secgroup')])
|
||||||
|
|
||||||
@ -418,12 +431,19 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
utils.is_extension_enabled('security-group', 'network'),
|
utils.is_extension_enabled('security-group', 'network'),
|
||||||
'security-group extension not enabled.')
|
'security-group extension not enabled.')
|
||||||
def test_update_port_with_two_security_groups_and_extra_attributes(self):
|
def test_update_port_with_two_security_groups_and_extra_attributes(self):
|
||||||
|
"""Test updating port with two security_groups and extra attributes
|
||||||
|
|
||||||
|
First we create a port with one security group, and then we update the
|
||||||
|
port to two security_groups, in the same update request we also change
|
||||||
|
the port's fixed ips.
|
||||||
|
"""
|
||||||
self._update_port_with_security_groups(
|
self._update_port_with_security_groups(
|
||||||
[data_utils.rand_name('secgroup'),
|
[data_utils.rand_name('secgroup'),
|
||||||
data_utils.rand_name('secgroup')])
|
data_utils.rand_name('secgroup')])
|
||||||
|
|
||||||
@decorators.idempotent_id('13e95171-6cbd-489c-9d7c-3f9c58215c18')
|
@decorators.idempotent_id('13e95171-6cbd-489c-9d7c-3f9c58215c18')
|
||||||
def test_create_show_delete_port_user_defined_mac(self):
|
def test_create_show_delete_port_user_defined_mac(self):
|
||||||
|
"""Test creating port with user defined mac address"""
|
||||||
# Create a port for a legal mac
|
# Create a port for a legal mac
|
||||||
body = self.ports_client.create_port(
|
body = self.ports_client.create_port(
|
||||||
network_id=self.network['id'],
|
network_id=self.network['id'],
|
||||||
@ -450,6 +470,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
|||||||
utils.is_extension_enabled('security-group', 'network'),
|
utils.is_extension_enabled('security-group', 'network'),
|
||||||
'security-group extension not enabled.')
|
'security-group extension not enabled.')
|
||||||
def test_create_port_with_no_securitygroups(self):
|
def test_create_port_with_no_securitygroups(self):
|
||||||
|
"""Test creating port without security groups"""
|
||||||
network = self._create_network()
|
network = self._create_network()
|
||||||
self._create_subnet(network)
|
self._create_subnet(network)
|
||||||
port = self.create_port(network, security_groups=[])
|
port = self.create_port(network, security_groups=[])
|
||||||
|
@ -51,7 +51,7 @@ class TagsTest(base.BaseNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('ee76bfaf-ac94-4d74-9ecc-4bbd4c583cb1')
|
@decorators.idempotent_id('ee76bfaf-ac94-4d74-9ecc-4bbd4c583cb1')
|
||||||
def test_create_list_show_update_delete_tags(self):
|
def test_create_list_show_update_delete_tags(self):
|
||||||
# Validate that creating a tag on a network resource works.
|
"""Validate that creating a tag on a network resource works"""
|
||||||
tag_name = data_utils.rand_name(self.__class__.__name__ + '-Tag')
|
tag_name = data_utils.rand_name(self.__class__.__name__ + '-Tag')
|
||||||
self.tags_client.create_tag('networks', self.network['id'], tag_name)
|
self.tags_client.create_tag('networks', self.network['id'], tag_name)
|
||||||
self.addCleanup(self.tags_client.delete_all_tags, 'networks',
|
self.addCleanup(self.tags_client.delete_all_tags, 'networks',
|
||||||
@ -158,6 +158,7 @@ class TagsExtTest(base.BaseNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('c6231efa-9a89-4adf-b050-2a3156b8a1d9')
|
@decorators.idempotent_id('c6231efa-9a89-4adf-b050-2a3156b8a1d9')
|
||||||
def test_create_check_list_and_delete_tags(self):
|
def test_create_check_list_and_delete_tags(self):
|
||||||
|
"""Test tag operations on subnets/ports/routers/subnetpools"""
|
||||||
tag_names = self._create_tags_for_each_resource()
|
tag_names = self._create_tags_for_each_resource()
|
||||||
|
|
||||||
for i, resource in enumerate(self.SUPPORTED_RESOURCES):
|
for i, resource in enumerate(self.SUPPORTED_RESOURCES):
|
||||||
@ -181,6 +182,7 @@ class TagsExtTest(base.BaseNetworkTest):
|
|||||||
|
|
||||||
@decorators.idempotent_id('663a90f5-f334-4b44-afe0-c5fc1d408791')
|
@decorators.idempotent_id('663a90f5-f334-4b44-afe0-c5fc1d408791')
|
||||||
def test_update_and_delete_all_tags(self):
|
def test_update_and_delete_all_tags(self):
|
||||||
|
"""Test update/delete all tags on subnets/ports/routers/subnetpools"""
|
||||||
self._create_tags_for_each_resource()
|
self._create_tags_for_each_resource()
|
||||||
|
|
||||||
for resource in self.SUPPORTED_RESOURCES:
|
for resource in self.SUPPORTED_RESOURCES:
|
||||||
|
Loading…
Reference in New Issue
Block a user