Fix install O2 on subcloud failed
[pti/o2.git] / tests / unit / test_ocloud.py
index 95dd372..18c16cb 100644 (file)
@@ -18,7 +18,7 @@ from unittest.mock import MagicMock
 from o2ims.domain import ocloud, subscription_obj
 from o2ims.domain import resource_type as rt
 from o2ims.views import ocloud_view
-from o2common.config import config
+from o2common.config import config, conf as CONF
 
 
 def setup_ocloud():
@@ -94,14 +94,6 @@ def test_new_subscription():
         subscription1.subscriptionId == subscription_id1
 
 
-def test_new_registration():
-    registration_id1 = str(uuid.uuid4())
-    registration1 = subscription_obj.Registration(
-        registration_id1, "https://callback/uri/write/here")
-    assert registration_id1 is not None and\
-        registration1.registrationId == registration_id1
-
-
 def test_view_olcouds(mock_uow):
     session, uow = mock_uow
 
@@ -109,7 +101,8 @@ def test_view_olcouds(mock_uow):
     ocloud1 = MagicMock()
     ocloud1.serialize.return_value = {
         'oCloudId': ocloud1_UUID, 'name': 'ocloud1'}
-    session.return_value.query.return_value = [ocloud1]
+    session.return_value.query.return_value.filter.return_value.\
+        order_by.return_value = [ocloud1]
 
     ocloud_list = ocloud_view.oclouds(uow)
     # assert str(ocloud_list[0].get("oCloudId")) == ocloud1_UUID
@@ -142,11 +135,17 @@ def test_view_resource_types(mock_uow):
     restype1 = MagicMock()
     restype1.serialize.return_value = {
         "resourceTypeId": resource_type_id1}
-    session.return_value.query.return_value = [restype1]
 
-    resource_type_list = ocloud_view.resource_types(uow)
-    assert str(resource_type_list[0].get(
-        "resourceTypeId")) == resource_type_id1
+    order_by = MagicMock()
+    order_by.count.return_value = 1
+    order_by.limit.return_value.offset.return_value = [restype1]
+    session.return_value.query.return_value.filter.return_value.\
+        order_by.return_value = order_by
+
+    result = ocloud_view.resource_types(uow)
+    assert result['count'] == 1
+    ret_list = result['results']
+    assert str(ret_list[0].get("resourceTypeId")) == resource_type_id1
 
 
 def test_view_resource_type_one(mock_uow):
@@ -176,11 +175,17 @@ def test_view_resource_pools(mock_uow):
     respool1 = MagicMock()
     respool1.serialize.return_value = {
         "resourcePoolId": resource_pool_id1}
-    session.return_value.query.return_value = [respool1]
 
-    resource_pool_list = ocloud_view.resource_pools(uow)
-    assert str(resource_pool_list[0].get(
-        "resourcePoolId")) == resource_pool_id1
+    order_by = MagicMock()
+    order_by.count.return_value = 1
+    order_by.limit.return_value.offset.return_value = [respool1]
+    session.return_value.query.return_value.filter.return_value.\
+        order_by.return_value = order_by
+
+    result = ocloud_view.resource_pools(uow)
+    assert result['count'] == 1
+    ret_list = result['results']
+    assert str(ret_list[0].get("resourcePoolId")) == resource_pool_id1
 
 
 def test_view_resource_pool_one(mock_uow):
@@ -214,9 +219,18 @@ def test_view_resources(mock_uow):
         "resourceId": resource_id1,
         "resourcePoolId": resource_pool_id1
     }
-    session.return_value.query.return_value.filter_by.return_value = [res1]
 
-    resource_list = ocloud_view.resources(resource_pool_id1, uow)
+    order_by = MagicMock()
+    order_by.count.return_value = 1
+    order_by.limit.return_value.offset.return_value = [res1]
+    session.return_value.query.return_value.filter.return_value.\
+        order_by.return_value = order_by
+    # TODO: workaround for sqlalchemy not mapping with resource object
+    setattr(ocloud.Resource, 'resourcePoolId', '')
+
+    result = ocloud_view.resources(resource_pool_id1, uow)
+    assert result['count'] == 1
+    resource_list = result['results']
     assert str(resource_list[0].get("resourceId")) == resource_id1
     assert str(resource_list[0].get("resourcePoolId")) == resource_pool_id1
 
@@ -230,7 +244,8 @@ def test_view_resource_one(mock_uow):
         return_value.serialize.return_value = None
 
     # Query return None
-    resource_res = ocloud_view.resource_one(resource_id1, uow)
+    resource_res = ocloud_view.resource_one(
+        resource_id1, uow, resource_pool_id1)
     assert resource_res is None
 
     session.return_value.query.return_value.filter_by.return_value.first.\
@@ -238,9 +253,10 @@ def test_view_resource_one(mock_uow):
             "resourceId": resource_id1,
             "resourcePoolId": resource_pool_id1
         }
-
-    resource_res = ocloud_view.resource_one(resource_id1, uow)
-    assert str(resource_res.get("resourceId")) == resource_id1
+    resource_res = ocloud_view.resource_one(
+        resource_id1, uow, resource_pool_id1)
+    assert str(resource_res.get("resourceId") == resource_id1)
+    assert str(resource_res.get("resourcePoolId") == resource_pool_id1)
 
 
 def test_view_deployment_managers(mock_uow):
@@ -251,11 +267,18 @@ def test_view_deployment_managers(mock_uow):
     dm1.serialize.return_value = {
         "deploymentManagerId": deployment_manager_id1,
     }
-    session.return_value.query.return_value = [dm1]
 
-    deployment_manager_list = ocloud_view.deployment_managers(uow)
-    assert str(deployment_manager_list[0].get(
-        "deploymentManagerId")) == deployment_manager_id1
+    order_by = MagicMock()
+    order_by.count.return_value = 1
+    order_by.limit.return_value.offset.return_value = [dm1]
+    session.return_value.query.return_value.filter.return_value.\
+        order_by.return_value = order_by
+
+    result = ocloud_view.deployment_managers(uow)
+    assert result['count'] == 1
+    ret_list = result['results']
+    assert str(ret_list[0].get("deploymentManagerId")
+               ) == deployment_manager_id1
 
 
 def test_view_deployment_manager_one(mock_uow):
@@ -270,15 +293,48 @@ def test_view_deployment_manager_one(mock_uow):
         deployment_manager_id1, uow)
     assert deployment_manager_res is None
 
+    dms_endpoint = "http://o2:30205/o2dms/v1/uuid"
     session.return_value.query.return_value.filter_by.return_value.first.\
         return_value.serialize.return_value = {
             "deploymentManagerId": deployment_manager_id1,
+            "serviceUri": dms_endpoint,
+            "profile": {}
+        }
+
+    CONF.API.DMS_SUPPORT_PROFILES = 'native_k8sapi,sol018,sol018_helmcli'
+    cluster_endpoint = "https://test_k8s:6443"
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value['profile'] = {
+            "cluster_api_endpoint": cluster_endpoint
         }
 
+    # profile default
     deployment_manager_res = ocloud_view.deployment_manager_one(
         deployment_manager_id1, uow)
     assert str(deployment_manager_res.get(
         "deploymentManagerId")) == deployment_manager_id1
+    assert str(deployment_manager_res.get(
+        'serviceUri')) == cluster_endpoint
+    assert deployment_manager_res.get('profile') is None
+
+    # profile sol018
+    profileName = ocloud.DeploymentManagerProfileSOL018
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value['profile'] = {
+            "cluster_api_endpoint": cluster_endpoint
+        }
+    deployment_manager_res = ocloud_view.deployment_manager_one(
+        deployment_manager_id1, uow, profile=profileName)
+    assert str(deployment_manager_res.get(
+        'serviceUri')) == cluster_endpoint
+    assert str(deployment_manager_res.get("extensions").get(
+        "profileName")) == profileName
+
+    # profile wrong name
+    profileName = 'wrong_profile'
+    deployment_manager_res = ocloud_view.deployment_manager_one(
+        deployment_manager_id1, uow, profile=profileName)
+    assert deployment_manager_res == ""
 
 
 def test_view_subscriptions(mock_uow):
@@ -289,11 +345,17 @@ def test_view_subscriptions(mock_uow):
     sub1.serialize.return_value = {
         "subscriptionId": subscription_id1,
     }
-    session.return_value.query.return_value = [sub1]
 
-    subscription_list = ocloud_view.subscriptions(uow)
-    assert str(subscription_list[0].get(
-        "subscriptionId")) == subscription_id1
+    order_by = MagicMock()
+    order_by.count.return_value = 1
+    order_by.limit.return_value.offset.return_value = [sub1]
+    session.return_value.query.return_value.filter.return_value.\
+        order_by.return_value = order_by
+
+    result = ocloud_view.subscriptions(uow)
+    assert result['count'] == 1
+    ret_list = result['results']
+    assert str(ret_list[0].get("subscriptionId")) == subscription_id1
 
 
 def test_view_subscription_one(mock_uow):
@@ -319,48 +381,16 @@ def test_view_subscription_one(mock_uow):
         "subscriptionId")) == subscription_id1
 
 
-def test_view_registrations(mock_uow):
-    session, uow = mock_uow
-
-    registration_id1 = str(uuid.uuid4())
-    reg1 = MagicMock()
-    reg1.serialize.return_value = {
-        "registrationId": registration_id1,
-    }
-    session.return_value.query.return_value = [reg1]
-
-    registration_list = ocloud_view.registrations(uow)
-    assert str(registration_list[0].get(
-        "registrationId")) == registration_id1
-
-
-def test_view_registration_one(mock_uow):
-    session, uow = mock_uow
-
-    registration_id1 = str(uuid.uuid4())
-    session.return_value.query.return_value.filter_by.return_value.first.\
-        return_value.serialize.return_value = None
-
-    # Query return None
-    registration_res = ocloud_view.registration_one(
-        registration_id1, uow)
-    assert registration_res is None
-
-    session.return_value.query.return_value.filter_by.return_value.first.\
-        return_value.serialize.return_value = {
-            "registrationId": registration_id1,
-        }
-
-    registration_res = ocloud_view.registration_one(
-        registration_id1, uow)
-    assert str(registration_res.get(
-        "registrationId")) == registration_id1
-
-
 def test_flask_get_list(mock_flask_uow):
     session, app = mock_flask_uow
-    session.query.return_value = []
-    apibase = config.get_o2ims_api_base()
+    order_by = MagicMock()
+    order_by.count.return_value = 0
+    order_by.limit.return_value.offset.return_value = []
+    session.return_value.query.return_value.filter.return_value.\
+        order_by.return_value = order_by
+    apibase = config.get_o2ims_api_base() + '/v1'
+    # TODO: workaround for sqlalchemy not mapping with resource object
+    setattr(ocloud.Resource, 'resourcePoolId', '')
 
     with app.test_client() as client:
         # Get list and return empty list
@@ -382,16 +412,13 @@ def test_flask_get_list(mock_flask_uow):
         resp = client.get(apibase+"/subscriptions")
         assert resp.get_data() == b'[]\n'
 
-        resp = client.get(apibase+"/registrations")
-        assert resp.get_data() == b'[]\n'
-
 
 def test_flask_get_one(mock_flask_uow):
     session, app = mock_flask_uow
 
     session.return_value.query.return_value.filter_by.return_value.\
         first.return_value = None
-    apibase = config.get_o2ims_api_base()
+    apibase = config.get_o2ims_api_base() + '/v1'
 
     with app.test_client() as client:
         # Get one and return 404
@@ -421,14 +448,16 @@ def test_flask_get_one(mock_flask_uow):
         resp = client.get(apibase+"/subscriptions/"+subscription_id1)
         assert resp.status_code == 404
 
-        registration_id1 = str(uuid.uuid4())
-        resp = client.get(apibase+"/registrations/"+registration_id1)
-        assert resp.status_code == 404
-
 
-def test_flask_post(mock_flask_uow):
+def test_flask_post(mock_flask_uow, mappers):
     session, app = mock_flask_uow
-    apibase = config.get_o2ims_api_base()
+    apibase = config.get_o2ims_api_base() + '/v1'
+
+    order_by = MagicMock()
+    order_by.count.return_value = 0
+    order_by.limit.return_value.offset.return_value = []
+    session.return_value.query.return_value.filter.return_value.\
+        order_by.return_value = order_by
 
     with app.test_client() as client:
         session.return_value.execute.return_value = []
@@ -437,38 +466,27 @@ def test_flask_post(mock_flask_uow):
         resp = client.post(apibase+'/subscriptions', json={
             'callback': sub_callback,
             'consumerSubscriptionId': 'consumerSubId1',
-            'filter': 'empty'
+            'filter': '(eq,resourceTypeId,xxx)'
         })
         assert resp.status_code == 201
         assert 'subscriptionId' in resp.get_json()
 
-        reg_callback = 'http://registration/callback/url'
-        resp = client.post(apibase+'/registrations', json={
-            'callback': reg_callback,
-        })
-        assert resp.status_code == 201
-        assert 'registrationId' in resp.get_json()
-
 
 def test_flask_delete(mock_flask_uow):
     session, app = mock_flask_uow
-    apibase = config.get_o2ims_api_base()
+    apibase = config.get_o2ims_api_base() + '/v1'
 
     with app.test_client() as client:
         session.return_value.execute.return_value.first.return_value = {}
 
         subscription_id1 = str(uuid.uuid4())
         resp = client.delete(apibase+"/subscriptions/"+subscription_id1)
-        assert resp.status_code == 204
-
-        registration_id1 = str(uuid.uuid4())
-        resp = client.delete(apibase+"/registrations/"+registration_id1)
-        assert resp.status_code == 204
+        assert resp.status_code == 200
 
 
 def test_flask_not_allowed(mock_flask_uow):
     _, app = mock_flask_uow
-    apibase = config.get_o2ims_api_base()
+    apibase = config.get_o2ims_api_base() + '/v1'
 
     with app.test_client() as client:
         # Testing resource type not support method
@@ -582,22 +600,3 @@ def test_flask_not_allowed(mock_flask_uow):
         assert resp.status == '405 METHOD NOT ALLOWED'
         resp = client.patch(uri)
         assert resp.status == '405 METHOD NOT ALLOWED'
-
-        # Testing registrations not support method
-        ##########################
-        uri = apibase + "/registrations"
-        resp = client.put(uri)
-        assert resp.status == '405 METHOD NOT ALLOWED'
-        resp = client.patch(uri)
-        assert resp.status == '405 METHOD NOT ALLOWED'
-        resp = client.delete(uri)
-        assert resp.status == '405 METHOD NOT ALLOWED'
-
-        subscription_id1 = str(uuid.uuid4())
-        uri = apibase + "/registrations/" + subscription_id1
-        resp = client.post(uri)
-        assert resp.status == '405 METHOD NOT ALLOWED'
-        resp = client.put(uri)
-        assert resp.status == '405 METHOD NOT ALLOWED'
-        resp = client.patch(uri)
-        assert resp.status == '405 METHOD NOT ALLOWED'