Make simulator parameters optional 40/113540/1
authorJim Hahn <jrh3@att.com>
Mon, 5 Oct 2020 15:31:40 +0000 (11:31 -0400)
committerJim Hahn <jrh3@att.com>
Mon, 5 Oct 2020 15:37:56 +0000 (11:37 -0400)
Modified the simulator to make the DMaaP and GRPC parameters optional so
that a simulator can be started without them.  Also added parameter
validation, as that was not being performed on the DMaaP or GRPC
parameters.  Also modified the validation so-as not to require the rest
server parameter field contained within the DMaaP parameter class.

Issue-ID: POLICY-2858
Change-Id: I85dde93c7baf863eca2cb10eab37806f3e08a087
Signed-off-by: Jim Hahn <jrh3@att.com>
models-sim/models-sim-dmaap/src/main/java/org/onap/policy/models/sim/dmaap/parameters/DmaapSimParameterGroup.java
models-sim/policy-models-simulators/src/main/java/org/onap/policy/models/simulators/Main.java
models-sim/policy-models-simulators/src/main/java/org/onap/policy/models/simulators/SimulatorParameters.java
models-sim/policy-models-simulators/src/test/java/org/onap/policy/models/simulators/MainTest.java
models-sim/policy-models-simulators/src/test/java/org/onap/policy/models/simulators/SimulatorParametersTest.java
models-sim/policy-models-simulators/src/test/resources/invalidDmaapParameters.json [new file with mode: 0644]
models-sim/policy-models-simulators/src/test/resources/invalidGrpcParameters.json [new file with mode: 0644]
models-sim/policy-models-simulators/src/test/resources/invalidSimParameters.json [deleted file]
models-sim/policy-models-simulators/src/test/resources/minParameters.json [new file with mode: 0644]
models-sim/policy-models-simulators/src/test/resources/simParameters.json

index 11da575..4e2841a 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019 Nordix Foundation.
- *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ *  Modifications Copyright (C) 2019-2020 AT&T 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.
@@ -25,12 +25,10 @@ import lombok.Getter;
 import org.onap.policy.common.parameters.ParameterGroupImpl;
 import org.onap.policy.common.parameters.annotations.Min;
 import org.onap.policy.common.parameters.annotations.NotBlank;
-import org.onap.policy.common.parameters.annotations.NotNull;
 
 /**
  * Class to hold all parameters needed for the DMaaP simulator component.
  */
-@NotNull
 @NotBlank
 @Getter
 public class DmaapSimParameterGroup extends ParameterGroupImpl {
index a0fafbc..f82423c 100644 (file)
@@ -83,18 +83,22 @@ public class Main extends ServiceManagerContainer {
         }
 
         DmaapSimParameterGroup dmaapProv = params.getDmaapProvider();
-        String dmaapName = dmaapProv.getName();
-        String provName = dmaapName.replace("simulator", "provider");
+        String dmaapName = (dmaapProv != null ? dmaapProv.getName() : null);
 
         // dmaap provider
-        AtomicReference<DmaapSimProvider> provRef = new AtomicReference<>();
-        addAction(provName, () -> provRef.set(buildDmaapProvider(dmaapProv)), () -> provRef.get().shutdown());
+        if (dmaapProv != null) {
+            String provName = dmaapName.replace("simulator", "provider");
+            AtomicReference<DmaapSimProvider> provRef = new AtomicReference<>();
+            addAction(provName, () -> provRef.set(buildDmaapProvider(dmaapProv)), () -> provRef.get().shutdown());
+        }
 
         CdsServerParameters cdsServer = params.getGrpcServer();
 
         // Cds Simulator
-        AtomicReference<CdsSimulator> cdsSim = new AtomicReference<>();
-        addAction(cdsServer.getName(), () -> cdsSim.set(buildCdsSimulator(cdsServer)), () -> cdsSim.get().stop());
+        if (cdsServer != null) {
+            AtomicReference<CdsSimulator> cdsSim = new AtomicReference<>();
+            addAction(cdsServer.getName(), () -> cdsSim.set(buildCdsSimulator(cdsServer)), () -> cdsSim.get().stop());
+        }
 
         // REST server simulators
         // @formatter:off
@@ -276,7 +280,7 @@ public class Main extends ServiceManagerContainer {
         props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_SWAGGER_SUFFIX, "false");
         props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
 
-        if (dmaapName.equals(params.getName())) {
+        if (dmaapName != null && dmaapName.equals(params.getName())) {
             props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_SERIALIZATION_PROVIDER,
                             String.join(",", CambriaMessageBodyHandler.class.getName(),
                                             GsonMessageBodyHandler.class.getName(),
index 788829f..c225271 100644 (file)
@@ -27,14 +27,12 @@ import lombok.Getter;
 import org.onap.policy.common.endpoints.parameters.TopicParameters;
 import org.onap.policy.common.parameters.BeanValidationResult;
 import org.onap.policy.common.parameters.BeanValidator;
-import org.onap.policy.common.parameters.annotations.NotNull;
 import org.onap.policy.models.sim.dmaap.parameters.DmaapSimParameterGroup;
 
 /**
  * Simulator parameters.
  */
 @Getter
-@NotNull
 public class SimulatorParameters {
 
     /**
@@ -77,6 +75,14 @@ public class SimulatorParameters {
     public BeanValidationResult validate(String containerName) {
         BeanValidationResult result = new BeanValidator().validateTop(containerName, this);
 
+        if (dmaapProvider != null) {
+            result.addResult(dmaapProvider.validate());
+        }
+
+        if (grpcServer != null) {
+            result.addResult(grpcServer.validate());
+        }
+
         result.validateList("restServers", restServers, params -> params.validate("restServers"));
         result.validateList("topicServers", topicServers, params -> params.validate("topicServers"));
 
index e9e8cbd..abc27f4 100644 (file)
@@ -109,7 +109,7 @@ public class MainTest {
 
     @Test
     public void testConstructor() throws Exception {
-        assertThatIllegalArgumentException().isThrownBy(() -> new Main("invalidSimParameters.json"))
+        assertThatIllegalArgumentException().isThrownBy(() -> new Main("invalidDmaapParameters.json"))
                         .withMessage("invalid simulator parameters");
     }
 
@@ -125,7 +125,7 @@ public class MainTest {
         Main.main(new String[] {PARAMETER_FILE});
 
         // don't need to wait long, because buildXxx() does the wait for us
-        for (int port = 6666; port <= 6670; ++port) {
+        for (int port : new int[] {6666, 6667, 6668, 6669, 6670, 6680}) {
             assertTrue("simulator on port " + port, NetworkUtil.isTcpPortOpen(HOST, port, 1, 100));
         }
 
@@ -133,6 +133,13 @@ public class MainTest {
         checkAai();
     }
 
+    @Test
+    public void testMainMinimalParameters() {
+        Main.main(new String[] {"minParameters.json"});
+        assertNotNull(Main.getInstance());
+        assertTrue(Main.getInstance().isAlive());
+    }
+
     private void checkAai() throws HttpClientConfigException {
         BusTopicParams params = BusTopicParams.builder().clientName("client").hostname(HOST).port(6666).useHttps(true)
                         .allowSelfSignedCerts(true).basePath("aai").build();
index 5294ca4..f8d7433 100644 (file)
@@ -34,14 +34,24 @@ public class SimulatorParametersTest {
 
     @Test
     public void testValidate() throws CoderException {
-        // some fields missing
-        BeanValidationResult result = new SimulatorParameters().validate("InvalidParams");
-        assertFalse(result.isValid());
-        assertNotNull(result.getResult());
 
         // everything populated
         SimulatorParameters params = new StandardCoder().decode(new File("src/test/resources/simParameters.json"),
                         SimulatorParameters.class);
         assertNull(params.validate("ValidParams").getResult());
+
+        // invalid dmaap provider
+        params = new StandardCoder().decode(new File("src/test/resources/invalidDmaapParameters.json"),
+                        SimulatorParameters.class);
+        BeanValidationResult result = params.validate("InvalidDmaapParams");
+        assertFalse(result.isValid());
+        assertNotNull(result.getResult());
+
+        // invalid grpc server
+        params = new StandardCoder().decode(new File("src/test/resources/invalidGrpcParameters.json"),
+                        SimulatorParameters.class);
+        result = params.validate("InvalidGrpcParams");
+        assertFalse(result.isValid());
+        assertNotNull(result.getResult());
     }
 }
diff --git a/models-sim/policy-models-simulators/src/test/resources/invalidDmaapParameters.json b/models-sim/policy-models-simulators/src/test/resources/invalidDmaapParameters.json
new file mode 100644 (file)
index 0000000..ff67901
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "dmaapProvider": {},
+    "restServers": [],
+    "topicSinks": [],
+    "topicSources": [],
+    "topicServers": []
+}
diff --git a/models-sim/policy-models-simulators/src/test/resources/invalidGrpcParameters.json b/models-sim/policy-models-simulators/src/test/resources/invalidGrpcParameters.json
new file mode 100644 (file)
index 0000000..86e4253
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "grpcServer": {},
+    "restServers": [],
+    "topicSinks": [],
+    "topicSources": [],
+    "topicServers": []
+}
diff --git a/models-sim/policy-models-simulators/src/test/resources/invalidSimParameters.json b/models-sim/policy-models-simulators/src/test/resources/invalidSimParameters.json
deleted file mode 100644 (file)
index 2c63c08..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-{
-}
diff --git a/models-sim/policy-models-simulators/src/test/resources/minParameters.json b/models-sim/policy-models-simulators/src/test/resources/minParameters.json
new file mode 100644 (file)
index 0000000..c7ea498
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "restServers": [
+        {
+            "name": "A&AI simulator",
+            "providerClass": "org.onap.policy.simulators.AaiSimulatorJaxRs",
+            "host": "localhost",
+            "port": 6766,
+            "https": true
+        }
+    ],
+    "topicSinks": [],
+    "topicSources": [],
+    "topicServers": []
+}
index 1d1c0aa..df8de6f 100644 (file)
@@ -1,10 +1,7 @@
 {
     "dmaapProvider": {
         "name": "DMaaP simulator",
-        "topicSweepSec": 300,
-        "restServerParameters": {
-
-        }
+        "topicSweepSec": 300
     },
     "restServers": [
         {