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])) |