From 1cfb08779ea0e00be69e072a940b3063e049fe6b Mon Sep 17 00:00:00 2001 From: Ofir Sonsino Date: Wed, 31 Jan 2018 17:19:00 +0200 Subject: org.onap migration Change-Id: I52f0b2851f2c765752b6d21f49b32136d7d72a3d Issue-ID: VID-86 Signed-off-by: Ofir Sonsino --- .../vid/mso/MsoOperationalEnvironmentTest.java | 215 +++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 vid-app-common/src/test/java/org/onap/vid/mso/MsoOperationalEnvironmentTest.java (limited to 'vid-app-common/src/test/java/org/onap/vid/mso/MsoOperationalEnvironmentTest.java') diff --git a/vid-app-common/src/test/java/org/onap/vid/mso/MsoOperationalEnvironmentTest.java b/vid-app-common/src/test/java/org/onap/vid/mso/MsoOperationalEnvironmentTest.java new file mode 100644 index 00000000..fcf246c9 --- /dev/null +++ b/vid-app-common/src/test/java/org/onap/vid/mso/MsoOperationalEnvironmentTest.java @@ -0,0 +1,215 @@ +package org.onap.vid.mso; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableListMultimap; +import org.apache.commons.io.IOUtils; +import org.openecomp.portalsdk.core.util.SystemProperties; +import org.onap.vid.changeManagement.RequestDetailsWrapper; +import org.onap.vid.controller.MsoConfig; +import org.onap.vid.controller.OperationalEnvironmentController; +import org.onap.vid.controller.OperationalEnvironmentController.*; +import org.onap.vid.controller.WebConfig; +import org.onap.vid.mso.MsoBusinessLogic; +import org.onap.vid.mso.model.OperationalEnvironmentActivateInfo; +import org.onap.vid.mso.model.OperationalEnvironmentDeactivateInfo; +import org.onap.vid.mso.rest.OperationalEnvironment.OperationEnvironmentRequestDetails; +import org.onap.vid.mso.rest.RequestDetails; +import org.onap.vid.properties.AsdcClientConfiguration; +import org.skyscreamer.jsonassert.JSONAssert; +import org.skyscreamer.jsonassert.JSONCompareMode; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; +import org.springframework.test.context.web.WebAppConfiguration; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import javax.inject.Inject; +import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Test +@ContextConfiguration(classes = { WebConfig.class, AsdcClientConfiguration.class, SystemProperties.class, MsoConfig.class }) +@WebAppConfiguration +public class MsoOperationalEnvironmentTest extends AbstractTestNGSpringContextTests { + + @Inject + private MsoBusinessLogic msoBusinessLogic; + + @Test(dataProvider = "getOperationalEnvironmentActivationPermutations") + public void testJsonResultOfOperationalEnvironmentActivationRequestDetails(HashMap permutation) throws IOException { + + // Convert 'manifest' to model + final OperationalEnvironmentManifest manifest = new ObjectMapper().readerFor(OperationalEnvironmentManifest.class).readValue(permutation.get("")); + + // build OperationalEnvironmentActivateInfo + OperationalEnvironmentActivateInfo inputUnderTest = createOperationalEnvironmentActivateInfo("", permutation.get(""), manifest, permutation.get(""), permutation.get(""), permutation.get("")); + + // transform to RequestDetails, and serialize to json + // -> actually, the function "msoBusinessLogic.createOperationalEnvironmentActivationRequestDetails" + // is the code under test here + final RequestDetailsWrapper operationalEnvironmentActivationRequestDetails = msoBusinessLogic.createOperationalEnvironmentActivationRequestDetails(inputUnderTest); + + String expected = buildExpectation("payload_jsons/activateOperationalEnvironmentsPayloadToMso.json", permutation); + + assertThatExpectationIsLikeObject(expected, operationalEnvironmentActivationRequestDetails); + } + + @DataProvider + private Object[][] getOperationalEnvironmentActivationPermutations() throws IOException { + final String manifest = "" + + "{" + + " \"serviceModelList\": [" + + " {" + + " \"serviceModelVersionId\": \"uuid2\"," + + " \"recoveryAction\": \"retry\"" + + " }" + + " ]" + + "}"; + + + final ImmutableListMultimap options = ImmutableListMultimap.builder() + .putAll("", "instanceId") + .putAll("", "1", "0198adb8-87fd-46ef-94ae-258816629c8b") + .putAll("", "relatedInstanceId", "2744cf56-4f00-4e48-917b-c3bd3b1f8984") + .putAll("", "relatedInstanceName", "Brooklynn Puanani") + .putAll("", "workloadContext", "VNF_E2E-extreme") + .putAll("", manifest) + .build(); + + List> permutations = permuteOptions(options); + + return permutations.stream().map(m -> new Object[] { m }).collect(Collectors.toList()).toArray(new Object[0][0]); + } + + @Test(dataProvider = "getOperationalEnvironmentCreationPermutations") + public void testJsonResultOfOperationalEnvironmentCreationRequestDetails(HashMap permutation) throws IOException { + + // build OperationalEnvironmentCreateBody + OperationalEnvironmentController.OperationalEnvironmentCreateBody inputUnderTest = createOperationalEnvironmentCreateBody(permutation.get(""), permutation.get(""), permutation.get(""), permutation.get(""), permutation.get(""), permutation.get("")); + + // transform to RequestDetails, and serialize to json + // -> actually, the function "msoBusinessLogic.createOperationalEnvironmentActivationRequestDetails" + // is the code under test here + final RequestDetailsWrapper operationalEnvironmentCreationRequestDetails = msoBusinessLogic.convertParametersToRequestDetails(inputUnderTest, permutation.get("")); + + String expected = buildExpectation("payload_jsons/createOperationalEnvironmentsPayloadToMso.json", permutation); + + assertThatExpectationIsLikeObject(expected, operationalEnvironmentCreationRequestDetails); + } + + @DataProvider + private Object[][] getOperationalEnvironmentCreationPermutations() throws IOException { + + final ImmutableListMultimap options = ImmutableListMultimap.builder() + // instanceName, ecompInstanceId, ecompInstanceName, operationalEnvType, tenantContext, workloadContext + .putAll("", "1", "ceb60bba-7c18-49cd-a8f6-83ff2e1430b0", "Storm Landebert") + .putAll("", "instanceName", "Slavica Hadrien") + .putAll("", "ecompInstanceId", "58ec6753-957f-4124-8f92-c1c0bd2464a4") + .putAll("", "ecompInstanceName", "Bente Keelin") + .putAll("", "operationalEnvType", "VNF") + .putAll("", "tenantContext", "Production") + .putAll("", "workloadContext", "E2E-extreme") + .build(); + + List> permutations = permuteOptions(options); + + return permutations.stream().map(m -> new Object[] { m }).collect(Collectors.toList()).toArray(new Object[0][0]); + } + + @Test(dataProvider = "getOperationalEnvironmentDeactivationPermutations") + public void testJsonResultOfOperationalEnvironmentDeactivationRequestDetails(HashMap permutation) throws IOException { + + OperationalEnvironmentDeactivateInfo inputUnderTest = createOperationalEnvironmentDeactivateInfo("operationalEnvId>", permutation.get("")); + + final RequestDetailsWrapper operationalEnvironmentDeactivationRequestDetails = msoBusinessLogic.createOperationalEnvironmentDeactivationRequestDetails(inputUnderTest); + + String expected = buildExpectation("payload_jsons/deactivateOperationalEnvironmentsPayloadToMso.json", permutation); + + assertThatExpectationIsLikeObject(expected, operationalEnvironmentDeactivationRequestDetails); + } + + @DataProvider + private Object[][] getOperationalEnvironmentDeactivationPermutations() throws IOException { + + final ImmutableListMultimap options = ImmutableListMultimap.builder() + .putAll("", "instanceName", "Slavica Hadrien") + .build(); + + List> permutations = permuteOptions(options); + + return permutations.stream().map(m -> new Object[] { m }).collect(Collectors.toList()).toArray(new Object[0][0]); + } + + private List> permuteOptions(ImmutableListMultimap options) { + // try any value, where the other keys are on the default one (index zero) + // result it's not the whole world of permutations, but rather a skim set, which its + // size is as the number of unique values in "options" + + HashMap baseMutation = new HashMap<>(); + for (String key : options.keySet()) { + baseMutation.put(key, options.get(key).get(0)); + } + + List> res = new LinkedList<>(); + res.add(baseMutation); + + for (String key : options.keySet()) { + final ImmutableList entry = options.get(key); + for (String value : entry.subList(1, entry.size())) { // skip the first option at index zero + HashMap mutation = new HashMap<>(); + mutation.putAll(baseMutation); + mutation.put(key, value); + res.add(mutation); + } + } + return res; + } + + private void assertThatExpectationIsLikeObject(String expected, Object requestDetails) throws JsonProcessingException { + final String requestDetailsAsString = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(requestDetails); + + // assert for exact match + try { + JSONAssert.assertEquals("built mso request is not ok", expected, requestDetailsAsString, JSONCompareMode.STRICT); + } catch (AssertionError | Exception e) { + System.out.println("requestDetailsAsString: \n" + requestDetailsAsString); + System.out.println("expected: \n" + expected); + throw e; + } + } + + private String buildExpectation(String modelFileName, HashMap permutation) throws IOException { + // load expected result, and populate it with current input 'permutation' values + final URL resource = this.getClass().getResource("/" + modelFileName); + String expected = IOUtils.toString(resource, "UTF-8"); + + for (Map.Entry stringStringEntry : permutation.entrySet()) { + expected = expected.replaceAll(stringStringEntry.getKey(), stringStringEntry.getValue()); + } + return expected; + } + + + + private OperationalEnvironmentActivateInfo createOperationalEnvironmentActivateInfo(String operationalEnvId, String userId, OperationalEnvironmentManifest manifest, String relatedInstanceId, String relatedInstanceName, String workloadContext) { + OperationalEnvironmentController.OperationalEnvironmentActivateBody body = new OperationalEnvironmentController.OperationalEnvironmentActivateBody(relatedInstanceId, relatedInstanceName, workloadContext, manifest); + return new OperationalEnvironmentActivateInfo(body, userId, operationalEnvId); + } + + private OperationalEnvironmentDeactivateInfo createOperationalEnvironmentDeactivateInfo(String operationalEnvId, String userId) { + return new OperationalEnvironmentDeactivateInfo(userId, operationalEnvId); + } + + private OperationalEnvironmentController.OperationalEnvironmentCreateBody createOperationalEnvironmentCreateBody(String instanceName, String ecompInstanceId, String ecompInstanceName, String operationalEnvType, String tenantContext, String workloadContext) { + return new OperationalEnvironmentController.OperationalEnvironmentCreateBody(instanceName, ecompInstanceId, ecompInstanceName, operationalEnvType, tenantContext, workloadContext); + } + +} -- cgit 1.2.3-korg