Added dmaap consumer task execution to workflow 87/46587/14
authorwasala <przemyslaw.wasala@nokia.com>
Tue, 8 May 2018 11:48:44 +0000 (13:48 +0200)
committerwasala <przemyslaw.wasala@nokia.com>
Wed, 9 May 2018 12:20:35 +0000 (14:20 +0200)
Change-Id: I67904a8ffb7d401fa2188fb046e28474eded4377
Issue-ID: DCAEGEN2-474
Signed-off-by: wasala <przemyslaw.wasala@nokia.com>
29 files changed:
pom.xml
prh-app-server/config/prh_endpoints.json
prh-app-server/pom.xml
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/AppConfig.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/configuration/PrhAppConfig.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/HeartbeatController.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/exceptions/PrhTaskException.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java [new file with mode: 0644]
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParser.java [new file with mode: 0644]
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskImpl.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIProducerTask.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AAIProducerTaskImpl.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapConsumerTask.java
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/DmaapPublisherTask.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImpl.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/ScheduledTasks.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/Task.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParserTest.java [new file with mode: 0644]
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIConsumerTaskSpy.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/AAIPublisherTaskSpy.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/ScheduleControllerSpy.java
prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/config/DmaapPublisherConfiguration.java
prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/consumer/ExtendedDmaapConsumerHttpClientImpl.java
prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/DmaapPublisherRequestDetails.java
prh-dmaap-client/src/main/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImpl.java
prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/service/consumer/ExtendedDmaapConsumerHttpClientImplTest.java
prh-dmaap-client/src/test/java/org/onap/dcaegen2/services/service/producer/ExtendedDmaapProducerHttpClientImplTest.java

diff --git a/pom.xml b/pom.xml
index 37c742f..2f750fc 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -53,6 +53,7 @@
     <compiler.plugin.version>3.7.0</compiler.plugin.version>
     <tomcat.version>8.5.28</tomcat.version>
     <docker.maven.version>1.0.0</docker.maven.version>
+    <resource.maven.plugin.version>3.1.0</resource.maven.plugin.version>
     <!-- DEVELOPMENT SETTINGS -->
     <immutable.version>2.5.6</immutable.version>
 
           <artifactId>maven-surefire-plugin</artifactId>
           <version>2.19.1</version>
           <configuration>
-            <skipTests>false</skipTests>
             <argLine>-Xmx2048m -Djava.awt.headless=true -XX:+UseConcMarkSweepGC
               -XX:OnOutOfMemoryError="kill -9 %p" -XX:+HeapDumpOnOutOfMemoryError
             </argLine>
             <skipDockerBuild>true</skipDockerBuild>
           </configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>${resource.maven.plugin.version}</version>
+        </plugin>
       </plugins>
     </pluginManagement>
     <plugins>
         <artifactId>docker-maven-plugin</artifactId>
         <version>${docker.maven.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>${resource.maven.plugin.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.bouncycastle</groupId>
         <artifactId>bcprov-jdk15on</artifactId>
index dcfbab3..2e709e9 100644 (file)
@@ -2,26 +2,26 @@
   "configs": {
     "dmaap": {
       "dmaapConsumerConfiguration": {
-        "dmmapHostName": "localhost",
-        "dmmapPortNumber": 2222,
-        "dmmapTopicName": "temp",
-        "dmmapProtocol": "http",
-        "dmmapUserName": "admin",
-        "dmmapUserPassword": "admin",
-        "dmmapContentType": "application/json",
+        "dmaapHostName": "localhost",
+        "dmaapPortNumber": 2222,
+        "dmaapTopicName": "temp",
+        "dmaapProtocol": "http",
+        "dmaapUserName": "admin",
+        "dmaapUserPassword": "admin",
+        "dmaapContentType": "application/json",
         "consumerId": "1",
         "consumerGroup": "other",
         "timeoutMS": 1000,
-        "message-limit": 1000
+        "messageLimit": 1000
       },
       "dmaapProducerConfiguration": {
-        "dmmapHostName": "localhost",
-        "dmmapPortNumber": 2223,
-        "dmmapTopicName": "temp",
-        "dmmapProtocol": "http",
-        "dmmapUserName": "admin",
-        "dmmapUserPassword": "admin",
-        "dmmapContentType": "application/json"
+        "dmaapHostName": "localhost",
+        "dmaapPortNumber": 2223,
+        "dmaapTopicName": "temp",
+        "dmaapProtocol": "http",
+        "dmaapUserName": "admin",
+        "dmaapUserPassword": "admin",
+        "dmaapContentType": "application/json"
       }
     },
     "aai": {
index 668b729..f9d53c2 100644 (file)
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>custom-resources</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/config</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${project.basedir}/config</directory>
+                  <filtering>true</filtering>
+                </resource>
+              </resources>
+              <encoding>UTF-8</encoding>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
       <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
       <groupId>org.apache.tomcat.embed</groupId>
       <artifactId>tomcat-embed-websocket</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.immutables</groupId>
+      <artifactId>value</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.immutables</groupId>
+      <artifactId>gson</artifactId>
+    </dependency>
 
     <!-- LOGGING DEPENDENCIES-->
     <dependency>
       <artifactId>prh-dmaap-client</artifactId>
       <version>${project.parent.version}</version>
     </dependency>
-      <dependency>
-          <groupId>org.onap.dcaegen2.services.prh</groupId>
-          <artifactId>prh-aai-client</artifactId>
-          <version>1.0.0-SNAPSHOT</version>
-      </dependency>
+
     <!--REQUIRED TO GENERATE DOCUMENTATION -->
     <dependency>
       <groupId>io.springfox</groupId>
       <artifactId>springfox-swagger-ui</artifactId>
     </dependency>
 
+    <dependency>
+      <groupId>org.onap.dcaegen2.services.prh</groupId>
+      <artifactId>prh-aai-client</artifactId>
+      <version>1.0.0-SNAPSHOT</version>
+    </dependency>
+
   </dependencies>
   <dependencyManagement>
     <dependencies>
index 15db50e..fba8985 100644 (file)
@@ -109,63 +109,63 @@ public class AppConfig extends PrhAppConfig {
     @Override
     public DmaapConsumerConfiguration getDmaapConsumerConfiguration() {
         return new ImmutableDmaapConsumerConfiguration.Builder()
-                .dmaapUserPassword(
-                        Optional.ofNullable(consumerDmaapUserPassword).orElse(dmaapConsumerConfiguration.dmaapUserPassword()))
-                .dmaapUserName(
-                        Optional.ofNullable(consumerDmaapUserName).orElse(dmaapConsumerConfiguration.dmaapUserName()))
-                .dmaapHostName(
-                        Optional.ofNullable(consumerDmaapHostName).orElse(dmaapConsumerConfiguration.dmaapHostName()))
-                .dmaapPortNumber(
-                        Optional.ofNullable(consumerDmaapPortNumber).orElse(dmaapConsumerConfiguration.dmaapPortNumber()))
-                .dmaapProtocol(
-                        Optional.ofNullable(consumerDmaapProtocol).orElse(dmaapConsumerConfiguration.dmaapProtocol()))
-                .dmaapContentType(
-                        Optional.ofNullable(consumerDmaapContentType).orElse(dmaapConsumerConfiguration.dmaapContentType()))
-                .dmaapTopicName(
-                        Optional.ofNullable(consumerDmaapTopicName).orElse(dmaapConsumerConfiguration.dmaapTopicName()))
-                .messageLimit(
-                        Optional.ofNullable(consumerMessageLimit).orElse(dmaapConsumerConfiguration.messageLimit()))
-                .timeoutMS(Optional.ofNullable(consumerTimeoutMS).orElse(dmaapConsumerConfiguration.timeoutMS()))
-                .consumerGroup(Optional.ofNullable(consumerGroup).orElse(dmaapConsumerConfiguration.consumerGroup()))
-                .consumerId(Optional.ofNullable(consumerId).orElse(dmaapConsumerConfiguration.consumerId()))
-                .build();
+            .dmaapUserPassword(
+                Optional.ofNullable(consumerDmaapUserPassword).orElse(dmaapConsumerConfiguration.dmaapUserPassword()))
+            .dmaapUserName(
+                Optional.ofNullable(consumerDmaapUserName).orElse(dmaapConsumerConfiguration.dmaapUserName()))
+            .dmaapHostName(
+                Optional.ofNullable(consumerDmaapHostName).orElse(dmaapConsumerConfiguration.dmaapHostName()))
+            .dmaapPortNumber(
+                Optional.ofNullable(consumerDmaapPortNumber).orElse(dmaapConsumerConfiguration.dmaapPortNumber()))
+            .dmaapProtocol(
+                Optional.ofNullable(consumerDmaapProtocol).orElse(dmaapConsumerConfiguration.dmaapProtocol()))
+            .dmaapContentType(
+                Optional.ofNullable(consumerDmaapContentType).orElse(dmaapConsumerConfiguration.dmaapContentType()))
+            .dmaapTopicName(
+                Optional.ofNullable(consumerDmaapTopicName).orElse(dmaapConsumerConfiguration.dmaapTopicName()))
+            .messageLimit(
+                Optional.ofNullable(consumerMessageLimit).orElse(dmaapConsumerConfiguration.messageLimit()))
+            .timeoutMS(Optional.ofNullable(consumerTimeoutMS).orElse(dmaapConsumerConfiguration.timeoutMS()))
+            .consumerGroup(Optional.ofNullable(consumerGroup).orElse(dmaapConsumerConfiguration.consumerGroup()))
+            .consumerId(Optional.ofNullable(consumerId).orElse(dmaapConsumerConfiguration.consumerId()))
+            .build();
     }
 
     @Override
     public AAIClientConfiguration getAAIClientConfiguration() {
         return new ImmutableAAIClientConfiguration.Builder()
-                .aaiHost(Optional.ofNullable(aaiHost).orElse(aaiClientConfiguration.aaiHost()))
-                .aaiHostPortNumber(
-                        Optional.ofNullable(aaiHostPortNumber).orElse(aaiClientConfiguration.aaiHostPortNumber()))
-                .aaiIgnoreSSLCertificateErrors(
-                        Optional.ofNullable(aaiIgnoreSSLCertificateErrors)
-                                .orElse(aaiClientConfiguration.aaiIgnoreSSLCertificateErrors()))
-                .aaiProtocol(Optional.ofNullable(aaiProtocol).orElse(aaiClientConfiguration.aaiProtocol()))
-                .aaiUserName(
-                        Optional.ofNullable(aaiUserName).orElse(aaiClientConfiguration.aaiUserName()))
-                .aaiUserPassword(Optional.ofNullable(
-                        aaiUserPassword).orElse(aaiClientConfiguration.aaiUserPassword()))
-                .build();
+            .aaiHost(Optional.ofNullable(aaiHost).orElse(aaiClientConfiguration.aaiHost()))
+            .aaiHostPortNumber(
+                Optional.ofNullable(aaiHostPortNumber).orElse(aaiClientConfiguration.aaiHostPortNumber()))
+            .aaiIgnoreSSLCertificateErrors(
+                Optional.ofNullable(aaiIgnoreSSLCertificateErrors)
+                    .orElse(aaiClientConfiguration.aaiIgnoreSSLCertificateErrors()))
+            .aaiProtocol(Optional.ofNullable(aaiProtocol).orElse(aaiClientConfiguration.aaiProtocol()))
+            .aaiUserName(
+                Optional.ofNullable(aaiUserName).orElse(aaiClientConfiguration.aaiUserName()))
+            .aaiUserPassword(Optional.ofNullable(
+                aaiUserPassword).orElse(aaiClientConfiguration.aaiUserPassword()))
+            .build();
     }
 
     @Override
     public DmaapPublisherConfiguration getDmaapPublisherConfiguration() {
         return new ImmutableDmaapPublisherConfiguration.Builder()
-                .dmaapContentType(
-                        Optional.ofNullable(producerDmaapContentType).orElse(dmaapPublisherConfiguration.dmaapContentType()))
-                .dmaapHostName(
-                        Optional.ofNullable(producerDmaapHostName).orElse(dmaapPublisherConfiguration.dmaapHostName()))
-                .dmaapPortNumber(
-                        Optional.ofNullable(producerDmaapPortNumber).orElse(dmaapPublisherConfiguration.dmaapPortNumber()))
-                .dmaapProtocol(
-                        Optional.ofNullable(producerDmaapProtocol).orElse(dmaapPublisherConfiguration.dmaapProtocol()))
-                .dmaapTopicName(
-                        Optional.ofNullable(producerDmaapTopicName).orElse(dmaapPublisherConfiguration.dmaapTopicName()))
-                .dmaapUserName(
-                        Optional.ofNullable(producerDmaapUserName).orElse(dmaapPublisherConfiguration.dmaapUserName()))
-                .dmaapUserPassword(
-                        Optional.ofNullable(producerDmaapUserPassword).orElse(dmaapPublisherConfiguration.dmaapUserPassword()))
-                .build();
+            .dmaapContentType(
+                Optional.ofNullable(producerDmaapContentType).orElse(dmaapPublisherConfiguration.dmaapContentType()))
+            .dmaapHostName(
+                Optional.ofNullable(producerDmaapHostName).orElse(dmaapPublisherConfiguration.dmaapHostName()))
+            .dmaapPortNumber(
+                Optional.ofNullable(producerDmaapPortNumber).orElse(dmaapPublisherConfiguration.dmaapPortNumber()))
+            .dmaapProtocol(
+                Optional.ofNullable(producerDmaapProtocol).orElse(dmaapPublisherConfiguration.dmaapProtocol()))
+            .dmaapTopicName(
+                Optional.ofNullable(producerDmaapTopicName).orElse(dmaapPublisherConfiguration.dmaapTopicName()))
+            .dmaapUserName(
+                Optional.ofNullable(producerDmaapUserName).orElse(dmaapPublisherConfiguration.dmaapUserName()))
+            .dmaapUserPassword(
+                Optional.ofNullable(producerDmaapUserPassword).orElse(dmaapPublisherConfiguration.dmaapUserPassword()))
+            .build();
     }
 
 }
index 0473c1a..3df25d0 100644 (file)
@@ -52,7 +52,6 @@ public abstract class PrhAppConfig implements Config {
     private static final String DMAAP_CONSUMER = "dmaapConsumerConfiguration";
 
     private static final Logger logger = LoggerFactory.getLogger(PrhAppConfig.class);
-    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
 
     AAIClientConfiguration aaiClientConfiguration;
 
@@ -91,40 +90,28 @@ public abstract class PrhAppConfig implements Config {
             if (rootElement.isJsonObject()) {
                 jsonObject = rootElement.getAsJsonObject();
                 aaiClientConfiguration = deserializeType(gsonBuilder,
-                        jsonObject.getAsJsonObject(CONFIG).getAsJsonObject(AAI).getAsJsonObject(AAI_CONFIG),
-                        AAIClientConfiguration.class);
+                    jsonObject.getAsJsonObject(CONFIG).getAsJsonObject(AAI).getAsJsonObject(AAI_CONFIG),
+                    AAIClientConfiguration.class);
 
                 dmaapConsumerConfiguration = deserializeType(gsonBuilder,
-                        jsonObject.getAsJsonObject(CONFIG).getAsJsonObject(DMAAP).getAsJsonObject(DMAAP_CONSUMER),
-                        DmaapConsumerConfiguration.class);
+                    jsonObject.getAsJsonObject(CONFIG).getAsJsonObject(DMAAP).getAsJsonObject(DMAAP_CONSUMER),
+                    DmaapConsumerConfiguration.class);
 
                 dmaapPublisherConfiguration = deserializeType(gsonBuilder,
-                        jsonObject.getAsJsonObject(CONFIG).getAsJsonObject(DMAAP).getAsJsonObject(DMAAP_PRODUCER),
-                        DmaapPublisherConfiguration.class);
+                    jsonObject.getAsJsonObject(CONFIG).getAsJsonObject(DMAAP).getAsJsonObject(DMAAP_PRODUCER),
+                    DmaapPublisherConfiguration.class);
             }
         } catch (FileNotFoundException e) {
-            logger
-                    .error(
-                            "Configuration PrhAppConfig initFileStreamReader()::FileNotFoundException :: Execution Time - {}:{}",
-                            dateTimeFormatter.format(
-                                    LocalDateTime.now()), e);
+            logger.warn("File doesn't exist in filepath: {}", filepath, e);
         } catch (IOException e) {
-            logger
-                    .error(
-                            "Configuration PrhAppConfig initFileStreamReader()::IOException :: Execution Time - {}:{}",
-                            dateTimeFormatter.format(
-                                    LocalDateTime.now()), e);
+            logger.warn("Problem with file loading, file: {}", filepath, e);
         } catch (JsonSyntaxException e) {
-            logger
-                    .error(
-                            "Configuration PrhAppConfig initFileStreamReader()::JsonSyntaxException :: Execution Time - {}:{}",
-                            dateTimeFormatter.format(
-                                    LocalDateTime.now()), e);
+            logger.warn("Problem with Json deserialization", e);
         }
     }
 
     private <T> T deserializeType(@NotNull GsonBuilder gsonBuilder, @NotNull JsonObject jsonObject,
-                                  @NotNull Class<T> type) {
+        @NotNull Class<T> type) {
         return gsonBuilder.create().fromJson(jsonObject, type);
     }
 
index 05b9184..275685f 100644 (file)
@@ -44,7 +44,6 @@ import reactor.core.publisher.Mono;
 public class HeartbeatController {
 
     private static final Logger logger = LoggerFactory.getLogger(PrhAppConfig.class);
-    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
 
     @RequestMapping(value = "heartbeat", method = RequestMethod.GET)
     @ApiOperation(value = "Returns liveness of PRH service")
@@ -56,15 +55,9 @@ public class HeartbeatController {
     }
     )
     public Mono<ResponseEntity<String>> heartbeat() {
-        logger.debug("Receiving request on on thread={} , time={} ", Thread.currentThread().getName(),
-            dateTimeFormatter.format(
-                LocalDateTime.now()));
-
-        return Mono.defer(() -> {
-            logger.debug("Sending response on thread={} , time={} ", Thread.currentThread().getName(),
-                dateTimeFormatter.format(
-                    LocalDateTime.now()));
-            return Mono.just(new ResponseEntity<>("I'm living", HttpStatus.OK));
-        });
+        logger.trace("Receiving heartbeat request");
+        return Mono.defer(() ->
+            Mono.just(new ResponseEntity<>("I'm living", HttpStatus.OK))
+        );
     }
 }
index 60572cb..4cde51b 100644 (file)
@@ -50,7 +50,6 @@ import reactor.core.publisher.Mono;
 public class ScheduleController {
 
     private static final Logger logger = LoggerFactory.getLogger(PrhAppConfig.class);
-    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
     private static final int SCHEDULING_DELAY = 20000;
     private static volatile List<ScheduledFuture> scheduledFutureList = new ArrayList<>();
 
@@ -67,14 +66,14 @@ public class ScheduleController {
     @RequestMapping(value = "start", method = RequestMethod.GET)
     @ApiOperation(value = "Start scheduling worker request")
     public Mono<ResponseEntity<String>> startTasks() {
-        logDebug("Starting scheduling worker request on on thread={} , time={} ");
+        logger.trace("Receiving start scheduling worker request");
         return Mono.fromSupplier(this::tryToStartTask).map(this::createStartTaskResponse);
     }
 
     @RequestMapping(value = "stopPrh", method = RequestMethod.GET)
-    @ApiOperation(value = "Stop scheduling worker request")
+    @ApiOperation(value = "Receiving stop scheduling worker request")
     public Mono<ResponseEntity<String>> stopTask() {
-        logDebug("Stopping scheduling worker request on on thread={} , time={} ");
+        logger.trace("Receiving stop scheduling worker request");
         return getResponseFromCancellationOfTasks();
     }
 
@@ -82,10 +81,9 @@ public class ScheduleController {
     private synchronized Mono<ResponseEntity<String>> getResponseFromCancellationOfTasks() {
         scheduledFutureList.forEach(x -> x.cancel(false));
         scheduledFutureList.clear();
-        return Mono.defer(() -> {
-            logDebug("Sending success response on stopping task execution thread={} , time={} ");
-            return Mono.just(new ResponseEntity<>("PRH Service has already been stopped!", HttpStatus.CREATED));
-        });
+        return Mono.defer(() ->
+            Mono.just(new ResponseEntity<>("PRH Service has already been stopped!", HttpStatus.CREATED))
+        );
     }
 
     @ApiOperation(value = "Start task if possible")
@@ -103,20 +101,9 @@ public class ScheduleController {
     @ApiOperation(value = "Sends success or error response on starting task execution")
     private ResponseEntity<String> createStartTaskResponse(boolean wasScheduled) {
         if (wasScheduled) {
-            logDebug("Sending success response on starting task execution thread={} , time={} ");
             return new ResponseEntity<>("PRH Service has been started!", HttpStatus.CREATED);
         } else {
-            logDebug("Sending error response on starting task execution thread={} , time={} ");
             return new ResponseEntity<>("PRH Service is still running!", HttpStatus.NOT_ACCEPTABLE);
         }
     }
-
-    private static void logDebug(String message) {
-        if (logger.isDebugEnabled()) {
-            logger.debug(message,
-                Thread.currentThread().getName(),
-                dateTimeFormatter.format(
-                    LocalDateTime.now()));
-        }
-    }
 }
index 3319360..646ca7e 100644 (file)
@@ -24,7 +24,7 @@ package org.onap.dcaegen2.services.prh.exceptions;
  */
 public class PrhTaskException extends Exception {
 
-    PrhTaskException(String message) {
+    public PrhTaskException(String message) {
         super(message);
     }
 }
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java
new file mode 100644 (file)
index 0000000..a3c7d1d
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * 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.model;
+
+import com.google.gson.annotations.SerializedName;
+import org.immutables.gson.Gson;
+import org.immutables.value.Value;
+
+/**
+ * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
+ */
+
+@Value.Immutable(prehash = true)
+@Gson.TypeAdapters
+public interface ConsumerDmaapModel {
+
+    @SerializedName("pnf-name")
+    String getPnfName();
+
+    @SerializedName("ipaddress-v4-oam")
+    String getIpv4();
+
+    @SerializedName("ipaddress-v6-oam")
+    String getIpv6();
+
+}
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParser.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParser.java
new file mode 100644 (file)
index 0000000..e2d9816
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * 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.service;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import java.util.Optional;
+import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
+import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
+import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
+
+/**
+ * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
+ */
+public class DmaapConsumerJsonParser {
+
+    private static final String EVENT = "event";
+    private static final String OTHER_FIELDS = "otherFields";
+    private static final String PNF_OAM_IPV_4_ADDRESS = "pnfOamIpv4Address";
+    private static final String PNF_OAM_IPV_6_ADDRESS = "pnfOamIpv6Address";
+    private static final String PNF_VENDOR_NAME = "pnfVendorName";
+    private static final String PNF_SERIAL_NUMBER = "pnfSerialNumber";
+
+
+    private DmaapConsumerJsonParser() {
+    }
+
+    public static ConsumerDmaapModel getJsonObject(String message) throws DmaapNotFoundException {
+        JsonElement jsonElement = new JsonParser().parse(message);
+        JsonObject jsonObject = jsonElement.getAsJsonObject();
+        return create(jsonObject);
+    }
+
+    private static ConsumerDmaapModel create(JsonObject jsonObject) throws DmaapNotFoundException {
+        if (containsHeader(jsonObject)) {
+            jsonObject = jsonObject.getAsJsonObject(EVENT).getAsJsonObject(OTHER_FIELDS);
+            String pnfVendorName = getValueFromJson(jsonObject, PNF_VENDOR_NAME);
+            String pnfSerialNumber = getValueFromJson(jsonObject, PNF_SERIAL_NUMBER);
+            String pnfOamIpv4Address = getValueFromJson(jsonObject, PNF_OAM_IPV_4_ADDRESS);
+            String pnfOamIpv6Address = getValueFromJson(jsonObject, PNF_OAM_IPV_6_ADDRESS);
+            if (isVendorAndSerialNotEmpty(pnfSerialNumber, pnfVendorName) && isIpPropertiesNotEmpty(pnfOamIpv4Address,
+                pnfOamIpv6Address)) {
+                String correlationID = pnfVendorName.substring(0, Math.min(pnfVendorName.length(), 3)).toUpperCase()
+                    .concat(pnfSerialNumber);
+                return ImmutableConsumerDmaapModel.builder().pnfName(correlationID).ipv4(pnfOamIpv4Address)
+                    .ipv6(pnfOamIpv6Address).build();
+            }
+            throw new DmaapNotFoundException("IPV4 and IPV6 are empty");
+        }
+        throw new DmaapNotFoundException("Incorrect JsonObject");
+    }
+
+    private static String getValueFromJson(JsonObject jsonObject, String jsonKey) {
+        if (jsonObject.has(jsonKey)) {
+            return jsonObject.get(jsonKey).getAsString();
+        }
+        return "";
+    }
+
+    private static boolean isVendorAndSerialNotEmpty(String pnfSerialNumber, String pnfVendorName) {
+        return ((pnfSerialNumber != null && !pnfSerialNumber.isEmpty()) && (pnfVendorName != null && !pnfVendorName
+            .isEmpty()));
+    }
+
+    private static boolean isIpPropertiesNotEmpty(String ipv4, String ipv6) {
+        return (ipv4 != null && !ipv4.isEmpty()) || (ipv6 != null
+            && !ipv6.isEmpty());
+    }
+
+    private static boolean containsHeader(JsonObject jsonObject) {
+        return jsonObject.has(EVENT) && jsonObject.getAsJsonObject(EVENT).has(OTHER_FIELDS);
+    }
+
+}
index 3504bf9..1c80d3f 100644 (file)
@@ -40,46 +40,32 @@ import java.util.Optional;
 public class AAIConsumerTaskImpl extends AAIConsumerTask<AAIClientConfiguration> {
 
     private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
-    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
 
     private final Config prhAppConfig;
-    private final HttpRequestDetails requestDetails;
-    private AAIProducerClient producerClient;
-    Optional<String> response;
+    private Optional<String> response;
 
     @Autowired
-    public AAIConsumerTaskImpl(AppConfig prhAppConfig, HttpRequestDetails requestDetails) {
+    public AAIConsumerTaskImpl(AppConfig prhAppConfig) {
         this.prhAppConfig = prhAppConfig;
-        this.requestDetails = requestDetails;
     }
 
     @Override
     protected void consume() throws AAINotFoundException {
-        logger.debug("Start task AAIConsumerTask::publish() :: Execution Time - {}", dateTimeFormatter.format(
-                LocalDateTime.now()));
-
-
-        producerClient = new AAIProducerClient(prhAppConfig.getAAIClientConfiguration());
-
-        response = producerClient.getHttpResponse(requestDetails);
-
-        logger.debug("End task AAIConsumerTask::publish() :: Execution Time - {}", dateTimeFormatter.format(
-                LocalDateTime.now()));
+        //TODO: @Piotr Wielebski
+        AAIProducerClient producerClient = new AAIProducerClient(prhAppConfig.getAAIClientConfiguration());
 
     }
 
     @Override
-    public ResponseEntity execute(Object object) throws AAINotFoundException {
-        logger.debug("Start task AAIProducerTaskImpl::execute() :: Execution Time - {}", dateTimeFormatter.format(
-                LocalDateTime.now()));
+    public Object execute(Object object) throws AAINotFoundException {
         consume();
-        logger.debug("End task AAIPublisherTaskImpl::execute() :: Execution Time - {}", dateTimeFormatter.format(
-                LocalDateTime.now()));
+        //TODO: @Piotr Wielebski
         return null;
     }
 
     @Override
     void initConfigs() {
+        logger.trace("initConfigs for AAIConsumerTaskImpl not needed/supported");
     }
 
     @Override
index 787e614..8545949 100644 (file)
@@ -24,9 +24,9 @@ import org.onap.dcaegen2.services.prh.exceptions.AAINotFoundException;
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/13/18
  */
-public abstract class AAIProducerTask<T> extends Task {
+public abstract class AAIProducerTask<T, U, V> extends Task {
 
-    protected abstract void publish() throws AAINotFoundException;
+    protected abstract V publish(U message) throws AAINotFoundException;
 
     protected abstract T resolveConfiguration();
 }
index 5e8dcea..a254890 100644 (file)
  */
 package org.onap.dcaegen2.services.prh.tasks;
 
+import com.google.gson.Gson;
 import org.onap.dcaegen2.services.config.AAIClientConfiguration;
 import org.onap.dcaegen2.services.prh.configuration.AppConfig;
 import org.onap.dcaegen2.services.prh.configuration.Config;
 import org.onap.dcaegen2.services.prh.exceptions.AAINotFoundException;
+import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
+import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
 import org.onap.dcaegen2.services.service.AAIProducerClient;
 import org.onap.dcaegen2.services.utils.HttpRequestDetails;
 import org.slf4j.Logger;
@@ -39,48 +42,38 @@ import java.util.Optional;
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/13/18
  */
 @Component
-public class AAIProducerTaskImpl extends AAIProducerTask<AAIClientConfiguration> {
+public class AAIProducerTaskImpl extends AAIProducerTask<AAIClientConfiguration, ConsumerDmaapModel, Object> {
 
     private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
-    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
 
     private final Config prhAppConfig;
     private AAIProducerClient producerClient;
-    private HttpRequestDetails requestDetails;
-    Optional<String> response;
+    private Optional<String> response;
 
     @Autowired
-    public AAIProducerTaskImpl(AppConfig prhAppConfig, HttpRequestDetails requestDetails) {
+    public AAIProducerTaskImpl(AppConfig prhAppConfig) {
         this.prhAppConfig = prhAppConfig;
-        this.requestDetails = requestDetails;
     }
 
     @Override
-    protected void publish() throws AAINotFoundException {
-        logger.debug("Start task AAIConsumerTask::publish() :: Execution Time - {}", dateTimeFormatter.format(
-            LocalDateTime.now()));
-
+    protected Object publish(ConsumerDmaapModel consumerDmaapModel) throws AAINotFoundException {
+        logger.trace("Method %M called with arg {}", consumerDmaapModel);
         producerClient = new AAIProducerClient(prhAppConfig.getAAIClientConfiguration());
-
-        response = producerClient.getHttpResponse(requestDetails);
-
-        logger.debug("End task AAIConsumerTask::publish() :: Execution Time - {}", dateTimeFormatter.format(
-            LocalDateTime.now()));
-
+        //TODO: @Piotr Wielebski
+        response = producerClient.getHttpResponse(null);
+        return response.get();
     }
 
     @Override
-    public ResponseEntity execute(Object object) throws AAINotFoundException {
-        logger.debug("Start task AAIProducerTaskImpl::execute() :: Execution Time - {}", dateTimeFormatter.format(
-            LocalDateTime.now()));
-        publish();
-        logger.debug("End task AAIPublisherTaskImpl::execute() :: Execution Time - {}", dateTimeFormatter.format(
-            LocalDateTime.now()));
-        return null;
+    public Object execute(Object object) throws AAINotFoundException {
+        logger.trace("Method %M called with arg {}", object);
+        //TODO: @Piotr Wielebski
+        return publish((ConsumerDmaapModel) object);
     }
 
     @Override
     void initConfigs() {
+        logger.trace("initConfigs for AAIProducerTaskImpl not needed/supported");
     }
 
     @Override
index 68a79e0..3e82707 100644 (file)
@@ -24,9 +24,9 @@ import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/13/18
  */
-public abstract class DmaapConsumerTask<T> extends Task {
+public abstract class DmaapConsumerTask<T, U, V> extends Task {
 
-    protected abstract void consume() throws DmaapNotFoundException;
+    protected abstract V consume(U message) throws DmaapNotFoundException;
 
     protected abstract T resolveConfiguration();
 }
index eb66361..a2129fc 100644 (file)
@@ -1,4 +1,4 @@
-/*-
+/*
  * ============LICENSE_START=======================================================
  * PNF-REGISTRATION-HANDLER
  * ================================================================================
@@ -22,10 +22,14 @@ package org.onap.dcaegen2.services.prh.tasks;
 import org.onap.dcaegen2.services.config.DmaapConsumerConfiguration;
 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.DmaapConsumerJsonParser;
+import org.onap.dcaegen2.services.service.consumer.ExtendedDmaapConsumerHttpClientImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;
@@ -35,11 +39,10 @@ import java.time.format.DateTimeFormatter;
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 3/23/18
  */
 @Component
-public class DmaapConsumerTaskImpl extends DmaapConsumerTask<DmaapConsumerConfiguration> {
+public class DmaapConsumerTaskImpl extends DmaapConsumerTask<DmaapConsumerConfiguration, String, ConsumerDmaapModel> {
 
 
     private static final Logger logger = LoggerFactory.getLogger(DmaapConsumerTaskImpl.class);
-    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
 
     private final Config prhAppConfig;
 
@@ -49,23 +52,18 @@ public class DmaapConsumerTaskImpl extends DmaapConsumerTask<DmaapConsumerConfig
     }
 
     @Override
-    protected void consume() {
-        logger.debug("Start task DmaapConsumerTask::consume() :: Execution Time - {}", dateTimeFormatter.format(
-            LocalDateTime.now()));
-
-        logger.debug("End task DmaapConsumerTask::consume() :: Execution Time - {}",
-            dateTimeFormatter.format(LocalDateTime.now()));
-
+    protected ConsumerDmaapModel consume(String message) throws DmaapNotFoundException {
+        logger.trace("Method %M called with arg {}", message);
+        return DmaapConsumerJsonParser.getJsonObject(message);
     }
 
     @Override
-    public ResponseEntity execute(Object object) {
-        logger.debug("Start task DmaapConsumerTask::execute() :: Execution Time - {}", dateTimeFormatter.format(
-            LocalDateTime.now()));
-        consume();
-        logger.debug("End task DmaapConsumerTask::execute() :: Execution Time - {}",
-            dateTimeFormatter.format(LocalDateTime.now()));
-        return null;
+    public Object execute(Object object) throws PrhTaskException {
+        logger.trace("Method %M called with arg {}", object);
+        ExtendedDmaapConsumerHttpClientImpl dmaapConsumerHttpClient = new ExtendedDmaapConsumerHttpClientImpl(
+            resolveConfiguration());
+        return consume((dmaapConsumerHttpClient.getHttpConsumerResponse().orElseThrow(() ->
+            new PrhTaskException("DmaapConsumerTask has returned null"))));
     }
 
     @Override
index 239d36a..7b9fd5d 100644 (file)
@@ -24,10 +24,9 @@ import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 3/23/18
  */
-public abstract class DmaapPublisherTask<T> extends Task {
+public abstract class DmaapPublisherTask<T, U> extends Task {
 
-    protected abstract void publish() throws DmaapNotFoundException;
+    protected abstract U publish(U message) throws DmaapNotFoundException;
 
     protected abstract T resolveConfiguration();
-
 }
index ff5f589..906bd42 100644 (file)
@@ -22,6 +22,10 @@ package org.onap.dcaegen2.services.prh.tasks;
 import org.onap.dcaegen2.services.config.DmaapPublisherConfiguration;
 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.service.producer.ExtendedDmaapProducerHttpClientImpl;
+import org.onap.dcaegen2.services.service.producer.ImmutableDmaapPublisherRequestDetails;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,11 +39,9 @@ import java.time.format.DateTimeFormatter;
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/13/18
  */
 @Component
-public class DmaapPublisherTaskImpl extends DmaapPublisherTask<DmaapPublisherConfiguration> {
+public class DmaapPublisherTaskImpl extends DmaapPublisherTask<DmaapPublisherConfiguration, String> {
 
     private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
-    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
-
     private final Config prhAppConfig;
 
     @Autowired
@@ -48,27 +50,22 @@ public class DmaapPublisherTaskImpl extends DmaapPublisherTask<DmaapPublisherCon
     }
 
     @Override
-    protected void publish() {
-        logger.debug("Start task DmaapPublisherTask::publish() :: Execution Time - {}", dateTimeFormatter.format(
-            LocalDateTime.now()));
-
-        logger.debug("End task DmaapPublisherTask::publish() :: Execution Time - {}",
-            dateTimeFormatter.format(LocalDateTime.now()));
+    protected String publish(String message) {
+        logger.trace("Method %M called with arg {}", message);
+        ExtendedDmaapProducerHttpClientImpl dmaapProducerHttpClient = new ExtendedDmaapProducerHttpClientImpl(
+            resolveConfiguration());
+        return null;
     }
 
     @Override
-    public ResponseEntity execute(Object object) {
-        logger.debug("Start task DmaapPublisherTask::consume() :: Execution Time - {}", dateTimeFormatter.format(
-            LocalDateTime.now()));
-        publish();
-        logger.debug("End task DmaapPublisherTask::consume() :: Execution Time - {}",
-            dateTimeFormatter.format(LocalDateTime.now()));
-        return null;
+    public Object execute(Object object) throws PrhTaskException {
+        logger.trace("Method %M called with arg {}", object);
+        return publish((String) object);
     }
 
     @Override
     void initConfigs() {
-        
+        logger.trace("initConfigs for DmaapPublisherTaskImpl not needed/supported");
     }
 
     @Override
index c80b8a7..84c75e0 100644 (file)
@@ -35,7 +35,6 @@ import java.time.format.DateTimeFormatter;
 public class ScheduledTasks {
 
     private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
-    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
 
     private final Task dmaapConsumerTask;
     private final Task dmaapProducerTask;
@@ -52,25 +51,21 @@ public class ScheduledTasks {
     }
 
     public void scheduleMainPrhEventTask() {
-        logger.debug("Task scheduledTaskAskingDMaaPOfConsumeEvent() :: Execution Time - {}", dateTimeFormatter.format(
-            LocalDateTime.now()));
+        logger.trace("Execution of task was registered");
         setTaskExecutionFlow();
         try {
             dmaapConsumerTask.initConfigs();
             dmaapConsumerTask.receiveRequest(null);
         } catch (PrhTaskException e) {
             logger
-                .error("Task scheduledTaskAskingDMaaPOfConsumeEvent()::PrhTaskException :: Execution Time - {}:{}",
-                    dateTimeFormatter.format(
-                        LocalDateTime.now()), e);
+                .warn("Chain of tasks have been aborted, because some errors occur in prh workflow ", e);
         }
     }
 
     private void setTaskExecutionFlow() {
         dmaapConsumerTask.setNext(aaiProducerTask);
-        aaiProducerTask.setNext(dmaapProducerTask);
-        aaiConsumerTask.setNext(aaiConsumerTask);
-        dmaapProducerTask.setNext(dmaapConsumerTask);
+        aaiProducerTask.setNext(aaiConsumerTask);
+        aaiConsumerTask.setNext(dmaapProducerTask);
     }
 
 }
index 3f521f2..a9b10d4 100644 (file)
@@ -37,13 +37,13 @@ public abstract class Task {
 
     public void receiveRequest(Object body) throws PrhTaskException {
 
-        ResponseEntity responseEntity = execute(body);
+        Object response = execute(body);
         if (taskProcess != null) {
-            taskProcess.receiveRequest(responseEntity);
+            taskProcess.receiveRequest(response);
         }
     }
 
-    abstract ResponseEntity execute(Object object) throws PrhTaskException;
+    abstract Object execute(Object object) throws PrhTaskException;
 
     abstract void initConfigs();
 }
diff --git a/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParserTest.java b/prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParserTest.java
new file mode 100644 (file)
index 0000000..a097037
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * 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.service;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
+import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
+import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
+
+/**
+ * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
+ */
+class DmaapConsumerJsonParserTest {
+
+    private String incorrectMessage =
+        "{\"event\":{\"commonEventHeader\":{\"domain\":\"other\",\"eventId\":\"<<SerialNumber>>-reg\""
+            + ",\"eventName\":\"pnfRegistration_5GDU\",\"eventType\":\"pnfRegistration\",\"internalHeaderFields\":{},"
+            + "\"lastEpochMicrosec\":1519837825682,\"nfNamingCode\":\"5GRAN\",\"nfcNamingCode\":\"5DU\",\"priority\""
+            + ":\"Normal\",\"reportingEntityName\":\"5GRAN_DU\",\"sequence\":0,\"sourceId\":\"<<SerialNumber>>\","
+            + "\"sourceName\":\"5GRAN_DU\",\"startEpochMicrosec\":1519837825682,\"version\":3}}}";
+
+    private String jsonWithoutPnfVendorAndSerialNumber =
+        "{\"event\":{\"commonEventHeader\":{\"domain\":\"other\",\"eventId\":"
+            + "\"<<SerialNumber>>-reg\",\"eventName\":\"pnfRegistration_5GDU\",\"eventType\":\"pnfRegistration\",\""
+            + "internalHeaderFields\":{},\"lastEpochMicrosec\":1519837825682,\"nfNamingCode\":\"5GRAN\",\"nfcNamingCode\""
+            + ":\"5DU\",\"priority\":\"Normal\",reportingEntityName\":\"5GRAN_DU\",\"sequence\":0,\"sourceId\":\""
+            + "<<SerialNumber>>\",\"sourceName\":\"5GRAN_DU\",startEpochMicrosec\":1519837825682,\"version\":3},"
+            + "\"otherFields\":{\"otherFieldsVersion\":1,\"pnfFamily\":\"BBU\",\"pnfLastServiceDate\":1517206400,"
+            + "\"pnfManufactureDate\":1516406400,\"pnfModelNumber\":\"AJ02\",\"pnfOamIpv4Address\":"
+            + "\"10.16.123.234\",\"pnfOamIpv6Address\":\"0:0:0:0:0:FFFF:0A10:7BEA\",\"pnfSoftwareVersion\":\"v4.5.0.1\","
+            + "\"pnfType\":\"AirScale\"}}}";
+
+    private String jsonWithoutIPInformation =
+        "{\"event\":{\"commonEventHeader\":{\"domain\":\"other\",\"eventId\":\"<<SerialNumber>>-reg\",\"eventName\":"
+            + "\"pnfRegistration_5GDU\",\"eventType\":\"pnfRegistration\",\"internalHeaderFields\":{},\"lastEpochMicrosec\""
+            + ":1519837825682,\"nfNamingCode\":\"5GRAN\",\"nfcNamingCode\":\"5DU\",\"priority\":\"Normal\","
+            + "\"reportingEntityName\":\"5GRAN_DU\",\"sequence\":0,\"sourceId\":\"<<SerialNumber>>\",\"sourceName\":"
+            + "\"5GRAN_DU\",\"startEpochMicrosec\":1519837825682,\"version\":3},\"otherFields\":{\"otherFieldsVersion\":1,"
+            + "\"pnfFamily\":\"BBU\",\"pnfLastServiceDate\":1517206400,\"pnfManufactureDate\":1516406400,\"pnfModelNumber\":"
+            + "\"AJ02\",\"pnfSerialNumber\":\"QTFCOC540002E\",\"pnfSoftwareVersion\":\"v4.5.0.1\",\"pnfType\":\"AirScale\","
+            + "\"pnfVendorName\":\"Nokia\"}}}";
+
+    @Test
+    public void whenPassingCorrectJson_validationNotThrowingAnException() throws DmaapNotFoundException {
+        //given
+        String message =
+            "{\"event\":{\"commonEventHeader\":{\"domain\":\"other\",\"eventId\":\"<<SerialNumber>>-reg\",\"eventName\""
+                + ":\"pnfRegistration_5GDU\",\"eventType\":\"pnfRegistration\",\"internalHeaderFields\":{},"
+                + "\"lastEpochMicrosec\":1519837825682,\"nfNamingCode\":\"5GRAN\",\"nfcNamingCode\":\"5DU\","
+                + "\"priority\":\"Normal\",\"reportingEntityName\":\"5GRAN_DU\",\"sequence\":0,\"sourceId\":"
+                + "\"<<SerialNumber>>\",\"sourceName\":\"5GRAN_DU\",\"startEpochMicrosec\":1519837825682,\"version\":3},"
+                + "\"otherFields\":{\"otherFieldsVersion\":1,\"pnfFamily\":\"BBU\",\"pnfLastServiceDate\":1517206400,"
+                + "\"pnfManufactureDate\":1516406400,\"pnfModelNumber\":\"AJ02\",\"pnfOamIpv4Address\":\"10.16.123.234\","
+                + "\"pnfOamIpv6Address\":\"0:0:0:0:0:FFFF:0A10:7BEA\",\"pnfSerialNumber\":\"QTFCOC540002E\","
+                + "\"pnfSoftwareVersion\":\"v4.5.0.1\",\"pnfType\":\"AirScale\",\"pnfVendorName\":\"Nokia\"}}}";
+
+        ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder().ipv4("10.16.123.234")
+            .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
+            .pnfName("NOKQTFCOC540002E").build();
+        //when
+        ConsumerDmaapModel consumerDmaapModel = DmaapConsumerJsonParser.getJsonObject(message);
+        //then
+        Assertions.assertNotNull(consumerDmaapModel);
+        Assertions.assertEquals(expectedObject, consumerDmaapModel);
+    }
+
+
+    @Test
+    public void whenPassingCorrectJsonWihoutIPV4_validationNotThrowingAnException() throws DmaapNotFoundException {
+        //given
+        String message =
+            "{\"event\":{\"commonEventHeader\":{\"domain\":\"other\",\"eventId\":\"<<SerialNumber>>-reg\",\"eventName\""
+                + ":\"pnfRegistration_5GDU\",\"eventType\":\"pnfRegistration\",\"internalHeaderFields\":{},"
+                + "\"lastEpochMicrosec\":1519837825682,\"nfNamingCode\":\"5GRAN\",\"nfcNamingCode\":\"5DU\","
+                + "\"priority\":\"Normal\",\"reportingEntityName\":\"5GRAN_DU\",\"sequence\":0,\"sourceId\":"
+                + "\"<<SerialNumber>>\",\"sourceName\":\"5GRAN_DU\",\"startEpochMicrosec\":1519837825682,\"version\":3}"
+                + ",\"otherFields\":{\"otherFieldsVersion\":1,\"pnfFamily\":\"BBU\",\"pnfLastServiceDate\":1517206400,"
+                + "\"pnfManufactureDate\":1516406400,\"pnfModelNumber\":\"AJ02\",\"pnfOamIpv6Address\":"
+                + "\"0:0:0:0:0:FFFF:0A10:7BEA\",\"pnfSerialNumber\":\"QTFCOC540002E\",\"pnfSoftwareVersion\""
+                + ":\"v4.5.0.1\",\"pnfType\":\"AirScale\",\"pnfVendorName\":\"Nokia\"}}}";
+
+        ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder().ipv4("")
+            .ipv6("0:0:0:0:0:FFFF:0A10:7BEA")
+            .pnfName("NOKQTFCOC540002E").build();
+        //when
+        ConsumerDmaapModel consumerDmaapModel = DmaapConsumerJsonParser.getJsonObject(message);
+        //then
+        Assertions.assertNotNull(consumerDmaapModel);
+        Assertions.assertEquals(expectedObject, consumerDmaapModel);
+    }
+
+    @Test
+    public void whenPassingCorrectJsonWihoutIPV6_validationNotThrowingAnException() throws DmaapNotFoundException {
+        //given
+        String message =
+            "{\"event\":{\"commonEventHeader\":{\"domain\":\"other\",\"eventId\":\"<<SerialNumber>>-reg\",\"eventName\""
+                + ":\"pnfRegistration_5GDU\",\"eventType\":\"pnfRegistration\",\"internalHeaderFields\":{},"
+                + "\"lastEpochMicrosec\":1519837825682,\"nfNamingCode\":\"5GRAN\",\"nfcNamingCode\":\"5DU\","
+                + "\"priority\":\"Normal\",\"reportingEntityName\":\"5GRAN_DU\",\"sequence\":0,\"sourceId\":"
+                + "\"<<SerialNumber>>\",\"sourceName\":\"5GRAN_DU\",\"startEpochMicrosec\":1519837825682,"
+                + "\"version\":3},\"otherFields\":{\"otherFieldsVersion\":1,\"pnfFamily\":\"BBU\",\"pnfLastServiceDate"
+                + "\":1517206400,\"pnfManufactureDate\":1516406400,\"pnfModelNumber\":\"AJ02\",\"pnfOamIpv4Address"
+                + "\":\"10.16.123.234\",\"pnfSerialNumber\":\"QTFCOC540002E\",\"pnfSoftwareVersion\":\"v4.5.0.1\","
+                + "\"pnfType\":\"AirScale\",\"pnfVendorName\":\"Nokia\"}}}";
+
+        ConsumerDmaapModel expectedObject = ImmutableConsumerDmaapModel.builder().ipv4("10.16.123.234").ipv6("")
+            .pnfName("NOKQTFCOC540002E").build();
+        //when
+        ConsumerDmaapModel consumerDmaapModel = DmaapConsumerJsonParser.getJsonObject(message);
+        //then
+        Assertions.assertNotNull(consumerDmaapModel);
+        Assertions.assertEquals(expectedObject, consumerDmaapModel);
+    }
+
+    @Test
+    public void whenPassingCorrectJsonWihoutIPV4andIPV6_validationThrowingAnException() {
+        String message =
+            "{\"event\":{\"commonEventHeader\":{\"domain\":\"other\",\"eventId\":\"<<SerialNumber>>-reg\",\"eventName\""
+                + ":\"pnfRegistration_5GDU\",\"eventType\":\"pnfRegistration\",\"internalHeaderFields\":{},"
+                + "\"lastEpochMicrosec\":1519837825682,\"nfNamingCode\":\"5GRAN\",\"nfcNamingCode\":\"5DU\","
+                + "\"priority\":\"Normal\",\"reportingEntityName\":\"5GRAN_DU\",\"sequence\":0,\"sourceId\":"
+                + "\"<<SerialNumber>>\",\"sourceName\":\"5GRAN_DU\",\"startEpochMicrosec\":1519837825682,\"version\""
+                + ":3},\"otherFields\":{\"otherFieldsVersion\":1,\"pnfFamily\":\"BBU\",\"pnfLastServiceDate\""
+                + ":1517206400,\"pnfManufactureDate\":1516406400,\"pnfModelNumber\":\"AJ02\",\"pnfSoftwareVersion\":"
+                + "\"v4.5.0.1\",\"pnfType\":\"AirScale\",\"pnfVendorName\":\"Nokia\"}}}";
+
+        Assertions.assertThrows(DmaapNotFoundException.class, () -> {
+            DmaapConsumerJsonParser.getJsonObject(message);
+        });
+    }
+
+    @Test
+    public void whenPassingJsonWithoutMandatoryHeaderInformation_validationThrowingAnException() {
+        Assertions.assertThrows(DmaapNotFoundException.class, () -> {
+            DmaapConsumerJsonParser.getJsonObject(incorrectMessage);
+        });
+    }
+
+    @Test
+    public void whenPassingJsonWithoutPnfSerialNumberOrPnfVendorName_validationThrowingAnException() {
+        Assertions.assertThrows(DmaapNotFoundException.class, () -> {
+            DmaapConsumerJsonParser.getJsonObject(jsonWithoutPnfVendorAndSerialNumber);
+        });
+    }
+
+    @Test
+    public void whenPassingJsonWithoutIPInformation_validationThrowingAnException() {
+        Assertions.assertThrows(DmaapNotFoundException.class, () -> {
+            DmaapConsumerJsonParser.getJsonObject(jsonWithoutIPInformation);
+        });
+    }
+}
\ No newline at end of file
index 57c3ce2..929e5a4 100644 (file)
@@ -37,8 +37,7 @@ public class AAIConsumerTaskSpy {
     @Primary
     public AAIConsumerTask registerSimpleAAIPublisherTask() {
         AppConfig appConfig = mock(AppConfig.class);
-        HttpRequestDetails requestDetails = mock(HttpRequestDetails.class);
         when(appConfig.getAAIClientConfiguration()).thenReturn(mock(AAIClientConfiguration.class));
-        return spy(new AAIConsumerTaskImpl(appConfig, requestDetails));
+        return spy(new AAIConsumerTaskImpl(appConfig));
     }
 }
\ No newline at end of file
index 8da7f85..9564bf9 100644 (file)
@@ -38,8 +38,7 @@ public class AAIPublisherTaskSpy {
     @Primary
     public AAIProducerTask registerSimpleAAIPublisherTask() {
         AppConfig appConfig = mock(AppConfig.class);
-        HttpRequestDetails requestDetails = mock(HttpRequestDetails.class);
         when(appConfig.getAAIClientConfiguration()).thenReturn(mock(AAIClientConfiguration.class));
-        return spy(new AAIProducerTaskImpl(appConfig, requestDetails));
+        return spy(new AAIProducerTaskImpl(appConfig));
     }
 }
index 606b0cb..73f21a2 100644 (file)
@@ -48,6 +48,7 @@ public class ScheduleControllerSpy {
     @Bean
     @Primary
     public ScheduledTasks registerSimpleScheduledTask() {
-        return spy(new ScheduledTasks(dmaapConsumerTaskImplSpy, dmaapPublisherTaskImplSpy, aaiPublisherTaskImplSpy, aaiConsumerTaskImplSpy));
+        return spy(new ScheduledTasks(dmaapConsumerTaskImplSpy, dmaapPublisherTaskImplSpy, aaiPublisherTaskImplSpy,
+            aaiConsumerTaskImplSpy));
     }
 }
index 525e132..ac26ea9 100644 (file)
@@ -26,7 +26,6 @@ import org.springframework.stereotype.Component;
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 3/23/18
  */
-@Component
 @Value.Immutable(prehash = true)
 @Value.Style(builder = "new")
 @Gson.TypeAdapters
index 0b76cca..1772104 100644 (file)
@@ -53,7 +53,7 @@ public class ExtendedDmaapConsumerHttpClientImpl {
     private final String dmaapContentType;
 
 
-    ExtendedDmaapConsumerHttpClientImpl(DmaapConsumerConfiguration configuration) {
+    public ExtendedDmaapConsumerHttpClientImpl(DmaapConsumerConfiguration configuration) {
         this.closeableHttpClient = new DmaapHttpClientImpl(configuration).getHttpClient();
         this.dmaapHostName = configuration.dmaapHostName();
         this.dmaapProtocol = configuration.dmaapProtocol();
@@ -108,38 +108,31 @@ public class ExtendedDmaapConsumerHttpClientImpl {
     }
 
     private URI createDmaapConsumerExtendedURI() {
-        URI extendedURI = null;
-
-        final URIBuilder uriBuilder = new URIBuilder()
+        try {
+            return new URIBuilder()
                 .setScheme(dmaapProtocol)
                 .setHost(dmaapHostName)
                 .setPort(dmaapPortNumber)
-                .setPath(createRequestPath());
-
-        try {
-            extendedURI = uriBuilder.build();
-            logger.info("Building extended URI: {}", extendedURI);
+                .setPath(createRequestPath()).build();
         } catch (URISyntaxException e) {
-            logger.error("Exception while building extended URI: {}", e);
+            throw new RuntimeException("Exception while building extended URI: {}", e);
         }
-
-        return extendedURI;
     }
 
     private ResponseHandler<Optional<String>> dmaapConsumerResponseHandler() {
-        return httpResponse ->  {
+        return httpResponse -> {
             final int responseCode = httpResponse.getStatusLine().getStatusCode();
             logger.info("Status code of operation: {}", responseCode);
             final HttpEntity responseEntity = httpResponse.getEntity();
 
-            if (HttpUtils.isSuccessfulResponseCode(responseCode) ) {
+            if (HttpUtils.isSuccessfulResponseCode(responseCode)) {
                 logger.info("HTTP response successful.");
                 final String dmaapResponse = EntityUtils.toString(responseEntity);
                 return Optional.of(dmaapResponse);
             } else {
                 String dmaapResponse = responseEntity != null ? EntityUtils.toString(responseEntity) : "";
                 logger.error("HTTP response not successful : {}", dmaapResponse);
-                return Optional.of("" + responseCode);
+                return Optional.of(String.valueOf(responseCode));
             }
         };
     }
index 6541fe9..a0877fe 100644 (file)
@@ -28,11 +28,9 @@ import java.util.Optional;
 @Value.Style(builder = "new")
 public abstract class DmaapPublisherRequestDetails {
 
-    private static final long serialVersionUID = 1L;
-
     @Value.Parameter
     public abstract String dmaapAPIPath();
 
     @Value.Parameter
-    public abstract Optional<String> jsonBody();
+    public abstract String jsonBody();
 }
index 17e34ed..af7534c 100644 (file)
@@ -52,7 +52,7 @@ public class ExtendedDmaapProducerHttpClientImpl {
     private final String dmaapContentType;
 
 
-    ExtendedDmaapProducerHttpClientImpl(DmaapPublisherConfiguration configuration) {
+    public ExtendedDmaapProducerHttpClientImpl(DmaapPublisherConfiguration configuration) {
         this.closeableHttpClient = new DmaapHttpClientImpl(configuration).getHttpClient();
         this.dmaapHostName = configuration.dmaapHostName();
         this.dmaapProtocol = configuration.dmaapProtocol();
@@ -61,7 +61,7 @@ public class ExtendedDmaapProducerHttpClientImpl {
         this.dmaapContentType = configuration.dmaapContentType();
     }
 
-     Optional<String> getHttpProducerResponse(DmaapPublisherRequestDetails requestDetails) {
+    public Optional<String> getHttpProducerResponse(DmaapPublisherRequestDetails requestDetails) {
 
         Optional<String> extendedDetails = Optional.empty();
         Optional<HttpRequestBase> request = createRequest(requestDetails);
@@ -74,11 +74,7 @@ public class ExtendedDmaapProducerHttpClientImpl {
 
         return extendedDetails;
     }
-
-    private Boolean isExtendedURINotNull(URI extendedURI) {
-        return extendedURI != null;
-    }
-
+    
     private Optional<StringEntity> createStringEntity(Optional<String> jsonBody) {
         return Optional.of(parseJson(jsonBody).get());
     }
@@ -95,7 +91,7 @@ public class ExtendedDmaapProducerHttpClientImpl {
         return stringEntity;
     }
 
-    private Optional<HttpRequestBase> createRequest (DmaapPublisherRequestDetails requestDetails) {
+    private Optional<HttpRequestBase> createRequest(DmaapPublisherRequestDetails requestDetails) {
 
         Optional<HttpRequestBase> request = Optional.empty();
         final URI extendedURI = createDmaapPublisherExtendedURI(requestDetails);
@@ -112,24 +108,24 @@ public class ExtendedDmaapProducerHttpClientImpl {
         URI extendedURI = null;
 
         final URIBuilder uriBuilder = new URIBuilder()
-                .setScheme(dmaapProtocol)
-                .setHost(dmaapHostName)
-                .setPort(dmaapPortNumber)
-                .setPath(requestDetails.dmaapAPIPath() + "/" + dmaapTopicName);
+            .setScheme(dmaapProtocol)
+            .setHost(dmaapHostName)
+            .setPort(dmaapPortNumber)
+            .setPath(requestDetails.dmaapAPIPath() + "/" + dmaapTopicName);
 
         try {
             extendedURI = uriBuilder.build();
-            logger.info("Building extended URI: {}",extendedURI);
+            logger.info("Building extended URI: {}", extendedURI);
         } catch (URISyntaxException e) {
-            logger.error("Exception while building extended URI: {}", e);
+            logger.error("Exception while building extended URI: ", e);
         }
 
         return extendedURI;
     }
 
     private HttpRequestBase createRequest(URI extendedURI, DmaapPublisherRequestDetails requestDetails) {
-        if (isExtendedURINotNull(extendedURI) && requestDetails.jsonBody().isPresent()) {
-            return createHttpPost(extendedURI, requestDetails.jsonBody());
+        if (extendedURI != null) {
+            return createHttpPost(extendedURI, Optional.ofNullable(requestDetails.jsonBody()));
         } else {
             return null;
         }
@@ -143,7 +139,7 @@ public class ExtendedDmaapProducerHttpClientImpl {
     }
 
     private ResponseHandler<Optional<String>> dmaapProducerResponseHandler() {
-        return httpResponse ->  {
+        return httpResponse -> {
             final int responseCode = httpResponse.getStatusLine().getStatusCode();
             final HttpEntity responseEntity = httpResponse.getEntity();
 
index 21d3e4c..1df025c 100644 (file)
@@ -57,9 +57,9 @@ public class ExtendedDmaapConsumerHttpClientImplTest {
         when(configurationMock.dmaapUserName()).thenReturn("PRH");
         when(configurationMock.dmaapUserPassword()).thenReturn("PRH");
         when(configurationMock.dmaapContentType()).thenReturn("application/json");
-        when(configurationMock.dmaapTopicName()).thenReturn("pnfReady");
-        when(configurationMock.consumerGroup()).thenReturn("consumerGroup");
-        when(configurationMock.consumerId()).thenReturn("consumerId");
+        when(configurationMock.dmaapTopicName()).thenReturn("unauthenticated.SEC_OTHER_OUTPUT");
+        when(configurationMock.consumerGroup()).thenReturn("OpenDCAE-c12");
+        when(configurationMock.consumerId()).thenReturn("c12");
 
         objectUnderTest = new ExtendedDmaapConsumerHttpClientImpl(configurationMock);
 
index 0560432..3f64fd5 100644 (file)
@@ -62,7 +62,7 @@ public class ExtendedDmaapProducerHttpClientImplTest {
         when(configurationMock.dmaapTopicName()).thenReturn("pnfReady");
 
         when(requestDetailsMock.dmaapAPIPath()).thenReturn("events");
-        when(requestDetailsMock.jsonBody()).thenReturn(Optional.of(JSON_MESSAGE));
+        when(requestDetailsMock.jsonBody()).thenReturn(JSON_MESSAGE);
 
         objectUnderTest = new ExtendedDmaapProducerHttpClientImpl(configurationMock);
 
@@ -75,7 +75,7 @@ public class ExtendedDmaapProducerHttpClientImplTest {
         expectedResult = Optional.of(RESPONSE_SUCCESS);
 
         when(closeableHttpClientMock.execute(any(HttpPost.class), any(ResponseHandler.class)))
-                .thenReturn(expectedResult);
+            .thenReturn(expectedResult);
 
         Optional<String> actualResult = objectUnderTest.getHttpProducerResponse(requestDetailsMock);
 
@@ -85,10 +85,10 @@ public class ExtendedDmaapProducerHttpClientImplTest {
     @Test
     public void getExtendedDetails_returnsFailure() throws IOException {
         expectedResult = Optional.of(RESPONSE_FAILURE);
-        when(closeableHttpClientMock.execute(any(HttpPost.class), any(ResponseHandler.class))).
-                thenReturn(Optional.empty());
-        Optional<String>  actualResult = objectUnderTest.getHttpProducerResponse(requestDetailsMock);
-        Assertions.assertEquals(Optional.empty(),actualResult);
+        when(closeableHttpClientMock.execute(any(HttpPost.class), any(ResponseHandler.class)))
+            .thenReturn(Optional.empty());
+        Optional<String> actualResult = objectUnderTest.getHttpProducerResponse(requestDetailsMock);
+        Assertions.assertEquals(Optional.empty(), actualResult);
     }