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.rest.db;
24 import org.javatuples.Pair;
25 import org.junit.Before;
26 import org.junit.FixMethodOrder;
27 import org.junit.runners.MethodSorters;
28 import org.junit.Test;
29 import org.mockito.Mockito;
30 import org.onap.aai.AAISetup;
31 import org.onap.aai.dbmap.DBConnectionType;
32 import org.onap.aai.domain.yang.Pserver;
33 import org.onap.aai.domain.yang.Pservers;
34 import org.onap.aai.exceptions.AAIException;
35 import org.onap.aai.introspection.*;
36 import org.onap.aai.parsers.query.QueryParser;
37 import org.onap.aai.restcore.HttpMethod;
38 import org.onap.aai.serialization.engines.QueryStyle;
39 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
41 import javax.ws.rs.core.*;
43 import java.io.BufferedReader;
44 import java.io.InputStream;
45 import java.io.InputStreamReader;
46 import java.io.UnsupportedEncodingException;
49 import java.util.stream.Collectors;
51 import com.google.gson.JsonObject;
52 import com.google.gson.JsonParser;
54 import static org.junit.Assert.assertEquals;
55 import static org.mockito.Matchers.anyObject;
56 import static org.mockito.Mockito.when;
58 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
59 public class HttpEntryTest extends AAISetup {
61 protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json");
63 private static final Set<Integer> VALID_HTTP_STATUS_CODES = new HashSet<>();
66 VALID_HTTP_STATUS_CODES.add(200);
67 VALID_HTTP_STATUS_CODES.add(201);
68 VALID_HTTP_STATUS_CODES.add(204);
71 private HttpHeaders httpHeaders;
73 private UriInfo uriInfo;
75 private MultivaluedMap<String, String> headersMultiMap;
76 private MultivaluedMap<String, String> queryParameters;
78 private List<String> aaiRequestContextList;
80 private List<MediaType> outputMediaTypes;
85 httpHeaders = Mockito.mock(HttpHeaders.class);
86 uriInfo = Mockito.mock(UriInfo.class);
88 headersMultiMap = new MultivaluedHashMap<>();
89 queryParameters = Mockito.spy(new MultivaluedHashMap<>());
91 headersMultiMap.add("X-FromAppId", "JUNIT");
92 headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString());
93 headersMultiMap.add("Real-Time", "true");
94 headersMultiMap.add("Accept", "application/json");
95 headersMultiMap.add("aai-request-context", "");
97 outputMediaTypes = new ArrayList<>();
98 outputMediaTypes.add(APPLICATION_JSON);
100 aaiRequestContextList = new ArrayList<>();
101 aaiRequestContextList.add("");
103 when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
104 when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
106 when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList);
109 when(uriInfo.getQueryParameters()).thenReturn(queryParameters);
110 when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters);
112 // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable
113 Mockito.doReturn(null).when(queryParameters).remove(anyObject());
115 when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON);
120 public void test1PutOnPserver() throws UnsupportedEncodingException, AAIException {
122 DBConnectionType type = DBConnectionType.REALTIME;
123 HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, QueryStyle.TRAVERSAL, type);
124 Loader loader = httpEntry.getLoader();
125 TransactionalGraphEngine dbEngine = httpEntry.getDbEngine();
127 URI uriObject = UriBuilder.fromPath("/cloud-infrastructure/pservers/pserver/junit-test1").build();
129 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject);
131 String content = "{\"hostname\":\"junit-test1\"}";
133 Introspector obj = loader.unmarshal("pserver", content, org.onap.aai.restcore.MediaType.getEnum("application/json"));
135 DBRequest dbRequest =
136 new DBRequest.Builder(HttpMethod.PUT, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
137 .rawRequestContent(content).build();
139 List<DBRequest> dbRequestList = new ArrayList<>();
140 dbRequestList.add(dbRequest);
142 Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = httpEntry.process(dbRequestList, "JUNIT");
143 Response response = responsesTuple.getValue1().get(0).getValue1();
145 assertEquals("Expected the pserver to be created", 201, response.getStatus());
149 public void test2GetOnPserver() throws UnsupportedEncodingException, AAIException {
151 DBConnectionType type = DBConnectionType.REALTIME;
152 HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, QueryStyle.TRAVERSAL, type);
153 Loader loader = httpEntry.getLoader();
154 TransactionalGraphEngine dbEngine = httpEntry.getDbEngine();
156 URI uriObject = UriBuilder.fromPath("/cloud-infrastructure/pservers/pserver/junit-test1").build();
158 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject);
162 Introspector obj = loader.introspectorFromName("pserver");
164 DBRequest dbRequest =
165 new DBRequest.Builder(HttpMethod.GET, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
166 .rawRequestContent(content).build();
168 List<DBRequest> dbRequestList = new ArrayList<>();
169 dbRequestList.add(dbRequest);
171 Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = httpEntry.process(dbRequestList, "JUNIT");
172 Response response = responsesTuple.getValue1().get(0).getValue1();
174 assertEquals("Expected the pserver to be returned", 200, response.getStatus());
178 public void test3MergePatchOnPserver() throws UnsupportedEncodingException, AAIException {
180 DBConnectionType type = DBConnectionType.REALTIME;
181 HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, QueryStyle.TRAVERSAL, type);
182 Loader loader = httpEntry.getLoader();
183 TransactionalGraphEngine dbEngine = httpEntry.getDbEngine();
185 URI uriObject = UriBuilder.fromPath("/cloud-infrastructure/pservers/pserver/junit-test1").build();
187 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject);
189 String content = "{\"hostname\":\"junit-test1\", \"equip-type\":\"junit-equip-type\"}";
191 Introspector obj = loader.unmarshal("pserver", content, org.onap.aai.restcore.MediaType.getEnum("application/json"));
193 DBRequest dbRequest =
194 new DBRequest.Builder(HttpMethod.MERGE_PATCH, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
195 .rawRequestContent(content).build();
197 List<DBRequest> dbRequestList = new ArrayList<>();
198 dbRequestList.add(dbRequest);
200 Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = httpEntry.process(dbRequestList, "JUNIT");
201 Response response = responsesTuple.getValue1().get(0).getValue1();
203 assertEquals("Expected the pserver to be updated", 200, response.getStatus());
206 private int doDelete(String resourceVersion) throws UnsupportedEncodingException, AAIException {
207 queryParameters.add("resource-version", resourceVersion);
208 DBConnectionType type = DBConnectionType.REALTIME;
209 HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, QueryStyle.TRAVERSAL, type);
210 Loader loader = httpEntry.getLoader();
211 TransactionalGraphEngine dbEngine = httpEntry.getDbEngine();
213 URI uriObject = UriBuilder.fromPath("/cloud-infrastructure/pservers/pserver/junit-test1").build();
215 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject);
219 Introspector obj = loader.introspectorFromName("pserver");
221 DBRequest dbRequest =
222 new DBRequest.Builder(HttpMethod.DELETE, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
223 .rawRequestContent(content).build();
225 List<DBRequest> dbRequestList = new ArrayList<>();
226 dbRequestList.add(dbRequest);
228 Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = httpEntry.process(dbRequestList, "JUNIT");
229 Response response = responsesTuple.getValue1().get(0).getValue1();
231 return response.getStatus();
235 public void test4DeleteOnPserver() throws UnsupportedEncodingException, AAIException {
237 DBConnectionType type = DBConnectionType.REALTIME;
238 HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, QueryStyle.TRAVERSAL, type);
239 Loader loader = httpEntry.getLoader();
240 TransactionalGraphEngine dbEngine = httpEntry.getDbEngine();
242 URI uriObject = UriBuilder.fromPath("/cloud-infrastructure/pservers/pserver/junit-test1").build();
244 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject);
248 Introspector obj = loader.introspectorFromName("pserver");
250 DBRequest dbRequest =
251 new DBRequest.Builder(HttpMethod.GET, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
252 .rawRequestContent(content).build();
254 List<DBRequest> dbRequestList = new ArrayList<>();
255 dbRequestList.add(dbRequest);
257 Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = httpEntry.process(dbRequestList, "JUNIT");
258 Response response = responsesTuple.getValue1().get(0).getValue1();
260 String msg = response.getEntity().toString();
261 JsonObject jsonObj = new JsonParser().parse(msg).getAsJsonObject();
262 String resourceVersion = "";
263 if ( jsonObj.isJsonObject()) {
264 resourceVersion = jsonObj.get("resource-version").getAsString();
266 assertEquals("Expected the pserver to be deleted", 204, doDelete(resourceVersion));
270 public void test5FailedGetOnPserver() throws UnsupportedEncodingException, AAIException {
272 DBConnectionType type = DBConnectionType.REALTIME;
273 HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, QueryStyle.TRAVERSAL, type);
274 Loader loader = httpEntry.getLoader();
275 TransactionalGraphEngine dbEngine = httpEntry.getDbEngine();
277 URI uriObject = UriBuilder.fromPath("/cloud-infrastructure/pservers/pserver/junit-test2").build();
279 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject);
283 Introspector obj = loader.introspectorFromName("pserver");
285 DBRequest dbRequest =
286 new DBRequest.Builder(HttpMethod.GET, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
287 .rawRequestContent(content).build();
289 List<DBRequest> dbRequestList = new ArrayList<>();
290 dbRequestList.add(dbRequest);
292 Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = httpEntry.process(dbRequestList, "JUNIT");
293 Response response = responsesTuple.getValue1().get(0).getValue1();
296 assertEquals("Expected the pserver to be deleted", 404, response.getStatus());