ac9d1fbad83015e12d2ac53c6bc81a605f05a318
[ccsdk/oran.git] /
1 /*-
2  * ========================LICENSE_START=================================
3  * ONAP : ccsdk oran
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
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
21 package org.onap.ccsdk.oran.a1policymanagementservice.clients;
22
23 import io.netty.util.internal.logging.InternalLoggerFactory;
24 import io.netty.util.internal.logging.JdkLoggerFactory;
25
26 import java.io.IOException;
27
28 import org.junit.jupiter.api.AfterAll;
29 import org.junit.jupiter.api.BeforeAll;
30 import org.junit.jupiter.api.DisplayName;
31 import org.junit.jupiter.api.Test;
32 import org.springframework.http.HttpHeaders;
33 import org.springframework.http.MediaType;
34 import org.springframework.web.reactive.function.client.WebClientResponseException;
35
36 import reactor.core.publisher.Mono;
37 import reactor.test.StepVerifier;
38 import reactor.util.Loggers;
39
40 import okhttp3.mockwebserver.MockResponse;
41 import okhttp3.mockwebserver.MockWebServer;
42
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;
51
52     private static MockWebServer mockWebServer;
53
54     private static AsyncRestClient clientUnderTest;
55
56     @BeforeAll
57     static void init() {
58         // skip a lot of unnecessary logs from MockWebServer
59         InternalLoggerFactory.setDefaultFactory(JdkLoggerFactory.INSTANCE);
60         Loggers.useJdkLoggers();
61         mockWebServer = new MockWebServer();
62         clientUnderTest =
63                 new AsyncRestClient(mockWebServer.url(BASE_URL).toString(), null, null, new SecurityContext(""));
64     }
65
66     @AfterAll
67     static void tearDown() throws IOException {
68         mockWebServer.shutdown();
69     }
70
71     @Test
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) //
76                 .setBody(TEST_JSON));
77
78         Mono<String> returnedMono = clientUnderTest.get(REQUEST_URL);
79         StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify();
80     }
81
82     @Test
83     @DisplayName("test Get Error")
84     void testGetError() {
85         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
86
87         Mono<String> returnedMono = clientUnderTest.get(REQUEST_URL);
88         StepVerifier.create(returnedMono)
89                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();
90     }
91
92     @Test
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) //
97                 .setBody(TEST_JSON));
98
99         Mono<String> returnedMono = clientUnderTest.put(REQUEST_URL, TEST_JSON);
100         StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify();
101     }
102
103     @Test
104     @DisplayName("test Put Error")
105     void testPutError() {
106         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
107
108         Mono<String> returnedMono = clientUnderTest.put(REQUEST_URL, TEST_JSON);
109         StepVerifier.create(returnedMono)
110                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();
111     }
112
113     @Test
114     @DisplayName("test Delete No Error")
115     void testDeleteNoError() {
116         mockWebServer.enqueue(new MockResponse().setResponseCode(SUCCESS_CODE));
117
118         Mono<String> returnedMono = clientUnderTest.delete(REQUEST_URL);
119         StepVerifier.create(returnedMono).expectNext("").expectComplete().verify();
120     }
121
122     @Test
123     @DisplayName("test Delete Error")
124     void testDeleteError() {
125         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
126
127         Mono<String> returnedMono = clientUnderTest.delete(REQUEST_URL);
128         StepVerifier.create(returnedMono)
129                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();
130     }
131
132     @Test
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));
138
139         Mono<String> returnedMono = clientUnderTest.post(REQUEST_URL, TEST_JSON);
140         StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify();
141     }
142
143     @Test
144     @DisplayName("test Post Error")
145     void testPostError() {
146         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
147
148         Mono<String> returnedMono = clientUnderTest.post(REQUEST_URL, TEST_JSON);
149         StepVerifier.create(returnedMono)
150                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();
151     }
152
153     @Test
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));
159
160         Mono<String> returnedMono = clientUnderTest.postWithAuthHeader(REQUEST_URL, TEST_JSON, USERNAME, PASSWORD);
161         StepVerifier.create(returnedMono).expectNext(TEST_JSON).expectComplete().verify();
162     }
163
164     @Test
165     @DisplayName("test Post With Auth Header Error")
166     void testPostWithAuthHeaderError() {
167         mockWebServer.enqueue(new MockResponse().setResponseCode(ERROR_CODE));
168
169         Mono<String> returnedMono = clientUnderTest.postWithAuthHeader(REQUEST_URL, TEST_JSON, USERNAME, PASSWORD);
170         StepVerifier.create(returnedMono)
171                 .expectErrorMatches(throwable -> throwable instanceof WebClientResponseException).verify();
172     }
173 }