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