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