Handle A&AI Service-Tree and add tests
[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.Unchecked;
59 import org.springframework.http.HttpMethod;
60 import org.testng.annotations.BeforeTest;
61 import org.testng.annotations.Test;
62
63 public class AAIServiceTreeTest {
64
65     @Mock
66     private VidService sdcService;
67     @Mock
68     private ServiceModelInflator serviceModelInflator;
69     @InjectMocks
70     private AAIServiceTree aaiServiceTree;
71
72     @BeforeTest
73     public void initMocks() {
74         MockitoAnnotations.initMocks(this);
75     }
76
77     private final static String nullString = "null placeholder";
78
79
80
81     @Test
82     public void enrichNodesWithModelCustomizationName_simple3NodesCase_nodesEnriched() {
83
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")
88         ));
89
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"));
95
96
97         final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
98         aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
99
100         assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
101     }
102
103     @Test
104     public void enrichNodesWithModelCustomizationName_noNodes_noError() {
105
106         when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(ImmutableMap.of(
107                 "11c6dc3e-cd6a-41b3-a50e-b5a10f7157d0", new Names("my model cust name", "my key")
108         ));
109
110         aaiServiceTree.enrichNodesWithModelCustomizationName(emptyList(), null);
111     }
112
113     @Test
114     public void enrichNodesWithModelCustomizationName_nothingInModel_nodesUnchanged() {
115
116         when(serviceModelInflator.toNamesByVersionId(any())).thenReturn(emptyMap());
117
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);
121
122         
123         final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
124
125         aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
126
127         assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
128     }
129
130     @Test
131     public void enrichNodesWithModelCustomizationName_staggered4NodesAndNull_3nodesEnriched2isNull() {
132
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")
138         ));
139
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)
147         );
148
149
150         final List<AAITreeNode> nodesUnderTest = nodesWithVersionIds(versionIds);
151
152         aaiServiceTree.enrichNodesWithModelCustomizationName(nodesUnderTest, null);
153
154         assertThat(toStrings(nodesUnderTest), containsInAnyOrder(toStringsArray(nodesWithVersionIdsAndCustomizationNames(versionIds, expectedNames))));
155     }
156
157
158
159     @NotNull
160     private String[] toStringsArray(List<AAITreeNode> nodes) {
161         return toStrings(nodes).toArray(new String[] {});
162     }
163
164     @NotNull
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());
171     }
172
173     @NotNull
174     private List<AAITreeNode> nodesWithVersionIdsAndCustomizationNames(List<String> versionIds, List<Names> customizationNames) {
175         return Streams
176                 .zip(versionIds.stream(), customizationNames.stream(), this::nodeWithVersionIdAndCustomizationName)
177                 .collect(toList());
178     }
179
180     @NotNull
181     private List<AAITreeNode> nodesWithVersionIds(List<String> versionIds) {
182         return versionIds.stream()
183                 .map(versionId -> nodeWithVersionIdAndCustomizationName(versionId, new Names(nullString, nullString)))
184                 .collect(toList());
185     }
186
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());
192         return newNode;
193     }
194
195     @Test
196     public void whenBuildTreeForOneResource_resultAsExpected() throws IOException {
197
198         AaiClient aaiClientMock = mock(AaiClient.class);
199         ExecutorService executorService = MoreExecutors.newDirectExecutorService();
200         AAIServiceTree aaiServiceTree = new AAIServiceTree(
201                 aaiClientMock,
202                 new AAITreeNodeBuilder(aaiClientMock),
203                 new AAITreeConverter(),
204                 null,
205                 null,
206                 executorService
207         );
208
209         String url = "anyUrl/vnf";
210
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);
213
214         CloudConfiguration expectedCloudConfiguration = new CloudConfiguration("dyh3b", "c8035f5ee95d4c62bbc8074c044122b9", "irma-aic");
215         AAITreeNode expectedVnfNode = createExpectedVnfTreeNode(expectedCloudConfiguration);
216
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"));
220     }
221 }