bb04653ca7d02c397b311b647d801a5879b080cd
[aai/traversal.git] / aai-traversal / src / test / java / org / onap / aai / rest / search / SearchProviderTest.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 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  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
21  */
22 package org.onap.aai.rest.search;
23
24 import com.att.eelf.configuration.EELFLogger;
25 import com.att.eelf.configuration.EELFManager;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.mockito.Mockito;
29 import org.onap.aai.dbmap.DBConnectionType;
30 import org.onap.aai.introspection.Loader;
31 import org.onap.aai.introspection.LoaderFactory;
32 import org.onap.aai.introspection.ModelType;
33 import org.onap.aai.introspection.Version;
34 import org.onap.aai.serialization.db.DBSerializer;
35 import org.onap.aai.serialization.engines.QueryStyle;
36 import org.onap.aai.serialization.engines.TitanDBEngine;
37 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
38 import org.onap.aai.serialization.queryformats.utils.UrlBuilder;
39
40 import javax.ws.rs.core.*;
41 import java.util.*;
42
43 import static org.junit.Assert.assertEquals;
44 import static org.junit.Assert.assertNotNull;
45 import static org.mockito.Matchers.anyObject;
46 import static org.mockito.Mockito.mock;
47 import static org.mockito.Mockito.when;
48
49 public class SearchProviderTest {
50
51     protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json");
52
53     private static final Set<Integer> VALID_HTTP_STATUS_CODES = new HashSet<>();
54
55     private static final Version version = Version.getLatest();
56     private static final ModelType introspectorFactoryType = ModelType.MOXY;
57     private static final QueryStyle queryStyle = QueryStyle.TRAVERSAL;
58     private static final DBConnectionType type = DBConnectionType.REALTIME;
59
60     private Loader loader;
61     private TransactionalGraphEngine dbEngine;
62
63     static {
64         VALID_HTTP_STATUS_CODES.add(200);
65         VALID_HTTP_STATUS_CODES.add(201);
66         VALID_HTTP_STATUS_CODES.add(204);
67     }
68
69     private SearchProvider searchProvider;
70
71     private HttpHeaders httpHeaders;
72
73     private UriInfo uriInfo;
74
75     private MultivaluedMap<String, String> headersMultiMap;
76     private MultivaluedMap<String, String> queryParameters;
77
78     private List<String> aaiRequestContextList;
79
80     private List<MediaType> outputMediaTypes;
81
82     private static final EELFLogger logger = EELFManager.getInstance().getLogger(SearchProviderTest.class.getName());
83
84     @Before
85     public void setup(){
86         logger.info("Starting the setup for the integration tests of Rest Endpoints");
87         System.setProperty("AJSC_HOME", ".");
88         System.setProperty("BUNDLECONFIG_DIR", "bundleconfig-local");
89
90         searchProvider      = new SearchProvider();
91         httpHeaders         = mock(HttpHeaders.class);
92         uriInfo             = mock(UriInfo.class);
93
94         when(uriInfo.getPath()).thenReturn("JUNITURI");
95
96         headersMultiMap     = new MultivaluedHashMap<>();
97         queryParameters     = Mockito.spy(new MultivaluedHashMap<>());
98
99         headersMultiMap.add("X-FromAppId", "JUNIT");
100         headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString());
101         headersMultiMap.add("Real-Time", "true");
102         headersMultiMap.add("Accept", "application/json");
103         headersMultiMap.add("aai-request-context", "");
104
105         outputMediaTypes = new ArrayList<>();
106         outputMediaTypes.add(APPLICATION_JSON);
107
108         aaiRequestContextList = new ArrayList<>();
109         aaiRequestContextList.add("");
110
111         when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
112         when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
113         when(httpHeaders.getRequestHeader("X-FromAppId")).thenReturn(Arrays.asList("JUNIT"));
114         when(httpHeaders.getRequestHeader("X-TransactionId")).thenReturn(Arrays.asList("JUNIT"));
115
116         when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList);
117
118
119         when(uriInfo.getQueryParameters()).thenReturn(queryParameters);
120         when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters);
121
122         // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable
123         Mockito.doReturn(null).when(queryParameters).remove(anyObject());
124
125         when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON);
126         loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
127         dbEngine = new TitanDBEngine(
128                 queryStyle,
129                 type,
130                 loader);
131     }
132
133     @Test
134     public void testNodesQueryInvalidData() throws Exception {
135
136         List<String> keys = new ArrayList<>();
137         keys.add("cloud-region.cloud-owner:test-aic");
138
139         List<String> includeStrings = new ArrayList<>();
140         includeStrings.add("cloud-region");
141
142         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
143         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
144
145         Response response = searchProvider.getNodesQueryResponse(
146                 httpHeaders,
147                 null,
148                 "cloud-region",
149                 keys,
150                 includeStrings,
151                 version.toString(),
152                 uriInfo
153         );
154
155         assertNotNull(response);
156         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
157
158         response = searchProvider.getNodesQueryResponse(
159                 httpHeaders,
160                 null,
161                 "cloud-region",
162                 keys,
163                 includeStrings,
164                 "latest",
165                 uriInfo
166         );
167
168         assertNotNull(response);
169         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
170     }
171
172     @Test
173     public void testNodesQueryInvalidHeaders() throws Exception {
174
175         List<String> keys = new ArrayList<>();
176         keys.add("cloud-region.cloud-owner:test-aic");
177
178         List<String> includeStrings = new ArrayList<>();
179         includeStrings.add("cloud-region");
180
181         httpHeaders = mock(HttpHeaders.class);
182
183         when(httpHeaders.getRequestHeader("X-FromAppId")).thenThrow(IllegalArgumentException.class);
184         when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
185
186         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
187         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
188
189         Response response = searchProvider.getNodesQueryResponse(
190                 httpHeaders,
191                 null,
192                 "cloud-region",
193                 keys,
194                 includeStrings,
195                 version.toString(),
196                 uriInfo
197         );
198
199         assertNotNull(response);
200         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus());
201     }
202
203     @Test
204     public void testNodesQueryTimeoutThrown() throws Exception {
205
206         List<String> keys = new ArrayList<>();
207         keys.add("cloud-region.cloud-owner:test-aic");
208
209         List<String> includeStrings = new ArrayList<>();
210         includeStrings.add("cloud-region");
211
212         httpHeaders = mock(HttpHeaders.class);
213
214         headersMultiMap.putSingle("X-FromAppId", "JUNITTESTAPP1");
215         when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
216         when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
217
218         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
219         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
220
221         Response response = searchProvider.getNodesQueryResponse(
222                 httpHeaders,
223                 null,
224                 "cloud-region",
225                 keys,
226                 includeStrings,
227                 version.toString(),
228                 uriInfo
229         );
230
231         assertNotNull(response);
232         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
233         assertEquals(true, response.getEntity().toString().contains("7406"));
234     }
235
236     @Test
237     public void testNodesQueryTimeoutBypassed() throws Exception {
238
239         List<String> keys = new ArrayList<>();
240         keys.add("cloud-region.cloud-owner:test-aic");
241
242         List<String> includeStrings = new ArrayList<>();
243         includeStrings.add("cloud-region");
244
245         httpHeaders = mock(HttpHeaders.class);
246
247         headersMultiMap.putSingle("X-FromAppId", "JUNITTESTAPP2");
248         when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
249         when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
250
251         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
252         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
253
254         Response response = searchProvider.getNodesQueryResponse(
255                 httpHeaders,
256                 null,
257                 "cloud-region",
258                 keys,
259                 includeStrings,
260                 version.toString(),
261                 uriInfo
262         );
263
264         assertNotNull(response);
265         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
266         assertEquals(true, response.getEntity().toString().contains("4009"));
267     }
268
269
270     @Test
271     public void testGenericQueryInvalidData() throws Exception {
272
273         List<String> keys = new ArrayList<>();
274         keys.add("cloud-region.cloud-owner:test-aic");
275
276         List<String> includeStrings = new ArrayList<>();
277         includeStrings.add("cloud-region");
278
279         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
280         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
281
282         Response response = searchProvider.getGenericQueryResponse(
283                 httpHeaders,
284                 null,
285                 "cloud-region",
286                 keys,
287                 includeStrings,
288                 0,
289                 version.toString(),
290                 uriInfo
291         );
292
293         assertNotNull(response);
294         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
295
296         response = searchProvider.getNodesQueryResponse(
297                 httpHeaders,
298                 null,
299                 "cloud-region",
300                 keys,
301                 includeStrings,
302                 "latest",
303                 uriInfo
304         );
305
306         assertNotNull(response);
307         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
308     }
309
310     @Test
311     public void testGenericQueryInvalidHeaders() throws Exception {
312
313         List<String> keys = new ArrayList<>();
314         keys.add("cloud-region.cloud-owner:test-aic");
315
316         List<String> includeStrings = new ArrayList<>();
317         includeStrings.add("cloud-region");
318
319         httpHeaders = mock(HttpHeaders.class);
320
321         when(httpHeaders.getRequestHeader("X-FromAppId")).thenThrow(IllegalArgumentException.class);
322         when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
323
324         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
325         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
326
327         Response response = searchProvider.getGenericQueryResponse(
328                 httpHeaders,
329                 null,
330                 "cloud-region",
331                 keys,
332                 includeStrings,
333                 0,
334                 version.toString(),
335                 uriInfo
336         );
337
338         assertNotNull(response);
339         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus());
340     }
341
342     @Test
343     public void testGenericQueryTimeoutThrown() throws Exception {
344
345         List<String> keys = new ArrayList<>();
346         keys.add("cloud-region.cloud-owner:test-aic");
347
348         List<String> includeStrings = new ArrayList<>();
349         includeStrings.add("cloud-region");
350
351         httpHeaders = mock(HttpHeaders.class);
352
353         headersMultiMap.putSingle("X-FromAppId", "JUNITTESTAPP1");
354         when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
355
356         when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
357
358         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
359         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
360
361         Response response = searchProvider.getGenericQueryResponse(
362                 httpHeaders,
363                 null,
364                 "cloud-region",
365                 keys,
366                 includeStrings,
367                 0,
368                 version.toString(),
369                 uriInfo
370         );
371
372         assertNotNull(response);
373         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
374         assertEquals(true, response.getEntity().toString().contains("7406"));
375     }
376
377     @Test
378     public void testGenericQueryBypassTimeout() throws Exception {
379
380         List<String> keys = new ArrayList<>();
381         keys.add("cloud-region.cloud-owner:test-aic");
382
383         List<String> includeStrings = new ArrayList<>();
384         includeStrings.add("cloud-region");
385
386         httpHeaders = mock(HttpHeaders.class);
387
388         headersMultiMap.putSingle("X-FromAppId", "JUNITTESTAPP2");
389         when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
390
391         when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
392
393         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
394         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
395
396         Response response = searchProvider.getGenericQueryResponse(
397                 httpHeaders,
398                 null,
399                 "cloud-region",
400                 keys,
401                 includeStrings,
402                 0,
403                 version.toString(),
404                 uriInfo
405         );
406
407         assertNotNull(response);
408         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
409         assertEquals(true, response.getEntity().toString().contains("4009"));
410     }
411 }