Merge "More JUnit additions for PAP-REST"
diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/NotifyOtherPaps.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/NotifyOtherPaps.java
index c3171de..cd290c6 100644
--- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/NotifyOtherPaps.java
+++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/NotifyOtherPaps.java
@@ -22,7 +22,6 @@
 package org.onap.policy.pap.xacml.rest.components;
 
 import com.att.research.xacml.util.XACMLProperties;
-
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.ProtocolException;
@@ -33,7 +32,6 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.UUID;
-
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.rest.XacmlRestProperties;
@@ -58,7 +56,7 @@
      */
     public void notifyOthers(long entityId, String entityType, String newGroupId) {
         LOGGER.debug("notifyOthers(long entityId, String entityType, long newGroupId) as notifyOthers(" + entityId + ","
-                + entityType + "," + newGroupId + ") called");
+            + entityType + "," + newGroupId + ") called");
         failedPaps = new ArrayList<>();
 
         List<?> otherServers = PolicyDbDao.getPolicyDbDaoInstance().getOtherServers();
@@ -70,7 +68,7 @@
         }
     }
 
-    private void startNotifyThreads(List<?> otherServers, long entityId, String entityType, String newGroupId) {
+    protected void startNotifyThreads(List<?> otherServers, long entityId, String entityType, String newGroupId) {
         LinkedList<Thread> notifyThreads = new LinkedList<>();
         // we're going to run notifications in parallel threads to speed things
         // up
@@ -144,11 +142,11 @@
                     return;
                 }
                 if (newGroupId == null) {
-                    url = new URL(otherPap + "?policydbdaourl=" + papUrl + "&entityid=" + entityId + "&entitytype="
-                            + entityType);
+                    url = new URL(
+                        otherPap + "?policydbdaourl=" + papUrl + "&entityid=" + entityId + "&entitytype=" + entityType);
                 } else {
                     url = new URL(otherPap + "?policydbdaourl=" + papUrl + "&entityid=" + entityId + "&entitytype="
-                            + entityType + "&extradata=" + newGroupId);
+                        + entityType + "&extradata=" + newGroupId);
                 }
             } catch (MalformedURLException e) {
                 LOGGER.warn("Caught MalformedURLException on: new URL()", e);
@@ -188,7 +186,7 @@
             int readTimeout;
             try {
                 readTimeout =
-                        Integer.parseInt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_NOTIFY_TIMEOUT));
+                    Integer.parseInt(XACMLProperties.getProperty(XacmlRestProperties.PROP_PAP_NOTIFY_TIMEOUT));
             } catch (Exception e) {
                 LOGGER.error("xacml.rest.pap.notify.timeoutms property not set, using a default.", e);
                 readTimeout = 10000;
@@ -217,7 +215,7 @@
                     LOGGER.info("PolicyDBDao: NotifyOtherThread received response 200 from pap server on notify");
                 } else {
                     LOGGER.warn("PolicyDBDao: NotifyOtherThread connection response code not 200, received: "
-                            + connection.getResponseCode());
+                        + connection.getResponseCode());
                     failedPaps.add(dbdEntity);
                 }
             } catch (Exception e) {
diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/ImportService.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/ImportService.java
index d4801df..050bcc5 100644
--- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/ImportService.java
+++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/ImportService.java
@@ -30,10 +30,9 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
-
+import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.onap.policy.common.logging.eelf.PolicyLogger;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
@@ -74,7 +73,8 @@
             StringBuilder builder = new StringBuilder();
             int ch;
             try {
-                while ((ch = request.getInputStream().read()) != -1) {
+                ServletInputStream stream = request.getInputStream();
+                while ((ch = stream.read()) != -1) {
                     builder.append((char) ch);
                 }
             } catch (IOException e) {
@@ -115,7 +115,7 @@
                     }
                     PolicyLogger.info("Request from API to import new Service");
                     try (Writer writer = new BufferedWriter(new OutputStreamWriter(
-                            new FileOutputStream(extractDir + File.separator + randomID + type), "utf-8"))) {
+                        new FileOutputStream(extractDir + File.separator + randomID + type), "utf-8"))) {
                         writer.write(xmi);
                     } catch (IOException e) {
                         logger.error(e);
@@ -125,7 +125,7 @@
                 } else {
                     InputStream inputStream = null;
                     try (FileOutputStream outputStream =
-                            new FileOutputStream(extractDir + File.separator + randomID + ".zip")) {
+                        new FileOutputStream(extractDir + File.separator + randomID + ".zip")) {
                         inputStream = request.getInputStream();
                         byte[] buffer = new byte[4096];
                         int bytesRead = -1;
@@ -178,7 +178,7 @@
                 }
                 PolicyLogger.info("Request from API to import new Optimization Service Model");
                 try (Writer writer = new BufferedWriter(new OutputStreamWriter(
-                        new FileOutputStream(extractDir + File.separator + randomID + type), "utf-8"))) {
+                    new FileOutputStream(extractDir + File.separator + randomID + type), "utf-8"))) {
                     writer.write(yml);
                 } catch (IOException e) {
                     logger.error(e);
diff --git a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/HeartbeatTest.java b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/HeartbeatTest.java
new file mode 100644
index 0000000..13fb81d
--- /dev/null
+++ b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/HeartbeatTest.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PAP-REST
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.pap.xacml.rest;
+
+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 org.junit.Test;
+
+public class HeartbeatTest {
+    @Test
+    public void testHeartbeat() throws IOException, PAPException {
+        Heartbeat hb = new Heartbeat(null);
+
+        assertThatThrownBy(hb::run).isInstanceOf(NullPointerException.class);
+        assertTrue(hb.isHeartBeatRunning());
+        hb.terminate();
+        assertFalse(hb.isHeartBeatRunning());
+    }
+}
diff --git a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/UpdatePdpThreadTest.java b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/UpdatePdpThreadTest.java
new file mode 100644
index 0000000..9034f39
--- /dev/null
+++ b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/UpdatePdpThreadTest.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PAP-REST
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.pap.xacml.rest;
+
+import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import org.junit.Test;
+import org.onap.policy.common.logging.OnapLoggingContext;
+import org.onap.policy.xacml.api.pap.OnapPDP;
+import org.onap.policy.xacml.std.pap.StdPDP;
+
+public class UpdatePdpThreadTest {
+    @Test
+    public void testConstructor1() {
+        UpdatePdpThread thread = new UpdatePdpThread(null, null);
+        assertNotNull(thread);
+    }
+
+    @Test
+    public void testConstructor2() {
+        OnapLoggingContext loggingContext = new OnapLoggingContext();
+        loggingContext.setRequestId("id");
+        UpdatePdpThread thread = new UpdatePdpThread(null, loggingContext, null);
+        assertNotNull(thread);
+    }
+
+    @Test
+    public void testRun() {
+        OnapPDP pdp = new StdPDP("http://id", 0);
+        OnapLoggingContext loggingContext = new OnapLoggingContext();
+        loggingContext.setRequestId("id");
+        List<Properties> properties = new ArrayList<Properties>();
+        UpdatePdpThread thread = new UpdatePdpThread(pdp, loggingContext, properties);
+        assertThatCode(thread::run).doesNotThrowAnyException();
+    }
+}
diff --git a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/components/NotifyOtherPapsTest.java b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/components/NotifyOtherPapsTest.java
new file mode 100644
index 0000000..50c166a
--- /dev/null
+++ b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/components/NotifyOtherPapsTest.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PAP-REST
+ * ================================================================================
+ * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.pap.xacml.rest.components;
+
+import static org.assertj.core.api.Assertions.assertThatCode;
+
+import com.att.research.xacml.util.XACMLProperties;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.rest.jpa.PolicyDBDaoEntity;
+
+public class NotifyOtherPapsTest {
+    private static final String systemKey = XACMLProperties.XACML_PROPERTIES_NAME;
+    private static final String oldProperty = System.getProperty(systemKey);
+
+    @Before
+    public void setup() {
+        // Set the system property temporarily
+        System.setProperty(systemKey, "xacml.pap.properties");
+    }
+
+    @Test
+    public void negTestNotify() {
+        NotifyOtherPaps notify = new NotifyOtherPaps();
+        List<PolicyDBDaoEntity> otherServers = new ArrayList<PolicyDBDaoEntity>();
+        PolicyDBDaoEntity dbdaoEntity = new PolicyDBDaoEntity();
+        dbdaoEntity.setPolicyDBDaoUrl("http://test");
+        otherServers.add(dbdaoEntity);
+        long entityId = 0;
+        String entityType = "entityType";
+        String newGroupId = "newGroupId";
+        assertThatCode(() -> notify.startNotifyThreads(otherServers, entityId, entityType, newGroupId))
+            .doesNotThrowAnyException();
+    }
+
+    @After
+    public void cleanup() {
+        // Restore the original system property
+        if (oldProperty != null) {
+            System.setProperty(systemKey, oldProperty);
+        } else {
+            System.clearProperty(systemKey);
+        }
+    }
+}
diff --git a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/service/ImportServiceTest.java b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/service/ImportServiceTest.java
index 72d4926..3b826f6 100644
--- a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/service/ImportServiceTest.java
+++ b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/service/ImportServiceTest.java
@@ -20,14 +20,14 @@
 
 package org.onap.policy.pap.xacml.rest.service;
 
+import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 
 import com.mockrunner.mock.web.MockHttpServletRequest;
 import com.mockrunner.mock.web.MockHttpServletResponse;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.junit.Test;
 
 public class ImportServiceTest {
@@ -39,4 +39,39 @@
         service.doImportMicroServicePut(request, response);
         assertEquals(response.getHeader("error"), "missing");
     }
+
+    @Test
+    public void testImportBRMS() {
+        ImportService service = new ImportService();
+        MockHttpServletRequest request = new MockHttpServletRequest();
+        request.setupAddParameter("serviceName", "serviceName");
+        request.setupAddParameter("importService", "BRMSPARAM");
+        request.setBodyContent("foo");
+        HttpServletResponse response = new MockHttpServletResponse();
+        assertThatCode(() -> service.doImportMicroServicePut(request, response)).doesNotThrowAnyException();
+    }
+
+    @Test
+    public void testImportMS() {
+        ImportService service = new ImportService();
+        MockHttpServletRequest request = new MockHttpServletRequest();
+        request.setupAddParameter("serviceName", "serviceName");
+        request.setupAddParameter("importService", "MICROSERVICE");
+        request.setupAddParameter("fileName", "fileName");
+        request.setBodyContent("foo");
+        HttpServletResponse response = new MockHttpServletResponse();
+        assertThatThrownBy(() -> service.doImportMicroServicePut(request, response)).isInstanceOf(Exception.class);
+    }
+
+    @Test
+    public void testImportOpt() {
+        ImportService service = new ImportService();
+        MockHttpServletRequest request = new MockHttpServletRequest();
+        request.setupAddParameter("serviceName", "serviceName");
+        request.setupAddParameter("importService", "OPTIMIZATION");
+        request.setupAddParameter("fileName", "fileName");
+        request.setBodyContent("foo");
+        HttpServletResponse response = new MockHttpServletResponse();
+        assertThatThrownBy(() -> service.doImportMicroServicePut(request, response)).isInstanceOf(Exception.class);
+    }
 }