c30b9dedf2e8e2b9b372b4ebd92b18f9bf8e4524
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.apihandlerinfra;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import java.io.IOException;
26 import java.io.StringReader;
27 import java.net.URL;
28 import java.nio.file.Files;
29 import java.nio.file.Paths;
30 import java.util.Arrays;
31 import java.util.Collection;
32 import java.util.HashMap;
33 import java.util.Optional;
34 import javax.ws.rs.core.HttpHeaders;
35 import javax.ws.rs.core.Response;
36 import javax.xml.parsers.DocumentBuilder;
37 import javax.xml.parsers.DocumentBuilderFactory;
38 import org.apache.http.HttpStatus;
39 import org.junit.ClassRule;
40 import org.junit.Rule;
41 import org.junit.Test;
42 import org.junit.rules.ExpectedException;
43 import org.junit.runner.RunWith;
44 import org.onap.so.apihandler.common.ErrorNumbers;
45 import org.onap.so.exceptions.ValidationException;
46 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
47 import org.springframework.test.context.junit4.rules.SpringClassRule;
48 import org.springframework.test.context.junit4.rules.SpringMethodRule;
49 import com.fasterxml.jackson.core.JsonParseException;
50 import com.fasterxml.jackson.databind.JsonMappingException;
51 import com.fasterxml.jackson.databind.ObjectMapper;
52 import junitparams.JUnitParamsRunner;
53 import junitparams.Parameters;
54 import org.w3c.dom.Document;
55 import org.xml.sax.InputSource;
56
57 @RunWith(JUnitParamsRunner.class)
58 public class MsoRequestTest extends BaseTest {
59     private ObjectMapper mapper = new ObjectMapper();
60     private HashMap<String, String> instanceIdMapTest = new HashMap<String, String>();
61     private ServiceInstancesRequest sir;
62     private MsoRequest msoRequest;
63     private Action action;
64     private String version;
65     private int reqVersion;
66     private String originalRequestJSON;
67     private String requestJSON;
68     private boolean expected;
69     private String expectedException;
70
71     @ClassRule
72     public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();
73
74     @Rule
75     public final SpringMethodRule springMethodRule = new SpringMethodRule();
76
77     @Rule
78     public ExpectedException thrown = ExpectedException.none();
79
80     public String inputStream(String JsonInput) throws IOException {
81         JsonInput = "src/test/resources/MsoRequestTest" + JsonInput;
82         String input = new String(Files.readAllBytes(Paths.get(JsonInput)));
83         return input;
84     }
85
86     // Tests for successful validation of incoming JSON requests through the parse method
87     @Test
88     @Parameters(method = "successParameters")
89     public void successTest(ServiceInstancesRequest sir, HashMap<String, String> instanceIdMapTest, Action action,
90             int reqVersion) throws ValidationException, IOException {
91         this.sir = sir;
92         this.instanceIdMapTest = instanceIdMapTest;
93         this.action = action;
94         this.reqVersion = reqVersion;
95         this.version = "v" + reqVersion;
96         this.instanceIdMapTest.put("serviceInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
97         this.instanceIdMapTest.put("vnfInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
98         this.instanceIdMapTest.put("vfModuleInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
99         this.instanceIdMapTest.put("volumeGroupInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
100         this.instanceIdMapTest.put("networkInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
101         this.instanceIdMapTest.put("configurationInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
102         this.msoRequest = new MsoRequest();
103         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
104     }
105
106     @Parameters
107     private Collection<Object[]> successParameters() throws JsonParseException, JsonMappingException, IOException {
108         return Arrays.asList(new Object[][] {
109                 {mapper.readValue(inputStream("/CloudConfiguration/EmptyCloudConfiguration.json"),
110                         ServiceInstancesRequest.class), instanceIdMapTest, Action.updateInstance, "3"},
111                 {mapper.readValue(inputStream("/ProjectAndOwningEntity/EmptyOwningEntityName.json"),
112                         ServiceInstancesRequest.class), instanceIdMapTest, Action.createInstance, "5"},
113                 {mapper.readValue(inputStream("/PlatformAndLineOfBusiness/OptionalLineOfBusiness.json"),
114                         ServiceInstancesRequest.class), instanceIdMapTest, Action.createInstance, "6"},
115                 {mapper.readValue(inputStream("/ProjectAndOwningEntity/OptionalProject.json"),
116                         ServiceInstancesRequest.class), instanceIdMapTest, Action.createInstance, "6"},
117                 {mapper.readValue(inputStream("/PlatformAndLineOfBusiness/PlatformTest.json"),
118                         ServiceInstancesRequest.class), instanceIdMapTest, Action.updateInstance, "5"},
119                 {mapper.readValue(inputStream("/RequestInfo/EmptyRequestorId.json"), ServiceInstancesRequest.class),
120                         instanceIdMapTest, Action.createInstance, "3"},
121                 {mapper.readValue(inputStream("/RequestInfo/ServiceProductFamilyIdFlag.json"),
122                         ServiceInstancesRequest.class), instanceIdMapTest, Action.updateInstance, "5"},
123                 {mapper.readValue(inputStream("/RequestInfo/ServiceProductFamilyIdUpdate.json"),
124                         ServiceInstancesRequest.class), instanceIdMapTest, Action.updateInstance, "5"},
125                 {mapper.readValue(inputStream("/ModelInfo/ModelCustomizationIdUsingPreload.json"),
126                         ServiceInstancesRequest.class), instanceIdMapTest, Action.replaceInstance, "5"},
127                 {mapper.readValue(inputStream("/ModelInfo/ModelInvariantIdConfigurationDelete.json"),
128                         ServiceInstancesRequest.class), instanceIdMapTest, Action.deleteInstance, "3"},
129                 {mapper.readValue(inputStream("/ModelInfo/ModelInvariantIdService.json"),
130                         ServiceInstancesRequest.class), instanceIdMapTest, Action.deactivateInstance, "4"},
131                 {mapper.readValue(inputStream("/ModelInfo/ModelVersionNetwork.json"), ServiceInstancesRequest.class),
132                         instanceIdMapTest, Action.deleteInstance, "3"},
133                 {mapper.readValue(inputStream("/ModelInfo/VnfModelCustomizationIdEmpty.json"),
134                         ServiceInstancesRequest.class), instanceIdMapTest, Action.deleteInstance, "5"},
135                 {mapper.readValue(inputStream("/ModelInfo/VnfModelCustomizationNameNull.json"),
136                         ServiceInstancesRequest.class), instanceIdMapTest, Action.replaceInstance, "5"},
137                 {mapper.readValue(inputStream("/ModelInfo/VnfModelCustomizationTest.json"),
138                         ServiceInstancesRequest.class), instanceIdMapTest, Action.replaceInstance, "5"},
139                 {mapper.readValue(inputStream("/ModelInfo/ServiceModelNameEmptyOnActivate.json"),
140                         ServiceInstancesRequest.class), instanceIdMapTest, Action.activateInstance, "2"},
141                 {mapper.readValue(inputStream("/ModelInfo/ServiceModelNameEmptyOnDelete.json"),
142                         ServiceInstancesRequest.class), instanceIdMapTest, Action.deleteInstance, "2"},
143                 {mapper.readValue(inputStream("/ModelInfo/ValidModelCustomizationId.json"),
144                         ServiceInstancesRequest.class), instanceIdMapTest, Action.createInstance, "4"},
145                 {mapper.readValue(inputStream("/ModelInfo/ValidModelCustomizationId.json"),
146                         ServiceInstancesRequest.class), instanceIdMapTest, Action.replaceInstance, "5"},
147                 {mapper.readValue(inputStream("/ModelInfo/ValidModelCustomizationIdService.json"),
148                         ServiceInstancesRequest.class), instanceIdMapTest, Action.replaceInstance, "5"},
149                 {mapper.readValue(inputStream("/RelatedInstances/RelatedInstances.json"),
150                         ServiceInstancesRequest.class), instanceIdMapTest, Action.activateInstance, "5"},
151                 {mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesModelInvariantId.json"),
152                         ServiceInstancesRequest.class), instanceIdMapTest, Action.deleteInstance, "5"},
153                 {mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesVfModule.json"),
154                         ServiceInstancesRequest.class), instanceIdMapTest, Action.activateInstance, "5"},
155                 {mapper.readValue(inputStream("/SuccessfulValidation/ServiceInPlaceSoftwareUpdate.json"),
156                         ServiceInstancesRequest.class), instanceIdMapTest, Action.inPlaceSoftwareUpdate, "6"},
157                 {mapper.readValue(inputStream("/SuccessfulValidation/ServiceInPlaceSoftwareUpdate.json"),
158                         ServiceInstancesRequest.class), instanceIdMapTest, Action.applyUpdatedConfig, "6"},
159                 {mapper.readValue(inputStream("/SuccessfulValidation/v5EnableService.json"),
160                         ServiceInstancesRequest.class), instanceIdMapTest, Action.enablePort, "5"},
161                 {mapper.readValue(inputStream("/SuccessfulValidation/VnfActivate.json"), ServiceInstancesRequest.class),
162                         instanceIdMapTest, Action.activateInstance, "6"},
163                 {mapper.readValue(inputStream("/RequestParameters/VnfRequestParameters.json"),
164                         ServiceInstancesRequest.class), instanceIdMapTest, Action.deleteInstance, "6"},
165                 {mapper.readValue(inputStream("/SuccessfulValidation/v3DeleteNetwork.json"),
166                         ServiceInstancesRequest.class), instanceIdMapTest, Action.deleteInstance, "3"},
167                 {mapper.readValue(inputStream("/SuccessfulValidation/v3UpdateNetwork.json"),
168                         ServiceInstancesRequest.class), instanceIdMapTest, Action.updateInstance, "3"},
169                 {mapper.readValue(inputStream("/SuccessfulValidation/v5CreateConfiguration.json"),
170                         ServiceInstancesRequest.class), instanceIdMapTest, Action.createInstance, "5"},
171                 {mapper.readValue(inputStream("/SuccessfulValidation/v6CreateConfiguration.json"),
172                         ServiceInstancesRequest.class), instanceIdMapTest, Action.createInstance, "6"},
173                 {mapper.readValue(inputStream("/SuccessfulValidation/v5EnableConfiguration.json"),
174                         ServiceInstancesRequest.class), instanceIdMapTest, Action.enablePort, "5"},
175                 {mapper.readValue(inputStream("/SuccessfulValidation/v5EnableConfiguration.json"),
176                         ServiceInstancesRequest.class), instanceIdMapTest, Action.disablePort, "5"},
177                 {mapper.readValue(inputStream("/SuccessfulValidation/v5ActivateConfiguration.json"),
178                         ServiceInstancesRequest.class), instanceIdMapTest, Action.activateInstance, "5"},
179                 {mapper.readValue(inputStream("/RelatedInstances/v5ActivateNoRelatedInstance.json"),
180                         ServiceInstancesRequest.class), instanceIdMapTest, Action.activateInstance, "5"},
181                 {mapper.readValue(inputStream("/SuccessfulValidation/v5DeactivateConfiguration.json"),
182                         ServiceInstancesRequest.class), instanceIdMapTest, Action.deactivateInstance, "5"},
183                 {mapper.readValue(inputStream("/RelatedInstances/v5DeactivateNoRelatedInstance.json"),
184                         ServiceInstancesRequest.class), instanceIdMapTest, Action.deactivateInstance, "5"},
185                 {mapper.readValue(inputStream("/SuccessfulValidation/v6AddRelationships.json"),
186                         ServiceInstancesRequest.class), instanceIdMapTest, Action.addRelationships, "6"},
187                 {mapper.readValue(inputStream("/SuccessfulValidation/UserParams.json"), ServiceInstancesRequest.class),
188                         instanceIdMapTest, Action.addRelationships, "5"},
189                 {mapper.readValue(inputStream("/SuccessfulValidation/ServiceAssign.json"),
190                         ServiceInstancesRequest.class), instanceIdMapTest, Action.assignInstance, "7"},
191                 {mapper.readValue(inputStream("/SuccessfulValidation/ServiceUnassign.json"),
192                         ServiceInstancesRequest.class), instanceIdMapTest, Action.unassignInstance, "7"}});
193     }
194
195     @Test
196     @Parameters(method = "customWorkflowSuccessParameters")
197     public void customWorkflowSuccessTest(ServiceInstancesRequest sir, HashMap<String, String> instanceIdMapTest,
198             Action action, int reqVersion) throws ValidationException, IOException {
199         this.sir = sir;
200         this.instanceIdMapTest = instanceIdMapTest;
201         this.action = action;
202         this.reqVersion = reqVersion;
203         this.version = "v" + reqVersion;
204         this.instanceIdMapTest.put("serviceInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
205         this.instanceIdMapTest.put("vnfInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
206         this.instanceIdMapTest.put("workflowUuid", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
207         this.msoRequest = new MsoRequest();
208         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
209     }
210
211     @Parameters
212     private Collection<Object[]> customWorkflowSuccessParameters()
213             throws JsonParseException, JsonMappingException, IOException {
214         return Arrays.asList(
215                 new Object[][] {{mapper.readValue(inputStream("/SuccessfulValidation/v1ExecuteCustomWorkflow.json"),
216                         ServiceInstancesRequest.class), instanceIdMapTest, Action.inPlaceSoftwareUpdate, "1"}
217
218                 });
219     }
220
221     @Test
222     @Parameters(method = "aLaCarteParameters")
223     public void aLaCarteFlagTest(boolean expected, ServiceInstancesRequest sir)
224             throws JsonParseException, IOException, ValidationException {
225         this.expected = expected;
226         this.sir = sir;
227         this.msoRequest = new MsoRequest();
228         assertEquals(expected, msoRequest.getAlacarteFlag(sir));
229     }
230
231     @Parameters
232     private Collection<Object[]> aLaCarteParameters() throws IOException {
233         return Arrays.asList(new Object[][] {
234                 {false, mapper.readValue(inputStream("/RequestParameters/RequestParametersNull.json"),
235                         ServiceInstancesRequest.class)},
236                 {true, mapper.readValue(inputStream("/RequestParameters/RequestParametersALaCarteTrue.json"),
237                         ServiceInstancesRequest.class)}});
238     }
239
240     // Tests various scenarios ensuring that requests containing missing or invalid information will throw a
241     // ValidationException
242     @Test
243     @Parameters(method = "validationParameters")
244     public void validationFailureTest(String expectedException, ServiceInstancesRequest sir,
245             HashMap<String, String> instanceIdMapTest, Action action, int reqVersion)
246             throws JsonParseException, JsonMappingException, IOException, ValidationException {
247         this.expectedException = expectedException;
248         this.sir = sir;
249         this.instanceIdMapTest = instanceIdMapTest;
250         this.action = action;
251         this.reqVersion = reqVersion;
252         this.version = "v" + reqVersion;
253         this.instanceIdMapTest.put("serviceInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
254         this.instanceIdMapTest.put("vnfInstanceId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
255         this.instanceIdMapTest.put("instanceGroupId", "ff305d54-75b4-431b-adb2-eb6b9e5ff000");
256         thrown.expect(ValidationException.class);
257         thrown.expectMessage(expectedException);
258         this.msoRequest = new MsoRequest();
259         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
260     }
261
262     @Parameters
263     private Collection<Object[]> validationParameters() throws IOException {
264         return Arrays.asList(new Object[][] {
265                 // ValidationException for CloudConfiguration
266                 {"No valid cloudConfiguration is specified",
267                         mapper.readValue(inputStream("/CloudConfiguration/CloudConfiguration.json"),
268                                 ServiceInstancesRequest.class),
269                         instanceIdMapTest, Action.createInstance, 4},
270                 {"No valid cloudConfiguration is specified",
271                         mapper.readValue(inputStream("/CloudConfiguration/CloudConfigurationNetwork.json"),
272                                 ServiceInstancesRequest.class),
273                         instanceIdMapTest, Action.createInstance, 5},
274                 {"No valid cloudConfiguration is specified",
275                         mapper.readValue(inputStream("/CloudConfiguration/CloudConfigurationVnf.json"),
276                                 ServiceInstancesRequest.class),
277                         instanceIdMapTest, Action.replaceInstance, 5},
278                 {"No valid cloudConfiguration is specified",
279                         mapper.readValue(inputStream("/CloudConfiguration/CloudConfigurationConfig.json"),
280                                 ServiceInstancesRequest.class),
281                         instanceIdMapTest, Action.enablePort, 5},
282                 {"No valid cloudConfiguration is specified",
283                         mapper.readValue(
284                                 inputStream("/CloudConfiguration/InPlaceSoftwareUpdateCloudConfiguration.json"),
285                                 ServiceInstancesRequest.class),
286                         instanceIdMapTest, Action.inPlaceSoftwareUpdate, 6},
287                 {"No valid cloudConfiguration is specified",
288                         mapper.readValue(
289                                 inputStream("/CloudConfiguration/DeactivateAndCloudDeleteCloudConfiguration.json"),
290                                 ServiceInstancesRequest.class),
291                         instanceIdMapTest, Action.deactivateAndCloudDelete, 7},
292                 {"No valid cloudConfiguration is specified",
293                         mapper.readValue(inputStream("/CloudConfiguration/ScaleOutNoCloudConfig.json"),
294                                 ServiceInstancesRequest.class),
295                         instanceIdMapTest, Action.scaleOut, 7},
296                 {"No valid cloudConfiguration is specified",
297                         mapper.readValue(inputStream("/CloudConfiguration/VnfRecreateCloudConfig.json"),
298                                 ServiceInstancesRequest.class),
299                         instanceIdMapTest, Action.recreateInstance, 7},
300                 {"No valid lcpCloudRegionId is specified",
301                         mapper.readValue(inputStream("/CloudConfiguration/EmptyLcpCloudConfiguration.json"),
302                                 ServiceInstancesRequest.class),
303                         instanceIdMapTest, Action.createInstance, 5},
304                 {"No valid lcpCloudRegionId is specified",
305                         mapper.readValue(inputStream("/CloudConfiguration/InPlaceSoftwareUpdateCloudRegionId.json"),
306                                 ServiceInstancesRequest.class),
307                         instanceIdMapTest, Action.inPlaceSoftwareUpdate, 6},
308                 {"No valid tenantId is specified",
309                         mapper.readValue(inputStream("/CloudConfiguration/EmptyTenantId.json"),
310                                 ServiceInstancesRequest.class),
311                         instanceIdMapTest, Action.createInstance, 5},
312                 {"No valid tenantId is specified",
313                         mapper.readValue(inputStream("/CloudConfiguration/InPlaceSoftwareUpdateTenantId.json"),
314                                 ServiceInstancesRequest.class),
315                         instanceIdMapTest, Action.inPlaceSoftwareUpdate, 6},
316                 // ValidationException for ModelInfo
317                 {"No valid modelCustomizationId is specified",
318                         mapper.readValue(inputStream("/ModelInfo/ModelCustomizationId.json"),
319                                 ServiceInstancesRequest.class),
320                         instanceIdMapTest, Action.replaceInstance, 5},
321                 {"No valid modelCustomizationId is specified",
322                         mapper.readValue(inputStream("/ModelInfo/v5CreateConfigurationModelCustomizationId.json"),
323                                 ServiceInstancesRequest.class),
324                         instanceIdMapTest, Action.createInstance, 5},
325                 {"No valid modelCustomizationId is specified",
326                         mapper.readValue(inputStream("/ModelInfo/v4CreateVfModuleMissingModelCustomizationId.json"),
327                                 ServiceInstancesRequest.class),
328                         instanceIdMapTest, Action.createInstance, 4},
329                 {"No valid modelCustomizationId or modelCustomizationName is specified",
330                         mapper.readValue(inputStream("/ModelInfo/VnfModelCustomizationId.json"),
331                                 ServiceInstancesRequest.class),
332                         instanceIdMapTest, Action.createInstance, 5},
333                 {"No valid modelCustomizationId or modelCustomizationName is specified",
334                         mapper.readValue(inputStream("/ModelInfo/VnfModelCustomizationIdPreload.json"),
335                                 ServiceInstancesRequest.class),
336                         instanceIdMapTest, Action.replaceInstance, 5},
337                 {"No valid modelCustomizationId or modelCustomizationName is specified",
338                         mapper.readValue(inputStream("/ModelInfo/ModelCustomizationName.json"),
339                                 ServiceInstancesRequest.class),
340                         instanceIdMapTest, Action.activateInstance, 5},
341                 {"No valid modelCustomizationId or modelCustomizationName is specified",
342                         mapper.readValue(inputStream("/ModelInfo/ModelCustomization.json"),
343                                 ServiceInstancesRequest.class),
344                         instanceIdMapTest, Action.replaceInstance, 6},
345                 {"No valid modelCustomizationId or modelCustomizationName is specified",
346                         mapper.readValue(inputStream("/ModelInfo/ModelCustomization.json"),
347                                 ServiceInstancesRequest.class),
348                         instanceIdMapTest, Action.updateInstance, 6},
349                 {"No valid modelCustomizationId or modelCustomizationName is specified",
350                         mapper.readValue(inputStream("/ModelInfo/VnfModelCustomizationId.json"),
351                                 ServiceInstancesRequest.class),
352                         instanceIdMapTest, Action.replaceInstance, 5},
353                 {"No valid modelCustomizationId or modelCustomizationName is specified",
354                         mapper.readValue(inputStream("/ModelInfo/VnfRecreateNoModelCustomizationId.json"),
355                                 ServiceInstancesRequest.class),
356                         instanceIdMapTest, Action.recreateInstance, 7},
357                 {"No valid modelCustomizationId is specified",
358                         mapper.readValue(inputStream("/ModelInfo/ScaleOutNoModelCustomizationId.json"),
359                                 ServiceInstancesRequest.class),
360                         instanceIdMapTest, Action.scaleOut, 7},
361                 {"No valid model-info is specified",
362                         mapper.readValue(inputStream("/ModelInfo/ModelInfoNull.json"), ServiceInstancesRequest.class),
363                         instanceIdMapTest, Action.createInstance, 5},
364                 {"No valid modelInvariantId format is specified",
365                         mapper.readValue(inputStream("/ModelInfo/InvalidModelInvariantId.json"),
366                                 ServiceInstancesRequest.class),
367                         instanceIdMapTest, Action.createInstance, 2},
368                 {"No valid modelInvariantId is specified",
369                         mapper.readValue(inputStream("/ModelInfo/ModelInvariantId.json"),
370                                 ServiceInstancesRequest.class),
371                         instanceIdMapTest, Action.deactivateInstance, 4},
372                 {"No valid modelInvariantId is specified",
373                         mapper.readValue(inputStream("/ModelInfo/v5ModelInvariantIdNetwork.json"),
374                                 ServiceInstancesRequest.class),
375                         instanceIdMapTest, Action.enablePort, 5},
376                 {"No valid modelInvariantId is specified",
377                         mapper.readValue(inputStream("/ModelInfo/v5ModelInvariantIdDisablePort.json"),
378                                 ServiceInstancesRequest.class),
379                         instanceIdMapTest, Action.disablePort, 5},
380                 {"No valid modelInvariantId is specified",
381                         mapper.readValue(inputStream("/ModelInfo/ModelInvariantIdVnf.json"),
382                                 ServiceInstancesRequest.class),
383                         instanceIdMapTest, Action.updateInstance, 3},
384                 {"No valid modelInvariantId is specified",
385                         mapper.readValue(inputStream("/ModelInfo/ModelInvariantIdConfiguration.json"),
386                                 ServiceInstancesRequest.class),
387                         instanceIdMapTest, Action.activateInstance, 3},
388                 {"No valid modelInvariantId is specified",
389                         mapper.readValue(inputStream("/ModelInfo/v5DeactivateModelInvariantId.json"),
390                                 ServiceInstancesRequest.class),
391                         instanceIdMapTest, Action.deactivateInstance, 5},
392                 {"No valid modelInvariantId is specified",
393                         mapper.readValue(inputStream("/ModelInfo/v3UpdateNetworkBad.json"),
394                                 ServiceInstancesRequest.class),
395                         instanceIdMapTest, Action.updateInstance, 4},
396                 {"No valid modelInvariantId is specified",
397                         mapper.readValue(inputStream("/ModelInfo/ScaleOutNoModelInvariantId.json"),
398                                 ServiceInstancesRequest.class),
399                         instanceIdMapTest, Action.scaleOut, 7},
400                 {"No valid modelInvariantId is specified",
401                         mapper.readValue(inputStream("/ModelInfo/VnfRecreateModelInvariantId.json"),
402                                 ServiceInstancesRequest.class),
403                         instanceIdMapTest, Action.recreateInstance, 7},
404                 {"No valid modelName is specified",
405                         mapper.readValue(inputStream("/ModelInfo/VfModuleModelName.json"),
406                                 ServiceInstancesRequest.class),
407                         instanceIdMapTest, Action.deleteInstance, 4},
408                 {"No valid modelName is specified",
409                         mapper.readValue(inputStream("/ModelInfo/ScaleOutNoModelName.json"),
410                                 ServiceInstancesRequest.class),
411                         instanceIdMapTest, Action.scaleOut, 7},
412                 {"No valid modelName is specified",
413                         mapper.readValue(inputStream("/ModelInfo/VnfRecreateModelName.json"),
414                                 ServiceInstancesRequest.class),
415                         instanceIdMapTest, Action.recreateInstance, 7},
416                 {"No valid modelType is specified",
417                         mapper.readValue(inputStream("/ModelInfo/ModelTypeNull.json"), ServiceInstancesRequest.class),
418                         instanceIdMapTest, Action.createInstance, 5},
419                 {"No valid modelVersion is specified",
420                         mapper.readValue(inputStream("/ModelInfo/ModelVersionService.json"),
421                                 ServiceInstancesRequest.class),
422                         instanceIdMapTest, Action.updateInstance, 3},
423                 {"No valid modelVersion is specified",
424                         mapper.readValue(inputStream("/ModelInfo/ModelVersionVfModule.json"),
425                                 ServiceInstancesRequest.class),
426                         instanceIdMapTest, Action.createInstance, 3},
427                 {"No valid modelVersion is specified",
428                         mapper.readValue(inputStream("/ModelInfo/ModelVersionServiceCreate.json"),
429                                 ServiceInstancesRequest.class),
430                         instanceIdMapTest, Action.createInstance, 3},
431                 {"No valid modelVersion is specified",
432                         mapper.readValue(inputStream("/ModelInfo/ScaleOutNoModelVersion.json"),
433                                 ServiceInstancesRequest.class),
434                         instanceIdMapTest, Action.scaleOut, 7},
435                 {"No valid modelVersion is specified",
436                         mapper.readValue(inputStream("/ModelInfo/VnfRecreateModelVersion.json"),
437                                 ServiceInstancesRequest.class),
438                         instanceIdMapTest, Action.recreateInstance, 7},
439                 {"No valid modelVersionId is specified",
440                         mapper.readValue(inputStream("/ModelInfo/ModelVersionId.json"), ServiceInstancesRequest.class),
441                         instanceIdMapTest, Action.createInstance, 5},
442                 {"No valid modelVersionId is specified",
443                         mapper.readValue(inputStream("/ModelInfo/ConfigurationModelVersionId.json"),
444                                 ServiceInstancesRequest.class),
445                         instanceIdMapTest, Action.activateInstance, 5},
446                 {"No valid modelVersionId is specified",
447                         mapper.readValue(inputStream("/ModelInfo/v2ModelVersionId.json"),
448                                 ServiceInstancesRequest.class),
449                         instanceIdMapTest, Action.activateInstance, 4},
450                 {"No valid modelVersionId is specified",
451                         mapper.readValue(inputStream("/ModelInfo/v2ModelVersionId.json"),
452                                 ServiceInstancesRequest.class),
453                         instanceIdMapTest, Action.deactivateInstance, 4},
454                 {"No valid modelVersionId is specified",
455                         mapper.readValue(inputStream("/ModelInfo/v2ModelVersionId.json"),
456                                 ServiceInstancesRequest.class),
457                         instanceIdMapTest, Action.updateInstance, 5},
458                 {"No valid modelVersionId is specified",
459                         mapper.readValue(inputStream("/ModelInfo/v2ModelVersionId.json"),
460                                 ServiceInstancesRequest.class),
461                         instanceIdMapTest, Action.enablePort, 5},
462                 {"No valid modelVersionId is specified",
463                         mapper.readValue(inputStream("/ModelInfo/v2ModelVersionId.json"),
464                                 ServiceInstancesRequest.class),
465                         instanceIdMapTest, Action.disablePort, 5},
466                 {"No valid modelVersionId is specified",
467                         mapper.readValue(inputStream("/ModelInfo/ModelVersionIdCreate.json"),
468                                 ServiceInstancesRequest.class),
469                         instanceIdMapTest, Action.createInstance, 5},
470                 {"No valid modelVersionId is specified",
471                         mapper.readValue(inputStream("/ModelInfo/v5ActivateModelVersionId.json"),
472                                 ServiceInstancesRequest.class),
473                         instanceIdMapTest, Action.activateInstance, 5},
474                 {"No valid modelVersionId is specified",
475                         mapper.readValue(inputStream("/ModelInfo/ScaleOutNoModelVersionId.json"),
476                                 ServiceInstancesRequest.class),
477                         instanceIdMapTest, Action.scaleOut, 7},
478                 {"No valid modelVersionId is specified",
479                         mapper.readValue(inputStream("/ModelInfo/VnfRecreateModelVersionId.json"),
480                                 ServiceInstancesRequest.class),
481                         instanceIdMapTest, Action.recreateInstance, 7},
482                 {"No valid modelVersionId is specified",
483                         mapper.readValue(inputStream("/ModelInfo/CreateInstanceGroupNoModelVersionId.json"),
484                                 ServiceInstancesRequest.class),
485                         instanceIdMapTest, Action.createInstance, 7},
486                 // ValidationException for Platform and LineOfBusiness
487                 {"No valid lineOfBusinessName is specified",
488                         mapper.readValue(inputStream("/PlatformAndLineOfBusiness/EmptyLineOfBusiness.json"),
489                                 ServiceInstancesRequest.class),
490                         instanceIdMapTest, Action.createInstance, 5},
491                 {"No valid platform is specified",
492                         mapper.readValue(inputStream("/PlatformAndLineOfBusiness/Platform.json"),
493                                 ServiceInstancesRequest.class),
494                         instanceIdMapTest, Action.createInstance, 6},
495                 {"No valid platformName is specified",
496                         mapper.readValue(inputStream("/PlatformAndLineOfBusiness/EmptyPlatformName.json"),
497                                 ServiceInstancesRequest.class),
498                         instanceIdMapTest, Action.createInstance, 5},
499                 // ValidationException for Project and OwningEntity
500                 {"No valid owningEntity is specified",
501                         mapper.readValue(inputStream("/ProjectAndOwningEntity/OwningEntity.json"),
502                                 ServiceInstancesRequest.class),
503                         instanceIdMapTest, Action.createInstance, 6},
504                 {"No valid owningEntityId is specified",
505                         mapper.readValue(inputStream("/ProjectAndOwningEntity/EmptyOwningEntityId.json"),
506                                 ServiceInstancesRequest.class),
507                         instanceIdMapTest, Action.createInstance, 5},
508                 {"No valid projectName is specified",
509                         mapper.readValue(inputStream("/ProjectAndOwningEntity/EmptyProjectName.json"),
510                                 ServiceInstancesRequest.class),
511                         instanceIdMapTest, Action.createInstance, 5},
512                 {"No valid owningEntity is specified",
513                         mapper.readValue(inputStream("/ProjectAndOwningEntity/ServiceAssignNoOE.json"),
514                                 ServiceInstancesRequest.class),
515                         instanceIdMapTest, Action.assignInstance, 7},
516                 // ValidationException for RelatedInstances
517                 {"No valid connectionPoint relatedInstance for Port Configuration is specified",
518                         mapper.readValue(inputStream("/RelatedInstances/v5EnablePortNoConnectionPoint.json"),
519                                 ServiceInstancesRequest.class),
520                         instanceIdMapTest, Action.disablePort, 5},
521                 {"No valid connectionPoint relatedInstance for Port Configuration is specified",
522                         mapper.readValue(inputStream("/RelatedInstances/v5EnablePortNoConnectionPoint.json"),
523                                 ServiceInstancesRequest.class),
524                         instanceIdMapTest, Action.enablePort, 5},
525                 {"No valid destination vnf relatedInstance for Port Configuration is specified",
526                         mapper.readValue(inputStream("/RelatedInstances/v5CreateNoDestinationRelatedInstance.json"),
527                                 ServiceInstancesRequest.class),
528                         instanceIdMapTest, Action.createInstance, 5},
529                 {"No valid instanceId format in relatedInstance is specified",
530                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesIdFormat.json"),
531                                 ServiceInstancesRequest.class),
532                         instanceIdMapTest, Action.createInstance, 5},
533                 {"No valid instanceId in relatedInstance is specified",
534                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesId.json"),
535                                 ServiceInstancesRequest.class),
536                         instanceIdMapTest, Action.createInstance, 5},
537                 {"No valid instanceName format in relatedInstance is specified",
538                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesNameFormat.json"),
539                                 ServiceInstancesRequest.class),
540                         instanceIdMapTest, Action.createInstance, 5},
541                 {"No valid instanceName in relatedInstance for pnf modelType is specified",
542                         mapper.readValue(inputStream("/RelatedInstances/v6AddRelationshipsInstanceName.json"),
543                                 ServiceInstancesRequest.class),
544                         instanceIdMapTest, Action.removeRelationships, 6},
545                 {"No valid instanceName in relatedInstance for pnf modelType is specified",
546                         mapper.readValue(inputStream("/RelatedInstances/v6AddRelationshipsInstanceName.json"),
547                                 ServiceInstancesRequest.class),
548                         instanceIdMapTest, Action.addRelationships, 6},
549                 {"No valid modelCustomizationName or modelCustomizationId in relatedInstance of vnf is specified",
550                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesModelCustomizationId.json"),
551                                 ServiceInstancesRequest.class),
552                         instanceIdMapTest, Action.activateInstance, 5},
553                 {"No valid modelInfo in relatedInstance is specified",
554                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesModelInfo.json"),
555                                 ServiceInstancesRequest.class),
556                         instanceIdMapTest, Action.createInstance, 5},
557                 {"No valid modelInvariantId format in relatedInstance is specified",
558                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesModelInvariantIdFormat.json"),
559                                 ServiceInstancesRequest.class),
560                         instanceIdMapTest, Action.createInstance, 5},
561                 {"No valid modelInvariantId in relatedInstance is specified",
562                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesModelInvariantId.json"),
563                                 ServiceInstancesRequest.class),
564                         instanceIdMapTest, Action.createInstance, 5},
565                 {"No valid modelName in relatedInstance is specified",
566                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesModelName.json"),
567                                 ServiceInstancesRequest.class),
568                         instanceIdMapTest, Action.createInstance, 5},
569                 {"No valid modelType in relatedInstance is specified",
570                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesModelType.json"),
571                                 ServiceInstancesRequest.class),
572                         instanceIdMapTest, Action.createInstance, 5},
573                 {"No valid modelVersion in relatedInstance is specified",
574                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesModelVersion.json"),
575                                 ServiceInstancesRequest.class),
576                         instanceIdMapTest, Action.createInstance, 5},
577                 {"No valid modelVersionId in relatedInstance is specified",
578                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesModelVersionId.json"),
579                                 ServiceInstancesRequest.class),
580                         instanceIdMapTest, Action.createInstance, 5},
581                 {"No valid related instances is specified",
582                         mapper.readValue(inputStream("/RelatedInstances/ServiceNoRelatedInstance.json"),
583                                 ServiceInstancesRequest.class),
584                         instanceIdMapTest, Action.addRelationships, 2},
585                 {"No valid related instances is specified",
586                         mapper.readValue(inputStream("/RelatedInstances/ServiceNoRelatedInstance.json"),
587                                 ServiceInstancesRequest.class),
588                         instanceIdMapTest, Action.removeRelationships, 2},
589                 {"No valid related instances is specified",
590                         mapper.readValue(inputStream("/RelatedInstances/v5EnablePortNoRelatedInstance.json"),
591                                 ServiceInstancesRequest.class),
592                         instanceIdMapTest, Action.disablePort, 2},
593                 {"No valid related instances is specified",
594                         mapper.readValue(inputStream("/RelatedInstances/v5EnablePortNoRelatedInstance.json"),
595                                 ServiceInstancesRequest.class),
596                         instanceIdMapTest, Action.enablePort, 5},
597                 {"No valid related instances is specified",
598                         mapper.readValue(inputStream("/RelatedInstances/v5CreateNoRelatedInstances.json"),
599                                 ServiceInstancesRequest.class),
600                         instanceIdMapTest, Action.createInstance, 5},
601                 {"No valid related instances is specified",
602                         mapper.readValue(inputStream("/RelatedInstances/v4RelatedInstancesNull.json"),
603                                 ServiceInstancesRequest.class),
604                         instanceIdMapTest, Action.updateInstance, 4},
605                 {"No valid related instances is specified",
606                         mapper.readValue(inputStream("/RelatedInstances/ScaleOutNoRelatedInstances.json"),
607                                 ServiceInstancesRequest.class),
608                         instanceIdMapTest, Action.scaleOut, 7},
609                 {"No valid related service instance for vfModule request is specified",
610                         mapper.readValue(inputStream("/RelatedInstances/VfModuleRelatedInstancesService.json"),
611                                 ServiceInstancesRequest.class),
612                         instanceIdMapTest, Action.activateInstance, 5},
613                 {"No valid related service instance for vnf request is specified",
614                         mapper.readValue(inputStream("/RelatedInstances/VnfRelatedInstancesService.json"),
615                                 ServiceInstancesRequest.class),
616                         instanceIdMapTest, Action.activateInstance, 5},
617                 {"No valid related service instance for volumeGroup request is specified",
618                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesServiceInstance.json"),
619                                 ServiceInstancesRequest.class),
620                         instanceIdMapTest, Action.activateInstance, 5},
621                 {"No valid related vnf instance for vfModule request is specified",
622                         mapper.readValue(inputStream("/RelatedInstances/VfModuleRelatedInstancesVnf.json"),
623                                 ServiceInstancesRequest.class),
624                         instanceIdMapTest, Action.activateInstance, 5},
625                 {"No valid related vnf instance for volumeGroup request is specified",
626                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesVnfInstance.json"),
627                                 ServiceInstancesRequest.class),
628                         instanceIdMapTest, Action.activateInstance, 5},
629                 {"No valid serviceInstanceId matching the serviceInstanceId in request URI is specified",
630                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesInstanceId.json"),
631                                 ServiceInstancesRequest.class),
632                         instanceIdMapTest, Action.activateInstance, 5},
633                 {"No valid serviceInstanceId matching the serviceInstanceId in request URI is specified",
634                         mapper.readValue(inputStream("/RelatedInstances/v6VnfDeleteInstance.json"),
635                                 ServiceInstancesRequest.class),
636                         instanceIdMapTest, Action.deleteInstance, 6},
637                 {"No valid source vnf relatedInstance for Port Configuration is specified",
638                         mapper.readValue(inputStream("/RelatedInstances/v5CreateNoSourceRelatedInstance.json"),
639                                 ServiceInstancesRequest.class),
640                         instanceIdMapTest, Action.createInstance, 5},
641                 {"No valid vnfInstanceId matching the vnfInstanceId in request URI is specified",
642                         mapper.readValue(inputStream("/RelatedInstances/RelatedInstancesVnfInstanceId.json"),
643                                 ServiceInstancesRequest.class),
644                         instanceIdMapTest, Action.activateInstance, 5},
645                 {"No valid instanceName format is specified",
646                         mapper.readValue(inputStream("/RelatedInstances/InvalidInstanceName.json"),
647                                 ServiceInstancesRequest.class),
648                         instanceIdMapTest, Action.createInstance, 2},
649                 {"No valid relatedInstanceList is specified",
650                         mapper.readValue(inputStream("/RelatedInstances/CreateInstanceGroupNoRelatedInstances.json"),
651                                 ServiceInstancesRequest.class),
652                         instanceIdMapTest, Action.createInstance, 7},
653                 {"No valid related service instance for instanceGroup request is specified",
654                         mapper.readValue(inputStream("/RelatedInstances/CreateInstanceGroupService.json"),
655                                 ServiceInstancesRequest.class),
656                         instanceIdMapTest, Action.createInstance, 7},
657                 {"No valid modelVersionId in relatedInstance is specified",
658                         mapper.readValue(
659                                 inputStream("/RelatedInstances/CreateInstanceGroupRelatedInstanceModelVersionId.json"),
660                                 ServiceInstancesRequest.class),
661                         instanceIdMapTest, Action.createInstance, 7},
662                 // ValidationException for RequestInfo
663                 {"No valid requestInfo is specified",
664                         mapper.readValue(inputStream("/RequestInfo/RequestInfoNull.json"),
665                                 ServiceInstancesRequest.class),
666                         instanceIdMapTest, Action.createInstance, 5},
667                 {"No valid requestInfo is specified",
668                         mapper.readValue(inputStream("/RequestInfo/RequestInfo.json"), ServiceInstancesRequest.class),
669                         instanceIdMapTest, Action.applyUpdatedConfig, 6},
670                 {"No valid requestInfo is specified",
671                         mapper.readValue(inputStream("/RequestInfo/RequestInfo.json"), ServiceInstancesRequest.class),
672                         instanceIdMapTest, Action.inPlaceSoftwareUpdate, 6},
673                 {"No valid requestInfo is specified",
674                         mapper.readValue(inputStream("/RequestInfo/ScaleOutNoRequestInfo.json"),
675                                 ServiceInstancesRequest.class),
676                         instanceIdMapTest, Action.scaleOut, 7},
677                 {"No valid productFamilyId is specified",
678                         mapper.readValue(inputStream("/RequestInfo/VnfProductFamilyId.json"),
679                                 ServiceInstancesRequest.class),
680                         instanceIdMapTest, Action.createInstance, 3},
681                 {"No valid productFamilyId is specified",
682                         mapper.readValue(inputStream("/RequestInfo/NetworkProductFamilyId.json"),
683                                 ServiceInstancesRequest.class),
684                         instanceIdMapTest, Action.createInstance, 3},
685                 {"No valid productFamilyId is specified",
686                         mapper.readValue(inputStream("/RequestInfo/NetworkProductFamilyId.json"),
687                                 ServiceInstancesRequest.class),
688                         instanceIdMapTest, Action.updateInstance, 3},
689                 {"No valid productFamilyId is specified",
690                         mapper.readValue(inputStream("/RequestInfo/ServiceProductFamilyId.json"),
691                                 ServiceInstancesRequest.class),
692                         instanceIdMapTest, Action.createInstance, 5},
693                 {"No valid requestorId is specified",
694                         mapper.readValue(inputStream("/RequestInfo/EmptyRequestorId.json"),
695                                 ServiceInstancesRequest.class),
696                         instanceIdMapTest, Action.createInstance, 5},
697                 {"No valid requestorId is specified",
698                         mapper.readValue(inputStream("/RequestInfo/RequestorId.json"), ServiceInstancesRequest.class),
699                         instanceIdMapTest, Action.applyUpdatedConfig, 6},
700                 {"No valid requestorId is specified",
701                         mapper.readValue(inputStream("/RequestInfo/RequestorId.json"), ServiceInstancesRequest.class),
702                         instanceIdMapTest, Action.inPlaceSoftwareUpdate, 6},
703                 // ValidationException for RequestParameters
704                 {"No valid aLaCarte in requestParameters",
705                         mapper.readValue(inputStream("/RequestParameters/RequestParametersNull.json"),
706                                 ServiceInstancesRequest.class),
707                         instanceIdMapTest, Action.addRelationships, 4},
708                 {"No valid requestParameters is specified",
709                         mapper.readValue(inputStream("/RequestParameters/RequestParametersNull.json"),
710                                 ServiceInstancesRequest.class),
711                         instanceIdMapTest, Action.createInstance, 5},
712                 {"No valid requestParameters is specified",
713                         mapper.readValue(inputStream("/RequestParameters/RequestParameters.json"),
714                                 ServiceInstancesRequest.class),
715                         instanceIdMapTest, Action.applyUpdatedConfig, 6},
716                 {"No valid requestParameters is specified",
717                         mapper.readValue(inputStream("/RequestParameters/RequestParameters.json"),
718                                 ServiceInstancesRequest.class),
719                         instanceIdMapTest, Action.inPlaceSoftwareUpdate, 6},
720                 {"No valid requestParameters is specified",
721                         mapper.readValue(inputStream("/RequestParameters/AssignEmptyReqParameters.json"),
722                                 ServiceInstancesRequest.class),
723                         instanceIdMapTest, Action.assignInstance, 7},
724                 // ValidationException for SubscriberInfo
725                 {"No valid globalSubscriberId is specified",
726                         mapper.readValue(inputStream("/SubscriberInfo/EmptyGlobalSubscriberId.json"),
727                                 ServiceInstancesRequest.class),
728                         instanceIdMapTest, Action.createInstance, 5},
729                 {"No valid subscriberInfo is specified",
730                         mapper.readValue(inputStream("/SubscriberInfo/EmptySubscriberInfo.json"),
731                                 ServiceInstancesRequest.class),
732                         instanceIdMapTest, Action.createInstance, 5},
733                 {"No valid subscriptionServiceType is specified",
734                         mapper.readValue(inputStream("/SubscriberInfo/EmptySubscriptionServiceType.json"),
735                                 ServiceInstancesRequest.class),
736                         instanceIdMapTest, Action.createInstance, 5},
737                 {"No valid subscriberInfo is specified",
738                         mapper.readValue(inputStream("/SubscriberInfo/AssignEmptySubscriberInfo.json"),
739                                 ServiceInstancesRequest.class),
740                         instanceIdMapTest, Action.assignInstance, 7},
741                 // Validation for UserParams
742                 {"No valid cloudConfiguration in userParams vnf resources is specified",
743                         mapper.readValue(inputStream("/RequestParameters/AssignCloudConfigVnf.json"),
744                                 ServiceInstancesRequest.class),
745                         instanceIdMapTest, Action.assignInstance, 7},
746                 {"No valid cloudConfiguration in userParams network resources is specified",
747                         mapper.readValue(inputStream("/RequestParameters/NetworkCloudConfig.json"),
748                                 ServiceInstancesRequest.class),
749                         instanceIdMapTest, Action.assignInstance, 7},
750                 {"No valid modelInfo in userParams is specified",
751                         mapper.readValue(inputStream("/RequestParameters/UserParamsModelInfo.json"),
752                                 ServiceInstancesRequest.class),
753                         instanceIdMapTest, Action.assignInstance, 7},
754                 {"No valid modelInfo in userParams vnf resources is specified",
755                         mapper.readValue(inputStream("/RequestParameters/UserParamsVnfModelInfo.json"),
756                                 ServiceInstancesRequest.class),
757                         instanceIdMapTest, Action.assignInstance, 7},
758                 {"No valid modelVersionId in userParams service modelInfo is specified",
759                         mapper.readValue(inputStream("/RequestParameters/UserParamsModelVersionId.json"),
760                                 ServiceInstancesRequest.class),
761                         instanceIdMapTest, Action.assignInstance, 7},
762                 {"No valid modelVersionId in userParams vnf resources is specified",
763                         mapper.readValue(inputStream("/RequestParameters/VnfModelVersionId.json"),
764                                 ServiceInstancesRequest.class),
765                         instanceIdMapTest, Action.assignInstance, 7},
766                 {"No valid modelVersionId in userParams vfModule resources is specified",
767                         mapper.readValue(inputStream("/RequestParameters/VfModuleModelVersionId.json"),
768                                 ServiceInstancesRequest.class),
769                         instanceIdMapTest, Action.assignInstance, 7},
770                 {"No valid modelVersionId in userParams network resources is specified",
771                         mapper.readValue(inputStream("/RequestParameters/NetworkModelVersionId.json"),
772                                 ServiceInstancesRequest.class),
773                         instanceIdMapTest, Action.assignInstance, 7},
774                 {"No valid platform in userParams vnf resources is specified",
775                         mapper.readValue(inputStream("/RequestParameters/UserParamsPlatform.json"),
776                                 ServiceInstancesRequest.class),
777                         instanceIdMapTest, Action.assignInstance, 7},
778                 {"No valid platformName in userParams vnf resources is specified",
779                         mapper.readValue(inputStream("/RequestParameters/UserParamsPlatformName.json"),
780                                 ServiceInstancesRequest.class),
781                         instanceIdMapTest, Action.assignInstance, 7},
782                 {"No valid productFamilyId in userParams vnf resources is specified",
783                         mapper.readValue(inputStream("/RequestParameters/ProductFamilyId.json"),
784                                 ServiceInstancesRequest.class),
785                         instanceIdMapTest, Action.assignInstance, 7},
786                 {"No valid vfModules in userParams vnf resources is specified",
787                         mapper.readValue(inputStream("/RequestParameters/VfModules.json"),
788                                 ServiceInstancesRequest.class),
789                         instanceIdMapTest, Action.assignInstance, 7},
790                 {"No valid modelInfo in userParams vfModules resources is specified",
791                         mapper.readValue(inputStream("/RequestParameters/VfModulesModelInfo.json"),
792                                 ServiceInstancesRequest.class),
793                         instanceIdMapTest, Action.assignInstance, 7},
794                 {"No valid modelInfo in userParams network resources is specified",
795                         mapper.readValue(inputStream("/RequestParameters/Network.json"), ServiceInstancesRequest.class),
796                         instanceIdMapTest, Action.assignInstance, 7},
797                 {"No valid modelCustomizationId in userParams vfModule resources is specified",
798                         mapper.readValue(inputStream("/RequestParameters/VfModuleModelCustomizationId.json"),
799                                 ServiceInstancesRequest.class),
800                         instanceIdMapTest, Action.assignInstance, 7},
801                 {"No valid modelCustomizationId in userParams vnf resources is specified",
802                         mapper.readValue(inputStream("/RequestParameters/VnfModelCustomizationId.json"),
803                                 ServiceInstancesRequest.class),
804                         instanceIdMapTest, Action.assignInstance, 7},
805                 {"No valid modelCustomizationId in userParams network resources is specified",
806                         mapper.readValue(inputStream("/RequestParameters/NetworkModelCustomizationId.json"),
807                                 ServiceInstancesRequest.class),
808                         instanceIdMapTest, Action.assignInstance, 7},
809                 // Validation for ConfigurationParameters
810                 {"No valid configuration parameters is specified",
811                         mapper.readValue(inputStream("/ConfigurationParameters/NoConfigurationParameters.json"),
812                                 ServiceInstancesRequest.class),
813                         instanceIdMapTest, Action.scaleOut, 7},
814                 // Validation for Add and Remove Members
815                 {"No valid vnf relatedInstance is specified",
816                         mapper.readValue(inputStream("/MembersValidation/RelatedInstancesVnf.json"),
817                                 ServiceInstancesRequest.class),
818                         instanceIdMapTest, Action.addMembers, 7},
819                 {"No valid related instances is specified",
820                         mapper.readValue(inputStream("/MembersValidation/RelatedInstances.json"),
821                                 ServiceInstancesRequest.class),
822                         instanceIdMapTest, Action.addMembers, 7},
823                 {"No valid requestInfo is specified",
824                         mapper.readValue(inputStream("/MembersValidation/MembersRequestInfo.json"),
825                                 ServiceInstancesRequest.class),
826                         instanceIdMapTest, Action.addMembers, 7},
827                 {"No valid requestorId is specified",
828                         mapper.readValue(inputStream("/MembersValidation/MembersRequestorId.json"),
829                                 ServiceInstancesRequest.class),
830                         instanceIdMapTest, Action.addMembers, 7},
831                 {"No valid source is specified",
832                         mapper.readValue(inputStream("/MembersValidation/AddMembersSource.json"),
833                                 ServiceInstancesRequest.class),
834                         instanceIdMapTest, Action.addMembers, 7},
835                 {"No valid instanceId in relatedInstances is specified",
836                         mapper.readValue(inputStream("/MembersValidation/AddMembersInstanceId.json"),
837                                 ServiceInstancesRequest.class),
838                         instanceIdMapTest, Action.addMembers, 7},
839                 {"No valid modelType in relatedInstance is specified",
840                         mapper.readValue(inputStream("/MembersValidation/DeleteMembersModelType.json"),
841                                 ServiceInstancesRequest.class),
842                         instanceIdMapTest, Action.removeMembers, 7}});
843     }
844
845     @Test
846     public void nullInstanceIdMapTest()
847             throws JsonParseException, JsonMappingException, IOException, ValidationException {
848         this.sir = mapper.readValue(inputStream("/RequestParameters/RequestParametersNull.json"),
849                 ServiceInstancesRequest.class);
850         this.instanceIdMapTest = null;
851         this.reqVersion = 5;
852         this.version = "v" + reqVersion;
853         thrown.expect(NullPointerException.class);
854         this.msoRequest = new MsoRequest();
855         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
856     }
857
858     @Test
859     public void serviceInstanceIdHashMapFailureTest()
860             throws JsonParseException, JsonMappingException, IOException, ValidationException {
861         this.sir = mapper.readValue(inputStream("/SuccessfulValidation/InstanceIdHashMap.json"),
862                 ServiceInstancesRequest.class);
863         this.instanceIdMapTest.put("serviceInstanceId", "test");
864         this.action = Action.createInstance;
865         this.reqVersion = 5;
866         this.version = "v" + reqVersion;
867         thrown.expect(ValidationException.class);
868         thrown.expectMessage("No valid serviceInstanceId is specified");
869         this.msoRequest = new MsoRequest();
870         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
871     }
872
873     @Test
874     public void vnfInstanceIdHashMapFailureTest()
875             throws JsonParseException, JsonMappingException, IOException, ValidationException {
876         this.sir = mapper.readValue(inputStream("/SuccessfulValidation/InstanceIdHashMap.json"),
877                 ServiceInstancesRequest.class);
878         this.instanceIdMapTest.put("vnfInstanceId", "test");
879         this.action = Action.createInstance;
880         this.reqVersion = 5;
881         this.version = "v" + reqVersion;
882         thrown.expect(ValidationException.class);
883         thrown.expectMessage("No valid vnfInstanceId is specified");
884         this.msoRequest = new MsoRequest();
885         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
886     }
887
888     @Test
889     public void vfModuleInstanceIdHashMapFailureTest()
890             throws JsonParseException, JsonMappingException, IOException, ValidationException {
891         this.sir = mapper.readValue(inputStream("/SuccessfulValidation/InstanceIdHashMap.json"),
892                 ServiceInstancesRequest.class);
893         this.instanceIdMapTest.put("vfModuleInstanceId", "test");
894         this.action = Action.createInstance;
895         this.reqVersion = 5;
896         this.version = "v" + reqVersion;
897         thrown.expect(ValidationException.class);
898         thrown.expectMessage("No valid vfModuleInstanceId is specified");
899         this.msoRequest = new MsoRequest();
900         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
901     }
902
903     @Test
904     public void volumeGroupInstanceIdHashMapFailureTest()
905             throws JsonParseException, JsonMappingException, IOException, ValidationException {
906         this.sir = mapper.readValue(inputStream("/SuccessfulValidation/InstanceIdHashMap.json"),
907                 ServiceInstancesRequest.class);
908         this.instanceIdMapTest.put("volumeGroupInstanceId", "test");
909         this.action = Action.createInstance;
910         this.reqVersion = 5;
911         this.version = "v" + reqVersion;
912         thrown.expect(ValidationException.class);
913         thrown.expectMessage("No valid volumeGroupInstanceId is specified");
914         this.msoRequest = new MsoRequest();
915         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
916     }
917
918     @Test
919     public void networkInstanceIdHashMapFailureTest()
920             throws JsonParseException, JsonMappingException, IOException, ValidationException {
921         this.sir = mapper.readValue(inputStream("/SuccessfulValidation/InstanceIdHashMap.json"),
922                 ServiceInstancesRequest.class);
923         this.instanceIdMapTest.put("networkInstanceId", "test");
924         this.action = Action.createInstance;
925         this.reqVersion = 5;
926         this.version = "v" + reqVersion;
927         thrown.expect(ValidationException.class);
928         thrown.expectMessage("No valid networkInstanceId is specified");
929         this.msoRequest = new MsoRequest();
930         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
931     }
932
933     @Test
934     public void configurationInstanceIdHashMapFailureTest()
935             throws JsonParseException, JsonMappingException, IOException, ValidationException {
936         this.sir = mapper.readValue(inputStream("/SuccessfulValidation/InstanceIdHashMap.json"),
937                 ServiceInstancesRequest.class);
938         this.instanceIdMapTest.put("configurationInstanceId", "test");
939         this.action = Action.createInstance;
940         thrown.expect(ValidationException.class);
941         this.reqVersion = 5;
942         this.version = "v" + reqVersion;
943         thrown.expectMessage("No valid configurationInstanceId is specified");
944         this.msoRequest = new MsoRequest();
945         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
946     }
947
948     @Test
949     public void instanceGroupIdHashMapFailureTest()
950             throws JsonParseException, JsonMappingException, IOException, ValidationException {
951         this.sir = mapper.readValue(inputStream("/SuccessfulValidation/InstanceIdHashMap.json"),
952                 ServiceInstancesRequest.class);
953         this.instanceIdMapTest.put("instanceGroupInstanceId", "test");
954         this.action = Action.createInstance;
955         thrown.expect(ValidationException.class);
956         this.reqVersion = 7;
957         this.version = "v" + reqVersion;
958         thrown.expectMessage("No valid instanceGroupInstanceId is specified");
959         this.msoRequest = new MsoRequest();
960         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
961     }
962
963     @Test
964     public void testVfModuleV4UsePreLoad()
965             throws JsonParseException, JsonMappingException, IOException, ValidationException {
966         this.requestJSON = inputStream("/SuccessfulValidation/v4CreateVfModule.json");
967         this.instanceIdMapTest.put("serviceInstanceId", "3eecada1-83a4-4f33-9ed2-7937e7b8dbbc");
968         this.instanceIdMapTest.put("vnfInstanceId", "3eecada1-83a4-4f33-9ed2-7937e7b8dbbc");
969         this.reqVersion = 4;
970         this.version = "v" + reqVersion;
971         this.sir = mapper.readValue(requestJSON, ServiceInstancesRequest.class);
972         this.msoRequest = new MsoRequest();
973         msoRequest.parse(sir, instanceIdMapTest, Action.createInstance, version, originalRequestJSON, reqVersion,
974                 false);
975
976         this.requestJSON = inputStream("/ModelInfo/v4CreateVfModuleNoCustomizationId.json");
977         this.instanceIdMapTest.put("serviceInstanceId", "3eecada1-83a4-4f33-9ed2-7937e7b8dbbc");
978         this.instanceIdMapTest.put("vnfInstanceId", "3eecada1-83a4-4f33-9ed2-7937e7b8dbbc");
979         this.sir = mapper.readValue(requestJSON, ServiceInstancesRequest.class);
980         msoRequest = new MsoRequest();
981         msoRequest.parse(sir, instanceIdMapTest, Action.createInstance, version, originalRequestJSON, reqVersion,
982                 false);
983     }
984
985     @Test
986     public void buildServiceErrorResponseTest()
987             throws JsonParseException, JsonMappingException, IOException, ValidationException {
988         this.sir = mapper.readValue(inputStream("/SuccessfulValidation/InstanceIdHashMap.json"),
989                 ServiceInstancesRequest.class);
990         this.instanceIdMapTest.put("serviceInstanceId", "test");
991         this.action = Action.createInstance;
992         this.reqVersion = 5;
993         this.version = "v" + reqVersion;
994         thrown.expect(ValidationException.class);
995         thrown.expectMessage("No valid serviceInstanceId is specified");
996         this.msoRequest = new MsoRequest();
997         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
998         Response response =
999                 msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST, MsoException.ServiceException,
1000                         "Mapping of request to JSON object failed.  ", ErrorNumbers.SVC_BAD_PARAMETER, null, version);
1001         assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
1002         assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
1003         assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
1004         assertEquals("7.0.0", response.getHeaders().get("X-LatestVersion").get(0));
1005     }
1006
1007     @Test
1008     public void buildServiceErrorPolicyExceptionResponseTest()
1009             throws JsonParseException, JsonMappingException, IOException, ValidationException {
1010         this.sir = mapper.readValue(inputStream("/SuccessfulValidation/InstanceIdHashMap.json"),
1011                 ServiceInstancesRequest.class);
1012         this.instanceIdMapTest.put("serviceInstanceId", "test");
1013         this.action = Action.createInstance;
1014         this.reqVersion = 5;
1015         this.version = "v" + reqVersion;
1016         thrown.expect(ValidationException.class);
1017         thrown.expectMessage("No valid serviceInstanceId is specified");
1018         this.msoRequest = new MsoRequest();
1019
1020
1021         this.msoRequest.parse(sir, instanceIdMapTest, action, version, originalRequestJSON, reqVersion, false);
1022         Response response =
1023                 msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST, MsoException.PolicyException,
1024                         "Mapping of request to JSON object failed. ", ErrorNumbers.SVC_BAD_PARAMETER, null, version);
1025         assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
1026         assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
1027         assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
1028         assertEquals("7.0.0", response.getHeaders().get("X-LatestVersion").get(0));
1029     }
1030
1031     @Test
1032     public void domToStrTest() throws Exception {
1033         String xmlStr = "<dummy><service-instance-id>1234</service-instance-id></dummy>";
1034         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
1035         DocumentBuilder builder = factory.newDocumentBuilder();
1036         Document document = builder.parse(new InputSource(new StringReader(xmlStr)));
1037         String result = MsoRequest.domToStr(document);
1038         assertNotNull(result);
1039     }
1040
1041     @Test
1042     public void buildSelfLinkUrlTest() throws Exception {
1043         // v - version
1044         String incomingUrl = "http://localhost:8080/onap/infra/so/serviceInstantiation/v7/serviceInstances";
1045         String expectedSelfLink = "http://localhost:8080/orchestrationRequests/v7/efce3167-5e45-4666-9d4d-22e23648e5d1";
1046         String requestId = "efce3167-5e45-4666-9d4d-22e23648e5d1";
1047         this.msoRequest = new MsoRequest();
1048         Optional<URL> actualSelfLinkUrl = msoRequest.buildSelfLinkUrl(incomingUrl, requestId);
1049         assertEquals(expectedSelfLink, actualSelfLinkUrl.get().toString());
1050         // V - Version
1051         String incomingUrlV = "http://localhost:8080/onap/infra/so/serviceInstantiation/V7/serviceInstances";
1052         String expectedSelfLinkV =
1053                 "http://localhost:8080/orchestrationRequests/V7/efce3167-5e45-4666-9d4d-22e23648e5d1";
1054         Optional<URL> actualSelfLinkUrlV = msoRequest.buildSelfLinkUrl(incomingUrlV, requestId);
1055         assertEquals(expectedSelfLinkV, actualSelfLinkUrlV.get().toString());
1056     }
1057 }