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.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;
50 import javax.servlet.http.HttpServletRequest;
51 import javax.ws.rs.core.*;
53 import java.sql.ResultSet;
55 import java.util.stream.Stream;
57 import static org.mockito.Matchers.anyObject;
58 import static org.mockito.Mockito.*;
60 public class SearchGraphTest {
62 private SearchGraph searchGraph;
64 protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json");
66 private static final Set<Integer> VALID_HTTP_STATUS_CODES = new HashSet<>();
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;
74 VALID_HTTP_STATUS_CODES.add(200);
75 VALID_HTTP_STATUS_CODES.add(201);
76 VALID_HTTP_STATUS_CODES.add(204);
79 private HttpHeaders httpHeaders;
81 private UriInfo uriInfo;
83 private MultivaluedMap<String, String> headersMultiMap;
84 private MultivaluedMap<String, String> queryParameters;
86 private List<String> aaiRequestContextList;
88 private List<MediaType> outputMediaTypes;
90 private Loader loader;
91 private TitanGraph graph;
95 private GraphTraversalSource g;
96 private TransactionalGraphEngine dbEngine;
101 System.setProperty("AJSC_HOME", ".");
102 System.setProperty("BUNDLECONFIG_DIR", "src/main/resources");
104 searchGraph = new SearchGraph();
106 httpHeaders = mock(HttpHeaders.class);
107 uriInfo = mock(UriInfo.class);
109 headersMultiMap = new MultivaluedHashMap<>();
110 queryParameters = Mockito.spy(new MultivaluedHashMap<>());
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", "");
118 outputMediaTypes = new ArrayList<>();
119 outputMediaTypes.add(APPLICATION_JSON);
121 aaiRequestContextList = new ArrayList<>();
122 aaiRequestContextList.add("");
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"));
129 when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList);
132 when(uriInfo.getQueryParameters()).thenReturn(queryParameters);
133 when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters);
135 // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable
136 Mockito.doReturn(null).when(queryParameters).remove(anyObject());
138 when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON);
139 loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
140 dbEngine = new TitanDBEngine(
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);
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);
160 @Test(expected = AAIException.class)
161 public void testRunGenericQueryFailWhenInvalidRelationshipList() throws AAIException {
163 List<String> keys = new ArrayList<>();
164 keys.add("cloud-region.cloud-owner:test-aic");
166 List<String> includeStrings = new ArrayList<>();
167 includeStrings.add("cloud-region");
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);
176 @Test(expected = AAIException.class)
177 public void testRunGenericQueryFailWhenInvalidRelationshipList1() throws AAIException {
179 List<String> keys = new ArrayList<>();
180 keys.add("cloud-region.cloud-owner:test-aic");
182 List<String> includeStrings = new ArrayList<>();
183 includeStrings.add("cloud-region");
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);
191 @Test(expected = AAIException.class)
192 public void testRunGenericQueryFailWhenInvalidRelationshipList2() throws AAIException {
194 List<String> keys = new ArrayList<>();
195 keys.add("cloud-region.cloud-owner:test-aic");
197 List<String> includeStrings = new ArrayList<>();
198 includeStrings.add("cloud-region");
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);
206 @Test(expected = AAIException.class)
207 public void testRunGenericQueryFailWhenInvalidRelationshipList3() throws AAIException {
209 List<String> keys = new ArrayList<>();
210 keys.add("cloud-region.cloud-owner:test-aic");
212 List<String> includeStrings = new ArrayList<>();
213 includeStrings.add("cloud-region");
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);
222 /*@Test(expected = NullPointerException.class)
223 public void createSearchResults() throws AAIException {
225 List<Vertex> keys = new ArrayList<>();
226 Vertex vertex=new EmptyVertex();
231 List<String> includeStrings = new ArrayList<>();
232 includeStrings.add("cloud-region");
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);
240 public void createSearchResults1() throws Exception {
242 List<Vertex> keys = new ArrayList<>();
243 Vertex vertex=new EmptyVertex();
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);
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);
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);
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);
281 /* when(processor.queryByModel("9999","model-ver","model-version-id",
282 "model-inv-id","modelname","aai",
283 startNodeFilterArrayOfHashes,"aai-ver")).thenReturn(resultSet);*/
285 searchGraph.executeModelOperation("","","",type,true,
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);
303 when(map.getHttpServletRequest()).thenReturn(servletRequest);
304 when(servletRequest.getContentType()).thenReturn("application/xml");
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);*/
312 searchGraph.executeModelOperation("","","",type,true,
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);
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);
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);
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);
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);
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);