Leave xacml-pdp REST server always running 12/122912/1
authorJim Hahn <jrh3@att.com>
Fri, 6 Aug 2021 20:57:45 +0000 (16:57 -0400)
committerJorge Hernandez <jorge.hernandez-herrero@att.com>
Sat, 7 Aug 2021 19:57:09 +0000 (19:57 +0000)
Liveness checks depend on the xacml-pdp REST server being available.
However, the REST server is only running when PAP puts it in an active
state.  Modified the code to always leave it running.

In a subsequent review, we should split the healthcheck REST service
onto its own port so it can be left running, while the other services
are started/stopped in response to PAP active/passive requests.

Issue-ID: POLICY-3531
Change-Id: I412064abaf91bb966d40adc46cee771b3a0a5dfc
Signed-off-by: Jim Hahn <jrh3@att.com>
(cherry picked from commit 031a0fe51dff21445034befc8a6d8732622acd07)

main/src/main/java/org/onap/policy/pdpx/main/XacmlState.java
main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java
main/src/test/java/org/onap/policy/pdpx/main/XacmlStateTest.java
main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java

index 5ca75a6..db83b71 100644 (file)
@@ -33,16 +33,11 @@ import org.onap.policy.models.pdp.enums.PdpResponseStatus;
 import org.onap.policy.models.pdp.enums.PdpState;
 import org.onap.policy.pdpx.main.rest.XacmlPdpApplicationManager;
 import org.onap.policy.pdpx.main.startstop.XacmlPdpActivator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Current state of this XACML PDP.
  */
 public class XacmlState {
-    // The logger for this class
-    private static final Logger LOGGER = LoggerFactory.getLogger(XacmlState.class);
-
     /**
      * The application manager.
      */
@@ -107,9 +102,6 @@ public class XacmlState {
 
         PdpStatus status2 = makeResponse(message, "");
 
-        // start/stop rest controller based on state change
-        handleXacmlRestController();
-
         // these fields aren't needed in the response, so clear them out to avoid sending
         status2.setPolicies(null);
 
@@ -162,23 +154,4 @@ public class XacmlState {
         status2.setResponse(resp);
         return status2;
     }
-
-    /**
-     * Manages the Xacml-Pdp rest controller based on the Xacml-Pdp State.
-     * Current supported states:
-     * ACTIVE  - rest service is running and handling requests
-     * PASSIVE - rest service is not running
-     */
-    private void handleXacmlRestController() {
-        if (status.getState() == PdpState.ACTIVE) {
-            LOGGER.info("State change: {} - Starting rest controller", status.getState());
-            XacmlPdpActivator.getCurrent().startXacmlRestController();
-        } else if (status.getState() == PdpState.PASSIVE) {
-            LOGGER.info("State change: {} - Stopping rest controller", status.getState());
-            XacmlPdpActivator.getCurrent().stopXacmlRestController();
-        } else {
-            // unsupported state
-            LOGGER.warn("Unsupported state: {}", status.getState());
-        }
-    }
 }
index 0a32d23..6e59699 100644 (file)
@@ -139,11 +139,16 @@ public class XacmlPdpActivator extends ServiceManagerContainer {
         addAction("Terminate PDP",
             () -> { },
             () -> sendTerminateMessage(sinkClient, state));
+
         // initial heart beats act as registration messages
         addAction("Heartbeat Publisher",
             heartbeat::start,
             heartbeat::terminate);
 
+        addAction("REST Server",
+            restServer::start,
+            restServer::stop);
+
         // @formatter:on
     }
 
index 43ccab0..5fdc264 100644 (file)
@@ -26,7 +26,6 @@ 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 static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import org.junit.AfterClass;
@@ -131,12 +130,10 @@ public class XacmlStateTest {
         req.setState(PdpState.ACTIVE);
         status = state.updateInternalState(req);
         assertEquals(PdpState.ACTIVE, status.getState());
-        verify(act).startXacmlRestController();
 
         req.setState(PdpState.PASSIVE);
         status = state.updateInternalState(req);
         assertEquals(PdpState.PASSIVE, status.getState());
-        verify(act).stopXacmlRestController();
     }
 
     @Test
index bb814d3..4286ccf 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
  * Modifications Copyright (C) 2019 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -70,6 +70,17 @@ public class TestXacmlPdpActivator extends CommonRest {
         activator = new XacmlPdpActivator(parGroup);
     }
 
+    /**
+     * Teardown tests.
+     * @throws PolicyXacmlPdpException on termination errors
+     */
+    @After
+    public void teardown() throws PolicyXacmlPdpException {
+        if (activator != null && activator.isAlive()) {
+            activator.stop();
+        }
+    }
+
     @Test
     public void testXacmlPdpActivator() throws Exception {
         assertFalse(activator.isAlive());
@@ -77,17 +88,15 @@ public class TestXacmlPdpActivator extends CommonRest {
         activator.start();
         assertTrue(activator.isAlive());
 
-        // XacmlPdp starts in PASSIVE state so the rest controller should not be alive
-        assertFalse(activator.isXacmlRestControllerAlive());
         assertTrue(activator.getParameterGroup().isValid());
         assertEquals(CommonTestData.PDPX_PARAMETER_GROUP_NAME, activator.getParameterGroup().getName());
         assertEquals(CommonTestData.PDPX_GROUP, activator.getParameterGroup().getPdpGroup());
 
-        activator.startXacmlRestController();
-        assertTrue(activator.isXacmlRestControllerAlive());
-
         activator.stopXacmlRestController();
         assertFalse(activator.isXacmlRestControllerAlive());
+
+        activator.startXacmlRestController();
+        assertTrue(activator.isXacmlRestControllerAlive());
     }
 
     @Test
@@ -102,15 +111,4 @@ public class TestXacmlPdpActivator extends CommonRest {
         activator.stop();
         assertFalse(activator.isAlive());
     }
-
-    /**
-     * Teardown tests.
-     * @throws PolicyXacmlPdpException on termination errors
-     */
-    @After
-    public void teardown() throws PolicyXacmlPdpException {
-        if (activator != null && activator.isAlive()) {
-            activator.stop();
-        }
-    }
 }