--- /dev/null
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * ONAP - SO\r
+ * ================================================================================\r
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+package org.openecomp.mso.apihandlerinfra;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.InputStream;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.List;\r
+\r
+import javax.ws.rs.core.Response;\r
+\r
+import org.apache.http.HttpResponse;\r
+import org.apache.http.ProtocolVersion;\r
+import org.apache.http.entity.BasicHttpEntity;\r
+import org.apache.http.message.BasicHttpResponse;\r
+import org.hibernate.criterion.Criterion;\r
+import org.hibernate.criterion.Order;\r
+import org.junit.Test;\r
+import org.openecomp.mso.apihandler.common.CamundaClient;\r
+import org.openecomp.mso.apihandler.common.RequestClient;\r
+import org.openecomp.mso.apihandler.common.RequestClientFactory;\r
+import org.openecomp.mso.db.catalog.CatalogDatabase;\r
+import org.openecomp.mso.db.catalog.beans.Service;\r
+import org.openecomp.mso.db.catalog.beans.ServiceRecipe;\r
+import org.openecomp.mso.properties.MsoJavaProperties;\r
+import org.openecomp.mso.requestsdb.InfraActiveRequests;\r
+import org.openecomp.mso.requestsdb.RequestsDatabase;\r
+\r
+import mockit.Mock;\r
+import mockit.MockUp;\r
+\r
+public class E2EServiceInstancesTest {\r
+\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestSuccess(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ return null;\r
+ }\r
+ };\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ public int updateInfraStatus (String requestId, String requestStatus, long progress, String lastModifiedBy) {\r
+ return 0;\r
+ }\r
+ };\r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public Service getServiceByModelName (String modelName) {\r
+ Service svc = new Service();\r
+ return svc;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public ServiceRecipe getServiceRecipeByModelUUID(String modelUUID, String action) {\r
+ ServiceRecipe rec = new ServiceRecipe();\r
+ return rec;\r
+ }\r
+ };\r
+ \r
+ new MockUp<RequestClientFactory>() {\r
+ @Mock\r
+ public RequestClient getRequestClient(String orchestrationURI, MsoJavaProperties props) throws IllegalStateException{\r
+ RequestClient client = new CamundaClient();\r
+ client.setUrl("/test/url");\r
+ return client;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CamundaClient>() {\r
+ @Mock\r
+ public HttpResponse post(String requestId, boolean isBaseVfModule,\r
+ int recipeTimeout, String requestAction, String serviceInstanceId,\r
+ String vnfId, String vfModuleId, String volumeGroupId, String networkId,\r
+ String serviceType, String vnfType, String vfModuleType, String networkType,\r
+ String requestDetails){ \r
+ ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);\r
+ HttpResponse resp = new BasicHttpResponse(pv,202, "test response");\r
+ BasicHttpEntity entity = new BasicHttpEntity();\r
+ String body = "{\"response\":\"success\",\"message\":\"success\"}";\r
+ InputStream instream = new ByteArrayInputStream(body.getBytes());\r
+ entity.setContent(instream);\r
+ resp.setEntity(entity);\r
+ return resp;\r
+ }\r
+ };\r
+ \r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"E2EService\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ assertTrue(resp.getStatus() == 202);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestBpelHTTPException(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ return null;\r
+ }\r
+ };\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ public int updateInfraStatus (String requestId, String requestStatus, long progress, String lastModifiedBy) {\r
+ return 0;\r
+ }\r
+ };\r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public Service getServiceByModelName (String modelName) {\r
+ Service svc = new Service();\r
+ return svc;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public ServiceRecipe getServiceRecipeByModelUUID(String modelUUID, String action) {\r
+ ServiceRecipe rec = new ServiceRecipe();\r
+ return rec;\r
+ }\r
+ };\r
+ \r
+ new MockUp<RequestClientFactory>() {\r
+ @Mock\r
+ public RequestClient getRequestClient(String orchestrationURI, MsoJavaProperties props) throws IllegalStateException{\r
+ RequestClient client = new CamundaClient();\r
+ client.setUrl("/test/url");\r
+ return client;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CamundaClient>() {\r
+ @Mock\r
+ public HttpResponse post(String requestId, boolean isBaseVfModule,\r
+ int recipeTimeout, String requestAction, String serviceInstanceId,\r
+ String vnfId, String vfModuleId, String volumeGroupId, String networkId,\r
+ String serviceType, String vnfType, String vfModuleType, String networkType,\r
+ String requestDetails){ \r
+ ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);\r
+ HttpResponse resp = new BasicHttpResponse(pv,500, "test response");\r
+ BasicHttpEntity entity = new BasicHttpEntity();\r
+ String body = "{\"response\":\"success\",\"message\":\"success\"}";\r
+ InputStream instream = new ByteArrayInputStream(body.getBytes());\r
+ entity.setContent(instream);\r
+ resp.setEntity(entity);\r
+ return resp;\r
+ }\r
+ };\r
+ \r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"E2EService\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("Request Failed due to BPEL error with HTTP Status") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestBpelHTTPExceptionWithNullREsponseBody(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ return null;\r
+ }\r
+ };\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ public int updateInfraStatus (String requestId, String requestStatus, long progress, String lastModifiedBy) {\r
+ return 0;\r
+ }\r
+ };\r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public Service getServiceByModelName (String modelName) {\r
+ Service svc = new Service();\r
+ return svc;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public ServiceRecipe getServiceRecipeByModelUUID(String modelUUID, String action) {\r
+ ServiceRecipe rec = new ServiceRecipe();\r
+ return rec;\r
+ }\r
+ };\r
+ \r
+ new MockUp<RequestClientFactory>() {\r
+ @Mock\r
+ public RequestClient getRequestClient(String orchestrationURI, MsoJavaProperties props) throws IllegalStateException{\r
+ RequestClient client = new CamundaClient();\r
+ client.setUrl("/test/url");\r
+ return client;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CamundaClient>() {\r
+ @Mock\r
+ public HttpResponse post(String requestId, boolean isBaseVfModule,\r
+ int recipeTimeout, String requestAction, String serviceInstanceId,\r
+ String vnfId, String vfModuleId, String volumeGroupId, String networkId,\r
+ String serviceType, String vnfType, String vfModuleType, String networkType,\r
+ String requestDetails){ \r
+ ProtocolVersion pv = new ProtocolVersion("HTTP",1,1);\r
+ HttpResponse resp = new BasicHttpResponse(pv,500, "test response");\r
+ BasicHttpEntity entity = new BasicHttpEntity();\r
+ String body = "{\"response\":\"\",\"message\":\"success\"}";\r
+ InputStream instream = new ByteArrayInputStream(body.getBytes());\r
+ entity.setContent(instream);\r
+ resp.setEntity(entity);\r
+ return resp;\r
+ }\r
+ };\r
+ \r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"E2EService\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("Request Failed due to BPEL error with HTTP Status") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestNullBPELResponse(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ return null;\r
+ }\r
+ };\r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public Service getServiceByModelName (String modelName) {\r
+ Service svc = new Service();\r
+ return svc;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public ServiceRecipe getServiceRecipeByModelUUID(String modelUUID, String action) {\r
+ ServiceRecipe rec = new ServiceRecipe();\r
+ return rec;\r
+ }\r
+ };\r
+ \r
+ new MockUp<RequestClientFactory>() {\r
+ @Mock\r
+ public RequestClient getRequestClient(String orchestrationURI, MsoJavaProperties props) throws IllegalStateException{\r
+ RequestClient client = new CamundaClient();\r
+ client.setUrl("/test/url");\r
+ return client;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CamundaClient>() {\r
+ @Mock\r
+ public HttpResponse post(String requestId, boolean isBaseVfModule,\r
+ int recipeTimeout, String requestAction, String serviceInstanceId,\r
+ String vnfId, String vfModuleId, String volumeGroupId, String networkId,\r
+ String serviceType, String vnfType, String vfModuleType, String networkType,\r
+ String requestDetails){ \r
+ HttpResponse resp = null;\r
+ return resp;\r
+ }\r
+ };\r
+ \r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"E2EService\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("bpelResponse is null") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestBPMNNullREsponse(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ return null;\r
+ }\r
+ };\r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public Service getServiceByModelName (String modelName) {\r
+ Service svc = new Service();\r
+ return svc;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public ServiceRecipe getServiceRecipeByModelUUID(String modelUUID, String action) {\r
+ ServiceRecipe rec = new ServiceRecipe();\r
+ return rec;\r
+ }\r
+ };\r
+ \r
+ new MockUp<RequestClientFactory>() {\r
+ @Mock\r
+ public RequestClient getRequestClient(String orchestrationURI, MsoJavaProperties props) throws IllegalStateException{\r
+ RequestClient client = new CamundaClient();\r
+ client.setUrl("/test/url");\r
+ return client;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CamundaClient>() {\r
+ @Mock\r
+ public HttpResponse post(String camundaReqXML, String requestId,\r
+ String requestTimeout, String schemaVersion, String serviceInstanceId, String action){\r
+ HttpResponse resp = null;\r
+ return resp;\r
+ }\r
+ };\r
+ \r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"E2EService\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("Failed calling bpmn null") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestNullBpmn(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ return null;\r
+ }\r
+ };\r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public Service getServiceByModelName (String modelName) {\r
+ Service svc = new Service();\r
+ return svc;\r
+ }\r
+ };\r
+ \r
+ new MockUp<CatalogDatabase>() {\r
+ @Mock\r
+ public ServiceRecipe getServiceRecipeByModelUUID(String modelUUID, String action) {\r
+ ServiceRecipe rec = new ServiceRecipe();\r
+ return rec;\r
+ }\r
+ };\r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"E2EService\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("Failed calling bpmn properties is null") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestNullReceipe(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ return null;\r
+ }\r
+ };\r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"E2EService\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("Recipe could not be retrieved from catalog DB null") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestNullDBResponse(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ return null;\r
+ }\r
+ };\r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"e2eservice\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("Recipe does not exist in catalog DB") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestInvalidRequest(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ List<InfraActiveRequests> activeReqlist = new ArrayList<>();\r
+ InfraActiveRequests req = new InfraActiveRequests();\r
+ req.setAaiServiceId("39493992");\r
+ \r
+ activeReqlist.add(req);\r
+ return activeReqlist;\r
+ }\r
+ };\r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"e2eservice\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("The existing request must finish or be cleaned up before proceeding.") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestEmptyDBQuery(){\r
+ new MockUp<RequestsDatabase>() {\r
+ @Mock\r
+ private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {\r
+ return Collections.EMPTY_LIST;\r
+ }\r
+ };\r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"e2eservice\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("Recipe does not exist in catalog DB") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestDBQueryFail(){\r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"e2eservice\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("SVC2000") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void createE2EServiceInstanceTestForEmptyRequest(){\r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "";\r
+ Response resp = instance.createE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("Mapping of request to JSON object failed. No content to map to Object due to end of input") != -1);\r
+ }\r
+ \r
+ @Test\r
+ public void deleteE2EServiceInstanceTestNormal(){\r
+ E2EServiceInstances instance = new E2EServiceInstances();\r
+ String request = "{\"service\":{\"name\":\"e2eservice\",\"serviceDefId\":\"37889593\",\"templateId\":\"2000039\",\"parameters\":{\"domainHost\":\"test\"}}}";\r
+ Response resp = instance.deleteE2EServiceInstance(request, "v2");\r
+ String respStr = resp.getEntity().toString();\r
+ assertTrue(respStr.indexOf("SVC2000") != -1);\r
+ }\r
+}\r