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