8038d15fd15a277887bccc958d4c0c42b895753a
[aai/aai-common.git] / aai-core / src / test / java / org / onap / aai / query / builder / optimization / AbstractGraphTraversalBuilderTestQueryiesToRun.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
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 package org.onap.aai.query.builder.optimization;
21
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;
28
29 import javax.ws.rs.core.MultivaluedHashMap;
30 import javax.ws.rs.core.MultivaluedMap;
31 import java.lang.reflect.Method;
32 import java.net.URI;
33
34 public abstract class AbstractGraphTraversalBuilderTestQueryiesToRun extends AbstractGraphTraversalBuilderOptmizationTest {
35
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;
42
43         @Before
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());
49
50                 randomFromList = RANDOM_VALUES.get(rand.nextInt(RANDOM_VALUES.size()));
51         }
52
53         protected abstract String getPrefix();
54
55
56         private QueryBuilder<Vertex> getQueryBuilder(OptimizeEnum optimized) {
57                 if (OptimizeEnum.URI.equals(optimized)) {
58                         return new TraversalURIOptimizedQuery<>(loader, g);
59                 } else {
60                         return new TraversalQuery<>(loader, g);
61                 }
62         }
63
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);
68         }
69
70         @Test
71         public void vserverTest() throws Exception {
72                 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
73                 callTest(methodName, 1);
74         }
75
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();
79         }
80
81         @Test
82         public void vserversUnderATenantTest() throws Exception {
83                 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
84                 callTest(methodName, getVserverNumPerTenant());
85         }
86
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();
90         }
91
92         @Test
93         public void vserversUnderATenantWithNonIndexPropertyTest() throws Exception {
94                 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
95                 callTest(methodName, Integer.MIN_VALUE);
96         }
97
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();
103         }
104
105         @Test
106         public void vserversUnderATenantWithIndexPropertyWhereValueIsInMultipleTest() throws Exception {
107                 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
108                 callTest(methodName, Integer.MIN_VALUE);
109         }
110
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();
116         }
117
118         @Test
119         public void vserversUnderATenantWithIndexPropertyWhereValueIsSemiUniqueTest() throws Exception {
120                 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
121                 callTest(methodName, Integer.MIN_VALUE);
122         }
123
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();
129
130         }
131
132         @Test
133         public void nonExistentVserverTest() throws Exception {
134                 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
135                 callTest(methodName, 0);
136         }
137
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();
141         }
142
143         @Test
144         public void vserverWithNonExistentTenantTest() throws Exception {
145                 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
146                 callTest(methodName, 0);
147         }
148
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();
152         }
153
154         @Test
155         public void vserverWithValidQueryParameterTest() throws Exception {
156                 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
157                 callTest(methodName, 1);
158         }
159
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();
165         }
166
167         @Test
168         public void cloudRegionTest() throws Exception {
169                 String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
170                 callTest(methodName, 1);
171         }
172
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();
178         }
179
180
181 }