2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 2019 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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.vid.services;
23 import static java.util.Collections.emptyList;
24 import static java.util.Collections.emptyMap;
25 import static java.util.stream.Collectors.toList;
26 import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
27 import static org.hamcrest.MatcherAssert.assertThat;
28 import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
29 import static org.junit.Assert.assertEquals;
30 import static org.mockito.Matchers.any;
31 import static org.mockito.Mockito.mock;
32 import static org.mockito.Mockito.when;
33 import static org.onap.vid.services.AAITreeNodeBuilderTest.createExpectedVnfTreeNode;
35 import com.fasterxml.jackson.databind.JsonNode;
36 import com.google.common.collect.ImmutableList;
37 import com.google.common.collect.ImmutableMap;
38 import com.google.common.collect.Streams;
39 import com.google.common.util.concurrent.MoreExecutors;
40 import java.io.IOException;
41 import java.util.List;
42 import java.util.concurrent.ExecutorService;
43 import net.javacrumbs.jsonunit.core.Option;
44 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
45 import org.apache.commons.lang3.builder.ToStringStyle;
46 import org.jetbrains.annotations.NotNull;
47 import org.mockito.InjectMocks;
48 import org.mockito.Mock;
49 import org.mockito.MockitoAnnotations;
50 import org.onap.vid.aai.AaiClient;
51 import org.onap.vid.aai.util.AAITreeConverter;
52 import org.onap.vid.asdc.parser.ServiceModelInflator;
53 import org.onap.vid.asdc.parser.ServiceModelInflator.Names;
54 import org.onap.vid.model.aaiTree.AAITreeNode;
55 import org.onap.vid.model.aaiTree.NodeType;
56 import org.onap.vid.mso.model.CloudConfiguration;
57 import org.onap.vid.testUtils.TestUtils;
58 import org.onap.vid.utils.Logging;
59 import org.onap.vid.utils.Unchecked;
60 import org.springframework.http.HttpMethod;
61 import org.testng.annotations.BeforeTest;
62 import org.testng.annotations.Test;
64 public class AAIServiceTreeTest {
67 private VidService sdcService;
69 private ServiceModelInflator serviceModelInflator;
71 private AAIServiceTree aaiServiceTree;
74 public void initMocks() {
75 MockitoAnnotations.initMocks(this);
78 private final static String nullString = "null placeholder";
83 public void enrichNodesWithModelCustomizationName_simple3NodesCase_nodesEnriched() {
85 when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of(
86 "version id a", new Names("name a", "key a"),
87 "version id b", new Names("name b", "key b"),
88 "version id c", new Names("name c", "key c")
91 final ImmutableList<String> versionIds = ImmutableList.of("version id a", "version id b", "version id c");
92 final ImmutableList<Names> expectedNames = ImmutableList.of(
93 new Names("name a", "key a"),
94 new Names("name b", "key b"),
95 new Names("name c", "key c"));
98 final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
99 aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
101 assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
105 public void enrichNodesWithModelCustomizationName_noNodes_noError() {
107 when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of(
108 "11c6dc3e-cd6a-41b3-a50e-b5a10f7157d0", new Names("my model cust name", "my key")
111 aaiServiceTree.enrichNodesWithModelCustomizationName(emptyList(), null);
115 public void enrichNodesWithModelCustomizationName_nothingInModel_nodesUnchanged() {
117 when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(emptyMap());
119 final ImmutableList<String> versionIds = ImmutableList.of("version id a", "version id b", "version id c");
120 final Names nullNames = new Names(nullString, nullString);
121 final ImmutableList<Names> expectedNames = ImmutableList.of(nullNames, nullNames, nullNames);
124 final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
126 aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
128 assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
132 public void enrichNodesWithModelCustomizationName_staggered4NodesAndNull_3nodesEnriched2isNull() {
134 when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of(
135 "version id Z", new Names("name Z", "key Z"),
136 "version id d", new Names(null, "key d"),
137 "version id c", new Names("name c", null),
138 "version id a", new Names("name a", "key a")
141 final ImmutableList<String> versionIds = ImmutableList.of("version id a", "version id b", "version id c", "version id d", nullString);
142 final ImmutableList<Names> expectedNames = ImmutableList.of(
143 new Names("name a", "key a"),
144 new Names(nullString, nullString),
145 new Names("name c", nullString),
146 new Names(nullString, "key d"),
147 new Names(nullString, nullString)
151 final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
153 aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
155 assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
161 private String[] toStringsArray(List<AAITreeNode> nodes) {
162 return toStrings(nodes).toArray(new String[] {});
166 private List<String> toStrings(List<AAITreeNode> nodes) {
167 return nodes.stream().map(n -> {
168 final ReflectionToStringBuilder reflectionToStringBuilder = new ReflectionToStringBuilder(n, ToStringStyle.SHORT_PREFIX_STYLE);
169 reflectionToStringBuilder.setExcludeNullValues(true);
170 return reflectionToStringBuilder.toString();
171 }).collect(toList());
175 private List<AAITreeNode> nodesWithVersionIdsAndCustomizationNames(List<String> versionIds, List<Names> customizationNames) {
177 .zip(versionIds.stream(), customizationNames.stream(), this::nodeWithVersionIdAndCustomizationName)
182 private List<AAITreeNode> nodesWithVersionIds(List<String> versionIds) {
183 return versionIds.stream()
184 .map(versionId -> nodeWithVersionIdAndCustomizationName(versionId, new Names(nullString, nullString)))
188 private AAITreeNode nodeWithVersionIdAndCustomizationName(String versionId, Names names) {
189 AAITreeNode newNode = new AAITreeNode();
190 newNode.setModelVersionId(versionId.equals(nullString) ? null : versionId);
191 newNode.setModelCustomizationName(names.getModelCustomizationName().equals(nullString) ? null : names.getModelCustomizationName());
192 newNode.setKeyInModel(names.getModelKey().equals(nullString) ? null : names.getModelKey());
197 public void whenBuildTreeForOneResource_resultAsExpected() throws IOException {
199 AaiClient aaiClientMock = mock(AaiClient.class);
200 ExecutorService executorService = MoreExecutors.newDirectExecutorService();
201 AAIServiceTree aaiServiceTree = new AAIServiceTree(
203 new AAITreeNodeBuilder(aaiClientMock, new Logging()),
204 new AAITreeConverter(),
210 String url = "anyUrl/vnf";
212 JsonNode mockedAaiGetVnfResponse = TestUtils.readJsonResourceFileAsObject("/getTopology/vnf.json", JsonNode.class);
213 when(aaiClientMock.typedAaiRest(Unchecked.toURI(url), JsonNode.class, null, HttpMethod.GET, false)).thenReturn(mockedAaiGetVnfResponse);
215 CloudConfiguration expectedCloudConfiguration = new CloudConfiguration("dyh3b", "c8035f5ee95d4c62bbc8074c044122b9", "irma-aic");
216 AAITreeNode expectedVnfNode = createExpectedVnfTreeNode(expectedCloudConfiguration);
218 List<AAITreeNode> aaiTreeNodes = aaiServiceTree.buildAAITreeForUniqueResource(url, NodeType.GENERIC_VNF);
219 assertEquals(1, aaiTreeNodes.size());
220 assertThat(aaiTreeNodes.get(0), jsonEquals(expectedVnfNode).when(Option.IGNORING_EXTRA_FIELDS).whenIgnoringPaths("relationshipList", "children[0].relationshipList"));