aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris André <chris.andre@yoppworks.com>2020-04-21 14:40:07 -0400
committerOfir Sonsino <ofir.sonsino@intl.att.com>2020-04-28 12:19:02 +0000
commit08cb42224a5d20783e525cadbab1b7ae40a86f72 (patch)
tree4f8c31dcc56cb0d9b9dc01c33b965dbaec41db7c
parent33a4512b6eb6204e2209a788b06153a889629f4e (diff)
Handle null case in `GroupVersionUpdater`
- change in the final condition of `isGenerateGroupUUID` - Added tests related to modified code Issue-ID: SDC-2913 Signed-off-by: Chris Andre <chris.andre@yoppworks.com> Change-Id: I22738f9f4922467209a16a4d6b3b78d7bfac11c9
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/group/GroupVersionUpdater.java38
-rw-r--r--catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/group/GroupVersionUpdaterTest.java305
2 files changed, 330 insertions, 13 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/group/GroupVersionUpdater.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/group/GroupVersionUpdater.java
index bb4d884811..8e9ba7a88b 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/group/GroupVersionUpdater.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/group/GroupVersionUpdater.java
@@ -20,7 +20,8 @@
package org.openecomp.sdc.be.components.impl.group;
-
+import java.util.Collections;
+import java.util.stream.Collectors;
import org.openecomp.sdc.be.components.impl.version.OnChangeVersionCommand;
import org.openecomp.sdc.be.dao.api.ActionStatus;
import org.openecomp.sdc.be.datatypes.enums.GroupTypeEnum;
@@ -37,7 +38,6 @@ import org.openecomp.sdc.common.log.wrappers.Logger;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
-import java.util.stream.Collectors;
import static org.apache.commons.collections.CollectionUtils.isEmpty;
@@ -84,27 +84,39 @@ public class GroupVersionUpdater implements OnChangeVersionCommand {
}
group.setVersion(String.valueOf(newVersion));
}
+ }
+ static <T> List<T> emptyIfNull(final List<T> list) {
+ return (list == null? Collections.emptyList() : list);
}
- private boolean isGenerateGroupUUID(GroupDefinition group, Component container) {
- if(GroupTypeEnum.VF_MODULE.getGroupTypeName().equals(group.getType())){
- List<String> artifactsUuid = group.getArtifactsUuid();
- List<String> heatArtifactUniqueIDs = group.getArtifacts().stream().filter(a->!a.endsWith("env")).collect(Collectors.toList());
- Map<String, ArtifactDefinition> deploymentArtifacts = container.getDeploymentArtifacts();
- for (String heatArtifactUniqueID : heatArtifactUniqueIDs){
- ArtifactDefinition artifactDefinition = deploymentArtifacts.get(heatArtifactUniqueID.split("\\.", -1)[1]);
- if((artifactDefinition == null || artifactDefinition.isEmpty())
- && !artifactsUuid.contains(artifactDefinition.getArtifactUUID()) ){
+ static <T, U> Map<T, U> emptyIfNull(final Map<T, U> list) {
+ return (list == null? Collections.emptyMap() : list);
+ }
+
+ static boolean isGenerateGroupUUID(GroupDefinition group, Component container) {
+ if (!GroupTypeEnum.VF_MODULE.getGroupTypeName().equals(group.getType())) {
+ return true;
+ } else {
+ List<String> artifactsUuid = emptyIfNull(group.getArtifactsUuid());
+ Map<String, ArtifactDefinition> deploymentArtifacts = emptyIfNull(container.getDeploymentArtifacts());
+ List<String> heatArtifactUniqueIDs = emptyIfNull(group.getArtifacts()).stream().filter(a -> !a.endsWith("env")).collect(
+ Collectors.toList());
+
+ for (String heatArtifactUniqueID : heatArtifactUniqueIDs) {
+ ArtifactDefinition artifactDefinition = deploymentArtifacts
+ .get(heatArtifactUniqueID.split("\\.", -1)[1]);
+
+ if ((artifactDefinition == null
+ || artifactDefinition.isEmpty())
+ || !artifactsUuid.contains(artifactDefinition.getArtifactUUID())) {
return true;
}
}
return false;
}
- return true;
}
-
private ActionStatus updateGroupsVersion(Component groupsContainer, Consumer<List<GroupDefinition>> updateGroupVersion) {
List<GroupDefinition> groups = groupsContainer.getGroups();
if (isEmpty(groups)) {
diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/group/GroupVersionUpdaterTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/group/GroupVersionUpdaterTest.java
new file mode 100644
index 0000000000..4e08545acb
--- /dev/null
+++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/group/GroupVersionUpdaterTest.java
@@ -0,0 +1,305 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.be.components.impl.group;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import io.vavr.collection.HashMap;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openecomp.sdc.be.datatypes.enums.GroupTypeEnum;
+import org.openecomp.sdc.be.model.ArtifactDefinition;
+import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.GroupDefinition;
+
+public class GroupVersionUpdaterTest {
+
+ @Test
+ @DisplayName("emptyIfNull(List<T>) - should return the same List passed as an argument if it is not null")
+ public void safeAccessList_NotNull() {
+ //Given
+ List<String> arg = defaultArtifactsUuid.get();
+
+ //When
+ List<String> result = GroupVersionUpdater.emptyIfNull(arg);
+
+ //Then
+ assertSame(arg, result);
+ }
+
+ @Test
+ @DisplayName("emptyIfNull(List<T>) - should return an empty List if we pass it a null value")
+ public void safeAccessList_Null() {
+ //Given
+ List<String> arg = null;
+
+ //When
+ List<String> result = GroupVersionUpdater.emptyIfNull(arg);
+
+ //Then
+ assertSame(Collections.EMPTY_LIST, result);
+ }
+
+ @Test
+ @DisplayName("emptyIfNull(Map<T, U>) - should return the same Map passed as an argument if it is not null")
+ public void safeAccessMap_NotNull() {
+ //Given
+ Map<String, ArtifactDefinition> arg = defaultDeploymentArtifacts.get();
+
+ //When
+ Map<String, ArtifactDefinition> result = GroupVersionUpdater.emptyIfNull(arg);
+
+ //Then
+ assertSame(arg, result);
+ }
+
+ @Test
+ @DisplayName("emptyIfNull(Map<T, U>) - should return an empty Map if we pass it a null value")
+ public void safeAccessMap_Null() {
+ //Given
+ Map<String, ArtifactDefinition> arg = null;
+
+ //When
+ Map<String, ArtifactDefinition> result = GroupVersionUpdater.emptyIfNull(arg);
+
+ //Then
+ assertSame(Collections.EMPTY_MAP, result);
+ }
+
+
+ @Test
+ @DisplayName("isGenerateGroupUUID - Return true if there is a deployment artifact in the container that is not"
+ + " part of the group")
+ public void isGenerateGroupUUID_GoldenPath() {
+ // Given
+ Supplier<String> type = defaultGroupType;
+ Supplier<List<String>> artifactsUuid = defaultArtifactsUuid;
+ GroupDefinition group = getGroup(
+ type,
+ artifactsUuid
+ );
+
+ Supplier<Map<String, ArtifactDefinition>> deploymentArtifacts = defaultDeploymentArtifacts;
+ Component container = getContainer(deploymentArtifacts);
+
+ // When
+ boolean result = GroupVersionUpdater.isGenerateGroupUUID(group, container);
+
+ // Then
+ assertTrue(result);
+ }
+
+ @Test
+ @DisplayName("isGenerateGroupUUID - `group`'s type is not GroupTypeEnum.VF_MODULE")
+ public void isGenerateGroupUUID_GroupIsNotVFModule() {
+ // Given
+ Supplier<String> type = GroupTypeEnum.HEAT_STACK::getGroupTypeName;
+ Supplier<List<String>> artifactsUuid = defaultArtifactsUuid;
+ GroupDefinition group = getGroup(
+ type,
+ artifactsUuid
+ );
+
+ Supplier<Map<String, ArtifactDefinition>> deploymentArtifacts = defaultDeploymentArtifacts;
+ Component container = getContainer(deploymentArtifacts);
+
+ // When
+ boolean result = GroupVersionUpdater.isGenerateGroupUUID(group, container);
+
+ // Then
+ assertTrue(result);
+ }
+
+ @Test
+ @DisplayName("isGenerateGroupUUID - `group`'s type is null")
+ public void isGenerateGroupUUID_NullGroupType() {
+ // Given
+ Supplier<String> type = () -> null;
+ Supplier<List<String>> artifactsUuid = defaultArtifactsUuid;
+ GroupDefinition group = getGroup(
+ type,
+ artifactsUuid
+ );
+
+ Supplier<Map<String, ArtifactDefinition>> deploymentArtifacts = defaultDeploymentArtifacts;
+ Component container = getContainer(deploymentArtifacts);
+
+ // When
+ boolean result = GroupVersionUpdater.isGenerateGroupUUID(group, container);
+
+ // Then
+ assertTrue(result);
+ }
+
+ @Test
+ @DisplayName("isGenerateGroupUUID - `container`'s DeploymentArtifacts is null")
+ public void isGenerateGroupUUID_NullDeploymentArtifacts() {
+ // Given
+ Supplier<String> type = defaultGroupType;
+ Supplier<List<String>> artifactsUuid = defaultArtifactsUuid;
+ GroupDefinition group = getGroup(
+ type,
+ artifactsUuid
+ );
+
+ Supplier<Map<String, ArtifactDefinition>> deploymentArtifacts = () -> null;
+ Component container = getContainer(deploymentArtifacts);
+
+ // When
+ boolean result = GroupVersionUpdater.isGenerateGroupUUID(group, container);
+
+ // Then
+ assertTrue(result);
+ }
+
+ @Test
+ @DisplayName("isGenerateGroupUUID - `group`'s artifactUuid is null")
+ public void isGenerateGroupUUID_NullGroupArtifactUuid() {
+ // Given
+ Supplier<String> type = defaultGroupType;
+ Supplier<List<String>> artifactsUuid = () -> null;
+ GroupDefinition group = getGroup(
+ type,
+ artifactsUuid
+ );
+
+ Supplier<Map<String, ArtifactDefinition>> deploymentArtifacts = defaultDeploymentArtifacts;
+ Component container = getContainer(deploymentArtifacts);
+
+ // When
+ boolean result = GroupVersionUpdater.isGenerateGroupUUID(group, container);
+
+ // Then
+ assertFalse(result);
+ }
+
+ @Test
+ @DisplayName("isGenerateGroupUUID - `group`'s artifactUuid only has artifactUuid ending with 'env'")
+ public void isGenerateGroupUUID_OnlyArtifactEndingWithEnv() {
+ // Given
+ Supplier<String> type = defaultGroupType;
+ Supplier<List<String>> artifactsUuid = () ->
+ defaultArtifactsUuid.get().stream()
+ .map(str -> str + ".env")
+ .collect(Collectors.toList());
+ GroupDefinition group = getGroup(
+ type,
+ artifactsUuid
+ );
+
+ Supplier<Map<String, ArtifactDefinition>> deploymentArtifacts = defaultDeploymentArtifacts;
+ Component container = getContainer(deploymentArtifacts);
+
+ // When
+ boolean result = GroupVersionUpdater.isGenerateGroupUUID(group, container);
+
+ // Then
+ assertFalse(result);
+ }
+
+ @Test
+ @DisplayName("isGenerateGroupUUID - `group`'s artifactUuid is not part of the container's list of deployment artifacts")
+ public void isGenerateGroupUUID_NoMatchingUuidInContainer() {
+ // Given
+ Supplier<String> type = defaultGroupType;
+ Supplier<List<String>> artifactsUuid = defaultArtifactsUuid;
+ GroupDefinition group = getGroup(
+ type,
+ artifactsUuid
+ );
+
+ Supplier<Map<String, ArtifactDefinition>> deploymentArtifacts = defaultDeploymentArtifacts;
+ Component container = getContainer(deploymentArtifacts);
+
+ // When
+ boolean result = GroupVersionUpdater.isGenerateGroupUUID(group, container);
+
+ // Then
+ assertTrue(result);
+ }
+
+ Supplier<String> defaultGroupType = GroupTypeEnum.VF_MODULE::getGroupTypeName;
+
+ Supplier<List<String>> defaultArtifactsUuid = () -> Arrays.asList(
+ "uniqueId1.1",
+ "uniqueId2.2",
+ "uniqueId3.3",
+ "uniqueId4.4",
+ "uniqueId5.5",
+ "uniqueId6.6",
+ "uniqueId7.7",
+ "uniqueId8.8",
+ "uniqueId9.9"
+ );
+
+ Supplier<Map<String, ArtifactDefinition>> defaultDeploymentArtifacts = () -> HashMap.of(
+ "uniqueId1.1", getArtifactDefinition("uniqueId1.1"),
+ "uniqueId2.2", getArtifactDefinition("uniqueId2.2"),
+ "uniqueId3.3", getArtifactDefinition("uniqueId3.3"),
+ "uniqueId44", getArtifactDefinition("uniqueId4.4"),
+ "uniqueId5.5", getArtifactDefinition("uniqueId5.5"),
+ "uniqueId6.6", getArtifactDefinition("uniqueId6.6"),
+ "uniqueId7.7", getArtifactDefinition("uniqueId7.7"),
+ "uniqueId8.8", getArtifactDefinition("uniqueId8.8"),
+ "uniqueId9.9", getArtifactDefinition("uniqueId9.9"),
+ "uniqueId.not.found", getArtifactDefinition("uniqueId.not.found")
+ ).toJavaMap();
+
+ ArtifactDefinition getArtifactDefinition(String artifactUuid) {
+ return new ArtifactDefinition() {
+ @Override
+ public String getArtifactUUID() {
+ return artifactUuid;
+ }
+ };
+ }
+
+ GroupDefinition getGroup(Supplier<String> type, Supplier<List<String>> artifacts) {
+ return new GroupDefinition() {
+ @Override
+ public String getType() {
+ return type.get();
+ }
+
+ @Override
+ public List<String> getArtifacts() {
+ return artifacts.get();
+ }
+ };
+ }
+
+ Component getContainer(Supplier<Map<String, ArtifactDefinition>> deploymentArtifacts) {
+ return new Component(null) {
+ @Override
+ public Map<String, ArtifactDefinition> getDeploymentArtifacts() {
+ return deploymentArtifacts.get();
+ }
+ };
+ }
+}