diff options
author | Marcin Migdal <marcin.migdal@nokia.com> | 2019-02-22 18:05:35 +0100 |
---|---|---|
committer | Marcin Migdal <marcin.migdal@nokia.com> | 2019-02-26 15:01:27 +0100 |
commit | 95f179eb1e2144a47f5cf436d70a786c6dc6cb6c (patch) | |
tree | 4e9f328b99f3f2bfb2a2d1938c0ed80efee966ae /rest-services/cbs-client/src | |
parent | 16fbc0ca40d4a385f169c442f515ccfeeff1f99c (diff) |
Remove Spring stuff from CBS
Change-Id: I68f4e1f398505b94023acb0999450b67906029b4
Issue-ID: DCAEGEN2-1245
Signed-off-by: Marcin Migdal <marcin.migdal@nokia.com>
Diffstat (limited to 'rest-services/cbs-client/src')
3 files changed, 42 insertions, 109 deletions
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 |