diff options
Diffstat (limited to 'rest-services/cbs-client')
4 files changed, 53 insertions, 155 deletions
diff --git a/rest-services/cbs-client/pom.xml b/rest-services/cbs-client/pom.xml index b1306919..9766ed58 100644 --- a/rest-services/cbs-client/pom.xml +++ b/rest-services/cbs-client/pom.xml @@ -19,31 +19,11 @@ <description>Config Binding Service Rest Services Module</description> <packaging>jar</packaging> - <properties> - <common-dependency.version>1.1.2-SNAPSHOT</common-dependency.version> - </properties> - <dependencies> <dependency> <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId> <artifactId>common-dependency</artifactId> - <version>${common-dependency.version}</version> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-webflux</artifactId> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-context</artifactId> - </dependency> - <dependency> - <groupId>org.immutables</groupId> - <artifactId>value</artifactId> - </dependency> - <dependency> - <groupId>org.immutables</groupId> - <artifactId>gson</artifactId> + <version>${project.version}</version> </dependency> <dependency> <groupId>io.vavr</groupId> @@ -51,22 +31,6 @@ </artifactId> </dependency> <dependency> - <groupId>io.projectreactor</groupId> - <artifactId>reactor-core</artifactId> - </dependency> - <dependency> - <groupId>ch.qos.logback</groupId> - <artifactId>logback-classic</artifactId> - </dependency> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>jul-to-slf4j</artifactId> - </dependency> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>log4j-over-slf4j</artifactId> - </dependency> - <dependency> <groupId>org.jetbrains</groupId> <artifactId>annotations</artifactId> </dependency> @@ -76,15 +40,16 @@ <artifactId>mockito-core</artifactId> <scope>test</scope> </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-engine</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.assertj</groupId> - <artifactId>assertj-core</artifactId> - </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <scope>test</scope> + </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> diff --git a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClient.java b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClient.java index f3177e4c..d97edb3b 100644 --- a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClient.java +++ b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClient.java @@ -22,13 +22,15 @@ package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.http.configurati import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; +import java.util.function.BiConsumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.web.reactive.function.client.ClientResponse; -import org.springframework.web.reactive.function.client.ExchangeFilterFunction; -import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import reactor.netty.Connection; +import reactor.netty.http.client.HttpClient; +import reactor.netty.http.client.HttpClientRequest; +import reactor.netty.http.client.HttpClientResponse; + /** * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 11/15/18 @@ -39,31 +41,39 @@ public class CloudHttpClient { private static final Logger LOGGER = LoggerFactory.getLogger(CloudHttpClient.class); private final Gson gson; - private final WebClient webClient; + private final HttpClient httpClient; + public CloudHttpClient() { - this(WebClient.builder().filter(logRequest()).filter(logResponse()).build()); + this(HttpClient.create().doOnRequest(logRequest()).doOnResponse(logResponse())); } - CloudHttpClient(WebClient webClient) { + + CloudHttpClient(HttpClient httpClient) { this.gson = new Gson(); - this.webClient = webClient; + this.httpClient = httpClient; } + public <T> Mono<T> callHttpGet(String url, Class<T> genericClassDeclaration) { - return webClient + return httpClient + .baseUrl(url) + .doOnResponseError(doOnError()) .get() - .uri(url) - .retrieve() - .onStatus(HttpStatus::is4xxClientError, response -> Mono.error(getException(response))) - .onStatus(HttpStatus::is5xxServerError, response -> Mono.error(getException(response))) - .bodyToMono(String.class) - .flatMap(body -> getJsonFromRequest(body, genericClassDeclaration)); + .responseSingle( + (httpClientResponse, content) -> getJsonFromRequest(content.toString(), genericClassDeclaration)); + } + + private BiConsumer<HttpClientResponse, Throwable> doOnError() { + return (httpClientResponse, throwable) -> { + Mono.error(getException(httpClientResponse)); + }; } - private RuntimeException getException(ClientResponse response) { + + private RuntimeException getException(HttpClientResponse response) { return new RuntimeException(String.format("Request for cloud config failed: HTTP %d", - response.statusCode().value())); + response.status().code())); } private <T> Mono<T> getJsonFromRequest(String body, Class<T> genericClassDeclaration) { @@ -78,20 +88,22 @@ public class CloudHttpClient { return gson.fromJson(body, genericClassDeclaration); } - private static ExchangeFilterFunction logResponse() { - return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> { - LOGGER.info("Response status {}", clientResponse.statusCode()); - return Mono.just(clientResponse); - }); + + private static BiConsumer<HttpClientRequest, Connection> logRequest() { + return (httpClientRequest, connection) -> { + LOGGER.debug("Request: {} {}", httpClientRequest.method(), httpClientRequest.uri()); + httpClientRequest.requestHeaders().forEach(stringStringEntry -> { + LOGGER.trace("{}={}", stringStringEntry.getKey(), stringStringEntry.getValue()); + }); + + }; } - private static ExchangeFilterFunction logRequest() { - return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> { - LOGGER.info("Request: {} {}", clientRequest.method(), clientRequest.url()); - clientRequest.headers() - .forEach((name, values) -> values.forEach(value -> LOGGER.info("{}={}", name, value))); - return Mono.just(clientRequest); - }); + private static BiConsumer<? super HttpClientResponse, ? super Connection> logResponse() { + return (httpClientresponse, connection) -> { + LOGGER.debug("Response status: {}", httpClientresponse.status()); + }; } + } diff --git a/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClientTest.java b/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClientTest.java deleted file mode 100644 index e3e7a1d3..00000000 --- a/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClientTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * DCAEGEN2-SERVICES-SDK - * ================================================================================ - * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.http.configuration; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonSyntaxException; -import org.junit.jupiter.api.Test; -import org.springframework.web.reactive.function.client.WebClient; -import reactor.core.publisher.Mono; -import reactor.test.StepVerifier; - -/** - * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 11/16/18 - */ -class CloudHttpClientTest { - - private static final String SOMEURL = "http://someurl"; - private static final String DATA = "{}"; - private Gson gson = new Gson(); - private WebClient webClient = mock(WebClient.class); - private WebClient.RequestHeadersUriSpec requestBodyUriSpec = mock(WebClient.RequestBodyUriSpec.class); - private WebClient.ResponseSpec responseSpec = mock(WebClient.ResponseSpec.class); - - @Test - void shouldReturnJsonObjectOnGetCall() { - //given - mockWebClientDependantObject(); - CloudHttpClient httpGetClient = new CloudHttpClient(webClient); - when(responseSpec.bodyToMono(String.class)).thenReturn(Mono.just(DATA)); - - //when/then - StepVerifier.create(httpGetClient.callHttpGet(SOMEURL, JsonObject.class)).expectSubscription() - .expectNext(gson.fromJson(DATA, JsonObject.class)).verifyComplete(); - } - - @Test - void shouldReturnMonoErrorOnGetCall() { - //given - mockWebClientDependantObject(); - CloudHttpClient httpGetClient = new CloudHttpClient(webClient); - when(responseSpec.bodyToMono(String.class)).thenReturn(Mono.just("some wrong data")); - - //when/then - StepVerifier.create(httpGetClient.callHttpGet(SOMEURL, JsonObject.class)).expectSubscription() - .expectError(JsonSyntaxException.class).verify(); - } - - - private void mockWebClientDependantObject() { - doReturn(requestBodyUriSpec).when(webClient).get(); - when(requestBodyUriSpec.uri(SOMEURL)).thenReturn(requestBodyUriSpec); - doReturn(responseSpec).when(requestBodyUriSpec).retrieve(); - doReturn(responseSpec).when(responseSpec).onStatus(any(), any()); - doReturn(responseSpec).when(responseSpec).onStatus(any(), any()); - } -}
\ No newline at end of file diff --git a/rest-services/cbs-client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/rest-services/cbs-client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..ca6ee9ce --- /dev/null +++ b/rest-services/cbs-client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline
\ No newline at end of file |