Return complete response from compute/agent_client

Currently compute agent_client returns Response by removing
top key from Response.
For example- return service_client.ResponseBody(resp, body['agents'])

As service clients are in direction to move to Tempest-lib, all
service clients should return Response without any truncation.
One good example is Resource pagination links which are lost with current
way of return value. Resource pagination links are present in parallel
(not inside) to top key of Response.

This patch makes compute agent_client to return complete Response body.

Implements: blueprint method-return-value-and-move-service-clients-to-lib

Change-Id: I65c60ab85945e66bd696ec4d89ad73cc4f7f2004
diff --git a/tempest/api/compute/admin/test_agents.py b/tempest/api/compute/admin/test_agents.py
index d9a1ee5..38f5fb7 100644
--- a/tempest/api/compute/admin/test_agents.py
+++ b/tempest/api/compute/admin/test_agents.py
@@ -38,7 +38,7 @@
             hypervisor='common', os='linux', architecture='x86_64',
             version='7.0', url='xxx://xxxx/xxx/xxx',
             md5hash='add6bb58e139be103324d04d82d8f545')
-        body = self.client.create_agent(**params)
+        body = self.client.create_agent(**params)['agent']
         self.agent_id = body['agent_id']
 
     def tearDown(self):
@@ -67,7 +67,7 @@
             hypervisor='kvm', os='win', architecture='x86',
             version='7.0', url='xxx://xxxx/xxx/xxx',
             md5hash='add6bb58e139be103324d04d82d8f545')
-        body = self.client.create_agent(**params)
+        body = self.client.create_agent(**params)['agent']
         self.addCleanup(self.client.delete_agent, body['agent_id'])
         for expected_item, value in params.items():
             self.assertEqual(value, body[expected_item])
@@ -78,7 +78,7 @@
         params = self._param_helper(
             version='8.0', url='xxx://xxxx/xxx/xxx2',
             md5hash='add6bb58e139be103324d04d82d8f547')
-        body = self.client.update_agent(self.agent_id, **params)
+        body = self.client.update_agent(self.agent_id, **params)['agent']
         for expected_item, value in params.items():
             self.assertEqual(value, body[expected_item])
 
@@ -88,13 +88,13 @@
         self.client.delete_agent(self.agent_id)
 
         # Verify the list doesn't contain the deleted agent.
-        agents = self.client.list_agents()
+        agents = self.client.list_agents()['agents']
         self.assertNotIn(self.agent_id, map(lambda x: x['agent_id'], agents))
 
     @test.idempotent_id('6a326c69-654b-438a-80a3-34bcc454e138')
     def test_list_agents(self):
         # List all agents.
-        agents = self.client.list_agents()
+        agents = self.client.list_agents()['agents']
         self.assertTrue(len(agents) > 0, 'Cannot get any agents.(%s)' % agents)
         self.assertIn(self.agent_id, map(lambda x: x['agent_id'], agents))
 
@@ -105,11 +105,12 @@
             hypervisor='xen', os='linux', architecture='x86',
             version='7.0', url='xxx://xxxx/xxx/xxx1',
             md5hash='add6bb58e139be103324d04d82d8f546')
-        agent_xen = self.client.create_agent(**params)
+        agent_xen = self.client.create_agent(**params)['agent']
         self.addCleanup(self.client.delete_agent, agent_xen['agent_id'])
 
         agent_id_xen = agent_xen['agent_id']
-        agents = self.client.list_agents(hypervisor=agent_xen['hypervisor'])
+        agents = (self.client.list_agents(hypervisor=agent_xen['hypervisor'])
+                  ['agents'])
         self.assertTrue(len(agents) > 0, 'Cannot get any agents.(%s)' % agents)
         self.assertIn(agent_id_xen, map(lambda x: x['agent_id'], agents))
         self.assertNotIn(self.agent_id, map(lambda x: x['agent_id'], agents))
diff --git a/tempest/services/compute/json/agents_client.py b/tempest/services/compute/json/agents_client.py
index 1a1d832..d38c8cd 100644
--- a/tempest/services/compute/json/agents_client.py
+++ b/tempest/services/compute/json/agents_client.py
@@ -32,7 +32,7 @@
         resp, body = self.get(url)
         body = json.loads(body)
         self.validate_response(schema.list_agents, resp, body)
-        return service_client.ResponseBodyList(resp, body['agents'])
+        return service_client.ResponseBody(resp, body)
 
     def create_agent(self, **kwargs):
         """Create an agent build."""
@@ -40,7 +40,7 @@
         resp, body = self.post('os-agents', post_body)
         body = json.loads(body)
         self.validate_response(schema.create_agent, resp, body)
-        return service_client.ResponseBody(resp, body['agent'])
+        return service_client.ResponseBody(resp, body)
 
     def delete_agent(self, agent_id):
         """Delete an existing agent build."""
@@ -53,4 +53,4 @@
         put_body = json.dumps({'para': kwargs})
         resp, body = self.put('os-agents/%s' % agent_id, put_body)
         body = json.loads(body)
-        return service_client.ResponseBody(resp, body['agent'])
+        return service_client.ResponseBody(resp, body)
diff --git a/tempest/tests/services/compute/test_agents_client.py b/tempest/tests/services/compute/test_agents_client.py
index 8316c90..d14d8bf 100644
--- a/tempest/tests/services/compute/test_agents_client.py
+++ b/tempest/tests/services/compute/test_agents_client.py
@@ -34,7 +34,7 @@
         body = '{"agents": []}'
         if bytes_body:
             body = body.encode('utf-8')
-        expected = []
+        expected = {"agents": []}
         response = (httplib2.Response({'status': 200}), body)
         self.useFixture(mockpatch.Patch(
             'tempest.common.service_client.ServiceClient.get',
@@ -42,10 +42,11 @@
         self.assertEqual(expected, self.client.list_agents())
 
     def _test_create_agent(self, bytes_body=False):
-        expected = {"url": "http://foo.com", "hypervisor": "kvm",
-                    "md5hash": "md5", "version": "2", "architecture": "x86_64",
-                    "os": "linux", "agent_id": 1}
-        serialized_body = json.dumps({"agent": expected})
+        expected = {"agent": {"url": "http://foo.com", "hypervisor": "kvm",
+                              "md5hash": "md5", "version": "2",
+                              "architecture": "x86_64",
+                              "os": "linux", "agent_id": 1}}
+        serialized_body = json.dumps(expected)
         if bytes_body:
             serialized_body = serialized_body.encode('utf-8')
 
@@ -67,9 +68,9 @@
         self.client.delete_agent("1")
 
     def _test_update_agent(self, bytes_body=False):
-        expected = {"url": "http://foo.com", "md5hash": "md5", "version": "2",
-                    "agent_id": 1}
-        serialized_body = json.dumps({"agent": expected})
+        expected = {"agent": {"url": "http://foo.com", "md5hash": "md5",
+                              "version": "2", "agent_id": 1}}
+        serialized_body = json.dumps(expected)
         if bytes_body:
             serialized_body = serialized_body.encode('utf-8')