Merge "changes in DR_PubResourceTest"
diff --git a/src/main/java/org/onap/dmaap/dbcapi/client/MrProvConnection.java b/src/main/java/org/onap/dmaap/dbcapi/client/MrProvConnection.java
index 51bad4f..6e692fa 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/client/MrProvConnection.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/client/MrProvConnection.java
@@ -36,131 +36,131 @@
 import java.util.Arrays;
 
 public class MrProvConnection extends BaseLoggingClass{
-	    
-	private String provURL;
-	
-	private HttpURLConnection uc;
+        
+    private String provURL;
+    
+    private HttpURLConnection uc;
 
-	
-	private String topicMgrCred;
-	private boolean useAAF;
-	private	String	user;
-	private	String	encPwd;
-	
-	public MrProvConnection() {
-		String mechIdProperty = "aaf.TopicMgrUser";
-		String pwdProperty = "aaf.TopicMgrPassword";
-		DmaapConfig p = (DmaapConfig)DmaapConfig.getConfig();
-		user = p.getProperty( mechIdProperty, "noMechId@domain.netset.com" );
-		encPwd = p.getProperty( pwdProperty, "notSet" );
-		useAAF= "true".equalsIgnoreCase(p.getProperty("UseAAF", "false"));
-		topicMgrCred =  getCred();
-		
-	}
-	
-	private String getCred( ) {
+    
+    private String topicMgrCred;
+    private boolean useAAF;
+    private    String    user;
+    private    String    encPwd;
+    
+    public MrProvConnection() {
+        String mechIdProperty = "aaf.TopicMgrUser";
+        String pwdProperty = "aaf.TopicMgrPassword";
+        DmaapConfig p = (DmaapConfig)DmaapConfig.getConfig();
+        user = p.getProperty( mechIdProperty, "noMechId@domain.netset.com" );
+        encPwd = p.getProperty( pwdProperty, "notSet" );
+        useAAF= "true".equalsIgnoreCase(p.getProperty("UseAAF", "false"));
+        topicMgrCred =  getCred();
+        
+    }
+    
+    private String getCred( ) {
 
 
-		String pwd = "";
-		AafDecrypt decryptor = new AafDecrypt();	
-		pwd = decryptor.decrypt(encPwd);
-		return user + ":" + pwd;	
-	}
-	
-	
-	public boolean makeTopicConnection( MR_Cluster cluster ) {
-		logger.info( "connect to cluster: " + cluster.getDcaeLocationName());
-	
+        String pwd = "";
+        AafDecrypt decryptor = new AafDecrypt();    
+        pwd = decryptor.decrypt(encPwd);
+        return user + ":" + pwd;    
+    }
+    
+    
+    public boolean makeTopicConnection( MR_Cluster cluster ) {
+        logger.info( "connect to cluster: " + cluster.getDcaeLocationName());
+    
 
-		provURL = cluster.getTopicProtocol() + "://" + cluster.getFqdn() + ":" + cluster.getTopicPort() + "/topics/create";
+        provURL = cluster.getTopicProtocol() + "://" + cluster.getFqdn() + ":" + cluster.getTopicPort() + "/topics/create";
 
-		if ( cluster.getTopicProtocol().equals( "https" ) ) {
-			return makeSecureConnection( provURL );
-		}
-		return makeConnection( provURL );
-	}
+        if ( cluster.getTopicProtocol().equals( "https" ) ) {
+            return makeSecureConnection( provURL );
+        }
+        return makeConnection( provURL );
+    }
 
-	private boolean makeSecureConnection( String pURL ) {
-		logger.info( "makeConnection to " + pURL );
-	
-		try {
-			URL u = new URL( pURL );
-			uc = (HttpsURLConnection) u.openConnection();
-			uc.setInstanceFollowRedirects(false);
-			logger.info( "open connect to " + pURL );
-			return(true);
-		} catch( UnknownHostException uhe ){
-        	logger.error( "Caught UnknownHostException for " + pURL);
-        	return(false);
+    private boolean makeSecureConnection( String pURL ) {
+        logger.info( "makeConnection to " + pURL );
+    
+        try {
+            URL u = new URL( pURL );
+            uc = (HttpsURLConnection) u.openConnection();
+            uc.setInstanceFollowRedirects(false);
+            logger.info( "open connect to " + pURL );
+            return(true);
+        } catch( UnknownHostException uhe ){
+            logger.error( "Caught UnknownHostException for " + pURL);
+            return(false);
         } catch (Exception e) {
             logger.error("Unexpected error during openConnection of " + pURL );
-            e.printStackTrace();
+            logger.error("Unexpected error during openConnection of ",e );
             return(false);
         } 
 
-	}
-	private boolean makeConnection( String pURL ) {
-		logger.info( "makeConnection to " + pURL );
-	
-		try {
-			URL u = new URL( pURL );
-			uc = (HttpURLConnection) u.openConnection();
-			uc.setInstanceFollowRedirects(false);
-			logger.info( "open connect to " + pURL );
-			return(true);
-		} catch( UnknownHostException uhe ){
-        	logger.error( "Caught UnknownHostException for " + pURL);
-        	return(false);
+    }
+    private boolean makeConnection( String pURL ) {
+        logger.info( "makeConnection to " + pURL );
+    
+        try {
+            URL u = new URL( pURL );
+            uc = (HttpURLConnection) u.openConnection();
+            uc.setInstanceFollowRedirects(false);
+            logger.info( "open connect to " + pURL );
+            return(true);
+        } catch( UnknownHostException uhe ){
+            logger.error( "Caught UnknownHostException for " + pURL);
+            return(false);
         } catch (Exception e) {
             logger.error("Unexpected error during openConnection of " + pURL );
-            e.printStackTrace();
+            logger.error("Unexpected error during openConnection of ",e );
             return(false);
         } 
 
-	}
-	
-	static String bodyToString( InputStream is ) {
-		StringBuilder sb = new StringBuilder();
-		BufferedReader br = new BufferedReader( new InputStreamReader(is));
-		String line;
-		try {
-			while ((line = br.readLine()) != null ) {
-				sb.append( line );
-			}
-		} catch (IOException ex ) {
-			errorLogger.error( "IOexception:" + ex);
-		}
-			
-		return sb.toString();
-	}
-	
-	public String doPostTopic( Topic postTopic, ApiError err ) {
-		String auth =  "Basic " + Base64.encodeBase64String(topicMgrCred.getBytes());
+    }
+    
+    static String bodyToString( InputStream is ) {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader br = new BufferedReader( new InputStreamReader(is));
+        String line;
+        try {
+            while ((line = br.readLine()) != null ) {
+                sb.append( line );
+            }
+        } catch (IOException ex ) {
+            errorLogger.error( "IOexception:" + ex);
+        }
+            
+        return sb.toString();
+    }
+    
+    public String doPostTopic( Topic postTopic, ApiError err ) {
+        String auth =  "Basic " + Base64.encodeBase64String(topicMgrCred.getBytes());
 
 
-		String responsemessage = null;
-		int rc = -1;
+        String responsemessage = null;
+        int rc = -1;
 
 
-		try {
-			byte[] postData = postTopic.getBytes();
-			logger.info( "post fields=" + Arrays.toString(postData));
-			
-			// when not using AAF, do not attempt Basic Authentication
-			if ( useAAF ) {
-				uc.setRequestProperty("Authorization", auth);
-				logger.info( "Authenticating with " + auth );
-			}
-			uc.setRequestMethod("POST");
-			uc.setRequestProperty("Content-Type", "application/json");
-			uc.setRequestProperty( "charset", "utf-8");
-			uc.setRequestProperty( "Content-Length", Integer.toString( postData.length ));
-			uc.setUseCaches(false);
-			uc.setDoOutput(true);
-			OutputStream os = null;
+        try {
+            byte[] postData = postTopic.getBytes();
+            logger.info( "post fields=" + Arrays.toString(postData));
+            
+            // when not using AAF, do not attempt Basic Authentication
+            if ( useAAF ) {
+                uc.setRequestProperty("Authorization", auth);
+                logger.info( "Authenticating with " + auth );
+            }
+            uc.setRequestMethod("POST");
+            uc.setRequestProperty("Content-Type", "application/json");
+            uc.setRequestProperty( "charset", "utf-8");
+            uc.setRequestProperty( "Content-Length", Integer.toString( postData.length ));
+            uc.setUseCaches(false);
+            uc.setDoOutput(true);
+            OutputStream os = null;
 
-			
-			try {
+            
+            try {
                  uc.connect();
                  os = uc.getOutputStream();
                  os.write( postData );
@@ -174,21 +174,21 @@
                  } catch (Exception e) {
                  }
             } catch ( UnknownHostException uhe ) {
-            	errorLogger.error( DmaapbcLogMessageEnum.UNKNOWN_HOST_EXCEPTION , "Unknown Host Exception" , provURL );
-            	err.setCode(500);
-            	err.setMessage("Unknown Host Exception");
-            	err.setFields( uc.getURL().getHost());
-            	return new String( "500: " + uhe.getMessage());
+                errorLogger.error( DmaapbcLogMessageEnum.UNKNOWN_HOST_EXCEPTION , "Unknown Host Exception" , provURL );
+                err.setCode(500);
+                err.setMessage("Unknown Host Exception");
+                err.setFields( uc.getURL().getHost());
+                return new String( "500: " + uhe.getMessage());
             }catch ( ConnectException ce ) {
-            	errorLogger.error( DmaapbcLogMessageEnum.HTTP_CONNECTION_EXCEPTION, provURL, "HTTP Connection Exception"  );
-            	err.setCode(500);
-            	err.setMessage("HTTP Connection Exception");
-            	err.setFields( uc.getURL().getHost());
-            	return new String( "500: " + ce.getMessage());
+                errorLogger.error( DmaapbcLogMessageEnum.HTTP_CONNECTION_EXCEPTION, provURL, "HTTP Connection Exception"  );
+                err.setCode(500);
+                err.setMessage("HTTP Connection Exception");
+                err.setFields( uc.getURL().getHost());
+                return new String( "500: " + ce.getMessage());
             }
-			rc = uc.getResponseCode();
-			logger.info( "http response code:" + rc );
-			err.setCode(rc);
+            rc = uc.getResponseCode();
+            logger.info( "http response code:" + rc );
+            err.setCode(rc);
             responsemessage = uc.getResponseMessage();
             logger.info( "responsemessage=" + responsemessage );
             err.setMessage(responsemessage);
@@ -207,29 +207,29 @@
                  }
             }
             if (rc >= 200 && rc < 300 ) {
-        		String responseBody = null;
-     			responseBody = bodyToString( uc.getInputStream() );
-    			logger.info( "responseBody=" + responseBody );
-    			return responseBody;
+                String responseBody = null;
+                 responseBody = bodyToString( uc.getInputStream() );
+                logger.info( "responseBody=" + responseBody );
+                return responseBody;
 
             } 
             
-		} catch (Exception e) {
-			errorLogger.error("Unable to read response  " );
+        } catch (Exception e) {
+            errorLogger.error("Unable to read response  " );
            
         }
-		finally {
-			try {
-				uc.disconnect();
-			} catch ( Exception e ) {
-				errorLogger.error("Unable to disconnect");
-			}
-		}
-		return new String( rc +": " + responsemessage );
+        finally {
+            try {
+                uc.disconnect();
+            } catch ( Exception e ) {
+                errorLogger.error("Unable to disconnect");
+            }
+        }
+        return new String( rc +": " + responsemessage );
 
-	}
-	
+    }
+    
 
 
-		
+        
 }
diff --git a/src/main/java/org/onap/dmaap/dbcapi/server/Main.java b/src/main/java/org/onap/dmaap/dbcapi/server/Main.java
index d8ee278..906337a 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/server/Main.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/server/Main.java
@@ -62,7 +62,7 @@
             MDC.put(MDC_SERVER_FQDN, InetAddress.getLocalHost().getHostName());
             MDC.put(MDC_SERVER_IP_ADDRESS, InetAddress.getLocalHost().getHostAddress());
         } catch (Exception e) {
-            e.printStackTrace();
+        	errorLogger.error("Error while getting hostname or address", e);
         }
         MDC.put(MDC_INSTANCE_UUID, UUID.randomUUID().toString());
         MDC.put(MDC_ALERT_SEVERITY, "0");
diff --git a/src/test/java/org/onap/dmaap/dbcapi/database/DBFieldHandlerTest.java b/src/test/java/org/onap/dmaap/dbcapi/database/DBFieldHandlerTest.java
index c1e9c35..5171aaa 100644
--- a/src/test/java/org/onap/dmaap/dbcapi/database/DBFieldHandlerTest.java
+++ b/src/test/java/org/onap/dmaap/dbcapi/database/DBFieldHandlerTest.java
@@ -1,10 +1,11 @@
-
 /*-
  * ============LICENSE_START=======================================================
  * org.onap.dmaap
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 IBM
+ * ===================================================================
  * 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
@@ -18,32 +19,36 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.dmaap.dbcapi.database;
 
-import org.onap.dmaap.dbcapi.database.DBFieldHandler;
-import org.onap.dmaap.dbcapi.model.*;
-import org.onap.dmaap.dbcapi.testframework.ReflectionHarness;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
-import static org.junit.Assert.*;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
 
-import org.junit.After;
-import org.junit.Before;
+import org.apache.log4j.Logger;
 import org.junit.Test;
-import java.util.*;
-import java.sql.*;
+import org.onap.dmaap.dbcapi.authentication.AafLurAndFish;
+import org.onap.dmaap.dbcapi.model.ReplicationType;
+import org.onap.dmaap.dbcapi.testframework.ReflectionHarness;
 
 public class DBFieldHandlerTest {
 
-	private static final String  fmt = "%24s: %s%n";
+    private static final Logger logger = Logger.getLogger(AafLurAndFish.class);
 
-	ReflectionHarness rh = new ReflectionHarness();
+    private static final String fmt = "%24s: %s%n";
 
-   private static class TopicReplicationTypeHandler implements DBFieldHandler.SqlOp {
+    ReflectionHarness rh = new ReflectionHarness();
+
+    private static class TopicReplicationTypeHandler implements DBFieldHandler.SqlOp {
         public Object get(ResultSet rs, int index) throws Exception {
             int val = rs.getInt(index);
 
             return (ReplicationType.valueOf(val));
         }
+
         public void set(PreparedStatement ps, int index, Object val) throws Exception {
             if (val == null) {
                 ps.setInt(index, 0);
@@ -55,53 +60,55 @@
         }
     }
 
+    @Test
+    public void test1() {
+        // rh.reflect( "org.onap.dmaap.dbcapi.aaf.client.MrTopicConnection", "get",
+        // "idNotSet@namespaceNotSet:pwdNotSet" );
+    }
 
+    @Test
+    public void test2() {
+        String v = "Validate";
+        // rh.reflect( "org.onap.dmaap.dbcapi.aaf.client.MrTopicConnection", "set", v );
+    }
 
-	@Before
-	public void setUp() throws Exception {
-	}
+    @Test
+    public void test3() {
+        try {
+            DBFieldHandler fh = new DBFieldHandler(String.class, "aString", 1);
+        } catch (Exception e) {
+            logger.error("Error", e);
+        }
+    }
 
-	@After
-	public void tearDown() throws Exception {
-	}
+    @Test
+    public void test4() {
+        try {
+            DBFieldHandler fh = new DBFieldHandler(String.class, "aString", 1, null);
+        } catch (Exception e) {
+            logger.error("Error", e);
+        }
+    }
 
+    @Test
+    public void testfesc() {
+        String sampleString = "@xyz,ww;,";
+        String finalString = DBFieldHandler.fesc(sampleString);
+        assertEquals("@axyz@cww@s@c", finalString);
+    }
 
-	@Test
-	public void test1() {
+    @Test
+    public void testfunesc() {
+        String sampleString = "@axyz@cww@s@c";
+        String convertedString = DBFieldHandler.funesc(sampleString);
+        assertEquals("@xyz,ww;,", convertedString);
+    }
 
-
-		//rh.reflect( "org.onap.dmaap.dbcapi.aaf.client.MrTopicConnection", "get", "idNotSet@namespaceNotSet:pwdNotSet" );	
-	
-	}
-
-	@Test
-	public void test2() {
-		String v = "Validate";
-		//rh.reflect( "org.onap.dmaap.dbcapi.aaf.client.MrTopicConnection", "set", v );
-
-	}
-
-	@Test
-	public void test3() {
-
-		try {
-			DBFieldHandler fh = new DBFieldHandler( String.class, "aString", 1 );
-		} catch (Exception e ) {
-		}
-
-	}
-
-	@Test
-	public void test4() {
-
-		try {
-			DBFieldHandler fh = new DBFieldHandler( String.class, "aString", 1, null );
-		} catch (Exception e ) {
-		}
-
-	}
-
-
-
+    @Test
+    public void testfescWithNull() {
+        String sampleString1 = DBFieldHandler.fesc(null);
+        String sampleString2 = DBFieldHandler.funesc(null);
+        assertNull(null, sampleString1);
+        assertNull(null, sampleString2);
+    }
 }
-
diff --git a/src/test/java/org/onap/dmaap/dbcapi/model/TopicTest.java b/src/test/java/org/onap/dmaap/dbcapi/model/TopicTest.java
index 5180b99..5da3aed 100644
--- a/src/test/java/org/onap/dmaap/dbcapi/model/TopicTest.java
+++ b/src/test/java/org/onap/dmaap/dbcapi/model/TopicTest.java
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 IBM
+ * ================================================================================
  * 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
@@ -19,62 +21,67 @@
  */
 package org.onap.dmaap.dbcapi.model;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.onap.dmaap.dbcapi.model.DmaapObject.DmaapObject_Status;
 import org.onap.dmaap.dbcapi.testframework.ReflectionHarness;
 
-
 public class TopicTest {
 
-	private static final String  fmt = "%24s: %s%n";
+    ReflectionHarness rh = new ReflectionHarness();
 
-	ReflectionHarness rh = new ReflectionHarness();
+    String f, t, d, e, o;
 
-	String f, t, d, e, o;
+    @Before
+    public void setUp() throws Exception {
+        f = "org.onap.dmaap.interestingTopic";
+        t = "interestingTopic";
+        d = "A so very interesting topic";
+        e = "Yes";
+        o = "m12345";
+    }
 
-	@Before
-	public void setUp() throws Exception {
-		f = "org.onap.dmaap.interestingTopic";
-		t = "interestingTopic";
-		d = "A so very interesting topic";
-		e = "Yes";
-		o = "m12345";
-	}
+    @After
+    public void tearDown() throws Exception {
+    }
 
-	@After
-	public void tearDown() throws Exception {
-	}
+    @Test
+    public void test1() {
+        rh.reflect("org.onap.dmaap.dbcapi.model.Topic", "get", null);
+    }
 
+    @Test
+    public void test2() {
+        Topic obj = new Topic(f, t, d, e, o);
+        assertTrue(f.equals(obj.getFqtn()));
+        assertTrue(t.equals(obj.getTopicName()));
+        assertTrue(d.equals(obj.getTopicDescription()));
+        assertTrue(e.equals(obj.getTnxEnabled()));
+        assertTrue(o.equals(obj.getOwner()));
+    }
 
-	@Test
-	public void test1() {
+    @Test
+    public void test3() {
+        String v = "Validate";
+        rh.reflect("org.onap.dmaap.dbcapi.model.Topic", "set", v);
+    }
 
+    @Test
+    public void getNumClientsHavingMRClientListNull() {
+        Topic obj = new Topic(f, t, d, e, o);
+        obj.setClients(null);
+        assertEquals(0, obj.getNumClients());
+    }
 
-		rh.reflect( "org.onap.dmaap.dbcapi.model.Topic", "get", null );	
-	
-	}
-
-	@Test
-	public void test2() {
-		String[] a = { "put", "view" };
-		Topic obj = new Topic( f, t, d, e, o );
-
-
-		assertTrue( f.equals( obj.getFqtn() ));
-		assertTrue( t.equals( obj.getTopicName() ));
-		assertTrue( d.equals( obj.getTopicDescription() ));
-		assertTrue( e.equals( obj.getTnxEnabled() ));
-		assertTrue( o.equals( obj.getOwner() ));
-	}
-
-	@Test
-	public void test3() {
-
-		String v = "Validate";
-		rh.reflect( "org.onap.dmaap.dbcapi.model.Topic", "set", v );
-	}
+    @Test
+    public void testTopicInitializationWithInvalidJsonString() {
+        String json = "{\"key\":\"value\"";
+        Topic obj = new Topic(json);
+        assertEquals(DmaapObject_Status.INVALID, obj.getStatus());
+    }
 
 }
diff --git a/src/test/java/org/onap/dmaap/dbcapi/resources/RequiredFieldExceptionTest.java b/src/test/java/org/onap/dmaap/dbcapi/resources/RequiredFieldExceptionTest.java
new file mode 100644
index 0000000..d3dcc42
--- /dev/null
+++ b/src/test/java/org/onap/dmaap/dbcapi/resources/RequiredFieldExceptionTest.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * org.onap.dmaap
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright (c) 2019 IBM
+ * ===================================================================
+ * 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.dmaap.dbcapi.resources;
+
+import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.dmaap.dbcapi.model.ApiError;
+
+public class RequiredFieldExceptionTest {
+    ApiError apiError;
+    RequiredFieldException requiredFieldException;
+    String expectedValue;
+
+    @Before
+    public void setUp() {
+        apiError = new ApiError(BAD_REQUEST.getStatusCode(), "value 'with white space' violates regexp check '^\\S+$'",
+                "field_name");
+
+        expectedValue = "RequiredFieldException{" + "apiError=" + apiError + '}';
+
+        requiredFieldException = new RequiredFieldException(apiError);
+    }
+
+    @Test
+    public void testRequiredFieldExceptionToString() {
+        assertEquals(expectedValue, requiredFieldException.toString());
+    }
+}