blob: e050c17c69f57be4c75a3a3740956b0c3fd83393 [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
Masayuki Igawa259c1132013-10-31 17:48:44 +090017from tempest.common.utils import data_utils
Nayna Patelf1a29152013-08-09 07:18:13 +000018from tempest.test import attr
19
20
Attila Fazekasc74aede2013-09-11 13:04:02 +020021class FloatingIPTestJSON(base.BaseNetworkTest):
Nayna Patelf1a29152013-08-09 07:18:13 +000022 _interface = 'json'
23
24 """
25 Tests the following operations in the Quantum API using the REST client for
rossellabc9b4bd2013-11-13 10:21:59 +010026 Neutron:
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
44 def setUpClass(cls):
Attila Fazekasc74aede2013-09-11 13:04:02 +020045 super(FloatingIPTestJSON, cls).setUpClass()
Nayna Patelf1a29152013-08-09 07:18:13 +000046 cls.ext_net_id = cls.config.network.public_network_id
47
48 # Create network, subnet, router and add interface
49 cls.network = cls.create_network()
50 cls.subnet = cls.create_subnet(cls.network)
rossellabc9b4bd2013-11-13 10:21:59 +010051 cls.router = cls.create_router(data_utils.rand_name('router-'),
52 external_network_id=cls.ext_net_id)
53 cls.create_router_interface(cls.router['id'], cls.subnet['id'])
Nayna Patelf1a29152013-08-09 07:18:13 +000054 cls.port = list()
55 # Create two ports one each for Creation and Updating of floatingIP
56 for i in range(2):
rossellabc9b4bd2013-11-13 10:21:59 +010057 cls.create_port(cls.network)
Nayna Patelf1a29152013-08-09 07:18:13 +000058
Nayna Patelf1a29152013-08-09 07:18:13 +000059 @attr(type='smoke')
60 def test_create_list_show_update_delete_floating_ip(self):
61 # Creates a floating IP
rosselladd68b232013-11-13 10:21:59 +010062 created_floating_ip = self.create_floating_ip(
rossellabc9b4bd2013-11-13 10:21:59 +010063 self.ext_net_id, port_id=self.ports[0]['id'])
rossellabc9b4bd2013-11-13 10:21:59 +010064 self.assertIsNotNone(created_floating_ip['id'])
65 self.assertIsNotNone(created_floating_ip['tenant_id'])
66 self.assertIsNotNone(created_floating_ip['floating_ip_address'])
67 self.assertEqual(created_floating_ip['port_id'], self.ports[0]['id'])
68 self.assertEqual(created_floating_ip['floating_network_id'],
Nayna Patelf1a29152013-08-09 07:18:13 +000069 self.ext_net_id)
Nayna Patelf1a29152013-08-09 07:18:13 +000070 # Verifies the details of a floating_ip
71 resp, floating_ip = self.client.show_floating_ip(
rossellabc9b4bd2013-11-13 10:21:59 +010072 created_floating_ip['id'])
Nayna Patelf1a29152013-08-09 07:18:13 +000073 self.assertEqual('200', resp['status'])
rossellabc9b4bd2013-11-13 10:21:59 +010074 shown_floating_ip = floating_ip['floatingip']
75 self.assertEqual(shown_floating_ip['id'], created_floating_ip['id'])
76 self.assertEqual(shown_floating_ip['floating_network_id'],
Nayna Patelf1a29152013-08-09 07:18:13 +000077 self.ext_net_id)
rossellabc9b4bd2013-11-13 10:21:59 +010078 self.assertEqual(shown_floating_ip['tenant_id'],
79 created_floating_ip['tenant_id'])
80 self.assertEqual(shown_floating_ip['floating_ip_address'],
81 created_floating_ip['floating_ip_address'])
82 self.assertEqual(shown_floating_ip['port_id'], self.ports[0]['id'])
Nayna Patelf1a29152013-08-09 07:18:13 +000083
84 # Verify the floating ip exists in the list of all floating_ips
Eugene Nikanorov909ded12013-12-15 17:45:37 +040085 resp, floating_ips = self.client.list_floatingips()
Nayna Patelf1a29152013-08-09 07:18:13 +000086 self.assertEqual('200', resp['status'])
87 floatingip_id_list = list()
88 for f in floating_ips['floatingips']:
89 floatingip_id_list.append(f['id'])
rossellabc9b4bd2013-11-13 10:21:59 +010090 self.assertIn(created_floating_ip['id'], floatingip_id_list)
Nayna Patelf1a29152013-08-09 07:18:13 +000091 # Associate floating IP to the other port
92 resp, floating_ip = self.client.update_floating_ip(
rossellabc9b4bd2013-11-13 10:21:59 +010093 created_floating_ip['id'], port_id=self.ports[1]['id'])
Nayna Patelf1a29152013-08-09 07:18:13 +000094 self.assertEqual('200', resp['status'])
rossellabc9b4bd2013-11-13 10:21:59 +010095 updated_floating_ip = floating_ip['floatingip']
96 self.assertEqual(updated_floating_ip['port_id'], self.ports[1]['id'])
97 self.assertEqual(updated_floating_ip['fixed_ip_address'],
98 self.ports[1]['fixed_ips'][0]['ip_address'])
99 self.assertEqual(updated_floating_ip['router_id'], self.router['id'])
Nayna Patelf1a29152013-08-09 07:18:13 +0000100
101 # Disassociate floating IP from the port
102 resp, floating_ip = self.client.update_floating_ip(
rossellabc9b4bd2013-11-13 10:21:59 +0100103 created_floating_ip['id'], port_id=None)
Nayna Patelf1a29152013-08-09 07:18:13 +0000104 self.assertEqual('200', resp['status'])
rossellabc9b4bd2013-11-13 10:21:59 +0100105 updated_floating_ip = floating_ip['floatingip']
106 self.assertIsNone(updated_floating_ip['port_id'])
107 self.assertIsNone(updated_floating_ip['fixed_ip_address'])
108 self.assertIsNone(updated_floating_ip['router_id'])
Attila Fazekasc74aede2013-09-11 13:04:02 +0200109
rossellab24ec382013-11-13 10:21:59 +0100110 @attr(type='smoke')
111 def test_floating_ip_delete_port(self):
112 # Create a floating IP
113 created_floating_ip = self.create_floating_ip(self.ext_net_id)
114 # Create a port
115 resp, port = self.client.create_port(self.network['id'])
116 created_port = port['port']
117 resp, floating_ip = self.client.update_floating_ip(
118 created_floating_ip['id'], port_id=created_port['id'])
119 self.assertEqual('200', resp['status'])
120 # Delete port
121 self.client.delete_port(created_port['id'])
122 # Verifies the details of the floating_ip
123 resp, floating_ip = self.client.show_floating_ip(
124 created_floating_ip['id'])
125 self.assertEqual('200', resp['status'])
126 shown_floating_ip = floating_ip['floatingip']
127 # Confirm the fields are back to None
128 self.assertEqual(shown_floating_ip['id'], created_floating_ip['id'])
129 self.assertIsNone(shown_floating_ip['port_id'])
130 self.assertIsNone(shown_floating_ip['fixed_ip_address'])
131 self.assertIsNone(shown_floating_ip['router_id'])
132
133 @attr(type='smoke')
134 def test_floating_ip_update_different_router(self):
135 # Associate a floating IP to a port on a router
136 created_floating_ip = self.create_floating_ip(
137 self.ext_net_id, port_id=self.ports[1]['id'])
138 self.assertEqual(created_floating_ip['router_id'], self.router['id'])
139 network2 = self.create_network()
140 subnet2 = self.create_subnet(network2)
141 router2 = self.create_router(data_utils.rand_name('router-'),
142 external_network_id=self.ext_net_id)
143 self.create_router_interface(router2['id'], subnet2['id'])
144 port_other_router = self.create_port(network2)
145 # Associate floating IP to the other port on another router
146 resp, floating_ip = self.client.update_floating_ip(
147 created_floating_ip['id'], port_id=port_other_router['id'])
148 self.assertEqual('200', resp['status'])
149 updated_floating_ip = floating_ip['floatingip']
150 self.assertEqual(updated_floating_ip['router_id'], router2['id'])
151 self.assertEqual(updated_floating_ip['port_id'],
152 port_other_router['id'])
153 self.assertIsNotNone(updated_floating_ip['fixed_ip_address'])
154
Attila Fazekasc74aede2013-09-11 13:04:02 +0200155
156class FloatingIPTestXML(FloatingIPTestJSON):
157 _interface = 'xml'