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