Merge "Add router to resources section of yaml output"
diff --git a/requirements.txt b/requirements.txt
index 7fe8858..cb0031d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,17 +4,17 @@
 pbr>=0.11,<2.0
 anyjson>=0.3.3
 httplib2>=0.7.5
-jsonschema>=2.0.0,<3.0.0
+jsonschema>=2.0.0,<3.0.0,!=2.5.0
 testtools>=0.9.36,!=1.2.0
 boto>=2.32.1
 paramiko>=1.13.0
 netaddr>=0.7.12
 testrepository>=0.0.18
 pyOpenSSL>=0.11
-oslo.concurrency>=1.8.0         # Apache-2.0
+oslo.concurrency>=2.0.0         # Apache-2.0
 oslo.config>=1.11.0  # Apache-2.0
 oslo.i18n>=1.5.0  # Apache-2.0
-oslo.log>=1.0.0  # Apache-2.0
+oslo.log>=1.2.0  # Apache-2.0
 oslo.serialization>=1.4.0               # Apache-2.0
 oslo.utils>=1.4.0                       # Apache-2.0
 six>=1.9.0
diff --git a/tempest/api/compute/admin/test_hosts.py b/tempest/api/compute/admin/test_hosts.py
index a91c9bf..9fee2a1 100644
--- a/tempest/api/compute/admin/test_hosts.py
+++ b/tempest/api/compute/admin/test_hosts.py
@@ -69,7 +69,7 @@
 
         for host in hosts:
             hostname = host['host_name']
-            resources = self.client.show_host_detail(hostname)
+            resources = self.client.show_host(hostname)
             self.assertTrue(len(resources) >= 1)
             host_resource = resources[0]['resource']
             self.assertIsNotNone(host_resource)
diff --git a/tempest/api/compute/admin/test_hosts_negative.py b/tempest/api/compute/admin/test_hosts_negative.py
index 042d1fb..930d686 100644
--- a/tempest/api/compute/admin/test_hosts_negative.py
+++ b/tempest/api/compute/admin/test_hosts_negative.py
@@ -48,7 +48,7 @@
     def test_show_host_detail_with_nonexistent_hostname(self):
         nonexitent_hostname = data_utils.rand_name('rand_hostname')
         self.assertRaises(lib_exc.NotFound,
-                          self.client.show_host_detail, nonexitent_hostname)
+                          self.client.show_host, nonexitent_hostname)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('19ebe09c-bfd4-4b7c-81a2-e2e0710f59cc')
@@ -56,7 +56,7 @@
         hostname = self._get_host_name()
 
         self.assertRaises(lib_exc.Forbidden,
-                          self.non_admin_client.show_host_detail,
+                          self.non_admin_client.show_host,
                           hostname)
 
     @test.attr(type=['negative'])
diff --git a/tempest/api/compute/admin/test_hypervisor.py b/tempest/api/compute/admin/test_hypervisor.py
index 9483f52..47f66af 100644
--- a/tempest/api/compute/admin/test_hypervisor.py
+++ b/tempest/api/compute/admin/test_hypervisor.py
@@ -30,7 +30,7 @@
 
     def _list_hypervisors(self):
         # List of hypervisors
-        hypers = self.client.get_hypervisor_list()
+        hypers = self.client.list_hypervisors()
         return hypers
 
     def assertHypervisors(self, hypers):
@@ -45,7 +45,7 @@
     @test.idempotent_id('1e7fdac2-b672-4ad1-97a4-bad0e3030118')
     def test_get_hypervisor_list_details(self):
         # Display the details of the all hypervisor
-        hypers = self.client.get_hypervisor_list_details()
+        hypers = self.client.list_hypervisors(detail=True)
         self.assertHypervisors(hypers)
 
     @test.idempotent_id('94ff9eae-a183-428e-9cdb-79fde71211cc')
@@ -54,7 +54,7 @@
         hypers = self._list_hypervisors()
         self.assertHypervisors(hypers)
 
-        details = self.client.get_hypervisor_show_details(hypers[0]['id'])
+        details = self.client.show_hypervisor(hypers[0]['id'])
         self.assertTrue(len(details) > 0)
         self.assertEqual(details['hypervisor_hostname'],
                          hypers[0]['hypervisor_hostname'])
@@ -66,13 +66,13 @@
         self.assertHypervisors(hypers)
 
         hostname = hypers[0]['hypervisor_hostname']
-        hypervisors = self.client.get_hypervisor_servers(hostname)
+        hypervisors = self.client.list_servers_on_hypervisor(hostname)
         self.assertTrue(len(hypervisors) > 0)
 
     @test.idempotent_id('797e4f28-b6e0-454d-a548-80cc77c00816')
     def test_get_hypervisor_stats(self):
         # Verify the stats of the all hypervisor
-        stats = self.client.get_hypervisor_stats()
+        stats = self.client.show_hypervisor_statistics()
         self.assertTrue(len(stats) > 0)
 
     @test.idempotent_id('91a50d7d-1c2b-4f24-b55a-a1fe20efca70')
@@ -88,7 +88,7 @@
         ironic_only = True
         hypers_without_ironic = []
         for hyper in hypers:
-            details = self.client.get_hypervisor_show_details(hypers[0]['id'])
+            details = self.client.show_hypervisor(hypers[0]['id'])
             if details['hypervisor_type'] != 'ironic':
                 hypers_without_ironic.append(hyper)
                 ironic_only = False
@@ -102,7 +102,7 @@
             # because hypervisors might be disabled, this loops looking
             # for any good hit.
             try:
-                uptime = self.client.get_hypervisor_uptime(hyper['id'])
+                uptime = self.client.show_hypervisor_uptime(hyper['id'])
                 if len(uptime) > 0:
                     has_valid_uptime = True
                     break
diff --git a/tempest/api/compute/admin/test_hypervisor_negative.py b/tempest/api/compute/admin/test_hypervisor_negative.py
index 24b0090..a5c2f0d 100644
--- a/tempest/api/compute/admin/test_hypervisor_negative.py
+++ b/tempest/api/compute/admin/test_hypervisor_negative.py
@@ -36,7 +36,7 @@
 
     def _list_hypervisors(self):
         # List of hypervisors
-        hypers = self.client.get_hypervisor_list()
+        hypers = self.client.list_hypervisors()
         return hypers
 
     @test.attr(type=['negative'])
@@ -46,7 +46,7 @@
 
         self.assertRaises(
             lib_exc.NotFound,
-            self.client.get_hypervisor_show_details,
+            self.client.show_hypervisor,
             nonexistent_hypervisor_id)
 
     @test.attr(type=['negative'])
@@ -57,7 +57,7 @@
 
         self.assertRaises(
             lib_exc.Forbidden,
-            self.non_adm_client.get_hypervisor_show_details,
+            self.non_adm_client.show_hypervisor,
             hypers[0]['id'])
 
     @test.attr(type=['negative'])
@@ -68,7 +68,7 @@
 
         self.assertRaises(
             lib_exc.Forbidden,
-            self.non_adm_client.get_hypervisor_servers,
+            self.non_adm_client.list_servers_on_hypervisor,
             hypers[0]['id'])
 
     @test.attr(type=['negative'])
@@ -78,7 +78,7 @@
 
         self.assertRaises(
             lib_exc.NotFound,
-            self.client.get_hypervisor_servers,
+            self.client.list_servers_on_hypervisor,
             nonexistent_hypervisor_id)
 
     @test.attr(type=['negative'])
@@ -86,7 +86,7 @@
     def test_get_hypervisor_stats_with_non_admin_user(self):
         self.assertRaises(
             lib_exc.Forbidden,
-            self.non_adm_client.get_hypervisor_stats)
+            self.non_adm_client.show_hypervisor_statistics)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('f60aa680-9a3a-4c7d-90e1-fae3a4891303')
@@ -95,7 +95,7 @@
 
         self.assertRaises(
             lib_exc.NotFound,
-            self.client.get_hypervisor_uptime,
+            self.client.show_hypervisor_uptime,
             nonexistent_hypervisor_id)
 
     @test.attr(type=['negative'])
@@ -106,7 +106,7 @@
 
         self.assertRaises(
             lib_exc.Forbidden,
-            self.non_adm_client.get_hypervisor_uptime,
+            self.non_adm_client.show_hypervisor_uptime,
             hypers[0]['id'])
 
     @test.attr(type=['negative'])
@@ -115,7 +115,7 @@
         # List of hypervisor and available services with non admin user
         self.assertRaises(
             lib_exc.Forbidden,
-            self.non_adm_client.get_hypervisor_list)
+            self.non_adm_client.list_hypervisors)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('dc02db05-e801-4c5f-bc8e-d915290ab345')
@@ -123,7 +123,7 @@
         # List of hypervisor details and available services with non admin user
         self.assertRaises(
             lib_exc.Forbidden,
-            self.non_adm_client.get_hypervisor_list_details)
+            self.non_adm_client.list_hypervisors, detail=True)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('19a45cc1-1000-4055-b6d2-28e8b2ec4faa')
diff --git a/tempest/api/compute/limits/test_absolute_limits.py b/tempest/api/compute/limits/test_absolute_limits.py
index 974814c..06a77cc 100644
--- a/tempest/api/compute/limits/test_absolute_limits.py
+++ b/tempest/api/compute/limits/test_absolute_limits.py
@@ -27,7 +27,7 @@
     @test.idempotent_id('b54c66af-6ab6-4cf0-a9e5-a0cb58d75e0b')
     def test_absLimits_get(self):
         # To check if all limits are present in the response
-        absolute_limits = self.client.get_absolute_limits()
+        absolute_limits = self.client.show_limits()
         expected_elements = ['maxImageMeta', 'maxPersonality',
                              'maxPersonalitySize',
                              'maxServerMeta', 'maxTotalCores',
diff --git a/tempest/api/image/admin/v2/test_images.py b/tempest/api/image/admin/v2/test_images.py
index 83efc7d..1608b76 100644
--- a/tempest/api/image/admin/v2/test_images.py
+++ b/tempest/api/image/admin/v2/test_images.py
@@ -44,7 +44,7 @@
         self.addCleanup(self.client.delete_image, image_id)
         # upload an image file
         image_file = moves.cStringIO(data_utils.random_bytes())
-        self.client.store_image(image_id, image_file)
+        self.client.store_image_file(image_id, image_file)
         # deactivate image
         self.admin_client.deactivate_image(image_id)
         body = self.client.show_image(image_id)
diff --git a/tempest/api/image/v2/test_images.py b/tempest/api/image/v2/test_images.py
index 8cccddd..2859cfe 100644
--- a/tempest/api/image/v2/test_images.py
+++ b/tempest/api/image/v2/test_images.py
@@ -56,7 +56,7 @@
         # Now try uploading an image file
         file_content = data_utils.random_bytes()
         image_file = moves.cStringIO(file_content)
-        self.client.store_image(image_id, image_file)
+        self.client.store_image_file(image_id, image_file)
 
         # Now try to get image details
         body = self.client.show_image(image_id)
@@ -67,7 +67,7 @@
         self.assertEqual(1024, body.get('size'))
 
         # Now try get image file
-        body = self.client.get_image_file(image_id)
+        body = self.client.load_image_file(image_id)
         self.assertEqual(file_content, body.data)
 
     @test.attr(type='smoke')
@@ -109,7 +109,7 @@
 
         # Now try uploading an image file
         image_file = moves.cStringIO(data_utils.random_bytes())
-        self.client.store_image(image_id, image_file)
+        self.client.store_image_file(image_id, image_file)
 
         # Update Image
         new_image_name = data_utils.rand_name('new-image')
@@ -156,7 +156,7 @@
                                 disk_format=disk_format,
                                 visibility='private')
         image_id = body['id']
-        cls.client.store_image(image_id, data=image_file)
+        cls.client.store_image_file(image_id, data=image_file)
 
         return image_id
 
@@ -244,12 +244,12 @@
     def test_get_image_schema(self):
         # Test to get image schema
         schema = "image"
-        body = self.client.get_schema(schema)
+        body = self.client.show_schema(schema)
         self.assertEqual("image", body['name'])
 
     @test.idempotent_id('25c8d7b2-df21-460f-87ac-93130bcdc684')
     def test_get_images_schema(self):
         # Test to get images schema
         schema = "images"
-        body = self.client.get_schema(schema)
+        body = self.client.show_schema(schema)
         self.assertEqual("images", body['name'])
diff --git a/tempest/api/image/v2/test_images_member.py b/tempest/api/image/v2/test_images_member.py
index eb6ffeb..d497005 100644
--- a/tempest/api/image/v2/test_images_member.py
+++ b/tempest/api/image/v2/test_images_member.py
@@ -82,10 +82,10 @@
 
     @test.idempotent_id('634dcc3f-f6e2-4409-b8fd-354a0bb25d83')
     def test_get_image_member_schema(self):
-        body = self.os_img_client.get_schema("member")
+        body = self.os_img_client.show_schema("member")
         self.assertEqual("member", body['name'])
 
     @test.idempotent_id('6ae916ef-1052-4e11-8d36-b3ae14853cbb')
     def test_get_image_members_schema(self):
-        body = self.os_img_client.get_schema("members")
+        body = self.os_img_client.show_schema("members")
         self.assertEqual("members", body['name'])
diff --git a/tempest/api/network/test_extensions.py b/tempest/api/network/test_extensions.py
index e9f1bf4..be7174b 100644
--- a/tempest/api/network/test_extensions.py
+++ b/tempest/api/network/test_extensions.py
@@ -57,7 +57,6 @@
             self.assertIn('updated', ext_details.keys())
             self.assertIn('name', ext_details.keys())
             self.assertIn('description', ext_details.keys())
-            self.assertIn('namespace', ext_details.keys())
             self.assertIn('links', ext_details.keys())
             self.assertIn('alias', ext_details.keys())
             self.assertEqual(ext_details['name'], ext_name)
diff --git a/tempest/api/telemetry/test_telemetry_notification_api.py b/tempest/api/telemetry/test_telemetry_notification_api.py
index 73a5fd4..d49b2ba 100644
--- a/tempest/api/telemetry/test_telemetry_notification_api.py
+++ b/tempest/api/telemetry/test_telemetry_notification_api.py
@@ -67,8 +67,8 @@
     def test_check_glance_v2_notifications(self):
         body = self.create_image(self.image_client_v2)
 
-        self.image_client_v2.store_image(body['id'], "file")
-        self.image_client_v2.get_image_file(body['id'])
+        self.image_client_v2.store_image_file(body['id'], "file")
+        self.image_client_v2.load_image_file(body['id'])
 
         query = 'resource', 'eq', body['id']
 
diff --git a/tempest/cmd/cleanup_service.py b/tempest/cmd/cleanup_service.py
index eb6f143..4dc03f9 100644
--- a/tempest/cmd/cleanup_service.py
+++ b/tempest/cmd/cleanup_service.py
@@ -377,7 +377,7 @@
 
     def dry_run(self):
         client = self.limits_client
-        quotas = client.get_absolute_limits()
+        quotas = client.show_limits()
         self.data['compute_quotas'] = quotas
 
 
diff --git a/tempest/cmd/javelin.py b/tempest/cmd/javelin.py
index d3426c6..5871628 100755
--- a/tempest/cmd/javelin.py
+++ b/tempest/cmd/javelin.py
@@ -651,13 +651,13 @@
             name, fname = _resolve_image(image, 'aki')
             aki = client.images.create_image(
                 'javelin_' + name, 'aki', 'aki')
-            client.images.store_image(aki.get('id'), open(fname, 'r'))
+            client.images.store_image_file(aki.get('id'), open(fname, 'r'))
             extras['kernel_id'] = aki.get('id')
 
             name, fname = _resolve_image(image, 'ari')
             ari = client.images.create_image(
                 'javelin_' + name, 'ari', 'ari')
-            client.images.store_image(ari.get('id'), open(fname, 'r'))
+            client.images.store_image_file(ari.get('id'), open(fname, 'r'))
             extras['ramdisk_id'] = ari.get('id')
 
         _, fname = _resolve_image(image, 'file')
@@ -665,7 +665,7 @@
             image['name'], image['container_format'],
             image['disk_format'], **extras)
         image_id = body.get('id')
-        client.images.store_image(image_id, open(fname, 'r'))
+        client.images.store_image_file(image_id, open(fname, 'r'))
 
 
 def destroy_images(images):
diff --git a/tempest/common/fixed_network.py b/tempest/common/fixed_network.py
index 2c6e334..18386ce 100644
--- a/tempest/common/fixed_network.py
+++ b/tempest/common/fixed_network.py
@@ -14,7 +14,6 @@
 from oslo_log import log as logging
 
 from tempest_lib.common.utils import misc as misc_utils
-from tempest_lib import exceptions as lib_exc
 
 from tempest import config
 from tempest import exceptions
@@ -41,19 +40,7 @@
     if not name:
         raise exceptions.InvalidConfiguration()
 
-    try:
-        networks = compute_networks_client.list_networks(name=name)
-    except lib_exc.NotFound:
-        # In case of nova network, if the fixed_network_name is not
-        # owned by the tenant, and the network client is not an admin
-        # one, list_networks will not find it
-        msg = ('Unable to find network %s. '
-               'Starting instance without specifying a network.' %
-               name)
-        if caller:
-            msg = '(%s) %s' % (caller, msg)
-        LOG.info(msg)
-        raise exceptions.InvalidConfiguration()
+    networks = compute_networks_client.list_networks(name=name)
 
     # Check that a network exists, else raise an InvalidConfigurationException
     if len(networks) == 1:
diff --git a/tempest/services/compute/json/hosts_client.py b/tempest/services/compute/json/hosts_client.py
index 287482f..223b80f 100644
--- a/tempest/services/compute/json/hosts_client.py
+++ b/tempest/services/compute/json/hosts_client.py
@@ -34,7 +34,7 @@
         self.validate_response(schema.list_hosts, resp, body)
         return service_client.ResponseBodyList(resp, body['hosts'])
 
-    def show_host_detail(self, hostname):
+    def show_host(self, hostname):
         """Show detail information for the host."""
 
         resp, body = self.get("os-hosts/%s" % str(hostname))
diff --git a/tempest/services/compute/json/hypervisor_client.py b/tempest/services/compute/json/hypervisor_client.py
index 49ac266..2f9f701 100644
--- a/tempest/services/compute/json/hypervisor_client.py
+++ b/tempest/services/compute/json/hypervisor_client.py
@@ -21,42 +21,41 @@
 
 class HypervisorClientJSON(service_client.ServiceClient):
 
-    def get_hypervisor_list(self):
+    def list_hypervisors(self, detail=False):
         """List hypervisors information."""
-        resp, body = self.get('os-hypervisors')
+        url = 'os-hypervisors'
+        _schema = schema.list_search_hypervisors
+        if detail:
+            url += '/detail'
+            _schema = schema.list_hypervisors_detail
+
+        resp, body = self.get(url)
         body = json.loads(body)
-        self.validate_response(schema.list_search_hypervisors, resp, body)
+        self.validate_response(_schema, resp, body)
         return service_client.ResponseBodyList(resp, body['hypervisors'])
 
-    def get_hypervisor_list_details(self):
-        """Show detailed hypervisors information."""
-        resp, body = self.get('os-hypervisors/detail')
-        body = json.loads(body)
-        self.validate_response(schema.list_hypervisors_detail, resp, body)
-        return service_client.ResponseBodyList(resp, body['hypervisors'])
-
-    def get_hypervisor_show_details(self, hyper_id):
+    def show_hypervisor(self, hyper_id):
         """Display the details of the specified hypervisor."""
         resp, body = self.get('os-hypervisors/%s' % hyper_id)
         body = json.loads(body)
         self.validate_response(schema.get_hypervisor, resp, body)
         return service_client.ResponseBody(resp, body['hypervisor'])
 
-    def get_hypervisor_servers(self, hyper_name):
+    def list_servers_on_hypervisor(self, hyper_name):
         """List instances belonging to the specified hypervisor."""
         resp, body = self.get('os-hypervisors/%s/servers' % hyper_name)
         body = json.loads(body)
         self.validate_response(schema.get_hypervisors_servers, resp, body)
         return service_client.ResponseBodyList(resp, body['hypervisors'])
 
-    def get_hypervisor_stats(self):
+    def show_hypervisor_statistics(self):
         """Get hypervisor statistics over all compute nodes."""
         resp, body = self.get('os-hypervisors/statistics')
         body = json.loads(body)
         self.validate_response(schema.get_hypervisor_statistics, resp, body)
         return service_client.ResponseBody(resp, body['hypervisor_statistics'])
 
-    def get_hypervisor_uptime(self, hyper_id):
+    def show_hypervisor_uptime(self, hyper_id):
         """Display the uptime of the specified hypervisor."""
         resp, body = self.get('os-hypervisors/%s/uptime' % hyper_id)
         body = json.loads(body)
diff --git a/tempest/services/compute/json/limits_client.py b/tempest/services/compute/json/limits_client.py
index d2aaec6..347467d 100644
--- a/tempest/services/compute/json/limits_client.py
+++ b/tempest/services/compute/json/limits_client.py
@@ -21,7 +21,7 @@
 
 class LimitsClientJSON(service_client.ServiceClient):
 
-    def get_absolute_limits(self):
+    def show_limits(self):
         resp, body = self.get("limits")
         body = json.loads(body)
         self.validate_response(schema.get_limit, resp, body)
diff --git a/tempest/services/image/v2/json/image_client.py b/tempest/services/image/v2/json/image_client.py
index 9e37f6e..383c72b 100644
--- a/tempest/services/image/v2/json/image_client.py
+++ b/tempest/services/image/v2/json/image_client.py
@@ -52,7 +52,7 @@
 
     def _validate_schema(self, body, type='image'):
         if type in ['image', 'images']:
-            schema = self.get_schema(type)
+            schema = self.show_schema(type)
         else:
             raise ValueError("%s is not a valid schema type" % type)
 
@@ -145,7 +145,7 @@
         """Returns the primary type of resource this client works with."""
         return 'image'
 
-    def store_image(self, image_id, data):
+    def store_image_file(self, image_id, data):
         url = 'v2/images/%s/file' % image_id
         headers = {'Content-Type': 'application/octet-stream'}
         resp, body = self.http.raw_request('PUT', url, headers=headers,
@@ -153,7 +153,7 @@
         self.expected_success(204, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def get_image_file(self, image_id):
+    def load_image_file(self, image_id):
         url = 'v2/images/%s/file' % image_id
         resp, body = self.get(url)
         self.expected_success(200, resp.status)
@@ -206,7 +206,7 @@
         self.expected_success(204, resp.status)
         return service_client.ResponseBody(resp)
 
-    def get_schema(self, schema):
+    def show_schema(self, schema):
         url = 'v2/schemas/%s' % schema
         resp, body = self.get(url)
         self.expected_success(200, resp.status)
diff --git a/tempest/tests/cmd/test_javelin.py b/tempest/tests/cmd/test_javelin.py
index f98f8ba..944fd99 100644
--- a/tempest/tests/cmd/test_javelin.py
+++ b/tempest/tests/cmd/test_javelin.py
@@ -152,7 +152,7 @@
                                                 self.fake_object['format'],
                                                 self.fake_object['format'])
 
-        mocked_function = self.fake_client.images.store_image
+        mocked_function = self.fake_client.images.store_image_file
         fake_image_id = self.fake_object['body'].get('id')
         mocked_function.assert_called_once_with(fake_image_id, open_mock())
 
diff --git a/test-requirements.txt b/test-requirements.txt
index 32f33bc..7169610 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -10,4 +10,4 @@
 mock>=1.0
 coverage>=3.6
 oslotest>=1.5.1  # Apache-2.0
-stevedore>=1.3.0  # Apache-2.0
+stevedore>=1.5.0  # Apache-2.0