Explorar o código

Add tests for `coriolis.api.v1.router` module

Cristian Matiut %!s(int64=2) %!d(string=hai) anos
pai
achega
4f4c9e5214
Modificáronse 1 ficheiros con 247 adicións e 0 borrados
  1. 247 0
      coriolis/tests/api/v1/test_router.py

+ 247 - 0
coriolis/tests/api/v1/test_router.py

@@ -0,0 +1,247 @@
+# Copyright 2023 Cloudbase Solutions Srl
+# All Rights Reserved.
+
+from unittest import mock
+
+from webob import exc
+
+from coriolis.api.v1 import router
+from coriolis import api
+from coriolis.api.v1 import diagnostics
+from coriolis.api.v1 import endpoint_actions
+from coriolis.api.v1 import endpoint_destination_minion_pool_options
+from coriolis.api.v1 import endpoint_destination_options
+from coriolis.api.v1 import endpoint_instances
+from coriolis.api.v1 import endpoint_networks
+from coriolis.api.v1 import endpoint_source_minion_pool_options
+from coriolis.api.v1 import endpoint_source_options
+from coriolis.api.v1 import endpoint_storage
+from coriolis.api.v1 import endpoints
+from coriolis.api.v1 import migration_actions
+from coriolis.api.v1 import migrations
+from coriolis.api.v1 import minion_pool_actions
+from coriolis.api.v1 import minion_pools
+from coriolis.api.v1 import provider_schemas
+from coriolis.api.v1 import providers
+from coriolis.api.v1 import regions
+from coriolis.api.v1 import replica_actions
+from coriolis.api.v1 import replica_schedules
+from coriolis.api.v1 import replica_tasks_execution_actions
+from coriolis.api.v1 import replica_tasks_executions
+from coriolis.api.v1 import replicas
+from coriolis.api.v1 import services
+from coriolis.tests import test_base
+
+
+class APIRouterTestCase(test_base.CoriolisBaseTestCase):
+    """Test suite for the Coriolis <> v1 API"""
+
+    def setUp(self):
+        super(APIRouterTestCase, self).setUp()
+        self.router = router.APIRouter()
+
+    @mock.patch.object(diagnostics, 'create_resource')
+    @mock.patch.object(replica_schedules, 'create_resource')
+    @mock.patch.object(replica_tasks_execution_actions, 'create_resource')
+    @mock.patch.object(replica_tasks_executions, 'create_resource')
+    @mock.patch.object(replica_actions, 'create_resource')
+    @mock.patch.object(replicas, 'create_resource')
+    @mock.patch.object(migration_actions, 'create_resource')
+    @mock.patch.object(migrations, 'create_resource')
+    @mock.patch.object(provider_schemas, 'create_resource')
+    @mock.patch.object(endpoint_source_options, 'create_resource')
+    @mock.patch.object(endpoint_destination_options, 'create_resource')
+    @mock.patch.object(endpoint_storage, 'create_resource')
+    @mock.patch.object(endpoint_networks, 'create_resource')
+    @mock.patch.object(endpoint_instances, 'create_resource')
+    @mock.patch.object(endpoint_actions, 'create_resource')
+    @mock.patch.object(endpoint_destination_minion_pool_options,
+                       'create_resource')
+    @mock.patch.object(endpoint_source_minion_pool_options, 'create_resource')
+    @mock.patch.object(minion_pool_actions, 'create_resource')
+    @mock.patch.object(minion_pools, 'create_resource')
+    @mock.patch.object(services, 'create_resource')
+    @mock.patch.object(endpoints, 'create_resource')
+    @mock.patch.object(regions, 'create_resource')
+    @mock.patch.object(providers, 'create_resource')
+    def test_setup_routes(
+        self,
+        mock_providers_create_resource,
+        mock_regions_create_resource,
+        mock_endpoints_create_resource,
+        mock_services_create_resource,
+        mock_minion_pools_create_resource,
+        mock_minion_pool_actions_create_resource,
+        mock_endpoint_source_minion_pool_options_create_resource,
+        mock_endpoint_destination_minion_pool_options_create_resource,
+        mock_endpoint_actions_create_resource,
+        mock_endpoint_instances_create_resource,
+        mock_endpoint_networks_create_resource,
+        mock_endpoint_storage_create_resource,
+        mock_endpoint_destination_options_create_resource,
+        mock_endpoint_source_options_create_resource,
+        mock_provider_schemas_create_resource,
+        mock_migrations_create_resource,
+        mock_migration_actions_create_resource,
+        mock_replicas_create_resource,
+        mock_replica_actions_create_resource,
+        mock_replica_tasks_executions_create_resource,
+        mock_replica_tasks_execution_actions_create_resource,
+        mock_replica_schedules_create_resource,
+        mock_diagnostics_create_resource,
+    ):
+        ext_mgr = mock.sentinel.ext_mgr
+        mapper = mock.Mock()
+
+        resource_calls = [
+            mock.call(
+                'provider', 'providers',
+                controller=mock_providers_create_resource.return_value
+            ),
+            mock.call(
+                'region', 'regions',
+                controller=mock_regions_create_resource.return_value,
+                collection={'detail': 'GET'}
+            ),
+            mock.call(
+                'endpoint', 'endpoints',
+                controller=mock_endpoints_create_resource.return_value,
+                collection={'detail': 'GET'},
+                member={'action': 'POST'}
+            ),
+            mock.call(
+                'service', 'services',
+                controller=mock_services_create_resource.return_value,
+                collection={'detail': 'GET'}
+            ),
+            mock.call(
+                'minion_pool', 'minion_pools',
+                controller=mock_minion_pools_create_resource.return_value,
+                collection={'detail': 'GET'}
+            ),
+            mock.call(
+                'minion_pool_options',
+                'endpoints/{endpoint_id}/source-minion-pool-options',
+                controller=
+                mock_endpoint_source_minion_pool_options_create_resource.
+                return_value,
+            ),
+            mock.call(
+                'minion_pool_options',
+                'endpoints/{endpoint_id}/destination-minion-pool-options',
+                controller=
+                mock_endpoint_destination_minion_pool_options_create_resource.
+                return_value,
+            ),
+            mock.call(
+                'instance', 'endpoints/{endpoint_id}/instances',
+                controller=
+                mock_endpoint_instances_create_resource.return_value,
+            ),
+            mock.call(
+                'network', 'endpoints/{endpoint_id}/networks',
+                controller=mock_endpoint_networks_create_resource.return_value,
+            ),
+            mock.call(
+                'storage', 'endpoints/{endpoint_id}/storage',
+                controller=mock_endpoint_storage_create_resource.return_value,
+            ),
+            mock.call(
+                'destination_options',
+                'endpoints/{endpoint_id}/destination-options',
+                controller=
+                mock_endpoint_destination_options_create_resource.return_value,
+            ),
+            mock.call(
+                'source_options',
+                'endpoints/{endpoint_id}/source-options',
+                controller=
+                mock_endpoint_source_options_create_resource.return_value,
+            ),
+            mock.call(
+                'provider_schemas',
+                'providers/{platform_name}/schemas/{provider_type}',
+                controller=mock_provider_schemas_create_resource.return_value,
+            ),
+            mock.call(
+                'migration', 'migrations',
+                controller=mock_migrations_create_resource.return_value,
+                collection={'detail': 'GET'},
+                member={'action': 'POST'}
+            ),
+            mock.call(
+                'replica', 'replicas',
+                controller=mock_replicas_create_resource.return_value,
+                collection={'detail': 'GET'},
+                member={'action': 'POST'}
+            ),
+            mock.call(
+                'execution',
+                'replicas/{replica_id}/executions',
+                controller=
+                mock_replica_tasks_executions_create_resource.return_value,
+                collection={'detail': 'GET'},
+                member={'action': 'POST'}
+            ),
+            mock.call(
+                'replica_schedule',
+                'replicas/{replica_id}/schedules',
+                controller=
+                mock_replica_schedules_create_resource.return_value,
+                collection={'index': 'GET'},
+                member={'action': 'POST'}
+            ),
+            mock.call(
+                'diagnostics', 'diagnostics',
+                controller=mock_diagnostics_create_resource.return_value,
+            ),
+        ]
+
+        connect_calls = [
+            mock.call(
+                'minion_pool_actions',
+                '/{project_id}/minion_pools/{id}/actions',
+                controller=
+                mock_minion_pool_actions_create_resource.return_value,
+                action='action',
+                conditions={'method': 'POST'}
+            ),
+            mock.call(
+                'endpoint_actions',
+                '/{project_id}/endpoints/{id}/actions',
+                controller=
+                mock_endpoint_actions_create_resource.return_value,
+                action='action',
+                conditions={'method': 'POST'}
+            ),
+            mock.call(
+                'migration_actions',
+                '/{project_id}/migrations/{id}/actions',
+                controller=
+                mock_migration_actions_create_resource.return_value,
+                action='action',
+                conditions={'method': 'POST'}
+            ),
+            mock.call(
+                'replica_actions',
+                '/{project_id}/replicas/{id}/actions',
+                controller=mock_replica_actions_create_resource.return_value,
+                action='action',
+                conditions={'method': 'POST'}
+            ),
+            mock.call(
+                'replica_tasks_execution_actions',
+                '/{project_id}/replicas/{replica_id}/executions/{id}/actions',
+                controller=
+                mock_replica_tasks_execution_actions_create_resource.
+                return_value,
+                action='action',
+                conditions={'method': 'POST'}
+            ),
+        ]
+
+        self.router._setup_routes(mapper, ext_mgr)
+
+        mapper.redirect.assert_called_once_with("", "/")
+        mapper.resource.assert_has_calls(resource_calls)
+        mapper.connect.assert_has_calls(connect_calls)