From 95f179eb1e2144a47f5cf436d70a786c6dc6cb6c Mon Sep 17 00:00:00 2001 From: Marcin Migdal Date: Fri, 22 Feb 2019 18:05:35 +0100 Subject: Remove Spring stuff from CBS Change-Id: I68f4e1f398505b94023acb0999450b67906029b4 Issue-ID: DCAEGEN2-1245 Signed-off-by: Marcin Migdal --- rest-services/cbs-client/pom.xml | 57 +++------------ .../client/http/configuration/CloudHttpClient.java | 70 +++++++++++-------- .../http/configuration/CloudHttpClientTest.java | 80 ---------------------- .../org.mockito.plugins.MockMaker | 1 + 4 files changed, 53 insertions(+), 155 deletions(-) delete mode 100644 rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClientTest.java create mode 100644 rest-services/cbs-client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker (limited to 'rest-services/cbs-client') 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,53 +19,17 @@ Config Binding Service Rest Services Module jar - - 1.1.2-SNAPSHOT - - org.onap.dcaegen2.services.sdk.rest.services common-dependency - ${common-dependency.version} - - - org.springframework - spring-webflux - - - org.springframework - spring-context - - - org.immutables - value - - - org.immutables - gson + ${project.version} io.vavr vavr - - io.projectreactor - reactor-core - - - ch.qos.logback - logback-classic - - - org.slf4j - jul-to-slf4j - - - org.slf4j - log4j-over-slf4j - org.jetbrains annotations @@ -76,15 +40,16 @@ mockito-core test - - org.junit.jupiter - junit-jupiter-engine - test - - - org.assertj - assertj-core - + + org.junit.jupiter + junit-jupiter-engine + test + + + org.assertj + assertj-core + test + io.projectreactor reactor-test 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 Przemysław Wąsala 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 Mono callHttpGet(String url, Class 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 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 Mono getJsonFromRequest(String body, Class 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 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 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 Przemysław Wąsala 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 -- cgit 1.2.3-korg