Merge "Continue addressing technical debt for ONAP-XACML"
[policy/engine.git] / POLICY-SDK-APP / src / main / java / org / onap / policy / admin / CheckPDP.java
index 87ed1fe..6433204 100644 (file)
@@ -34,6 +34,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
@@ -43,6 +44,18 @@ import org.onap.policy.xacml.api.XACMLErrorConstants;
 
 import com.att.research.xacml.util.XACMLProperties;
 
+/**
+ * What is not good about this class is that once a value has been set for pdpProperties path
+ * you cannot change it. That may be ok for a highly controlled production environment in which
+ * nothing changes, but not a very good implementation.
+ * 
+ * The reset() method has been added to assist with the above problem in order to 
+ * acquire >80% JUnit code coverage.
+ * 
+ * This static class doesn't really check a PDP, it simply loads a properties file and tried
+ * to ensure that a valid URL exists for a PDP along with user/password.
+ *
+ */
 public class CheckPDP {
        private static Path pdpPath = null;
        private static Long oldModified = null;
@@ -52,6 +65,17 @@ public class CheckPDP {
        private CheckPDP(){
                //default constructor
        }
+       
+       public static Map<String, String> getPdpMap() {
+               return pdpMap;
+       }
+       
+       private static void reset() {
+               pdpPath = null;
+               oldModified = null;
+               pdpMap = null;
+       }
+
        public static boolean validateID(String id) {
                // ReadFile
                try {
@@ -60,13 +84,15 @@ public class CheckPDP {
                        LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
                        return false;
                }
+               if (pdpMap == null) {
+                       return false;
+               }
                // Check ID
                return pdpMap.containsKey(id);
        }
 
        private static void readFile(){
                String pdpFile = null;
-               Long newModified = null;
                try{
                        pdpFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_IDFILE);     
                }catch (Exception e){
@@ -78,19 +104,16 @@ public class CheckPDP {
                }
                if (pdpPath == null) {
                        pdpPath = Paths.get(pdpFile);
-                       if (!pdpPath.toFile().exists()) {
+                       if (!pdpPath.toString().endsWith(".properties") || !pdpPath.toFile().exists()) {
                                LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "File doesn't exist in the specified Path : "     + pdpPath.toString());
-
-                       } 
-                       if (pdpPath.toString().endsWith(".properties")) {
-                               readProps();
-                       } else {
-                               LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Not a .properties file " + pdpFile);
+                               CheckPDP.reset();
+                               return;
                        }
+                       readProps();
                }
                // Check if File is updated recently
                else {
-                       newModified = pdpPath.toFile().lastModified();
+                       Long newModified = pdpPath.toFile().lastModified();
                        if (!newModified.equals(oldModified)) {
                                // File has been updated.
                                readProps();
@@ -100,7 +123,7 @@ public class CheckPDP {
 
        @SuppressWarnings({ "unchecked", "rawtypes" })
        private static void readProps() {
-               Properties pdpProp = null;
+               Properties pdpProp;
                pdpProp = new Properties();
                try {
                        InputStream in = new FileInputStream(pdpPath.toFile());
@@ -115,26 +138,27 @@ public class CheckPDP {
                        for (String propKey : sorted) {
                                loadPDPProperties(propKey, pdpProp);
                        }
-                       if (pdpMap == null || pdpMap.isEmpty()) {
-                               LOGGER.debug(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Cannot Proceed without PDP_URLs");
-                       }
                        in.close();
                } catch (IOException e) {
                        LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
                }
+               if (pdpMap == null || pdpMap.isEmpty()) {
+                       LOGGER.debug(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Cannot Proceed without PDP_URLs");
+                       CheckPDP.reset();
+               }
        }
        
        private static void loadPDPProperties(String propKey, Properties pdpProp){
                if (propKey.startsWith("PDP_URL")) {
-                       String check_val = pdpProp.getProperty(propKey);
-                       if (check_val == null) {
+                       String checkVal = pdpProp.getProperty(propKey);
+                       if (checkVal == null) {
                                LOGGER.error("Properties file doesn't have the PDP_URL parameter");
                        }
-                       if (check_val != null && check_val.contains(";")) {
-                               List<String> pdp_default = new ArrayList<>(Arrays.asList(check_val.split("\\s*;\\s*")));
+                       if (checkVal != null && checkVal.contains(";")) {
+                               List<String> pdpDefault = new ArrayList<>(Arrays.asList(checkVal.split("\\s*;\\s*")));
                                int pdpCount = 0;
-                               while (pdpCount < pdp_default.size()) {
-                                       String pdpVal = pdp_default.get(pdpCount);
+                               while (pdpCount < pdpDefault.size()) {
+                                       String pdpVal = pdpDefault.get(pdpCount);
                                        readPDPParam(pdpVal);
                                        pdpCount++;
                                }