Merge "move aai-client into its own project"
[so.git] / graph-inventory / aai-client / src / test / java / org / onap / so / client / aai / AAIResourcesClientTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
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.so.client.aai;
22
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;
62
63 @RunWith(MockitoJUnitRunner.class)
64 public class AAIResourcesClientTest {
65
66
67     @Rule
68     public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort());
69
70     @Rule
71     public ExpectedException thrown = ExpectedException.none();
72
73
74     @Spy
75     public AAIClient client;
76
77     @InjectMocks
78     public AAIResourcesClient aaiClient = new AAIResourcesClient();
79
80     private String AAI_JSON_FILE_LOCATION = "src/test/resources/__files/aai/query/";
81
82     @Before
83     public void beforeTest() {
84         doReturn(new DefaultAAIPropertiesImpl(wireMockRule.port())).when(client).getRestProperties();
85     }
86
87     @Test
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);
95     }
96
97     @Test
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;
106         client.delete(path);
107     }
108
109     @Test
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;
117         client.get(path);
118     }
119
120     @Test
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)));
127
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());
132     }
133
134     @Test
135     public void verifyDisconnect() {
136         AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test2");
137         AAIResourceUri path2 = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test3");
138
139         wireMockRule.stubFor(
140                 delete(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build() + "/relationship-list/relationship"))
141                         .willReturn(aResponse().withStatus(204)));
142
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());
147     }
148
149     @Test
150     public void verifyPatch() {
151         AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test2");
152
153         wireMockRule.stubFor(post(urlPathEqualTo("/aai/" + AAIVersion.LATEST + path.build()))
154                 .willReturn(aResponse().withStatus(200)));
155
156         AAIResourcesClient client = aaiClient;
157
158         client.update(path, "{}");
159     }
160
161     @Test
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());
169     }
170
171     @Test
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);
180     }
181
182     @Test
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;
188
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);
193     }
194
195     @Test
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));
203
204         relationship.setRelationshipLabel(AAIEdgeLabel.USES.toString());
205         actual = client.buildRelationship(uri, AAIEdgeLabel.USES);
206         assertThat("expect equal has label", actual, sameBeanAs(relationship));
207
208     }
209
210     @Test
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));
220
221         Optional<GenericVnf> result = aaiClient.getOne(GenericVnfs.class, GenericVnf.class, uri);
222
223         assertEquals("my-vnf-id", result.get().getVnfId());
224     }
225
226     @Test
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));
239
240         thrown.expect(GraphInventoryMultipleItemsException.class);
241         aaiClient.getOne(GenericVnfs.class, GenericVnf.class, uri);
242     }
243
244     @Test
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));
257
258         Optional<GenericVnf> result = aaiClient.getFirst(GenericVnfs.class, GenericVnf.class, uri);
259
260         assertEquals("my-vnf-id", result.get().getVnfId());
261     }
262
263     @Test
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());
273
274         Optional<GenericVnf> result = aaiClient.getOne(GenericVnfs.class, GenericVnf.class, uri);
275
276         assertFalse(result.isPresent());
277     }
278
279     @Test
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());
289
290         Optional<GenericVnf> result = aaiClient.getFirst(GenericVnfs.class, GenericVnf.class, uri);
291
292         assertFalse(result.isPresent());
293     }
294
295     @Test
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));
302
303         Optional<GenericVnf> result = aaiClient.getFirst(GenericVnf.class, GenericVnf.class, uri);
304
305         assertFalse(result.isPresent());
306     }
307
308 }