Few JUnit additions for PAP-REST 69/98369/5
authorbobbymander <bobby.mander@att.com>
Wed, 13 Nov 2019 15:30:56 +0000 (10:30 -0500)
committerbobbymander <bobby.mander@att.com>
Wed, 13 Nov 2019 19:30:07 +0000 (14:30 -0500)
Issue-ID: POLICY-2130
Change-Id: Ie9972bc0014def93acf04c4a2386585fb4accdef
Signed-off-by: bobbymander <bobby.mander@att.com>
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/Heartbeat.java
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateBrmsParamPolicy.java
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/HeartbeatTest.java
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/components/BRMSPolicyTest.java
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/controller/OptimizationDictionaryControllerTest.java
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/handler/DeleteHandlerTest.java
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/service/ImportServiceTest.java

index 81e7c67..920c3dd 100644 (file)
@@ -23,7 +23,7 @@ package org.onap.policy.pap.xacml.rest;
 import com.att.research.xacml.api.pap.PAPException;
 import com.att.research.xacml.api.pap.PDPStatus;
 import com.att.research.xacml.util.XACMLProperties;
-
+import com.google.common.annotations.VisibleForTesting;
 import java.net.ConnectException;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
@@ -33,7 +33,6 @@ import java.net.UnknownHostException;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
-
 import org.onap.policy.common.logging.eelf.MessageCodes;
 import org.onap.policy.common.logging.eelf.PolicyLogger;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
@@ -88,9 +87,9 @@ public class Heartbeat implements Runnable {
     public Heartbeat(PAPPolicyEngine papEngine2) {
         papEngine = papEngine2;
         this.heartbeatInterval =
-                Integer.parseInt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_HEARTBEAT_INTERVAL, "10000"));
+            Integer.parseInt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_HEARTBEAT_INTERVAL, "10000"));
         this.heartbeatTimeout =
-                Integer.parseInt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_HEARTBEAT_TIMEOUT, "10000"));
+            Integer.parseInt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_HEARTBEAT_TIMEOUT, "10000"));
     }
 
     @Override
@@ -127,7 +126,8 @@ public class Heartbeat implements Runnable {
         }
     }
 
-    private void getPdpsFromGroup() {
+    @VisibleForTesting
+    protected void getPdpsFromGroup() {
         try {
             for (OnapPDPGroup g : papEngine.getOnapPDPGroups()) {
                 for (OnapPDP p : g.getOnapPdps()) {
@@ -136,11 +136,12 @@ public class Heartbeat implements Runnable {
             }
         } catch (PAPException e) {
             PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, XACMLPAPSERVLET,
-                    "Heartbeat unable to read PDPs from PAPEngine");
+                "Heartbeat unable to read PDPs from PAPEngine");
         }
     }
 
-    private void notifyEachPdp() {
+    @VisibleForTesting
+    protected void notifyEachPdp() {
         HashMap<String, URL> idToUrlMap = new HashMap<>();
         for (OnapPDP pdp : pdps) {
             // Check for shutdown
@@ -163,14 +164,15 @@ public class Heartbeat implements Runnable {
                     }
                 } catch (MalformedURLException e) {
                     PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, XACMLPAPSERVLET,
-                            " PDP id '" + fullUrlString + "' is not a valid URL");
+                        " PDP id '" + fullUrlString + "' is not a valid URL");
                 }
             }
             updatePdpStatus(pdp, openPdpConnection(pdpUrl, pdp));
         }
     }
 
-    private String openPdpConnection(URL pdpUrl, OnapPDP pdp) {
+    @VisibleForTesting
+    protected String openPdpConnection(URL pdpUrl, OnapPDP pdp) {
         // Do a GET with type HeartBeat
         String newStatus = "";
         HttpURLConnection connection = null;
@@ -197,25 +199,25 @@ public class Heartbeat implements Runnable {
                     // anything else is an unexpected result
                     newStatus = PDPStatus.Status.UNKNOWN.toString();
                     PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " Heartbeat connect response code "
-                            + connection.getResponseCode() + ": " + pdp.getId());
+                        + connection.getResponseCode() + ": " + pdp.getId());
                 }
             }
         } catch (UnknownHostException e) {
             newStatus = PDPStatus.Status.NO_SUCH_HOST.toString();
             PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, XACMLPAPSERVLET,
-                    HEARTBEATSTRING + pdp.getId() + "' NO_SUCH_HOST");
+                HEARTBEATSTRING + pdp.getId() + "' NO_SUCH_HOST");
         } catch (SocketTimeoutException e) {
             newStatus = PDPStatus.Status.CANNOT_CONNECT.toString();
             PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, XACMLPAPSERVLET,
-                    HEARTBEATSTRING + pdp.getId() + "' connection timeout");
+                HEARTBEATSTRING + pdp.getId() + "' connection timeout");
         } catch (ConnectException e) {
             newStatus = PDPStatus.Status.CANNOT_CONNECT.toString();
             PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, XACMLPAPSERVLET,
-                    HEARTBEATSTRING + pdp.getId() + "' cannot connect");
+                HEARTBEATSTRING + pdp.getId() + "' cannot connect");
         } catch (Exception e) {
             newStatus = PDPStatus.Status.UNKNOWN.toString();
             PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, XACMLPAPSERVLET,
-                    HEARTBEATSTRING + pdp.getId() + "' connect exception");
+                HEARTBEATSTRING + pdp.getId() + "' connect exception");
         } finally {
             // cleanup the connection
             if (connection != null)
@@ -224,7 +226,8 @@ public class Heartbeat implements Runnable {
         return newStatus;
     }
 
-    private void updatePdpStatus(OnapPDP pdp, String newStatus) {
+    @VisibleForTesting
+    protected void updatePdpStatus(OnapPDP pdp, String newStatus) {
         if (!pdp.getStatus().getStatus().toString().equals(newStatus)) {
             if (LOGGER.isDebugEnabled()) {
                 LOGGER.debug("previous status='" + pdp.getStatus().getStatus() + "'  new Status='" + newStatus + "'");
@@ -233,7 +236,7 @@ public class Heartbeat implements Runnable {
                 getPAPInstance().setPDPSummaryStatus(pdp, newStatus);
             } catch (PAPException e) {
                 PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, XACMLPAPSERVLET,
-                        "Unable to set state for PDP '" + pdp.getId());
+                    "Unable to set state for PDP '" + pdp.getId());
             }
         }
     }
index c728f3b..ffb902b 100644 (file)
@@ -22,7 +22,7 @@ package org.onap.policy.pap.xacml.rest.components;
 
 import com.att.research.xacml.api.pap.PAPException;
 import com.att.research.xacml.std.IdentifierImpl;
-
+import com.google.common.annotations.VisibleForTesting;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -41,9 +41,7 @@ import java.util.Map.Entry;
 import java.util.UUID;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
 import javax.script.SimpleBindings;
-
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType;
@@ -57,7 +55,6 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObjectFactory;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType;
-
 import org.apache.commons.io.FilenameUtils;
 import org.onap.policy.common.logging.eelf.MessageCodes;
 import org.onap.policy.common.logging.eelf.PolicyLogger;
@@ -131,7 +128,7 @@ public class CreateBrmsParamPolicy extends Policy {
             out.close();
         } catch (Exception e) {
             PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy",
-                    "Exception saving configuration file");
+                "Exception saving configuration file");
         }
     }
 
@@ -148,6 +145,7 @@ public class CreateBrmsParamPolicy extends Policy {
     }
 
     // Validations for Config form
+    @Override
     public boolean validateConfigForm() {
 
         // Validating mandatory Fields.
@@ -252,7 +250,7 @@ public class CreateBrmsParamPolicy extends Policy {
                     }
                 }
                 String param =
-                        params.toString().replace("declare Params", "").replace("end", "").replaceAll("\\s+", "");
+                    params.toString().replace("declare Params", "").replace("end", "").replaceAll("\\s+", "");
                 String[] components = param.split(":");
                 String caption = "";
                 for (int i = 0; i < components.length; i++) {
@@ -283,7 +281,7 @@ public class CreateBrmsParamPolicy extends Policy {
                 }
             } catch (Exception e) {
                 PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "CreateBrmsParamPolicy",
-                        "Exception parsing file in findType");
+                    "Exception parsing file in findType");
             }
         }
         return mapFieldType;
@@ -327,7 +325,7 @@ public class CreateBrmsParamPolicy extends Policy {
 
             try {
                 body.append("/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI "
-                        + "purpose. \n\t " + "<$%BRMSParamTemplate=" + templateValue + "%$> \n");
+                    + "purpose. \n\t " + "<$%BRMSParamTemplate=" + templateValue + "%$> \n");
                 body.append("<%$Values=");
                 for (Map.Entry<String, String> entry : ruleAndUIValue.entrySet()) {
                     String uiKey = entry.getKey();
@@ -339,7 +337,7 @@ public class CreateBrmsParamPolicy extends Policy {
                 body.append(valueFromDictionary + "\n");
             } catch (Exception e) {
                 PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy",
-                        "Exception saving policy");
+                    "Exception saving policy");
             }
 
             saveConfigurations(policyName, body.toString());
@@ -407,7 +405,7 @@ public class CreateBrmsParamPolicy extends Policy {
                 accessURI = new URI(ACTION_ID);
             } catch (URISyntaxException e) {
                 PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsParamPolicy",
-                        "Exception creating ACCESS URI");
+                    "Exception creating ACCESS URI");
             }
             accessAttributeDesignator.setCategory(CATEGORY_ACTION);
             accessAttributeDesignator.setDataType(STRING_DATATYPE);
@@ -429,7 +427,7 @@ public class CreateBrmsParamPolicy extends Policy {
                 configURI = new URI(RESOURCE_ID);
             } catch (URISyntaxException e) {
                 PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsParamPolicy",
-                        "Exception creating Config URI");
+                    "Exception creating Config URI");
             }
 
             configAttributeDesignator.setCategory(CATEGORY_RESOURCE);
@@ -461,7 +459,8 @@ public class CreateBrmsParamPolicy extends Policy {
     }
 
     // Data required for Advice part is setting here.
-    private AdviceExpressionsType getAdviceExpressions(int version, String fileName) {
+    @VisibleForTesting
+    protected AdviceExpressionsType getAdviceExpressions(int version, String fileName) {
 
         // Policy Config ID Assignment
         AdviceExpressionsType advices = new AdviceExpressionsType();
@@ -546,8 +545,8 @@ public class CreateBrmsParamPolicy extends Policy {
         // Adding Controller Information.
         if (policyAdapter.getBrmsController() != null) {
             BRMSDictionaryController brmsDicitonaryController = new BRMSDictionaryController();
-            advice.getAttributeAssignmentExpression().add(createResponseAttributes(
-                    "controller:" + policyAdapter.getBrmsController(),
+            advice.getAttributeAssignmentExpression()
+                .add(createResponseAttributes("controller:" + policyAdapter.getBrmsController(),
                     brmsDicitonaryController.getControllerDataByID(policyAdapter.getBrmsController()).getController()));
         }
 
@@ -561,14 +560,14 @@ public class CreateBrmsParamPolicy extends Policy {
                 key.append(dependencyName + ",");
             }
             advice.getAttributeAssignmentExpression()
-                    .add(createResponseAttributes("dependencies:" + key.toString(), dependencies.toString()));
+                .add(createResponseAttributes("dependencies:" + key.toString(), dependencies.toString()));
         }
 
         // Dynamic Field Config Attributes.
         Map<String, String> dynamicFieldConfigAttributes = policyAdapter.getDynamicFieldConfigAttributes();
         for (Entry<String, String> map : dynamicFieldConfigAttributes.entrySet()) {
             advice.getAttributeAssignmentExpression()
-                    .add(createResponseAttributes("key:" + map.getKey(), map.getValue()));
+                .add(createResponseAttributes("key:" + map.getKey(), map.getValue()));
         }
 
         // Risk Attributes
index 13fb81d..33b7f8b 100644 (file)
 
 package org.onap.policy.pap.xacml.rest;
 
+import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import com.att.research.xacml.api.pap.PAPException;
 import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.Set;
 import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.policy.xacml.api.pap.OnapPDP;
+import org.onap.policy.xacml.api.pap.OnapPDPGroup;
+import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
+import org.onap.policy.xacml.std.pap.StdPDP;
+import org.onap.policy.xacml.std.pap.StdPDPGroup;
 
 public class HeartbeatTest {
     @Test
@@ -38,4 +49,43 @@ public class HeartbeatTest {
         hb.terminate();
         assertFalse(hb.isHeartBeatRunning());
     }
+
+    @Test
+    public void testGetPdps() throws PAPException, IOException {
+        Set<OnapPDPGroup> pdpGroups = new HashSet<OnapPDPGroup>();
+        StdPDPGroup pdpGroup = new StdPDPGroup();
+        OnapPDP pdp = new StdPDP();
+        pdpGroup.addPDP(pdp);
+        pdpGroups.add(pdpGroup);
+        PAPPolicyEngine pap = Mockito.mock(PAPPolicyEngine.class);
+        Mockito.when(pap.getOnapPDPGroups()).thenReturn(pdpGroups);
+        Heartbeat hb = new Heartbeat(pap);
+        hb.getPdpsFromGroup();
+        assertFalse(hb.isHeartBeatRunning());
+
+        assertThatCode(hb::notifyEachPdp).doesNotThrowAnyException();
+        assertThatThrownBy(hb::run).isInstanceOf(Exception.class);
+        assertThatThrownBy(hb::notifyEachPdp).isInstanceOf(Exception.class);
+    }
+
+    @Test
+    public void testOpen() throws MalformedURLException {
+        Heartbeat hb = new Heartbeat(null);
+        OnapPDP pdp = new StdPDP();
+
+        assertThatCode(() -> {
+            URL url = new URL("http://onap.org");
+            hb.openPdpConnection(url, pdp);
+        }).doesNotThrowAnyException();
+
+        assertThatCode(() -> {
+            URL url = new URL("http://1.2.3.4");
+            hb.openPdpConnection(url, pdp);
+        }).doesNotThrowAnyException();
+
+        assertThatCode(() -> {
+            URL url = new URL("http://fakesite.fakenews");
+            hb.openPdpConnection(url, pdp);
+        }).doesNotThrowAnyException();
+    }
 }
index 333d878..5c1d3dd 100644 (file)
 
 package org.onap.policy.pap.xacml.rest.components;
 
+import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
+import com.att.research.xacml.api.pap.PAPException;
 import java.io.IOException;
-
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
 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.rest.dao.CommonClassDao;
 
 public class BRMSPolicyTest {
@@ -68,4 +75,42 @@ public class BRMSPolicyTest {
         String userID = "testID";
         assertEquals(1, template.addRule(rule, ruleName, description, userID).size());
     }
+
+    @Test
+    public void testCreateBrmsParamPolicyAdapter() throws PAPException {
+        Map<String, String> brmsParamBody = new HashMap<String, String>();
+        brmsParamBody.put("key", "value");
+
+        PolicyRestAdapter adapter = new PolicyRestAdapter();
+        adapter.setHighestVersion(1);
+        adapter.setPolicyType("Config");
+        adapter.setBrmsParamBody(brmsParamBody);
+        adapter.setNewFileName("policyName.1.xml");
+        Map<String, String> dynamicFieldConfigAttributes = new HashMap<String, String>();
+        dynamicFieldConfigAttributes.put("key", "value");
+        adapter.setDynamicFieldConfigAttributes(dynamicFieldConfigAttributes);
+        CreateBrmsParamPolicy policy = new CreateBrmsParamPolicy(adapter);
+        String ruleContents = "contents";
+
+        assertThatCode(() -> policy.saveConfigurations("name.xml", "rules")).doesNotThrowAnyException();
+        try {
+            policy.prepareToSave();
+            policy.savePolicies();
+        } catch (Exception ex) {
+            // Ignore
+        }
+
+        assertThatThrownBy(() -> policy.expandConfigBody(ruleContents, brmsParamBody))
+            .isInstanceOf(NullPointerException.class);
+        assertTrue(policy.validateConfigForm());
+        policy.getAdviceExpressions(1, "name.1.xml");
+        assertNotNull(policy.getCorrectPolicyDataObject());
+    }
+
+    @Test
+    public void testRead() {
+        Charset encoding = Charset.defaultCharset();
+        assertThatCode(() -> CreateBrmsParamPolicy.readFile("xacml.pap.properties", encoding))
+            .doesNotThrowAnyException();
+    }
 }
index 451989c..d990b90 100644 (file)
 
 package org.onap.policy.pap.xacml.rest.controller;
 
+import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import com.mockrunner.mock.web.MockHttpServletRequest;
 import java.io.BufferedReader;
 import java.io.StringReader;
 import javax.servlet.http.HttpServletRequest;
-
+import javax.ws.rs.core.Response;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -72,16 +76,16 @@ public class OptimizationDictionaryControllerTest {
         HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
 
         jsonString = "{\"optimizationModelsDictionaryData\": {\"modelName\": \"test\",\"inprocess\": false,\"model\":"
-                + " {\"name\": \"testingdata\",\"subScopename\": \"\",\"path\": [],\"type\": \"dir\","
-                + "\"size\": 0,\"date\": \"2017-04-12T21:26:57.000Z\", \"version\": \"\","
-                + "\"createdBy\": \"someone\",\"modifiedBy\": \"someone\",\"content\": \"\"," + "\"recursive\": false},"
-                + "\"tempModel\": {\"name\": \"testingdata\",\"subScopename\": \"\"},"
-                + "\"policy\": {\"policyType\": \"Config\",\"configPolicyType\": \"Micro Service\","
-                + "\"policyName\": \"may1501\",\"policyDescription\": \"testing input\","
-                + "\"onapName\": \"RaviTest\",\"guard\": \"False\",\"riskType\": \"Risk12345\","
-                + "\"riskLevel\": \"2\",\"priority\": \"6\",\"serviceType\": \"DkatPolicyBody\","
-                + "\"version\": \"1707.41.02\",\"ruleGridData\": [[\"fileId\"]],\"ttlDate\": null}},"
-                + "\"policyJSON\": {\"pmTableName\": \"test\",\"dmdTopic\": \"1\",\"fileId\": \"56\"}}";
+            + " {\"name\": \"testingdata\",\"subScopename\": \"\",\"path\": [],\"type\": \"dir\","
+            + "\"size\": 0,\"date\": \"2017-04-12T21:26:57.000Z\", \"version\": \"\","
+            + "\"createdBy\": \"someone\",\"modifiedBy\": \"someone\",\"content\": \"\"," + "\"recursive\": false},"
+            + "\"tempModel\": {\"name\": \"testingdata\",\"subScopename\": \"\"},"
+            + "\"policy\": {\"policyType\": \"Config\",\"configPolicyType\": \"Micro Service\","
+            + "\"policyName\": \"may1501\",\"policyDescription\": \"testing input\","
+            + "\"onapName\": \"RaviTest\",\"guard\": \"False\",\"riskType\": \"Risk12345\","
+            + "\"riskLevel\": \"2\",\"priority\": \"6\",\"serviceType\": \"DkatPolicyBody\","
+            + "\"version\": \"1707.41.02\",\"ruleGridData\": [[\"fileId\"]],\"ttlDate\": null}},"
+            + "\"policyJSON\": {\"pmTableName\": \"test\",\"dmdTopic\": \"1\",\"fileId\": \"56\"}}";
 
         br = new BufferedReader(new StringReader(jsonString));
         // --- mock the getReader() call
@@ -108,7 +112,7 @@ public class OptimizationDictionaryControllerTest {
             controller.getOptimizationModelsDictionaryEntityData(response);
             logger.info("response.getContentAsString(): " + response.getContentAsString());
             assertTrue(response.getContentAsString() != null
-                    && response.getContentAsString().contains("optimizationModelsDictionaryDatas"));
+                && response.getContentAsString().contains("optimizationModelsDictionaryDatas"));
 
         } catch (Exception e) {
             fail("Exception: " + e);
@@ -130,7 +134,7 @@ public class OptimizationDictionaryControllerTest {
             controller.saveOptimizationModelsDictionary(request, response);
             logger.info("response.getContentAsString(): " + response.getContentAsString());
             assertTrue(response.getContentAsString() != null
-                    && response.getContentAsString().contains("optimizationModelsDictionaryDatas"));
+                && response.getContentAsString().contains("optimizationModelsDictionaryDatas"));
 
         } catch (Exception e) {
             fail("Exception: " + e);
@@ -149,28 +153,59 @@ public class OptimizationDictionaryControllerTest {
         try {
             // mock the getReader() call
             jsonString =
-                    "{\"data\": {\"modelName\": \"test\",\"inprocess\": false,\"model\": {\"name\": \"testingdata\","
-                            + "\"subScopename\": \"\",\"path\": [],\"type\": \"dir\",\"size\": 0,"
-                            + "\"date\": \"2017-04-12T21:26:57.000Z\",\"version\": \"\",\"createdBy\": \"someone\","
-                            + "\"modifiedBy\": \"someone\",\"content\": \"\",\"recursive\": false},"
-                            + "\"tempModel\": {\"name\": \"testingdata\",\"subScopename\": \"\"},"
-                            + "\"policy\": {\"policyType\": \"Config\",\"configPolicyType\": \"Micro Service\","
-                            + "\"policyName\": \"may1501\",\"policyDescription\": \"testing input\","
-                            + "\"onapName\": \"RaviTest\",\"guard\": \"False\",\"riskType\": \"Risk12345\","
-                            + "\"riskLevel\": \"2\",\"priority\": \"6\",\"serviceType\": \"DkatPolicyBody\","
-                            + "\"version\": \"1707.41.02\",\"ruleGridData\": [[\"fileId\"]],\"ttlDate\": null}},"
-                            + "\"policyJSON\": {\"pmTableName\": \"test\",\"dmdTopic\": \"1\",\"fileId\": \"56\"}}";
+                "{\"data\": {\"modelName\": \"test\",\"inprocess\": false,\"model\": {\"name\": \"testingdata\","
+                    + "\"subScopename\": \"\",\"path\": [],\"type\": \"dir\",\"size\": 0,"
+                    + "\"date\": \"2017-04-12T21:26:57.000Z\",\"version\": \"\",\"createdBy\": \"someone\","
+                    + "\"modifiedBy\": \"someone\",\"content\": \"\",\"recursive\": false},"
+                    + "\"tempModel\": {\"name\": \"testingdata\",\"subScopename\": \"\"},"
+                    + "\"policy\": {\"policyType\": \"Config\",\"configPolicyType\": \"Micro Service\","
+                    + "\"policyName\": \"may1501\",\"policyDescription\": \"testing input\","
+                    + "\"onapName\": \"RaviTest\",\"guard\": \"False\",\"riskType\": \"Risk12345\","
+                    + "\"riskLevel\": \"2\",\"priority\": \"6\",\"serviceType\": \"DkatPolicyBody\","
+                    + "\"version\": \"1707.41.02\",\"ruleGridData\": [[\"fileId\"]],\"ttlDate\": null}},"
+                    + "\"policyJSON\": {\"pmTableName\": \"test\",\"dmdTopic\": \"1\",\"fileId\": \"56\"}}";
 
             BufferedReader br = new BufferedReader(new StringReader(jsonString));
             when(request.getReader()).thenReturn(br);
             controller.removeOptimizationModelsDictionary(request, response);
             logger.info("response.getContentAsString(): " + response.getContentAsString());
             assertTrue(response.getContentAsString() != null
-                    && response.getContentAsString().contains("optimizationModelsDictionaryDatas"));
+                && response.getContentAsString().contains("optimizationModelsDictionaryDatas"));
 
         } catch (Exception e) {
             fail("Exception: " + e);
         }
         logger.info("testRemoveOptimizationModelsDictionary: exit");
     }
+
+    @Test
+    public void testGet() {
+        OptimizationDictionaryController controller = new OptimizationDictionaryController(commonClassDao);
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        controller.getOptimizationModelsDictionaryByNameEntityData(response);
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+    }
+
+    @Test
+    public void testSave() {
+        OptimizationDictionaryController controller = new OptimizationDictionaryController(commonClassDao);
+        MockHttpServletRequest req = new MockHttpServletRequest();
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        req.setBodyContent("{\n\"modelType\": \"type.yml\", \"dataOrderInfo\": \"info\", \"userid\": \"id\", "
+            + "\"optimizationModelsDictionaryData\": {\"description\": \"desc\", \"modelName\": \"name\", \"version\": \"1.0\"}, "
+            + "\"classMap\": \"{\\\"dep\\\":\\\"{\\\"dependency\\\":\\\"depval\\\"}\\\"}\" }\n");
+        // + "\"classMap\": \"{\\\"dep\\\":\\\"dependency\\\"}\" }\n");
+        assertThatThrownBy(() -> controller.saveOptimizationModelsDictionary(req, response))
+            .isInstanceOf(NullPointerException.class);
+
+        req.setBodyContent("{\n\"modelType\": \"type.xml\", \"dataOrderInfo\": \"info\", \"userid\": \"id\", "
+            + "\"optimizationModelsDictionaryData\": {\"description\": \"desc\", \"modelName\": \"name\", \"version\": \"1.0\"}, "
+            + "\"classMap\": \"{\\\"dep\\\": {\\\"dependency\\\":\\\"depval\\\"} }\" }\n");
+        assertThatCode(() -> controller.saveOptimizationModelsDictionary(req, response)).doesNotThrowAnyException();
+
+        req.setupAddParameter("apiflag", "api");
+        assertThatThrownBy(() -> controller.saveOptimizationModelsDictionary(req, response))
+            .isInstanceOf(NullPointerException.class);
+    }
+
 }
index a9da00d..d0e4416 100644 (file)
@@ -25,11 +25,13 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.when;
 
 import com.mockrunner.mock.web.MockHttpServletRequest;
 import com.mockrunner.mock.web.MockHttpServletResponse;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import org.hibernate.Session;
@@ -45,6 +47,7 @@ import org.onap.policy.pap.xacml.rest.daoimpl.CommonClassDaoImpl;
 import org.onap.policy.pap.xacml.rest.elk.client.PolicyElasticSearchController;
 import org.onap.policy.rest.dao.CommonClassDao;
 import org.onap.policy.rest.jpa.PolicyEntity;
+import org.onap.policy.rest.jpa.PolicyVersion;
 import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
 import org.onap.policy.xacml.std.pap.StdEngine;
 import org.powermock.api.mockito.PowerMockito;
@@ -120,12 +123,74 @@ public class DeleteHandlerTest {
         CommonClassDao dao = Mockito.mock(CommonClassDao.class);
         DeleteHandler handler = new DeleteHandler(dao);
 
-        // Mock request
+        // Request #1
         MockHttpServletRequest request = new MockHttpServletRequest();
         request.setBodyContent(
             "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Config_name.1.xml\", \"deleteCondition\": \"All Versions\"\n}\n");
         MockHttpServletResponse response = new MockHttpServletResponse();
+        handler.doApiDeleteFromPap(request, response);
+        assertTrue(response.containsHeader("error"));
+
+        // Request #2
+        request.setBodyContent(
+            "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Action_name.1.xml\", \"deleteCondition\": \"All Versions\"\n}\n");
+        handler.doApiDeleteFromPap(request, response);
+        assertTrue(response.containsHeader("error"));
+
+        // Request #3
+        request.setBodyContent(
+            "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Decision_name.1.xml\", \"deleteCondition\": \"All Versions\"\n}\n");
+        handler.doApiDeleteFromPap(request, response);
+        assertTrue(response.containsHeader("error"));
+
+        // Request #4
+        request.setBodyContent(
+            "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Bar_name.1.xml\", \"deleteCondition\": \"All Versions\"\n}\n");
+        handler.doApiDeleteFromPap(request, response);
+        assertTrue(response.containsHeader("error"));
+
+        // Request #5
+        request.setBodyContent(
+            "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Config_name.1.xml\", \"deleteCondition\": \"Current Version\"\n}\n");
+        handler.doApiDeleteFromPap(request, response);
+        assertTrue(response.containsHeader("error"));
+
+        // Request #6
+        request.setBodyContent(
+            "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Action_name.1.xml\", \"deleteCondition\": \"Current Version\"\n}\n");
+        handler.doApiDeleteFromPap(request, response);
+        assertTrue(response.containsHeader("error"));
+
+        // Request #7
+        request.setBodyContent(
+            "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Decision_name.1.xml\", \"deleteCondition\": \"Current Version\"\n}\n");
+        handler.doApiDeleteFromPap(request, response);
+        assertTrue(response.containsHeader("error"));
+
+        // Mock dao
+        List<PolicyVersion> pePVs = new ArrayList<PolicyVersion>();
+        PolicyVersion pv = new PolicyVersion();
+        pePVs.add(pv);
+        List<Object> peObjs = new ArrayList<Object>(pePVs);
+        List<PolicyEntity> peEnts = new ArrayList<PolicyEntity>();
+        PolicyEntity peEnt = new PolicyEntity();
+        peEnts.add(peEnt);
+        List<Object> peEntObjs = new ArrayList<Object>(peEnts);
+        Mockito.when(dao.getDataByQuery(eq("Select p from PolicyVersion p where p.policyName=:pname"), any()))
+            .thenReturn(peObjs);
+        Mockito.when(
+            dao.getDataByQuery(eq("SELECT p FROM PolicyEntity p WHERE p.policyName=:pName and p.scope=:pScope"), any()))
+            .thenReturn(peEntObjs);
+
+        // Request #8
+        request.setBodyContent(
+            "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Decision_name.1.xml\", \"deleteCondition\": \"Current Version\"\n}\n");
+        handler.doApiDeleteFromPap(request, response);
+        assertTrue(response.containsHeader("error"));
 
+        // Request #9
+        request.setBodyContent(
+            "{\n\"PAPPolicyType\": \"StdPAPPolicy\", \"policyName\": \"foo.Decision_name.1.xml\", \"deleteCondition\": \"Current Version\"\n, \"deleteCondition\": \"All Versions\"}\n");
         handler.doApiDeleteFromPap(request, response);
         assertTrue(response.containsHeader("error"));
     }
index 3b826f6..b7d6bac 100644 (file)
@@ -37,7 +37,7 @@ public class ImportServiceTest {
         HttpServletRequest request = new MockHttpServletRequest();
         HttpServletResponse response = new MockHttpServletResponse();
         service.doImportMicroServicePut(request, response);
-        assertEquals(response.getHeader("error"), "missing");
+        assertEquals("missing", response.getHeader("error"));
     }
 
     @Test