Update the license for 2017-2018 license
[aai/traversal.git] / aai-traversal / src / test / java / org / onap / aai / dbgraphmap / SearchGraphTest.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.dbgraphmap;
21
22 import com.thinkaurelius.titan.core.TitanGraph;
23 import com.thinkaurelius.titan.graphdb.types.system.EmptyVertex;
24 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
25 import org.apache.tinkerpop.gremlin.structure.Graph;
26 import org.apache.tinkerpop.gremlin.structure.Vertex;
27 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
28 import org.eclipse.persistence.dynamic.DynamicEntity;
29 import org.junit.Assert;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.mockito.InjectMocks;
33 import org.mockito.Mock;
34 import org.mockito.Mockito;
35 import org.onap.aai.dbgraphgen.ModelBasedProcessing;
36 import org.onap.aai.dbmap.DBConnectionType;
37 import org.onap.aai.exceptions.AAIException;
38 import org.onap.aai.extensions.AAIExtensionMap;
39 import org.onap.aai.introspection.*;
40 import org.onap.aai.parsers.relationship.RelationshipToURI;
41 import org.onap.aai.serialization.db.DBSerializer;
42 import org.onap.aai.serialization.engines.QueryStyle;
43 import org.onap.aai.serialization.engines.TitanDBEngine;
44 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
45 import org.onap.aai.serialization.queryformats.utils.UrlBuilder;
46
47
48 import javax.servlet.http.HttpServletRequest;
49 import javax.ws.rs.core.*;
50 import java.net.URI;
51 import java.sql.ResultSet;
52 import java.util.*;
53 import java.util.stream.Stream;
54
55 import static org.mockito.Matchers.anyObject;
56 import static org.mockito.Mockito.*;
57
58 public class SearchGraphTest {
59
60     private SearchGraph searchGraph;
61
62     protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json");
63
64     private static final Set<Integer> VALID_HTTP_STATUS_CODES = new HashSet<>();
65
66     private final static Version version = Version.getLatest();
67     private final static ModelType introspectorFactoryType = ModelType.MOXY;
68     private final static QueryStyle queryStyle = QueryStyle.TRAVERSAL;
69     private final static DBConnectionType type = DBConnectionType.REALTIME;
70
71     static {
72         VALID_HTTP_STATUS_CODES.add(200);
73         VALID_HTTP_STATUS_CODES.add(201);
74         VALID_HTTP_STATUS_CODES.add(204);
75     }
76
77     private HttpHeaders httpHeaders;
78
79     private UriInfo uriInfo;
80
81     private MultivaluedMap<String, String> headersMultiMap;
82     private MultivaluedMap<String, String> queryParameters;
83
84     private List<String> aaiRequestContextList;
85
86     private List<MediaType> outputMediaTypes;
87
88     private Loader loader;
89     private TitanGraph graph;
90
91     private Graph tx;
92
93     private GraphTraversalSource g;
94     private TransactionalGraphEngine dbEngine;
95
96     @Before
97     public void setup(){
98
99         System.setProperty("AJSC_HOME", ".");
100         System.setProperty("BUNDLECONFIG_DIR", "src/main/resources");
101
102         searchGraph = new SearchGraph();
103
104         httpHeaders         = mock(HttpHeaders.class);
105         uriInfo             = mock(UriInfo.class);
106
107         headersMultiMap     = new MultivaluedHashMap<>();
108         queryParameters     = Mockito.spy(new MultivaluedHashMap<>());
109
110         headersMultiMap.add("X-FromAppId", "JUNIT");
111         headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString());
112         headersMultiMap.add("Real-Time", "true");
113         headersMultiMap.add("Accept", "application/json");
114         headersMultiMap.add("aai-request-context", "");
115
116         outputMediaTypes = new ArrayList<>();
117         outputMediaTypes.add(APPLICATION_JSON);
118
119         aaiRequestContextList = new ArrayList<>();
120         aaiRequestContextList.add("");
121
122         when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
123         when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
124         when(httpHeaders.getRequestHeader("X-FromAppId")).thenReturn(Arrays.asList("JUNIT"));
125         when(httpHeaders.getRequestHeader("X-TransactionId")).thenReturn(Arrays.asList("JUNIT"));
126
127         when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList);
128
129
130         when(uriInfo.getQueryParameters()).thenReturn(queryParameters);
131         when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters);
132
133         // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable
134         Mockito.doReturn(null).when(queryParameters).remove(anyObject());
135
136         when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON);
137         loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
138         dbEngine = new TitanDBEngine(
139                 queryStyle,
140                 type,
141                 loader);
142     }
143
144 @Test(expected = AAIException.class)
145     public void runNodesQuery() throws  AAIException{
146         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
147         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
148         searchGraph.runNodesQuery(httpHeaders,"",null,
149                 null,dbEngine,loader,urlBuilder);
150     }
151     @Test(expected = AAIException.class)
152     public void runNodesQueryNull() throws  AAIException{
153         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
154         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
155         searchGraph.runNodesQuery(httpHeaders,"nnn",null,
156                 null,dbEngine,loader,urlBuilder);
157     }
158     @Test(expected = AAIException.class)
159     public void testRunGenericQueryFailWhenInvalidRelationshipList() throws AAIException {
160
161         List<String> keys = new ArrayList<>();
162         keys.add("cloud-region.cloud-owner:test-aic");
163
164         List<String> includeStrings = new ArrayList<>();
165         includeStrings.add("cloud-region");
166
167         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
168         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
169         Response response = searchGraph.runGenericQuery(httpHeaders, "service-instance", keys, includeStrings, 1, dbEngine, loader, urlBuilder);
170         System.out.println(response);
171     }
172
173
174     @Test(expected = AAIException.class)
175     public void testRunGenericQueryFailWhenInvalidRelationshipList1() throws AAIException {
176
177         List<String> keys = new ArrayList<>();
178         keys.add("cloud-region.cloud-owner:test-aic");
179
180         List<String> includeStrings = new ArrayList<>();
181         includeStrings.add("cloud-region");
182
183         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
184         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
185         Response response = searchGraph.runGenericQuery(httpHeaders, null, keys, includeStrings, 1, dbEngine, loader, urlBuilder);
186         System.out.println(response);
187     }
188
189     @Test(expected = AAIException.class)
190     public void testRunGenericQueryFailWhenInvalidRelationshipList2() throws AAIException {
191
192         List<String> keys = new ArrayList<>();
193         keys.add("cloud-region.cloud-owner:test-aic");
194
195         List<String> includeStrings = new ArrayList<>();
196         includeStrings.add("cloud-region");
197
198         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
199         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
200         Response response = searchGraph.runGenericQuery(httpHeaders, "", null, includeStrings, 1, dbEngine, loader, urlBuilder);
201         System.out.println(response);
202     }
203
204     @Test(expected = AAIException.class)
205     public void testRunGenericQueryFailWhenInvalidRelationshipList3() throws AAIException {
206
207         List<String> keys = new ArrayList<>();
208         keys.add("cloud-region.cloud-owner:test-aic");
209
210         List<String> includeStrings = new ArrayList<>();
211         includeStrings.add("cloud-region");
212
213         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
214         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
215         Response response = searchGraph.runGenericQuery(httpHeaders, "", keys, null, 1, dbEngine, loader, urlBuilder);
216         System.out.println(response);
217     }
218
219
220     /*@Test(expected = NullPointerException.class)
221     public void createSearchResults() throws AAIException {
222
223         List<Vertex> keys = new ArrayList<>();
224         Vertex vertex=new EmptyVertex();
225         keys.add(vertex);
226
227
228
229         List<String> includeStrings = new ArrayList<>();
230         includeStrings.add("cloud-region");
231
232         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
233         UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
234         Introspector response = searchGraph.createSearchResults(loader, urlBuilder, keys);
235         System.out.println(response);
236     }*/
237     @Test
238     public void createSearchResults1() throws Exception {
239
240         List<Vertex> keys = new ArrayList<>();
241         Vertex vertex=new EmptyVertex();
242         keys.add(vertex);
243          DBSerializer ds=mock(DBSerializer.class);
244           UrlBuilder urlBuilder=mock(UrlBuilder.class);
245           when(urlBuilder.pathed(vertex)).thenReturn("cloud-region");
246         Stream<Vertex> stream=mock(Stream.class);
247         when(stream.isParallel()).thenReturn(true);
248         List<String> includeStrings = new ArrayList<>();
249         includeStrings.add("cloud-region");
250         RelationshipToURI relationshipToURI=mock(RelationshipToURI.class);
251         URI uri =new URI("");
252         when(relationshipToURI.getUri()).thenReturn(uri);
253
254         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
255      //   UrlBuilder urlBuilder = new UrlBuilder(version, serializer);
256         Introspector response = searchGraph.createSearchResults(loader, urlBuilder, keys);
257         System.out.println(response);
258     }
259     @Test(expected = AAIException.class)
260     public void executeModelOperationTest() throws  Exception{
261         Vertex vertex=new EmptyVertex();
262         vertex.property("model-name");
263         Map<String,Object> mapObj=new HashMap<String,Object>();
264         mapObj.put("modle-version",vertex);
265         List<Map<String,Object>> startNodeFilterArrayOfHashes=new ArrayList<>();
266         startNodeFilterArrayOfHashes.add(mapObj);
267         List<org.onap.aai.dbgraphgen.ResultSet> resultSet=new ArrayList<org.onap.aai.dbgraphgen.ResultSet>();
268         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
269       //  ModelBasedProcessing processor = new ModelBasedProcessing(loader, dbEngine, serializer);
270         AAIExtensionMap map=mock(AAIExtensionMap.class);
271         HttpServletRequest servletRequest=mock(HttpServletRequest.class);
272
273         when(map.getHttpServletRequest()).thenReturn(servletRequest);
274         when(servletRequest.getContentType()).thenReturn("application/json");
275         DynamicEntity modelAndNamedQuerySearch=mock(DynamicEntity.class);
276         when(modelAndNamedQuerySearch.isSet("topNodeType")).thenReturn(true);
277
278
279 /*        when(processor.queryByModel("9999","model-ver","model-version-id",
280                 "model-inv-id","modelname","aai",
281                 startNodeFilterArrayOfHashes,"aai-ver")).thenReturn(resultSet);*/
282
283         searchGraph.executeModelOperation("","","",type,true,
284                 map);
285     }
286
287     @Test(expected = AAIException.class)
288     public void executeModelOperationXMLTest() throws  Exception{
289         Vertex vertex=new EmptyVertex();
290         vertex.property("model-name");
291         Map<String,Object> mapObj=new HashMap<String,Object>();
292         mapObj.put("modle-version",vertex);
293         List<Map<String,Object>> startNodeFilterArrayOfHashes=new ArrayList<>();
294         startNodeFilterArrayOfHashes.add(mapObj);
295         List<org.onap.aai.dbgraphgen.ResultSet> resultSet=new ArrayList<org.onap.aai.dbgraphgen.ResultSet>();
296         DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT");
297         //  ModelBasedProcessing processor = new ModelBasedProcessing(loader, dbEngine, serializer);
298         AAIExtensionMap map=mock(AAIExtensionMap.class);
299         HttpServletRequest servletRequest=mock(HttpServletRequest.class);
300
301         when(map.getHttpServletRequest()).thenReturn(servletRequest);
302         when(servletRequest.getContentType()).thenReturn("application/xml");
303
304         DynamicEntity modelAndNamedQuerySearch=mock(DynamicEntity.class);
305         when(modelAndNamedQuerySearch.isSet("queryParameters")).thenReturn(true);
306 /*        when(processor.queryByModel("9999","model-ver","model-version-id",
307                 "model-inv-id","modelname","aai",
308                 startNodeFilterArrayOfHashes,"aai-ver")).thenReturn(resultSet);*/
309
310         searchGraph.executeModelOperation("","","",type,true,
311                 map);
312     }
313     @Test
314     public void runNodesQueryTest() throws  AAIException{
315         UrlBuilder urlBuilder=mock(UrlBuilder.class);
316         List<String> filter=new ArrayList<String>();
317         filter.add("model:EQUALS:DOES-NOT-EXIST:AAI");
318         List<String> edgeFilter=new ArrayList<String>();
319         edgeFilter.add("model:DOES-NOT-EXIST:DOES-NOT-EXIST:AAI");
320       Response response=  searchGraph.runNodesQuery(httpHeaders,"model-ver",edgeFilter,
321                 filter,dbEngine,loader,urlBuilder);
322         Assert.assertNotNull(response);
323     }
324
325     @Test
326     public void runNodesQueryExistsTest() throws  AAIException{
327         UrlBuilder urlBuilder=mock(UrlBuilder.class);
328         List<String> filter=new ArrayList<String>();
329         filter.add("model:EQUALS:DOES-NOT-EXIST:AAI");
330         List<String> edgeFilter=new ArrayList<String>();
331         edgeFilter.add("model:EXISTS:DOES-NOT-EXIST:AAI");
332         Response response=  searchGraph.runNodesQuery(httpHeaders,"model-ver",edgeFilter,
333                 filter,dbEngine,loader,urlBuilder);
334         Assert.assertNotNull(response);
335     }
336
337     @Test
338     public void runNodesQueryTestDOESNOTEQUAL() throws  AAIException{
339         UrlBuilder urlBuilder=mock(UrlBuilder.class);
340         List<String> filter=new ArrayList<String>();
341         filter.add("model:DOES-NOT-EQUAL:DOES-NOT-EXIST");
342         List<String> edgeFilter=new ArrayList<String>();
343         searchGraph.runNodesQuery(httpHeaders,"model-ver",edgeFilter,
344                 filter,dbEngine,loader,urlBuilder);
345     }
346
347     @Test
348     public void runNodesQueryTestGreaterThan3() throws  AAIException{
349         UrlBuilder urlBuilder=mock(UrlBuilder.class);
350         List<String> filter=new ArrayList<String>();
351         filter.add("model:DOES-NOT-EQUAL:DOES-NOT-EXIST:AAI");
352         List<String> edgeFilter=new ArrayList<String>();
353         searchGraph.runNodesQuery(httpHeaders,"model-ver",edgeFilter,
354                 filter,dbEngine,loader,urlBuilder);
355     }
356
357     @Test
358     public void runNodesQueryTestGreaterThanExists() throws  AAIException{
359         UrlBuilder urlBuilder=mock(UrlBuilder.class);
360         List<String> filter=new ArrayList<String>();
361         filter.add("model:EXISTS:DOES-NOT-EXIST:AAI");
362         List<String> edgeFilter=new ArrayList<String>();
363         searchGraph.runNodesQuery(httpHeaders,"model-ver",edgeFilter,
364                 filter,dbEngine,loader,urlBuilder);
365     }
366
367     @Test(expected = AAIException.class)
368     public void runNodesQueryTestGreaterThanDoesNotExists() throws  AAIException{
369         UrlBuilder urlBuilder=mock(UrlBuilder.class);
370         List<String> filter=new ArrayList<String>();
371         filter.add("model:DOES_NOT_EXIST:DOES-NOT-EXIST:AAI");
372         List<String> edgeFilter=new ArrayList<String>();
373         searchGraph.runNodesQuery(httpHeaders,"model-ver",edgeFilter,
374                 filter,dbEngine,loader,urlBuilder);
375     }
376 }