2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
20 package org.onap.aai.dbgraphmap;
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;
48 import javax.servlet.http.HttpServletRequest;
49 import javax.ws.rs.core.*;
51 import java.sql.ResultSet;
53 import java.util.stream.Stream;
55 import static org.mockito.Matchers.anyObject;
56 import static org.mockito.Mockito.*;
58 public class SearchGraphTest {
60 private SearchGraph searchGraph;
62 protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json");
64 private static final Set<Integer> VALID_HTTP_STATUS_CODES = new HashSet<>();
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;
72 VALID_HTTP_STATUS_CODES.add(200);
73 VALID_HTTP_STATUS_CODES.add(201);
74 VALID_HTTP_STATUS_CODES.add(204);
77 private HttpHeaders httpHeaders;
79 private UriInfo uriInfo;
81 private MultivaluedMap<String, String> headersMultiMap;
82 private MultivaluedMap<String, String> queryParameters;
84 private List<String> aaiRequestContextList;
86 private List<MediaType> outputMediaTypes;
88 private Loader loader;
89 private TitanGraph graph;
93 private GraphTraversalSource g;
94 private TransactionalGraphEngine dbEngine;
99 System.setProperty("AJSC_HOME", ".");
100 System.setProperty("BUNDLECONFIG_DIR", "src/main/resources");
102 searchGraph = new SearchGraph();
104 httpHeaders = mock(HttpHeaders.class);
105 uriInfo = mock(UriInfo.class);
107 headersMultiMap = new MultivaluedHashMap<>();
108 queryParameters = Mockito.spy(new MultivaluedHashMap<>());
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", "");
116 outputMediaTypes = new ArrayList<>();
117 outputMediaTypes.add(APPLICATION_JSON);
119 aaiRequestContextList = new ArrayList<>();
120 aaiRequestContextList.add("");
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"));
127 when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList);
130 when(uriInfo.getQueryParameters()).thenReturn(queryParameters);
131 when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters);
133 // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable
134 Mockito.doReturn(null).when(queryParameters).remove(anyObject());
136 when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON);
137 loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
138 dbEngine = new TitanDBEngine(
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);
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);
158 @Test(expected = AAIException.class)
159 public void testRunGenericQueryFailWhenInvalidRelationshipList() throws AAIException {
161 List<String> keys = new ArrayList<>();
162 keys.add("cloud-region.cloud-owner:test-aic");
164 List<String> includeStrings = new ArrayList<>();
165 includeStrings.add("cloud-region");
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);
174 @Test(expected = AAIException.class)
175 public void testRunGenericQueryFailWhenInvalidRelationshipList1() throws AAIException {
177 List<String> keys = new ArrayList<>();
178 keys.add("cloud-region.cloud-owner:test-aic");
180 List<String> includeStrings = new ArrayList<>();
181 includeStrings.add("cloud-region");
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);
189 @Test(expected = AAIException.class)
190 public void testRunGenericQueryFailWhenInvalidRelationshipList2() throws AAIException {
192 List<String> keys = new ArrayList<>();
193 keys.add("cloud-region.cloud-owner:test-aic");
195 List<String> includeStrings = new ArrayList<>();
196 includeStrings.add("cloud-region");
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);
204 @Test(expected = AAIException.class)
205 public void testRunGenericQueryFailWhenInvalidRelationshipList3() throws AAIException {
207 List<String> keys = new ArrayList<>();
208 keys.add("cloud-region.cloud-owner:test-aic");
210 List<String> includeStrings = new ArrayList<>();
211 includeStrings.add("cloud-region");
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);
220 /*@Test(expected = NullPointerException.class)
221 public void createSearchResults() throws AAIException {
223 List<Vertex> keys = new ArrayList<>();
224 Vertex vertex=new EmptyVertex();
229 List<String> includeStrings = new ArrayList<>();
230 includeStrings.add("cloud-region");
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);
238 public void createSearchResults1() throws Exception {
240 List<Vertex> keys = new ArrayList<>();
241 Vertex vertex=new EmptyVertex();
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);
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);
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);
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);
279 /* when(processor.queryByModel("9999","model-ver","model-version-id",
280 "model-inv-id","modelname","aai",
281 startNodeFilterArrayOfHashes,"aai-ver")).thenReturn(resultSet);*/
283 searchGraph.executeModelOperation("","","",type,true,
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);
301 when(map.getHttpServletRequest()).thenReturn(servletRequest);
302 when(servletRequest.getContentType()).thenReturn("application/xml");
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);*/
310 searchGraph.executeModelOperation("","","",type,true,
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);
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);
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);
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);
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);
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);