2 * ============LICENSE_START=======================================================
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
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 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 package org.onap.aai.dbgraphmap;
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;
51 import javax.servlet.http.HttpServletRequest;
52 import javax.ws.rs.core.*;
54 import java.sql.ResultSet;
56 import java.util.stream.Stream;
58 import static org.mockito.Matchers.anyObject;
59 import static org.mockito.Mockito.*;
61 public class SearchGraphTest {
63 private SearchGraph searchGraph;
65 protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json");
67 private static final Set<Integer> VALID_HTTP_STATUS_CODES = new HashSet<>();
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;
75 VALID_HTTP_STATUS_CODES.add(200);
76 VALID_HTTP_STATUS_CODES.add(201);
77 VALID_HTTP_STATUS_CODES.add(204);
80 private HttpHeaders httpHeaders;
82 private UriInfo uriInfo;
84 private MultivaluedMap<String, String> headersMultiMap;
85 private MultivaluedMap<String, String> queryParameters;
87 private List<String> aaiRequestContextList;
89 private List<MediaType> outputMediaTypes;
91 private Loader loader;
92 private TitanGraph graph;
96 private GraphTraversalSource g;
97 private TransactionalGraphEngine dbEngine;
102 System.setProperty("AJSC_HOME", ".");
103 System.setProperty("BUNDLECONFIG_DIR", "bundleconfig-local");
105 searchGraph = new SearchGraph();
107 httpHeaders = mock(HttpHeaders.class);
108 uriInfo = mock(UriInfo.class);
110 headersMultiMap = new MultivaluedHashMap<>();
111 queryParameters = Mockito.spy(new MultivaluedHashMap<>());
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", "");
119 outputMediaTypes = new ArrayList<>();
120 outputMediaTypes.add(APPLICATION_JSON);
122 aaiRequestContextList = new ArrayList<>();
123 aaiRequestContextList.add("");
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"));
130 when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList);
133 when(uriInfo.getQueryParameters()).thenReturn(queryParameters);
134 when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters);
136 // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable
137 Mockito.doReturn(null).when(queryParameters).remove(anyObject());
139 when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON);
140 loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
141 dbEngine = new TitanDBEngine(
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);
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);
161 @Test(expected = AAIException.class)
162 public void testRunGenericQueryFailWhenInvalidRelationshipList() throws AAIException {
164 List<String> keys = new ArrayList<>();
165 keys.add("cloud-region.cloud-owner:test-aic");
167 List<String> includeStrings = new ArrayList<>();
168 includeStrings.add("cloud-region");
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);
177 @Test(expected = AAIException.class)
178 public void testRunGenericQueryFailWhenInvalidRelationshipList1() throws AAIException {
180 List<String> keys = new ArrayList<>();
181 keys.add("cloud-region.cloud-owner:test-aic");
183 List<String> includeStrings = new ArrayList<>();
184 includeStrings.add("cloud-region");
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);
192 @Test(expected = AAIException.class)
193 public void testRunGenericQueryFailWhenInvalidRelationshipList2() throws AAIException {
195 List<String> keys = new ArrayList<>();
196 keys.add("cloud-region.cloud-owner:test-aic");
198 List<String> includeStrings = new ArrayList<>();
199 includeStrings.add("cloud-region");
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);
207 @Test(expected = AAIException.class)
208 public void testRunGenericQueryFailWhenInvalidRelationshipList3() throws AAIException {
210 List<String> keys = new ArrayList<>();
211 keys.add("cloud-region.cloud-owner:test-aic");
213 List<String> includeStrings = new ArrayList<>();
214 includeStrings.add("cloud-region");
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);
223 /*@Test(expected = NullPointerException.class)
224 public void createSearchResults() throws AAIException {
226 List<Vertex> keys = new ArrayList<>();
227 Vertex vertex=new EmptyVertex();
232 List<String> includeStrings = new ArrayList<>();
233 includeStrings.add("cloud-region");
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);
241 public void createSearchResults1() throws Exception {
243 List<Vertex> keys = new ArrayList<>();
244 Vertex vertex=new EmptyVertex();
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);
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);
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);
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);
282 /* when(processor.queryByModel("9999","model-ver","model-version-id",
283 "model-inv-id","modelname","aai",
284 startNodeFilterArrayOfHashes,"aai-ver")).thenReturn(resultSet);*/
286 searchGraph.executeModelOperation("","","",type,true,
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);
304 when(map.getHttpServletRequest()).thenReturn(servletRequest);
305 when(servletRequest.getContentType()).thenReturn("application/xml");
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);*/
313 searchGraph.executeModelOperation("","","",type,true,
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);
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);
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);
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);
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);
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);