| Jay Pipes | 13b479b | 2012-06-11 14:52:27 -0400 | [diff] [blame] | 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 | 
|  | 2 |  | 
|  | 3 | # Copyright 2012 OpenStack, LLC | 
|  | 4 | # All Rights Reserved. | 
|  | 5 | # | 
|  | 6 | #    Licensed under the Apache License, Version 2.0 (the "License"); you may | 
|  | 7 | #    not use this file except in compliance with the License. You may obtain | 
|  | 8 | #    a copy of the License at | 
|  | 9 | # | 
|  | 10 | #         http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 11 | # | 
|  | 12 | #    Unless required by applicable law or agreed to in writing, software | 
|  | 13 | #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | 
|  | 14 | #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | 
|  | 15 | #    License for the specific language governing permissions and limitations | 
|  | 16 | #    under the License. | 
|  | 17 |  | 
| Jay Pipes | 13b479b | 2012-06-11 14:52:27 -0400 | [diff] [blame] | 18 | from tempest.common.utils.data_utils import rand_name | 
| Matthew Treinish | a83a16e | 2012-12-07 13:44:02 -0500 | [diff] [blame] | 19 | from tempest import exceptions | 
| Chris Yeoh | 9465b0b | 2013-02-09 22:19:15 +1030 | [diff] [blame] | 20 | from tempest.test import attr | 
| Attila Fazekas | 19044d5 | 2013-02-16 07:35:06 +0100 | [diff] [blame] | 21 | from tempest.tests.compute import base | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 22 |  | 
|  | 23 |  | 
| Attila Fazekas | 19044d5 | 2013-02-16 07:35:06 +0100 | [diff] [blame] | 24 | class ServerAddressesTest(base.BaseComputeTest): | 
|  | 25 | _interface = 'json' | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 26 |  | 
|  | 27 | @classmethod | 
|  | 28 | def setUpClass(cls): | 
| Jay Pipes | f38eaac | 2012-06-21 13:37:35 -0400 | [diff] [blame] | 29 | super(ServerAddressesTest, cls).setUpClass() | 
| Jay Pipes | 13b479b | 2012-06-11 14:52:27 -0400 | [diff] [blame] | 30 | cls.client = cls.servers_client | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 31 |  | 
|  | 32 | cls.name = rand_name('server') | 
|  | 33 | resp, cls.server = cls.client.create_server(cls.name, | 
| Zhongyue Luo | 79d8d36 | 2012-09-25 13:49:27 +0800 | [diff] [blame] | 34 | cls.image_ref, | 
|  | 35 | cls.flavor_ref) | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 36 | cls.client.wait_for_server_status(cls.server['id'], 'ACTIVE') | 
|  | 37 |  | 
|  | 38 | @classmethod | 
|  | 39 | def tearDownClass(cls): | 
|  | 40 | cls.client.delete_server(cls.server['id']) | 
| Jay Pipes | f38eaac | 2012-06-21 13:37:35 -0400 | [diff] [blame] | 41 | super(ServerAddressesTest, cls).tearDownClass() | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 42 |  | 
|  | 43 | @attr(type='negative', category='server-addresses') | 
|  | 44 | def test_list_server_addresses_invalid_server_id(self): | 
| Sean Dague | 4dd2c0b | 2013-01-03 17:50:28 -0500 | [diff] [blame] | 45 | # List addresses request should fail if server id not in system | 
| Chris Yeoh | e04628e | 2013-02-25 17:12:21 +1030 | [diff] [blame^] | 46 | self.assertRaises(exceptions.NotFound, self.client.list_addresses, | 
|  | 47 | '999') | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 48 |  | 
|  | 49 | @attr(type='negative', category='server-addresses') | 
|  | 50 | def test_list_server_addresses_by_network_neg(self): | 
| Sean Dague | 4dd2c0b | 2013-01-03 17:50:28 -0500 | [diff] [blame] | 51 | # List addresses by network should fail if network name not valid | 
| Chris Yeoh | e04628e | 2013-02-25 17:12:21 +1030 | [diff] [blame^] | 52 | self.assertRaises(exceptions.NotFound, | 
|  | 53 | self.client.list_addresses_by_network, | 
|  | 54 | self.server['id'], 'invalid') | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 55 |  | 
|  | 56 | @attr(type='smoke', category='server-addresses') | 
|  | 57 | def test_list_server_addresses(self): | 
| Sean Dague | 4dd2c0b | 2013-01-03 17:50:28 -0500 | [diff] [blame] | 58 | # All public and private addresses for | 
|  | 59 | # a server should be returned | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 60 |  | 
|  | 61 | resp, addresses = self.client.list_addresses(self.server['id']) | 
|  | 62 | self.assertEqual('200', resp['status']) | 
|  | 63 |  | 
|  | 64 | # We do not know the exact network configuration, but an instance | 
|  | 65 | # should at least have a single public or private address | 
| Tiago Mello | 7b1f402 | 2013-01-30 17:07:18 -0500 | [diff] [blame] | 66 | self.assertTrue(len(addresses) >= 1) | 
| Julien Danjou | 24ea4ad | 2012-04-11 16:15:00 +0200 | [diff] [blame] | 67 | for network_name, network_addresses in addresses.iteritems(): | 
| Tiago Mello | 7b1f402 | 2013-01-30 17:07:18 -0500 | [diff] [blame] | 68 | self.assertTrue(len(network_addresses) >= 1) | 
| Julien Danjou | 24ea4ad | 2012-04-11 16:15:00 +0200 | [diff] [blame] | 69 | for address in network_addresses: | 
|  | 70 | self.assertTrue(address['addr']) | 
|  | 71 | self.assertTrue(address['version']) | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 72 |  | 
|  | 73 | @attr(type='smoke', category='server-addresses') | 
|  | 74 | def test_list_server_addresses_by_network(self): | 
| Sean Dague | 4dd2c0b | 2013-01-03 17:50:28 -0500 | [diff] [blame] | 75 | # Providing a network type should filter | 
|  | 76 | # the addresses return by that type | 
| Daryl Walleck | 2148b62 | 2012-02-22 00:42:06 -0600 | [diff] [blame] | 77 |  | 
|  | 78 | resp, addresses = self.client.list_addresses(self.server['id']) | 
|  | 79 |  | 
|  | 80 | # Once again we don't know the environment's exact network config, | 
|  | 81 | # but the response for each individual network should be the same | 
|  | 82 | # as the partial result of the full address list | 
|  | 83 | id = self.server['id'] | 
|  | 84 | for addr_type in addresses: | 
|  | 85 | resp, addr = self.client.list_addresses_by_network(id, addr_type) | 
|  | 86 | self.assertEqual('200', resp['status']) | 
|  | 87 |  | 
|  | 88 | addr = addr[addr_type] | 
|  | 89 | for address in addresses[addr_type]: | 
|  | 90 | self.assertTrue(any([a for a in addr if a == address])) |