fix - when retrieve topology we are using threadPool and the MDC values are not updated
[vid.git] / vid-app-common / src / test / java / org / onap / vid / services / AAIServiceTreeTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * VID
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.onap.vid.services;
22
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;
34
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;
63
64 public class AAIServiceTreeTest {
65
66     @Mock
67     private VidService sdcService;
68     @Mock
69     private ServiceModelInflator serviceModelInflator;
70     @InjectMocks
71     private AAIServiceTree aaiServiceTree;
72
73     @BeforeTest
74     public void initMocks() {
75         MockitoAnnotations.initMocks(this);
76     }
77
78     private final static String nullString = "null placeholder";
79
80
81
82     @Test
83     public void enrichNodesWithModelCustomizationName_simple3NodesCase_nodesEnriched() {
84
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")
89         ));
90
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"));
96
97
98         final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
99         aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
100
101         assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
102     }
103
104     @Test
105     public void enrichNodesWithModelCustomizationName_noNodes_noError() {
106
107         when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of(
108                 "11c6dc3e-cd6a-41b3-a50e-b5a10f7157d0", new Names("my model cust name", "my key")
109         ));
110
111         aaiServiceTree.enrichNodesWithModelCustomizationName(emptyList(), null);
112     }
113
114     @Test
115     public void enrichNodesWithModelCustomizationName_nothingInModel_nodesUnchanged() {
116
117         when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(emptyMap());
118
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);
122
123         
124         final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
125
126         aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
127
128         assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
129     }
130
131     @Test
132     public void enrichNodesWithModelCustomizationName_staggered4NodesAndNull_3nodesEnriched2isNull() {
133
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")
139         ));
140
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)
148         );
149
150
151         final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
152
153         aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
154
155         assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
156     }
157
158
159
160     @NotNull
161     private String[] toStringsArray(List<AAITreeNode> nodes) {
162         return toStrings(nodes).toArray(new String[] {});
163     }
164
165     @NotNull
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());
172     }
173
174     @NotNull
175     private List<AAITreeNode> nodesWithVersionIdsAndCustomizationNames(List<String> versionIds, List<Names> customizationNames) {
176         return Streams
177                 .zip(versionIds.stream(), customizationNames.stream(), this::nodeWithVersionIdAndCustomizationName)
178                 .collect(toList());
179     }
180
181     @NotNull
182     private List<AAITreeNode> nodesWithVersionIds(List<String> versionIds) {
183         return versionIds.stream()
184                 .map(versionId -> nodeWithVersionIdAndCustomizationName(versionId, new Names(nullString, nullString)))
185                 .collect(toList());
186     }
187
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());
193         return newNode;
194     }
195
196     @Test
197     public void whenBuildTreeForOneResource_resultAsExpected() throws IOException {
198
199         AaiClient aaiClientMock = mock(AaiClient.class);
200         ExecutorService executorService = MoreExecutors.newDirectExecutorService();
201         AAIServiceTree aaiServiceTree = new AAIServiceTree(
202                 aaiClientMock,
203                 new AAITreeNodeBuilder(aaiClientMock, new Logging()),
204                 new AAITreeConverter(),
205                 null,
206                 null,
207                 executorService
208         );
209
210         String url = "anyUrl/vnf";
211
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);
214
215         CloudConfiguration expectedCloudConfiguration = new CloudConfiguration("dyh3b", "c8035f5ee95d4c62bbc8074c044122b9", "irma-aic");
216         AAITreeNode expectedVnfNode = createExpectedVnfTreeNode(expectedCloudConfiguration);
217
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"));
221     }
222 }