2  * ========================LICENSE_START=================================
 
   4  * ======================================================================
 
   5  * Copyright (C) 2020-2023 Nordix Foundation. 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.ccsdk.oran.a1policymanagementservice.clients;
 
  23 import io.netty.util.internal.logging.InternalLoggerFactory;
 
  24 import io.netty.util.internal.logging.JdkLoggerFactory;
 
  26 import java.io.IOException;
 
  28 import okhttp3.mockwebserver.MockResponse;
 
  29 import okhttp3.mockwebserver.MockWebServer;
 
  31 import org.junit.jupiter.api.AfterAll;
 
  32 import org.junit.jupiter.api.BeforeAll;
 
  33 import org.junit.jupiter.api.DisplayName;
 
  34 import org.junit.jupiter.api.Test;
 
  35 import org.springframework.http.HttpHeaders;
 
  36 import org.springframework.http.MediaType;
 
  37 import org.springframework.web.reactive.function.client.WebClientResponseException;
 
  39 import reactor.core.publisher.Mono;
 
  40 import reactor.test.StepVerifier;
 
  41 import reactor.util.Loggers;
 
  43 class AsyncRestClientTest {
 
  44     private static final String BASE_URL = "BaseUrl";
 
  45     private static final String REQUEST_URL = "/test";
 
  46     private static final String USERNAME = "username";
 
  47     private static final String PASSWORD = "password";
 
  48     private static final String TEST_JSON = "{\"type\":\"type1\"}";
 
  49     private static final int SUCCESS_CODE = 200;
 
  50     private static final int ERROR_CODE = 500;
 
  52     private static MockWebServer mockWebServer;
 
  54     private static AsyncRestClient clientUnderTest;
 
  58         // skip a lot of unnecessary logs from MockWebServer
 
  59         InternalLoggerFactory.setDefaultFactory(JdkLoggerFactory.INSTANCE);
 
  60         Loggers.useJdkLoggers();
 
  61         mockWebServer = new MockWebServer();
 
  63                 new AsyncRestClient(mockWebServer.url(BASE_URL).toString(), null, null, new SecurityContext(""));
 
  67     static void tearDown() throws IOException {
 
  68         mockWebServer.shutdown();
 
  72     @DisplayName("test Get No Error")
 
  73     void testGetNoError() {
 
  74         mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE) //
 
  75                 .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) //
 
  78         Mono<String> returnedMono = clientUnderTest.get(REQUEST_URL);
 
  79         StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify();
 
  83     @DisplayName("test Get Error")
 
  85         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
 
  87         Mono<String> returnedMono = clientUnderTest.get(REQUEST_URL);
 
  88         StepVerifier.create(returnedMono)
 
  89                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();
 
  93     @DisplayName("test Put No Error")
 
  94     void testPutNoError() {
 
  95         mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE) //
 
  96                 .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) //
 
  99         Mono<String> returnedMono = clientUnderTest.put(REQUEST_URL, TEST_JSON);
 
 100         StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify();
 
 104     @DisplayName("test Put Error")
 
 105     void testPutError() {
 
 106         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
 
 108         Mono<String> returnedMono = clientUnderTest.put(REQUEST_URL, TEST_JSON);
 
 109         StepVerifier.create(returnedMono)
 
 110                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();
 
 114     @DisplayName("test Delete No Error")
 
 115     void testDeleteNoError() {
 
 116         mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE));
 
 118         Mono<String> returnedMono = clientUnderTest.delete(REQUEST_URL);
 
 119         StepVerifier.create(returnedMono).expectNext("").expectComplete().verify();
 
 123     @DisplayName("test Delete Error")
 
 124     void testDeleteError() {
 
 125         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
 
 127         Mono<String> returnedMono = clientUnderTest.delete(REQUEST_URL);
 
 128         StepVerifier.create(returnedMono)
 
 129                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();
 
 133     @DisplayName("test Post No Error")
 
 134     void testPostNoError() {
 
 135         mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE) //
 
 136                 .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) //
 
 137                 .setBody(TEST_JSON));
 
 139         Mono<String> returnedMono = clientUnderTest.post(REQUEST_URL, TEST_JSON);
 
 140         StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify();
 
 144     @DisplayName("test Post Error")
 
 145     void testPostError() {
 
 146         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
 
 148         Mono<String> returnedMono = clientUnderTest.post(REQUEST_URL, TEST_JSON);
 
 149         StepVerifier.create(returnedMono)
 
 150                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();
 
 154     @DisplayName("test Post With Auth Header No Error")
 
 155     void testPostWithAuthHeaderNoError() {
 
 156         mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE) //
 
 157                 .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) //
 
 158                 .setBody(TEST_JSON));
 
 160         Mono<String> returnedMono = clientUnderTest.postWithAuthHeader(REQUEST_URL, TEST_JSON, USERNAME, PASSWORD);
 
 161         StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify();
 
 165     @DisplayName("test Post With Auth Header Error")
 
 166     void testPostWithAuthHeaderError() {
 
 167         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
 
 169         Mono<String> returnedMono = clientUnderTest.postWithAuthHeader(REQUEST_URL, TEST_JSON, USERNAME, PASSWORD);
 
 170         StepVerifier.create(returnedMono)
 
 171                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();