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