Addresses lp#902371

* Adds fixed ip tests
* Adds compute subdirectory for tests

Change-Id: Ie460cfe5d7d524949a6e4966404174989177ff18
diff --git a/tempest/tests/compute/test_server_addresses.py b/tempest/tests/compute/test_server_addresses.py
new file mode 100644
index 0000000..3416baf
--- /dev/null
+++ b/tempest/tests/compute/test_server_addresses.py
@@ -0,0 +1,83 @@
+from nose.plugins.attrib import attr
+import unittest2 as unittest
+from tempest import openstack
+from tempest.common.utils.data_utils import rand_name
+from tempest import exceptions
+
+
+class ServerAddressesTest(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.os = openstack.Manager()
+        cls.client = cls.os.servers_client
+        cls.config = cls.os.config
+        cls.image_ref = cls.config.env.image_ref
+        cls.flavor_ref = cls.config.env.flavor_ref
+
+        cls.name = rand_name('server')
+        resp, cls.server = cls.client.create_server(cls.name,
+                                                 cls.image_ref,
+                                                 cls.flavor_ref)
+        cls.client.wait_for_server_status(cls.server['id'], 'ACTIVE')
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.client.delete_server(cls.server['id'])
+
+    @attr(type='negative', category='server-addresses')
+    def test_list_server_addresses_invalid_server_id(self):
+        """List addresses request should fail if server id not in system"""
+
+        try:
+            self.client.list_addresses('999')
+        except exceptions.NotFound:
+            pass
+        else:
+            self.fail('The server rebuild for a non existing server should not'
+                      ' be allowed')
+
+    @attr(type='negative', category='server-addresses')
+    def test_list_server_addresses_by_network_neg(self):
+        """List addresses by network should fail if network name not valid"""
+
+        try:
+            self.client.list_addresses_by_network(self.server['id'], 'invalid')
+        except exceptions.NotFound:
+            pass
+        else:
+            self.fail('The server rebuild for a non existing server should not'
+                      ' be allowed')
+
+    @attr(type='smoke', category='server-addresses')
+    def test_list_server_addresses(self):
+        """All public and private addresses for
+        a server should be returned"""
+
+        resp, addresses = self.client.list_addresses(self.server['id'])
+        self.assertEqual('200', resp['status'])
+
+        # We do not know the exact network configuration, but an instance
+        # should at least have a single public or private address
+        self.assertTrue('public' in addresses and len(addresses['public']) > 0
+                        or 'private' in addresses
+                        and len(addresses['private']) > 0)
+
+    @attr(type='smoke', category='server-addresses')
+    def test_list_server_addresses_by_network(self):
+        """Providing a network type should filter
+        the addresses return by that type"""
+
+        resp, addresses = self.client.list_addresses(self.server['id'])
+
+        # Once again we don't know the environment's exact network config,
+        # but the response for each individual network should be the same
+        # as the partial result of the full address list
+        id = self.server['id']
+        for addr_type in addresses:
+            resp, addr = self.client.list_addresses_by_network(id, addr_type)
+            self.assertEqual('200', resp['status'])
+
+            addr = addr[addr_type]
+            for address in addresses[addr_type]:
+                self.assertTrue(any([a for a in addr if a == address]))