Remove powermock to increase coverage
[policy/engine.git] / BRMSGateway / src / main / java / org / onap / policy / brms / api / BrmsGateway.java
index d121783..bb62b96 100644 (file)
@@ -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,29 +32,51 @@ 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
  */
-class BrmsGateway {
+public class BrmsGateway {
 
     private static final Logger logger = FlexLogger.getLogger(BrmsGateway.class);
     private static final String CONFIGFILE = "config.properties";
 
     private static PolicyEngine policyEngine = null;
 
+    // may be overridden by junit tests
+    private static Factory factory = new Factory();
+
     private BrmsGateway() {
         // Default private constructor
     }
 
+    /**
+     * Main method.
+     * @param args The path to the configuration file is the only allowed optional argument
+     * @throws Exception on BRMS Gateway errors
+     */
     public static void main(final String[] args) throws Exception {
+        // The configuration file containing the configuration for the BRMS Gateway
+        String configFile = CONFIGFILE;
+
+        // Check if a configuration file has been specified as a parameter
+        if (args.length == 1) {
+            configFile = args[0];
+        }
+        else if (args.length > 1) {
+            String errorString = "usage: " + BrmsGateway.class.getCanonicalName() + " [configFile]";
+            logger.error(errorString);
+            throw new PolicyException(errorString);
+        }
+
         // Initialize Handler.
         logger.info("Initializing BRMS Handler");
         BrmsHandler brmsHandler = null;
         try {
-            brmsHandler = new BrmsHandler(CONFIGFILE);
+            brmsHandler = factory.makeBrmsHandler(configFile);
         } catch (final PolicyException e) {
-            logger.error("Check your property file: " + e.getMessage(), e);
-            System.exit(1);
+            String errorString = "Check your property file: " + e.getMessage();
+            logger.error(errorString);
+            throw new PolicyException(errorString);
         }
 
         // Set Handler with Auto Notification and initialize policyEngine
@@ -62,25 +85,38 @@ class BrmsGateway {
             policyEngine = new PolicyEngine(CONFIGFILE, NotificationScheme.AUTO_ALL_NOTIFICATIONS, brmsHandler);
         } catch (final Exception e) {
             logger.error(XACMLErrorConstants.ERROR_UNKNOWN + "Error while Initializing Policy Engine " + e.getMessage(),
-                    e);
+                            e);
         }
 
         // 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);
+        }
+    }
 }