diff options
4 files changed, 43 insertions, 20 deletions
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/XacmlState.java b/main/src/main/java/org/onap/policy/pdpx/main/XacmlState.java index 17995fd6..d1e326f1 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/XacmlState.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/XacmlState.java @@ -40,6 +40,7 @@ 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); /** @@ -112,6 +113,9 @@ 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); @@ -165,4 +169,23 @@ 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()); + } + } } diff --git a/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java b/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java index 050d8b24..892b3835 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java @@ -152,16 +152,11 @@ 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 } diff --git a/main/src/test/java/org/onap/policy/pdpx/main/XacmlStateTest.java b/main/src/test/java/org/onap/policy/pdpx/main/XacmlStateTest.java index feaaf4f6..5ff3d5c7 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/XacmlStateTest.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/XacmlStateTest.java @@ -26,6 +26,7 @@ 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; @@ -129,10 +130,12 @@ 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 diff --git a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java index 9025722c..c874761d 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -74,17 +74,6 @@ 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()); @@ -92,15 +81,17 @@ 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.stopXacmlRestController(); - assertFalse(activator.isXacmlRestControllerAlive()); - activator.startXacmlRestController(); assertTrue(activator.isXacmlRestControllerAlive()); + + activator.stopXacmlRestController(); + assertFalse(activator.isXacmlRestControllerAlive()); } @Test @@ -123,4 +114,15 @@ 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(); + } + } } |