blob: 1dc574b27ea0a6375ccb3332e05ce96f47631e18 [file] [log] [blame]
Nayna Patelf1a29152013-08-09 07:18:13 +00001# Copyright 2013 OpenStack Foundation
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
16from tempest.api.network import base
Ryan Tidwell1964a262016-05-04 15:13:23 -070017from tempest.common.utils import net_utils
Matthew Treinish03b48df2014-01-29 16:59:49 +000018from tempest import config
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -080019from tempest.lib import decorators
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090020from tempest import test
Nayna Patelf1a29152013-08-09 07:18:13 +000021
Matthew Treinish03b48df2014-01-29 16:59:49 +000022CONF = config.CONF
23
Nayna Patelf1a29152013-08-09 07:18:13 +000024
Attila Fazekasc74aede2013-09-11 13:04:02 +020025class FloatingIPTestJSON(base.BaseNetworkTest):
Ken'ichi Ohmichie03bea92015-11-19 07:45:58 +000026 """Tests the following operations in the Neutron API:
Nayna Patelf1a29152013-08-09 07:18:13 +000027
28 Create a Floating IP
29 Update a Floating IP
30 Delete a Floating IP
31 List all Floating IPs
32 Show Floating IP details
rossellab24ec382013-11-13 10:21:59 +010033 Associate a Floating IP with a port and then delete that port
34 Associate a Floating IP with a port and then with a port on another
35 router
Nayna Patelf1a29152013-08-09 07:18:13 +000036
rossellabc9b4bd2013-11-13 10:21:59 +010037 v2.0 of the Neutron API is assumed. It is also assumed that the following
Nayna Patelf1a29152013-08-09 07:18:13 +000038 options are defined in the [network] section of etc/tempest.conf:
39
40 public_network_id which is the id for the external network present
41 """
42
43 @classmethod
Rohan Kanadea565e452015-01-27 14:00:13 +053044 def skip_checks(cls):
45 super(FloatingIPTestJSON, cls).skip_checks()
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090046 if not test.is_extension_enabled('router', 'network'):
47 msg = "router extension not enabled."
48 raise cls.skipException(msg)
zhufl6b7040a2017-01-18 16:38:34 +080049 if not CONF.network.public_network_id:
50 msg = "The public_network_id option must be specified."
51 raise cls.skipException(msg)
Rohan Kanadea565e452015-01-27 14:00:13 +053052
53 @classmethod
54 def resource_setup(cls):
55 super(FloatingIPTestJSON, cls).resource_setup()
Matthew Treinish03b48df2014-01-29 16:59:49 +000056 cls.ext_net_id = CONF.network.public_network_id
Nayna Patelf1a29152013-08-09 07:18:13 +000057
58 # Create network, subnet, router and add interface
59 cls.network = cls.create_network()
Kevin Bentona70710b2016-07-08 15:24:38 -070060 cls.subnet = cls.create_subnet(cls.network, enable_dhcp=False)
zhufld2c40ca2016-10-18 17:03:07 +080061 cls.router = cls.create_router(external_network_id=cls.ext_net_id)
rossellabc9b4bd2013-11-13 10:21:59 +010062 cls.create_router_interface(cls.router['id'], cls.subnet['id'])
Nayna Patelf1a29152013-08-09 07:18:13 +000063 # Create two ports one each for Creation and Updating of floatingIP
64 for i in range(2):
rossellabc9b4bd2013-11-13 10:21:59 +010065 cls.create_port(cls.network)
Nayna Patelf1a29152013-08-09 07:18:13 +000066
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090067 @test.attr(type='smoke')
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -080068 @decorators.idempotent_id('62595970-ab1c-4b7f-8fcc-fddfe55e8718')
Nayna Patelf1a29152013-08-09 07:18:13 +000069 def test_create_list_show_update_delete_floating_ip(self):
70 # Creates a floating IP
John Warrenfbf2a892015-11-17 12:36:14 -050071 body = self.floating_ips_client.create_floatingip(
Rohan Kanadeeeb21642014-08-14 12:00:26 +020072 floating_network_id=self.ext_net_id,
73 port_id=self.ports[0]['id'])
Ann Kamyshnikova47a4ff82014-03-17 12:48:57 +040074 created_floating_ip = body['floatingip']
John Warrenfbf2a892015-11-17 12:36:14 -050075 self.addCleanup(self.floating_ips_client.delete_floatingip,
Ann Kamyshnikova47a4ff82014-03-17 12:48:57 +040076 created_floating_ip['id'])
rossellabc9b4bd2013-11-13 10:21:59 +010077 self.assertIsNotNone(created_floating_ip['id'])
78 self.assertIsNotNone(created_floating_ip['tenant_id'])
79 self.assertIsNotNone(created_floating_ip['floating_ip_address'])
80 self.assertEqual(created_floating_ip['port_id'], self.ports[0]['id'])
81 self.assertEqual(created_floating_ip['floating_network_id'],
Nayna Patelf1a29152013-08-09 07:18:13 +000082 self.ext_net_id)
Ann Kamyshnikova7d2275b2013-12-19 16:38:42 +040083 self.assertIn(created_floating_ip['fixed_ip_address'],
84 [ip['ip_address'] for ip in self.ports[0]['fixed_ips']])
Nayna Patelf1a29152013-08-09 07:18:13 +000085 # Verifies the details of a floating_ip
John Warrenfbf2a892015-11-17 12:36:14 -050086 floating_ip = self.floating_ips_client.show_floatingip(
87 created_floating_ip['id'])
rossellabc9b4bd2013-11-13 10:21:59 +010088 shown_floating_ip = floating_ip['floatingip']
89 self.assertEqual(shown_floating_ip['id'], created_floating_ip['id'])
90 self.assertEqual(shown_floating_ip['floating_network_id'],
Nayna Patelf1a29152013-08-09 07:18:13 +000091 self.ext_net_id)
rossellabc9b4bd2013-11-13 10:21:59 +010092 self.assertEqual(shown_floating_ip['tenant_id'],
93 created_floating_ip['tenant_id'])
94 self.assertEqual(shown_floating_ip['floating_ip_address'],
95 created_floating_ip['floating_ip_address'])
96 self.assertEqual(shown_floating_ip['port_id'], self.ports[0]['id'])
Nayna Patelf1a29152013-08-09 07:18:13 +000097
98 # Verify the floating ip exists in the list of all floating_ips
John Warrenfbf2a892015-11-17 12:36:14 -050099 floating_ips = self.floating_ips_client.list_floatingips()
Nayna Patelf1a29152013-08-09 07:18:13 +0000100 floatingip_id_list = list()
101 for f in floating_ips['floatingips']:
102 floatingip_id_list.append(f['id'])
rossellabc9b4bd2013-11-13 10:21:59 +0100103 self.assertIn(created_floating_ip['id'], floatingip_id_list)
Nayna Patelf1a29152013-08-09 07:18:13 +0000104 # Associate floating IP to the other port
John Warrenfbf2a892015-11-17 12:36:14 -0500105 floating_ip = self.floating_ips_client.update_floatingip(
Rohan Kanadeeeb21642014-08-14 12:00:26 +0200106 created_floating_ip['id'],
107 port_id=self.ports[1]['id'])
rossellabc9b4bd2013-11-13 10:21:59 +0100108 updated_floating_ip = floating_ip['floatingip']
109 self.assertEqual(updated_floating_ip['port_id'], self.ports[1]['id'])
110 self.assertEqual(updated_floating_ip['fixed_ip_address'],
111 self.ports[1]['fixed_ips'][0]['ip_address'])
112 self.assertEqual(updated_floating_ip['router_id'], self.router['id'])
Nayna Patelf1a29152013-08-09 07:18:13 +0000113
114 # Disassociate floating IP from the port
John Warrenfbf2a892015-11-17 12:36:14 -0500115 floating_ip = self.floating_ips_client.update_floatingip(
Rohan Kanadeeeb21642014-08-14 12:00:26 +0200116 created_floating_ip['id'],
117 port_id=None)
rossellabc9b4bd2013-11-13 10:21:59 +0100118 updated_floating_ip = floating_ip['floatingip']
119 self.assertIsNone(updated_floating_ip['port_id'])
120 self.assertIsNone(updated_floating_ip['fixed_ip_address'])
121 self.assertIsNone(updated_floating_ip['router_id'])
Attila Fazekasc74aede2013-09-11 13:04:02 +0200122
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -0800123 @decorators.idempotent_id('e1f6bffd-442f-4668-b30e-df13f2705e77')
rossellab24ec382013-11-13 10:21:59 +0100124 def test_floating_ip_delete_port(self):
125 # Create a floating IP
John Warrenfbf2a892015-11-17 12:36:14 -0500126 body = self.floating_ips_client.create_floatingip(
Ann Kamyshnikova47a4ff82014-03-17 12:48:57 +0400127 floating_network_id=self.ext_net_id)
Ann Kamyshnikova47a4ff82014-03-17 12:48:57 +0400128 created_floating_ip = body['floatingip']
John Warrenfbf2a892015-11-17 12:36:14 -0500129 self.addCleanup(self.floating_ips_client.delete_floatingip,
Ann Kamyshnikova47a4ff82014-03-17 12:48:57 +0400130 created_floating_ip['id'])
rossellab24ec382013-11-13 10:21:59 +0100131 # Create a port
John Warren49c0fe52015-10-22 12:35:54 -0400132 port = self.ports_client.create_port(network_id=self.network['id'])
rossellab24ec382013-11-13 10:21:59 +0100133 created_port = port['port']
John Warrenfbf2a892015-11-17 12:36:14 -0500134 floating_ip = self.floating_ips_client.update_floatingip(
Rohan Kanadeeeb21642014-08-14 12:00:26 +0200135 created_floating_ip['id'],
136 port_id=created_port['id'])
rossellab24ec382013-11-13 10:21:59 +0100137 # Delete port
John Warren49c0fe52015-10-22 12:35:54 -0400138 self.ports_client.delete_port(created_port['id'])
rossellab24ec382013-11-13 10:21:59 +0100139 # Verifies the details of the floating_ip
John Warrenfbf2a892015-11-17 12:36:14 -0500140 floating_ip = self.floating_ips_client.show_floatingip(
141 created_floating_ip['id'])
rossellab24ec382013-11-13 10:21:59 +0100142 shown_floating_ip = floating_ip['floatingip']
143 # Confirm the fields are back to None
144 self.assertEqual(shown_floating_ip['id'], created_floating_ip['id'])
145 self.assertIsNone(shown_floating_ip['port_id'])
146 self.assertIsNone(shown_floating_ip['fixed_ip_address'])
147 self.assertIsNone(shown_floating_ip['router_id'])
148
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -0800149 @decorators.idempotent_id('1bb2f731-fe5a-4b8c-8409-799ade1bed4d')
rossellab24ec382013-11-13 10:21:59 +0100150 def test_floating_ip_update_different_router(self):
151 # Associate a floating IP to a port on a router
John Warrenfbf2a892015-11-17 12:36:14 -0500152 body = self.floating_ips_client.create_floatingip(
Rohan Kanadeeeb21642014-08-14 12:00:26 +0200153 floating_network_id=self.ext_net_id,
154 port_id=self.ports[1]['id'])
Ann Kamyshnikova47a4ff82014-03-17 12:48:57 +0400155 created_floating_ip = body['floatingip']
John Warrenfbf2a892015-11-17 12:36:14 -0500156 self.addCleanup(self.floating_ips_client.delete_floatingip,
Ann Kamyshnikova47a4ff82014-03-17 12:48:57 +0400157 created_floating_ip['id'])
rossellab24ec382013-11-13 10:21:59 +0100158 self.assertEqual(created_floating_ip['router_id'], self.router['id'])
159 network2 = self.create_network()
160 subnet2 = self.create_subnet(network2)
zhufld2c40ca2016-10-18 17:03:07 +0800161 router2 = self.create_router(external_network_id=self.ext_net_id)
rossellab24ec382013-11-13 10:21:59 +0100162 self.create_router_interface(router2['id'], subnet2['id'])
163 port_other_router = self.create_port(network2)
164 # Associate floating IP to the other port on another router
John Warrenfbf2a892015-11-17 12:36:14 -0500165 floating_ip = self.floating_ips_client.update_floatingip(
Rohan Kanadeeeb21642014-08-14 12:00:26 +0200166 created_floating_ip['id'],
167 port_id=port_other_router['id'])
rossellab24ec382013-11-13 10:21:59 +0100168 updated_floating_ip = floating_ip['floatingip']
169 self.assertEqual(updated_floating_ip['router_id'], router2['id'])
170 self.assertEqual(updated_floating_ip['port_id'],
171 port_other_router['id'])
172 self.assertIsNotNone(updated_floating_ip['fixed_ip_address'])
173
Ann Kamyshnikova7d2275b2013-12-19 16:38:42 +0400174 @test.attr(type='smoke')
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -0800175 @decorators.idempotent_id('36de4bd0-f09c-43e3-a8e1-1decc1ffd3a5')
Ann Kamyshnikova7d2275b2013-12-19 16:38:42 +0400176 def test_create_floating_ip_specifying_a_fixed_ip_address(self):
John Warrenfbf2a892015-11-17 12:36:14 -0500177 body = self.floating_ips_client.create_floatingip(
Ann Kamyshnikova7d2275b2013-12-19 16:38:42 +0400178 floating_network_id=self.ext_net_id,
179 port_id=self.ports[1]['id'],
180 fixed_ip_address=self.ports[1]['fixed_ips'][0]['ip_address'])
Ann Kamyshnikova7d2275b2013-12-19 16:38:42 +0400181 created_floating_ip = body['floatingip']
John Warrenfbf2a892015-11-17 12:36:14 -0500182 self.addCleanup(self.floating_ips_client.delete_floatingip,
Ann Kamyshnikova7d2275b2013-12-19 16:38:42 +0400183 created_floating_ip['id'])
184 self.assertIsNotNone(created_floating_ip['id'])
185 self.assertEqual(created_floating_ip['fixed_ip_address'],
186 self.ports[1]['fixed_ips'][0]['ip_address'])
John Warrenfbf2a892015-11-17 12:36:14 -0500187 floating_ip = self.floating_ips_client.update_floatingip(
Rohan Kanadeeeb21642014-08-14 12:00:26 +0200188 created_floating_ip['id'],
189 port_id=None)
Ann Kamyshnikova7d2275b2013-12-19 16:38:42 +0400190 self.assertIsNone(floating_ip['floatingip']['port_id'])
191
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -0800192 @decorators.idempotent_id('45c4c683-ea97-41ef-9c51-5e9802f2f3d7')
Ann Kamyshnikovadf102842014-02-05 13:52:57 +0400193 def test_create_update_floatingip_with_port_multiple_ip_address(self):
194 # Find out ips that can be used for tests
Ryan Tidwell1964a262016-05-04 15:13:23 -0700195 list_ips = net_utils.get_unused_ip_addresses(
196 self.ports_client,
197 self.subnets_client,
198 self.subnet['network_id'],
199 self.subnet['id'],
200 2)
Ann Kamyshnikovadf102842014-02-05 13:52:57 +0400201 fixed_ips = [{'ip_address': list_ips[0]}, {'ip_address': list_ips[1]}]
202 # Create port
John Warren49c0fe52015-10-22 12:35:54 -0400203 body = self.ports_client.create_port(network_id=self.network['id'],
204 fixed_ips=fixed_ips)
Ann Kamyshnikovadf102842014-02-05 13:52:57 +0400205 port = body['port']
John Warren49c0fe52015-10-22 12:35:54 -0400206 self.addCleanup(self.ports_client.delete_port, port['id'])
Ann Kamyshnikovadf102842014-02-05 13:52:57 +0400207 # Create floating ip
John Warrenfbf2a892015-11-17 12:36:14 -0500208 body = self.floating_ips_client.create_floatingip(
Rohan Kanadeeeb21642014-08-14 12:00:26 +0200209 floating_network_id=self.ext_net_id,
210 port_id=port['id'],
Ann Kamyshnikovadf102842014-02-05 13:52:57 +0400211 fixed_ip_address=list_ips[0])
Ann Kamyshnikovadf102842014-02-05 13:52:57 +0400212 floating_ip = body['floatingip']
John Warrenfbf2a892015-11-17 12:36:14 -0500213 self.addCleanup(self.floating_ips_client.delete_floatingip,
214 floating_ip['id'])
Ann Kamyshnikovadf102842014-02-05 13:52:57 +0400215 self.assertIsNotNone(floating_ip['id'])
216 self.assertEqual(floating_ip['fixed_ip_address'], list_ips[0])
217 # Update floating ip
John Warrenfbf2a892015-11-17 12:36:14 -0500218 body = self.floating_ips_client.update_floatingip(
219 floating_ip['id'], port_id=port['id'],
220 fixed_ip_address=list_ips[1])
Ann Kamyshnikovadf102842014-02-05 13:52:57 +0400221 update_floating_ip = body['floatingip']
222 self.assertEqual(update_floating_ip['fixed_ip_address'],
223 list_ips[1])