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