[SDC-29] Amdocs OnBoard 1707 initial commit.
[sdc.git] / common / openecomp-sdc-artifact-generator-lib / openecomp-sdc-artifact-generator-test / src / main / java / org / openecomp / sdc / generator / ArtifactGenerationServiceTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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.openecomp.sdc.generator;
22
23 import org.openecomp.sdc.generator.aai.model.*;
24 import org.openecomp.sdc.generator.aai.model.Service;
25 import org.openecomp.sdc.generator.aai.tosca.GroupDefinition;
26 import org.openecomp.sdc.generator.aai.tosca.NodeTemplate;
27 import org.openecomp.sdc.generator.aai.tosca.ToscaTemplate;
28 import org.openecomp.sdc.generator.aai.xml.*;
29 import org.openecomp.sdc.generator.aai.xml.Model;
30 import org.openecomp.sdc.generator.data.*;
31 import org.junit.Assert;
32
33 import javax.xml.bind.JAXBContext;
34 import javax.xml.bind.JAXBException;
35 import javax.xml.bind.Unmarshaller;
36 import java.io.ByteArrayInputStream;
37 import java.io.InputStream;
38 import java.util.*;
39 import java.util.Properties;
40 import java.util.regex.Matcher;
41 import java.util.regex.Pattern;
42
43 import static org.openecomp.sdc.generator.SampleJUnitTest.additionalParams;
44
45 @SuppressWarnings("Duplicates")
46 public class ArtifactGenerationServiceTest {
47
48     static Map<String, String> resourcesVersion = new HashMap<>();
49     public static Properties properties = new Properties();
50
51     @SuppressWarnings("Since15")
52     public static void validateName(List<Artifact> artifactList) {
53         for(Artifact artifact : artifactList){
54             String xml = new String(Base64.getDecoder().decode(artifact.getPayload()));
55             Model model = getUnmarshalledArtifactModel(xml);
56             String xmlName = "AAI-"+ model.getModelVers().getModelVer().get(0).getModelName()
57                 +"-"+model
58                 .getModelType
59                 ()+"-"+model.getModelVers().getModelVer().get(0)
60                 .getModelVersion()+".xml";
61
62             Assert.assertEquals(true,artifact.getName().equals(xmlName));
63
64         }
65     }
66
67     public static void checkArtifactName(String name){
68         Assert.assertEquals(true,name.length()<=255);
69     }
70
71     public static void checkArtifactLabel(String label){
72         Pattern pattern = Pattern.compile("[a-zA-Z0-9-+\\s]+");
73         Matcher matcher = pattern.matcher(label);
74         Assert.assertEquals(true,matcher.matches());
75     }
76
77     public static void checkArtifactDescription(String description){
78         Pattern pattern = Pattern.compile("[a-zA-Z\\s\\t\\n]+");
79         Matcher matcher = pattern.matcher(description);
80         Assert.assertEquals(true,matcher.matches());
81         Assert.assertEquals(true,description.length()<=256);
82
83     }
84
85     public static void testResourceTosca(Iterator<ToscaTemplate> itr, Map<String, Model>
86         outputArtifactMap) {
87         while(itr.hasNext()){
88             ToscaTemplate toscaTemplate = itr.next();
89             String resourceVersion= resourcesVersion.get(toscaTemplate.getMetadata().get("UUID"));
90             toscaTemplate.getMetadata().put("version", resourceVersion);
91             if("VF".equals(toscaTemplate.getMetadata().get("type")) && !("Allotted Resource".equals
92                 (toscaTemplate.getMetadata().get("category"))) ){
93                 testVfTosca(outputArtifactMap, toscaTemplate);
94             } else if("VF".equals(toscaTemplate.getMetadata().get("type")) && ("Allotted Resource".equals
95                 (toscaTemplate.getMetadata().get("category"))) ){
96                 testAllottedResourceTosca(outputArtifactMap, toscaTemplate);
97             } else if("VL".equals(toscaTemplate.getMetadata().get("type"))){
98                 testL3NetworkResourceTosca(outputArtifactMap, toscaTemplate);
99             }
100         }
101     }
102
103     public static void testVfTosca(Map<String, Model> outputArtifactMap , ToscaTemplate resourceTosca) {
104         try {
105             //ToscaTemplate resourceTosca = getResourceTosca(toscas);
106             //resourceTosca.getTopology_template().getGroups().
107             if (resourceTosca != null) {
108                 Resource resource = new Resource();
109                 resource.populateModelIdentificationInformation(resourceTosca.getMetadata());
110                 String resourceNameVersionId = resource.getModelNameVersionId();
111                 Model resourceAAIModel =
112                     getAAIModelByNameVersionId(resourceNameVersionId, outputArtifactMap);
113                 if (resourceAAIModel != null) {
114                     validateResourceModelMetadata(resource, resourceAAIModel);
115                     //Validate Resource instance base widget
116
117                     ModelVer modelVersion = resourceAAIModel.getModelVers().getModelVer().get(0);
118
119                     List<ModelElement> matchedVFBaseWidgetElements =
120                         getModelElementbyRelationshipValue(modelVersion.getModelElements(),
121                             Widget.getWidget(Widget.Type.VF).getId());
122                     validateMatchedModelElementsInService(matchedVFBaseWidgetElements,
123                         Widget.getWidget(Widget.Type.VF).getName());
124
125                     validateWidgetIds(matchedVFBaseWidgetElements, Widget.getWidget(Widget.Type.VF).getName(),
126                         Widget.getWidget(Widget.Type.VF).getWidgetId());
127
128                     ModelElements baseResourceWidgetModelElements =
129                         matchedVFBaseWidgetElements.get(0).getModelElements();
130                     if (resourceTosca.getTopology_template() != null) {
131                         Map<String, String> groupIdTypeStore = getGroupsTypeStore(resourceTosca);
132
133                         if (baseResourceWidgetModelElements.getModelElement().size() !=
134                             groupIdTypeStore.size()) {
135                             org.testng.Assert.fail("Missing VFModule in VF model.xml");
136                         }
137
138                         for (String key : groupIdTypeStore.keySet()) {
139
140                             List<ModelElement> matchedResourceElements =
141                                 getModelElementbyRelationshipValue(baseResourceWidgetModelElements, key);
142                             validateMatchedModelElementsInService(matchedResourceElements,
143                                 Widget.getWidget(Widget.Type.VFMODULE).getName());
144                             Model resourceAAIVFModel = getAAIModelByNameVersionId(key, outputArtifactMap);
145                             Map<String, String> vfModuleModelMetadata =
146                                 getVFModuleMetadataTosca(resourceTosca, key);
147                             Map<String, Object> vfModuleMembers = getVFModuleMembersTosca(resourceTosca, key);
148
149                             validateVFModelMetadata(vfModuleModelMetadata, resourceAAIVFModel);
150
151
152                             ModelVer modelVfVersion = resourceAAIVFModel.getModelVers().getModelVer().get(0);
153
154                             List<ModelElement> matchedVFModuleBaseWidgetElements =
155                                 getModelElementbyRelationshipValue(modelVfVersion.getModelElements(),
156                                     Widget.getWidget(Widget.Type.VFMODULE).getId());
157                             validateMatchedModelElementsInService(matchedVFModuleBaseWidgetElements,
158                                 Widget.getWidget(Widget.Type.VFMODULE).getName());
159                             validateWidgetIds(matchedVFModuleBaseWidgetElements, Widget.getWidget(Widget.Type.VFMODULE)
160                                 .getName(), Widget.getWidget(Widget.Type.VFMODULE).getWidgetId());
161
162                             ModelElements baseResourceVFModuleWidgetModelElements =
163                                 matchedVFModuleBaseWidgetElements.get(0).getModelElements();
164                             if (vfModuleMembers.containsKey("l3-network")) {
165                                 //Validate l3
166                                 List<ModelElement> matchedL3NetworkElements =
167                                     getModelElementbyRelationshipValue(baseResourceVFModuleWidgetModelElements,
168                                         Widget.getWidget(Widget.Type.L3_NET).getId());
169                                 validateMatchedModelElementsInService(matchedL3NetworkElements,
170                                     Widget.getWidget(Widget.Type.L3_NET).getName());
171                                 validateWidgetIds(matchedL3NetworkElements, Widget.getWidget(Widget.Type.L3_NET)
172                                     .getName(), Widget.getWidget(Widget.Type.L3_NET).getWidgetId());
173                             }
174                             if (vfModuleMembers.containsKey("vserver")) {
175                                 //Validate vserver
176                                 List<ModelElement> matchedVserverElements =
177                                     getModelElementbyRelationshipValue(baseResourceVFModuleWidgetModelElements,
178                                         Widget.getWidget(Widget.Type.VSERVER).getId());
179                                 validateMatchedModelElementsInService(matchedVserverElements,
180                                     Widget.getWidget(Widget.Type.VSERVER).getName());
181                                 ModelElements vserverWidgetModelElements =
182                                     matchedVserverElements.get(0).getModelElements();
183
184                                 validateWidgetIds(matchedVserverElements, Widget.getWidget(Widget.Type.VSERVER)
185                                     .getName(), Widget.getWidget(Widget.Type.VSERVER).getWidgetId());
186
187
188                                 //Validate vserver->vfc
189                                 List<ModelElement> matchedVfcElements =
190                                     getModelElementbyRelationshipValue(vserverWidgetModelElements,
191                                         Widget.getWidget(Widget.Type.VFC).getId());
192                                 validateMatchedModelElementsInService(matchedVfcElements,
193                                     Widget.getWidget(Widget.Type.VFC).getName());
194                                 validateWidgetIds(matchedVfcElements, Widget.getWidget(Widget.Type.VFC).getName(),
195                                     Widget.getWidget(Widget.Type.VFC).getWidgetId());
196
197                                 //Validate vserver->Image
198                                 List<ModelElement> matchedImageElements =
199                                     getModelElementbyRelationshipValue(vserverWidgetModelElements,
200                                         Widget.getWidget(Widget.Type.IMAGE).getId());
201                                 validateMatchedModelElementsInService(matchedImageElements,
202                                     Widget.getWidget(Widget.Type.IMAGE).getName());
203                                 validateWidgetIds(matchedImageElements, Widget.getWidget(Widget.Type.IMAGE)
204                                     .getName(), Widget.getWidget(Widget.Type.IMAGE).getWidgetId());
205
206
207                                 //Validate vserver->Flavor
208                                 List<ModelElement> matchedFlavorElements =
209                                     getModelElementbyRelationshipValue(vserverWidgetModelElements,
210                                         Widget.getWidget(Widget.Type.FLAVOR).getId());
211                                 validateMatchedModelElementsInService(matchedFlavorElements,
212                                     Widget.getWidget(Widget.Type.FLAVOR).getName());
213                                 validateWidgetIds(matchedFlavorElements, Widget.getWidget(Widget.Type.FLAVOR).getName(),
214                                     Widget.getWidget(Widget.Type.FLAVOR).getWidgetId());
215
216                                 //Validate vserver->Tenant
217                                 List<ModelElement> matchedTenantElements =
218                                     getModelElementbyRelationshipValue(vserverWidgetModelElements,
219                                         Widget.getWidget(Widget.Type.TENANT).getId());
220                                 validateMatchedModelElementsInService(matchedTenantElements,
221                                     Widget.getWidget(Widget.Type.TENANT).getName());
222                                 validateWidgetIds(matchedTenantElements, Widget.getWidget(Widget.Type.TENANT).getName(),
223                                     Widget.getWidget(Widget.Type.TENANT).getWidgetId());
224
225                                 //Validate vserver->l-interface
226                                 if (vfModuleMembers.containsKey("l-interface")) {
227                                     List<ModelElement> matchedLinterfaceElements =
228                                         getModelElementbyRelationshipValue(vserverWidgetModelElements,
229                                             Widget.getWidget(Widget.Type.LINT).getId());
230                                     validateMatchedModelElementsInService(matchedLinterfaceElements,
231                                         Widget.getWidget(Widget.Type.LINT).getName());
232                                     validateWidgetIds(matchedLinterfaceElements, Widget.getWidget(Widget.Type.LINT).getName(),
233                                         Widget.getWidget(Widget.Type.LINT).getWidgetId());
234                                 }
235                                 //Validate vserver->volume
236                                 if (vfModuleMembers.containsKey("volume")) {
237                                     List<ModelElement> matchedVolumeElements =
238                                         getModelElementbyRelationshipValue(vserverWidgetModelElements,
239                                             Widget.getWidget(Widget.Type.VOLUME).getId());
240                                     validateMatchedModelElementsInService(matchedVolumeElements,
241                                         Widget.getWidget(Widget.Type.VOLUME).getName());
242                                     validateWidgetIds(matchedVolumeElements, Widget.getWidget(Widget.Type.VOLUME).getName(),
243                                         Widget.getWidget(Widget.Type.VOLUME).getWidgetId());
244                                 }
245                             }
246                         }
247                     }
248                 } else {
249                     System.out.println("Resource mapping not found for " + resourceNameVersionId);
250                 }
251             }
252
253         } catch (IllegalArgumentException e) {
254             org.testng.Assert.fail(e.getMessage());    //Can come while populating metadata
255         }
256
257     }
258
259     public static void testAllottedResourceTosca(Map<String, Model> outputArtifactMap , ToscaTemplate
260         resourceTosca) {
261         try {
262             if (resourceTosca != null) {
263                 Resource resource = new Resource();
264                 resource.populateModelIdentificationInformation(resourceTosca.getMetadata());
265                 String resourceNameVersionId = resource.getModelNameVersionId();
266                 Model resourceAAIModel =
267                     getAAIModelByNameVersionId(resourceNameVersionId, outputArtifactMap);
268                 if (resourceAAIModel != null) {
269                     validateResourceModelMetadata(resource, resourceAAIModel);
270                     //Validate Resource instance base widget
271
272                     ModelVer modelVersion = resourceAAIModel.getModelVers().getModelVer().get(0);
273
274                     List<ModelElement> matchedVFBaseWidgetElements =
275                         getModelElementbyRelationshipValue(modelVersion.getModelElements(),
276                             Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getId());
277                     validateMatchedModelElementsInService(matchedVFBaseWidgetElements,
278                         Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getName());
279
280                     validateWidgetIds(matchedVFBaseWidgetElements, Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getName(),
281                         Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getWidgetId());
282
283                     validateWidgetIds(matchedVFBaseWidgetElements, Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getName(),
284                         Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getWidgetId());
285
286                     Map<String, Object> providingServiceDetails = getProvidingServiceDetails(resourceTosca);
287
288                     ModelElements containedModelElements = modelVersion.getModelElements().getModelElement().
289                         get(0).getModelElements();
290
291                     org.testng.Assert.assertEquals(containedModelElements.getModelElement().get(0).getRelationshipList()
292                          .getRelationship().get(0).getRelationshipData().get(0).getRelationshipValue(),
293                             providingServiceDetails.get("providing_service_uuid"));
294
295                     org.testng.Assert.assertEquals(containedModelElements.getModelElement().get(0).getRelationshipList()
296                         .getRelationship().get(0).getRelationshipData().get(1).getRelationshipValue(),
297                             providingServiceDetails.get("providing_service_invariant_uuid"));
298
299
300                     if("Allotted Resource".equals(resourceTosca.getMetadata().get("category")) &&
301                         "Tunnel XConnect".equals(resourceTosca.getMetadata().get("subcategory"))) {
302
303                         List<ModelElement> matchedTunnelXConnectWidgetElements =
304                             getModelElementbyRelationshipValue(containedModelElements,
305                                 Widget.getWidget(Widget.Type.TUNNEL_XCONNECT).getId());
306                         validateMatchedModelElementsInService(matchedTunnelXConnectWidgetElements,
307                             Widget.getWidget(Widget.Type.TUNNEL_XCONNECT).getName());
308
309                         validateWidgetIds(matchedTunnelXConnectWidgetElements, Widget.getWidget(Widget.Type.TUNNEL_XCONNECT).getName(),
310                             Widget.getWidget(Widget.Type.TUNNEL_XCONNECT).getWidgetId());
311                     }
312
313                 }else {
314                     System.out.println("Resource mapping not found for " + resourceNameVersionId);
315                 }
316             }
317
318         }catch (IllegalArgumentException e) {
319             org.testng.Assert.fail(e.getMessage());    //Can come while populating metadata
320         }
321
322     }
323
324     public static Map<String, Object> getProvidingServiceDetails(ToscaTemplate resourceTemplate) {
325         Set<String> keys = resourceTemplate.getTopology_template().getNode_templates().keySet();
326
327         Map<String, Object> nodeProperties =null;
328         for(String key : keys) {
329             NodeTemplate node = resourceTemplate.getTopology_template().getNode_templates().get(key);
330             if(node.getType().contains("org.openecomp.resource.vfc") &&
331                 node.getMetadata().get("category").equals("Allotted Resource")) {
332                 nodeProperties = node.getProperties();
333             }
334         }
335
336         return nodeProperties;
337     }
338
339     public static void testL3NetworkResourceTosca(Map<String, Model> outputArtifactMap , ToscaTemplate
340         resourceTosca) {
341         try {
342             if (resourceTosca != null) {
343                 Resource resource = new Resource();
344                 resource.populateModelIdentificationInformation(resourceTosca.getMetadata());
345                 String resourceNameVersionId = resource.getModelNameVersionId();
346                 Model resourceAAIModel =
347                     getAAIModelByNameVersionId(resourceNameVersionId, outputArtifactMap);
348                 if (resourceAAIModel != null) {
349                     validateResourceModelMetadata(resource, resourceAAIModel);
350                     //Validate Resource instance base widget
351
352                     ModelVer modelVersion = resourceAAIModel.getModelVers().getModelVer().get(0);
353
354                     List<ModelElement> matchedVFBaseWidgetElements =
355                         getModelElementbyRelationshipValue(modelVersion.getModelElements(),
356                             Widget.getWidget(Widget.Type.L3_NET).getId());
357                     validateMatchedModelElementsInService(matchedVFBaseWidgetElements,
358                         Widget.getWidget(Widget.Type.L3_NET).getName());
359
360                     validateWidgetIds(matchedVFBaseWidgetElements, Widget.getWidget(Widget.Type.L3_NET).getName(),
361                         Widget.getWidget(Widget.Type.L3_NET).getWidgetId());
362
363                 }else {
364                     System.out.println("Resource mapping not found for " + resourceNameVersionId);
365                 }
366             }
367
368         }catch (IllegalArgumentException e) {
369             org.testng.Assert.fail(e.getMessage());    //Can come while populating metadata
370         }
371
372     }
373
374     public static void testServiceTosca(Map<String, Model> outputArtifactMap,List<ToscaTemplate>
375         toscas) {
376         try {
377             ToscaTemplate serviceTosca = getServiceTosca(toscas);
378             if (serviceTosca == null) {
379                 org.testng.Assert.fail("Service Tosca not found");
380             }
381             serviceTosca.getMetadata().put("version", additionalParams.get(AdditionalParams
382                 .ServiceVersion.getName()));
383             Service service = new Service();
384             service.populateModelIdentificationInformation(serviceTosca.getMetadata());
385             String serviceNameVersionId = service.getModelNameVersionId();
386             Model serviceAAIModel = getAAIModelByNameVersionId(serviceNameVersionId, outputArtifactMap);
387             validateServiceModelMetadata(service, serviceAAIModel);
388             //Validate Service instance base widget
389             ModelVer modelVersion =  serviceAAIModel.getModelVers().getModelVer().get(0);
390
391             List<ModelElement> matchedServiceBaseWidgetElements =
392                 getModelElementbyRelationshipValue( modelVersion.getModelElements(),
393                     Widget.getWidget(Widget.Type.SERVICE).getId());
394             validateMatchedModelElementsInService(matchedServiceBaseWidgetElements,
395                 Widget.getWidget(Widget.Type.SERVICE).getName());
396
397             validateWidgetIds(matchedServiceBaseWidgetElements, Widget.getWidget(Widget.Type.SERVICE).getName(),
398                 Widget.getWidget(Widget.Type.SERVICE).getWidgetId());
399
400             ModelElements baseServiceWidgetModelElements =
401                 matchedServiceBaseWidgetElements.get(0).getModelElements();
402
403
404             Map<String, String> nodeTemplateIdTypeStore = getNodeTemplateTypeStore(serviceTosca);
405             if (nodeTemplateIdTypeStore != null) {
406                 for (String key : nodeTemplateIdTypeStore.keySet()) {
407                     if (nodeTemplateIdTypeStore.get(key).contains("org.openecomp.resource.vf")) {
408                         List<ModelElement> matchedResourceElements =
409                             getModelElementbyRelationshipValue(baseServiceWidgetModelElements, key);
410                         if (nodeTemplateIdTypeStore.get(key).contains("org.openecomp.resource.vf.allottedResource")){
411                             validateMatchedModelElementsInService(matchedResourceElements,
412                                 Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getName());
413                         }else {
414                             validateMatchedModelElementsInService(matchedResourceElements,
415                                 Widget.getWidget(Widget.Type.VF).getName());
416                         }
417
418                         //Validate uuid and invariantuuid are populated in model-ver.model-version-id and model.model-invariant-id
419                         org.testng.Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList()
420                             .getRelationship().get(0)
421                             .getRelationshipData().get(0).getRelationshipValue(),key);
422
423                         org.testng.Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList().getRelationship().get(0)
424                             .getRelationshipData().get(1).getRelationshipValue(), nodeTemplateIdTypeStore
425                             .get(key+"-INV_UID"));
426                     } else if(nodeTemplateIdTypeStore.get(key).contains("org.openecomp.resource.vl")){
427                         //validate l3-network in service tosca
428                         List<ModelElement> matchedResourceElements =
429                             getModelElementbyRelationshipValue(baseServiceWidgetModelElements, key);
430                         validateMatchedModelElementsInService(matchedResourceElements,
431                             Widget.getWidget(Widget.Type.L3_NET).getName());
432                         //Validate uuid and invariantuuid are populated in model-ver.model-version-id and model.model-invariant-id
433                         org.testng.Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList()
434                             .getRelationship().get(0)
435                             .getRelationshipData().get(0).getRelationshipValue(),key);
436
437                         org.testng.Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList().getRelationship().get(0)
438                             .getRelationshipData().get(1).getRelationshipValue(), nodeTemplateIdTypeStore
439                             .get(key+"-INV_UID"));
440                     }
441                 }
442
443
444                 System.out.println();
445
446             }
447         } catch (IllegalArgumentException e) {
448             org.testng.Assert.fail(e.getMessage());    //Can come while populating metadata
449         }
450     }
451
452     private static void validateWidgetIds(List<ModelElement> matchedServiceBaseWidgetElements,
453                                           String widgetName, String widgetInvUuId) {
454         org.testng.Assert.assertEquals(matchedServiceBaseWidgetElements.get(0).getRelationshipList().getRelationship().get(0)
455             .getRelationshipData().get(0).getRelationshipValue(), properties.getProperty(ArtifactType.AAI.name()
456             + ".model-version-id."+ widgetName));
457
458         org.testng.Assert.assertEquals(matchedServiceBaseWidgetElements.get(0).getRelationshipList().getRelationship().get(0)
459             .getRelationshipData().get(1).getRelationshipValue(), widgetInvUuId);
460     }
461
462
463
464     private static void validateMatchedModelElementsInService(List<ModelElement> matchedModelElements, String modelType) {
465         if (matchedModelElements.isEmpty()) {
466             Assert.fail(modelType + " not present ");
467         }
468         if (matchedModelElements.size() > 1) {
469             Assert.fail("More than one " + modelType + " present ");
470         }
471     }
472
473     private static Map<String, String> getNodeTemplateTypeStore(ToscaTemplate toscaTemplate) {
474         if (toscaTemplate.getTopology_template() != null) {
475             Map<String, NodeTemplate> nodeTemplateMap =
476                 toscaTemplate.getTopology_template().getNode_templates();
477             Map<String, String> nodeTemplateIdTypeStore = new LinkedHashMap<>();
478             if (nodeTemplateMap != null) {
479                 for (Map.Entry<String, NodeTemplate> e : nodeTemplateMap.entrySet()) {
480                     String uuid = e.getValue().getMetadata().get("resourceUUID");
481                     if (GeneratorUtil.isEmpty(uuid)) {
482                         uuid = e.getValue().getMetadata().get("UUID");
483                         if (GeneratorUtil.isEmpty(uuid)) {
484                             Assert.fail("UUID Not found");
485                         }
486                     }
487                     if(e.getValue().getType().contains("org.openecomp.resource.vf.")&& (e.getValue()
488                         .getMetadata().get("category").equals("Allotted Resource")))
489                     {
490                         e.getValue().setType("org.openecomp.resource.vf.allottedResource");
491                     }
492                     nodeTemplateIdTypeStore.put(uuid, e.getValue().getType());
493                     resourcesVersion.put(uuid,e.getValue().getMetadata().get
494                         ("version"));
495                     //Populate invraintUuId for V9
496                     String invUuId = e.getValue().getMetadata().get("invariantUUID");
497                     nodeTemplateIdTypeStore.put(uuid+"-INV_UID" , invUuId);
498                 }
499             }
500             return nodeTemplateIdTypeStore;
501         } else {
502             return null;
503         }
504     }
505
506
507     private static Map<String, String> getGroupsTypeStore(ToscaTemplate toscaTemplate) {
508         if(toscaTemplate.getTopology_template() !=null) {
509             Map<String, GroupDefinition> groupDefinitionMap = toscaTemplate.getTopology_template().getGroups();
510             Map<String, String> groupDefinitionIdTypeStore = new LinkedHashMap<>();
511             if (groupDefinitionMap != null) {
512                 for (Map.Entry<String, GroupDefinition> e : groupDefinitionMap.entrySet()) {
513                     if (e.getValue().getType().contains("org.openecomp.groups.VfModule")) {
514                         String uuid = e.getValue().getMetadata().get("vfModuleModelUUID");
515                         if (GeneratorUtil.isEmpty(uuid)) {
516                             uuid = e.getValue().getMetadata().get("UUID");
517                             if (GeneratorUtil.isEmpty(uuid))
518                                 Assert.fail("UUID Not found");
519                         }
520                         groupDefinitionIdTypeStore.put(uuid, e.getValue().getType());
521                     }
522                 }
523             }
524             return groupDefinitionIdTypeStore;
525         }
526         else {
527             return null;
528         }
529     }
530
531     private static void validateServiceModelMetadata(Service serviceToscaModel, Model generatedAAIModel) {
532         Assert.assertEquals(serviceToscaModel.getModelNameVersionId(), generatedAAIModel
533             .getModelVers().getModelVer().get(0).getModelVersionId());
534         Assert.assertEquals(serviceToscaModel.getModelId(), generatedAAIModel.getModelInvariantId());
535         Assert.assertEquals(serviceToscaModel.getModelName(), generatedAAIModel.getModelVers()
536             .getModelVer().get(0).getModelName());
537         Assert.assertEquals(serviceToscaModel.getModelVersion(), generatedAAIModel.getModelVers()
538             .getModelVer().get(0).getModelVersion());
539         Assert.assertEquals(serviceToscaModel.getModelDescription(), generatedAAIModel.getModelVers()
540             .getModelVer().get(0).getModelDescription());
541     }
542
543     private static void validateResourceModelMetadata(Resource resouerceToscaModel, Model generatedAAIModel) {
544         Assert.assertEquals(resouerceToscaModel.getModelNameVersionId(), generatedAAIModel
545             .getModelVers().getModelVer().get(0).getModelVersionId());
546         Assert.assertEquals(resouerceToscaModel.getModelId(), generatedAAIModel.getModelInvariantId());
547         Assert.assertEquals(resouerceToscaModel.getModelName(), generatedAAIModel.getModelVers()
548             .getModelVer().get(0).getModelName());
549         Assert.assertEquals(resouerceToscaModel.getModelVersion(), generatedAAIModel.getModelVers()
550             .getModelVer().get(0).getModelVersion());
551         Assert.assertEquals(resouerceToscaModel.getModelDescription(), generatedAAIModel.getModelVers()
552             .getModelVer().get(0).getModelDescription());
553     }
554
555     private static void validateVFModelMetadata(Map<String, String> vfModuleModelMetadata, Model generatedAAIModel) {
556         Assert.assertEquals(vfModuleModelMetadata.get("vfModuleModelUUID"),  generatedAAIModel
557             .getModelVers().getModelVer().get(0).getModelVersionId());
558         Assert.assertEquals(vfModuleModelMetadata.get("vfModuleModelInvariantUUID"), generatedAAIModel.getModelInvariantId());
559         Assert.assertEquals(vfModuleModelMetadata.get("vfModuleModelName"), generatedAAIModel.getModelVers()
560             .getModelVer().get(0).getModelName());
561         Assert.assertEquals(vfModuleModelMetadata.get("vfModuleModelVersion"), generatedAAIModel.getModelVers()
562             .getModelVer().get(0).getModelVersion());
563         Assert.assertEquals(vfModuleModelMetadata.get("vf_module_description"), generatedAAIModel.getModelVers()
564             .getModelVer().get(0).getModelDescription());
565
566     }
567
568     private static Model getAAIModelByNameVersionId(String nameVersionId,
569                                                     Map<String, Model> outputArtifactMap) {
570         return outputArtifactMap.get(nameVersionId);
571     }
572
573     private static List<ModelElement> getModelElementbyRelationshipValue(ModelElements modelElements,
574                                                                          String relationshipValue) {
575         List<ModelElement> matchedModelElements = new ArrayList<>();
576         if (modelElements != null) {
577             List<ModelElement> modelElementList = modelElements.getModelElement();
578             for (ModelElement element : modelElementList) {
579                 List<Relationship> relationshipList = element.getRelationshipList().getRelationship();
580                 for (Relationship r : relationshipList) {
581                     List<RelationshipData> relationshipDataList = r.getRelationshipData();
582                     for (RelationshipData relationshipData : relationshipDataList) {
583                         if (relationshipData.getRelationshipValue().equals(relationshipValue))
584                             matchedModelElements.add(element);
585                     }
586                 }
587             }
588         }
589         return matchedModelElements;
590     }
591
592     public static void populateAAIGeneratedModelStore(Map<String, Model> outputArtifactMap,List<Artifact> resultData) {
593         for (Artifact outputArtifact : resultData) {
594             if (outputArtifact.getType().equals(ArtifactType.MODEL_INVENTORY_PROFILE.name())) {
595                 byte[] decodedPayload = GeneratorUtil.decoder(outputArtifact.getPayload());
596                 Model aaiModel = getUnmarshalledArtifactModel(new String(decodedPayload));
597                 outputArtifactMap.put(aaiModel.getModelVers().getModelVer().get(0).getModelVersionId(), aaiModel);
598             }
599         }
600     }
601
602     private static Model getUnmarshalledArtifactModel(String aaiModel) {
603         JAXBContext jaxbContext;
604         try {
605             jaxbContext = JAXBContext.newInstance(Model.class);
606             Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
607             InputStream aaiModelStream = new ByteArrayInputStream(aaiModel.getBytes());
608             return (Model) unmarshaller.unmarshal(aaiModelStream);
609         } catch (JAXBException e) {
610             e.printStackTrace();
611         }
612         return null;
613     }
614
615     /**
616      * Identify the service tosca artifact from the list of translated tosca inputs
617      *
618      * @param input List of translated {@link ToscaTemplate tosca} object models
619      * @return Identified service {@link ToscaTemplate tosca}
620      */
621     private static ToscaTemplate getServiceTosca(List<ToscaTemplate> input) {
622         Iterator<ToscaTemplate> iter = input.iterator();
623         while (iter.hasNext()) {
624             ToscaTemplate tosca = iter.next();
625             if (tosca.isService()) {
626                 iter.remove();
627                 return tosca;
628             }
629         }
630         return null;
631     }
632
633
634     private static ToscaTemplate getResourceTosca(List<ToscaTemplate> input) {
635         Iterator<ToscaTemplate> iter = input.iterator();
636         while (iter.hasNext()) {
637             ToscaTemplate tosca = iter.next();
638             if (!tosca.isService()) {
639                 iter.remove();
640                 return tosca;
641             }
642         }
643         return null;
644     }
645
646
647     private static Map<String, String> getVFModuleMetadataTosca(ToscaTemplate toscaTemplate, String vfModuleModelUUID) {
648         Map<String, GroupDefinition> groupDefinitionMap = toscaTemplate.getTopology_template().getGroups();
649         Map<String, String> vfModuleModelMetadata = new LinkedHashMap<>();
650         for (Map.Entry<String, GroupDefinition> e : groupDefinitionMap.entrySet()) {
651             if (e.getValue().getType().contains("org.openecomp.groups.VfModule")) {
652                 String uuid = e.getValue().getMetadata().get("vfModuleModelUUID");
653                 if (uuid == vfModuleModelUUID) {
654                     vfModuleModelMetadata = e.getValue().getMetadata();
655                     vfModuleModelMetadata.put("vf_module_description", (String) e.getValue().getProperties().get("vf_module_description"));
656                 }
657             }
658         }
659         return vfModuleModelMetadata;
660     }
661
662     private static Map<String, Object> getVFModuleMembersTosca(ToscaTemplate toscaTemplate, String vfModuleModelUUID) {
663         Map<String, GroupDefinition> groupDefinitionMap = toscaTemplate.getTopology_template().getGroups();
664         Map<String, NodeTemplate> nodeTemplateMaps = toscaTemplate.getTopology_template().getNode_templates();
665         Map<String, Object> vfModuleMembers = new LinkedHashMap<>();
666         List<String> vfModuleModelMetadata = new ArrayList<>();
667         for (Map.Entry<String, GroupDefinition> e : groupDefinitionMap.entrySet()) {
668             if (e.getValue().getType().contains("org.openecomp.groups.VfModule")) {
669                 String uuid = e.getValue().getMetadata().get("vfModuleModelUUID");
670                 if (uuid == vfModuleModelUUID) {
671                     vfModuleModelMetadata = e.getValue().getMembers();
672                     Iterator itr = vfModuleModelMetadata.iterator();
673                     while (itr.hasNext()) {
674                         Object obj= itr.next();
675                         NodeTemplate nodeTemplate = nodeTemplateMaps.get(obj);
676                         String nodetype = null;
677                         if (nodeTemplate != null)
678                             nodetype = nodeTemplate.getType();
679                         if (nodetype != null) {
680                             String widgetType = membersType(nodetype);
681                             if (widgetType != null)
682                                 vfModuleMembers.put(widgetType, obj);
683                         }
684                     }
685
686                 }
687             }
688         }
689
690         return vfModuleMembers;
691     }
692
693
694     private static String membersType(String toscaType) {
695         String modelToBeReturned = null;
696         while (toscaType != null && toscaType.lastIndexOf(".") != -1 && modelToBeReturned == null) {
697
698             switch (toscaType) {
699
700                 case "org.openecomp.resource.vfc":
701                     modelToBeReturned = "vserver";
702                     break;
703                 case "org.openecomp.resource.cp":
704                 case "org.openecomp.cp":
705                     modelToBeReturned = "l-interface";
706                     break;
707                 case "org.openecomp.resource.vl":
708                     modelToBeReturned = "l3-network";
709                     break;
710                 case "org.openecomp.resource.vf":
711                     modelToBeReturned = "generic-vnf";
712                     break;
713                 case "org.openecomp.groups.VfModule":
714                     modelToBeReturned = "vf-module";
715                     break;
716                 case "org.openecomp.resource.vfc.nodes.heat.cinder":
717                     modelToBeReturned = "volume";
718                     break;
719                 default:
720                     modelToBeReturned = null;
721                     break;
722             }
723
724             toscaType = toscaType.substring(0, toscaType.lastIndexOf("."));
725         }
726         return modelToBeReturned;
727     }
728 }