5c5d6fd417b019252b1a9c335965c31f8e4e05d3
[vid.git] / vid-app-common / src / test / java / org / onap / vid / mso / MsoOperationalEnvironmentTest.java
1 package org.onap.vid.mso;
2
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import com.fasterxml.jackson.databind.SerializationFeature;
6 import com.google.common.collect.ImmutableList;
7 import com.google.common.collect.ImmutableListMultimap;
8 import org.apache.commons.io.IOUtils;
9 import org.onap.vid.changeManagement.RequestDetailsWrapper;
10 import org.onap.vid.controllers.OperationalEnvironmentController;
11 import org.onap.vid.controllers.OperationalEnvironmentController.OperationalEnvironmentManifest;
12 import org.onap.vid.mso.MsoBusinessLogic;
13 import org.onap.vid.mso.MsoBusinessLogicImpl;
14 import org.onap.vid.mso.model.OperationalEnvironmentActivateInfo;
15 import org.onap.vid.mso.model.OperationalEnvironmentDeactivateInfo;
16 import org.onap.vid.mso.rest.OperationalEnvironment.OperationEnvironmentRequestDetails;
17 import org.onap.vid.mso.rest.RequestDetails;
18 import org.skyscreamer.jsonassert.JSONAssert;
19 import org.skyscreamer.jsonassert.JSONCompareMode;
20 import org.testng.annotations.DataProvider;
21 import org.testng.annotations.Test;
22
23 import java.io.IOException;
24 import java.net.URL;
25 import java.util.HashMap;
26 import java.util.LinkedList;
27 import java.util.List;
28 import java.util.Map;
29 import java.util.stream.Collectors;
30
31 @Test
32 public class MsoOperationalEnvironmentTest {
33
34     private MsoBusinessLogic msoBusinessLogic = new MsoBusinessLogicImpl(null,null);
35
36     @Test(dataProvider = "getOperationalEnvironmentActivationPermutations")
37     public void testJsonResultOfOperationalEnvironmentActivationRequestDetails(HashMap<String, String> permutation) throws IOException {
38
39         // Convert 'manifest' to model
40         final OperationalEnvironmentManifest manifest = new ObjectMapper().readerFor(OperationalEnvironmentManifest.class).readValue(permutation.get("<manifest>"));
41
42         // build OperationalEnvironmentActivateInfo
43         OperationalEnvironmentActivateInfo inputUnderTest = createOperationalEnvironmentActivateInfo("<instanceId>", permutation.get("<userId>"), manifest, permutation.get("<relatedInstanceId>"), permutation.get("<relatedInstanceName>"), permutation.get("<workloadContext>"));
44
45         // transform to RequestDetails, and serialize to json
46         //   -> actually, the function "msoBusinessLogic.createOperationalEnvironmentActivationRequestDetails"
47         //      is the code under test here
48         final RequestDetailsWrapper<RequestDetails> operationalEnvironmentActivationRequestDetails = msoBusinessLogic.createOperationalEnvironmentActivationRequestDetails(inputUnderTest);
49
50         String expected = buildExpectation("payload_jsons/activateOperationalEnvironmentsPayloadToMso.json", permutation);
51
52         assertThatExpectationIsLikeObject(expected, operationalEnvironmentActivationRequestDetails);
53     }
54
55     @DataProvider
56     private Object[][] getOperationalEnvironmentActivationPermutations() {
57         final String manifest = "" +
58                 "{" +
59                 "  \"serviceModelList\": [" +
60                 "    {" +
61                 "      \"serviceModelVersionId\": \"uuid2\"," +
62                 "      \"recoveryAction\": \"retry\"" +
63                 "    }" +
64                 "  ]" +
65                 "}";
66
67
68         final ImmutableListMultimap<String, String> options = ImmutableListMultimap.<String, String>builder()
69                 .putAll("<instanceId>", "instanceId")
70                 .putAll("<userId>", "1", "0198adb8-87fd-46ef-94ae-258816629c8b")
71                 .putAll("<relatedInstanceId>", "relatedInstanceId", "2744cf56-4f00-4e48-917b-c3bd3b1f8984")
72                 .putAll("<relatedInstanceName>", "relatedInstanceName", "Brooklynn Puanani")
73                 .putAll("<workloadContext>", "workloadContext", "VNF_E2E-extreme")
74                 .putAll("<manifest>", manifest)
75                 .build();
76
77         List<HashMap<String, String>> permutations = permuteOptions(options);
78
79         return permutations.stream().map(m -> new Object[] { m }).collect(Collectors.toList()).toArray(new Object[0][0]);
80     }
81
82     @Test(dataProvider = "getOperationalEnvironmentCreationPermutations")
83     public void testJsonResultOfOperationalEnvironmentCreationRequestDetails(HashMap<String, String> permutation) throws IOException {
84
85         // build OperationalEnvironmentCreateBody
86         OperationalEnvironmentController.OperationalEnvironmentCreateBody inputUnderTest = createOperationalEnvironmentCreateBody(permutation.get("<instanceName>"), permutation.get("<ecompInstanceId>"), permutation.get("<ecompInstanceName>"), permutation.get("<operationalEnvType>"), permutation.get("<tenantContext>"), permutation.get("<workloadContext>"));
87
88         // transform to RequestDetails, and serialize to json
89         //   -> actually, the function "msoBusinessLogic.createOperationalEnvironmentActivationRequestDetails"
90         //      is the code under test here
91         final RequestDetailsWrapper<OperationEnvironmentRequestDetails> operationalEnvironmentCreationRequestDetails = msoBusinessLogic.convertParametersToRequestDetails(inputUnderTest, permutation.get("<userId>"));
92
93         String expected = buildExpectation("payload_jsons/createOperationalEnvironmentsPayloadToMso.json", permutation);
94
95         assertThatExpectationIsLikeObject(expected, operationalEnvironmentCreationRequestDetails);
96     }
97
98     @DataProvider
99     private Object[][] getOperationalEnvironmentCreationPermutations() {
100
101         final ImmutableListMultimap<String, String> options = ImmutableListMultimap.<String, String>builder()
102                 // instanceName, ecompInstanceId, ecompInstanceName, operationalEnvType, tenantContext, workloadContext
103                 .putAll("<userId>", "1", "ceb60bba-7c18-49cd-a8f6-83ff2e1430b0", "Storm Landebert")
104                 .putAll("<instanceName>", "instanceName", "Slavica Hadrien")
105                 .putAll("<ecompInstanceId>", "ecompInstanceId", "58ec6753-957f-4124-8f92-c1c0bd2464a4")
106                 .putAll("<ecompInstanceName>", "ecompInstanceName", "Bente Keelin")
107                 .putAll("<operationalEnvType>", "operationalEnvType", "VNF")
108                 .putAll("<tenantContext>", "tenantContext", "Production")
109                 .putAll("<workloadContext>", "workloadContext", "E2E-extreme")
110                 .build();
111
112         List<HashMap<String, String>> permutations = permuteOptions(options);
113
114         return permutations.stream().map(m -> new Object[] { m }).collect(Collectors.toList()).toArray(new Object[0][0]);
115     }
116
117     @Test(dataProvider = "getOperationalEnvironmentDeactivationPermutations")
118     public void testJsonResultOfOperationalEnvironmentDeactivationRequestDetails(HashMap<String, String> permutation) throws IOException {
119
120         OperationalEnvironmentDeactivateInfo inputUnderTest = createOperationalEnvironmentDeactivateInfo("operationalEnvId>", permutation.get("<userId>"));
121
122         final RequestDetailsWrapper<RequestDetails> operationalEnvironmentDeactivationRequestDetails = msoBusinessLogic.createOperationalEnvironmentDeactivationRequestDetails(inputUnderTest);
123
124         String expected = buildExpectation("payload_jsons/deactivateOperationalEnvironmentsPayloadToMso.json", permutation);
125
126         assertThatExpectationIsLikeObject(expected, operationalEnvironmentDeactivationRequestDetails);
127     }
128
129     @DataProvider
130     private Object[][] getOperationalEnvironmentDeactivationPermutations() {
131
132         final ImmutableListMultimap<String, String> options = ImmutableListMultimap.<String, String>builder()
133                 .putAll("<userId>", "instanceName", "Slavica Hadrien")
134                 .build();
135
136         List<HashMap<String, String>> permutations = permuteOptions(options);
137
138         return permutations.stream().map(m -> new Object[] { m }).collect(Collectors.toList()).toArray(new Object[0][0]);
139     }
140
141     private List<HashMap<String, String>> permuteOptions(ImmutableListMultimap<String, String> options) {
142         // try any value, where the other keys are on the default one (index zero)
143         // result it's not the whole world of permutations, but rather a skim set, which its
144         // size is as the number of unique values in "options"
145
146         HashMap<String, String> baseMutation = new HashMap<>();
147         for (String key : options.keySet()) {
148             baseMutation.put(key, options.get(key).get(0));
149         }
150
151         List<HashMap<String, String>> res = new LinkedList<>();
152         res.add(baseMutation);
153
154         for (String key : options.keySet()) {
155             final ImmutableList<String> entry = options.get(key);
156             for (String value : entry.subList(1, entry.size())) { // skip the first option at index zero
157                 HashMap<String, String> mutation = new HashMap<>();
158                 mutation.putAll(baseMutation);
159                 mutation.put(key, value);
160                 res.add(mutation);
161             }
162         }
163         return res;
164     }
165
166     public static void assertThatExpectationIsLikeObject(String expected, Object requestDetails) throws JsonProcessingException {
167         final String requestDetailsAsString = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(requestDetails);
168
169         // assert for exact match
170         try {
171             JSONAssert.assertEquals("built mso request is not ok", expected, requestDetailsAsString, JSONCompareMode.STRICT);
172         } catch (AssertionError | Exception e) {
173             System.out.println("requestDetailsAsString: \n" + requestDetailsAsString);
174             System.out.println("expected: \n" + expected);
175             throw e;
176         }
177     }
178
179     private String buildExpectation(String modelFileName, HashMap<String, String> permutation) throws IOException {
180         // load expected result, and populate it with current input 'permutation' values
181         final URL resource = this.getClass().getResource("/" + modelFileName);
182         String expected = IOUtils.toString(resource, "UTF-8");
183
184         for (Map.Entry<String, String> stringStringEntry : permutation.entrySet()) {
185             expected = expected.replaceAll(stringStringEntry.getKey(), stringStringEntry.getValue());
186         }
187         return expected;
188     }
189
190     private OperationalEnvironmentActivateInfo createOperationalEnvironmentActivateInfo(String operationalEnvId, String userId, OperationalEnvironmentManifest manifest, String relatedInstanceId, String relatedInstanceName, String workloadContext) {
191         OperationalEnvironmentController.OperationalEnvironmentActivateBody body = new OperationalEnvironmentController.OperationalEnvironmentActivateBody(relatedInstanceId, relatedInstanceName, workloadContext, manifest);
192         return new OperationalEnvironmentActivateInfo(body, userId, operationalEnvId);
193     }
194
195     private OperationalEnvironmentDeactivateInfo createOperationalEnvironmentDeactivateInfo(String operationalEnvId, String userId) {
196         return new OperationalEnvironmentDeactivateInfo(userId, operationalEnvId);
197     }
198
199     private OperationalEnvironmentController.OperationalEnvironmentCreateBody createOperationalEnvironmentCreateBody(String instanceName, String ecompInstanceId, String ecompInstanceName, String operationalEnvType, String tenantContext, String workloadContext) {
200         return new OperationalEnvironmentController.OperationalEnvironmentCreateBody(instanceName, ecompInstanceId, ecompInstanceName, operationalEnvType, tenantContext, workloadContext);
201     }
202 }