ZhiQiang Fan | 39f9722 | 2013-09-20 04:49:44 +0800 | [diff] [blame] | 1 | # Copyright 2013 OpenStack Foundation |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 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 | |
Matthew Treinish | 7142668 | 2015-04-23 11:19:38 -0400 | [diff] [blame] | 16 | import six |
Matthew Treinish | 01472ff | 2015-02-20 17:26:52 -0500 | [diff] [blame] | 17 | from tempest_lib.common.utils import data_utils |
Matthew Treinish | c49fcbe | 2015-02-05 23:37:34 -0500 | [diff] [blame] | 18 | from tempest_lib import decorators |
| 19 | |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 20 | from tempest.api.network import base |
mouad benchchaoui | ea2440d | 2013-12-22 00:38:06 +0100 | [diff] [blame] | 21 | from tempest import test |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 22 | |
| 23 | |
Ken'ichi Ohmichi | 91c675d | 2014-02-06 02:15:21 +0900 | [diff] [blame] | 24 | class LoadBalancerTestJSON(base.BaseNetworkTest): |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 25 | """ |
| 26 | Tests the following operations in the Neutron API using the REST client for |
| 27 | Neutron: |
| 28 | |
| 29 | create vIP, and Pool |
| 30 | show vIP |
| 31 | list vIP |
| 32 | update vIP |
| 33 | delete vIP |
| 34 | update pool |
| 35 | delete pool |
raiesmh08 | f5153f7 | 2013-09-16 13:38:37 +0530 | [diff] [blame] | 36 | show pool |
| 37 | list pool |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 38 | health monitoring operations |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 39 | """ |
| 40 | |
| 41 | @classmethod |
Rohan Kanade | a565e45 | 2015-01-27 14:00:13 +0530 | [diff] [blame] | 42 | def skip_checks(cls): |
| 43 | super(LoadBalancerTestJSON, cls).skip_checks() |
mouad benchchaoui | ea2440d | 2013-12-22 00:38:06 +0100 | [diff] [blame] | 44 | if not test.is_extension_enabled('lbaas', 'network'): |
| 45 | msg = "lbaas extension not enabled." |
| 46 | raise cls.skipException(msg) |
Rohan Kanade | a565e45 | 2015-01-27 14:00:13 +0530 | [diff] [blame] | 47 | |
| 48 | @classmethod |
| 49 | def resource_setup(cls): |
| 50 | super(LoadBalancerTestJSON, cls).resource_setup() |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 51 | cls.network = cls.create_network() |
| 52 | cls.name = cls.network['name'] |
| 53 | cls.subnet = cls.create_subnet(cls.network) |
Masayuki Igawa | 259c113 | 2013-10-31 17:48:44 +0900 | [diff] [blame] | 54 | pool_name = data_utils.rand_name('pool-') |
| 55 | vip_name = data_utils.rand_name('vip-') |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 56 | cls.pool = cls.create_pool(pool_name, "ROUND_ROBIN", |
| 57 | "HTTP", cls.subnet) |
Elena Ezhova | 43c70a2 | 2014-01-14 12:42:51 +0400 | [diff] [blame] | 58 | cls.vip = cls.create_vip(name=vip_name, |
| 59 | protocol="HTTP", |
| 60 | protocol_port=80, |
| 61 | subnet=cls.subnet, |
| 62 | pool=cls.pool) |
Sergey Shnaidman | 97e6a0f | 2014-11-12 20:00:53 +0300 | [diff] [blame] | 63 | cls.member = cls.create_member(80, cls.pool, cls._ip_version) |
| 64 | cls.member_address = ("10.0.9.47" if cls._ip_version == 4 |
| 65 | else "2015::beef") |
Elena Ezhova | 43c70a2 | 2014-01-14 12:42:51 +0400 | [diff] [blame] | 66 | cls.health_monitor = cls.create_health_monitor(delay=4, |
| 67 | max_retries=3, |
| 68 | Type="TCP", |
| 69 | timeout=1) |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 70 | |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 71 | def _check_list_with_filter(self, obj_name, attr_exceptions, **kwargs): |
| 72 | create_obj = getattr(self.client, 'create_' + obj_name) |
| 73 | delete_obj = getattr(self.client, 'delete_' + obj_name) |
| 74 | list_objs = getattr(self.client, 'list_' + obj_name + 's') |
| 75 | |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 76 | body = create_obj(**kwargs) |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 77 | obj = body[obj_name] |
| 78 | self.addCleanup(delete_obj, obj['id']) |
Matthew Treinish | 7142668 | 2015-04-23 11:19:38 -0400 | [diff] [blame] | 79 | for key, value in six.iteritems(obj): |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 80 | # It is not relevant to filter by all arguments. That is why |
| 81 | # there is a list of attr to except |
| 82 | if key not in attr_exceptions: |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 83 | body = list_objs(**{key: value}) |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 84 | objs = [v[key] for v in body[obj_name + 's']] |
| 85 | self.assertIn(value, objs) |
| 86 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 87 | @test.idempotent_id('c96dbfab-4a80-4e74-a535-e950b5bedd47') |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 88 | def test_list_vips(self): |
| 89 | # Verify the vIP exists in the list of all vIPs |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 90 | body = self.client.list_vips() |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 91 | vips = body['vips'] |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 92 | self.assertIn(self.vip['id'], [v['id'] for v in vips]) |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 93 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 94 | @test.idempotent_id('b8853f65-5089-4e69-befd-041a143427ff') |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 95 | def test_list_vips_with_filter(self): |
| 96 | name = data_utils.rand_name('vip-') |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 97 | body = self.client.create_pool(name=data_utils.rand_name("pool-"), |
| 98 | lb_method="ROUND_ROBIN", |
| 99 | protocol="HTTPS", |
| 100 | subnet_id=self.subnet['id']) |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 101 | pool = body['pool'] |
| 102 | self.addCleanup(self.client.delete_pool, pool['id']) |
| 103 | attr_exceptions = ['status', 'session_persistence', |
| 104 | 'status_description'] |
| 105 | self._check_list_with_filter( |
| 106 | 'vip', attr_exceptions, name=name, protocol="HTTPS", |
| 107 | protocol_port=81, subnet_id=self.subnet['id'], pool_id=pool['id'], |
| 108 | description=data_utils.rand_name('description-'), |
| 109 | admin_state_up=False) |
| 110 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 111 | @test.idempotent_id('27f56083-9af9-4a48-abe9-ca1bcc6c9035') |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 112 | def test_create_update_delete_pool_vip(self): |
| 113 | # Creates a vip |
Masayuki Igawa | 259c113 | 2013-10-31 17:48:44 +0900 | [diff] [blame] | 114 | name = data_utils.rand_name('vip-') |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 115 | address = self.subnet['allocation_pools'][0]['end'] |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 116 | body = self.client.create_pool( |
Eugene Nikanorov | 431e04a | 2013-12-17 15:44:27 +0400 | [diff] [blame] | 117 | name=data_utils.rand_name("pool-"), |
| 118 | lb_method='ROUND_ROBIN', |
| 119 | protocol='HTTP', |
| 120 | subnet_id=self.subnet['id']) |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 121 | pool = body['pool'] |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 122 | body = self.client.create_vip(name=name, |
| 123 | protocol="HTTP", |
| 124 | protocol_port=80, |
| 125 | subnet_id=self.subnet['id'], |
| 126 | pool_id=pool['id'], |
| 127 | address=address) |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 128 | vip = body['vip'] |
| 129 | vip_id = vip['id'] |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 130 | # Confirm VIP's address correctness with a show |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 131 | body = self.client.show_vip(vip_id) |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 132 | vip = body['vip'] |
| 133 | self.assertEqual(address, vip['address']) |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 134 | # Verification of vip update |
| 135 | new_name = "New_vip" |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 136 | new_description = "New description" |
| 137 | persistence_type = "HTTP_COOKIE" |
| 138 | update_data = {"session_persistence": { |
| 139 | "type": persistence_type}} |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 140 | body = self.client.update_vip(vip_id, |
| 141 | name=new_name, |
| 142 | description=new_description, |
| 143 | connection_limit=10, |
| 144 | admin_state_up=False, |
| 145 | **update_data) |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 146 | updated_vip = body['vip'] |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 147 | self.assertEqual(new_name, updated_vip['name']) |
| 148 | self.assertEqual(new_description, updated_vip['description']) |
| 149 | self.assertEqual(10, updated_vip['connection_limit']) |
| 150 | self.assertFalse(updated_vip['admin_state_up']) |
| 151 | self.assertEqual(persistence_type, |
| 152 | updated_vip['session_persistence']['type']) |
Rohan Kanade | eeb2164 | 2014-08-14 12:00:26 +0200 | [diff] [blame] | 153 | self.client.delete_vip(vip['id']) |
izikpenso | d9a01a6 | 2014-02-17 20:02:32 +0200 | [diff] [blame] | 154 | self.client.wait_for_resource_deletion('vip', vip['id']) |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 155 | # Verification of pool update |
| 156 | new_name = "New_pool" |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 157 | body = self.client.update_pool(pool['id'], |
| 158 | name=new_name, |
| 159 | description="new_description", |
| 160 | lb_method='LEAST_CONNECTIONS') |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 161 | updated_pool = body['pool'] |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 162 | self.assertEqual(new_name, updated_pool['name']) |
| 163 | self.assertEqual('new_description', updated_pool['description']) |
| 164 | self.assertEqual('LEAST_CONNECTIONS', updated_pool['lb_method']) |
Rohan Kanade | eeb2164 | 2014-08-14 12:00:26 +0200 | [diff] [blame] | 165 | self.client.delete_pool(pool['id']) |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 166 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 167 | @test.idempotent_id('0435a95e-1d19-4d90-9e9f-3b979e9ad089') |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 168 | def test_show_vip(self): |
| 169 | # Verifies the details of a vip |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 170 | body = self.client.show_vip(self.vip['id']) |
raiesmh08 | 0fe7685 | 2013-09-13 11:52:56 +0530 | [diff] [blame] | 171 | vip = body['vip'] |
Matthew Treinish | 7142668 | 2015-04-23 11:19:38 -0400 | [diff] [blame] | 172 | for key, value in six.iteritems(vip): |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 173 | # 'status' should not be confirmed in api tests |
| 174 | if key != 'status': |
| 175 | self.assertEqual(self.vip[key], value) |
raiesmh08 | 02d04b0 | 2013-09-16 12:10:10 +0530 | [diff] [blame] | 176 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 177 | @test.idempotent_id('6e7a7d31-8451-456d-b24a-e50479ce42a7') |
raiesmh08 | f5153f7 | 2013-09-16 13:38:37 +0530 | [diff] [blame] | 178 | def test_show_pool(self): |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 179 | # Here we need to new pool without any dependence with vips |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 180 | body = self.client.create_pool(name=data_utils.rand_name("pool-"), |
| 181 | lb_method='ROUND_ROBIN', |
| 182 | protocol='HTTP', |
| 183 | subnet_id=self.subnet['id']) |
raiesmh08 | f5153f7 | 2013-09-16 13:38:37 +0530 | [diff] [blame] | 184 | pool = body['pool'] |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 185 | self.addCleanup(self.client.delete_pool, pool['id']) |
| 186 | # Verifies the details of a pool |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 187 | body = self.client.show_pool(pool['id']) |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 188 | shown_pool = body['pool'] |
Matthew Treinish | 7142668 | 2015-04-23 11:19:38 -0400 | [diff] [blame] | 189 | for key, value in six.iteritems(pool): |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 190 | # 'status' should not be confirmed in api tests |
| 191 | if key != 'status': |
| 192 | self.assertEqual(value, shown_pool[key]) |
raiesmh08 | f5153f7 | 2013-09-16 13:38:37 +0530 | [diff] [blame] | 193 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 194 | @test.idempotent_id('d1ab1ffa-e06a-487f-911f-56418cb27727') |
raiesmh08 | f5153f7 | 2013-09-16 13:38:37 +0530 | [diff] [blame] | 195 | def test_list_pools(self): |
| 196 | # Verify the pool exists in the list of all pools |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 197 | body = self.client.list_pools() |
raiesmh08 | f5153f7 | 2013-09-16 13:38:37 +0530 | [diff] [blame] | 198 | pools = body['pools'] |
| 199 | self.assertIn(self.pool['id'], [p['id'] for p in pools]) |
| 200 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 201 | @test.idempotent_id('27cc4c1a-caac-4273-b983-2acb4afaad4f') |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 202 | def test_list_pools_with_filters(self): |
| 203 | attr_exceptions = ['status', 'vip_id', 'members', 'provider', |
| 204 | 'status_description'] |
| 205 | self._check_list_with_filter( |
| 206 | 'pool', attr_exceptions, name=data_utils.rand_name("pool-"), |
| 207 | lb_method="ROUND_ROBIN", protocol="HTTPS", |
| 208 | subnet_id=self.subnet['id'], |
| 209 | description=data_utils.rand_name('description-'), |
| 210 | admin_state_up=False) |
| 211 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 212 | @test.idempotent_id('282d0dfd-5c3a-4c9b-b39c-c99782f39193') |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 213 | def test_list_members(self): |
| 214 | # Verify the member exists in the list of all members |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 215 | body = self.client.list_members() |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 216 | members = body['members'] |
| 217 | self.assertIn(self.member['id'], [m['id'] for m in members]) |
| 218 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 219 | @test.idempotent_id('243b5126-24c6-4879-953e-7c7e32d8a57f') |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 220 | def test_list_members_with_filters(self): |
| 221 | attr_exceptions = ['status', 'status_description'] |
| 222 | self._check_list_with_filter('member', attr_exceptions, |
Sergey Shnaidman | 97e6a0f | 2014-11-12 20:00:53 +0300 | [diff] [blame] | 223 | address=self.member_address, |
| 224 | protocol_port=80, |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 225 | pool_id=self.pool['id']) |
| 226 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 227 | @test.idempotent_id('fb833ee8-9e69-489f-b540-a409762b78b2') |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 228 | def test_create_update_delete_member(self): |
| 229 | # Creates a member |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 230 | body = self.client.create_member(address=self.member_address, |
| 231 | protocol_port=80, |
| 232 | pool_id=self.pool['id']) |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 233 | member = body['member'] |
| 234 | # Verification of member update |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 235 | body = self.client.update_member(member['id'], |
| 236 | admin_state_up=False) |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 237 | updated_member = body['member'] |
Elena Ezhova | 43c70a2 | 2014-01-14 12:42:51 +0400 | [diff] [blame] | 238 | self.assertFalse(updated_member['admin_state_up']) |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 239 | # Verification of member delete |
Rohan Kanade | eeb2164 | 2014-08-14 12:00:26 +0200 | [diff] [blame] | 240 | self.client.delete_member(member['id']) |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 241 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 242 | @test.idempotent_id('893cd71f-a7dd-4485-b162-f6ab9a534914') |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 243 | def test_show_member(self): |
| 244 | # Verifies the details of a member |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 245 | body = self.client.show_member(self.member['id']) |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 246 | member = body['member'] |
Matthew Treinish | 7142668 | 2015-04-23 11:19:38 -0400 | [diff] [blame] | 247 | for key, value in six.iteritems(member): |
Matthew Treinish | c795b9e | 2014-06-09 17:01:10 -0400 | [diff] [blame] | 248 | # 'status' should not be confirmed in api tests |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 249 | if key != 'status': |
| 250 | self.assertEqual(self.member[key], value) |
raiesmh08 | f8437ed | 2013-09-17 10:59:38 +0530 | [diff] [blame] | 251 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 252 | @test.idempotent_id('8e5822c5-68a4-4224-8d6c-a617741ebc2d') |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 253 | def test_list_health_monitors(self): |
| 254 | # Verify the health monitor exists in the list of all health monitors |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 255 | body = self.client.list_health_monitors() |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 256 | health_monitors = body['health_monitors'] |
| 257 | self.assertIn(self.health_monitor['id'], |
| 258 | [h['id'] for h in health_monitors]) |
| 259 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 260 | @test.idempotent_id('49bac58a-511c-4875-b794-366698211d25') |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 261 | def test_list_health_monitors_with_filters(self): |
| 262 | attr_exceptions = ['status', 'status_description', 'pools'] |
| 263 | self._check_list_with_filter('health_monitor', attr_exceptions, |
| 264 | delay=5, max_retries=4, type="TCP", |
| 265 | timeout=2) |
| 266 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 267 | @test.idempotent_id('e8ce05c4-d554-4d1e-a257-ad32ce134bb5') |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 268 | def test_create_update_delete_health_monitor(self): |
| 269 | # Creates a health_monitor |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 270 | body = self.client.create_health_monitor(delay=4, |
| 271 | max_retries=3, |
| 272 | type="TCP", |
| 273 | timeout=1) |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 274 | health_monitor = body['health_monitor'] |
| 275 | # Verification of health_monitor update |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 276 | body = (self.client.update_health_monitor |
| 277 | (health_monitor['id'], |
| 278 | admin_state_up=False)) |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 279 | updated_health_monitor = body['health_monitor'] |
Elena Ezhova | 43c70a2 | 2014-01-14 12:42:51 +0400 | [diff] [blame] | 280 | self.assertFalse(updated_health_monitor['admin_state_up']) |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 281 | # Verification of health_monitor delete |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 282 | body = self.client.delete_health_monitor(health_monitor['id']) |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 283 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 284 | @test.idempotent_id('d3e1aebc-06c2-49b3-9816-942af54012eb') |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 285 | def test_create_health_monitor_http_type(self): |
| 286 | hm_type = "HTTP" |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 287 | body = self.client.create_health_monitor(delay=4, |
| 288 | max_retries=3, |
| 289 | type=hm_type, |
| 290 | timeout=1) |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 291 | health_monitor = body['health_monitor'] |
| 292 | self.addCleanup(self.client.delete_health_monitor, |
| 293 | health_monitor['id']) |
| 294 | self.assertEqual(hm_type, health_monitor['type']) |
| 295 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 296 | @test.idempotent_id('0eff9f67-90fb-4bb1-b4ed-c5fda99fff0c') |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 297 | def test_update_health_monitor_http_method(self): |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 298 | body = self.client.create_health_monitor(delay=4, |
| 299 | max_retries=3, |
| 300 | type="HTTP", |
| 301 | timeout=1) |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 302 | health_monitor = body['health_monitor'] |
| 303 | self.addCleanup(self.client.delete_health_monitor, |
| 304 | health_monitor['id']) |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 305 | body = (self.client.update_health_monitor |
| 306 | (health_monitor['id'], |
| 307 | http_method="POST", |
| 308 | url_path="/home/user", |
| 309 | expected_codes="290")) |
Elena Ezhova | b40848f | 2014-01-15 10:17:35 +0400 | [diff] [blame] | 310 | updated_health_monitor = body['health_monitor'] |
| 311 | self.assertEqual("POST", updated_health_monitor['http_method']) |
| 312 | self.assertEqual("/home/user", updated_health_monitor['url_path']) |
| 313 | self.assertEqual("290", updated_health_monitor['expected_codes']) |
| 314 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 315 | @test.idempotent_id('08e126ab-1407-483f-a22e-b11cc032ca7c') |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 316 | def test_show_health_monitor(self): |
| 317 | # Verifies the details of a health_monitor |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 318 | body = self.client.show_health_monitor(self.health_monitor['id']) |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 319 | health_monitor = body['health_monitor'] |
Matthew Treinish | 7142668 | 2015-04-23 11:19:38 -0400 | [diff] [blame] | 320 | for key, value in six.iteritems(health_monitor): |
Matthew Treinish | c795b9e | 2014-06-09 17:01:10 -0400 | [diff] [blame] | 321 | # 'status' should not be confirmed in api tests |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 322 | if key != 'status': |
| 323 | self.assertEqual(self.health_monitor[key], value) |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 324 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 325 | @test.idempotent_id('87f7628e-8918-493d-af50-0602845dbb5b') |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 326 | def test_associate_disassociate_health_monitor_with_pool(self): |
| 327 | # Verify that a health monitor can be associated with a pool |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 328 | self.client.associate_health_monitor_with_pool( |
| 329 | self.health_monitor['id'], self.pool['id']) |
| 330 | body = self.client.show_health_monitor( |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 331 | self.health_monitor['id']) |
| 332 | health_monitor = body['health_monitor'] |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 333 | body = self.client.show_pool(self.pool['id']) |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 334 | pool = body['pool'] |
| 335 | self.assertIn(pool['id'], |
| 336 | [p['pool_id'] for p in health_monitor['pools']]) |
| 337 | self.assertIn(health_monitor['id'], pool['health_monitors']) |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 338 | # Verify that a health monitor can be disassociated from a pool |
Rohan Kanade | eeb2164 | 2014-08-14 12:00:26 +0200 | [diff] [blame] | 339 | (self.client.disassociate_health_monitor_with_pool |
| 340 | (self.health_monitor['id'], self.pool['id'])) |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 341 | body = self.client.show_pool(self.pool['id']) |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 342 | pool = body['pool'] |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 343 | body = self.client.show_health_monitor( |
Ann Kamyshnikova | 2bc1c43 | 2013-12-10 17:31:50 +0400 | [diff] [blame] | 344 | self.health_monitor['id']) |
| 345 | health_monitor = body['health_monitor'] |
| 346 | self.assertNotIn(health_monitor['id'], pool['health_monitors']) |
| 347 | self.assertNotIn(pool['id'], |
| 348 | [p['pool_id'] for p in health_monitor['pools']]) |
raiesmh08 | 32580d0 | 2013-09-17 13:11:34 +0530 | [diff] [blame] | 349 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 350 | @test.idempotent_id('525fc7dc-be24-408d-938d-822e9783e027') |
nayna-patel | 87b4ef2 | 2014-02-07 10:24:59 +0000 | [diff] [blame] | 351 | def test_get_lb_pool_stats(self): |
| 352 | # Verify the details of pool stats |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 353 | body = self.client.list_lb_pool_stats(self.pool['id']) |
nayna-patel | 87b4ef2 | 2014-02-07 10:24:59 +0000 | [diff] [blame] | 354 | stats = body['stats'] |
| 355 | self.assertIn("bytes_in", stats) |
| 356 | self.assertIn("total_connections", stats) |
| 357 | self.assertIn("active_connections", stats) |
| 358 | self.assertIn("bytes_out", stats) |
| 359 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 360 | @test.idempotent_id('66236be2-5121-4047-8cde-db4b83b110a5') |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 361 | def test_update_list_of_health_monitors_associated_with_pool(self): |
Rohan Kanade | eeb2164 | 2014-08-14 12:00:26 +0200 | [diff] [blame] | 362 | (self.client.associate_health_monitor_with_pool |
| 363 | (self.health_monitor['id'], self.pool['id'])) |
| 364 | self.client.update_health_monitor( |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 365 | self.health_monitor['id'], admin_state_up=False) |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 366 | body = self.client.show_pool(self.pool['id']) |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 367 | health_monitors = body['pool']['health_monitors'] |
| 368 | for health_monitor_id in health_monitors: |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 369 | body = self.client.show_health_monitor(health_monitor_id) |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 370 | self.assertFalse(body['health_monitor']['admin_state_up']) |
Rohan Kanade | eeb2164 | 2014-08-14 12:00:26 +0200 | [diff] [blame] | 371 | (self.client.disassociate_health_monitor_with_pool |
| 372 | (self.health_monitor['id'], self.pool['id'])) |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 373 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 374 | @test.idempotent_id('44ec9b40-b501-41e2-951f-4fc673b15ac0') |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 375 | def test_update_admin_state_up_of_pool(self): |
Rohan Kanade | eeb2164 | 2014-08-14 12:00:26 +0200 | [diff] [blame] | 376 | self.client.update_pool(self.pool['id'], |
| 377 | admin_state_up=False) |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 378 | body = self.client.show_pool(self.pool['id']) |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 379 | pool = body['pool'] |
| 380 | self.assertFalse(pool['admin_state_up']) |
| 381 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 382 | @test.idempotent_id('466a9d4c-37c6-4ea2-b807-133437beb48c') |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 383 | def test_show_vip_associated_with_pool(self): |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 384 | body = self.client.show_pool(self.pool['id']) |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 385 | pool = body['pool'] |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 386 | body = self.client.show_vip(pool['vip_id']) |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 387 | vip = body['vip'] |
| 388 | self.assertEqual(self.vip['name'], vip['name']) |
| 389 | self.assertEqual(self.vip['id'], vip['id']) |
| 390 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 391 | @test.idempotent_id('7b97694e-69d0-4151-b265-e1052a465aa8') |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 392 | def test_show_members_associated_with_pool(self): |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 393 | body = self.client.show_pool(self.pool['id']) |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 394 | members = body['pool']['members'] |
| 395 | for member_id in members: |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 396 | body = self.client.show_member(member_id) |
Ann Kamyshnikova | b665940 | 2014-01-09 17:50:31 +0400 | [diff] [blame] | 397 | self.assertIsNotNone(body['member']['status']) |
| 398 | self.assertEqual(member_id, body['member']['id']) |
| 399 | self.assertIsNotNone(body['member']['admin_state_up']) |
| 400 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 401 | @test.idempotent_id('73ed6f27-595b-4b2c-969c-dbdda6b8ab34') |
Ann Kamyshnikova | 4f5d0b9 | 2014-01-13 16:53:48 +0400 | [diff] [blame] | 402 | def test_update_pool_related_to_member(self): |
| 403 | # Create new pool |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 404 | body = self.client.create_pool(name=data_utils.rand_name("pool-"), |
| 405 | lb_method='ROUND_ROBIN', |
| 406 | protocol='HTTP', |
| 407 | subnet_id=self.subnet['id']) |
Ann Kamyshnikova | 4f5d0b9 | 2014-01-13 16:53:48 +0400 | [diff] [blame] | 408 | new_pool = body['pool'] |
| 409 | self.addCleanup(self.client.delete_pool, new_pool['id']) |
| 410 | # Update member with new pool's id |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 411 | body = self.client.update_member(self.member['id'], |
| 412 | pool_id=new_pool['id']) |
Ann Kamyshnikova | 4f5d0b9 | 2014-01-13 16:53:48 +0400 | [diff] [blame] | 413 | # Confirm with show that pool_id change |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 414 | body = self.client.show_member(self.member['id']) |
Ann Kamyshnikova | 4f5d0b9 | 2014-01-13 16:53:48 +0400 | [diff] [blame] | 415 | member = body['member'] |
| 416 | self.assertEqual(member['pool_id'], new_pool['id']) |
| 417 | # Update member with old pool id, this is needed for clean up |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 418 | body = self.client.update_member(self.member['id'], |
| 419 | pool_id=self.pool['id']) |
Ann Kamyshnikova | 4f5d0b9 | 2014-01-13 16:53:48 +0400 | [diff] [blame] | 420 | |
Chris Hoge | 7579c1a | 2015-02-26 14:12:15 -0800 | [diff] [blame] | 421 | @test.idempotent_id('cf63f071-bbe3-40ba-97a0-a33e11923162') |
Ann Kamyshnikova | 4f5d0b9 | 2014-01-13 16:53:48 +0400 | [diff] [blame] | 422 | def test_update_member_weight(self): |
Rohan Kanade | eeb2164 | 2014-08-14 12:00:26 +0200 | [diff] [blame] | 423 | self.client.update_member(self.member['id'], |
| 424 | weight=2) |
David Kranz | 34e8812 | 2014-12-11 15:24:05 -0500 | [diff] [blame] | 425 | body = self.client.show_member(self.member['id']) |
Ann Kamyshnikova | 4f5d0b9 | 2014-01-13 16:53:48 +0400 | [diff] [blame] | 426 | member = body['member'] |
| 427 | self.assertEqual(2, member['weight']) |
| 428 | |
raiesmh08 | 02d04b0 | 2013-09-16 12:10:10 +0530 | [diff] [blame] | 429 | |
Matthew Treinish | c49fcbe | 2015-02-05 23:37:34 -0500 | [diff] [blame] | 430 | @decorators.skip_because(bug="1402007") |
Sergey Shnaidman | 97e6a0f | 2014-11-12 20:00:53 +0300 | [diff] [blame] | 431 | class LoadBalancerIpV6TestJSON(LoadBalancerTestJSON): |
| 432 | _ip_version = 6 |