diff --git a/tempest/api/compute/admin/test_servers.py b/tempest/api/compute/admin/test_servers.py index e730d318c8..2029a2e628 100644 --- a/tempest/api/compute/admin/test_servers.py +++ b/tempest/api/compute/admin/test_servers.py @@ -35,8 +35,11 @@ class ServersAdminTestJSON(base.BaseComputeAdminTest): cls.client = cls.os_adm.servers_client cls.flavors_client = cls.os_adm.flavors_client - cls.admin_client = cls._get_identity_admin_client() - tenant = cls.admin_client.get_tenant_by_name( + cls.non_adm_client = cls.servers_client + cls.flavors_client = cls.os_adm.flavors_client + + cls.identity_client = cls._get_identity_admin_client() + tenant = cls.identity_client.get_tenant_by_name( cls.client.tenant_name) cls.tenant_id = tenant['id'] @@ -158,6 +161,24 @@ class ServersAdminTestJSON(base.BaseComputeAdminTest): self.assertRaises(exceptions.NotFound, self.client.reset_state, '999') + @attr(type='gate') + def test_get_server_diagnostics_by_admin(self): + # Retrieve server diagnostics by admin user + resp, diagnostic = self.client.get_server_diagnostics(self.s1_id) + self.assertEqual(200, resp.status) + basic_attrs = ['rx_packets', 'rx_errors', 'rx_drop', + 'tx_packets', 'tx_errors', 'tx_drop', + 'read_req', 'write_req', 'cpu', 'memory'] + for key in basic_attrs: + self.assertIn(key, str(diagnostic.keys())) + + @attr(type=['negative', 'gate']) + def test_get_server_diagnostics_by_non_admin(self): + # Non-admin user can not view server diagnostics according to policy + self.assertRaises(exceptions.Unauthorized, + self.non_adm_client.get_server_diagnostics, + self.s1_id) + class ServersAdminTestXML(ServersAdminTestJSON): _interface = 'xml' diff --git a/tempest/services/compute/json/servers_client.py b/tempest/services/compute/json/servers_client.py index 990c98604a..eda0ede033 100644 --- a/tempest/services/compute/json/servers_client.py +++ b/tempest/services/compute/json/servers_client.py @@ -366,6 +366,11 @@ class ServersClientJSON(RestClient): """Unrescue the provided server.""" return self.action(server_id, 'unrescue', None) + def get_server_diagnostics(self, server_id): + """Get the usage data for a server.""" + resp, body = self.get("servers/%s/diagnostics" % str(server_id)) + return resp, json.loads(body) + def list_instance_actions(self, server_id): """List the provided server action.""" resp, body = self.get("servers/%s/os-instance-actions" % diff --git a/tempest/services/compute/xml/servers_client.py b/tempest/services/compute/xml/servers_client.py index c58c3eea9c..cb21c6171f 100644 --- a/tempest/services/compute/xml/servers_client.py +++ b/tempest/services/compute/xml/servers_client.py @@ -575,6 +575,13 @@ class ServersClientXML(RestClientXML): (server_id, volume_id), headers) return resp, body + def get_server_diagnostics(self, server_id): + """Get the usage data for a server.""" + resp, body = self.get("servers/%s/diagnostics" % server_id, + self.headers) + body = xml_to_json(etree.fromstring(body)) + return resp, body + def list_instance_actions(self, server_id): """List the provided server action.""" resp, body = self.get("servers/%s/os-instance-actions" % server_id,