From d6eedb1f342ac32c8339b553848267e443410d57 Mon Sep 17 00:00:00 2001 From: Ittay Stern Date: Wed, 12 Feb 2020 12:28:59 +0200 Subject: Topology tree: extract AAITreeNodesEnricher out of AAIServiceTree Issue-ID: VID-771 Change-Id: I138a89b7b2f00e6e603ff26addefc494aeb019b0 Signed-off-by: Ittay Stern --- .../vid/services/AAIServiceIntegrativeTest.java | 10 +- .../services/AAIServiceTreeIntegrativeTest.java | 14 +- .../org/onap/vid/services/AAIServiceTreeTest.java | 143 +--------------- .../vid/services/AAITreeNodesEnricherTest.java | 183 +++++++++++++++++++++ 4 files changed, 202 insertions(+), 148 deletions(-) create mode 100644 vid-app-common/src/test/java/org/onap/vid/services/AAITreeNodesEnricherTest.java (limited to 'vid-app-common/src/test/java/org/onap') diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceIntegrativeTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceIntegrativeTest.java index a73a5a7bd..e447ac71c 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceIntegrativeTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceIntegrativeTest.java @@ -64,12 +64,10 @@ public class AAIServiceIntegrativeTest extends TestWithAaiClient { AaiClient aaiClient = new AaiClient(aaiRestInterface, null, cacheProvider); ExecutorService executorService = MoreExecutors.newDirectExecutorService(); AAIServiceTree aaiServiceTree = new AAIServiceTree( - aaiClient, - new AAITreeNodeBuilder(aaiClient, logging), - new AAITreeConverter(new ModelUtil()), - null, - null, - executorService + new AAITreeNodeBuilder(aaiClient, logging), + new AAITreeNodesEnricher(aaiClient, null), + new AAITreeConverter(new ModelUtil()), null, + executorService ); return new AaiServiceImpl(aaiClient, null, aaiServiceTree, executorService, logging); } diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceTreeIntegrativeTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceTreeIntegrativeTest.java index 0d2d51cee..02f127d71 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceTreeIntegrativeTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceTreeIntegrativeTest.java @@ -61,6 +61,7 @@ import org.onap.vid.utils.Logging; import org.springframework.http.HttpMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import org.togglz.core.manager.FeatureManager; public class AAIServiceTreeIntegrativeTest { @@ -79,9 +80,13 @@ public class AAIServiceTreeIntegrativeTest { @Mock ServiceModelInflator serviceModelInflator; + @Mock + FeatureManager featureManager; + @Mock Logging logging; + private AAITreeNodesEnricher aaiTreeNodesEnricher; private AAITreeNodeBuilder aaiTreeNodeBuilder; private AAITreeConverter aaiTreeConverter = new AAITreeConverter(new ModelUtil()); @@ -133,7 +138,6 @@ public class AAIServiceTreeIntegrativeTest { "\"relationship-key\": \"owning-entity.owning-entity-id\"," + "\"relationship-value\": \"43b8a85a-0421-4265-9069-117dd6526b8a\"}]}]}}"; - //TODO Amichai: if in the future it is neede, add here the SUFFIX to the URL: "?format=simple" private static String genericVnfRequestUri = "/aai/v12/network/generic-vnfs/generic-vnf/59bde732-9b84-46bd-a59a-3c45fee0538b"; private String genericVnfResponseString(boolean isDuplicatedKeysInTenantRelation) { @@ -300,6 +304,7 @@ public class AAIServiceTreeIntegrativeTest { TestUtils.initMockitoMocks(this); reboundLoggingWithMdcMock(); aaiTreeNodeBuilder = new AAITreeNodeBuilder(aaiClient, logging); + aaiTreeNodesEnricher = new AAITreeNodesEnricher(aaiClient, serviceModelInflator); } private void reboundLoggingWithMdcMock() { @@ -320,7 +325,7 @@ public class AAIServiceTreeIntegrativeTest { "11c6dc3e-cd6a-41b3-a50e-b5a10f7157d0", new ServiceModelInflator.Names("vnf-model-customization-name", "vnf-key-in-model") )); - ServiceInstance root = new AAIServiceTree(aaiClient, aaiTreeNodeBuilder, aaiTreeConverter, sdcService, serviceModelInflator, executorService) + ServiceInstance root = new AAIServiceTree(aaiTreeNodeBuilder, aaiTreeNodesEnricher, aaiTreeConverter, sdcService, executorService) .getServiceInstanceTopology(globalCustomerID, serviceType, serviceInstanceId); assertServiceNode(root, 1); @@ -370,7 +375,8 @@ public class AAIServiceTreeIntegrativeTest { when(sdcService.getService(any())).thenReturn( TestUtils.readJsonResourceFileAsObject("/getTopology/serviceWithCR/serviceWithCRModel.json", ServiceModel.class)); - ServiceInstance serviceInstance = new AAIServiceTree(aaiClient, aaiTreeNodeBuilder, aaiTreeConverter, sdcService, new ServiceModelInflator(), executorService) + ServiceInstance serviceInstance = new AAIServiceTree(aaiTreeNodeBuilder, + new AAITreeNodesEnricher(aaiClient, new ServiceModelInflator()), aaiTreeConverter, sdcService, executorService) .getServiceInstanceTopology("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", "Emanuel", "a565e6ad-75d1-4493-98f1-33234b5c17e2"); String expected = TestUtils.readFileAsString("/getTopology/serviceWithCR/getTopologyWithCR.json"); @@ -437,7 +443,7 @@ public class AAIServiceTreeIntegrativeTest { when(sdcService.getService(any())).thenReturn(mock(ServiceModel.class)); when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of()); - new AAIServiceTree(aaiClient, aaiTreeNodeBuilder, aaiTreeConverter, sdcService, serviceModelInflator, executorService) + new AAIServiceTree(aaiTreeNodeBuilder, aaiTreeNodesEnricher, aaiTreeConverter, sdcService, executorService) .getServiceInstanceTopology(globalCustomerID, serviceType, serviceInstanceId); } diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceTreeTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceTreeTest.java index be195c89b..ca3e98e2d 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceTreeTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/AAIServiceTreeTest.java @@ -20,37 +20,24 @@ package org.onap.vid.services; -import static java.util.Collections.emptyList; -import static java.util.Collections.emptyMap; -import static java.util.stream.Collectors.toList; import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.onap.vid.services.AAITreeNodeBuilderTest.createExpectedVnfTreeNode; import com.fasterxml.jackson.databind.JsonNode; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Streams; import com.google.common.util.concurrent.MoreExecutors; -import java.io.IOException; import java.util.List; import java.util.concurrent.ExecutorService; import net.javacrumbs.jsonunit.core.Option; -import org.apache.commons.lang3.builder.ReflectionToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import org.jetbrains.annotations.NotNull; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.onap.vid.aai.AaiClient; import org.onap.vid.aai.util.AAITreeConverter; import org.onap.vid.asdc.parser.ServiceModelInflator; -import org.onap.vid.asdc.parser.ServiceModelInflator.Names; import org.onap.vid.model.ModelUtil; import org.onap.vid.model.aaiTree.AAITreeNode; import org.onap.vid.model.aaiTree.NodeType; @@ -76,136 +63,16 @@ public class AAIServiceTreeTest { MockitoAnnotations.initMocks(this); } - private final static String nullString = "null placeholder"; - - - - @Test - public void enrichNodesWithModelCustomizationName_simple3NodesCase_nodesEnriched() { - - when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of( - "version id a", new Names("name a", "key a"), - "version id b", new Names("name b", "key b"), - "version id c", new Names("name c", "key c") - )); - - final ImmutableList versionIds = ImmutableList.of("version id a", "version id b", "version id c"); - final ImmutableList expectedNames = ImmutableList.of( - new Names("name a", "key a"), - new Names("name b", "key b"), - new Names("name c", "key c")); - - - final List nodesUnderTest = nodesWithVersionIds(versionIds); - aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null); - - assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames)))); - } - - @Test - public void enrichNodesWithModelCustomizationName_noNodes_noError() { - - when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of( - "11c6dc3e-cd6a-41b3-a50e-b5a10f7157d0", new Names("my model cust name", "my key") - )); - - aaiServiceTree.enrichNodesWithModelCustomizationName(emptyList(), null); - } - - @Test - public void enrichNodesWithModelCustomizationName_nothingInModel_nodesUnchanged() { - - when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(emptyMap()); - - final ImmutableList versionIds = ImmutableList.of("version id a", "version id b", "version id c"); - final Names nullNames = new Names(nullString, nullString); - final ImmutableList expectedNames = ImmutableList.of(nullNames, nullNames, nullNames); - - - final List nodesUnderTest = nodesWithVersionIds(versionIds); - - aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null); - - assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames)))); - } - - @Test - public void enrichNodesWithModelCustomizationName_staggered4NodesAndNull_3nodesEnriched2isNull() { - - when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of( - "version id Z", new Names("name Z", "key Z"), - "version id d", new Names(null, "key d"), - "version id c", new Names("name c", null), - "version id a", new Names("name a", "key a") - )); - - final ImmutableList versionIds = ImmutableList.of("version id a", "version id b", "version id c", "version id d", nullString); - final ImmutableList expectedNames = ImmutableList.of( - new Names("name a", "key a"), - new Names(nullString, nullString), - new Names("name c", nullString), - new Names(nullString, "key d"), - new Names(nullString, nullString) - ); - - - final List nodesUnderTest = nodesWithVersionIds(versionIds); - - aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null); - - assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames)))); - } - - - - @NotNull - private String[] toStringsArray(List nodes) { - return toStrings(nodes).toArray(new String[] {}); - } - - @NotNull - private List toStrings(List nodes) { - return nodes.stream().map(n -> { - final ReflectionToStringBuilder reflectionToStringBuilder = new ReflectionToStringBuilder(n, ToStringStyle.SHORT_PREFIX_STYLE); - reflectionToStringBuilder.setExcludeNullValues(true); - return reflectionToStringBuilder.toString(); - }).collect(toList()); - } - - @NotNull - private List nodesWithVersionIdsAndCustomizationNames(List versionIds, List customizationNames) { - return Streams - .zip(versionIds.stream(), customizationNames.stream(), this::nodeWithVersionIdAndCustomizationName) - .collect(toList()); - } - - @NotNull - private List nodesWithVersionIds(List versionIds) { - return versionIds.stream() - .map(versionId -> nodeWithVersionIdAndCustomizationName(versionId, new Names(nullString, nullString))) - .collect(toList()); - } - - private AAITreeNode nodeWithVersionIdAndCustomizationName(String versionId, Names names) { - AAITreeNode newNode = new AAITreeNode(); - newNode.setModelVersionId(versionId.equals(nullString) ? null : versionId); - newNode.setModelCustomizationName(names.getModelCustomizationName().equals(nullString) ? null : names.getModelCustomizationName()); - newNode.setKeyInModel(names.getModelKey().equals(nullString) ? null : names.getModelKey()); - return newNode; - } - @Test - public void whenBuildTreeForOneResource_resultAsExpected() throws IOException { + public void whenBuildTreeForOneResource_resultAsExpected() { AaiClient aaiClientMock = mock(AaiClient.class); ExecutorService executorService = MoreExecutors.newDirectExecutorService(); AAIServiceTree aaiServiceTree = new AAIServiceTree( - aaiClientMock, - new AAITreeNodeBuilder(aaiClientMock, new Logging()), - new AAITreeConverter(new ModelUtil()), - null, - null, - executorService + new AAITreeNodeBuilder(aaiClientMock, new Logging()), + null, + new AAITreeConverter(new ModelUtil()), null, + executorService ); String url = "anyUrl/vnf"; diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AAITreeNodesEnricherTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AAITreeNodesEnricherTest.java new file mode 100644 index 000000000..8aba27932 --- /dev/null +++ b/vid-app-common/src/test/java/org/onap/vid/services/AAITreeNodesEnricherTest.java @@ -0,0 +1,183 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 - 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.onap.vid.services; + +import static java.util.Collections.emptyList; +import static java.util.Collections.emptyMap; +import static java.util.stream.Collectors.toList; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Streams; +import java.util.List; +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.jetbrains.annotations.NotNull; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.vid.aai.AaiClientInterface; +import org.onap.vid.asdc.parser.ServiceModelInflator; +import org.onap.vid.asdc.parser.ServiceModelInflator.Names; +import org.onap.vid.model.aaiTree.AAITreeNode; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; +import org.togglz.core.manager.FeatureManager; + +public class AAITreeNodesEnricherTest { + + @Mock + private AaiClientInterface aaiClient; + @Mock + private VidService sdcService; + @Mock + private ServiceModelInflator serviceModelInflator; + @Mock + private FeatureManager featureManager; + @InjectMocks + private AAITreeNodesEnricher aaiTreeNodesEnricher; + + @BeforeTest + public void initMocks() { + MockitoAnnotations.initMocks(this); + } + + private final static String nullString = "null placeholder"; + + @Test + public void enrichNodesWithModelCustomizationName_simple3NodesCase_nodesEnriched() { + + when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of( + "version id a", new Names("name a", "key a"), + "version id b", new Names("name b", "key b"), + "version id c", new Names("name c", "key c") + )); + + final ImmutableList versionIds = ImmutableList.of("version id a", "version id b", "version id c"); + final ImmutableList expectedNames = ImmutableList.of( + new Names("name a", "key a"), + new Names("name b", "key b"), + new Names("name c", "key c")); + + + final List nodesUnderTest = nodesWithVersionIds(versionIds); + aaiTreeNodesEnricher.enrichNodesWithModelCustomizationName(nodesUnderTest, null); + + assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames)))); + } + + @Test + public void enrichNodesWithModelCustomizationName_noNodes_noError() { + + when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of( + "11c6dc3e-cd6a-41b3-a50e-b5a10f7157d0", new Names("my model cust name", "my key") + )); + + aaiTreeNodesEnricher.enrichNodesWithModelCustomizationName(emptyList(), null); + } + + @Test + public void enrichNodesWithModelCustomizationName_nothingInModel_nodesUnchanged() { + + when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(emptyMap()); + + final ImmutableList versionIds = ImmutableList.of("version id a", "version id b", "version id c"); + final Names nullNames = new Names(nullString, nullString); + final ImmutableList expectedNames = ImmutableList.of(nullNames, nullNames, nullNames); + + + final List nodesUnderTest = nodesWithVersionIds(versionIds); + + aaiTreeNodesEnricher.enrichNodesWithModelCustomizationName(nodesUnderTest, null); + + assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames)))); + } + + @Test + public void enrichNodesWithModelCustomizationName_staggered4NodesAndNull_3nodesEnriched2isNull() { + + when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of( + "version id Z", new Names("name Z", "key Z"), + "version id d", new Names(null, "key d"), + "version id c", new Names("name c", null), + "version id a", new Names("name a", "key a") + )); + + final ImmutableList versionIds = ImmutableList.of("version id a", "version id b", "version id c", "version id d", nullString); + final ImmutableList expectedNames = ImmutableList.of( + new Names("name a", "key a"), + new Names(nullString, nullString), + new Names("name c", nullString), + new Names(nullString, "key d"), + new Names(nullString, nullString) + ); + + + final List nodesUnderTest = nodesWithVersionIds(versionIds); + + aaiTreeNodesEnricher.enrichNodesWithModelCustomizationName(nodesUnderTest, null); + + assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames)))); + } + + + + @NotNull + private String[] toStringsArray(List nodes) { + return toStrings(nodes).toArray(new String[] {}); + } + + @NotNull + private List toStrings(List nodes) { + return nodes.stream().map(n -> { + final ReflectionToStringBuilder reflectionToStringBuilder = new ReflectionToStringBuilder(n, ToStringStyle.SHORT_PREFIX_STYLE); + reflectionToStringBuilder.setExcludeNullValues(true); + return reflectionToStringBuilder.toString(); + }).collect(toList()); + } + + @NotNull + private List nodesWithVersionIdsAndCustomizationNames(List versionIds, List customizationNames) { + return Streams + .zip(versionIds.stream(), customizationNames.stream(), this::nodeWithVersionIdAndCustomizationName) + .collect(toList()); + } + + @NotNull + private List nodesWithVersionIds(List versionIds) { + return versionIds.stream() + .map(versionId -> nodeWithVersionIdAndCustomizationName(versionId, new Names(nullString, nullString))) + .collect(toList()); + } + + private AAITreeNode nodeWithVersionIdAndCustomizationName(String versionId, Names names) { + AAITreeNode newNode = new AAITreeNode(); + newNode.setModelVersionId(versionId.equals(nullString) ? null : versionId); + newNode.setModelCustomizationName(names.getModelCustomizationName().equals(nullString) ? null : names.getModelCustomizationName()); + newNode.setKeyInModel(names.getModelKey().equals(nullString) ? null : names.getModelKey()); + return newNode; + } + +} \ No newline at end of file -- cgit 1.2.3-korg