8a80fb9429427e74387e8f6fe38d6bd799478e2c
[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 }