Register Tempest clients via the new interface

Register stable Tempest service clients in ServiceClients using the
same interface used by plugin service clients. Stable clients are
for now compute, image and network.

Partially-implements: bp client-manager-refactor
Change-Id: I1b2a0a74db7b7cfd8bfc93cbb0ca3a7341f2c898
diff --git a/tempest/service_clients.py b/tempest/service_clients.py
index d0daa2b..f131b58 100644
--- a/tempest/service_clients.py
+++ b/tempest/service_clients.py
@@ -22,9 +22,19 @@
 from tempest.lib import auth
 from tempest.lib import exceptions
 from tempest.lib.services import clients
+from tempest.lib.services import compute
+from tempest.lib.services import image
+from tempest.lib.services import network
 
 LOG = logging.getLogger(__name__)
 
+client_modules_by_service_name = {
+    'compute': compute,
+    'image.v1': image.v1,
+    'image.v2': image.v2,
+    'network': network
+}
+
 
 def tempest_modules():
     """List of service client modules available in Tempest.
@@ -289,6 +299,16 @@
             raise exceptions.UnknownServiceClient(
                 services=list(client_parameters.keys()))
 
+        # Register service clients owned by tempest
+        for service in tempest_modules():
+            if service in list(client_modules_by_service_name):
+                attribute = service.replace('.', '_')
+                configs = service.split('.')[0]
+                module = client_modules_by_service_name[service]
+                self.register_service_client_module(
+                    attribute, service, module.__name__,
+                    module.__all__, **self.parameters[configs])
+
         # Register service clients from plugins
         clients_registry = clients.ClientsRegistry()
         plugin_service_clients = clients_registry.get_service_clients()
@@ -362,10 +382,10 @@
 
     @property
     def registered_services(self):
-        # TODO(andreaf) For now add all Tempest services. to the list of
-        # registered service
-        _default_services = tempest_modules()
-        return self._registered_services | _default_services
+        # TODO(andreaf) Temporary set needed until all services are migrated
+        _non_migrated_services = tempest_modules() - set(
+            client_modules_by_service_name)
+        return self._registered_services | _non_migrated_services
 
     def _setup_parameters(self, parameters):
         """Setup default values for client parameters
diff --git a/tempest/tests/test_service_clients.py b/tempest/tests/test_service_clients.py
index befed68..3d8b360 100644
--- a/tempest/tests/test_service_clients.py
+++ b/tempest/tests/test_service_clients.py
@@ -265,11 +265,12 @@
                              _params[_key])
 
     def test_register_service_client_module(self):
-        factory_mock = self.useFixture(fixtures.MockPatch(
-            'tempest.service_clients.ClientsFactory')).mock
         expected_params = {'fake_param1': 'fake_value1',
                            'fake_param2': 'fake_value2'}
         _manager = self._get_manager(init_region='fake_region_default')
+        # Mock after the _manager is setup to preserve the call count
+        factory_mock = self.useFixture(fixtures.MockPatch(
+            'tempest.service_clients.ClientsFactory')).mock
         _manager.register_service_client_module(
             name='fake_module',
             service_version='fake_service',
@@ -291,13 +292,14 @@
         self.assertIn('fake_service', _manager._registered_services)
 
     def test_register_service_client_module_override_default(self):
-        factory_mock = self.useFixture(fixtures.MockPatch(
-            'tempest.service_clients.ClientsFactory')).mock
         new_region = 'new_region'
         expected_params = {'fake_param1': 'fake_value1',
                            'fake_param2': 'fake_value2',
                            'region': new_region}
         _manager = self._get_manager(init_region='fake_region_default')
+        # Mock after the _manager is setup to preserve the call count
+        factory_mock = self.useFixture(fixtures.MockPatch(
+            'tempest.service_clients.ClientsFactory')).mock
         _manager.register_service_client_module(
             name='fake_module',
             service_version='fake_service',