Added tests for DmaapPublisherTask 45/48045/2
authorwasala <przemyslaw.wasala@nokia.com>
Thu, 17 May 2018 12:28:01 +0000 (14:28 +0200)
committerwasala <przemyslaw.wasala@nokia.com>
Thu, 17 May 2018 13:11:00 +0000 (15:11 +0200)
Change-Id: I2c265879bffd20e17dd8da981a4111cf2e10c375
Issue-ID: DCAEGEN2-396
Signed-off-by: wasala <przemyslaw.wasala@nokia.com>
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapConsumerTaskImpl.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImpl.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/DmaapProducerTaskSpy.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImplTest.java [new file with mode: 0644]

index d5cf91d..dc868b3 100644 (file)
@@ -70,15 +70,15 @@ public class DmaapConsumerTaskImpl extends
         prhAppConfig.initFileStreamReader();
     }
 
-    protected void setDmaapClientConfig() {
-        extendedDmaapConsumerHttpClient = resolveClient();
-    }
-
     @Override
     DmaapConsumerConfiguration resolveConfiguration() {
         return prhAppConfig.getDmaapConsumerConfiguration();
     }
 
+    protected void setDmaapClientConfig() {
+        extendedDmaapConsumerHttpClient = resolveClient();
+    }
+
     @Override
     protected ExtendedDmaapConsumerHttpClientImpl resolveClient() {
         return new ExtendedDmaapConsumerHttpClientImpl(resolveConfiguration());
index d03f806..6450b18 100644 (file)
  */
 package org.onap.dcaegen2.services.prh.tasks;
 
-import com.google.gson.Gson;
 import org.onap.dcaegen2.services.prh.config.DmaapPublisherConfiguration;
-import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
 import org.onap.dcaegen2.services.prh.configuration.Config;
 import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
 import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
+import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
 import org.onap.dcaegen2.services.prh.service.producer.ExtendedDmaapProducerHttpClientImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,8 +40,8 @@ public class DmaapPublisherTaskImpl extends
     DmaapPublisherTask<ExtendedDmaapProducerHttpClientImpl, ConsumerDmaapModel, DmaapPublisherConfiguration> {
 
     private static final Logger logger = LoggerFactory.getLogger(DmaapPublisherTaskImpl.class);
-    private static final Gson gson = new Gson();
     private final Config prhAppConfig;
+    private ExtendedDmaapProducerHttpClientImpl extendedDmaapProducerHttpClient;
 
     @Autowired
     public DmaapPublisherTaskImpl(AppConfig prhAppConfig) {
@@ -52,17 +51,15 @@ public class DmaapPublisherTaskImpl extends
     @Override
     protected String publish(ConsumerDmaapModel consumerDmaapModel) throws DmaapNotFoundException {
         logger.trace("Method called with arg {}", consumerDmaapModel);
-        ExtendedDmaapProducerHttpClientImpl dmaapProducerHttpClient = new ExtendedDmaapProducerHttpClientImpl(
-            resolveConfiguration());
-
-        return dmaapProducerHttpClient.getHttpProducerResponse(consumerDmaapModel)
-            .filter(x -> !x.isEmpty() && x.equals(String.valueOf(HttpStatus.OK.value())))
+        return extendedDmaapProducerHttpClient.getHttpProducerResponse(consumerDmaapModel)
+            .filter(response -> !response.isEmpty() && response.equals(String.valueOf(HttpStatus.OK.value())))
             .orElseThrow(() -> new DmaapNotFoundException("Incorrect response from Dmaap"));
     }
 
     @Override
     public Object execute(Object object) throws PrhTaskException {
         if (object instanceof ConsumerDmaapModel) {
+            setDmaapClientConfig();
             logger.trace("Method called with arg {}", object);
             return publish((ConsumerDmaapModel) object);
         }
@@ -78,4 +75,8 @@ public class DmaapPublisherTaskImpl extends
     protected ExtendedDmaapProducerHttpClientImpl resolveClient() {
         return null;
     }
+
+    protected void setDmaapClientConfig() {
+        extendedDmaapProducerHttpClient = resolveClient();
+    }
 }
\ No newline at end of file
index 10f4900..b2b97cf 100644 (file)
  */
 package org.onap.dcaegen2.services.prh.tasks;
 
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import org.onap.dcaegen2.services.prh.config.DmaapPublisherConfiguration;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
+import org.onap.dcaegen2.services.prh.service.producer.ExtendedDmaapProducerHttpClientImpl;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
@@ -35,12 +37,16 @@ import org.springframework.context.annotation.Primary;
 @Configuration
 public class DmaapProducerTaskSpy {
 
-
     @Bean
     @Primary
     public Task registerSimpleDmaapPublisherTask() {
-        AppConfig appConfig = mock(AppConfig.class);
-        when(appConfig.getDmaapPublisherConfiguration()).thenReturn(mock(DmaapPublisherConfiguration.class));
-        return spy(new DmaapPublisherTaskImpl(appConfig));
+        AppConfig appConfig = spy(AppConfig.class);
+        doReturn(mock(DmaapPublisherConfiguration.class)).when(appConfig).getDmaapPublisherConfiguration();
+        DmaapPublisherTaskImpl dmaapPublisherTask = spy(new DmaapPublisherTaskImpl(appConfig));
+        ExtendedDmaapProducerHttpClientImpl extendedDmaapProducerHttpClient = mock(
+            ExtendedDmaapProducerHttpClientImpl.class);
+        doReturn(mock(DmaapPublisherConfiguration.class)).when(dmaapPublisherTask).resolveConfiguration();
+        doReturn(extendedDmaapProducerHttpClient).when(dmaapPublisherTask).resolveClient();
+        return dmaapPublisherTask;
     }
 }
diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImplTest.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImplTest.java
new file mode 100644 (file)
index 0000000..e460919
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PROJECT
+ * ================================================================================
+ * 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.prh.tasks;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.util.Optional;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.prh.config.DmaapPublisherConfiguration;
+import org.onap.dcaegen2.services.prh.config.ImmutableDmaapPublisherConfiguration;
+import org.onap.dcaegen2.services.prh.configuration.AppConfig;
+import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
+import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
+import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
+import org.onap.dcaegen2.services.prh.service.producer.ExtendedDmaapProducerHttpClientImpl;
+import org.springframework.http.HttpStatus;
+
+/**
+ * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/17/18
+ */
+class DmaapPublisherTaskImplTest {
+
+    private static ConsumerDmaapModel consumerDmaapModel;
+    private static DmaapPublisherTaskImpl dmaapPublisherTask;
+    private static ExtendedDmaapProducerHttpClientImpl extendedDmaapProducerHttpClient;
+    private static AppConfig appConfig;
+    private static DmaapPublisherConfiguration dmaapPublisherConfiguration;
+
+    @BeforeAll
+    public static void setUp() {
+        dmaapPublisherConfiguration = new ImmutableDmaapPublisherConfiguration.Builder()
+            .dmaapContentType("application/json").dmaapHostName("54.45.33.2").dmaapPortNumber(1234)
+            .dmaapProtocol("https").dmaapUserName("PRH").dmaapUserPassword("PRH")
+            .dmaapTopicName("unauthenticated.SEC_OTHER_OUTPUT").build();
+        consumerDmaapModel = ImmutableConsumerDmaapModel.builder().ipv4("10.16.123.234")
+            .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
+            .pnfName("NOKQTFCOC540002E").build();
+        appConfig = mock(AppConfig.class);
+    }
+
+    @Test
+    public void whenPassedObjectDoesntFit_ThrowsPrhTaskException() throws IOException {
+        //given
+        Object response = null;
+
+        //when
+        when(appConfig.getDmaapPublisherConfiguration()).thenReturn(dmaapPublisherConfiguration);
+        try {
+            dmaapPublisherTask = new DmaapPublisherTaskImpl(appConfig);
+            response = dmaapPublisherTask.execute("");
+        } catch (PrhTaskException e) {
+            e.printStackTrace();
+        }
+
+        //then
+        Assertions.assertNull(response);
+    }
+
+    @Test
+    public void whenPassedObjectFits_ReturnsCorrectStatus() throws PrhTaskException {
+        //given
+        Object response;
+        extendedDmaapProducerHttpClient = mock(ExtendedDmaapProducerHttpClientImpl.class);
+
+        //when
+        when(extendedDmaapProducerHttpClient.getHttpProducerResponse(consumerDmaapModel))
+            .thenReturn(Optional.of(HttpStatus.OK.toString()));
+        when(appConfig.getDmaapPublisherConfiguration()).thenReturn(dmaapPublisherConfiguration);
+        dmaapPublisherTask = spy(new DmaapPublisherTaskImpl(appConfig));
+        when(dmaapPublisherTask.resolveConfiguration()).thenReturn(dmaapPublisherConfiguration);
+        doReturn(extendedDmaapProducerHttpClient).when(dmaapPublisherTask).resolveClient();
+        response = dmaapPublisherTask.execute(consumerDmaapModel);
+
+        //then
+        verify(extendedDmaapProducerHttpClient, times(1))
+            .getHttpProducerResponse(any(ConsumerDmaapModel.class));
+        verifyNoMoreInteractions(extendedDmaapProducerHttpClient);
+        Assertions.assertNotNull(response);
+        Assertions.assertEquals(HttpStatus.OK.toString(), response);
+    }
+
+    @Test
+    public void whenPassedObjectFits_butIncorrectResponseReturns() {
+        //given
+        Object response = null;
+        extendedDmaapProducerHttpClient = mock(ExtendedDmaapProducerHttpClientImpl.class);
+        //when
+        when(extendedDmaapProducerHttpClient.getHttpProducerResponse(consumerDmaapModel))
+            .thenReturn(Optional.of("400"));
+        when(appConfig.getDmaapPublisherConfiguration()).thenReturn(dmaapPublisherConfiguration);
+        dmaapPublisherTask = spy(new DmaapPublisherTaskImpl(appConfig));
+        when(dmaapPublisherTask.resolveConfiguration()).thenReturn(dmaapPublisherConfiguration);
+        doReturn(extendedDmaapProducerHttpClient).when(dmaapPublisherTask).resolveClient();
+        try {
+            response = dmaapPublisherTask.execute(consumerDmaapModel);
+        } catch (PrhTaskException e) {
+            e.printStackTrace();
+        }
+
+        //then
+        verify(extendedDmaapProducerHttpClient, times(1)).getHttpProducerResponse(any(ConsumerDmaapModel.class));
+        verifyNoMoreInteractions(extendedDmaapProducerHttpClient);
+        Assertions.assertNull(response);
+    }
+}
\ No newline at end of file