AAI-1523 Batch reformat aai-core
[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
21 package org.onap.aai.query.builder.optimization;
22
23 import java.lang.reflect.Method;
24 import java.net.URI;
25
26 import javax.ws.rs.core.MultivaluedHashMap;
27 import javax.ws.rs.core.MultivaluedMap;
28
29 import org.apache.tinkerpop.gremlin.structure.Vertex;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.onap.aai.query.builder.QueryBuilder;
33 import org.onap.aai.query.builder.TraversalQuery;
34 import org.onap.aai.query.builder.TraversalURIOptimizedQuery;
35
36 public abstract class AbstractGraphTraversalBuilderTestQueryiesToRun
37         extends AbstractGraphTraversalBuilderOptmizationTest {
38
39     protected static final String CLOUD_OWNER_1 = "cloud-owner-1";
40     protected static final String CLOUD_REGION_ID_1 = "cloud-region-id-1";
41     protected String tenantId;
42     protected String vserverId;
43     protected String vserverName;
44     protected String randomFromList;
45
46     @Before
47     public void config() throws Exception {
48         int tenantNum = rand.nextInt(getTenantNum());
49         tenantId = getPrefix() + "tenant-id-" + tenantNum;
50         vserverId = getPrefix() + "vserver-id-" + tenantNum + "-" + rand.nextInt(getVserverNumPerTenant());
51         vserverName = getPrefix() + "vserver-name-" + tenantNum + "-" + rand.nextInt(getVserverNumPerTenant());
52
53         randomFromList = RANDOM_VALUES.get(rand.nextInt(RANDOM_VALUES.size()));
54     }
55
56     protected abstract String getPrefix();
57
58     private QueryBuilder<Vertex> getQueryBuilder(OptimizeEnum optimized) {
59         if (OptimizeEnum.URI.equals(optimized)) {
60             return new TraversalURIOptimizedQuery<>(loader, g);
61         } else {
62             return new TraversalQuery<>(loader, g);
63         }
64     }
65
66     private void callTest(String methodName, int numResultsExpected) throws Exception {
67         String queryMethodName = methodName.replace("Test", "Query");
68         Method method =
69                 AbstractGraphTraversalBuilderTestQueryiesToRun.class.getMethod(queryMethodName, OptimizeEnum.class);
70         this.execute(method, numResultsExpected);
71     }
72
73     @Test
74     public void vserverTest() throws Exception {
75         String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
76         callTest(methodName, 1);
77     }
78
79     public QueryBuilder<Vertex> vserverQuery(OptimizeEnum optimized) throws Exception {
80         URI uri = new URI(String.format(vserverUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1,
81                 tenantId, vserverId));
82         return getQueryBuilder(optimized).createQueryFromURI(uri).getQueryBuilder();
83     }
84
85     @Test
86     public void vserversUnderATenantTest() throws Exception {
87         String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
88         callTest(methodName, getVserverNumPerTenant());
89     }
90
91     public QueryBuilder<Vertex> vserversUnderATenantQuery(OptimizeEnum optimized) throws Exception {
92         URI uri = new URI(
93                 String.format(tenantUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId)
94                         + "/vservers");
95         return getQueryBuilder(optimized).createQueryFromURI(uri).getQueryBuilder();
96     }
97
98     @Test
99     public void vserversUnderATenantWithNonIndexPropertyTest() throws Exception {
100         String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
101         callTest(methodName, Integer.MIN_VALUE);
102     }
103
104     public QueryBuilder<Vertex> vserversUnderATenantWithNonIndexPropertyQuery(OptimizeEnum optimized) throws Exception {
105         URI uri = new URI(
106                 String.format(tenantUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId)
107                         + "/vservers");
108         MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
109         map.putSingle(VSERVER_SELFLINK, randomFromList);
110         return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();
111     }
112
113     @Test
114     public void vserversUnderATenantWithIndexPropertyWhereValueIsInMultipleTest() throws Exception {
115         String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
116         callTest(methodName, Integer.MIN_VALUE);
117     }
118
119     public QueryBuilder<Vertex> vserversUnderATenantWithIndexPropertyWhereValueIsInMultipleQuery(OptimizeEnum optimized)
120             throws Exception {
121         URI uri = new URI(
122                 String.format(tenantUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId)
123                         + "/vservers");
124         MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
125         map.putSingle(PROV_STATUS, randomFromList);
126         return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();
127     }
128
129     @Test
130     public void vserversUnderATenantWithIndexPropertyWhereValueIsSemiUniqueTest() throws Exception {
131         String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
132         callTest(methodName, Integer.MIN_VALUE);
133     }
134
135     public QueryBuilder<Vertex> vserversUnderATenantWithIndexPropertyWhereValueIsSemiUniqueQuery(OptimizeEnum optimized)
136             throws Exception {
137         URI uri = new URI(
138                 String.format(tenantUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1, tenantId)
139                         + "/vservers");
140         MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
141         map.putSingle(VSERVER_NAME, vserverName);
142         return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();
143
144     }
145
146     @Test
147     public void nonExistentVserverTest() throws Exception {
148         String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
149         callTest(methodName, 0);
150     }
151
152     public QueryBuilder<Vertex> nonExistentVserverQuery(OptimizeEnum optimized) throws Exception {
153         URI uri = new URI(String.format(vserverUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1,
154                 tenantId, "does-not-exist"));
155         return getQueryBuilder(optimized).createQueryFromURI(uri).getQueryBuilder();
156     }
157
158     @Test
159     public void vserverWithNonExistentTenantTest() throws Exception {
160         String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
161         callTest(methodName, 0);
162     }
163
164     public QueryBuilder<Vertex> vserverWithNonExistentTenantQuery(OptimizeEnum optimized) throws Exception {
165         URI uri = new URI(String.format(vserverUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1,
166                 "does-not-exist", vserverId));
167         return getQueryBuilder(optimized).createQueryFromURI(uri).getQueryBuilder();
168     }
169
170     @Test
171     public void vserverWithValidQueryParameterTest() throws Exception {
172         String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
173         callTest(methodName, 1);
174     }
175
176     public QueryBuilder<Vertex> vserverWithValidQueryParameterQuery(OptimizeEnum optimized) throws Exception {
177         URI uri = new URI(String.format(vserverUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1,
178                 tenantId, vserverId));
179         MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
180         map.putSingle("vserver-name2", "someName");
181         return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();
182     }
183
184     @Test
185     public void cloudRegionTest() throws Exception {
186         String methodName = new Object() {}.getClass().getEnclosingMethod().getName();
187         callTest(methodName, 1);
188     }
189
190     public QueryBuilder<Vertex> cloudRegionQuery(OptimizeEnum optimized) throws Exception {
191         URI uri = new URI(String.format(crUriPattern, getPrefix() + CLOUD_OWNER_1, getPrefix() + CLOUD_REGION_ID_1));
192         MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
193         map.putSingle("in-maint", "false");
194         return getQueryBuilder(optimized).createQueryFromURI(uri, map).getQueryBuilder();
195     }
196
197 }