Fix pnf csar package issue 81/117781/11
authorxuegao <xue.gao@intl.att.com>
Thu, 11 Feb 2021 14:16:36 +0000 (15:16 +0100)
committerChristophe Closset <christophe.closset@intl.att.com>
Sat, 20 Feb 2021 07:07:06 +0000 (07:07 +0000)
Generate the dependencies and imports even derivedFrom list is empty.

Issue-ID: SDC-3391
Signed-off-by: xuegao <xue.gao@intl.att.com>
Change-Id: Ia07d1d6a73a1e08fb8f5ba1678b15e71aecd54b0
Signed-off-by: xuegao <xue.gao@intl.att.com>
catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java
catalog-be/src/test/java/org/openecomp/sdc/be/tosca/ToscaExportHandlerTest.java

index 70834fd..ddea498 100644 (file)
@@ -561,7 +561,7 @@ public class ToscaExportHandler {
                                   final List<Triple<String, String, Component>> dependencies,
                                   final ComponentInstance componentInstance) {
         log.debug("createDependency componentCache {}", componentCache);
-        final Component componentRI = componentCache.get(componentInstance.getComponentUid());
+        Component componentRI = componentCache.get(componentInstance.getComponentUid());
         if (componentRI == null || componentInstance.getOriginType() == OriginTypeEnum.ServiceSubstitution) {
             // all resource must be only once!
             final Either<Component, StorageOperationStatus> resource = toscaOperationFacade
@@ -572,15 +572,15 @@ public class ToscaExportHandler {
                 return;
             }
             final Component fetchedComponent = resource.left().value();
-            setComponentCache(componentCache, componentInstance, fetchedComponent);
-            addDependencies(imports, dependencies, fetchedComponent);
+            componentRI = setComponentCache(componentCache, componentInstance, fetchedComponent);
+            addDependencies(imports, dependencies, componentRI);
         }
     }
 
     /**
      * Sets a componentCache from the given component/resource.
      */
-    private void setComponentCache(final Map<String, Component> componentCache,
+    private Component setComponentCache(final Map<String, Component> componentCache,
                                    final ComponentInstance componentInstance,
                                    final Component fetchedComponent) {
         componentCache.put(fetchedComponent.getUniqueId(), fetchedComponent);
@@ -594,7 +594,9 @@ public class ToscaExportHandler {
             }
             final Component fetchedSource = sourceService.left().value();
             componentCache.put(fetchedSource.getUniqueId(), fetchedSource);
+            return fetchedSource;
         }
+        return fetchedComponent;
     }
 
     /**
@@ -609,7 +611,7 @@ public class ToscaExportHandler {
 
             final Optional<Map<String, String>> derivedFromMapOfIdToName = getDerivedFromMapOfIdToName(fetchedComponent,
                 componentsList);
-            if (derivedFromMapOfIdToName.isPresent()) {
+            if (derivedFromMapOfIdToName.isPresent() && !derivedFromMapOfIdToName.get().isEmpty()) {
                 derivedFromMapOfIdToName.get().entrySet().forEach(entry -> {
                     log.debug("Started entry.getValue() : {}", entry.getValue());
                     if (!NATIVE_ROOT.equals(entry.getValue())) {
@@ -620,8 +622,11 @@ public class ToscaExportHandler {
                         }
                     }
                 });
+                setImports(imports, dependencies, componentsList);
+            } else {
+                setImports(imports, dependencies, fetchedComponent);
             }
-            setImports(imports, dependencies, componentsList);
+
         }
     }
 
@@ -658,30 +663,33 @@ public class ToscaExportHandler {
     private void setImports(final List<Map<String, Map<String, String>>> imports,
                             final List<Triple<String, String, Component>> dependencies,
                             final Set<Component> componentsList) {
-        componentsList.forEach(component -> {
-            final Map<String, ArtifactDefinition> toscaArtifacts = component.getToscaArtifacts();
-            final ArtifactDefinition artifactDefinition = toscaArtifacts.get(ASSET_TOSCA_TEMPLATE);
-            if (artifactDefinition != null) {
-                final Map<String, String> files = new HashMap<>();
-                final String artifactName = artifactDefinition.getArtifactName();
-                files.put(IMPORTS_FILE_KEY, artifactName);
-                final StringBuilder keyNameBuilder = new StringBuilder();
-                keyNameBuilder.append(component.getComponentType().toString().toLowerCase());
-                keyNameBuilder.append("-");
-                keyNameBuilder.append(component.getName());
-                addImports(imports, keyNameBuilder, files);
-                dependencies
-                    .add(new ImmutableTriple<String, String, Component>(artifactName, artifactDefinition.getEsId(),
-                        component));
-
-                if (!ModelConverter.isAtomicComponent(component)) {
-                    final Map<String, String> interfaceFiles = new HashMap<>();
-                    interfaceFiles.put(IMPORTS_FILE_KEY, getInterfaceFilename(artifactName));
-                    keyNameBuilder.append("-interface");
-                    addImports(imports, keyNameBuilder, interfaceFiles);
-                }
+        componentsList.forEach(component -> setImports(imports, dependencies, component));
+    }
+
+    private void setImports(final List<Map<String, Map<String, String>>> imports,
+                            final List<Triple<String, String, Component>> dependencies,
+                            final Component component) {
+        final Map<String, ArtifactDefinition> toscaArtifacts = component.getToscaArtifacts();
+        final ArtifactDefinition artifactDefinition = toscaArtifacts.get(ASSET_TOSCA_TEMPLATE);
+        if (artifactDefinition != null) {
+            final Map<String, String> files = new HashMap<>();
+            final String artifactName = artifactDefinition.getArtifactName();
+            files.put(IMPORTS_FILE_KEY, artifactName);
+            final StringBuilder keyNameBuilder = new StringBuilder();
+            keyNameBuilder.append(component.getComponentType().toString().toLowerCase());
+            keyNameBuilder.append("-");
+            keyNameBuilder.append(component.getName());
+            addImports(imports, keyNameBuilder, files);
+            dependencies
+                    .add(new ImmutableTriple<String, String, Component>(artifactName, artifactDefinition.getEsId(), component));
+
+            if (!ModelConverter.isAtomicComponent(component)) {
+                final Map<String, String> interfaceFiles = new HashMap<>();
+                interfaceFiles.put(IMPORTS_FILE_KEY, getInterfaceFilename(artifactName));
+                keyNameBuilder.append("-interface");
+                addImports(imports, keyNameBuilder, interfaceFiles);
             }
-        });
+        }
     }
 
     /**
index a87460f..71a43ac 100644 (file)
@@ -37,6 +37,8 @@ import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.openecomp.sdc.be.tosca.PropertyConvertor.PropertyType.PROPERTY;
 
@@ -46,6 +48,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -72,6 +75,7 @@ import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ToscaArtifactDataDefinition;
 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
 import org.openecomp.sdc.be.exception.ToscaExportException;
 import org.openecomp.sdc.be.model.ArtifactDefinition;
 import org.openecomp.sdc.be.model.CapabilityDefinition;
@@ -328,6 +332,45 @@ public class ToscaExportHandlerTest extends BeConfDependentTest {
         Assert.assertNotNull(result);
     }
 
+    @Test
+    public void testSetImports() throws Exception {
+        Resource resource = new Resource();
+        resource.setResourceType(ResourceTypeEnum.PNF);
+
+        Component component = resource;
+        component.setName("TestResourceName");
+        Map<String, ArtifactDefinition> artifactList = new HashMap<>();
+        ArtifactDefinition artifact = new ArtifactDefinition();
+        artifact.setArtifactName("name.name2");
+        artifactList.put("assettoscatemplate", artifact);
+        component.setArtifacts(artifactList);
+        component.setToscaArtifacts(artifactList);
+        ToscaTemplate toscaTemplate = new ToscaTemplate("");
+
+
+        ComponentInstance ci = new ComponentInstance();
+        ci.setComponentUid("name");
+        ci.setOriginType(OriginTypeEnum.PNF);
+        ci.setSourceModelUid("modelName");
+        List<ComponentInstance> componentInstanceList = new LinkedList<>();
+        componentInstanceList.add(ci);
+        component.setComponentInstances(componentInstanceList);
+
+        when(toscaOperationFacade.getToscaFullElement(eq("name"))).thenReturn(Either.left(component));
+
+        Either<ImmutablePair<ToscaTemplate, Map<String, Component>>, ToscaError> result;
+        result = Deencapsulation.invoke(testSubject, "fillImports", component, toscaTemplate);
+
+        verify(toscaOperationFacade, times(1)).getToscaFullElement("name");
+        Assert.assertTrue(result.isLeft());
+        ToscaTemplate toscaTemplateRes = result.left().value().left;
+        Assert.assertTrue(toscaTemplateRes.getImports().size() == 8);
+        Assert.assertNotNull(toscaTemplateRes.getImports().get(6).get("resource-TestResourceName-interface"));
+        Assert.assertNotNull(toscaTemplateRes.getImports().get(7).get("resource-TestResourceName"));
+        Assert.assertTrue(toscaTemplateRes.getDependencies().size() == 1);
+        Assert.assertNotNull(toscaTemplateRes.getDependencies().get(0).getLeft().equals("name.name2"));
+    }
+
     @Test
     public void testConvertToscaTemplate() throws Exception {