Merge "Provision MM at target MR"
authorvarun gudisena <varuneshwar.gudisena@att.com>
Tue, 9 Apr 2019 20:00:41 +0000 (20:00 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 9 Apr 2019 20:00:41 +0000 (20:00 +0000)
src/main/java/org/onap/dmaap/dbcapi/client/MrProvConnection.java
src/main/java/org/onap/dmaap/dbcapi/model/DR_Pub.java
src/main/java/org/onap/dmaap/dbcapi/resources/DR_PubResource.java
src/main/java/org/onap/dmaap/dbcapi/server/Main.java
src/test/java/org/onap/dmaap/dbcapi/database/DBFieldHandlerTest.java
src/test/java/org/onap/dmaap/dbcapi/model/TopicTest.java
src/test/java/org/onap/dmaap/dbcapi/resources/DR_PubResourceTest.java
src/test/java/org/onap/dmaap/dbcapi/resources/DR_SubResourceTest.java
src/test/java/org/onap/dmaap/dbcapi/resources/RequiredFieldExceptionTest.java [new file with mode: 0644]
src/test/java/org/onap/dmaap/dbcapi/resources/TestFeedCreator.java [new file with mode: 0644]

index 51bad4f..6e692fa 100644 (file)
@@ -36,131 +36,131 @@ import java.net.*;
 import java.util.Arrays;
 
 public class MrProvConnection extends BaseLoggingClass{
-           
-       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( ) {
-
-
-               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";
-
-               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 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( ) {
+
+
+        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";
+
+        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);
         } 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());
-
-
-               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 {
+    }
+    
+    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;
+
+
+        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 {
                  uc.connect();
                  os = uc.getOutputStream();
                  os.write( postData );
@@ -174,21 +174,21 @@ public class MrProvConnection extends BaseLoggingClass{
                  } 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 @@ public class MrProvConnection extends BaseLoggingClass{
                  }
             }
             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 );
 
-       }
-       
+    }
+    
 
 
-               
+        
 }
index 0d146b7..4e64089 100644 (file)
@@ -24,6 +24,8 @@ import javax.xml.bind.annotation.XmlRootElement;
 
 import org.onap.dmaap.dbcapi.util.RandomString;
 
+import java.util.Objects;
+
 @XmlRootElement
 public class DR_Pub extends DmaapObject {
 
@@ -151,5 +153,35 @@ public class DR_Pub extends DmaapObject {
                return ri.nextString();
                
        }
-       
+
+       @Override
+       public boolean equals(Object o) {
+               if (this == o) return true;
+               if (o == null || getClass() != o.getClass()) return false;
+               DR_Pub dr_pub = (DR_Pub) o;
+               return Objects.equals(dcaeLocationName, dr_pub.dcaeLocationName) &&
+                               Objects.equals(username, dr_pub.username) &&
+                               Objects.equals(userpwd, dr_pub.userpwd) &&
+                               Objects.equals(feedId, dr_pub.feedId) &&
+                               Objects.equals(pubId, dr_pub.pubId);
+       }
+
+       @Override
+       public int hashCode() {
+
+               return Objects.hash(dcaeLocationName, username, userpwd, feedId, pubId);
+       }
+
+       @Override
+       public String toString() {
+               return "DR_Pub{" +
+                               "dcaeLocationName='" + dcaeLocationName + '\'' +
+                               ", username='" + username + '\'' +
+                               ", userpwd='" + userpwd + '\'' +
+                               ", feedId='" + feedId + '\'' +
+                               ", pubId='" + pubId + '\'' +
+                               ", feedName='" + feedName + '\'' +
+                               ", feedVersion='" + feedVersion + '\'' +
+                               '}';
+       }
 }
index 928a7e2..6e652a8 100644 (file)
@@ -104,8 +104,9 @@ public class DR_PubResource extends BaseLoggingClass {
                        }
                        // if we found a FeedName instead of a FeedId then try to look it up.
                        List<Feed> nfeeds =  feeds.getAllFeeds( pub.getFeedName(), pub.getFeedVersion(), "equals");
-                       if ( nfeeds.size() != 1 ) {
-                               logger.debug( "Attempt to match "+ pub.getFeedName() + " ver="+pub.getFeedVersion() + " matched " + nfeeds.size() );
+                       if ( nfeeds.isEmpty() ) {
+                               apiError.setCode(Status.NOT_FOUND.getStatusCode());
+                               apiError.setFields("feedName");
                                return responseBuilder.error(apiError);
                        }
                        fnew = nfeeds.get(0);
index d8ee278..906337a 100644 (file)
@@ -62,7 +62,7 @@ public class Main extends BaseLoggingClass {
             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");
index c1e9c35..5171aaa 100644 (file)
@@ -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
  * 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 @@ public class DBFieldHandlerTest {
         }
     }
 
+    @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 {
-       }
-
-       @After
-       public void tearDown() throws Exception {
-       }
-
-
-       @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 );
-
-       }
-
-       @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 test3() {
+        try {
+            DBFieldHandler fh = new DBFieldHandler(String.class, "aString", 1);
+        } catch (Exception e) {
+            logger.error("Error", e);
+        }
+    }
 
-       }
+    @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 testfunesc() {
+        String sampleString = "@axyz@cww@s@c";
+        String convertedString = DBFieldHandler.funesc(sampleString);
+        assertEquals("@xyz,ww;,", convertedString);
+    }
 
+    @Test
+    public void testfescWithNull() {
+        String sampleString1 = DBFieldHandler.fesc(null);
+        String sampleString2 = DBFieldHandler.funesc(null);
+        assertNull(null, sampleString1);
+        assertNull(null, sampleString2);
+    }
 }
-
index 5180b99..5da3aed 100644 (file)
@@ -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
  */
 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();
-
-       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";
-       }
-
-       @After
-       public void tearDown() throws Exception {
-       }
-
-
-       @Test
-       public void test1() {
-
-
-               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 );
-       }
+    ReflectionHarness rh = new ReflectionHarness();
+
+    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";
+    }
+
+    @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 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());
+    }
+
+    @Test
+    public void testTopicInitializationWithInvalidJsonString() {
+        String json = "{\"key\":\"value\"";
+        Topic obj = new Topic(json);
+        assertEquals(DmaapObject_Status.INVALID, obj.getStatus());
+    }
 
 }
index d4f71bb..bf03088 100644 (file)
@@ -8,9 +8,9 @@
  * 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.
  * ============LICENSE_END=========================================================
  */
 package org.onap.dmaap.dbcapi.resources;
-import org.onap.dmaap.dbcapi.model.*;
-import org.onap.dmaap.dbcapi.service.*;
-import static org.junit.Assert.*;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import java.util.*;
-import java.sql.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
-import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.server.ResourceConfig;
 import javax.ws.rs.client.Entity;
-import javax.ws.rs.core.Application;
-import javax.ws.rs.core.Response;
 import javax.ws.rs.core.MediaType;
-import javax.ws.rs.Path;
-import javax.ws.rs.GET;
-
-public class DR_PubResourceTest extends JerseyTest{
-
-       @Override
-       protected Application configure() {
-               return new ResourceConfig()
-                               .register( DR_PubResource.class )
-                               .register( FeedResource.class );
-       }
-
-       private static final String  fmt = "%24s: %s%n";
-       String d, un, up, f, p;
-/*
-       @Before
-       public void setUp() throws Exception {
-               d = "central-onap";
-               un = "user1";
-               up = "secretW0rd";
-               f = "234";
-               p = "678";
-       }
-
-       @After
-       public void tearDown() throws Exception {
-       }
-*/
-
-
-
-/*  may conflict with test framework! 
-       @Before
-       public void setUp() throws Exception {
-       }
-
-       @After
-       public void tearDown() throws Exception {
-       }
-*/
-
-       private Feed addFeed( String name, String desc ) {
-               Feed feed = new Feed( name, "1.0", desc, "dgl", "unrestricted" );
-               Entity<Feed> reqEntity = Entity.entity( feed, MediaType.APPLICATION_JSON );
-               Response resp = target( "feeds").request().post( reqEntity, Response.class );
-               int rc = resp.getStatus();
-               System.out.println( "POST feed resp=" + rc );
-               assertTrue( rc == 200 || rc == 409 );
-               feed = resp.readEntity( Feed.class );
-               return feed;
-       }
-       
-       private DR_Pub addPub( String d, String un, String up, String feedId ) {
-               DR_Pub dr_pub = new DR_Pub( d, un, up, feedId, "" );
-               Entity<DR_Pub> reqEntity2 = Entity.entity( dr_pub, MediaType.APPLICATION_JSON);
-               Response resp = target( "dr_pubs").request().post( reqEntity2, Response.class);
-               System.out.println( "POST dr_pubs resp=" + resp.getStatus() );
-               assertTrue( resp.getStatus() == 201 );
-               dr_pub = resp.readEntity( DR_Pub.class );
-               
-               return dr_pub;
-       }
-       
-       private DR_Pub addPubByName( String d, String un, String up, String feedName) {
-               DR_Pub dr_pub = new DR_Pub( d, un, up, null, "" );
-               dr_pub.setFeedName(feedName);
-               Entity<DR_Pub> reqEntity2 = Entity.entity( dr_pub, MediaType.APPLICATION_JSON);
-               Response resp = target( "dr_pubs").request().post( reqEntity2, Response.class);
-               System.out.println( "POST dr_pubs resp=" + resp.getStatus() );
-               assertTrue( resp.getStatus() == 201 );
-               dr_pub = resp.readEntity( DR_Pub.class );
-               
-               return dr_pub;
-       }
-       
-       @Test
-       public void GetTest() {
-               Response resp = target( "dr_pubs").request().get( Response.class );
-               System.out.println( "GET dr_pubs resp=" + resp.getStatus() );
-
-               assertTrue( resp.getStatus() == 200 );
-       }
-       
-       @Test
-       public void PostTest() {
-
-               Feed feed = addFeed( "pubPostTest", "post unit test" );
-               System.out.println( "fpubPostTest: feedId=" + feed.getFeedId());
-               
-               String d, un, up;
-               d = "central-onap";
-               un = "user1";
-               up = "secretW0rd";
-
-               DR_Pub dr_pub = addPub( d, un, up, feed.getFeedId() );
-       }
-       
-       @Test
-       public void PostTestByName() {
-
-               Feed feed = addFeed( "pubPostTest2", "post unit test" );
-               System.out.println( "fpubPostTest: feedId=" + feed.getFeedId());
-               
-               String d, un, up;
-               d = "central-onap";
-               un = "user1";
-               up = "secretW0rd";
-
-               DR_Pub dr_pub = addPubByName( d, un, up, "pubPostTest2" );      
-       }
-
-       @Test
-       public void PutTest() {
-
-               Feed feed = addFeed( "pubPutTest", "put unit test");
-               String d, un, up;
-               d = "central-onap";
-               un = "user1";
-               up = "secretW0rd";
-
-               DR_Pub dr_pub = addPub( d, un, up, feed.getFeedId() );
-               
-               dr_pub.setUserpwd("newSecret");
-               Entity<DR_Pub> reqEntity2 = Entity.entity( dr_pub, MediaType.APPLICATION_JSON);
-               Response resp = target( "dr_pubs")
-                               .path( dr_pub.getPubId() )
-                               .request()
-                               .put( reqEntity2, Response.class);
-               System.out.println( "PUT dr_pubs resp=" + resp.getStatus() );
-               assertTrue( resp.getStatus() == 200 );
-       }
-               
+import javax.ws.rs.core.Response;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.dmaap.dbcapi.database.DatabaseClass;
+import org.onap.dmaap.dbcapi.model.ApiError;
+import org.onap.dmaap.dbcapi.model.DR_Pub;
+import org.onap.dmaap.dbcapi.model.Feed;
+import org.onap.dmaap.dbcapi.testframework.DmaapObjectFactory;
+
+public class DR_PubResourceTest {
+
+    private static final DmaapObjectFactory DMAAP_OBJECT_FACTORY = new DmaapObjectFactory();
+
+    private static final String DCAE_LOCATION_NAME = "central-onap";
+    private static final String USERNAME = "user1";
+    private static final String USRPWD = "secretW0rd";
+    private static final String FEED_ID = "someFakeFeedId";
+    private static final String PUB_ID = "0";
+    private static FastJerseyTestContainer testContainer;
+    private static TestFeedCreator testFeedCreator;
+
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+        //TODO: init is still needed here to assure that dmaap is not null
+        DatabaseClass.getDmaap().init(DMAAP_OBJECT_FACTORY.genDmaap());
+
+        testContainer = new FastJerseyTestContainer(new ResourceConfig()
+            .register(DR_PubResource.class)
+            .register(FeedResource.class));
+
+        testContainer.init();
+        testFeedCreator = new TestFeedCreator(testContainer);
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+        testContainer.destroy();
+        /*TODO: Cannot cleanup yet until still other Resources tests depends on the static DB content
+
+        DatabaseClass.clearDatabase();
+        DatabaseClass.getDmaap().remove();*/
+    }
+
+    @Before
+    public void cleanupDatabase() {
+        DatabaseClass.clearDatabase();
+    }
+
+    @Test
+    public void getDr_Pub_test() {
+        Response resp = testContainer.target("dr_pubs").request().get(Response.class);
+        assertTrue(resp.getStatus() == 200);
+        assertTrue(resp.hasEntity());
+    }
+
+    @Test
+    public void addDr_Pub_shallReturnError_whenNoFeedIdAndFeedNameInPubProvided() {
+        //given
+        DR_Pub drPub = new DR_Pub(DCAE_LOCATION_NAME, USERNAME, USRPWD, null, PUB_ID);
+        Entity<DR_Pub> requestedEntity = Entity.entity(drPub, MediaType.APPLICATION_JSON);
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+            .request()
+            .post(requestedEntity, Response.class);
+
+        //then
+        assertEquals(400, resp.getStatus());
+        ApiError responseError = resp.readEntity(ApiError.class);
+        assertNotNull(responseError);
+        assertEquals("feedName", responseError.getFields());
+    }
+
+    @Test
+    public void addDr_Pub_shallReturnError_whenFeedNameProvided_butFeedNotExist() {
+        //given
+        DR_Pub drPub = new DR_Pub(DCAE_LOCATION_NAME, USERNAME, USRPWD, null, PUB_ID);
+        Entity<DR_Pub> requestedEntity = Entity.entity(drPub, MediaType.APPLICATION_JSON);
+        drPub.setFeedName("feed_name");
+
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+            .request()
+            .post(requestedEntity, Response.class);
+
+        //then
+        assertEquals(404, resp.getStatus());
+        ApiError responseError = resp.readEntity(ApiError.class);
+        assertNotNull(responseError);
+        assertEquals("feedName", responseError.getFields());
+
+    }
+
+    @Test
+    public void addDr_Pub_shallReturnError_whenFeedIdProvided_butFeedNotExist() {
+        //given
+        DR_Pub drPub = new DR_Pub(DCAE_LOCATION_NAME, USERNAME, USRPWD, FEED_ID, PUB_ID);
+        Entity<DR_Pub> requestedEntity = Entity.entity(drPub, MediaType.APPLICATION_JSON);
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+            .request()
+            .post(requestedEntity, Response.class);
+
+        //then
+        assertEquals(404, resp.getStatus());
+        ApiError responseError = resp.readEntity(ApiError.class);
+        assertNotNull(responseError);
+        assertEquals("feedId=" + FEED_ID, responseError.getFields());
+    }
+
+    @Test
+    public void addDr_Pub_shallExecuteSuccessfully_whenValidFeedIdProvided() {
+        //given
+        String feedId = assureFeedIsInDB();
+        DR_Pub drPub = new DR_Pub(DCAE_LOCATION_NAME, USERNAME, USRPWD, feedId);
+        Entity<DR_Pub> requestedEntity = Entity.entity(drPub, MediaType.APPLICATION_JSON);
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+            .request()
+            .post(requestedEntity, Response.class);
+
+        //then
+        assertEquals(201, resp.getStatus());
+    }
+
+    @Test
+    public void addDr_Pub_shallExecuteSuccessfully_whenValidFeedNameProvided() {
+        //given
+        String feedName = "testFeed";
+        testFeedCreator.addFeed(feedName, "test feed");
+        DR_Pub drPub = new DR_Pub(DCAE_LOCATION_NAME, USERNAME, USRPWD, null, PUB_ID);
+        drPub.setFeedName(feedName);
+        Entity<DR_Pub> requestedEntity = Entity.entity(drPub, MediaType.APPLICATION_JSON);
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+            .request()
+            .post(requestedEntity, Response.class);
+
+        //then
+        assertEquals(201, resp.getStatus());
+    }
+
+    @Test
+    public void updateDr_Pub_shallExecuteSuccessfully_whenAddingNewPublisher() {
+        //given
+        String pubId = "5";
+        DR_Pub drPub = new DR_Pub(DCAE_LOCATION_NAME, USERNAME, USRPWD, "feedId", PUB_ID);
+        Entity<DR_Pub> reqEntity2 = Entity.entity(drPub, MediaType.APPLICATION_JSON);
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+            .path(pubId)
+            .request()
+            .put(reqEntity2, Response.class);
+
+        //then
+        assertEquals(200, resp.getStatus());
+
+    }
+
+    @Test
+    public void updateDr_Pub_shallReturnError_whenPathIsWrong() {
+        //given
+        DR_Pub drPub = new DR_Pub(DCAE_LOCATION_NAME, USERNAME, USRPWD, FEED_ID, PUB_ID);
+        Entity<DR_Pub> reqEntity2 = Entity.entity(drPub, MediaType.APPLICATION_JSON);
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+            .path("")
+            .request()
+            .put(reqEntity2, Response.class);
+
+        //then
+        assertEquals(405, resp.getStatus());
+    }
+
+    @Test
+    public void deleteDr_Pub_shouldDeleteObjectWithSuccess() {
+        //given
+        String feedId = assureFeedIsInDB();
+        DR_Pub dr_pub = addPub(DCAE_LOCATION_NAME, USERNAME, USRPWD, feedId);
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+            .path(dr_pub.getPubId())
+            .request()
+            .delete();
+
+        //then
+        assertEquals("Shall delete subscription with success", 204, resp.getStatus());
+        assertFalse("No entity object shall be returned", resp.hasEntity());
+    }
+
+    @Test
+    public void deleteDr_Pub_shouldReturnErrorResponse_whenGivenPubIdNotFound() {
+        //given
+        String notExistingPubId = "6789";
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+            .path(notExistingPubId)
+            .request()
+            .delete();
+
+        //then
+        assertEquals("Shall return error, when trying to delete not existing subscription", 404, resp.getStatus());
+        ApiError responseError = resp.readEntity(ApiError.class);
+        assertNotNull(responseError);
+        assertEquals("pubId", responseError.getFields());
+    }
+
+    @Test
+    public void get_shallReturnExistingObject() {
+        //given
+        String feedId = assureFeedIsInDB();
+        DR_Pub dr_Pub = addPub(DCAE_LOCATION_NAME, USERNAME, USRPWD, feedId);
+
+        //when
+        Response resp = testContainer.target("dr_pubs")
+                .path(dr_Pub.getPubId())
+                .request()
+                .get();
+
+        //then
+        assertEquals("Subscription shall be found", 200, resp.getStatus());
+        assertEquals("Retrieved object shall be equal to eh one put into DB", dr_Pub, resp.readEntity(DR_Pub.class));
+    }
 
+    private DR_Pub addPub(String d, String un, String up, String feedId) {
+        DR_Pub dr_pub = new DR_Pub(d, un, up, feedId, "");
+        Entity<DR_Pub> reqEntity2 = Entity.entity(dr_pub, MediaType.APPLICATION_JSON);
+        Response resp = testContainer.target("dr_pubs").request().post(reqEntity2, Response.class);
+        System.out.println("POST dr_pubs resp=" + resp.getStatus());
+        assertTrue(resp.getStatus() == 201);
+        dr_pub = resp.readEntity(DR_Pub.class);
+        return dr_pub;
+    }
 
+    private String assureFeedIsInDB() {
+        Feed feed = testFeedCreator.addFeed("SubscriberTestFeed", "feed for DR_Sub testing");
+        assertNotNull("Feed shall be added into DB properly", feed);
+        return feed.getFeedId();
+    }
 }
 
 
index f812b3d..13b89ea 100644 (file)
@@ -50,6 +50,7 @@ public class DR_SubResourceTest {
     private static final String DELIVERY_URL_TEMPLATE = "https://subscriber.onap.org/delivery/";
     private static final String LOG_URL_TEMPLATE = "https://dr-prov/sublog/";
     private static FastJerseyTestContainer testContainer;
+    private static TestFeedCreator testFeedCreator;
 
     @BeforeClass
     public static void setUpClass() throws Exception {
@@ -60,6 +61,7 @@ public class DR_SubResourceTest {
             .register(DR_SubResource.class)
             .register(FeedResource.class));
         testContainer.init();
+        testFeedCreator = new TestFeedCreator(testContainer);
     }
 
     @AfterClass
@@ -189,7 +191,7 @@ public class DR_SubResourceTest {
     public void addDr_Sub_shallExecuteSuccessfully_whenValidFeedNameProvided() {
         //given
         String feedName = "testFeed";
-        addFeed(feedName, "test feed");
+        testFeedCreator.addFeed(feedName, "test feed");
         DR_Sub drSub = new DR_Sub(DCAE_LOCATION_NAME, USERNAME, USRPWD, null, DELIVERY_URL, LOG_URL, true);
         drSub.setFeedName(feedName);
         Entity<DR_Sub> requestedEntity = Entity.entity(drSub, MediaType.APPLICATION_JSON);
@@ -390,17 +392,6 @@ public class DR_SubResourceTest {
         assertNotNull(resp.readEntity(ApiError.class));
     }
 
-    private Feed addFeed(String name, String desc) {
-        Feed feed = new Feed(name, "1.0", desc, "dgl", "unrestricted");
-        Entity<Feed> reqEntity = Entity.entity(feed, MediaType.APPLICATION_JSON);
-        Response resp = testContainer.target("feeds").request().post(reqEntity, Response.class);
-        int rc = resp.getStatus();
-        System.out.println("POST feed resp=" + rc);
-        assertTrue(rc == 200 || rc == 409);
-        feed = resp.readEntity(Feed.class);
-        return feed;
-    }
-
     private DR_Sub addSub(String d, String un, String up, String feedId) {
         DR_Sub dr_sub = new DR_Sub(d, un, up, feedId,
             "https://subscriber.onap.org/foo", "https://dr-prov/sublog", true);
@@ -415,7 +406,7 @@ public class DR_SubResourceTest {
     }
 
     private String assureFeedIsInDB() {
-        Feed feed = addFeed("SubscriberTestFeed", "feed for DR_Sub testing");
+        Feed feed = testFeedCreator.addFeed("SubscriberTestFeed", "feed for DR_Sub testing");
         assertNotNull("Feed shall be added into DB properly", feed);
         return feed.getFeedId();
     }
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 (file)
index 0000000..d3dcc42
--- /dev/null
@@ -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());
+    }
+}
diff --git a/src/test/java/org/onap/dmaap/dbcapi/resources/TestFeedCreator.java b/src/test/java/org/onap/dmaap/dbcapi/resources/TestFeedCreator.java
new file mode 100644 (file)
index 0000000..e4dedb1
--- /dev/null
@@ -0,0 +1,49 @@
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * org.onap.dmaap\r
+ * ================================================================================\r
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+package org.onap.dmaap.dbcapi.resources;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import javax.ws.rs.client.Entity;\r
+import javax.ws.rs.core.MediaType;\r
+import javax.ws.rs.core.Response;\r
+import org.onap.dmaap.dbcapi.model.Feed;\r
+\r
+\r
+public class TestFeedCreator {\r
+\r
+\r
+    private final FastJerseyTestContainer testContainer;\r
+\r
+    public TestFeedCreator(FastJerseyTestContainer testContainer) {\r
+        this.testContainer = testContainer;\r
+    }\r
+\r
+    Feed addFeed(String name, String desc) {\r
+        Feed feed = new Feed(name, "1.0", desc, "dgl", "unrestricted");\r
+        Entity<Feed> reqEntity = Entity.entity(feed, MediaType.APPLICATION_JSON);\r
+        Response resp = testContainer.target("feeds").request().post(reqEntity, Response.class);\r
+        int rc = resp.getStatus();\r
+        System.out.println("POST feed resp=" + rc);\r
+        assertTrue(rc == 200 || rc == 409);\r
+        feed = resp.readEntity(Feed.class);\r
+        return feed;\r
+    }\r
+}\r