From: Pamela Dragosh Date: Tue, 8 Oct 2019 14:01:23 +0000 (-0400) Subject: Cleanup POLICY-SDK-APP CheckPDP X-Git-Tag: 1.6.0~70 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=policy%2Fengine.git;a=commitdiff_plain;h=a446733c9918cb264585ddc35b5e11bf3500bdf8;ds=sidebyside Cleanup POLICY-SDK-APP CheckPDP Fixed sonar issues and added a small amount of code coverage. CheckPDP was renamed to comply with 2 consecutive capital letters. Various sonar issues done. Very difficult to get coverage on remaining area - over 82% anyway. RESTfulPAPEngine was updated to use the new renamed class and methods. Sonar issues were taken care of for the most part and added some coverage by consolidating the JUnit tests. Added in assertj as we will utilize that more throughout the repo. Issue-ID: POLICY-2133 Change-Id: Id0a9b050ebe373e155878699366d78df71bd0554 Signed-off-by: Pamela Dragosh --- diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/CheckPDP.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/CheckPdpProperties.java similarity index 86% rename from POLICY-SDK-APP/src/main/java/org/onap/policy/admin/CheckPDP.java rename to POLICY-SDK-APP/src/main/java/org/onap/policy/admin/CheckPdpProperties.java index 0965ee63b..eaeddf137 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/CheckPDP.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/CheckPdpProperties.java @@ -51,19 +51,19 @@ import org.onap.policy.xacml.api.XACMLErrorConstants; * 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. + *

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. + *

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 { +public class CheckPdpProperties { private static Path pdpPath = null; private static Long oldModified = null; private static HashMap pdpMap = null; - private static final Logger LOGGER = FlexLogger.getLogger(CheckPDP.class); + private static final Logger LOGGER = FlexLogger.getLogger(CheckPdpProperties.class); - private CheckPDP() { + private CheckPdpProperties() { // default constructor } @@ -77,7 +77,13 @@ public class CheckPDP { pdpMap = null; } - public static boolean validateID(String id) { + /** + * validateId - validates that the ID is in the properties. + * + * @param id Input ID + * @return true it is in the properties + */ + public static boolean validateId(String id) { // ReadFile try { readFile(); @@ -107,7 +113,7 @@ public class CheckPDP { if (!pdpPath.toString().endsWith(".properties") || !pdpPath.toFile().exists()) { LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "File doesn't exist in the specified Path : " + pdpPath.toString()); - CheckPDP.reset(); + CheckPdpProperties.reset(); return; } readProps(); @@ -134,18 +140,18 @@ public class CheckPDP { List sorted = new ArrayList(unsorted); Collections.sort(sorted); for (String propKey : sorted) { - loadPDPProperties(propKey, pdpProp); + loadPdpProperties(propKey, pdpProp); } } 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(); + CheckPdpProperties.reset(); } } - private static void loadPDPProperties(String propKey, Properties pdpProp) { + private static void loadPdpProperties(String propKey, Properties pdpProp) { if (propKey.startsWith("PDP_URL")) { String checkVal = pdpProp.getProperty(propKey); if (checkVal == null) { @@ -156,14 +162,14 @@ public class CheckPDP { int pdpCount = 0; while (pdpCount < pdpDefault.size()) { String pdpVal = pdpDefault.get(pdpCount); - readPDPParam(pdpVal); + readPdpParam(pdpVal); pdpCount++; } } } } - private static void readPDPParam(String pdpVal) { + private static void readPdpParam(String pdpVal) { if (pdpVal.contains(",")) { List pdpValues = new ArrayList<>(Arrays.asList(pdpVal.split("\\s*,\\s*"))); if (pdpValues.size() == 3) { @@ -182,6 +188,13 @@ public class CheckPDP { } } + /** + * getEncoding reads in the PDP properties and returns an encoding + * for the given pdp. + * + * @param pdpID Input PDP Id + * @return String encoding + */ public static String getEncoding(String pdpID) { try { readFile(); diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java index fc1a70466..6db7a4051 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/RESTfulPAPEngine.java @@ -49,6 +49,7 @@ import java.util.Map; import java.util.Set; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.rest.XACMLRestProperties; @@ -67,7 +68,7 @@ import org.onap.policy.xacml.std.pap.StdPDPStatus; /** * Implementation of the PAPEngine interface that communicates with a PAP engine in a remote servlet through a RESTful - * interface + * interface. * * */ @@ -75,25 +76,29 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP private static final Logger LOGGER = FlexLogger.getLogger(RESTfulPAPEngine.class); private static final String GROUP_ID = "groupId="; + private static final String UNABLE_MSG = "Unable to PUT policy '"; + private static final String EXCEPTION_MSG = "', e:"; + private static final String ERROR_MSG = "error"; + private static final String PDPID_MSG = "pdpId="; // // URL of the PAP Servlet that this Admin Console talks to // - private String papServletURLString; + private String papServletUrlString; /** - * Set up link with PAP Servlet and get our initial set of Groups + * Set up link with PAP Servlet and get our initial set of Groups. * * @throws PAPException When failing to register with PAP */ - public RESTfulPAPEngine(String myURLString) throws PAPException { + public RESTfulPAPEngine(String myUrlString) throws PAPException { // // Get our URL to the PAP servlet // - this.papServletURLString = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL); - if (this.papServletURLString == null || this.papServletURLString.length() == 0) { - String message = - "The property 'POLICYENGINE_ADMIN_ACTIVE' was not set during installation. Admin Console cannot call PAP."; + this.papServletUrlString = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL); + if (StringUtils.isBlank(this.papServletUrlString)) { + String message = "The property 'POLICYENGINE_ADMIN_ACTIVE' was not set during installation. " + + "Admin Console cannot call PAP."; LOGGER.error(message); throw new PAPException(message); } @@ -101,14 +106,14 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP // // register this Admin Console with the PAP Servlet to get updates // - Object newURL = sendToPAP("PUT", null, null, null, "adminConsoleURL=" + myURLString); - if (newURL != null) { + Object newUrl = sendToPap("PUT", null, null, null, "adminConsoleURL=" + myUrlString); + if (newUrl != null) { // assume this was a re-direct and try again - LOGGER.warn("Redirecting to '" + newURL + "'"); - this.papServletURLString = (String) newURL; - newURL = sendToPAP("PUT", null, null, null, "adminConsoleURL=" + myURLString); - if (newURL != null) { - LOGGER.error("Failed to redirect to " + this.papServletURLString); + LOGGER.warn("Redirecting to '" + newUrl + "'"); + this.papServletUrlString = (String) newUrl; + newUrl = sendToPap("PUT", null, null, null, "adminConsoleURL=" + myUrlString); + if (newUrl != null) { + LOGGER.error("Failed to redirect to " + this.papServletUrlString); throw new PAPException("Failed to register with PAP"); } } @@ -120,25 +125,25 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP @Override public OnapPDPGroup getDefaultGroup() throws PAPException { - return (OnapPDPGroup) sendToPAP("GET", null, null, StdPDPGroup.class, GROUP_ID, "default="); + return (OnapPDPGroup) sendToPap("GET", null, null, StdPDPGroup.class, GROUP_ID, "default="); } @Override public void setDefaultGroup(OnapPDPGroup group) throws PAPException { - sendToPAP("POST", null, null, null, GROUP_ID + group.getId(), "default=true"); + sendToPap("POST", null, null, null, GROUP_ID + group.getId(), "default=true"); } @SuppressWarnings("unchecked") @Override public Set getOnapPDPGroups() throws PAPException { Set newGroupSet; - newGroupSet = (Set) this.sendToPAP("GET", null, Set.class, StdPDPGroup.class, GROUP_ID); + newGroupSet = (Set) this.sendToPap("GET", null, Set.class, StdPDPGroup.class, GROUP_ID); return Collections.unmodifiableSet(newGroupSet); } @Override public OnapPDPGroup getGroup(String id) throws PAPException { - return (OnapPDPGroup) sendToPAP("GET", null, null, StdPDPGroup.class, GROUP_ID + id); + return (OnapPDPGroup) sendToPap("GET", null, null, StdPDPGroup.class, GROUP_ID + id); } @Override @@ -152,17 +157,10 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP throw new PAPException("Unable to send name or description to PAP: " + e.getMessage() + e); } - this.sendToPAP("POST", null, null, null, GROUP_ID, "groupName=" + escapedName, + this.sendToPap("POST", null, null, null, GROUP_ID, "groupName=" + escapedName, "groupDescription=" + escapedDescription); } - /** - * Update the configuration on the PAP for a single Group. - * - * @param group - * @return - * @throws PAPException - */ @Override public void updateGroup(OnapPDPGroup group) throws PAPException { try { @@ -178,9 +176,9 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP // However, the policy files are (probably!) not too huge, and this is a good way to ensure that any // corrupted files on the PAP get refreshed. // now update the group object on the PAP - sendToPAP("PUT", group, null, null, GROUP_ID + group.getId()); + sendToPap("PUT", group, null, null, GROUP_ID + group.getId()); } catch (Exception e) { - String message = "Unable to PUT policy '" + group.getId() + "', e:" + e; + String message = UNABLE_MSG + group.getId() + EXCEPTION_MSG + e; LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e); throw new PAPException(message); } @@ -195,9 +193,9 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP @Override public void updateGroup(OnapPDPGroup group, String userName) throws PAPException { try { - sendToPAP("PUT", group, null, null, GROUP_ID + group.getId(), "userId=" + userName); + sendToPap("PUT", group, null, null, GROUP_ID + group.getId(), "userId=" + userName); } catch (Exception e) { - String message = "Unable to PUT policy '" + group.getId() + "', e:" + e; + String message = UNABLE_MSG + group.getId() + EXCEPTION_MSG + e; LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e); throw new PAPException(message); } @@ -209,7 +207,7 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP if (newGroup != null) { moveToGroupString = "movePDPsToGroupId=" + newGroup.getId(); } - sendToPAP("DELETE", null, null, null, GROUP_ID + group.getId(), moveToGroupString); + sendToPap("DELETE", null, null, null, GROUP_ID + group.getId(), moveToGroupString); } @Override @@ -218,46 +216,53 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP } public OnapPDPGroup getPDPGroup(String pdpId) throws PAPException { - return (OnapPDPGroup) sendToPAP("GET", null, null, StdPDPGroup.class, GROUP_ID, "pdpId=" + pdpId, + return (OnapPDPGroup) sendToPap("GET", null, null, StdPDPGroup.class, GROUP_ID, PDPID_MSG + pdpId, "getPDPGroup="); } @Override public OnapPDP getPDP(String pdpId) throws PAPException { - return (OnapPDP) sendToPAP("GET", null, null, StdPDP.class, GROUP_ID, "pdpId=" + pdpId); + return (OnapPDP) sendToPap("GET", null, null, StdPDP.class, GROUP_ID, PDPID_MSG + pdpId); } @Override public void newPDP(String id, OnapPDPGroup group, String name, String description, int jmxport) throws PAPException { - StdPDP newPDP = new StdPDP(id, name, description, jmxport); - sendToPAP("PUT", newPDP, null, null, GROUP_ID + group.getId(), "pdpId=" + id); + StdPDP newPdp = new StdPDP(id, name, description, jmxport); + sendToPap("PUT", newPdp, null, null, GROUP_ID + group.getId(), PDPID_MSG + id); } @Override public void movePDP(OnapPDP pdp, OnapPDPGroup newGroup) throws PAPException { - sendToPAP("POST", null, null, null, GROUP_ID + newGroup.getId(), "pdpId=" + pdp.getId()); + sendToPap("POST", null, null, null, GROUP_ID + newGroup.getId(), PDPID_MSG + pdp.getId()); } @Override public void updatePDP(OnapPDP pdp) throws PAPException { OnapPDPGroup group = getPDPGroup(pdp); - sendToPAP("PUT", pdp, null, null, GROUP_ID + group.getId(), "pdpId=" + pdp.getId()); + sendToPap("PUT", pdp, null, null, GROUP_ID + group.getId(), PDPID_MSG + pdp.getId()); } @Override public void removePDP(OnapPDP pdp) throws PAPException { OnapPDPGroup group = getPDPGroup(pdp); - sendToPAP("DELETE", null, null, null, GROUP_ID + group.getId(), "pdpId=" + pdp.getId()); + sendToPap("DELETE", null, null, null, GROUP_ID + group.getId(), PDPID_MSG + pdp.getId()); } - // Validate the Policy Data + /** + * validatePolicyRequest Creates a pap policy and then send to pap. + * + * @param policyAdapter Input Adapter + * @param policyType Type of Policy + * @return true if validated + * @throws PAPException exception if invalid + */ public boolean validatePolicyRequest(PolicyRestAdapter policyAdapter, String policyType) throws PAPException { - StdPAPPolicy newPAPPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getConfigBodyData(), + StdPAPPolicy newPapPolicy = new StdPAPPolicy(policyAdapter.getPolicyName(), policyAdapter.getConfigBodyData(), policyAdapter.getConfigType(), "Base"); // send JSON object to PAP - return (Boolean) sendToPAP("PUT", newPAPPolicy, null, null, "operation=validate", "apiflag=admin", + return (Boolean) sendToPap("PUT", newPapPolicy, null, null, "operation=validate", "apiflag=admin", "policyType=" + policyType); } @@ -279,18 +284,17 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP * Copy a single Policy file from the input stream to the PAP Servlet. Either this works (silently) or it throws an * exception. * - * @param policyId - * @param group - * @param policy - * @return - * @throws PAPException + * @param policyId ID of policy + * @param group PDP Group + * @param policy Input stream of policy + * @throws PAPException exception */ public void copyFile(String policyId, OnapPDPGroup group, InputStream policy) throws PAPException { // send the policy file to the PAP Servlet try { - sendToPAP("POST", policy, null, null, GROUP_ID + group.getId(), "policyId=" + policyId); + sendToPap("POST", policy, null, null, GROUP_ID + group.getId(), "policyId=" + policyId); } catch (Exception e) { - String message = "Unable to PUT policy '" + policyId + "', e:" + e; + String message = UNABLE_MSG + policyId + EXCEPTION_MSG + e; LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e); throw new PAPException(message); } @@ -304,7 +308,7 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP try (InputStream is = new FileInputStream(new File(policy.getLocation()))) { copyFile(policy.getId(), group, is); } catch (Exception e) { - String message = "Unable to PUT policy '" + policy.getId() + "', e:" + e; + String message = UNABLE_MSG + policy.getId() + EXCEPTION_MSG + e; LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + message, e); throw new PAPException(message); } @@ -319,13 +323,13 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP * Special operation - Similar to the normal PAP operations but this one contacts the PDP directly to get detailed * status info. * - * @param pdp - * @return - * @throws PAPException + * @param pdp PDP to get status + * @return PDPStatus object + * @throws PAPException Exception */ @Override public PDPStatus getStatus(OnapPDP pdp) throws PAPException { - return (StdPDPStatus) sendToPAP("GET", pdp, null, StdPDPStatus.class); + return (StdPDPStatus) sendToPap("GET", pdp, null, StdPDPStatus.class); } // @@ -335,21 +339,22 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP /** * Send a request to the PAP Servlet and get the response. * - * The content is either an InputStream to be copied to the Request OutputStream OR it is an object that is to be + *

The content is either an InputStream to be copied to the Request OutputStream OR it is an object that is to be * encoded into JSON and pushed into the Request OutputStream. * - * The Request parameters may be encoded in multiple "name=value" sets, or parameters may be combined by the caller. + *

The Request parameters may be encoded in multiple "name=value" sets, or parameters may be + * combined by the caller. * - * @param method + * @param method method * @param content - EITHER an InputStream OR an Object to be encoded in JSON - * @param collectionTypeClass - * @param responseContentClass - * @param parameters - * @return - * @throws PAPException + * @param collectionTypeClass Collection + * @param responseContentClass Response Content + * @param parameters List of parameters + * @return Object + * @throws PAPException exception */ @SuppressWarnings({"rawtypes", "unchecked"}) - private Object sendToPAP(String method, Object content, Class collectionTypeClass, Class responseContentClass, + private Object sendToPap(String method, Object content, Class collectionTypeClass, Class responseContentClass, String... parameters) throws PAPException { HttpURLConnection connection = null; String papID = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID); @@ -362,28 +367,28 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP Object contentObj = content; LOGGER.info("Encoding for the PAP is: " + encoding); try { - String fullURL = papServletURLString; + String fullUrl = papServletUrlString; if (parameters != null && parameters.length > 0) { StringBuilder queryString = new StringBuilder(); Arrays.stream(parameters).map(p -> "&" + p).forEach(queryString::append); - fullURL += "?" + queryString.substring(1); + fullUrl += "?" + queryString.substring(1); } // special case - Status (actually the detailed status) comes from the PDP directly, not the PAP if ("GET".equals(method) && (contentObj instanceof OnapPDP) && responseContentClass == StdPDPStatus.class) { // Adjust the url and properties appropriately String pdpID = ((OnapPDP) contentObj).getId(); - fullURL = pdpID + "?type=Status"; + fullUrl = pdpID + "?type=Status"; contentObj = null; - if (CheckPDP.validateID(pdpID)) { - encoding = CheckPDP.getEncoding(pdpID); + if (CheckPdpProperties.validateId(pdpID)) { + encoding = CheckPdpProperties.getEncoding(pdpID); } } // // Open up the connection // - connection = (HttpURLConnection) makeConnection(fullURL); + connection = (HttpURLConnection) makeConnection(fullUrl); // // Setup our method and headers // @@ -433,9 +438,9 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP String finalPolicyPath = connection.getHeaderField("finalPolicyPath"); successMap.put("success", finalPolicyPath); return successMap; - } else if ("error".equalsIgnoreCase(isSuccess)) { + } else if (ERROR_MSG.equalsIgnoreCase(isSuccess)) { LOGGER.info("There was an error while creating the policy!"); - successMap.put("error", "error"); + successMap.put(ERROR_MSG, ERROR_MSG); return successMap; } else { // get the response content into a String @@ -456,19 +461,19 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP } } else if (connection.getResponseCode() >= 300 && connection.getResponseCode() <= 399) { // redirection - String newURL = connection.getHeaderField("Location"); - if (newURL == null) { + String newUrl = connection.getHeaderField("Location"); + if (newUrl == null) { LOGGER.error( "No Location header to redirect to when response code=" + connection.getResponseCode()); throw new IOException( "No redirect Location header when response code=" + connection.getResponseCode()); } - int qIndex = newURL.indexOf('?'); - if (qIndex > 0) { - newURL = newURL.substring(0, qIndex); + int qindex = newUrl.indexOf('?'); + if (qindex > 0) { + newUrl = newUrl.substring(0, qindex); } - LOGGER.info("Redirect seen. Redirecting " + fullURL + " to " + newURL); - return newURL; + LOGGER.info("Redirect seen. Redirecting " + fullUrl + " to " + newUrl); + return newUrl; } else { LOGGER.warn("Unexpected response code: " + connection.getResponseCode() + " message: " + connection.getResponseMessage()); @@ -529,7 +534,7 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP // these may be overridden by junit tests - protected URLConnection makeConnection(String fullURL) throws IOException { - return new URL(fullURL).openConnection(); + protected URLConnection makeConnection(String fullUrl) throws IOException { + return new URL(fullUrl).openConnection(); } } diff --git a/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/CheckPDPTest.java b/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/CheckPDPTest.java deleted file mode 100644 index 358b69f1f..000000000 --- a/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/CheckPDPTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP Policy Engine - * ================================================================================ - * Copyright (C) 2017, 2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Modifications Copyright (C) 2019 Samsung - * ================================================================================ - * 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. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.admin; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.io.File; - -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; - -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class CheckPDPTest { - - @Test - public final void test1NoPropertySet() { - try { - System.clearProperty("xacml.rest.pdp.idfile"); - assertFalse(CheckPDP.validateID("http://localhost:8082/pdp/")); - - System.setProperty("xacml.rest.pdp.idfile", - new File(".").getCanonicalPath() + File.separator + "src" + File.separator + "test" + File.separator - + "resources" + File.separator + "idonotexist.properties"); - assertFalse(CheckPDP.validateID("http://localhost:8082/pdp/")); - - System.setProperty("xacml.rest.pdp.idfile", - new File(".").getCanonicalPath() + File.separator + "src" + File.separator + "test" + File.separator - + "resources" + File.separator + "doesnothaveproperties.atall"); - assertFalse(CheckPDP.validateID("http://localhost:8082/pdp/")); - - System.setProperty("xacml.rest.pdp.idfile", new File(".").getCanonicalPath() + File.separator + "src" - + File.separator + "test" + File.separator + "resources" + File.separator + "testbad.properties"); - assertFalse(CheckPDP.validateID("http://localhost:8082/pdp/")); - - System.setProperty("xacml.rest.pdp.idfile", new File(".").getCanonicalPath() + File.separator + "src" - + File.separator + "test" + File.separator + "resources" + File.separator + "empty.properties"); - assertFalse(CheckPDP.validateID("http://localhost:8082/pdp/")); - - System.setProperty("xacml.rest.pdp.idfile", - new File(".").getCanonicalPath() + File.separator + "src" + File.separator + "test" + File.separator - + "resources" + File.separator + "testnotenoughvalues.properties"); - assertFalse(CheckPDP.validateID("http://localhost:8082/pdp/")); - - assertNull(CheckPDP.getPdpMap()); - assertNull(CheckPDP.getEncoding("http://localhost:8082/pdp/")); - - } catch (Exception e) { - fail("Error occured in CheckPDP test"); - } - } - - @Test - public final void test2CheckPDP() { - try { - System.setProperty("xacml.rest.pdp.idfile", new File(".").getCanonicalPath() + File.separator + "src" - + File.separator + "test" + File.separator + "resources" + File.separator + "test.properties"); - assertTrue(CheckPDP.validateID("http://localhost:8082/pdp/")); - assertTrue(CheckPDP.getPdpMap().containsKey("http://localhost:8082/pdp/")); - assertTrue(CheckPDP.getEncoding("http://localhost:8082/pdp/").equals("dGVzdHBkcDphbHBoYTQ1Ng==")); - } catch (Exception e) { - fail("Error occured in CheckPDP test"); - } - } -} diff --git a/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/CheckPdpPropertiesTest.java b/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/CheckPdpPropertiesTest.java new file mode 100644 index 000000000..afb6fc8b0 --- /dev/null +++ b/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/CheckPdpPropertiesTest.java @@ -0,0 +1,82 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Engine + * ================================================================================ + * Copyright (C) 2017, 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Modifications Copyright (C) 2019 Samsung + * ================================================================================ + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.admin; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import com.att.research.xacml.util.XACMLProperties; +import java.io.File; +import java.io.IOException; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class CheckPdpPropertiesTest { + + @Test + public final void test1NoPropertySet() throws IOException { + System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME, "noexistenfile.properties"); + assertFalse(CheckPdpProperties.validateId("http://localhost:8082/pdp/")); + + System.clearProperty(XACMLProperties.XACML_PROPERTIES_NAME); + System.clearProperty("xacml.rest.pdp.idfile"); + assertFalse(CheckPdpProperties.validateId("http://localhost:8082/pdp/")); + + System.setProperty("xacml.rest.pdp.idfile", new File(".").getCanonicalPath() + File.separator + "src" + + File.separator + "test" + File.separator + "resources" + File.separator + "idonotexist.properties"); + assertFalse(CheckPdpProperties.validateId("http://localhost:8082/pdp/")); + + System.setProperty("xacml.rest.pdp.idfile", + new File(".").getCanonicalPath() + File.separator + "src" + File.separator + "test" + File.separator + + "resources" + File.separator + "doesnothaveproperties.atall"); + assertFalse(CheckPdpProperties.validateId("http://localhost:8082/pdp/")); + + System.setProperty("xacml.rest.pdp.idfile", new File(".").getCanonicalPath() + File.separator + "src" + + File.separator + "test" + File.separator + "resources" + File.separator + "testbad.properties"); + assertFalse(CheckPdpProperties.validateId("http://localhost:8082/pdp/")); + + System.setProperty("xacml.rest.pdp.idfile", new File(".").getCanonicalPath() + File.separator + "src" + + File.separator + "test" + File.separator + "resources" + File.separator + "empty.properties"); + assertFalse(CheckPdpProperties.validateId("http://localhost:8082/pdp/")); + + System.setProperty("xacml.rest.pdp.idfile", + new File(".").getCanonicalPath() + File.separator + "src" + File.separator + "test" + File.separator + + "resources" + File.separator + "testnotenoughvalues.properties"); + assertFalse(CheckPdpProperties.validateId("http://localhost:8082/pdp/")); + + assertNull(CheckPdpProperties.getPdpMap()); + assertNull(CheckPdpProperties.getEncoding("http://localhost:8082/pdp/")); + } + + @Test + public final void test2CheckPdp() throws IOException { + System.setProperty("xacml.rest.pdp.idfile", new File(".").getCanonicalPath() + File.separator + "src" + + File.separator + "test" + File.separator + "resources" + File.separator + "test.properties"); + assertTrue(CheckPdpProperties.validateId("http://localhost:8082/pdp/")); + assertTrue(CheckPdpProperties.getPdpMap().containsKey("http://localhost:8082/pdp/")); + assertTrue(CheckPdpProperties.getEncoding("http://localhost:8082/pdp/").equals("dGVzdHBkcDphbHBoYTQ1Ng==")); + } +} diff --git a/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/RESTfulPAPEngineTest.java b/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/RESTfulPAPEngineTest.java index e28ca1281..993c322d5 100644 --- a/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/RESTfulPAPEngineTest.java +++ b/POLICY-SDK-APP/src/test/java/org/onap/policy/admin/RESTfulPAPEngineTest.java @@ -22,8 +22,8 @@ package org.onap.policy.admin; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.junit.Assert.assertNull; import com.att.research.xacml.api.pap.PAPException; import com.att.research.xacml.api.pap.PDPPolicy; @@ -38,19 +38,14 @@ import java.net.URLConnection; import javax.servlet.http.HttpServletResponse; import org.junit.AfterClass; -import org.junit.Before; import org.junit.BeforeClass; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; import org.mockito.Mockito; import org.onap.policy.rest.adapter.PolicyRestAdapter; import org.onap.policy.xacml.api.pap.OnapPDP; import org.onap.policy.xacml.api.pap.OnapPDPGroup; public class RESTfulPAPEngineTest { - @Rule - public ExpectedException thrown = ExpectedException.none(); private RESTfulPAPEngine engine = null; private String name = "testName"; @@ -64,8 +59,18 @@ public class RESTfulPAPEngineTest { OnapPDP pdp = Mockito.mock(OnapPDP.class); InputStream policy; + /** + * BeforeClass does some simple code coverage and sets up the + * XACML properties. + */ @BeforeClass public static void setUpBeforeClass() { + // + // Test constructor with bad URL + // + assertThatExceptionOfType(PAPException.class).isThrownBy(() -> + new RESTfulPAPEngine(null)); + XACMLProperties.reloadProperties(); } @@ -74,22 +79,22 @@ public class RESTfulPAPEngineTest { XACMLProperties.reloadProperties(); } - @Before - public void runConstructor() throws Exception { + private void setupConnection(int responseCode) throws Exception { // Mock connection HttpURLConnection connection = Mockito.mock(HttpURLConnection.class); - Mockito.when(connection.getResponseCode()).thenReturn(HttpServletResponse.SC_NO_CONTENT); + Mockito.when(connection.getResponseCode()).thenReturn(responseCode); + Mockito.when(connection.getHeaderField("Location")).thenReturn("localhost:5678"); // Set the system property temporarily String systemKey = "xacml.properties"; - String oldProperty = System.getProperty(systemKey); + final String oldProperty = System.getProperty(systemKey); System.setProperty(systemKey, "src/test/resources/xacml.admin.properties"); // Test constructor String urlName = "localhost:1234"; engine = new RESTfulPAPEngine(urlName) { @Override - protected URLConnection makeConnection(String fullURL) throws IOException { + protected URLConnection makeConnection(String fullUrl) throws IOException { return connection; } }; @@ -106,75 +111,68 @@ public class RESTfulPAPEngineTest { } @Test - public void testGroups() throws Exception { + public void testAllTheExceptions() throws Exception { + setupConnection(HttpServletResponse.SC_NO_CONTENT); + engine.setDefaultGroup(group); - assertEquals(engine.getDefaultGroup(), null); + assertNull(engine.getDefaultGroup()); engine.newGroup(name, description); engine.removeGroup(group, newGroup); - assertEquals(engine.getPDPGroup(pdp), null); - assertEquals(engine.getPDPGroup(id), null); - assertEquals(engine.getPDP(id), null); - assertEquals(engine.getStatus(pdp), null); - - thrown.expect(NullPointerException.class); - engine.getOnapPDPGroups(); - fail("Expecting an exception."); - } + assertNull(engine.getPDPGroup(pdp)); + assertNull(engine.getPDPGroup(id)); + assertNull(engine.getPDP(id)); + assertNull(engine.getStatus(pdp)); - @Test - public void testUpdateGroup() throws PAPException { - thrown.expect(PAPException.class); - engine.updateGroup(group); - fail("Expecting an exception."); - } + assertThatExceptionOfType(NullPointerException.class).isThrownBy(() -> + engine.getOnapPDPGroups() + ); - @Test - public void testPDP() throws PAPException { - assertEquals(engine.getGroup(name), null); + assertThatExceptionOfType(PAPException.class).isThrownBy(() -> + engine.updateGroup(group) + ); + + assertNull(engine.getGroup(name)); engine.movePDP(pdp, newGroup); - thrown.expect(PAPException.class); - engine.newPDP(id, newGroup, name, description, jmxport); - fail("Expecting an exception."); - } + assertThatExceptionOfType(PAPException.class).isThrownBy(() -> + engine.newPDP(id, newGroup, name, description, jmxport) + ); - @Test - public void testUpdatePDP() throws PAPException { - thrown.expect(NullPointerException.class); - engine.updatePDP(pdp); - fail("Expecting an exception."); - } + assertThatExceptionOfType(NullPointerException.class).isThrownBy(() -> + engine.updatePDP(pdp) + ); - @Test - public void testRemovePDP() throws PAPException { - thrown.expect(NullPointerException.class); - engine.removePDP(pdp); - fail("Expecting an exception."); - } + assertThatExceptionOfType(NullPointerException.class).isThrownBy(() -> + engine.removePDP(pdp) + ); - @Test - public void testValidatePolicy() throws PAPException { - PolicyRestAdapter policyAdapter = new PolicyRestAdapter(); + assertThatExceptionOfType(PAPException.class).isThrownBy(() -> + engine.validatePolicyRequest(new PolicyRestAdapter(), policyType) + ); - thrown.expect(PAPException.class); - engine.validatePolicyRequest(policyAdapter, policyType); - fail("Expecting an exception."); - } + assertThatExceptionOfType(PAPException.class).isThrownBy(() -> + engine.publishPolicy(id, name, false, policy, newGroup) + ); - @Test - public void testPublishPolicy() throws PAPException { - thrown.expect(PAPException.class); - engine.publishPolicy(id, name, false, policy, newGroup); - fail("Expecting an exception."); - } - - @Test - public void testCopy() throws PAPException { engine.copyFile(id, newGroup, policy); PDPPolicy pdpPolicy = Mockito.mock(PDPPolicy.class); - - thrown.expect(PAPException.class); - engine.copyPolicy(pdpPolicy, newGroup); - fail("Expecting an exception."); + assertThatExceptionOfType(PAPException.class).isThrownBy(() -> + engine.copyPolicy(pdpPolicy, newGroup) + ); + + assertThatExceptionOfType(PAPException.class).isThrownBy(() -> + engine.removePolicy(null, group) + ); + + assertThatExceptionOfType(PAPException.class).isThrownBy(() -> + engine.copyPolicy(null, null) + ); + + // + // Change the mockito to take a different path + // + assertThatExceptionOfType(PAPException.class).isThrownBy(() -> + setupConnection(HttpServletResponse.SC_FOUND) + ); } } diff --git a/pom.xml b/pom.xml index 368e3cf45..456e34e7a 100644 --- a/pom.xml +++ b/pom.xml @@ -125,6 +125,11 @@ junit test + + org.assertj + assertj-core + test + org.springframework spring-mock