Write unit tests for MR Subscriber 90/87890/1
authorkjaniak <kornel.janiak@nokia.com>
Thu, 16 May 2019 14:53:14 +0000 (16:53 +0200)
committerkjaniak <kornel.janiak@nokia.com>
Thu, 16 May 2019 14:54:46 +0000 (16:54 +0200)
Change-Id: I9ce78cc74898ded8ba6b01513cca9463cb78c345
Issue-ID: DCAEGEN2-1422
Signed-off-by: kjaniak <kornel.janiak@nokia.com>
rest-services/dmaap-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/dmaap/client/impl/MessageRouterSubscriberImpl.java
rest-services/dmaap-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/dmaap/client/impl/MessageRouterPublisherImplTest.java
rest-services/dmaap-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/dmaap/client/impl/MessageRouterSubscriberImplTest.java

index 2f49ddf..2f2e421 100644 (file)
@@ -60,6 +60,14 @@ public class MessageRouterSubscriberImpl implements MessageRouterSubscriber {
     }
 
 
+    private @NotNull HttpRequest buildGetHttpRequest(MessageRouterSubscribeRequest request) {
+        return ImmutableHttpRequest.builder()
+                .method(HttpMethod.GET)
+                .url(buildSubscribeUrl(request))
+                .diagnosticContext(request.diagnosticContext().withNewInvocationId())
+                .build();
+    }
+
     private @NotNull MessageRouterSubscribeResponse buildGetResponse(HttpResponse httpResponse) {
         final ImmutableMessageRouterSubscribeResponse.Builder builder =
                 ImmutableMessageRouterSubscribeResponse.builder();
@@ -69,14 +77,6 @@ public class MessageRouterSubscriberImpl implements MessageRouterSubscriber {
     }
 
 
-    private @NotNull HttpRequest buildGetHttpRequest(MessageRouterSubscribeRequest request) {
-        return ImmutableHttpRequest.builder()
-                .method(HttpMethod.GET)
-                .url(buildSubscribeUrl(request))
-                .diagnosticContext(request.diagnosticContext().withNewInvocationId())
-                .build();
-    }
-
     private String buildSubscribeUrl(MessageRouterSubscribeRequest request) {
         return String.format("%s/%s/%s", request.sourceDefinition().topicUrl(), request.consumerGroup(),
                 request.consumerId());
index 103b480..f0138d2 100644 (file)
@@ -77,7 +77,7 @@ class MessageRouterPublisherImplTest {
             .statusCode(200)
             .statusReason("OK")
             .url(sinkDefinition.topicUrl())
-            .rawBody("{}".getBytes())
+            .rawBody("[]".getBytes())
             .build();
 
     @Test
index c958720..ef2cb5e 100644 (file)
 
 package org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.impl;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.BDDMockito.given;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 
-import com.google.gson.JsonPrimitive;
-import org.junit.jupiter.api.Disabled;
+import com.google.gson.JsonSyntaxException;
 import org.junit.jupiter.api.Test;
-import org.onap.dcaegen2.services.sdk.model.streams.dmaap.MessageRouterSink;
+import org.mockito.ArgumentCaptor;
+import org.onap.dcaegen2.services.sdk.model.streams.dmaap.ImmutableMessageRouterSource;
 import org.onap.dcaegen2.services.sdk.model.streams.dmaap.MessageRouterSource;
+import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.*;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterSubscriber;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.DmaapResponse;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterPublishRequest;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterSubscribeRequest;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeResponse;
-import reactor.core.publisher.Flux;
+import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterSubscriberConfig;
+import reactor.core.publisher.Mono;
 
 /**
  * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
- * @since March 2019
+ * @since May 2019
  */
-// TODO: Write proper unit tests
-@Disabled
 class MessageRouterSubscriberImplTest {
 
-    private final MessageRouterSubscriber cut = mock(MessageRouterSubscriber.class);
-    private final MessageRouterSource sinkDefinition = mock(MessageRouterSource.class);
-    private final MessageRouterSubscribeRequest request = ImmutableMessageRouterSubscribeRequest.builder()
-            .sourceDefinition(sinkDefinition)
+    private final RxHttpClient httpClient = mock(RxHttpClient.class);
+    private final MessageRouterSubscriberConfig clientConfig = MessageRouterSubscriberConfig.createDefault();
+    private final MessageRouterSubscriber cut = new MessageRouterSubscriberImpl(httpClient, clientConfig.gsonInstance());
+
+    private final ArgumentCaptor<HttpRequest> httpRequestArgumentCaptor = ArgumentCaptor.forClass(HttpRequest.class);
+    private final MessageRouterSource sourceDefinition = ImmutableMessageRouterSource.builder()
+            .name("sample topic")
+            .topicUrl("https://dmaap-mr/TOPIC")
+            .build();
+    private final MessageRouterSubscribeRequest mrRequest = ImmutableMessageRouterSubscribeRequest.builder()
+            .consumerGroup("SAMPLE-GROUP")
+            .sourceDefinition(sourceDefinition)
+            .build();
+    private final HttpResponse httpResponse = ImmutableHttpResponse.builder()
+            .statusCode(200)
+            .statusReason("OK")
+            .url(sourceDefinition.topicUrl())
+            .rawBody("[]".getBytes())
+            .build();
+    private final HttpResponse httpResponseWithWrongStatusCode = ImmutableHttpResponse.builder()
+            .statusCode(301)
+            .statusReason("Something braked")
+            .url(sourceDefinition.topicUrl())
+            .rawBody("[]".getBytes())
+            .build();
+    private final HttpResponse httpResponseWithIncorrectJson = ImmutableHttpResponse.builder()
+            .statusCode(200)
+            .statusReason("OK")
+            .url(sourceDefinition.topicUrl())
+            .rawBody("{}".getBytes())
             .build();
 
     @Test
-    void getShouldBeUsable() {
-        cut.get(request)
-                .filter(DmaapResponse::successful)
-                .map(MessageRouterSubscribeResponse::items)
-                .subscribe(System.out::println);
+    void getWithProperRequest_shouldReturnCorrectResponse() {
+        // given
+        given(httpClient.call(any(HttpRequest.class))).willReturn(Mono.just(httpResponse));
+
+        // when
+        final Mono<MessageRouterSubscribeResponse> responses = cut
+                .get(mrRequest);
+        final MessageRouterSubscribeResponse response = responses.block();
+
+        // then
+        assertThat(response.successful()).isTrue();
+        assertThat(response.failReason()).isNull();
+        assertThat(response.hasElements()).isFalse();
+
+
+        verify(httpClient).call(httpRequestArgumentCaptor.capture());
+        final HttpRequest httpRequest = httpRequestArgumentCaptor.getValue();
+        assertThat(httpRequest.method()).isEqualTo(HttpMethod.GET);
+        assertThat(httpRequest.url()).isEqualTo(String.format("%s/%s/%s", sourceDefinition.topicUrl(),
+                mrRequest.consumerGroup(), mrRequest.consumerId()));
+        assertThat(httpRequest.body()).isNull();
     }
 
     @Test
-    void getElementsShouldBeUsable() {
-        cut.getElements(request)
-                .collectList()
-                .subscribe(System.out::println);
+    void getWithProperRequestButNotSuccessfulHttpRequest_shouldReturnMonoWithFailReason() {
+        // given
+        given(httpClient.call(any(HttpRequest.class))).willReturn(Mono.just(httpResponseWithWrongStatusCode));
+
+        // when
+        final Mono<MessageRouterSubscribeResponse> responses = cut
+                .get(mrRequest);
+        final MessageRouterSubscribeResponse response = responses.block();
+
+        // then
+        assertThat(response.failed()).isTrue();
+        assertThat(response.failReason()).
+                isEqualTo(String.format("%d %s%n%s", httpResponseWithWrongStatusCode.statusCode(),
+                        httpResponseWithWrongStatusCode.statusReason(),
+                        httpResponseWithWrongStatusCode.bodyAsString()));
+    }
+
+    @Test
+    void getWithImproperRawBody_shouldThrowNPE() {
+        // given
+        given(httpClient.call(any(HttpRequest.class))).willReturn(Mono.just(httpResponseWithIncorrectJson));
+
+        // when
+        // then
+        assertThatExceptionOfType(JsonSyntaxException.class).isThrownBy(() -> cut.get(mrRequest).block());
     }
 }
\ No newline at end of file