Remove Spring stuff from CBS 30/79030/5
authorMarcin Migdal <marcin.migdal@nokia.com>
Fri, 22 Feb 2019 17:05:35 +0000 (18:05 +0100)
committerMarcin Migdal <marcin.migdal@nokia.com>
Tue, 26 Feb 2019 14:01:27 +0000 (15:01 +0100)
Change-Id: I68f4e1f398505b94023acb0999450b67906029b4
Issue-ID: DCAEGEN2-1245
Signed-off-by: Marcin Migdal <marcin.migdal@nokia.com>
rest-services/aai-client/pom.xml
rest-services/cbs-client/pom.xml
rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClient.java
rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/http/configuration/CloudHttpClientTest.java [deleted file]
rest-services/cbs-client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker [new file with mode: 0644]
rest-services/common-dependency/pom.xml
rest-services/dmaap-client/pom.xml
rest-services/pom.xml

index 2da34f3..d3805fd 100644 (file)
@@ -13,7 +13,7 @@
 
   <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
   <artifactId>aai-client</artifactId>
-  <version>1.1.2-SNAPSHOT</version>
+  <version>1.1.3-SNAPSHOT</version>
 
   <name>dcaegen2-services-sdk-rest-services-aai-client</name>
   <description>Active and Available Inventory Rest Services Module</description>
index b130691..9766ed5 100644 (file)
   <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>
       <artifactId>vavr
       </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>
       <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>
index f3177e4..d97edb3 100644 (file)
@@ -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 (file)
index e3e7a1d..0000000
+++ /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 (file)
index 0000000..ca6ee9c
--- /dev/null
@@ -0,0 +1 @@
+mock-maker-inline
\ No newline at end of file
index 1ba1780..335881d 100644 (file)
@@ -14,7 +14,7 @@
 
     <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
     <artifactId>common-dependency</artifactId>
-    <version>1.1.2-SNAPSHOT</version>
+    <version>1.1.3-SNAPSHOT</version>
 
     <name>dcaegen2-services-sdk-rest-services-common-dependency</name>
     <description>Common functionality in the project</description>
index e2fd1c3..b378d55 100644 (file)
@@ -13,7 +13,7 @@
 
   <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
   <artifactId>dmaap-client</artifactId>
-  <version>1.1.2-SNAPSHOT</version>
+  <version>1.1.3-SNAPSHOT</version>
 
   <name>dcaegen2-services-sdk-rest-services-dmaap-client</name>
   <description>DMaaP Rest Services Module</description>
index 31e25fb..2965904 100644 (file)
@@ -13,7 +13,7 @@
 
   <groupId>org.onap.dcaegen2.services.sdk</groupId>
   <artifactId>dcaegen2-services-sdk-rest-services</artifactId>
-  <version>1.1.2-SNAPSHOT</version>
+  <version>1.1.3-SNAPSHOT</version>
 
   <name>dcaegen2-services-sdk-rest-services</name>
   <description>Common SDK repo for all DCAE Services (R4)</description>