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.vid.aai.util.HttpsAuthClient;
28 import org.onap.vid.changeManagement.RequestDetailsWrapper;
29 import org.onap.vid.exceptions.GenericUncheckedException;
30 import org.onap.vid.mso.rest.RequestDetails;
31 import org.onap.vid.utils.SystemPropertiesWrapper;
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 SystemPropertiesWrapper systemProperties;
79 private RestMsoImplementation restMsoImplementation = new RestMsoImplementation(mockHttpsAuthClient, systemProperties);
81 private String path = "/test_path/";
82 private String rawData = "test-row-data";
87 when(systemProperties.getProperty(MsoProperties.MSO_PASSWORD)).thenReturn("OBF:1ghz1kfx1j1w1m7w1i271e8q1eas1hzj1m4i1iyy1kch1gdz");
91 public void shouldProperlyInitMsoClient() {
93 MultivaluedHashMap<String, Object> result = restMsoImplementation.initMsoClient();
96 assertThat(result).containsKeys("Authorization","X-ONAP-PartnerName");
97 assertThat(result).doesNotContainKey("notExistingKey");
101 public void shouldProperlyGetRestObjectWithRequestInfo() {
103 RestObject<HttpRequest> restObject = new RestObject<>();
105 prepareMocks(rawData, HttpStatus.ACCEPTED.value(),"");
108 RestObjectWithRequestInfo<HttpRequest> response = restMsoImplementation.Get(httpRequest, path, restObject,false);
111 assertThat(response.getRequestedUrl()).contains(path);
112 assertThat(response.getRawData()).isEqualTo(rawData);
113 assertThat(response.getHttpCode()).isEqualTo(HttpStatus.ACCEPTED.value());
114 assertThat(response.getHttpMethod()).isEqualTo(HttpMethod.GET);
117 @Test( expectedExceptions = GenericUncheckedException.class)
118 public void shouldThrowExceptionWhenGetRestObjectWithRequestInfoGetsWrongStatus() {
120 RestObject<HttpRequest> restObject = new RestObject<>();
122 prepareMocks("",HttpStatus.BAD_REQUEST.value(),"");
125 restMsoImplementation.Get(httpRequest, "", restObject,false);
128 @Test( expectedExceptions = MsoTestException.class)
129 public void shouldThrowExceptionWhenGetRestObjectWithRequestInfoGetsWrongParameters() {
131 RestObject<HttpRequest> restObject = new RestObject<>();
133 prepareMocks("",HttpStatus.ACCEPTED.value(),"");
134 when(systemProperties.getProperty(MsoProperties.MSO_SERVER_URL)).thenReturn("SAMPLE_URL");
135 when(mockClient.target("SAMPLE_URL")).thenThrow(new MsoTestException("test-target-exception"));
138 restMsoImplementation.Get(httpRequest, "", restObject,false);
142 public void shouldProperlyGetRestObjectForObjectWithRequestInfoAndAcceptCode() {
144 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"");
147 RestObject response = restMsoImplementation.GetForObject(path, HttpRequest.class);
150 assertThat(response.getStatusCode()).isEqualTo(HttpStatus.ACCEPTED.value());
151 assertThat(response.getRaw()).isEqualTo(rawData);
155 public void shouldProperlyGetRestObjectForObjectWithRequestInfoAndBadRequestCode() {
157 prepareMocks(rawData,HttpStatus.BAD_REQUEST.value(),"");
160 RestObject response = restMsoImplementation.GetForObject(path, HttpRequest.class);
163 assertThat(response.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value());
164 assertThat(response.getRaw()).isEqualTo(rawData);
168 public void shouldProperlyDeleteRestObjectWithStatusHttpAccepted() {
170 RestObject<HttpRequest> restObject = new RestObject<>();
172 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"DELETE");
175 restMsoImplementation.Delete(httpRequest, "testObject", path, restObject);
178 assertThat(restObject.getStatusCode()).isEqualTo(HttpStatus.ACCEPTED.value());
182 public void shouldProperlyDeleteRestObjectWithStatusOK() {
184 RestObject<HttpRequest> restObject = new RestObject<>();
186 prepareMocks(rawData,HttpStatus.OK.value(),"DELETE");
189 restMsoImplementation.Delete(httpRequest, "testObject", path, restObject);
192 assertThat(restObject.getStatusCode()).isEqualTo(HttpStatus.OK.value());
196 public void shouldProperlyReturnFromDeleteWithStatusBadRequest() {
198 RestObject<HttpRequest> restObject = new RestObject<>();
200 prepareMocks(rawData,HttpStatus.BAD_REQUEST.value(),"DELETE");
203 restMsoImplementation.Delete(httpRequest, "testObject", path, restObject);
206 assertThat(restObject.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST.value());
210 public void shouldProperlyReturnFromDeleteWithStatusOtherThenAbove() {
212 RestObject<HttpRequest> restObject = new RestObject<>();
213 prepareMocks(rawData,HttpStatus.NOT_EXTENDED.value(),"DELETE");
216 restMsoImplementation.Delete(httpRequest, "testObject", path, restObject);
219 assertThat(restObject.getStatusCode()).isEqualTo(HttpStatus.NOT_EXTENDED.value());
222 @Test( expectedExceptions = MsoTestException.class)
223 public void shouldThrowExceptionWhenCallsDeleteWithWrongParameters() {
225 when(mockClient.target(any(String.class))).thenThrow(new MsoTestException("testDeleteException"));
228 restMsoImplementation.Delete(httpRequest, "testObject", "", null);
231 @Test( expectedExceptions = NullPointerException.class)
232 public void shouldThrowExceptionWhenCallsDeleteWithWrongObjectType() {
234 RestObject<HttpRequest> restObject = new RestObject<>();
235 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"DELETE");
238 restMsoImplementation.Delete(null, "testObject", path, restObject);
242 public void shouldProperlyPostForObject() {
244 RequestDetails requestDetails = new RequestDetails();
246 RestObject<HttpRequest> expectedResponse = new RestObject<>();
247 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
248 expectedResponse.setRaw(rawData);
250 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"POST");
253 RestObject<HttpRequest> response = restMsoImplementation.PostForObject(requestDetails, path, HttpRequest.class);
256 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
260 public void shouldProperlyDeleteForObject() {
262 RequestDetails requestDetails = new RequestDetails();
264 RestObject<HttpRequest> expectedResponse = new RestObject<>();
265 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
266 expectedResponse.setRaw(rawData);
268 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"DELETE");
271 RestObject<HttpRequest> response = restMsoImplementation.DeleteForObject(requestDetails, path, HttpRequest.class);
274 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
278 public void shouldProperlyPost() {
280 RequestDetails requestDetails = new RequestDetails();
281 RestObject<String> response = new RestObject<>();
283 RestObject<String> expectedResponse = new RestObject<>();
284 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
285 expectedResponse.setRaw(rawData);
287 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"POST");
290 restMsoImplementation.Post(rawData,requestDetails, path, response);
293 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
297 public void shouldProperlyPrepareClient() {
299 String method = "POST";
300 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),method);
303 javax.ws.rs.client.Invocation.Builder response = restMsoImplementation.prepareClient(path, method);
306 assertThat(response).isEqualTo(builder);
310 public void shouldCreatRestObjectOnlyWithHttpMethod() {
312 String method = "GET";
313 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),method);
315 RestObject<String> expectedResponse = new RestObject<>();
316 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
317 expectedResponse.setRaw(rawData);
320 RestObject<String> response = restMsoImplementation.restCall(HttpMethod.GET, String.class, null, path, Optional.empty());
323 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
326 @Test( expectedExceptions = MsoTestException.class)
327 public void shouldThrowExceptionWhenCreateRestObjectIsCalledWithoutDefinedClient() {
329 when(mockClient.target(any(String.class))).thenThrow(new MsoTestException("testNoClientException"));
332 restMsoImplementation.restCall(HttpMethod.GET, String.class, null, "", Optional.empty());
336 public void shouldProperlyPutRestObjectWithProperParametersAndStatusAccepted() {
338 String method = "PUT";
339 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),method);
341 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
342 RestObject<String> response = new RestObject<>();
344 RestObject<String> expectedResponse = new RestObject<>();
345 expectedResponse.setStatusCode(HttpStatus.ACCEPTED.value());
346 expectedResponse.set(rawData);
349 restMsoImplementation.Put("testPutBody", requestDetailsWrapper , path, response);
352 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
356 public void shouldProperlyPutRestObjectWithProperParametersAndStatusMultipleChoices() {
358 String method = "PUT";
359 prepareMocks(rawData,HttpStatus.MULTIPLE_CHOICES.value(),method);
361 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
362 RestObject<String> response = new RestObject<>();
364 RestObject<String> expectedResponse = new RestObject<>();
365 expectedResponse.setStatusCode(HttpStatus.MULTIPLE_CHOICES.value());
366 expectedResponse.set(rawData);
369 restMsoImplementation.Put("testPutBody", requestDetailsWrapper , path, response);
372 assertThat(response).isEqualToComparingFieldByField(expectedResponse);
375 @Test( expectedExceptions = MsoTestException.class)
376 public void shouldThrowExceptionWhenCallsPutWithWrongParameters() {
378 when(mockClient.target(any(String.class))).thenThrow(new MsoTestException("testDeleteException"));
379 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
382 restMsoImplementation.Put(null, requestDetailsWrapper, "", null);
385 @Test( expectedExceptions = NullPointerException.class)
386 public void shouldThrowExceptionWhenCallsPutWithWrongObjectType() {
388 RestObject<HttpRequest> restObject = new RestObject<>();
389 org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
391 prepareMocks(rawData,HttpStatus.ACCEPTED.value(),"DELETE");
394 restMsoImplementation.Put(null, requestDetailsWrapper, path, restObject);
399 private void prepareMocks(String rawData,int status,String httpMethod) {
401 when(mockClient.target(any(String.class))).thenReturn(webTarget);
402 when(webTarget.request()).thenReturn(builder);
405 when(builder.accept(any(String.class))).thenReturn(builder);
406 when(builder.headers(any(MultivaluedMap.class))).thenReturn(builder);
407 when(builder.get()).thenReturn(response);
409 when(builder.build( eq(httpMethod), any(Entity.class))).thenReturn(jerseyInvocation);
410 when(builder.build( eq(httpMethod))).thenReturn(jerseyInvocation);
412 when(builder.put( any(Entity.class))).thenReturn(response);
413 when(jerseyInvocation.invoke()).thenReturn(response);
416 when(response.getStatus()).thenReturn(status);
417 when(response.readEntity(String.class)).thenReturn(rawData);
420 private class MsoTestException extends RuntimeException{
421 MsoTestException(String testException) {
422 super(testException);