37c189eee6edc815956b8acdbdda6b2c35712909
[dcaegen2/services/sdk.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * DCAEGEN2-SERVICES-SDK
4  * ================================================================================
5  * Copyright (C) 2018 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
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.dcaegen2.services.sdk.rest.services.adapters.http;
22
23 import static org.mockito.Mockito.mock;
24 import static org.mockito.Mockito.when;
25
26 import io.netty.handler.codec.http.HttpResponseStatus;
27 import java.util.HashMap;
28 import java.util.Map;
29 import java.util.UUID;
30 import org.junit.jupiter.api.Disabled;
31 import org.junit.jupiter.api.Test;
32 import org.onap.dcaegen2.services.sdk.rest.services.model.DmaapModel;
33 import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
34 import org.onap.dcaegen2.services.sdk.rest.services.model.logging.ImmutableRequestDiagnosticContext;
35 import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
36 import reactor.core.publisher.Mono;
37 import reactor.netty.DisposableServer;
38 import reactor.netty.http.client.HttpClient;
39 import reactor.netty.http.server.HttpServer;
40 import reactor.netty.resources.ConnectionProvider;
41 import reactor.test.StepVerifier;
42 import reactor.netty.http.client.HttpClientResponse;
43
44 class CloudHttpClientIT {
45     private static final int MAX_CONNECTIONS = 1;
46     private static final String SAMPLE_STRING = "sampleString";
47     private static final String SAMPLE_URL = "/sampleURL";
48     private static final String JSON_BODY = "{\"correlationId\":\"NOKnhfsadhff\","
49         + "\"ipaddress-v4\":\"256.22.33.155\", "
50         + "\"ipaddress-v6\":\"200J:0db8:85a3:0000:0000:8a2e:0370:7334\"}";
51     private static final ConnectionProvider connectionProvider = ConnectionProvider.fixed("test", MAX_CONNECTIONS);
52
53     private DmaapModel dmaapModel = mock(DmaapModel.class);
54     private JsonBodyBuilder<DmaapModel> jsonBodyBuilder = mock(JsonBodyBuilder.class);
55
56     @Disabled
57     @Test
58     void successfulPatchResponse() {
59         DisposableServer server = createValidServer();
60         HttpClient httpClient = createHttpClientForContextWithAddress(server, connectionProvider);
61         CloudHttpClient cloudHttpClient = new CloudHttpClient(httpClient);
62
63         when(jsonBodyBuilder.createJsonBody(dmaapModel)).thenReturn(JSON_BODY);
64         Mono<HttpClientResponse> content = cloudHttpClient.patch(SAMPLE_URL, createRequestDiagnosticContext(), createCustomHeaders(),
65             jsonBodyBuilder, dmaapModel);
66
67         StepVerifier.create(content)
68             .expectNext(content.block())
69             .expectComplete()
70             .verify();
71         server.disposeNow();
72     }
73
74     @Disabled
75     @Test
76     void errorPatchRequest() {
77         DisposableServer server = createInvalidServer();
78         HttpClient httpClient = createHttpClientForContextWithAddress(server, connectionProvider);
79         CloudHttpClient cloudHttpClient = new CloudHttpClient(httpClient);
80
81         when(jsonBodyBuilder.createJsonBody(dmaapModel)).thenReturn(JSON_BODY);
82         Mono<HttpClientResponse> content = cloudHttpClient.patch(SAMPLE_URL, createRequestDiagnosticContext(), createCustomHeaders(),
83             jsonBodyBuilder, dmaapModel);
84
85         StepVerifier.create(content)
86             .expectNext(content.block())
87             .expectComplete()
88             .verify();
89         server.disposeNow();
90     }
91
92     @Test
93     void successfulGetResponse() {
94         DisposableServer server = createValidServer();
95         HttpClient httpClient = createHttpClientForContextWithAddress(server, connectionProvider);
96         CloudHttpClient cloudHttpClient = new CloudHttpClient(httpClient);
97
98         Mono<String> content = cloudHttpClient.get(SAMPLE_URL, String.class);
99
100         StepVerifier.create(content)
101             .expectNext(SAMPLE_STRING)
102             .expectComplete()
103             .verify();
104         server.disposeNow();
105     }
106     @Test
107     void errorGetRequest() {
108         DisposableServer server = createInvalidServer();
109         HttpClient httpClient = createHttpClientForContextWithAddress(server, connectionProvider);
110         CloudHttpClient cloudHttpClient = new CloudHttpClient(httpClient);
111
112         Mono<String> content = cloudHttpClient.get(SAMPLE_URL, String.class);
113
114         StepVerifier.create(content)
115             .expectError()
116             .verify();
117         server.disposeNow();
118     }
119
120     private Map<String, String> createCustomHeaders() {
121         Map<String, String> customHeaders = new HashMap<>();
122         customHeaders.put("X_INVOCATION_ID", UUID.randomUUID().toString());
123
124         return customHeaders;
125     }
126
127     private DisposableServer createValidServer() {
128         Mono<String> response = Mono.just(SAMPLE_STRING);
129         return HttpServer.create()
130             .handle((req, resp) -> resp.sendString(response))
131             .wiretap(true)
132             .bindNow();
133     }
134
135     private DisposableServer createInvalidServer() {
136         return HttpServer.create()
137             .handle((req, resp) -> Mono.error(new Exception("returnError")))
138             .wiretap(true)
139             .bindNow();
140     }
141
142     private RequestDiagnosticContext createRequestDiagnosticContext() {
143         return ImmutableRequestDiagnosticContext.builder()
144             .invocationId(UUID.randomUUID()).requestId(UUID.randomUUID()).build();
145     }
146
147     private HttpClient createHttpClientForContextWithAddress(DisposableServer disposableServer,
148         ConnectionProvider connectionProvider) {
149         HttpClient client = connectionProvider == null? HttpClient.create() : HttpClient.create(connectionProvider);
150         return client.addressSupplier(disposableServer::address).wiretap(true);
151     }
152 }