Merge "Resolve security issues SONATYPE-2017-0359"
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PIPEngineGetHistory.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PIPEngineGetHistory.java
index bfdff4d..21bdcd8 100644
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PIPEngineGetHistory.java
+++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PIPEngineGetHistory.java
@@ -140,7 +140,7 @@
 			operation = getRecipe(pipFinder).iterator().next();
 			target = getTarget(pipFinder).iterator().next();
 		} catch (Exception e) {
-			logger.debug("could not retrieve actor, operation, or target from PIP finder");
+			logger.debug("could not retrieve actor, operation, or target from PIP finder", e);
 			return StdPIPResponse.PIP_RESPONSE_EMPTY;
 		}
 
diff --git a/controlloop/common/msb/pom.xml b/controlloop/common/msb/pom.xml
index 54e68da..a24f333 100644
--- a/controlloop/common/msb/pom.xml
+++ b/controlloop/common/msb/pom.xml
@@ -46,6 +46,12 @@
             <version>1.2.3</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.onap.policy.common</groupId>
+            <artifactId>utils-test</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/controlloop/common/msb/src/main/java/org/onap/policy/msb/client/MSBServiceFactory.java b/controlloop/common/msb/src/main/java/org/onap/policy/msb/client/MSBServiceFactory.java
index 5332c0d..7ebb5d6 100644
--- a/controlloop/common/msb/src/main/java/org/onap/policy/msb/client/MSBServiceFactory.java
+++ b/controlloop/common/msb/src/main/java/org/onap/policy/msb/client/MSBServiceFactory.java
@@ -20,7 +20,6 @@
 import java.nio.file.Files;

 import java.nio.file.Path;

 import java.nio.file.Paths;

-import java.util.Iterator;

 import java.util.Properties;

 

 import org.onap.msb.sdk.discovery.common.RouteException;

@@ -34,7 +33,7 @@
 public class MSBServiceFactory implements Serializable {

 	private static final long serialVersionUID = 4638414146278012425L;

 	private static final Logger logger = LoggerFactory.getLogger(MSBServiceFactory.class);

-    private static final String msbPropertyFile = "msb.policy.properties";

+    private static final String MSB_PROPERTY_FILE = "msb.policy.properties";

     private static final String MSB_IP = "msb.ip";

     private static final String MSB_PORT = "msb.port";

     private transient MSBServiceClient msbClient;

@@ -50,15 +49,16 @@
 

     private void init() throws MSBServiceException,IOException  {

         properties = new Properties();

-        Path file = Paths.get(System.getProperty(msbPropertyFile));

-        if (file == null) {

+        String propertyFilePath = System.getProperty(MSB_PROPERTY_FILE);

+        if (propertyFilePath == null) {

             throw new MSBServiceException("No msb.policy.properties specified.");

         }

-        if (Files.notExists(file)) {

+        Path file = Paths.get(propertyFilePath);

+        if (!file.toFile().exists()) {

             throw new MSBServiceException("No msb.policy.properties specified.");

         }

 

-        if (Files.isReadable(file) == false) {

+        if (!Files.isReadable(file)) {

             throw new MSBServiceException ("Repository is NOT readable: " + file.toAbsolutePath());

         }

         try(InputStream is = new FileInputStream(file.toFile())){

@@ -94,9 +94,7 @@
         node.setName(serviceName);

         try {

             MicroServiceFullInfo serviceInfo = msbClient.queryMicroServiceInfo(serviceName,version);

-            Iterator iterator = serviceInfo.getNodes().iterator();

-            while(iterator.hasNext()) {

-                NodeInfo nodeInfo = (NodeInfo)iterator.next();

+            for (NodeInfo nodeInfo: serviceInfo.getNodes()){

                 node.setIp(nodeInfo.getIp());

                 node.setPort(nodeInfo.getPort());

             }

diff --git a/controlloop/common/msb/src/main/java/org/onap/policy/msb/client/MSBServiceManager.java b/controlloop/common/msb/src/main/java/org/onap/policy/msb/client/MSBServiceManager.java
index cbff8d8..ccb13ec 100644
--- a/controlloop/common/msb/src/main/java/org/onap/policy/msb/client/MSBServiceManager.java
+++ b/controlloop/common/msb/src/main/java/org/onap/policy/msb/client/MSBServiceManager.java
@@ -14,14 +14,11 @@
 package org.onap.policy.msb.client;

 

 import org.onap.msb.sdk.httpclient.msb.MSBServiceClient;

-import org.slf4j.Logger;

-import org.slf4j.LoggerFactory;

 

 import java.io.IOException;

 import java.io.Serializable;

 

 public class MSBServiceManager implements Serializable {

-    private static final Logger logger = LoggerFactory.getLogger(MSBServiceManager.class);

     private static final long serialVersionUID = -2517971308551895215L;

     private MSBServiceFactory factory;

 

diff --git a/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/MSBServiceExceptionTest.java b/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/MSBServiceExceptionTest.java
new file mode 100644
index 0000000..80c453e
--- /dev/null
+++ b/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/MSBServiceExceptionTest.java
@@ -0,0 +1,30 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.msb.client;
+
+import org.junit.Test;
+import org.onap.policy.common.utils.test.ExceptionsTester;
+
+public class MSBServiceExceptionTest extends ExceptionsTester{
+	
+	@Test
+	public void test() throws Exception {
+		test(MSBServiceException.class);
+	}
+
+}
diff --git a/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/MSBServiceManagerTest.java b/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/MSBServiceManagerTest.java
index 9ab54f7..771bb49 100644
--- a/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/MSBServiceManagerTest.java
+++ b/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/MSBServiceManagerTest.java
@@ -14,6 +14,7 @@
 package org.onap.policy.msb.client;

 

 import org.junit.*;

+import org.junit.rules.ExpectedException;

 import org.mockito.Mock;

 import org.mockito.MockitoAnnotations;

 import org.onap.msb.sdk.discovery.common.RouteException;

@@ -23,11 +24,14 @@
 import org.onap.policy.msb.client.MSBServiceManager;

 import org.onap.policy.msb.client.Node;

 

+import java.io.IOException;

+import java.lang.reflect.Field;

 import java.net.InetAddress;

 import java.net.UnknownHostException;

 import java.util.HashSet;

 import java.util.Set;

 

+import static org.junit.Assert.assertEquals;

 import static org.junit.Assert.assertNotNull;

 import static org.junit.Assert.assertNull;

 import static org.junit.Assert.assertTrue;

@@ -36,6 +40,9 @@
 public class MSBServiceManagerTest {

     @Mock

     private MSBServiceClient msbClient;

+    

+    @Rule

+	public ExpectedException expectedException = ExpectedException.none();

 

     private MSBServiceManager msbManager;

 

@@ -101,6 +108,39 @@
         assertTrue(node.getIp() == null);

         assertTrue(node.getPort() == null);

     }

+    

+    @Test

+    public void testReadMsbPolicyProperites_noPropertyFileSpecifed_throwsException() throws MSBServiceException, IOException {

+  	  expectedException.expect(MSBServiceException.class);

+  	  expectedException.expectMessage("No msb.policy.properties specified.");

+  	  System.clearProperty("msb.policy.properties");

+        msbManager = new MSBServiceManager();

+    }

+    

+    @Test 

+    public void testReadMsbPolicyProperites_propertyFileDoesNotExist_throwsException() throws MSBServiceException, IOException {

+  	  expectedException.expect(MSBServiceException.class);

+  	  expectedException.expectMessage("No msb.policy.properties specified.");

+  	  System.setProperty("msb.policy.properties", "nonExistingPropertyFile.txt");

+        msbManager = new MSBServiceManager();

+        System.clearProperty("msb.policy.properties");

+    }

+    

+    @Test 

+    public void testReadMsbPolicyProperites_propertyFileExists() throws MSBServiceException, IOException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {

+  	  System.setProperty("msb.policy.properties", "src/test/resources/msbPropertyFile.properties");

+      msbManager = new MSBServiceManager();

+      System.clearProperty("msb.policy.properties");

+      

+      Field factoryField = msbManager.getClass().getDeclaredField("factory");

+      factoryField.setAccessible(true);

+      MSBServiceFactory msbServiceFactory = (MSBServiceFactory) factoryField.get(msbManager);

+      

+      Field msbClientField = msbServiceFactory.getClass().getDeclaredField("msbClient");

+      msbClientField.setAccessible(true);

+      MSBServiceClient msbClient = (MSBServiceClient) msbClientField.get(msbServiceFactory);

+      assertEquals("127.0.0.1:20", msbClient.getMsbSvrAddress());

+    }

 

     public static MicroServiceFullInfo build(String ip,String port){

         MicroServiceFullInfo serviceInfo = new MicroServiceFullInfo();

diff --git a/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/NodeTest.java b/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/NodeTest.java
new file mode 100644
index 0000000..ed1d55f
--- /dev/null
+++ b/controlloop/common/msb/src/test/java/org/onap/policy/msb/client/NodeTest.java
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. 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.msb.client;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class NodeTest {
+
+	@Test
+	public void testSetAndGetName() {
+		Node node = new Node();
+		final String name = "myName";
+		node.setName(name);
+		assertEquals(name, node.getName());
+	}
+
+	@Test
+	public void testSetAndGetIp() {
+		Node node = new Node();
+		final String ip = "127.0.0.1";
+		node.setIp(ip);
+		assertEquals(ip, node.getIp());
+	}
+
+	@Test
+	public void testSetAndGetPort() {
+		Node node = new Node();
+		final String port = "1001";
+		node.setPort(port);
+		assertEquals(port, node.getPort());
+	}
+
+	@Test
+	public void testToString() {
+		Node node = new Node();
+		final String name = "myName";
+		final String ip = "127.0.0.1";
+		final String port = "1001";
+		node.setName(name);
+		node.setIp(ip);
+		node.setPort(port);
+		assertEquals("Node{name='myName', ip='127.0.0.1', port='1001'}", node.toString());
+	}
+
+}
diff --git a/controlloop/common/msb/src/test/resources/msbPropertyFile.properties b/controlloop/common/msb/src/test/resources/msbPropertyFile.properties
new file mode 100644
index 0000000..98666e2
--- /dev/null
+++ b/controlloop/common/msb/src/test/resources/msbPropertyFile.properties
@@ -0,0 +1,2 @@
+msb.ip=127.0.0.1
+msb.port=20
\ No newline at end of file