2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 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.so.client.aai;
23 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
24 import static com.github.tomakehurst.wiremock.client.WireMock.delete;
25 import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
26 import static com.github.tomakehurst.wiremock.client.WireMock.get;
27 import static com.github.tomakehurst.wiremock.client.WireMock.post;
28 import static com.github.tomakehurst.wiremock.client.WireMock.put;
29 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
30 import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
31 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
32 import static org.hamcrest.CoreMatchers.containsString;
33 import static org.junit.Assert.assertEquals;
34 import static org.junit.Assert.assertFalse;
35 import static org.junit.Assert.assertThat;
36 import static org.mockito.Mockito.doReturn;
37 import static org.mockito.Mockito.mock;
38 import static org.mockito.Mockito.when;
39 import java.util.Optional;
40 import javax.ws.rs.BadRequestException;
41 import org.junit.Before;
42 import org.junit.Rule;
43 import org.junit.Test;
44 import org.junit.rules.ExpectedException;
45 import org.junit.runner.RunWith;
46 import org.mockito.InjectMocks;
47 import org.mockito.Spy;
48 import org.mockito.junit.MockitoJUnitRunner;
49 import org.onap.aai.domain.yang.GenericVnf;
50 import org.onap.aai.domain.yang.GenericVnfs;
51 import org.onap.aai.domain.yang.Relationship;
52 import org.onap.so.client.RestClient;
53 import org.onap.so.client.aai.entities.AAIEdgeLabel;
54 import org.onap.so.client.aai.entities.AAIResultWrapper;
55 import org.onap.so.client.aai.entities.uri.AAIPluralResourceUri;
56 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
57 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
58 import org.onap.so.client.defaultproperties.DefaultAAIPropertiesImpl;
59 import org.onap.so.client.graphinventory.exceptions.GraphInventoryMultipleItemsException;
60 import com.github.tomakehurst.wiremock.admin.NotFoundException;
61 import com.github.tomakehurst.wiremock.junit.WireMockRule;
63 @RunWith(MockitoJUnitRunner.class)
64 public class AAIResourcesClientTest {
68 public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort());
71 public ExpectedException thrown = ExpectedException.none();
75 public AAIClient client;
78 public AAIResourcesClient aaiClient = new AAIResourcesClient();
80 private String AAI_JSON_FILE_LOCATION = "src/test/resources/__files/aai/query/";
83 public void beforeTest() {
84 doReturn(new DefaultAAIPropertiesImpl(wireMockRule.port())).when(client).getRestProperties();
88 public void verifyNotExists() {
89 AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test");
90 wireMockRule.stubFor(get(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build()))
91 .willReturn(aResponse().withHeader("Content-Type", "text/plain").withBody("hello").withStatus(404)));
92 AAIResourcesClient client = aaiClient;
93 boolean result = client.exists(path);
94 assertEquals("path not found", false, result);
98 public void verifyDelete() {
99 AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test2");
100 wireMockRule.stubFor(get(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build()))
101 .willReturn(aResponse().withHeader("Content-Type", "application/json")
102 .withBodyFile("aai/resources/mockObject.json").withStatus(200)));
103 wireMockRule.stubFor(delete(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build()))
104 .withQueryParam("resource-version", equalTo("1234")).willReturn(aResponse().withStatus(204)));
105 AAIResourcesClient client = aaiClient;
110 public void verifyBasicAuth() {
111 AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test3");
112 wireMockRule.stubFor(get(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build().toString()))
113 .withHeader("Authorization", equalTo("Basic dGVzdDp0ZXN0"))
114 .willReturn(aResponse().withHeader("Content-Type", "application/json")
115 .withBodyFile("aai/resources/mockObject.json").withStatus(200)));
116 AAIResourcesClient client = aaiClient;
121 public void verifyConnect() {
122 AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test2");
123 AAIResourceUri path2 = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test3");
124 wireMockRule.stubFor(
125 put(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build() + "/relationship-list/relationship"))
126 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(200)));
128 AAIResourceUri pathClone = path.clone();
129 AAIResourcesClient client = aaiClient;
130 client.connect(path, path2);
131 assertEquals("uri not modified", pathClone.build().toString(), path.build().toString());
135 public void verifyDisconnect() {
136 AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test2");
137 AAIResourceUri path2 = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test3");
139 wireMockRule.stubFor(
140 delete(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build() + "/relationship-list/relationship"))
141 .willReturn(aResponse().withStatus(204)));
143 AAIResourceUri pathClone = path.clone();
144 AAIResourcesClient client = aaiClient;
145 client.disconnect(path, path2);
146 assertEquals("uri not modified", pathClone.build().toString(), path.build().toString());
150 public void verifyPatch() {
151 AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test2");
153 wireMockRule.stubFor(post(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build()))
154 .willReturn(aResponse().withStatus(200)));
156 AAIResourcesClient client = aaiClient;
158 client.update(path, "{}");
162 public void verifyNotExistsGet() {
163 AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test");
164 wireMockRule.stubFor(get(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build()))
165 .willReturn(aResponse().withHeader("Content-Type", "text/plain").withBody("hello").withStatus(404)));
166 AAIResourcesClient client = aaiClient;
167 AAIResultWrapper result = client.get(path);
168 assertEquals("is empty", true, result.isEmpty());
172 public void verifyNotExistsGetException() {
173 AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test");
174 wireMockRule.stubFor(get(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build()))
175 .willReturn(aResponse().withHeader("Content-Type", "text/plain").withBody("hello").withStatus(404)));
176 AAIResourcesClient client = aaiClient;
177 thrown.expect(NotFoundException.class);
178 thrown.expectMessage(containsString(path.build() + " not found in A&AI"));
179 AAIResultWrapper result = client.get(path, NotFoundException.class);
183 public void verifyFailedCallException() {
184 AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test");
185 wireMockRule.stubFor(get(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build())).willReturn(aResponse()
186 .withHeader("Content-Type", "text/plain").withBodyFile("aai/error-message.json").withStatus(400)));
187 AAIResourcesClient client = aaiClient;
189 thrown.expect(BadRequestException.class);
190 thrown.expectMessage(containsString(
191 "Invalid input performing PUT on url (msg=Precondition Required:resource-version not passed for update of url"));
192 AAIResultWrapper result = client.get(path);
196 public void buildRelationshipTest() {
197 AAIResourcesClient client = aaiClient;
198 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test");
199 Relationship relationship = new Relationship();
200 relationship.setRelatedLink(uri.build().toString());
201 Relationship actual = client.buildRelationship(uri);
202 assertThat("expect equal no label", actual, sameBeanAs(relationship));
204 relationship.setRelationshipLabel(AAIEdgeLabel.USES.toString());
205 actual = client.buildRelationship(uri, AAIEdgeLabel.USES);
206 assertThat("expect equal has label", actual, sameBeanAs(relationship));
211 public void testGetOne() {
212 GenericVnf vnf = new GenericVnf();
213 vnf.setVnfId("my-vnf-id");
214 GenericVnfs vnfs = new GenericVnfs();
215 vnfs.getGenericVnf().add(vnf);
216 AAIPluralResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.GENERIC_VNF);
217 RestClient restClientMock = mock(RestClient.class);
218 doReturn(restClientMock).when(client).createClient(uri);
219 when(restClientMock.get(GenericVnfs.class)).thenReturn(Optional.of(vnfs));
221 Optional<GenericVnf> result = aaiClient.getOne(GenericVnfs.class, GenericVnf.class, uri);
223 assertEquals("my-vnf-id", result.get().getVnfId());
227 public void testGetOneMultipleResults() {
228 GenericVnf vnf = new GenericVnf();
229 vnf.setVnfId("my-vnf-id");
230 GenericVnf vnf2 = new GenericVnf();
231 vnf.setVnfId("my-vnf-id2");
232 GenericVnfs vnfs = new GenericVnfs();
233 vnfs.getGenericVnf().add(vnf);
234 vnfs.getGenericVnf().add(vnf2);
235 AAIPluralResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.GENERIC_VNF);
236 RestClient restClientMock = mock(RestClient.class);
237 doReturn(restClientMock).when(client).createClient(uri);
238 when(restClientMock.get(GenericVnfs.class)).thenReturn(Optional.of(vnfs));
240 thrown.expect(GraphInventoryMultipleItemsException.class);
241 aaiClient.getOne(GenericVnfs.class, GenericVnf.class, uri);
245 public void testGetFirstMultipleResults() {
246 GenericVnf vnf = new GenericVnf();
247 vnf.setVnfId("my-vnf-id");
248 GenericVnf vnf2 = new GenericVnf();
249 vnf2.setVnfId("my-vnf-id2");
250 GenericVnfs vnfs = new GenericVnfs();
251 vnfs.getGenericVnf().add(vnf);
252 vnfs.getGenericVnf().add(vnf2);
253 AAIPluralResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.GENERIC_VNF);
254 RestClient restClientMock = mock(RestClient.class);
255 doReturn(restClientMock).when(client).createClient(uri);
256 when(restClientMock.get(GenericVnfs.class)).thenReturn(Optional.of(vnfs));
258 Optional<GenericVnf> result = aaiClient.getFirst(GenericVnfs.class, GenericVnf.class, uri);
260 assertEquals("my-vnf-id", result.get().getVnfId());
264 public void testGetOneNoResults() {
265 GenericVnf vnf = new GenericVnf();
266 vnf.setVnfId("my-vnf-id");
267 GenericVnfs vnfs = new GenericVnfs();
268 vnfs.getGenericVnf().add(vnf);
269 AAIPluralResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.GENERIC_VNF);
270 RestClient restClientMock = mock(RestClient.class);
271 doReturn(restClientMock).when(client).createClient(uri);
272 when(restClientMock.get(GenericVnfs.class)).thenReturn(Optional.empty());
274 Optional<GenericVnf> result = aaiClient.getOne(GenericVnfs.class, GenericVnf.class, uri);
276 assertFalse(result.isPresent());
280 public void testGetFirstNoResults() {
281 GenericVnf vnf = new GenericVnf();
282 vnf.setVnfId("my-vnf-id");
283 GenericVnfs vnfs = new GenericVnfs();
284 vnfs.getGenericVnf().add(vnf);
285 AAIPluralResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.GENERIC_VNF);
286 RestClient restClientMock = mock(RestClient.class);
287 doReturn(restClientMock).when(client).createClient(uri);
288 when(restClientMock.get(GenericVnfs.class)).thenReturn(Optional.empty());
290 Optional<GenericVnf> result = aaiClient.getFirst(GenericVnfs.class, GenericVnf.class, uri);
292 assertFalse(result.isPresent());
296 public void testGetFirstWrongPluralClass() {
297 GenericVnf vnf = new GenericVnf();
298 AAIPluralResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.GENERIC_VNF);
299 RestClient restClientMock = mock(RestClient.class);
300 doReturn(restClientMock).when(client).createClient(uri);
301 when(restClientMock.get(GenericVnf.class)).thenReturn(Optional.of(vnf));
303 Optional<GenericVnf> result = aaiClient.getFirst(GenericVnf.class, GenericVnf.class, uri);
305 assertFalse(result.isPresent());