2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 Nokia 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=========================================================
21 package org.onap.vid.mso;
23 import io.joshworks.restclient.request.HttpRequest;
24 import org.glassfish.jersey.client.JerseyInvocation;
25 import org.mockito.InjectMocks;
26 import org.mockito.Mock;
27 import org.onap.portalsdk.core.util.SystemProperties;
28 import org.onap.vid.aai.util.HttpsAuthClient;
29 import org.onap.vid.changeManagement.RequestDetailsWrapper;
30 import org.onap.vid.exceptions.GenericUncheckedException;
31 import org.onap.vid.mso.rest.RequestDetails;
32 import org.springframework.http.HttpMethod;
33 import org.springframework.http.HttpStatus;
34 import org.testng.annotations.BeforeClass;
35 import org.testng.annotations.Test;
37 import javax.ws.rs.client.Client;
38 import javax.ws.rs.client.Entity;
39 import javax.ws.rs.client.WebTarget;
40 import javax.ws.rs.core.MultivaluedHashMap;
41 import javax.ws.rs.core.MultivaluedMap;
42 import javax.ws.rs.core.Response;
44 import java.util.Optional;
46 import static org.assertj.core.api.Java6Assertions.assertThat;
47 import static org.mockito.ArgumentMatchers.any;
48 import static org.mockito.ArgumentMatchers.eq;
49 import static org.mockito.Mockito.when;
50 import static org.mockito.MockitoAnnotations.initMocks;
52 public class RestMsoImplementationTest {
55 private HttpRequest httpRequest;
58 private Client mockClient;
61 private HttpsAuthClient mockHttpsAuthClient;
64 private WebTarget webTarget;
67 private javax.ws.rs.client.Invocation.Builder builder;
70 private Response response;
73 private JerseyInvocation jerseyInvocation;
76 private RestMsoImplementation restMsoImplementation = new RestMsoImplementation(mockHttpsAuthClient);
78 String path = "/test_path/";
79 String rawData = "test-row-data";
87 public void shouldProperlyInitMsoClient() {
89 MultivaluedHashMap<String, Object> result = restMsoImplementation.initMsoClient();
92 assertThat(result).containsKeys("Authorization","X-ONAP-PartnerName");
93 assertThat(result).doesNotContainKey("notExistingKey");
97 public void shouldProperlyGetRestObjectWithRequestInfo() {
99 RestObject<HttpRequest> restObject = new RestObject<>();
101 prepareMocks(rawData, HttpStatus.ACCEPTED.value(),"");
104 RestObjectWithRequestInfo<HttpRequest> response = restMsoImplementation.Get(httpRequest, path, restObject,false);
107 assertThat(response.getRequestedUrl()).contains(path);
108 assertThat(response.getRawData()).isEqualTo(rawData);
109 assertThat(response.getHttpCode()).isEqualTo(HttpStatus.ACCEPTED.value());
110 assertThat(response.getHttpMethod()).isEqualTo(HttpMethod.GET);
113 @Test( expectedExceptions = GenericUncheckedException.class)
114 public void shouldThrowExceptionWhenGetRestObjectWithRequestInfoGetsWrongStatus() {
116 RestObject<HttpRequest> restObject = new RestObject<>();
118 prepareMocks("",HttpStatus.BAD_REQUEST.value(),"");
121 restMsoImplementation.Get(httpRequest, "", restObject,false);
124 @Test( expectedExceptions = MsoTestException.class)
125 public void shouldThrowExceptionWhenGetRestObjectWithRequestInfoGetsWrongParameters() {
127 RestObject<HttpRequest> restObject = new RestObject<>();
129 prepareMocks("",HttpStatus.ACCEPTED.value(),"");
130 when(mockClient.target(SystemProperties.getProperty(MsoProperties.MSO_SERVER_URL))).thenThrow(new MsoTestException("test-target-exception"));
133 restMsoImplementation.Get(httpRequest, "", restObject,false);
137 public void shouldProperlyGetRestObjectForObjectWithRequestInfoAndAcceptCode() {
139 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"");
142 RestObject response = restMsoImplementation.GetForObject(path, HttpRequest.class);
145 assertThat(response.getStatusCode()).isEqualTo(HttpStatus.ACCEPTED.value());
146 assertThat(response.getRaw()).isEqualTo(rawData);
150 public void shouldProperlyGetRestObjectForObjectWithRequestInfoAndBadRequestCode() {
152 prepareMocks(rawData,HttpStatus.BAD_REQUEST.value(),"");
155 RestObject response = restMsoImplementation.GetForObject(path, HttpRequest.class);
158 assertThat(response.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value());
159 assertThat(response.getRaw()).isEqualTo(rawData);
163 public void shouldProperlyDeleteRestObjectWithStatusHttpAccepted() {
165 RestObject<HttpRequest> restObject = new RestObject<>();
167 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"DELETE");
170 restMsoImplementation.Delete(httpRequest, "testObject", path, restObject);
173 assertThat(restObject.getStatusCode()).isEqualTo(HttpStatus.ACCEPTED.value());
177 public void shouldProperlyDeleteRestObjectWithStatusOK() {
179 RestObject<HttpRequest> restObject = new RestObject<>();
181 prepareMocks(rawData,HttpStatus.OK.value(),"DELETE");
184 restMsoImplementation.Delete(httpRequest, "testObject", path, restObject);
187 assertThat(restObject.getStatusCode()).isEqualTo(HttpStatus.OK.value());
191 public void shouldProperlyReturnFromDeleteWithStatusBadRequest() {
193 RestObject<HttpRequest> restObject = new RestObject<>();
195 prepareMocks(rawData,HttpStatus.BAD_REQUEST.value(),"DELETE");
198 restMsoImplementation.Delete(httpRequest, "testObject", path, restObject);
201 assertThat(restObject.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value());
205 public void shouldProperlyReturnFromDeleteWithStatusOtherThenAbove() {
207 RestObject<HttpRequest> restObject = new RestObject<>();
208 prepareMocks(rawData,HttpStatus.NOT_EXTENDED.value(),"DELETE");
211 restMsoImplementation.Delete(httpRequest, "testObject", path, restObject);
214 assertThat(restObject.getStatusCode()).isEqualTo(HttpStatus.NOT_EXTENDED.value());
217 @Test( expectedExceptions = MsoTestException.class)
218 public void shouldThrowExceptionWhenCallsDeleteWithWrongParameters() {
220 when(mockClient.target(any(String.class))).thenThrow(new MsoTestException("testDeleteException"));
223 restMsoImplementation.Delete(httpRequest, "testObject", "", null);
226 @Test( expectedExceptions = NullPointerException.class)
227 public void shouldThrowExceptionWhenCallsDeleteWithWrongObjectType() {
229 RestObject<HttpRequest> restObject = new RestObject<>();
230 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"DELETE");
233 restMsoImplementation.Delete(null, "testObject", path, restObject);
237 public void shouldProperlyPostForObject() {
239 RequestDetails requestDetails = new RequestDetails();
241 RestObject<HttpRequest> expectedResponse = new RestObject<>();
242 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
243 expectedResponse.setRaw(rawData);
245 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"POST");
248 RestObject<HttpRequest> response = restMsoImplementation.PostForObject(requestDetails, path, HttpRequest.class);
251 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
255 public void shouldProperlyDeleteForObject() {
257 RequestDetails requestDetails = new RequestDetails();
259 RestObject<HttpRequest> expectedResponse = new RestObject<>();
260 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
261 expectedResponse.setRaw(rawData);
263 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"DELETE");
266 RestObject<HttpRequest> response = restMsoImplementation.DeleteForObject(requestDetails, path, HttpRequest.class);
269 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
273 public void shouldProperlyPost() {
275 RequestDetails requestDetails = new RequestDetails();
276 RestObject<String> response = new RestObject<>();
278 RestObject<String> expectedResponse = new RestObject<>();
279 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
280 expectedResponse.setRaw(rawData);
282 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"POST");
285 restMsoImplementation.Post(rawData,requestDetails, path, response);
288 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
292 public void shouldProperlyPrepareClient() {
294 String method = "POST";
295 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),method);
298 javax.ws.rs.client.Invocation.Builder response = restMsoImplementation.prepareClient(path, method);
301 assertThat(response).isEqualTo(builder);
305 public void shouldCreatRestObjectOnlyWithHttpMethod() {
307 String method = "GET";
308 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),method);
310 RestObject<String> expectedResponse = new RestObject<>();
311 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
312 expectedResponse.setRaw(rawData);
315 RestObject<String> response = restMsoImplementation.restCall(HttpMethod.GET, String.class, null, path, Optional.empty());
318 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
321 @Test( expectedExceptions = MsoTestException.class)
322 public void shouldThrowExceptionWhenCreateRestObjectIsCalledWithoutDefinedClient() {
324 when(mockClient.target(any(String.class))).thenThrow(new MsoTestException("testNoClientException"));
327 restMsoImplementation.restCall(HttpMethod.GET, String.class, null, "", Optional.empty());
331 public void shouldProperlyPutRestObjectWithProperParametersAndStatusAccepted() {
333 String method = "PUT";
334 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),method);
336 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
337 RestObject<String> response = new RestObject<>();
339 RestObject<String> expectedResponse = new RestObject<>();
340 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
341 expectedResponse.set(rawData);
344 restMsoImplementation.Put("testPutBody", requestDetailsWrapper , path, response);
347 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
351 public void shouldProperlyPutRestObjectWithProperParametersAndStatusMultipleChoices() {
353 String method = "PUT";
354 prepareMocks(rawData,HttpStatus.MULTIPLE_CHOICES.value(),method);
356 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
357 RestObject<String> response = new RestObject<>();
359 RestObject<String> expectedResponse = new RestObject<>();
360 expectedResponse.setStatusCode(HttpStatus.MULTIPLE_CHOICES.value());
361 expectedResponse.set(rawData);
364 restMsoImplementation.Put("testPutBody", requestDetailsWrapper , path, response);
367 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
370 @Test( expectedExceptions = MsoTestException.class)
371 public void shouldThrowExceptionWhenCallsPutWithWrongParameters() {
373 when(mockClient.target(any(String.class))).thenThrow(new MsoTestException("testDeleteException"));
374 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
377 restMsoImplementation.Put(null, requestDetailsWrapper, "", null);
380 @Test( expectedExceptions = NullPointerException.class)
381 public void shouldThrowExceptionWhenCallsPutWithWrongObjectType() {
383 RestObject<HttpRequest> restObject = new RestObject<>();
384 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
386 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"DELETE");
389 restMsoImplementation.Put(null, requestDetailsWrapper, path, restObject);
394 private void prepareMocks(String rawData,int status,String httpMethod) {
396 when(mockClient.target(any(String.class))).thenReturn(webTarget);
397 when(webTarget.request()).thenReturn(builder);
400 when(builder.accept(any(String.class))).thenReturn(builder);
401 when(builder.headers(any(MultivaluedMap.class))).thenReturn(builder);
402 when(builder.get()).thenReturn(response);
404 when(builder.build( eq(httpMethod), any(Entity.class))).thenReturn(jerseyInvocation);
405 when(builder.build( eq(httpMethod))).thenReturn(jerseyInvocation);
407 when(builder.put( any(Entity.class))).thenReturn(response);
408 when(jerseyInvocation.invoke()).thenReturn(response);
411 when(response.getStatus()).thenReturn(status);
412 when(response.readEntity(String.class)).thenReturn(rawData);
415 private class MsoTestException extends RuntimeException{
416 MsoTestException(String testException) {
417 super(testException);