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;
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;
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 {
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){
}
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();
@SuppressWarnings({ "unchecked", "rawtypes" })
private static void readProps() {
- Properties pdpProp = null;
+ Properties pdpProp;
pdpProp = new Properties();
try {
InputStream in = new FileInputStream(pdpPath.toFile());
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++;
}