Changes to PAP infrastructure to support PDP 20/83120/6
authorJim Hahn <jrh3@att.com>
Sun, 24 Mar 2019 12:13:58 +0000 (08:13 -0400)
committerJim Hahn <jrh3@att.com>
Tue, 26 Mar 2019 00:56:13 +0000 (20:56 -0400)
Modified PapActivator to implement the Startable interface and used
that to manage it instead of the original method names.
Replaced pdp-common enums with models-pdp enums.
Added the use of the Registry.
Added parameters to be used for PDP interaction.
Added DAO interface classes.
Modified HTTP client, in junit tests, to use GSON instead of Jackson.
Removed DAO code, as the interfaces are not merged into policy/common
yet.
Added pdpParameters to default json config file.
Changed tabs to spaces in json files.

Removed "internal" classes that were moved to models-pdp.

Change-Id: I969a7747e926680ad403557b44a0a52d289fb6d9
Issue-ID: POLICY-1542
Signed-off-by: Jim Hahn <jrh3@att.com>
31 files changed:
main/pom.xml
main/src/main/java/org/onap/policy/pap/main/PapConstants.java [new file with mode: 0644]
main/src/main/java/org/onap/policy/pap/main/comm/MultiPdpStatusListener.java
main/src/main/java/org/onap/policy/pap/main/parameters/PapParameterGroup.java
main/src/main/java/org/onap/policy/pap/main/parameters/PdpParameters.java [new file with mode: 0644]
main/src/main/java/org/onap/policy/pap/main/parameters/PdpRequestParameters.java [new file with mode: 0644]
main/src/main/java/org/onap/policy/pap/main/parameters/PdpStateChangeParameters.java [new file with mode: 0644]
main/src/main/java/org/onap/policy/pap/main/parameters/PdpUpdateParameters.java [new file with mode: 0644]
main/src/main/java/org/onap/policy/pap/main/rest/HealthCheckProvider.java
main/src/main/java/org/onap/policy/pap/main/rest/PapStatisticsManager.java
main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeControllerV1.java
main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeProvider.java
main/src/main/java/org/onap/policy/pap/main/rest/StatisticsProvider.java
main/src/main/java/org/onap/policy/pap/main/startstop/Main.java
main/src/main/java/org/onap/policy/pap/main/startstop/PapActivator.java
main/src/test/java/org/onap/policy/pap/main/PapConstantsTest.java [new file with mode: 0644]
main/src/test/java/org/onap/policy/pap/main/comm/MultiPdpStatusListenerTest.java
main/src/test/java/org/onap/policy/pap/main/parameters/CommonTestData.java
main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpParameters.java [new file with mode: 0644]
main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpRequestParameters.java [new file with mode: 0644]
main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpStateChangeParameters.java [new file with mode: 0644]
main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpUpdateParameters.java [new file with mode: 0644]
main/src/test/java/org/onap/policy/pap/main/rest/CommonPapRestServer.java
main/src/test/java/org/onap/policy/pap/main/rest/TestPapStatisticsManager.java
main/src/test/java/org/onap/policy/pap/main/rest/TestStatisticsRestControllerV1.java
main/src/test/java/org/onap/policy/pap/main/startstop/TestMain.java
main/src/test/java/org/onap/policy/pap/main/startstop/TestPapActivator.java
main/src/test/resources/parameters/MinimumParameters.json
main/src/test/resources/parameters/PapConfigParameters.json
main/src/test/resources/parameters/PapConfigParameters_InvalidName.json
packages/policy-pap-tarball/src/main/resources/etc/defaultConfig.json

index 01c4154..2e221ce 100644 (file)
             <artifactId>common-parameters</artifactId>
             <version>${policy.common.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.onap.policy.common</groupId>
-            <artifactId>pdp-common</artifactId>
-            <version>${policy.common.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.onap.policy.common</groupId>
             <artifactId>utils</artifactId>
         </dependency>
         <dependency>
             <groupId>org.onap.policy.models</groupId>
-            <artifactId>models-pap</artifactId>
+            <artifactId>policy-models-pap</artifactId>
+            <version>${policy.models.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.models</groupId>
+            <artifactId>models-pdp</artifactId>
+            <version>${policy.models.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.models</groupId>
+            <artifactId>policy-models-provider</artifactId>
             <version>${policy.models.version}</version>
         </dependency>
         <dependency>
diff --git a/main/src/main/java/org/onap/policy/pap/main/PapConstants.java b/main/src/main/java/org/onap/policy/pap/main/PapConstants.java
new file mode 100644 (file)
index 0000000..64401b8
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main;
+
+/**
+ * Names of various items contained in the Registry.
+ */
+public class PapConstants {
+
+    // Registry keys
+    public static final String REG_PAP_ACTIVATOR = "object:activator/pap";
+    public static final String REG_STATISTICS_MANAGER = "object:manager/statistics";
+    public static final String REG_PDP_MODIFY_LOCK = "lock:pdp";
+    public static final String REG_PDP_MODIFY_MAP = "object:pdp/modify/map";
+    public static final String REG_PAP_DAO_FACTORY = "object:pap/dao/factory";
+
+    // topic names
+    public static final String TOPIC_POLICY_PDP_PAP = "POLICY-PDP-PAP";
+
+    private PapConstants() {
+        super();
+    }
+}
index 652756a..f3cac7e 100644 (file)
@@ -29,7 +29,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.listeners.TypedMessageListener;
-import org.onap.policy.pdp.common.models.PdpStatus;
+import org.onap.policy.models.pdp.concepts.PdpStatus;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index dce21f9..21dcac0 100644 (file)
@@ -36,6 +36,7 @@ import org.onap.policy.common.parameters.annotations.NotNull;
 @Getter
 public class PapParameterGroup extends ParameterGroupImpl {
     private RestServerParameters restServerParameters;
+    private PdpParameters pdpParameters;
 
     /**
      * Create the pap parameter group.
diff --git a/main/src/main/java/org/onap/policy/pap/main/parameters/PdpParameters.java b/main/src/main/java/org/onap/policy/pap/main/parameters/PdpParameters.java
new file mode 100644 (file)
index 0000000..84fe353
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main.parameters;
+
+import lombok.Getter;
+import org.onap.policy.common.parameters.ParameterGroupImpl;
+import org.onap.policy.common.parameters.annotations.NotBlank;
+import org.onap.policy.common.parameters.annotations.NotNull;
+
+/**
+ * Parameters for communicating with PDPs.
+ */
+@NotNull
+@NotBlank
+@Getter
+public class PdpParameters extends ParameterGroupImpl {
+    private PdpUpdateParameters updateParameters;
+    private PdpStateChangeParameters stateChangeParameters;
+
+
+    /**
+     * Constructs the object.
+     */
+    public PdpParameters() {
+        super(PdpParameters.class.getSimpleName());
+    }
+}
diff --git a/main/src/main/java/org/onap/policy/pap/main/parameters/PdpRequestParameters.java b/main/src/main/java/org/onap/policy/pap/main/parameters/PdpRequestParameters.java
new file mode 100644 (file)
index 0000000..2df20fb
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main.parameters;
+
+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;
+
+/**
+ * Parameters for communicating with PDPs.
+ */
+@NotNull
+@NotBlank
+@Getter
+public class PdpRequestParameters extends ParameterGroupImpl {
+
+    // NOTE: these fields must not be "private" or the validator will skip them
+
+    /**
+     * Maximum number of times to re-send a request to a PDP.
+     */
+    @Min(value = 0)
+    protected int maxRetryCount;
+
+    /**
+     * Maximum time to wait, in milliseconds, for a PDP response.
+     */
+    @Min(value = 0)
+    protected long maxWaitMs;
+
+
+    /**
+     * Constructs the object.
+     *
+     * @param name name of this set of parameters
+     */
+    public PdpRequestParameters(String name) {
+        super(name);
+    }
+}
diff --git a/main/src/main/java/org/onap/policy/pap/main/parameters/PdpStateChangeParameters.java b/main/src/main/java/org/onap/policy/pap/main/parameters/PdpStateChangeParameters.java
new file mode 100644 (file)
index 0000000..9a46486
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main.parameters;
+
+import lombok.Getter;
+import org.onap.policy.common.parameters.annotations.NotBlank;
+import org.onap.policy.common.parameters.annotations.NotNull;
+
+/**
+ * Parameters for PDP STATE-CHANGE requests.
+ */
+@NotNull
+@NotBlank
+@Getter
+public class PdpStateChangeParameters extends PdpRequestParameters {
+
+    /**
+     * Constructs the object.
+     */
+    public PdpStateChangeParameters() {
+        super(PdpStateChangeParameters.class.getSimpleName());
+    }
+}
diff --git a/main/src/main/java/org/onap/policy/pap/main/parameters/PdpUpdateParameters.java b/main/src/main/java/org/onap/policy/pap/main/parameters/PdpUpdateParameters.java
new file mode 100644 (file)
index 0000000..c8e90bd
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main.parameters;
+
+import lombok.Getter;
+import org.onap.policy.common.parameters.annotations.NotBlank;
+import org.onap.policy.common.parameters.annotations.NotNull;
+
+/**
+ * Parameters for PDP UPDATE requests.
+ */
+@NotNull
+@NotBlank
+@Getter
+public class PdpUpdateParameters extends PdpRequestParameters {
+
+    /**
+     * Constructs the object.
+     */
+    public PdpUpdateParameters() {
+        super(PdpUpdateParameters.class.getSimpleName());
+    }
+}
index 58dccc8..b585b9d 100644 (file)
@@ -22,6 +22,8 @@
 package org.onap.policy.pap.main.rest;
 
 import org.onap.policy.common.endpoints.report.HealthCheckReport;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.pap.main.PapConstants;
 import org.onap.policy.pap.main.startstop.PapActivator;
 
 /**
@@ -46,7 +48,7 @@ public class HealthCheckProvider {
         report.setName(NAME);
         report.setUrl(URL);
 
-        boolean alive = PapActivator.getCurrent().isAlive();
+        boolean alive = Registry.get(PapConstants.REG_PAP_ACTIVATOR, PapActivator.class).isAlive();
 
         report.setHealthy(alive);
         report.setCode(alive ? 200 : 500);
index 3289366..daa1a9c 100644 (file)
@@ -22,7 +22,6 @@
 package org.onap.policy.pap.main.rest;
 
 import java.util.concurrent.atomic.AtomicLong;
-import lombok.Getter;
 
 /**
  * Class to hold statistical data for pap component.
@@ -31,9 +30,6 @@ import lombok.Getter;
  */
 public class PapStatisticsManager {
 
-    @Getter
-    private static final PapStatisticsManager instance = new PapStatisticsManager();
-
     private final AtomicLong totalPdpCount = new AtomicLong(0);
     private final AtomicLong totalPdpGroupCount = new AtomicLong(0);
     private final AtomicLong totalPolicyDeployCount = new AtomicLong(0);
@@ -46,7 +42,7 @@ public class PapStatisticsManager {
     /**
      * Constructs the object.
      */
-    protected PapStatisticsManager() {
+    public PapStatisticsManager() {
         super();
     }
 
index f3eb1de..72e1fe5 100644 (file)
@@ -28,9 +28,7 @@ import io.swagger.annotations.Authorization;
 import io.swagger.annotations.Extension;
 import io.swagger.annotations.ExtensionProperty;
 import io.swagger.annotations.ResponseHeader;
-
 import java.util.UUID;
-
 import javax.ws.rs.HeaderParam;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
@@ -38,10 +36,9 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
-
 import org.apache.commons.lang3.tuple.Pair;
 import org.onap.policy.models.pap.concepts.PdpGroupStateChangeResponse;
-import org.onap.policy.pdp.common.enums.PdpState;
+import org.onap.policy.models.pdp.enums.PdpState;
 
 /**
  * Class to provide REST end points for PAP component to change state of a PDP group.
index 51441e4..49f55e2 100644 (file)
 package org.onap.policy.pap.main.rest;
 
 import javax.ws.rs.core.Response;
-
 import org.apache.commons.lang3.tuple.Pair;
 import org.onap.policy.models.pap.concepts.PdpGroupStateChangeResponse;
-import org.onap.policy.pdp.common.enums.PdpState;
+import org.onap.policy.models.pdp.enums.PdpState;
 
 /**
  * Provider for PAP component to change state of PDP group.
index 026ccf4..8e6410a 100644 (file)
@@ -21,6 +21,8 @@
 
 package org.onap.policy.pap.main.rest;
 
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.pap.main.PapConstants;
 import org.onap.policy.pap.main.startstop.PapActivator;
 
 /**
@@ -37,9 +39,9 @@ public class StatisticsProvider {
      */
     public StatisticsReport fetchCurrentStatistics() {
         final StatisticsReport report = new StatisticsReport();
-        report.setCode(PapActivator.getCurrent().isAlive() ? 200 : 500);
+        report.setCode(Registry.get(PapConstants.REG_PAP_ACTIVATOR, PapActivator.class).isAlive() ? 200 : 500);
 
-        PapStatisticsManager mgr = PapStatisticsManager.getInstance();
+        PapStatisticsManager mgr = Registry.get(PapConstants.REG_STATISTICS_MANAGER, PapStatisticsManager.class);
         report.setTotalPdpCount(mgr.getTotalPdpCount());
         report.setTotalPdpGroupCount(mgr.getTotalPdpGroupCount());
         report.setTotalPolicyDownloadCount(mgr.getTotalPolicyDownloadCount());
index 223e322..d58be4e 100644 (file)
@@ -24,6 +24,8 @@ package org.onap.policy.pap.main.startstop;
 import java.io.FileInputStream;
 import java.util.Arrays;
 import java.util.Properties;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.pap.main.PapConstants;
 import org.onap.policy.pap.main.PolicyPapException;
 import org.onap.policy.pap.main.parameters.PapParameterGroup;
 import org.onap.policy.pap.main.parameters.PapParameterHandler;
@@ -89,12 +91,14 @@ public class Main {
 
         // Now, create the activator for the policy pap service
         activator = new PapActivator(parameterGroup, props);
+        Registry.register(PapConstants.REG_PAP_ACTIVATOR, activator);
 
         // Start the activator
         try {
-            activator.initialize();
-        } catch (final PolicyPapException e) {
+            activator.start();
+        } catch (final RuntimeException e) {
             LOGGER.error("start of policy pap service failed, used parameters are {}", Arrays.toString(args), e);
+            Registry.unregister(PapConstants.REG_PAP_ACTIVATOR);
             return;
         }
 
@@ -123,7 +127,7 @@ public class Main {
 
         // clear the pap activator
         if (activator != null) {
-            activator.terminate();
+            activator.stop();
         }
     }
 
@@ -140,8 +144,8 @@ public class Main {
         public void run() {
             try {
                 // Shutdown the policy pap service and wait for everything to stop
-                activator.terminate();
-            } catch (final PolicyPapException e) {
+                activator.stop();
+            } catch (final RuntimeException e) {
                 LOGGER.warn("error occured during shut down of the policy pap service", e);
             }
         }
index 3334d81..913e661 100644 (file)
 
 package org.onap.policy.pap.main.startstop;
 
+import java.util.Arrays;
 import java.util.Properties;
-import lombok.Getter;
-import lombok.Setter;
 import org.onap.policy.common.endpoints.event.comm.TopicEndpoint;
+import org.onap.policy.common.endpoints.event.comm.TopicSource;
+import org.onap.policy.common.endpoints.listeners.MessageTypeDispatcher;
+import org.onap.policy.common.endpoints.listeners.RequestIdDispatcher;
 import org.onap.policy.common.parameters.ParameterService;
-import org.onap.policy.common.utils.services.ServiceManager;
-import org.onap.policy.common.utils.services.ServiceManagerException;
-import org.onap.policy.pap.main.PolicyPapException;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.common.utils.services.ServiceManagerContainer;
+import org.onap.policy.models.pdp.concepts.PdpStatus;
+import org.onap.policy.models.pdp.enums.PdpMessageType;
+import org.onap.policy.pap.main.PapConstants;
+import org.onap.policy.pap.main.PolicyPapRuntimeException;
 import org.onap.policy.pap.main.parameters.PapParameterGroup;
 import org.onap.policy.pap.main.rest.PapRestServer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.onap.policy.pap.main.rest.PapStatisticsManager;
 
 /**
  * This class wraps a distributor so that it can be activated as a complete service
@@ -40,28 +44,28 @@ import org.slf4j.LoggerFactory;
  *
  * @author Ram Krishna Verma (ram.krishna.verma@est.tech)
  */
-public class PapActivator {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(PapActivator.class);
+public class PapActivator extends ServiceManagerContainer {
+    private static final String[] MSG_TYPE_NAMES = {"messageName"};
+    private static final String[] REQ_ID_NAMES = {"response", "responseTo"};
 
     private final PapParameterGroup papParameterGroup;
 
     /**
-     * The current activator.
+     * The PAP REST API server.
      */
-    @Getter
-    private static volatile PapActivator current = null;
+    private PapRestServer restServer;
 
     /**
-     * Used to stop the services.
+     * Listens for messages on the topic, decodes them into a {@link PdpStatus} message,
+     * and then dispatches them to {@link #reqIdDispatcher}.
      */
-    private final ServiceManager manager;
-
-    @Getter
-    @Setter(lombok.AccessLevel.PRIVATE)
-    private volatile boolean alive = false;
+    private final MessageTypeDispatcher msgDispatcher;
 
-    private PapRestServer restServer;
+    /**
+     * Listens for {@link PdpStatus} messages and then routes them to the listener
+     * associated with the ID of the originating request.
+     */
+    private final RequestIdDispatcher<PdpStatus> reqIdDispatcher;
 
     /**
      * Instantiate the activator for policy pap as a complete service.
@@ -70,66 +74,55 @@ public class PapActivator {
      * @param topicProperties properties used to configure the topics
      */
     public PapActivator(final PapParameterGroup papParameterGroup, Properties topicProperties) {
+        super("Policy PAP");
+
         TopicEndpoint.manager.addTopicSinks(topicProperties);
         TopicEndpoint.manager.addTopicSources(topicProperties);
 
-        this.papParameterGroup = papParameterGroup;
+        try {
+            this.papParameterGroup = papParameterGroup;
+            papParameterGroup.getRestServerParameters().setName(papParameterGroup.getName());
+
+            this.msgDispatcher = new MessageTypeDispatcher(MSG_TYPE_NAMES);
+            this.reqIdDispatcher = new RequestIdDispatcher<>(PdpStatus.class, REQ_ID_NAMES);
+
+        } catch (RuntimeException e) {
+            throw new PolicyPapRuntimeException(e);
+        }
+
+        this.msgDispatcher.register(PdpMessageType.PDP_STATUS.name(), this.reqIdDispatcher);
+
+        final Object pdpUpdateLock = new Object();
 
         // @formatter:off
-        this.manager = new ServiceManager()
-                        .addAction("topics",
-                            () -> TopicEndpoint.manager.start(),
-                            () -> TopicEndpoint.manager.shutdown())
-                        .addAction("register parameters",
-                            () -> registerToParameterService(papParameterGroup),
-                            () -> deregisterToParameterService(papParameterGroup))
-                        .addAction("REST server",
-                            () -> startPapRestServer(),
-                            () -> restServer.stop())
-                        .addAction("set alive",
-                            () -> setAlive(true),
-                            () -> setAlive(false));
-        // @formatter:on
+        addAction("PAP parameters",
+            () -> ParameterService.register(papParameterGroup),
+            () -> ParameterService.deregister(papParameterGroup.getName()));
 
-        current = this;
-    }
+        addAction("dispatcher",
+            () -> registerDispatcher(),
+            () -> unregisterDispatcher());
 
-    /**
-     * Initialize pap as a complete service.
-     *
-     * @throws PolicyPapException on errors in initializing the service
-     */
-    public void initialize() throws PolicyPapException {
-        if (isAlive()) {
-            throw new IllegalStateException("activator already initialized");
-        }
+        addAction("topics",
+            () -> TopicEndpoint.manager.start(),
+            () -> TopicEndpoint.manager.shutdown());
 
-        try {
-            LOGGER.debug("Policy pap starting as a service . . .");
-            manager.start();
-            LOGGER.debug("Policy pap started as a service");
-        } catch (final ServiceManagerException exp) {
-            LOGGER.error("Policy pap service startup failed");
-            throw new PolicyPapException(exp.getMessage(), exp);
-        }
-    }
+        addAction("PAP statistics",
+            () -> Registry.register(PapConstants.REG_STATISTICS_MANAGER, new PapStatisticsManager()),
+            () -> Registry.unregister(PapConstants.REG_STATISTICS_MANAGER));
 
-    /**
-     * Terminate policy pap.
-     *
-     * @throws PolicyPapException on errors in terminating the service
-     */
-    public void terminate() throws PolicyPapException {
-        if (!isAlive()) {
-            throw new IllegalStateException("activator is not running");
-        }
+        addAction("PDP modification lock",
+            () -> Registry.register(PapConstants.REG_PDP_MODIFY_LOCK, pdpUpdateLock),
+            () -> Registry.unregister(PapConstants.REG_PDP_MODIFY_LOCK));
 
-        try {
-            manager.stop();
-        } catch (final ServiceManagerException exp) {
-            LOGGER.error("Policy pap service termination failed");
-            throw new PolicyPapException(exp.getMessage(), exp);
-        }
+        addAction("REST server",
+            () -> restServer = new PapRestServer(papParameterGroup.getRestServerParameters()),
+            () -> { });
+
+        addAction("REST server thread",
+            () -> restServer.start(),
+            () -> restServer.stop());
+        // @formatter:on
     }
 
     /**
@@ -142,33 +135,22 @@ public class PapActivator {
     }
 
     /**
-     * Method to register the parameters to Common Parameter Service.
-     *
-     * @param papParameterGroup the pap parameter group
+     * Registers the dispatcher with the topic source(s).
      */
-    public void registerToParameterService(final PapParameterGroup papParameterGroup) {
-        ParameterService.register(papParameterGroup);
-    }
-
-    /**
-     * Method to deregister the parameters from Common Parameter Service.
-     *
-     * @param papParameterGroup the pap parameter group
-     */
-    public void deregisterToParameterService(final PapParameterGroup papParameterGroup) {
-        ParameterService.deregister(papParameterGroup.getName());
+    private void registerDispatcher() {
+        for (TopicSource source : TopicEndpoint.manager
+                        .getTopicSources(Arrays.asList(PapConstants.TOPIC_POLICY_PDP_PAP))) {
+            source.register(msgDispatcher);
+        }
     }
 
     /**
-     * Starts the pap rest server using configuration parameters.
-     *
-     * @throws PolicyPapException if server start fails
+     * Unregisters the dispatcher from the topic source(s).
      */
-    private void startPapRestServer() throws PolicyPapException {
-        papParameterGroup.getRestServerParameters().setName(papParameterGroup.getName());
-        restServer = new PapRestServer(papParameterGroup.getRestServerParameters());
-        if (!restServer.start()) {
-            throw new PolicyPapException("Failed to start pap rest server. Check log for more details...");
+    private void unregisterDispatcher() {
+        for (TopicSource source : TopicEndpoint.manager
+                        .getTopicSources(Arrays.asList(PapConstants.TOPIC_POLICY_PDP_PAP))) {
+            source.unregister(msgDispatcher);
         }
     }
 }
diff --git a/main/src/test/java/org/onap/policy/pap/main/PapConstantsTest.java b/main/src/test/java/org/onap/policy/pap/main/PapConstantsTest.java
new file mode 100644 (file)
index 0000000..9509d03
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main;
+
+import org.junit.Test;
+import org.powermock.reflect.Whitebox;
+
+public class PapConstantsTest {
+
+    @Test
+    public void test() throws Exception {
+        // verify that constructor does not throw an exception
+        Whitebox.invokeConstructor(PapConstants.class);
+    }
+}
index d0dba80..9cef0c9 100644 (file)
@@ -31,9 +31,9 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import org.junit.Test;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
+import org.onap.policy.models.pdp.concepts.PdpResponseDetails;
+import org.onap.policy.models.pdp.concepts.PdpStatus;
 import org.onap.policy.pap.main.comm.MultiPdpStatusListener;
-import org.onap.policy.pdp.common.models.PdpResponseDetails;
-import org.onap.policy.pdp.common.models.PdpStatus;
 
 public class MultiPdpStatusListenerTest {
     private static final CommInfrastructure INFRA = CommInfrastructure.NOOP;
index 8054194..9d0a1ab 100644 (file)
@@ -21,6 +21,7 @@
 
 package org.onap.policy.pap.main.parameters;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
 import org.onap.policy.common.parameters.ParameterGroup;
@@ -72,7 +73,7 @@ public class CommonTestData {
 
         map.put("name", name);
         map.put("restServerParameters", getRestServerParametersMap(false));
-        map.put("pdpGroupDeploymentParameters", getPdpGroupDeploymentParametersMap());
+        map.put("pdpParameters", getPdpParametersMap());
 
         return map;
     }
@@ -98,6 +99,47 @@ public class CommonTestData {
         return map;
     }
 
+    /**
+     * Returns a property map for a PdpParameters map for test cases.
+     * @return a property map suitable for constructing an object
+     */
+    public Map<String,Object> getPdpParametersMap() {
+        Map<String,Object> map = new TreeMap<>();
+
+        map.put("updateParameters", getPdpUpdateParametersMap());
+        map.put("stateChangeParameters", getPdpStateChangeParametersMap());
+
+        return map;
+    }
+
+    /**
+     * Returns a property map for a PdpUpdateParameters map for test cases.
+     * @return a property map suitable for constructing an object
+     */
+    public Map<String,Object> getPdpUpdateParametersMap() {
+        return getPdpRequestParametersMap();
+    }
+
+    /**
+     * Returns a property map for a PdpStateChangeParameters map for test cases.
+     * @return a property map suitable for constructing an object
+     */
+    public Map<String,Object> getPdpStateChangeParametersMap() {
+        return getPdpRequestParametersMap();
+    }
+
+    /**
+     * Returns a property map for a PdpParameters map for test cases.
+     * @return a property map suitable for constructing an object
+     */
+    public Map<String,Object> getPdpRequestParametersMap() {
+        Map<String, Object> map = new HashMap<>();
+        map.put("maxRetryCount", "1");
+        map.put("maxWaitMs", "2");
+
+        return map;
+    }
+
     /**
      * Returns a property map for a PdpGroupDeploymentParameters map for test cases.
      *
diff --git a/main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpParameters.java b/main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpParameters.java
new file mode 100644 (file)
index 0000000..05bcc10
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main.parameters;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Map;
+import org.junit.Test;
+import org.onap.policy.common.parameters.GroupValidationResult;
+
+public class TestPdpParameters {
+    private static CommonTestData testData = new CommonTestData();
+
+    @Test
+    public void testGetters() {
+        PdpParameters params = testData.toObject(testData.getPdpParametersMap(), PdpParameters.class);
+
+        PdpUpdateParameters update = params.getUpdateParameters();
+        assertNotNull(update);
+        assertEquals(1, update.getMaxRetryCount());
+
+        PdpStateChangeParameters state = params.getStateChangeParameters();
+        assertNotNull(state);
+        assertEquals(2, state.getMaxWaitMs());
+    }
+
+    @Test
+    public void testValidate() {
+        // valid
+        Map<String, Object> map = testData.getPdpParametersMap();
+        GroupValidationResult result = testData.toObject(map, PdpParameters.class).validate();
+        assertNull(result.getResult());
+        assertTrue(result.isValid());
+
+        // no update params
+        map = testData.getPdpParametersMap();
+        map.remove("updateParameters");
+        result = testData.toObject(map, PdpParameters.class).validate();
+        assertFalse(result.isValid());
+        assertTrue(result.getResult().contains("field 'updateParameters'".replace('\'', '"')));
+        assertTrue(result.getResult().contains("is null"));
+
+        // invalid update params
+        map = testData.getPdpParametersMap();
+        @SuppressWarnings("unchecked")
+        Map<String, Object> updmap = (Map<String, Object>) map.get("updateParameters");
+        updmap.put("maxRetryCount", "-2");
+        result = testData.toObject(map, PdpParameters.class).validate();
+        assertFalse(result.isValid());
+        assertTrue(result.getResult().contains("parameter group 'PdpUpdateParameters'".replace('\'', '"')));
+        assertTrue(result.getResult().contains(
+                        "field 'maxRetryCount' type 'int' value '-2' INVALID, must be >= 0".replace('\'', '"')));
+
+        // no state-change params
+        map = testData.getPdpParametersMap();
+        map.remove("stateChangeParameters");
+        result = testData.toObject(map, PdpParameters.class).validate();
+        assertFalse(result.isValid());
+
+        // invalid state-change params
+        map = testData.getPdpParametersMap();
+        @SuppressWarnings("unchecked")
+        Map<String, Object> statemap = (Map<String, Object>) map.get("stateChangeParameters");
+        statemap.put("maxRetryCount", "-3");
+        result = testData.toObject(map, PdpParameters.class).validate();
+        assertFalse(result.isValid());
+        System.out.println(result.getResult());
+        assertTrue(result.getResult().contains("parameter group 'PdpStateChangeParameters'".replace('\'', '"')));
+        assertTrue(result.getResult().contains(
+                        "field 'maxRetryCount' type 'int' value '-3' INVALID, must be >= 0".replace('\'', '"')));
+    }
+
+}
diff --git a/main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpRequestParameters.java b/main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpRequestParameters.java
new file mode 100644 (file)
index 0000000..e852442
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main.parameters;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.StandardCoder;
+
+public class TestPdpRequestParameters {
+    private static final Coder coder = new StandardCoder();
+
+    @Test
+    public void test() throws Exception {
+        PdpRequestParameters params = makeParams(10, 20);
+        assertEquals(10, params.getMaxRetryCount());
+        assertEquals(20, params.getMaxWaitMs());
+    }
+
+    @Test
+    public void testValidate() throws Exception {
+        // valid, zeroes
+        PdpRequestParameters params = makeParams(0, 0);
+        GroupValidationResult result = params.validate();
+        assertNull(result.getResult());
+        assertTrue(result.isValid());
+
+        // valid
+        params = makeParams(100, 110);
+        result = params.validate();
+        assertNull(result.getResult());
+        assertTrue(result.isValid());
+
+        // invalid retry count
+        params = makeParams(-1, 120);
+        result = params.validate();
+        assertFalse(result.isValid());
+        assertTrue(result.getResult().contains(
+                        "field 'maxRetryCount' type 'int' value '-1' INVALID, must be >= 0".replace('\'', '"')));
+
+        // invalid wait time
+        params = makeParams(130, -1);
+        result = params.validate();
+        assertFalse(result.isValid());
+        assertTrue(result.getResult()
+                        .contains("field 'maxWaitMs' type 'long' value '-1' INVALID, must be >= 0".replace('\'', '"')));
+    }
+
+    private PdpRequestParameters makeParams(int maxRetry, long maxWait) throws Exception {
+        String json = "{'name':'abc', 'maxRetryCount':" + maxRetry + ", 'maxWaitMs':" + maxWait + "}";
+        return coder.decode(json.replace('\'', '"'), PdpRequestParameters.class);
+    }
+}
diff --git a/main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpStateChangeParameters.java b/main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpStateChangeParameters.java
new file mode 100644 (file)
index 0000000..5744303
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main.parameters;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.StandardCoder;
+
+/**
+ * As {@link TestPdpRequestParameters} tests the "getXxx()" methods, all we need to verify
+ * here is that the object is valid after loading from JSON.
+ */
+public class TestPdpStateChangeParameters {
+    private static final Coder coder = new StandardCoder();
+
+    @Test
+    public void testValidate() throws Exception {
+        // valid, zeroes
+        PdpStateChangeParameters params = makeParams(10, 20);
+        GroupValidationResult result = params.validate();
+        assertNull(result.getResult());
+        assertTrue(result.isValid());
+    }
+
+    private PdpStateChangeParameters makeParams(int maxRetry, long maxWait) throws Exception {
+        String json = "{'maxRetryCount':" + maxRetry + ", 'maxWaitMs':" + maxWait + "}";
+        return coder.decode(json.replace('\'', '"'), PdpStateChangeParameters.class);
+    }
+}
diff --git a/main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpUpdateParameters.java b/main/src/test/java/org/onap/policy/pap/main/parameters/TestPdpUpdateParameters.java
new file mode 100644 (file)
index 0000000..6866c40
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP PAP
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * 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.policy.pap.main.parameters;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.StandardCoder;
+
+/**
+ * As {@link TestPdpRequestParameters} tests the "getXxx()" methods, all we need to verify
+ * here is that the object is valid after loading from JSON.
+ */
+public class TestPdpUpdateParameters {
+    private static final Coder coder = new StandardCoder();
+
+    @Test
+    public void testValidate() throws Exception {
+        // valid, zeroes
+        PdpUpdateParameters params = makeParams(10, 20);
+        GroupValidationResult result = params.validate();
+        assertNull(result.getResult());
+        assertTrue(result.isValid());
+    }
+
+    private PdpUpdateParameters makeParams(int maxRetry, long maxWait) throws Exception {
+        String json = "{'maxRetryCount':" + maxRetry + ", 'maxWaitMs':" + maxWait + "}";
+        return coder.decode(json.replace('\'', '"'), PdpUpdateParameters.class);
+    }
+}
index 25ab1c3..32eb3b2 100644 (file)
@@ -26,7 +26,6 @@ import static org.junit.Assert.assertTrue;
 
 import java.io.File;
 import java.security.SecureRandom;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 import java.util.function.Function;
@@ -37,15 +36,20 @@ import javax.ws.rs.client.Invocation;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.onap.policy.common.gson.GsonMessageBodyHandler;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.network.NetworkUtil;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.pap.main.PapConstants;
 import org.onap.policy.pap.main.PolicyPapException;
+import org.onap.policy.pap.main.parameters.CommonTestData;
 import org.onap.policy.pap.main.startstop.Main;
 import org.onap.policy.pap.main.startstop.PapActivator;
 import org.powermock.reflect.Whitebox;
@@ -119,7 +123,7 @@ public class CommonPapRestServer {
             startMain();
         }
 
-        activatorWasAlive = PapActivator.getCurrent().isAlive();
+        activatorWasAlive = Registry.get(PapConstants.REG_PAP_ACTIVATOR, PapActivator.class).isAlive();
     }
 
     /**
@@ -127,7 +131,7 @@ public class CommonPapRestServer {
      */
     @After
     public void tearDown() {
-        Whitebox.setInternalState(PapActivator.getCurrent(), "alive", activatorWasAlive);
+        markActivator(activatorWasAlive);
     }
 
     /**
@@ -149,20 +153,11 @@ public class CommonPapRestServer {
      * @throws Exception if an error occurs
      */
     private static void makeConfigFile() throws Exception {
-        Map<String, Object> restParams = new HashMap<>();
-        restParams.put("host", "0.0.0.0");
-        restParams.put("port", port);
-        restParams.put("userName", "healthcheck");
-        restParams.put("password", "zb!XztG34");
-        restParams.put("https", true);
-
-        Map<String, Object> pdpGroupDeploy = new HashMap<>();
-        pdpGroupDeploy.put("waitResponseMs", "0");
+        Map<String, Object> config = new CommonTestData().getPapParameterGroupMap("PapGroup");
 
-        Map<String, Object> config = new HashMap<>();
-        config.put("name", "PapGroup");
-        config.put("restServerParameters", restParams);
-        config.put("pdpGroupDeploymentParameters", pdpGroupDeploy);
+        @SuppressWarnings("unchecked")
+        Map<String, Object> restParams = (Map<String, Object>) config.get("restServerParameters");
+        restParams.put("port", port);
 
         File file = new File("src/test/resources/parameters/TestConfigParams.json");
         file.deleteOnExit();
@@ -176,6 +171,8 @@ public class CommonPapRestServer {
      * @throws Exception if an error occurs
      */
     private static void startMain() throws Exception {
+        Registry.newRegistry();
+
         // make sure port is available
         if (NetworkUtil.isTcpPortOpen("localhost", port, 1, 1L)) {
             throw new IllegalStateException("port " + port + " is still in use");
@@ -218,7 +215,13 @@ public class CommonPapRestServer {
      * Mark the activator as dead, but leave its REST server running.
      */
     protected void markActivatorDead() {
-        Whitebox.setInternalState(PapActivator.getCurrent(), "alive", false);
+        markActivator(false);
+    }
+
+    private void markActivator(boolean wasAlive) {
+        Object manager = Whitebox.getInternalState(Registry.get(PapConstants.REG_PAP_ACTIVATOR, PapActivator.class),
+                        "serviceManager");
+        Whitebox.setInternalState(manager, "running", wasAlive);
     }
 
     /**
@@ -272,6 +275,9 @@ public class CommonPapRestServer {
                         ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true);
         final Client client = clientBuilder.build();
 
+        client.property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
+        client.register(GsonMessageBodyHandler.class);
+
         if (includeAuth) {
             final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
             client.register(feature);
index d4e4f81..b600711 100644 (file)
@@ -21,8 +21,6 @@
 package org.onap.policy.pap.main.rest;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
 
 import org.junit.Test;
 
@@ -30,14 +28,7 @@ public class TestPapStatisticsManager {
 
     @Test
     public void test() {
-        PapStatisticsManager mgr = PapStatisticsManager.getInstance();
-        assertNotNull(mgr);
-
-        // should return the same manager
-        assertSame(mgr, PapStatisticsManager.getInstance());
-
-        // work with a new object so we don't have to worry about initial counts
-        mgr = new PapStatisticsManager();
+        PapStatisticsManager mgr = new PapStatisticsManager();
 
         // try each update
 
index 9874389..1894fd7 100644 (file)
 package org.onap.policy.pap.main.rest;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Modifier;
 import javax.ws.rs.client.Invocation;
-import org.junit.Before;
 import org.junit.Test;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.pap.main.PapConstants;
 
 /**
  * Class to perform unit test of {@link PapRestServer}.
@@ -39,18 +37,6 @@ public class TestStatisticsRestControllerV1 extends CommonPapRestServer {
 
     private static final String STATISTICS_ENDPOINT = "statistics";
 
-    /**
-     * Set up.
-     *
-     * @throws Exception if an error occurs
-     */
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
-
-        PapStatisticsManager.getInstance().resetAllStatistics();
-    }
-
     @Test
     public void testSwagger() throws Exception {
         super.testSwagger(STATISTICS_ENDPOINT);
@@ -76,21 +62,15 @@ public class TestStatisticsRestControllerV1 extends CommonPapRestServer {
 
         markActivatorDead();
 
-        PapStatisticsManager.getInstance().resetAllStatistics();
+        Registry.get(PapConstants.REG_STATISTICS_MANAGER, PapStatisticsManager.class).resetAllStatistics();
 
         Invocation.Builder invocationBuilder = sendRequest(STATISTICS_ENDPOINT);
         StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
         validateStatisticsReport(report, 0, 500);
     }
 
-    @Test
-    public void testPapStatisticsConstructorIsProtected() throws Exception {
-        final Constructor<PapStatisticsManager> constructor = PapStatisticsManager.class.getDeclaredConstructor();
-        assertTrue(Modifier.isProtected(constructor.getModifiers()));
-    }
-
     private void updateDistributionStatistics() {
-        PapStatisticsManager mgr = PapStatisticsManager.getInstance();
+        PapStatisticsManager mgr = Registry.get(PapConstants.REG_STATISTICS_MANAGER, PapStatisticsManager.class);
 
         mgr.updateTotalPdpCount();
         mgr.updateTotalPdpGroupCount();
index 37da7e9..650e824 100644 (file)
 package org.onap.policy.pap.main.startstop;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.pap.main.PapConstants;
 import org.onap.policy.pap.main.PolicyPapException;
 import org.onap.policy.pap.main.parameters.CommonTestData;
 
@@ -37,6 +41,14 @@ import org.onap.policy.pap.main.parameters.CommonTestData;
 public class TestMain {
     private Main main;
 
+    /**
+     * Set up.
+     */
+    @Before
+    public void setUp() {
+        Registry.newRegistry();
+    }
+
     /**
      * Shuts "main" down.
      * @throws Exception if an error occurs
@@ -44,9 +56,9 @@ public class TestMain {
     @After
     public void tearDown() throws Exception {
         // shut down activator
-        PapActivator activator = PapActivator.getCurrent();
+        PapActivator activator = Registry.getOrDefault(PapConstants.REG_PAP_ACTIVATOR, PapActivator.class, null);
         if (activator != null && activator.isAlive()) {
-            activator.terminate();
+            activator.stop();
         }
     }
 
@@ -58,6 +70,9 @@ public class TestMain {
         assertTrue(main.getParameters().isValid());
         assertEquals(CommonTestData.PAP_GROUP_NAME, main.getParameters().getName());
 
+        // ensure items were added to the registry
+        assertNotNull(Registry.get(PapConstants.REG_PAP_ACTIVATOR, PapActivator.class));
+
         main.shutdown();
     }
 
index 059ea0b..cfa2ae9 100644 (file)
@@ -24,7 +24,7 @@ package org.onap.policy.pap.main.startstop;
 import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.FileInputStream;
@@ -32,10 +32,13 @@ import java.util.Properties;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.pap.main.PapConstants;
 import org.onap.policy.pap.main.PolicyPapException;
 import org.onap.policy.pap.main.parameters.CommonTestData;
 import org.onap.policy.pap.main.parameters.PapParameterGroup;
 import org.onap.policy.pap.main.parameters.PapParameterHandler;
+import org.onap.policy.pap.main.rest.PapStatisticsManager;
 
 
 /**
@@ -54,13 +57,15 @@ public class TestPapActivator {
      */
     @Before
     public void setUp() throws Exception {
+        Registry.newRegistry();
+
         final String[] papConfigParameters =
             {"-c", "parameters/PapConfigParameters.json", "-p", "parameters/topic.properties"};
         final PapCommandLineArguments arguments = new PapCommandLineArguments(papConfigParameters);
         final PapParameterGroup parGroup = new PapParameterHandler().getParameters(arguments);
 
         Properties props = new Properties();
-        String propFile = arguments.getFullConfigurationFilePath();
+        String propFile = arguments.getFullPropertyFilePath();
         try (FileInputStream stream = new FileInputStream(propFile)) {
             props.load(stream);
         }
@@ -75,37 +80,36 @@ public class TestPapActivator {
     @After
     public void teardown() throws Exception {
         if (activator != null && activator.isAlive()) {
-            activator.terminate();
+            activator.stop();
         }
     }
 
     @Test
     public void testPapActivator() throws PolicyPapException {
         assertFalse(activator.isAlive());
-        activator.initialize();
+        activator.start();
         assertTrue(activator.isAlive());
         assertTrue(activator.getParameterGroup().isValid());
         assertEquals(CommonTestData.PAP_GROUP_NAME, activator.getParameterGroup().getName());
 
+        // ensure items were added to the registry
+        assertNotNull(Registry.get(PapConstants.REG_PDP_MODIFY_LOCK, Object.class));
+        assertNotNull(Registry.get(PapConstants.REG_STATISTICS_MANAGER, PapStatisticsManager.class));
+
         // repeat - should throw an exception
-        assertThatIllegalStateException().isThrownBy(() -> activator.initialize());
+        assertThatIllegalStateException().isThrownBy(() -> activator.start());
         assertTrue(activator.isAlive());
         assertTrue(activator.getParameterGroup().isValid());
     }
 
-    @Test
-    public void testGetCurrent_testSetCurrent() {
-        assertSame(activator, PapActivator.getCurrent());
-    }
-
     @Test
     public void testTerminate() throws Exception {
-        activator.initialize();
-        activator.terminate();
+        activator.start();
+        activator.stop();
         assertFalse(activator.isAlive());
 
         // repeat - should throw an exception
-        assertThatIllegalStateException().isThrownBy(() -> activator.terminate());
+        assertThatIllegalStateException().isThrownBy(() -> activator.stop());
         assertFalse(activator.isAlive());
     }
 }
index 34a8f80..b35acec 100644 (file)
@@ -5,5 +5,15 @@
         "port":6969,
         "userName":"healthcheck",
         "password":"zb!XztG34"
+    },
+    "pdpParameters": {
+        "updateParameters": {
+            "maxRetryCount": 1,
+            "maxWaitMs": 1
+        },
+        "stateChangeParameters": {
+            "maxRetryCount": 1,
+            "maxWaitMs": 1
+        }
     }
 }
index 08d4f4a..a510964 100644 (file)
@@ -1,10 +1,20 @@
 {
-    "name":"PapGroup",
-    "restServerParameters":{
-        "host":"0.0.0.0",
-        "port":6969,
-        "userName":"healthcheck",
-        "password":"zb!XztG34",
-        "https":true
+    "name": "PapGroup",
+    "restServerParameters": {
+        "host": "0.0.0.0",
+        "port": 6969,
+        "userName": "healthcheck",
+        "password": "zb!XztG34",
+        "https": true
+    },
+    "pdpParameters": {
+        "updateParameters": {
+            "maxRetryCount": 1,
+            "maxWaitMs": 1
+        },
+        "stateChangeParameters": {
+            "maxRetryCount": 1,
+            "maxWaitMs": 1
+        }
     }
 }
index 80fb823..7b53b88 100644 (file)
@@ -5,5 +5,15 @@
         "port":6969,
         "userName":"healthcheck",
         "password":"zb!XztG34"
+    },
+    "pdpParameters": {
+        "updateParameters": {
+            "maxRetryCount": 1,
+            "maxWaitMs": 1
+        },
+        "stateChangeParameters": {
+            "maxRetryCount": 1,
+            "maxWaitMs": 1
+        }
     }
 }
index 3085f45..2a16c3e 100644 (file)
@@ -7,5 +7,15 @@
         "password": "zb!XztG34",
         "https": true,
         "aaf": false
+    },
+    "pdpParameters": {
+        "updateParameters": {
+            "maxRetryCount": 1,
+            "maxWaitMs": 1
+        },
+        "stateChangeParameters": {
+            "maxRetryCount": 1,
+            "maxWaitMs": 1
+        }
     }
 }