\r
\r
\r
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;\r
+import static com.github.tomakehurst.wiremock.client.WireMock.post;\r
+import static com.github.tomakehurst.wiremock.client.WireMock.put;\r
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;\r
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;\r
+import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;\r
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockAAIVfModule;\r
import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;\r
import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithPriority;\r
import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVfModuleIdNoResponse;\r
import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVolumeGroupById;\r
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchGenericVnf;\r
+import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;\r
import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;\r
import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutVfModuleIdNoResponse;\r
import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;\r
import org.junit.Ignore;\r
import org.junit.Test;\r
import org.openecomp.mso.bpmn.common.WorkflowTest;\r
-import org.openecomp.mso.bpmn.common.WorkflowTest.CallbackSet;\r
import org.openecomp.mso.bpmn.mock.FileUtil;\r
\r
/**\r
\r
logEnd();\r
}\r
+ \r
+ /**\r
+ * Test the happy path through the flow with Building Blocks interface.\r
+ */\r
+ @Test \r
+ \r
+ @Deployment(resources = {\r
+ "subprocess/DoUpdateVfModule.bpmn",\r
+ "subprocess/PrepareUpdateAAIVfModule.bpmn",\r
+ "subprocess/ConfirmVolumeGroupTenant.bpmn",\r
+ "subprocess/SDNCAdapterV1.bpmn",\r
+ "subprocess/VnfAdapterRestV1.bpmn",\r
+ "subprocess/UpdateAAIGenericVnf.bpmn",\r
+ "subprocess/UpdateAAIVfModule.bpmn"\r
+ })\r
+ public void happyPathBB() throws IOException {\r
+ \r
+ logStart();\r
+ \r
+ MockAAIVfModule();\r
+ MockPatchGenericVnf("skask");\r
+ MockPatchVfModuleId("skask", ".*");\r
+ MockSDNCAdapterVfModule();\r
+ MockVNFAdapterRestVfModule();\r
+ \r
+ String businessKey = UUID.randomUUID().toString();\r
+ Map<String, Object> variables = new HashMap<String, Object>();\r
+ variables.put("mso-request-id", "DEV-VF-0011");\r
+ variables.put("isDebugLogEnabled","true");\r
+ variables.put("msoRequestId", "DEV-VF-0011");\r
+ variables.put("isBaseVfModule", "false");\r
+ variables.put("isDebugLogEnabled", "true");\r
+ variables.put("disableRollback", "true");\r
+ variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");\r
+ variables.put("vnfId", "skask");\r
+ variables.put("vfModuleId", "supercool");\r
+ variables.put("vnfType", "pcrf-capacity");\r
+ variables.put("isVidRequest", "true");\r
+ variables.put("volumeGroupId", "78987");\r
+ variables.put("usePreload", true);\r
+ \r
+ variables.put("sdncVersion", "1702");\r
+ \r
+ variables.put("lcpCloudRegionId", "MDTWNJ21");\r
+ variables.put("tenantId", "fba1bd1e195a404cacb9ce17a9b2b421");\r
+ \r
+ String vfModuleModelInfo = "{ "+ "\"modelType\": \"vfModule\"," +\r
+ "\"modelInvariantUuid\": \"introvert\"," + \r
+ "\"modelUuid\": \"3.14\"," +\r
+ "\"modelName\": \"STMTN5MMSC21-MMSC::model-1-0\"," +\r
+ "\"modelVersion\": \"1\"," + \r
+ "\"modelCustomizationUuid\": \"MODEL-123\"" + "}";\r
+ variables.put("vfModuleModelInfo", vfModuleModelInfo);\r
+ \r
+ String vnfModelInfo = "{ "+ "\"modelType\": \"vnf\"," +\r
+ "\"modelInvariantUuid\": \"introvert\"," + \r
+ "\"modelUuid\": \"3.14\"," +\r
+ "\"modelName\": \"VNF-STMTN5MMSC21-MMSC::model-1-0\"," +\r
+ "\"modelVersion\": \"1\"," + \r
+ "\"modelCustomizationUuid\": \"VNF-MODEL-123\"" + "}";\r
+ variables.put("vnfModelInfo", vnfModelInfo);\r
+ \r
+ invokeSubProcess("DoUpdateVfModule", businessKey, variables);\r
+ \r
+ injectSDNCCallbacks(callbacks, "changeassign, query");\r
+ injectVNFRestCallbacks(callbacks, "vnfUpdate");\r
+ injectSDNCCallbacks(callbacks, "activate");\r
+\r
+ waitForProcessEnd(businessKey, 10000);\r
+ \r
+ Assert.assertTrue(isProcessEnded(businessKey));\r
+ checkVariable(businessKey, "DoUpdateVfModuleSuccessIndicator", true);\r
+ \r
+ String heatStackId = (String) getVariableFromHistory(businessKey, "DOUPVfMod_heatStackId");\r
+ System.out.println("Heat stack Id from AAI: " + heatStackId);\r
+ \r
+ logEnd();\r
+ }\r
+ \r
+ // start of mocks used locally and by other VF Module unit tests\r
+ public static void MockSDNCAdapterVfModule() {\r
+ // simplified the implementation to return "success" for all requests\r
+ stubFor(post(urlEqualTo("/SDNCAdapter"))\r
+// .withRequestBody(containing("SvcInstanceId><"))\r
+ .willReturn(aResponse()\r
+ .withStatus(200)\r
+ .withHeader("Content-Type", "text/xml")\r
+ .withBodyFile("VfModularity/StandardSDNCSynchResponse.xml")));\r
+// stubFor(post(urlEqualTo("/SDNCAdapter"))\r
+// .withRequestBody(containing("vnf-type>STMTN"))\r
+// .willReturn(aResponse()\r
+// .withStatus(200)\r
+// .withHeader("Content-Type", "text/xml")\r
+// .withBodyFile("VfModularity/StandardSDNCSynchResponse.xml")));\r
+// stubFor(post(urlEqualTo("/SDNCAdapter"))\r
+// .withRequestBody(containing("SvcAction>query"))\r
+// .willReturn(aResponse()\r
+// .withStatus(200)\r
+// .withHeader("Content-Type", "text/xml")\r
+// .withBodyFile("VfModularity/StandardSDNCSynchResponse.xml")));\r
+ }\r
+\r
+ public static void MockVNFAdapterRestVfModule() {\r
+ stubFor(put(urlEqualTo("/vnfs/v1/vnfs/skask/vf-modules/supercool"))\r
+ .willReturn(aResponse()\r
+ .withStatus(202)\r
+ .withHeader("Content-Type", "application/xml")));\r
+ stubFor(post(urlMatching("/vnfs/v1/vnfs/.*/vf-modules"))\r
+ .willReturn(aResponse()\r
+ .withStatus(202)\r
+ .withHeader("Content-Type", "application/xml")));\r
+ stubFor(post(urlEqualTo("/vnfs/v1/vnfs/skask/vf-modules"))\r
+ .willReturn(aResponse()\r
+ .withStatus(202)\r
+ .withHeader("Content-Type", "application/xml")));\r
+ stubFor(put(urlEqualTo("/vnfs/v1/volume-groups/78987"))\r
+ .willReturn(aResponse()\r
+ .withStatus(202)\r
+ .withHeader("Content-Type", "application/xml")));\r
+ }\r
}\r
\r