diff options
Diffstat (limited to 'BRMSGateway/src')
-rw-r--r-- | BRMSGateway/src/main/java/org/onap/policy/brms/api/BrmsGateway.java | 41 | ||||
-rw-r--r-- | BRMSGateway/src/test/java/org/onap/policy/brms/api/BrmsGatewayTest.java | 89 |
2 files changed, 99 insertions, 31 deletions
diff --git a/BRMSGateway/src/main/java/org/onap/policy/brms/api/BrmsGateway.java b/BRMSGateway/src/main/java/org/onap/policy/brms/api/BrmsGateway.java index e743794ec..bb62b96c4 100644 --- a/BRMSGateway/src/main/java/org/onap/policy/brms/api/BrmsGateway.java +++ b/BRMSGateway/src/main/java/org/onap/policy/brms/api/BrmsGateway.java @@ -7,9 +7,9 @@ * 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. @@ -20,6 +20,7 @@ package org.onap.policy.brms.api; +import java.util.concurrent.CountDownLatch; import org.onap.policy.api.NotificationScheme; import org.onap.policy.api.PolicyEngine; import org.onap.policy.api.PolicyException; @@ -31,7 +32,7 @@ import org.onap.policy.xacml.api.XACMLErrorConstants; * BRMSGateway: This application acts as the Gateway interface between the PDP XACML and PDP Drools. * The listens for BRMS based policies and pushes them to the specified Policy Repository, from * where the PDP Drools reads the Rule Jar. - * + * * @version 0.1 */ public class BrmsGateway { @@ -41,6 +42,9 @@ public class BrmsGateway { private static PolicyEngine policyEngine = null; + // may be overridden by junit tests + private static Factory factory = new Factory(); + private BrmsGateway() { // Default private constructor } @@ -68,7 +72,7 @@ public class BrmsGateway { logger.info("Initializing BRMS Handler"); BrmsHandler brmsHandler = null; try { - brmsHandler = new BrmsHandler(configFile); + brmsHandler = factory.makeBrmsHandler(configFile); } catch (final PolicyException e) { String errorString = "Check your property file: " + e.getMessage(); logger.error(errorString); @@ -85,21 +89,34 @@ public class BrmsGateway { } // Keep Running.... + CountDownLatch latch = new CountDownLatch(1); final Runnable runnable = () -> { - while (true) { - try { - Thread.sleep(30000); - } catch (final InterruptedException e) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Thread Exception " + e.getMessage()); - Thread.currentThread().interrupt(); - } + try { + // wait until interrupted + latch.await(); + } catch (final InterruptedException e) { + logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Thread Exception " + e.getMessage()); + Thread.currentThread().interrupt(); } }; - final Thread thread = new Thread(runnable); + final Thread thread = factory.makeThread(runnable); thread.start(); } public static PolicyEngine getPolicyEngine() { return policyEngine; } + + /** + * Factory to provide various data. May be overridden by junit tests. + */ + public static class Factory { + public BrmsHandler makeBrmsHandler(String configFile) throws PolicyException { + return new BrmsHandler(configFile); + } + + public Thread makeThread(Runnable runnable) { + return new Thread(runnable); + } + } } diff --git a/BRMSGateway/src/test/java/org/onap/policy/brms/api/BrmsGatewayTest.java b/BRMSGateway/src/test/java/org/onap/policy/brms/api/BrmsGatewayTest.java index fd8a7ed3b..b34b18b6d 100644 --- a/BRMSGateway/src/test/java/org/onap/policy/brms/api/BrmsGatewayTest.java +++ b/BRMSGateway/src/test/java/org/onap/policy/brms/api/BrmsGatewayTest.java @@ -7,9 +7,9 @@ * 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. @@ -20,37 +20,88 @@ package org.onap.policy.brms.api; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; -import static org.mockito.Matchers.any; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; -import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.onap.policy.api.PolicyException; +import org.onap.policy.brms.api.BrmsGateway.Factory; +import org.powermock.reflect.Whitebox; -@RunWith(PowerMockRunner.class) public class BrmsGatewayTest { + private static final String FACTORY_FIELD = "factory"; + + private static Factory saveFactory; + + private Thread thread; + + @BeforeClass + public static void setUpBeforeClass() { + saveFactory = Whitebox.getInternalState(BrmsGateway.class, FACTORY_FIELD); + } + + @AfterClass + public static void tearDownAfterClass() { + Whitebox.setInternalState(BrmsGateway.class, FACTORY_FIELD, saveFactory); + } + + /** + * Installs a factory. + */ + @Before + public void setUp() { + thread = null; + + Factory factory = new Factory() { + @Override + public BrmsHandler makeBrmsHandler(String configFile) throws PolicyException { + // Mock handler + return Mockito.mock(BrmsHandler.class); + } + + @Override + public Thread makeThread(Runnable runnable) { + thread = super.makeThread(runnable); + return thread; + } + + }; + + Whitebox.setInternalState(BrmsGateway.class, FACTORY_FIELD, factory); + } + + /** + * Interrupts the thread, if there is one. + */ + @After + public void tearDown() throws InterruptedException { + if (thread != null) { + thread.interrupt(); + thread.join(5000L); + assertFalse(thread.isAlive()); + } + } + + @Test + public void testFactory() throws InterruptedException { + assertNotNull(saveFactory); + assertNotNull(saveFactory.makeThread(() -> { })); + } + @Test public void testGet() { assertNull(BrmsGateway.getPolicyEngine()); } - @PrepareForTest({Thread.class, BrmsGateway.class}) @Test public void testMain() throws Exception { - // Mock Thread - PowerMockito.spy(Thread.class); - PowerMockito.doNothing().when(Thread.class); - Thread.sleep(1000); - - // Mock handler - final BrmsHandler handler = Mockito.mock(BrmsHandler.class); - PowerMockito.whenNew(BrmsHandler.class).withArguments(any()).thenReturn(handler); - - // Run app try { final String[] args = new String[0]; BrmsGateway.main(args); |