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