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.query.builder.optimization;
22 import org.apache.tinkerpop.gremlin.structure.Vertex;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.onap.aai.query.builder.QueryBuilder;
26 import org.onap.aai.query.builder.TraversalQuery;
27 import org.onap.aai.query.builder.TraversalURIOptimizedQuery;
29 import javax.ws.rs.core.MultivaluedHashMap;
30 import javax.ws.rs.core.MultivaluedMap;
31 import java.lang.reflect.Method;
34 public abstract class AbstractGraphTraversalBuilderTestQueryiesToRun extends AbstractGraphTraversalBuilderOptmizationTest {
36 protected static final String CLOUD_OWNER_1 = "cloud-owner-1";
37 protected static final String CLOUD_REGION_ID_1 = "cloud-region-id-1";
38 protected String tenantId;
39 protected String vserverId;
40 protected String vserverName;
41 protected String randomFromList;
44 public void config() throws Exception {
45 int tenantNum = rand.nextInt(getTenantNum());
46 tenantId = getPrefix() + "tenant-id-" + tenantNum;
47 vserverId = getPrefix() + "vserver-id-" + tenantNum + "-" + rand.nextInt(getVserverNumPerTenant());
48 vserverName = getPrefix() + "vserver-name-" + tenantNum + "-" + rand.nextInt(getVserverNumPerTenant());
50 randomFromList = RANDOM_VALUES.get(rand.nextInt(RANDOM_VALUES.size()));
53 protected abstract String getPrefix();
56 private QueryBuilder<Vertex> getQueryBuilder(OptimizeEnum optimized) {
57 if (OptimizeEnum.URI.equals(optimized)) {
58 return new TraversalURIOptimizedQuery<>(loader, g);
60 return new TraversalQuery<>(loader, g);
64 private void callTest(String methodName, int numResultsExpected) throws Exception {
65 String queryMethodName = methodName.replace("Test", "Query");
66 Method method = AbstractGraphTraversalBuilderTestQueryiesToRun.class.getMethod(queryMethodName, OptimizeEnum.class);
67 this.execute(method, numResultsExpected);
71 public void vserverTest() throws Exception {
72 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
73 callTest(methodName, 1);
76 public QueryBuilder<Vertex> vserverQuery(OptimizeEnum optimized) throws Exception {
77 URI uri = new URI(String.format(vserverUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId, vserverId));
78 return getQueryBuilder(optimized).createQueryFromURI(uri).getQueryBuilder();
82 public void vserversUnderATenantTest() throws Exception {
83 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
84 callTest(methodName, getVserverNumPerTenant());
87 public QueryBuilder<Vertex> vserversUnderATenantQuery(OptimizeEnum optimized) throws Exception {
88 URI uri = new URI(String.format(tenantUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId) + "/vservers");
89 return getQueryBuilder(optimized).createQueryFromURI(uri).getQueryBuilder();
93 public void vserversUnderATenantWithNonIndexPropertyTest() throws Exception {
94 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
95 callTest(methodName, Integer.MIN_VALUE);
98 public QueryBuilder<Vertex> vserversUnderATenantWithNonIndexPropertyQuery(OptimizeEnum optimized) throws Exception {
99 URI uri = new URI(String.format(tenantUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId) + "/vservers");
100 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
101 map.putSingle(VSERVER_SELFLINK, randomFromList);
102 return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();
106 public void vserversUnderATenantWithIndexPropertyWhereValueIsInMultipleTest() throws Exception {
107 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
108 callTest(methodName, Integer.MIN_VALUE);
111 public QueryBuilder<Vertex> vserversUnderATenantWithIndexPropertyWhereValueIsInMultipleQuery(OptimizeEnum optimized) throws Exception {
112 URI uri = new URI(String.format(tenantUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId) + "/vservers");
113 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
114 map.putSingle(PROV_STATUS, randomFromList);
115 return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();
119 public void vserversUnderATenantWithIndexPropertyWhereValueIsSemiUniqueTest() throws Exception {
120 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
121 callTest(methodName, Integer.MIN_VALUE);
124 public QueryBuilder<Vertex> vserversUnderATenantWithIndexPropertyWhereValueIsSemiUniqueQuery(OptimizeEnum optimized) throws Exception {
125 URI uri = new URI(String.format(tenantUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId) + "/vservers");
126 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
127 map.putSingle(VSERVER_NAME, vserverName);
128 return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();
133 public void nonExistentVserverTest() throws Exception {
134 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
135 callTest(methodName, 0);
138 public QueryBuilder<Vertex> nonExistentVserverQuery(OptimizeEnum optimized) throws Exception {
139 URI uri = new URI(String.format(vserverUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId, "does-not-exist"));
140 return getQueryBuilder(optimized).createQueryFromURI(uri).getQueryBuilder();
144 public void vserverWithNonExistentTenantTest() throws Exception {
145 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
146 callTest(methodName, 0);
149 public QueryBuilder<Vertex> vserverWithNonExistentTenantQuery(OptimizeEnum optimized) throws Exception {
150 URI uri = new URI(String.format(vserverUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, "does-not-exist", vserverId));
151 return getQueryBuilder(optimized).createQueryFromURI(uri).getQueryBuilder();
155 public void vserverWithValidQueryParameterTest() throws Exception {
156 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
157 callTest(methodName, 1);
160 public QueryBuilder<Vertex> vserverWithValidQueryParameterQuery(OptimizeEnum optimized) throws Exception {
161 URI uri = new URI(String.format(vserverUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId, vserverId));
162 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
163 map.putSingle("vserver-name2", "someName");
164 return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();
168 public void cloudRegionTest() throws Exception {
169 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
170 callTest(methodName, 1);
173 public QueryBuilder<Vertex> cloudRegionQuery(OptimizeEnum optimized) throws Exception {
174 URI uri = new URI(String.format(crUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1));
175 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
176 map.putSingle("in-maint", "false");
177 return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();