Add endpoint for load configuration(DMaaP, A&AI) 91/41191/1
authorwasala <przemyslaw.wasala@nokia.com>
Thu, 5 Apr 2018 13:01:38 +0000 (15:01 +0200)
committerwasala <przemyslaw.wasala@nokia.com>
Thu, 5 Apr 2018 13:01:38 +0000 (15:01 +0200)
Refactor from tests ppoint of view

Change-Id: If747a499c70517a74bda6fbc895306271dc61d13
Issue-ID: DCAEGEN2-407
Signed-off-by: wasala <przemyslaw.wasala@nokia.com>
prh-app-server/config/application.yaml
prh-app-server/pom.xml
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/MainApp.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java [new file with mode: 0644]
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/ScheduledTask.java
prh-app-server/src/main/resources/logback.xml
prh-app-server/src/main/resources/scheduled-context.xml
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/ScheduleControllerSpy.java [moved from prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/config/ApplicationProperties.java with 63% similarity]
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/tasks/ScheduledXmlContextITest.java

index efdaa9c..8b2e7ac 100644 (file)
@@ -1,13 +1,32 @@
+spring:
+  profiles:
+    active: prod
 server:
   port: 8100
+logging:
+  level:
+    ROOT: ERROR
+    org.springframework: ERROR
+    org.springframework.data: ERROR
+    org.onap.dcaegen2.services.prh: INFO
+  file: opt/log/application.log
 app:
-  AAIHttpClientConfiguration:
-    aaiHost: "localhost"
-    aaiHostPortNumber: 8080
-    aaiProtocol: "http"
-    aaiUserName: "admin"
-    aaiUserPassword: "admin"
-    aaiIgnoreSSLCertificateErrors: true
+  configs:
+    aaiHttpClientConfiguration:
+      aaiHost: "dns.aai.host"
+      aaiHostPortNumber: 8080
+      aaiProtocol: "https"
+      aaiUserName: "admin"
+      aaiUserPassword: "admin"
+      aaiIgnoreSSLCertificateErrors: true
+#app:
+#  AAIHttpClientConfiguration:
+#    aaiHost: "localhost"
+#    aaiHostPortNumber: 8080
+#    aaiProtocol: "http"
+#    aaiUserName: "admin"
+#    aaiUserPassword: "admin"
+#    aaiIgnoreSSLCertificateErrors: true
 #  dmaap-consumer-configuration:
 #    dmmaphost-name: "localhost"
 #    dmmapport-number: 2222
index 7da9ac1..44ebca2 100644 (file)
           <stagingProfileId>176c31dfe190a</stagingProfileId>
         </configuration>
       </plugin>
-
-
     </plugins>
   </build>
   <dependencies>
index 18db408..9a1fec2 100644 (file)
@@ -21,9 +21,12 @@ package org.onap.dcaegen2.services.prh;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
 import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.concurrent.ConcurrentTaskScheduler;
 
 /**
  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 3/23/18
@@ -33,7 +36,14 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 @ComponentScan
 @EnableScheduling
 public class MainApp {
+
     public static void main(String[] args) {
         SpringApplication.run(MainApp.class, args);
     }
+
+
+    @Bean
+    TaskScheduler taskScheduler() {
+        return new ConcurrentTaskScheduler();
+    }
 }
diff --git a/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java b/prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/controllers/ScheduleController.java
new file mode 100644 (file)
index 0000000..a073963
--- /dev/null
@@ -0,0 +1,67 @@
+/*-
+ * ============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.controllers;
+
+import java.util.concurrent.ScheduledFuture;
+import org.onap.dcaegen2.services.prh.tasks.ScheduledTask;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+/**
+ * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/5/18
+ */
+@Controller
+@Component
+public class ScheduleController {
+
+    private static final int SCHEDULING_DELAY = 20000;
+
+    private final TaskScheduler taskScheduler;
+    private final ScheduledTask scheduledTask;
+
+    private ScheduledFuture<?> scheduledFuture;
+
+    @Autowired
+    public ScheduleController(TaskScheduler taskScheduler, ScheduledTask scheduledTask) {
+        this.taskScheduler = taskScheduler;
+        this.scheduledTask = scheduledTask;
+    }
+
+
+    @RequestMapping(value = "preferences", method = RequestMethod.PUT)
+    public ResponseEntity<Void> startTask() {
+        scheduledFuture = taskScheduler
+            .scheduleWithFixedDelay(scheduledTask::scheduledTaskAskingDMaaPOfConsumeEvent, SCHEDULING_DELAY);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
+    @RequestMapping("stopPrh")
+    public ResponseEntity<Void> stopTask() {
+        scheduledFuture.cancel(false);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
+}
index 706794f..812f920 100644 (file)
@@ -31,14 +31,15 @@ import org.springframework.stereotype.Component;
 @Component
 public class DmaapConsumerTask implements DmaapTask {
 
+
     private static final Logger logger = LoggerFactory.getLogger(DmaapConsumerTask.class);
     private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
 
     @Override
     public void execute() {
+
         logger.debug("Start task DmaapConsumerTask::execute() :: Execution Time - {}", dateTimeFormatter.format(
             LocalDateTime.now()));
-
         logger.debug("End task DmaapConsumerTask::execute() :: Execution Time - {}",
             dateTimeFormatter.format(LocalDateTime.now()));
     }
index 90c1466..a8a0f0b 100644 (file)
@@ -25,6 +25,7 @@ import org.onap.dcaegen2.services.prh.exceptions.AAINotFoundException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.TaskScheduler;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -34,7 +35,6 @@ import org.springframework.stereotype.Component;
 @Component
 public class ScheduledTask {
 
-    private static final int SCHEDULING_DELAY = 1000;
     private static final Logger logger = LoggerFactory.getLogger(ScheduledTask.class);
     private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
 
@@ -45,8 +45,6 @@ public class ScheduledTask {
         this.dmaapConsumerTask = dmaapConsumerTask;
     }
 
-
-    @Scheduled(fixedDelay = SCHEDULING_DELAY)
     public void scheduledTaskAskingDMaaPOfConsumeEvent() {
         logger.debug("Task scheduledTaskAskingDMaaPOfConsumeEvent() :: Execution Time - {}", dateTimeFormatter.format(
             LocalDateTime.now()));
@@ -54,7 +52,7 @@ public class ScheduledTask {
             dmaapConsumerTask.execute();
         } catch (AAINotFoundException e) {
             logger
-                .error("Task scheduledTaskAskingDMaaPOfConsumeEvent()::AAINotFoundException :: Execution Time - {}:{}",
+                .warn("Task scheduledTaskAskingDMaaPOfConsumeEvent()::AAINotFoundException :: Execution Time - {}:{}",
                     dateTimeFormatter.format(
                         LocalDateTime.now()), e);
         }
index 5f5175e..af4ab18 100644 (file)
@@ -1,23 +1,45 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
-  <property name="LOG_PATH" value="logs"/>
-  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-    <encoder>
-      <pattern>%d{yyyy-MM-dd HH:mm:ss} | %-5p | [%thread] %logger{5}:%L - %msg%n</pattern>
-    </encoder>
-  </appender>
+  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
+  <property name="LOG_FILE"
+    value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
 
-  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
-    <file>${LOG_PATH}/logFile.log</file>
-    <append>true</append>
-    <encoder>
-      <pattern>%d{yyyy-MM-dd HH:mm:ss} | %-5p | [%thread] %logger{5}:%L - %msg%n</pattern>
-    </encoder>
-  </appender>
+  <springProfile name="dev">
+    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
+    <appender name="ROLLING-FILE"
+      class="ch.qos.logback.core.rolling.RollingFileAppender">
+      <encoder>
+        <pattern>${FILE_LOG_PATTERN}</pattern>
+      </encoder>
+      <file>${LOG_FILE}</file>
+      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+        <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>
+      </rollingPolicy>
+    </appender>
+    <root level="ERROR">
+      <appender-ref ref="CONSOLE"/>
+      <appender-ref ref="ROLLING-FILE"/>
+    </root>
+  </springProfile>
 
-  <logger name="org.onap.dcaegen2.services.prh" level="TRACE"/>
-  <root level="DEBUG">
-    <appender-ref ref="STDOUT"/>
-    <appender-ref ref="FILE"/>
-  </root>
+  <springProfile name="prod">
+    <appender name="ROLLING-FILE"
+      class="ch.qos.logback.core.rolling.RollingFileAppender">
+      <encoder>
+        <pattern>${FILE_LOG_PATTERN}</pattern>
+      </encoder>
+      <file>${LOG_FILE}</file>
+      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+        <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
+        <timeBasedFileNamingAndTriggeringPolicy
+          class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+          <maxFileSize>10MB</maxFileSize>
+        </timeBasedFileNamingAndTriggeringPolicy>
+      </rollingPolicy>
+    </appender>
+
+    <root level="ERROR">
+      <appender-ref ref="ROLLING-FILE"/>
+    </root>
+  </springProfile>
 </configuration>
\ No newline at end of file
index 1c60df8..d1c80ca 100644 (file)
@@ -10,7 +10,7 @@
   <context:component-scan
     base-package="org.onap.dcaegen2.services.prh"/>
   <task:scheduled-tasks>
-    <task:scheduled ref="scheduledTask" method="scheduledTaskAskingDMaaPOfConsumeEvent"
+    <task:scheduled ref="scheduleController" method="startTask"
       fixed-rate="1000"/>
   </task:scheduled-tasks>
 </beans>
@@ -1,4 +1,4 @@
-/*-
+/*
  * ============LICENSE_START=======================================================
  * PNF-REGISTRATION-HANDLER
  * ================================================================================
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-package org.onap.dcaegen2.services.prh.config;
+package org.onap.dcaegen2.services.prh.tasks;
+
+import static org.mockito.Mockito.spy;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
 
 /**
- * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/3/18
+ * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/5/18
  */
-public class ApplicationProperties {
+@Configuration
+public class ScheduleControllerSpy {
+
+    @Autowired
+    private DmaapConsumerTask dmaapConsumerTaskSpy;
+
+    @Bean
+    @Primary
+    public ScheduledTask registerSimpleDmaapConsumerTask() {
+        return spy(new ScheduledTask(dmaapConsumerTaskSpy));
+    }
 
 }
index a27b454..ed80a0a 100644 (file)
@@ -25,15 +25,14 @@ import static org.mockito.Mockito.verify;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.runner.RunWith;
 import org.onap.dcaegen2.services.prh.IT.junit5.mockito.MockitoExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
 
 /**
@@ -42,25 +41,23 @@ import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
 
 @Configuration
 @ComponentScan
-@RunWith(SpringRunner.class)
-@ExtendWith(MockitoExtension.class)
+@ExtendWith({MockitoExtension.class, SpringExtension.class})
 @ContextConfiguration(locations = {"classpath:scheduled-context.xml"})
-public class ScheduledXmlContextITest extends AbstractTestNGSpringContextTests {
+class ScheduledXmlContextITest extends AbstractTestNGSpringContextTests {
 
     private static final int WAIT_FOR_SCHEDULING = 1;
 
     @Autowired
-    private DmaapConsumerTask dmaapConsumerTaskSpy;
-
+    private ScheduledTask scheduledTask;
 
     @Test
-    public void testScheduling() {
+    void testScheduling() {
         final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
         executorService.scheduleWithFixedDelay(this::verifyDmaapConsumerTask, 0, WAIT_FOR_SCHEDULING, TimeUnit.SECONDS);
     }
 
     private void verifyDmaapConsumerTask() {
-        verify(dmaapConsumerTaskSpy, atLeast(2)).execute();
+        verify(scheduledTask, atLeast(2)).scheduledTaskAskingDMaaPOfConsumeEvent();
     }