Add network API test to create/update a port with 2 IP addresses
Test sequence is as follows:
- Create a network with 2 subnets.
- Create a port on the network with single IP addr from
first subnet.
- Update port with a second IP addr from second subnet.
- Update port to return to a single IP addr.
- Clean up resources (port, subnets, and network) via
the tearDownClass method of the BaseNetworkTest class.
Change-Id: I0036cd7fe412f4a371027fc5c323a7bc3ccce5b9
diff --git a/tempest/api/network/base.py b/tempest/api/network/base.py
index f92ad68..eb2fd61 100644
--- a/tempest/api/network/base.py
+++ b/tempest/api/network/base.py
@@ -170,14 +170,22 @@
return subnet
@classmethod
- def create_port(cls, network):
+ def create_port(cls, network, **kwargs):
"""Wrapper utility that returns a test port."""
- resp, body = cls.client.create_port(network_id=network['id'])
+ resp, body = cls.client.create_port(network_id=network['id'],
+ **kwargs)
port = body['port']
cls.ports.append(port)
return port
@classmethod
+ def update_port(cls, port, **kwargs):
+ """Wrapper utility that updates a test port."""
+ resp, body = cls.client.update_port(port['id'],
+ **kwargs)
+ return body['port']
+
+ @classmethod
def create_router(cls, router_name=None, admin_state_up=False,
external_network_id=None, enable_snat=None):
ext_gw_info = {}
diff --git a/tempest/api/network/test_ports.py b/tempest/api/network/test_ports.py
index fbb25a8..535e05f 100644
--- a/tempest/api/network/test_ports.py
+++ b/tempest/api/network/test_ports.py
@@ -46,6 +46,8 @@
resp, body = self.client.create_port(network_id=self.network['id'])
self.assertEqual('201', resp['status'])
port = body['port']
+ # Schedule port deletion with verification upon test completion
+ self.addCleanup(self._delete_port, port['id'])
self.assertTrue(port['admin_state_up'])
# Verify port update
new_name = "New_Port"
@@ -57,9 +59,6 @@
updated_port = body['port']
self.assertEqual(updated_port['name'], new_name)
self.assertFalse(updated_port['admin_state_up'])
- # Verify port deletion
- resp, body = self.client.delete_port(port['id'])
- self.assertEqual('204', resp['status'])
@test.attr(type='smoke')
def test_show_port(self):
@@ -134,6 +133,29 @@
self.assertEqual(len(port), 1)
self.assertIn('id', port)
+ @test.attr(type='smoke')
+ def test_update_port_with_second_ip(self):
+ # Create a network with two subnets
+ network = self.create_network()
+ subnet_1 = self.create_subnet(network)
+ subnet_2 = self.create_subnet(network)
+ fixed_ip_1 = [{'subnet_id': subnet_1['id']}]
+ fixed_ip_2 = [{'subnet_id': subnet_2['id']}]
+
+ # Create a port with a single IP address from first subnet
+ port = self.create_port(network,
+ fixed_ips=fixed_ip_1)
+ self.assertEqual(1, len(port['fixed_ips']))
+
+ # Update the port with a second IP address from second subnet
+ fixed_ips = fixed_ip_1 + fixed_ip_2
+ port = self.update_port(port, fixed_ips=fixed_ips)
+ self.assertEqual(2, len(port['fixed_ips']))
+
+ # Update the port to return to a single IP address
+ port = self.update_port(port, fixed_ips=fixed_ip_1)
+ self.assertEqual(1, len(port['fixed_ips']))
+
class PortsTestXML(PortsTestJSON):
_interface = 'xml'