Support infra_workload api without oof_directives 64/72364/2
authorBin Yang <bin.yang@windriver.com>
Sat, 10 Nov 2018 12:48:44 +0000 (12:48 +0000)
committerBin Yang <bin.yang@windriver.com>
Sat, 10 Nov 2018 12:59:35 +0000 (12:59 +0000)
Change-Id: I8eb05ff2acdef8811b3eec8e1a0efe47b12bdd73
Issue-ID: MULTICLOUD-401
Signed-off-by: Bin Yang <bin.yang@windriver.com>
ocata/ocata/resource/tests/tests_infra_workload.py
ocata/ocata/resource/views/infra_workload.py
pike/pike/resource/tests/tests_infra_workload.py
pike/pike/resource/views/infra_workload.py
windriver/titanium_cloud/resource/tests/tests_infra_workload.py
windriver/titanium_cloud/resource/views/infra_workload.py

index c522c19..ed39da9 100644 (file)
@@ -107,6 +107,46 @@ MOCK_HEAT_LIST_RESPONSE1 = {
     ]
 }
 
+
+MOCK_HEAT_CREATE_BODY2 =   {
+     "generic-vnf-id":"MOCK_GENERIF_VNF_ID1",
+     "vf-module-id":"MOCK_VF_MODULE_ID1",
+     "template_type":"HEAT",
+     "template_data":{
+         "files":{  },
+         "disable_rollback":True,
+         "parameters":{
+             "flavor1":"m1.heat"
+         },
+         "stack_name":"teststack",
+         "template":{
+             "heat_template_version":"2013-05-23",
+             "description":"Simple template to test heat commands",
+             "parameters":
+                 {
+                     "flavor":{
+                         "default":"m1.tiny",
+                         "type":"string"
+                     }
+                 },
+             "resources":{
+                 "hello_world":{
+                     "type":"OS::Nova::Server",
+                     "properties":{
+                         "key_name":"heat_key",
+                         "flavor":{
+                             "get_param":"flavor"
+                         },
+                         "image":"40be8d1a-3eb9-40de-8abd-43237517384f",
+                         "user_data":"#!/bin/bash -xv\necho \"hello world\" &gt; /root/hello-world.txt\n"
+                     }
+                 }
+             }
+         },
+         "timeout_mins":60
+     }
+}
+
 class InfraWorkloadTest(unittest.TestCase):
     def setUp(self):
         self._InfraWorkload = InfraWorkload()
@@ -137,6 +177,27 @@ class InfraWorkloadTest(unittest.TestCase):
         pass
 
 
+    @mock.patch.object(helper, 'MultiCloudServiceHelper')
+    @mock.patch.object(helper, 'MultiCloudIdentityHelper')
+    def test_post_wo_oof_directive(self,  mock_MultiCloudIdentityHelper, mock_MultiCloudServiceHelper):
+        mock_request = mock.Mock()
+        mock_request.META = {"testkey": "testvalue"}
+        mock_request.data = MOCK_HEAT_CREATE_BODY2
+
+        mock_MultiCloudIdentityHelper.side_effect= [
+            (0, MOCK_TOKEN_RESPONSE, status.HTTP_201_CREATED)
+                ]
+
+        mock_MultiCloudServiceHelper.side_effect= [
+            (0, MOCK_HEAT_CREATE_RESPONSE1, status.HTTP_201_CREATED)
+                ]
+
+        vimid = "CloudOwner_Region1"
+
+        response = self._InfraWorkload.post(mock_request, vimid)
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+        pass
+
     @mock.patch.object(helper, 'MultiCloudServiceHelper')
     @mock.patch.object(helper, 'MultiCloudIdentityHelper')
     def test_get(self,  mock_MultiCloudIdentityHelper, mock_MultiCloudServiceHelper):
index e25c6d1..d78e3ce 100644 (file)
@@ -43,9 +43,9 @@ class InfraWorkload(APIView):
 
         try :
             data = request.data
-            oof_directive = data["oof_directives"]
-            template_type = data["template_type"]
-            template_data = data["template_data"]
+            oof_directive = data.get("oof_directives", {})
+            template_type = data.get("template_type", None)
+            template_data = data.get("template_data", {})
 
             resp_template = None
             if template_type and "heat" == template_type.lower():
index e473c84..73d4ffc 100644 (file)
@@ -117,6 +117,46 @@ MOCK_HEAT_LIST_RESPONSE1 = {
     ]
 }
 
+
+MOCK_HEAT_CREATE_BODY2 =   {
+     "generic-vnf-id":"MOCK_GENERIF_VNF_ID1",
+     "vf-module-id":"MOCK_VF_MODULE_ID1",
+     "template_type":"HEAT",
+     "template_data":{
+         "files":{  },
+         "disable_rollback":True,
+         "parameters":{
+             "flavor1":"m1.heat"
+         },
+         "stack_name":"teststack",
+         "template":{
+             "heat_template_version":"2013-05-23",
+             "description":"Simple template to test heat commands",
+             "parameters":
+                 {
+                     "flavor":{
+                         "default":"m1.tiny",
+                         "type":"string"
+                     }
+                 },
+             "resources":{
+                 "hello_world":{
+                     "type":"OS::Nova::Server",
+                     "properties":{
+                         "key_name":"heat_key",
+                         "flavor":{
+                             "get_param":"flavor"
+                         },
+                         "image":"40be8d1a-3eb9-40de-8abd-43237517384f",
+                         "user_data":"#!/bin/bash -xv\necho \"hello world\" &gt; /root/hello-world.txt\n"
+                     }
+                 }
+             }
+         },
+         "timeout_mins":60
+     }
+}
+
 class InfraWorkloadTest(unittest.TestCase):
     def setUp(self):
         self._InfraWorkload = InfraWorkload()
@@ -147,6 +187,27 @@ class InfraWorkloadTest(unittest.TestCase):
         pass
 
 
+    @mock.patch.object(helper, 'MultiCloudServiceHelper')
+    @mock.patch.object(helper, 'MultiCloudIdentityHelper')
+    def test_post_wo_oof_directive(self,  mock_MultiCloudIdentityHelper, mock_MultiCloudServiceHelper):
+        mock_request = mock.Mock()
+        mock_request.META = {"testkey": "testvalue"}
+        mock_request.data = MOCK_HEAT_CREATE_BODY2
+
+        mock_MultiCloudIdentityHelper.side_effect= [
+            (0, MOCK_TOKEN_RESPONSE, status.HTTP_201_CREATED)
+                ]
+
+        mock_MultiCloudServiceHelper.side_effect= [
+            (0, MOCK_HEAT_CREATE_RESPONSE1, status.HTTP_201_CREATED)
+                ]
+
+        vimid = "CloudOwner_Region1"
+
+        response = self._InfraWorkload.post(mock_request, vimid)
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+        pass
+
     @mock.patch.object(helper, 'MultiCloudServiceHelper')
     @mock.patch.object(helper, 'MultiCloudIdentityHelper')
     def test_get(self,  mock_MultiCloudIdentityHelper, mock_MultiCloudServiceHelper):
index e25c6d1..d78e3ce 100644 (file)
@@ -43,9 +43,9 @@ class InfraWorkload(APIView):
 
         try :
             data = request.data
-            oof_directive = data["oof_directives"]
-            template_type = data["template_type"]
-            template_data = data["template_data"]
+            oof_directive = data.get("oof_directives", {})
+            template_type = data.get("template_type", None)
+            template_data = data.get("template_data", {})
 
             resp_template = None
             if template_type and "heat" == template_type.lower():
index 2d75e59..1ace4f9 100644 (file)
@@ -116,6 +116,47 @@ MOCK_HEAT_LIST_RESPONSE1 = {
     ]
 }
 
+
+MOCK_HEAT_CREATE_BODY2 =   {
+     "generic-vnf-id":"MOCK_GENERIF_VNF_ID1",
+     "vf-module-id":"MOCK_VF_MODULE_ID1",
+     "template_type":"HEAT",
+     "template_data":{
+         "files":{  },
+         "disable_rollback":True,
+         "parameters":{
+             "flavor1":"m1.heat"
+         },
+         "stack_name":"teststack",
+         "template":{
+             "heat_template_version":"2013-05-23",
+             "description":"Simple template to test heat commands",
+             "parameters":
+                 {
+                     "flavor":{
+                         "default":"m1.tiny",
+                         "type":"string"
+                     }
+                 },
+             "resources":{
+                 "hello_world":{
+                     "type":"OS::Nova::Server",
+                     "properties":{
+                         "key_name":"heat_key",
+                         "flavor":{
+                             "get_param":"flavor"
+                         },
+                         "image":"40be8d1a-3eb9-40de-8abd-43237517384f",
+                         "user_data":"#!/bin/bash -xv\necho \"hello world\" &gt; /root/hello-world.txt\n"
+                     }
+                 }
+             }
+         },
+         "timeout_mins":60
+     }
+}
+
+
 class InfraWorkloadTest(unittest.TestCase):
     def setUp(self):
         self._InfraWorkload = InfraWorkload()
@@ -146,6 +187,27 @@ class InfraWorkloadTest(unittest.TestCase):
         pass
 
 
+    @mock.patch.object(helper, 'MultiCloudServiceHelper')
+    @mock.patch.object(helper, 'MultiCloudIdentityHelper')
+    def test_post_wo_oof_directive(self,  mock_MultiCloudIdentityHelper, mock_MultiCloudServiceHelper):
+        mock_request = mock.Mock()
+        mock_request.META = {"testkey": "testvalue"}
+        mock_request.data = MOCK_HEAT_CREATE_BODY2
+
+        mock_MultiCloudIdentityHelper.side_effect= [
+            (0, MOCK_TOKEN_RESPONSE, status.HTTP_201_CREATED)
+                ]
+
+        mock_MultiCloudServiceHelper.side_effect= [
+            (0, MOCK_HEAT_CREATE_RESPONSE1, status.HTTP_201_CREATED)
+                ]
+
+        vimid = "CloudOwner_Region1"
+
+        response = self._InfraWorkload.post(mock_request, vimid)
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+        pass
+
     @mock.patch.object(helper, 'MultiCloudServiceHelper')
     @mock.patch.object(helper, 'MultiCloudIdentityHelper')
     def test_get(self,  mock_MultiCloudIdentityHelper, mock_MultiCloudServiceHelper):
index ef57e65..ec1e574 100644 (file)
@@ -47,9 +47,9 @@ class InfraWorkload(APIView):
         try :
 
             data = request.data
-            oof_directive = data["oof_directives"]
-            template_type = data["template_type"]
-            template_data = data["template_data"]
+            oof_directive = data.get("oof_directives", {})
+            template_type = data.get("template_type", None)
+            template_data = data.get("template_data", {})
             resp_template = None
             if template_type and "heat" == template_type.lower():
                 # update heat parameters from oof_directive