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.Unchecked;
59 import org.springframework.http.HttpMethod;
60 import org.testng.annotations.BeforeTest;
61 import org.testng.annotations.Test;
63 public class AAIServiceTreeTest {
66 private VidService sdcService;
68 private ServiceModelInflator serviceModelInflator;
70 private AAIServiceTree aaiServiceTree;
73 public void initMocks() {
74 MockitoAnnotations.initMocks(this);
77 private final static String nullString = "null placeholder";
82 public void enrichNodesWithModelCustomizationName_simple3NodesCase_nodesEnriched() {
84 when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of(
85 "version id a", new Names("name a", "key a"),
86 "version id b", new Names("name b", "key b"),
87 "version id c", new Names("name c", "key c")
90 final ImmutableList<String> versionIds = ImmutableList.of("version id a", "version id b", "version id c");
91 final ImmutableList<Names> expectedNames = ImmutableList.of(
92 new Names("name a", "key a"),
93 new Names("name b", "key b"),
94 new Names("name c", "key c"));
97 final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
98 aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
100 assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
104 public void enrichNodesWithModelCustomizationName_noNodes_noError() {
106 when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of(
107 "11c6dc3e-cd6a-41b3-a50e-b5a10f7157d0", new Names("my model cust name", "my key")
110 aaiServiceTree.enrichNodesWithModelCustomizationName(emptyList(), null);
114 public void enrichNodesWithModelCustomizationName_nothingInModel_nodesUnchanged() {
116 when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(emptyMap());
118 final ImmutableList<String> versionIds = ImmutableList.of("version id a", "version id b", "version id c");
119 final Names nullNames = new Names(nullString, nullString);
120 final ImmutableList<Names> expectedNames = ImmutableList.of(nullNames, nullNames, nullNames);
123 final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
125 aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
127 assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
131 public void enrichNodesWithModelCustomizationName_staggered4NodesAndNull_3nodesEnriched2isNull() {
133 when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of(
134 "version id Z", new Names("name Z", "key Z"),
135 "version id d", new Names(null, "key d"),
136 "version id c", new Names("name c", null),
137 "version id a", new Names("name a", "key a")
140 final ImmutableList<String> versionIds = ImmutableList.of("version id a", "version id b", "version id c", "version id d", nullString);
141 final ImmutableList<Names> expectedNames = ImmutableList.of(
142 new Names("name a", "key a"),
143 new Names(nullString, nullString),
144 new Names("name c", nullString),
145 new Names(nullString, "key d"),
146 new Names(nullString, nullString)
150 final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
152 aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
154 assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
160 private String[] toStringsArray(List<AAITreeNode> nodes) {
161 return toStrings(nodes).toArray(new String[] {});
165 private List<String> toStrings(List<AAITreeNode> nodes) {
166 return nodes.stream().map(n -> {
167 final ReflectionToStringBuilder reflectionToStringBuilder = new ReflectionToStringBuilder(n, ToStringStyle.SHORT_PREFIX_STYLE);
168 reflectionToStringBuilder.setExcludeNullValues(true);
169 return reflectionToStringBuilder.toString();
170 }).collect(toList());
174 private List<AAITreeNode> nodesWithVersionIdsAndCustomizationNames(List<String> versionIds, List<Names> customizationNames) {
176 .zip(versionIds.stream(), customizationNames.stream(), this::nodeWithVersionIdAndCustomizationName)
181 private List<AAITreeNode> nodesWithVersionIds(List<String> versionIds) {
182 return versionIds.stream()
183 .map(versionId -> nodeWithVersionIdAndCustomizationName(versionId, new Names(nullString, nullString)))
187 private AAITreeNode nodeWithVersionIdAndCustomizationName(String versionId, Names names) {
188 AAITreeNode newNode = new AAITreeNode();
189 newNode.setModelVersionId(versionId.equals(nullString) ? null : versionId);
190 newNode.setModelCustomizationName(names.getModelCustomizationName().equals(nullString) ? null : names.getModelCustomizationName());
191 newNode.setKeyInModel(names.getModelKey().equals(nullString) ? null : names.getModelKey());
196 public void whenBuildTreeForOneResource_resultAsExpected() throws IOException {
198 AaiClient aaiClientMock = mock(AaiClient.class);
199 ExecutorService executorService = MoreExecutors.newDirectExecutorService();
200 AAIServiceTree aaiServiceTree = new AAIServiceTree(
202 new AAITreeNodeBuilder(aaiClientMock),
203 new AAITreeConverter(),
209 String url = "anyUrl/vnf";
211 JsonNode mockedAaiGetVnfResponse = TestUtils.readJsonResourceFileAsObject("/getTopology/vnf.json", JsonNode.class);
212 when(aaiClientMock.typedAaiRest(Unchecked.toURI(url), JsonNode.class, null, HttpMethod.GET, false)).thenReturn(mockedAaiGetVnfResponse);
214 CloudConfiguration expectedCloudConfiguration = new CloudConfiguration("dyh3b", "c8035f5ee95d4c62bbc8074c044122b9", "irma-aic");
215 AAITreeNode expectedVnfNode = createExpectedVnfTreeNode(expectedCloudConfiguration);
217 List<AAITreeNode> aaiTreeNodes = aaiServiceTree.buildAAITreeForUniqueResource(url, NodeType.GENERIC_VNF);
218 assertEquals(1, aaiTreeNodes.size());
219 assertThat(aaiTreeNodes.get(0), jsonEquals(expectedVnfNode).when(Option.IGNORING_EXTRA_FIELDS).whenIgnoringPaths("relationshipList", "children[0].relationshipList"));