Merge "Use Tempest-lib's compute services_client"
diff --git a/tempest/api_schema/response/compute/v2_1/services.py b/tempest/api_schema/response/compute/v2_1/services.py
deleted file mode 100644
index ddef7b2..0000000
--- a/tempest/api_schema/response/compute/v2_1/services.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright 2014 NEC Corporation.  All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-list_services = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'services': {
-                'type': 'array',
-                'items': {
-                    'type': 'object',
-                    'properties': {
-                        'id': {'type': ['integer', 'string'],
-                               'pattern': '^[a-zA-Z!]*@[0-9]+$'},
-                        'zone': {'type': 'string'},
-                        'host': {'type': 'string'},
-                        'state': {'type': 'string'},
-                        'binary': {'type': 'string'},
-                        'status': {'type': 'string'},
-                        'updated_at': {'type': ['string', 'null']},
-                        'disabled_reason': {'type': ['string', 'null']}
-                    },
-                    'additionalProperties': False,
-                    'required': ['id', 'zone', 'host', 'state', 'binary',
-                                 'status', 'updated_at', 'disabled_reason']
-                }
-            }
-        },
-        'additionalProperties': False,
-        'required': ['services']
-    }
-}
-
-enable_disable_service = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'service': {
-                'type': 'object',
-                'properties': {
-                    'status': {'type': 'string'},
-                    'binary': {'type': 'string'},
-                    'host': {'type': 'string'}
-                },
-                'additionalProperties': False,
-                'required': ['status', 'binary', 'host']
-            }
-        },
-        'additionalProperties': False,
-        'required': ['service']
-    }
-}
diff --git a/tempest/clients.py b/tempest/clients.py
index 59009ac..8136c75 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -49,6 +49,7 @@
     SecurityGroupDefaultRulesClient
 from tempest_lib.services.compute.security_groups_client import \
     SecurityGroupsClient
+from tempest_lib.services.compute.services_client import ServicesClient
 from tempest_lib.services.identity.v2.token_client import TokenClient
 from tempest_lib.services.identity.v3.token_client import V3TokenClient
 
@@ -69,7 +70,6 @@
 from tempest.services.compute.json.server_groups_client import \
     ServerGroupsClient
 from tempest.services.compute.json.servers_client import ServersClient
-from tempest.services.compute.json.services_client import ServicesClient
 from tempest.services.compute.json.snapshots_client import \
     SnapshotsClient as ComputeSnapshotsClient
 from tempest.services.compute.json.tenant_networks_client import \
diff --git a/tempest/services/compute/json/services_client.py b/tempest/services/compute/json/services_client.py
deleted file mode 100644
index 57d0434..0000000
--- a/tempest/services/compute/json/services_client.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright 2013 NEC Corporation
-# Copyright 2013 IBM Corp.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-from oslo_serialization import jsonutils as json
-from six.moves.urllib import parse as urllib
-
-from tempest.api_schema.response.compute.v2_1 import services as schema
-from tempest.common import service_client
-
-
-class ServicesClient(service_client.ServiceClient):
-
-    def list_services(self, **params):
-        url = 'os-services'
-        if params:
-            url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.list_services, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def enable_service(self, **kwargs):
-        """Enable service on a host
-
-        host_name: Name of host
-        binary: Service binary
-        """
-        post_body = json.dumps(kwargs)
-        resp, body = self.put('os-services/enable', post_body)
-        body = json.loads(body)
-        self.validate_response(schema.enable_disable_service, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def disable_service(self, **kwargs):
-        """Disable service on a host
-
-        host_name: Name of host
-        binary: Service binary
-        """
-        post_body = json.dumps(kwargs)
-        resp, body = self.put('os-services/disable', post_body)
-        body = json.loads(body)
-        self.validate_response(schema.enable_disable_service, resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/tests/common/test_service_clients.py b/tempest/tests/common/test_service_clients.py
index cf33fb2..b0706f2 100644
--- a/tempest/tests/common/test_service_clients.py
+++ b/tempest/tests/common/test_service_clients.py
@@ -22,7 +22,6 @@
 from tempest.services.compute.json import security_group_rules_client
 from tempest.services.compute.json import server_groups_client
 from tempest.services.compute.json import servers_client
-from tempest.services.compute.json import services_client
 from tempest.services.compute.json import volumes_client \
     as compute_volumes_client
 from tempest.services.data_processing.v1_1 import data_processing_client
@@ -92,7 +91,6 @@
             security_group_rules_client.SecurityGroupRulesClient,
             server_groups_client.ServerGroupsClient,
             servers_client.ServersClient,
-            services_client.ServicesClient,
             compute_volumes_client.VolumesClient,
             data_processing_client.DataProcessingClient,
             db_flavor_client.DatabaseFlavorsClient,
diff --git a/tempest/tests/services/compute/test_services_client.py b/tempest/tests/services/compute/test_services_client.py
deleted file mode 100644
index fce28e8..0000000
--- a/tempest/tests/services/compute/test_services_client.py
+++ /dev/null
@@ -1,95 +0,0 @@
-# Copyright 2015 NEC Corporation.  All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-import copy
-
-from tempest_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import services_client
-from tempest.tests.services.compute import base
-
-
-class TestServicesClient(base.BaseComputeServiceTest):
-
-    FAKE_SERVICES = {
-        "services":
-        [{
-            "status": "enabled",
-            "binary": "nova-conductor",
-            "zone": "internal",
-            "state": "up",
-            "updated_at": "2015-08-19T06:50:55.000000",
-            "host": "controller",
-            "disabled_reason": None,
-            "id": 1
-        }]
-    }
-
-    FAKE_SERVICE = {
-        "service":
-        {
-            "status": "enabled",
-            "binary": "nova-conductor",
-            "host": "controller"
-        }
-    }
-
-    def setUp(self):
-        super(TestServicesClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = services_client.ServicesClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def test_list_services_with_str_body(self):
-        self.check_service_client_function(
-            self.client.list_services,
-            'tempest.common.service_client.ServiceClient.get',
-            self.FAKE_SERVICES)
-
-    def test_list_services_with_bytes_body(self):
-        self.check_service_client_function(
-            self.client.list_services,
-            'tempest.common.service_client.ServiceClient.get',
-            self.FAKE_SERVICES, to_utf=True)
-
-    def _test_enable_service(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.enable_service,
-            'tempest.common.service_client.ServiceClient.put',
-            self.FAKE_SERVICE,
-            bytes_body,
-            host_name="nova-conductor", binary="controller")
-
-    def test_enable_service_with_str_body(self):
-        self._test_enable_service()
-
-    def test_enable_service_with_bytes_body(self):
-        self._test_enable_service(bytes_body=True)
-
-    def _test_disable_service(self, bytes_body=False):
-        fake_service = copy.deepcopy(self.FAKE_SERVICE)
-        fake_service["service"]["status"] = "disable"
-
-        self.check_service_client_function(
-            self.client.disable_service,
-            'tempest.common.service_client.ServiceClient.put',
-            fake_service,
-            bytes_body,
-            host_name="nova-conductor", binary="controller")
-
-    def test_disable_service_with_str_body(self):
-        self._test_disable_service()
-
-    def test_disable_service_with_bytes_body(self):
-        self._test_disable_service(bytes_body=True)