Merge "Fixed Sonar issue in SubDelivery.Java"
diff --git a/datarouter-prov/pom.xml b/datarouter-prov/pom.xml
index 8473141..7613757 100755
--- a/datarouter-prov/pom.xml
+++ b/datarouter-prov/pom.xml
@@ -216,6 +216,16 @@
             <version>1.2.17</version>

             <scope>compile</scope>

         </dependency>

+        <dependency>

+            <groupId>com.h2database</groupId>

+            <artifactId>h2</artifactId>

+            <version>1.4.197</version>

+        </dependency>

+        <dependency>

+            <groupId>org.hibernate</groupId>

+            <artifactId>hibernate-entitymanager</artifactId>

+            <version>5.2.9.Final</version>

+        </dependency>

     </dependencies>

     <profiles>

         <profile>

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Group.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Group.java
index 2ea60d2..a021a60 100644
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Group.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Group.java
@@ -60,7 +60,7 @@
 

     public static Group getGroupMatching(Group gup) {

         String sql = String.format(

-                "select * from GROUPS where  NAME = \"%s\"",

+                "select * from GROUPS where NAME='%s'",

                 gup.getName()

         );

         List<Group> list = getGroupsForSQL(sql);

@@ -69,7 +69,7 @@
 

     public static Group getGroupMatching(Group gup, int groupid) {

         String sql = String.format(

-                "select * from GROUPS where  NAME = \"%s\" and GROUPID != %d ",

+                "select * from GROUPS where  NAME = '%s' and GROUPID != %d ",

                 gup.getName(),

                 gup.getGroupid()

         );

diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/NodeClass.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/NodeClass.java
index f3eb1eb..1b36851 100755
--- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/NodeClass.java
+++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/NodeClass.java
@@ -105,13 +105,14 @@
     public static void reload() {

         Map<String, Integer> m = new HashMap<String, Integer>();

         PreparedStatement ps = null;

+        ResultSet rs=null;

         try {

             DB db = new DB();

             @SuppressWarnings("resource")

             Connection conn = db.getConnection();

             String sql = "select NODEID, NAME from NODES";

             ps = conn.prepareStatement(sql);

-            ResultSet rs = ps.executeQuery();

+            rs = ps.executeQuery();

             while (rs.next()) {

                 int id = rs.getInt("NODEID");

                 String name = rs.getString("NAME");

@@ -127,6 +128,9 @@
                 if(ps!=null){

                     ps.close();

                 }

+                if(rs!=null){

+                    rs.close();

+                }

 

             } catch (SQLException e) {

                 intLogger.error("PROV0005 doInsert: " + e.getMessage(),e);

diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/DeliveryRecordTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/DeliveryRecordTest.java
new file mode 100644
index 0000000..3329b73
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/DeliveryRecordTest.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 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====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+
+package org.onap.dmaap.datarouter.provisioning.beans;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.onap.dmaap.datarouter.provisioning.utils.LOGJSONObject;
+
+import java.text.ParseException;
+
+public class DeliveryRecordTest {
+    
+    private DeliveryRecord deliveryRecord;
+    
+    @Test
+    public void Validate_Constructor_Creates_Object_With_Get_Methods() throws ParseException {
+        String[] args = {"2018-08-29-10-10-10-543.", "del", "238465493.fileName", "1","285", "123/file.txt","GET","application/json","2000","example","100"};
+        deliveryRecord = new DeliveryRecord(args);
+        Assert.assertEquals("238465493.fileName", deliveryRecord.getPublishId());
+        Assert.assertEquals(1, deliveryRecord.getFeedid());
+        Assert.assertEquals(285, deliveryRecord.getSubid());
+        Assert.assertEquals("123/file.txt", deliveryRecord.getRequestUri());
+        Assert.assertEquals("GET", deliveryRecord.getMethod());
+        Assert.assertEquals("file.txt", deliveryRecord.getFileid());
+        Assert.assertEquals("application/json", deliveryRecord.getContentType());
+        Assert.assertEquals(2000, deliveryRecord.getContentLength());
+        Assert.assertEquals("example", deliveryRecord.getUser());
+        Assert.assertEquals(100, deliveryRecord.getResult());
+    }
+
+    @Test
+    public void Validate_AsJsonObject_Correct_Json_Object_After_Set_Methods() throws ParseException {
+        String[] args = {"2018-08-29-10-10-10-543.", "del", "238465493.fileName", "1","285", "123/file.txt","GET","application/json","2000","example","100"};
+        deliveryRecord = new DeliveryRecord(args);
+        deliveryRecord.setContentLength(265);
+        deliveryRecord.setEventTime(1535533810543L);
+        deliveryRecord.setPublishId("2345657324.fileName");
+        deliveryRecord.setSubid(287);
+        deliveryRecord.setFeedid(2);
+        deliveryRecord.setRequestUri("/delete/2");
+        deliveryRecord.setMethod("PUT");
+        deliveryRecord.setContentType("application/json");
+        deliveryRecord.setFileid("file2.txt");
+        deliveryRecord.setUser("example2");
+        deliveryRecord.setResult(300);
+        LOGJSONObject deliveryRecordJson = createBaseLogRecordJson();
+        String deliveryRecordString = stripBracketFromJson(deliveryRecordJson);
+        String deliveryRecordStringObject = stripBracketFromJson(deliveryRecord.asJSONObject());
+        Assert.assertTrue(deliveryRecordStringObject.matches(deliveryRecordString));
+    }
+
+    private LOGJSONObject createBaseLogRecordJson() {
+        LOGJSONObject deliveryRecordJson = new LOGJSONObject();
+        deliveryRecordJson.put("statusCode", 300);
+        deliveryRecordJson.put("deliveryId", "example2");
+        deliveryRecordJson.put("publishId", "2345657324.fileName");
+        deliveryRecordJson.put("requestURI", "/delete/2");
+        deliveryRecordJson.put("method", "PUT");
+        deliveryRecordJson.put("contentType", "application/json");
+        deliveryRecordJson.put("type", "del");
+        deliveryRecordJson.put("date", "2018-08-29T[0-1][0-9]:10:10.543Z");
+        deliveryRecordJson.put("contentLength", 265);
+
+        return deliveryRecordJson;
+    }
+
+    private String stripBracketFromJson(LOGJSONObject deliveryRecordJson) {
+        String deliveryRecordString = deliveryRecordJson.toString();
+        deliveryRecordString = deliveryRecordString.substring(1, deliveryRecordString.length() - 1);
+        return deliveryRecordString;
+    }
+}
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecordTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecordTest.java
new file mode 100644
index 0000000..34a6d97
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/ExpiryRecordTest.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 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====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+
+package org.onap.dmaap.datarouter.provisioning.beans;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.onap.dmaap.datarouter.provisioning.utils.LOGJSONObject;
+
+import java.text.ParseException;
+
+public class ExpiryRecordTest {
+
+
+    private ExpiryRecord expiryRecord;
+
+    @Test
+    public void Validate_Constructor_Creates_Object_With_Get_Methods() throws ParseException {
+        String[] args = {"2018-08-29-10-10-10-543.", "EXP", "238465493.fileName", "1","285", "123/file.txt","GET","","2000","example","100"};
+        expiryRecord = new ExpiryRecord(args);
+        Assert.assertEquals("238465493.fileName", expiryRecord.getPublishId());
+        Assert.assertEquals(1, expiryRecord.getFeedid());
+        Assert.assertEquals("123/file.txt", expiryRecord.getRequestUri());
+        Assert.assertEquals("GET", expiryRecord.getMethod());
+        Assert.assertEquals("", expiryRecord.getContentType());
+        Assert.assertEquals(2000, expiryRecord.getContentLength());
+        Assert.assertEquals(285, expiryRecord.getSubid());
+        Assert.assertEquals("file.txt", expiryRecord.getFileid());
+        Assert.assertEquals(100, expiryRecord.getAttempts());
+        Assert.assertEquals("other", expiryRecord.getReason());
+    }
+
+    @Test
+    public void Validate_AsJsonObject_Correct_Json_Object_After_Set_Methods() throws ParseException {
+        String[] args = {"2018-08-29-10-10-10-543.", "EXP", "238465493.fileName", "1","285", "123/file.txt","GET","","2000","example","100"};
+        expiryRecord = new ExpiryRecord(args);
+        expiryRecord.setContentLength(265);
+        expiryRecord.setEventTime(1535533810543L);
+        expiryRecord.setPublishId("2345657324.fileName");
+        expiryRecord.setFeedid(2);
+        expiryRecord.setRequestUri("/delete/2");
+        expiryRecord.setContentType("application/json");
+        expiryRecord.setMethod("PUT");
+        expiryRecord.setSubid(322);
+        expiryRecord.setFileid("file.txt");
+        expiryRecord.setAttempts(125);
+        expiryRecord.setReason("Out of memory");
+
+        LOGJSONObject expiryRecordJson = createBaseLogRecordJson();
+        String expiryRecordString = stripBracketFromJson(expiryRecordJson);
+        String expiryRecordObject = stripBracketFromJson(expiryRecord.asJSONObject());
+        Assert.assertTrue(expiryRecordObject.matches(expiryRecordString));
+    }
+
+    private LOGJSONObject createBaseLogRecordJson() {
+        LOGJSONObject expiryRecordJson = new LOGJSONObject();
+        expiryRecordJson.put("expiryReason", "Out of memory");
+        expiryRecordJson.put("publishId", "2345657324.fileName");
+        expiryRecordJson.put("attempts", 125);
+        expiryRecordJson.put("requestURI", "/delete/2");
+        expiryRecordJson.put("method", "PUT");
+        expiryRecordJson.put("contentType", "application/json");
+        expiryRecordJson.put("type", "exp");
+        expiryRecordJson.put("date", "2018-08-29T[0-1][0-9]:10:10.543Z");
+        expiryRecordJson.put("contentLength", 265);
+        return expiryRecordJson;
+    }
+
+    private String stripBracketFromJson(LOGJSONObject expiryRecordJson) {
+        String expiryRecordString = expiryRecordJson.toString();
+        expiryRecordString = expiryRecordString.substring(1, expiryRecordString.length() - 1);
+        return expiryRecordString;
+    }
+}
+
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/GroupTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/GroupTest.java
index 098765c..91d72af 100644
--- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/GroupTest.java
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/GroupTest.java
@@ -22,62 +22,80 @@
  ******************************************************************************/
 package org.onap.dmaap.datarouter.provisioning.beans;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.junit.*;
+import org.onap.dmaap.datarouter.provisioning.utils.DB;
 
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import java.util.Collection;
 import java.util.Date;
+import java.util.List;
 
-
-@RunWith(PowerMockRunner.class)
-@SuppressStaticInitializationFor({"org.onap.dmaap.datarouter.provisioning.beans.Group"})
 public class GroupTest {
-    private Group group;
+  private static EntityManagerFactory emf;
+  private static EntityManager em;
+  private Group group;
+  private DB db;
 
-    @Test
-    public void Validate_Group_Created_With_Default_Contructor() {
-        group = new Group();
-        Assert.assertEquals(group.getGroupid(), -1);
-        Assert.assertEquals(group.getName(), "");
-    }
+  @BeforeClass
+  public static void init() {
+    emf = Persistence.createEntityManagerFactory("dr-unit-tests");
+    em = emf.createEntityManager();
+    System.setProperty(
+        "org.onap.dmaap.datarouter.provserver.properties",
+        "src/test/resources/h2Database.properties");
+  }
 
-    @Test
-    public void Validate_Getters_And_Setters() {
-        group = new Group();
-        group.setGroupid(1);
-        group.setAuthid("Auth");
-        group.setClassification("Class");
-        group.setDescription("Description");
-        Date date = new Date();
-        group.setLast_mod(date);
-        group.setMembers("Members");
-        group.setName("NewName");
-        Assert.assertEquals(1, group.getGroupid());
-        Assert.assertEquals("Auth", group.getAuthid());
-        Assert.assertEquals("Class", group.getClassification());
-        Assert.assertEquals("Description", group.getDescription());
-        Assert.assertEquals(date, group.getLast_mod());
-        Assert.assertEquals("Members", group.getMembers());
-    }
+  @AfterClass
+  public static void tearDownClass() {
+    em.clear();
+    em.close();
+    emf.close();
+  }
 
-    @Test
-    public void Validate_Equals() {
-        group = new Group();
-        group.setGroupid(1);
-        group.setAuthid("Auth");
-        group.setClassification("Class");
-        group.setDescription("Description");
-        Date date = new Date();
-        group.setLast_mod(date);
-        group.setMembers("Members");
-        group.setName("NewName");
-        Group group2 = new Group("NewName", "Description", "Members");
-        group2.setGroupid(1);
-        group2.setAuthid("Auth");
-        group2.setClassification("Class");
-        group2.setLast_mod(date);
-        Assert.assertEquals(group, group2);
-    }
+  @Before
+  public void setUp() throws Exception {
+    db = new DB();
+    group = new Group("GroupTest", "", "");
+    group.doInsert(db.getConnection());
+  }
+
+  @Test
+  public void Given_Group_Exists_In_Db_GetAllGroups_Returns_Correct_Group() {
+    Collection<Group> groups = Group.getAllgroups();
+    Assert.assertEquals("Group1", ((List<Group>) groups).get(0).getName());
+  }
+
+  @Test
+  public void Given_Group_Inserted_Into_Db_GetGroupMatching_Returns_Created_Group() {
+    Assert.assertEquals(group, Group.getGroupMatching(group));
+  }
+
+  @Test
+  public void Given_Group_Inserted_With_Same_Name_GetGroupMatching_With_Id_Returns_Correct_Group()
+      throws Exception {
+    Group sameGroupName = new Group("GroupTest", "This group has a description", "");
+    sameGroupName.doInsert(db.getConnection());
+    Assert.assertEquals(
+        "This group has a description", Group.getGroupMatching(group, 2).getDescription());
+    sameGroupName.doDelete(db.getConnection());
+  }
+
+  @Test
+  public void Given_Group_Inserted_GetGroupById_Returns_Correct_Group() {
+    Assert.assertEquals(group, Group.getGroupById(group.getGroupid()));
+  }
+
+  @Test
+  public void Given_Group_AuthId_Updated_GetGroupByAuthId_Returns_Correct_Group() throws Exception {
+    group.setAuthid("Basic TmFtZTp6Z04wMFkyS3gybFppbXltNy94ZDhuMkdEYjA9");
+    group.doUpdate(db.getConnection());
+    Assert.assertEquals(group, Group.getGroupByAuthId("Basic TmFtZTp6Z04wMFkyS3gybFppbXltNy94ZDhuMkdEYjA9"));
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    group.doDelete(db.getConnection());
+  }
 }
diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/PubFailRecordTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/PubFailRecordTest.java
new file mode 100644
index 0000000..dd798ab
--- /dev/null
+++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/PubFailRecordTest.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 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====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+package org.onap.dmaap.datarouter.provisioning.beans;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import java.text.ParseException;
+
+@RunWith(PowerMockRunner.class)
+public class PubFailRecordTest {
+
+    private PubFailRecord pubFailRecord;
+
+
+    @Test
+    public void Validate_PubFailRecord_Created_With_Default_Constructor() throws ParseException {
+        String[] args = {"2018-08-29-10-10-10-543.", "PBF", "238465493.fileName",
+                "1", "/publish/1/fileName", "PUT", "application/octet-stream", "285", "200",
+                "172.100.0.3", "user1", "403"};
+        pubFailRecord = new PubFailRecord(args);
+
+        Assert.assertEquals("user1", pubFailRecord.getUser());
+        Assert.assertEquals("172.100.0.3", pubFailRecord.getSourceIP());
+        Assert.assertEquals("403", pubFailRecord.getError());
+        Assert.assertEquals(200, pubFailRecord.getContentLengthReceived());
+    }
+}
diff --git a/datarouter-prov/src/test/resources/META-INF/persistence.xml b/datarouter-prov/src/test/resources/META-INF/persistence.xml
new file mode 100755
index 0000000..6b42f8a
--- /dev/null
+++ b/datarouter-prov/src/test/resources/META-INF/persistence.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
+                                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
+    <persistence-unit name="dr-unit-tests" transaction-type="RESOURCE_LOCAL">
+        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
+        <properties>
+            <!-- Configuring JDBC properties -->
+            <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test;MODE=MySQL;INIT=RUNSCRIPT FROM 'classpath:create.sql';DB_CLOSE_DELAY=-1"/>
+            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
+
+            <!-- Hibernate properties -->
+            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+            <property name="hibernate.hbm2ddl.auto" value="validate"/>
+            <property name="hibernate.format_sql" value="false"/>
+            <property name="hibernate.show_sql" value="true"/>
+
+        </properties>
+    </persistence-unit>
+</persistence>
\ No newline at end of file
diff --git a/datarouter-prov/src/test/resources/create.sql b/datarouter-prov/src/test/resources/create.sql
new file mode 100755
index 0000000..6e6af1d
--- /dev/null
+++ b/datarouter-prov/src/test/resources/create.sql
@@ -0,0 +1,146 @@
+CREATE TABLE FEEDS (
+    FEEDID         INT UNSIGNED NOT NULL PRIMARY KEY,
+    GROUPID        INT(10) UNSIGNED NOT NULL DEFAULT 0,
+    NAME           VARCHAR(255) NOT NULL,
+    VERSION        VARCHAR(20) NOT NULL,
+    DESCRIPTION    VARCHAR(1000),
+    BUSINESS_DESCRIPTION VARCHAR(1000) DEFAULT NULL,
+    AUTH_CLASS     VARCHAR(32) NOT NULL,
+    PUBLISHER      VARCHAR(8) NOT NULL,
+    SELF_LINK      VARCHAR(256),
+    PUBLISH_LINK   VARCHAR(256),
+    SUBSCRIBE_LINK VARCHAR(256),
+    LOG_LINK       VARCHAR(256),
+    DELETED        BOOLEAN DEFAULT FALSE,
+    LAST_MOD       TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    SUSPENDED      BOOLEAN DEFAULT FALSE,
+    CREATED_DATE   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+CREATE TABLE FEED_ENDPOINT_IDS (
+    FEEDID        INT UNSIGNED NOT NULL,
+    USERID        VARCHAR(20) NOT NULL,
+    PASSWORD      VARCHAR(32) NOT NULL
+);
+
+CREATE TABLE FEED_ENDPOINT_ADDRS (
+    FEEDID        INT UNSIGNED NOT NULL,
+    ADDR          VARCHAR(44) NOT NULL
+);
+
+CREATE TABLE SUBSCRIPTIONS (
+    SUBID              INT UNSIGNED NOT NULL PRIMARY KEY,
+    FEEDID             INT UNSIGNED NOT NULL,
+    GROUPID            INT(10) UNSIGNED NOT NULL DEFAULT 0,
+    DELIVERY_URL       VARCHAR(256),
+    DELIVERY_USER      VARCHAR(20),
+    DELIVERY_PASSWORD  VARCHAR(32),
+    DELIVERY_USE100    BOOLEAN DEFAULT FALSE,
+    METADATA_ONLY      BOOLEAN DEFAULT FALSE,
+    SUBSCRIBER         VARCHAR(8) NOT NULL,
+    SELF_LINK          VARCHAR(256),
+    LOG_LINK           VARCHAR(256),
+    LAST_MOD           TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    SUSPENDED          BOOLEAN DEFAULT FALSE,
+    CREATED_DATE       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+
+);
+
+CREATE TABLE PARAMETERS (
+    KEYNAME        VARCHAR(32) NOT NULL PRIMARY KEY,
+    VALUE          VARCHAR(4096) NOT NULL
+);
+
+CREATE TABLE LOG_RECORDS (
+    TYPE           ENUM('pub', 'del', 'exp', 'pbf', 'dlx') NOT NULL,
+    EVENT_TIME     BIGINT NOT NULL,           /* time of the publish request */
+    PUBLISH_ID     VARCHAR(64) NOT NULL,      /* unique ID assigned to this publish attempt */
+    FEEDID         INT UNSIGNED NOT NULL,     /* pointer to feed in FEEDS */
+    REQURI         VARCHAR(256) NOT NULL,     /* request URI */
+    METHOD         ENUM('DELETE', 'GET', 'HEAD', 'OPTIONS', 'PUT', 'POST', 'TRACE') NOT NULL, /* HTTP method */
+    CONTENT_TYPE   VARCHAR(256) NOT NULL,     /* content type of published file */
+    CONTENT_LENGTH BIGINT NOT NULL,  /* content length of published file */
+
+    FEED_FILEID    VARCHAR(256),        /* file ID of published file */
+    REMOTE_ADDR    VARCHAR(40),         /* IP address of publishing endpoint */
+    USER           VARCHAR(50),         /* user name of publishing endpoint */
+    STATUS         SMALLINT,            /* status code returned to delivering agent */
+
+    DELIVERY_SUBID INT UNSIGNED,        /* pointer to subscription in SUBSCRIPTIONS */
+    DELIVERY_FILEID  VARCHAR(256),      /* file ID of file being delivered */
+    RESULT         SMALLINT,            /* result received from subscribing agent */
+
+    ATTEMPTS       INT,             /* deliveries attempted */
+    REASON         ENUM('notRetryable', 'retriesExhausted', 'diskFull', 'other'),
+
+    RECORD_ID      BIGINT UNSIGNED NOT NULL PRIMARY KEY, /* unique ID for this record */
+    CONTENT_LENGTH_2 BIGINT,
+
+    INDEX (FEEDID) USING BTREE,
+    INDEX (DELIVERY_SUBID) USING BTREE,
+    INDEX (RECORD_ID) USING BTREE
+) ENGINE = MyISAM;
+
+CREATE TABLE INGRESS_ROUTES (
+    SEQUENCE  INT UNSIGNED NOT NULL,
+    FEEDID    INT UNSIGNED NOT NULL,
+    USERID    VARCHAR(20),
+    SUBNET    VARCHAR(44),
+    NODESET   INT UNSIGNED NOT NULL
+);
+
+CREATE TABLE EGRESS_ROUTES (
+    SUBID    INT UNSIGNED NOT NULL PRIMARY KEY,
+    NODEID   INT UNSIGNED NOT NULL
+);
+
+CREATE TABLE NETWORK_ROUTES (
+    FROMNODE INT UNSIGNED NOT NULL,
+    TONODE   INT UNSIGNED NOT NULL,
+    VIANODE  INT UNSIGNED NOT NULL
+);
+
+CREATE TABLE NODESETS (
+    SETID   INT UNSIGNED NOT NULL,
+    NODEID  INT UNSIGNED NOT NULL
+);
+
+CREATE TABLE NODES (
+    NODEID  INT UNSIGNED NOT NULL PRIMARY KEY,
+    NAME    VARCHAR(255) NOT NULL,
+    ACTIVE  BOOLEAN DEFAULT TRUE
+);
+
+CREATE TABLE GROUPS (
+    GROUPID        INT UNSIGNED NOT NULL PRIMARY KEY,
+    AUTHID         VARCHAR(100) NOT NULL,
+    NAME           VARCHAR(50) NOT NULL,
+    DESCRIPTION    VARCHAR(255),
+    CLASSIFICATION VARCHAR(20) NOT NULL,
+    MEMBERS        TINYTEXT,
+    LAST_MOD       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+INSERT INTO PARAMETERS VALUES
+    ('ACTIVE_POD',  'dmaap-dr-prov'),
+    ('PROV_ACTIVE_NAME',  'dmaap-dr-prov'),
+    ('STANDBY_POD', ''),
+    ('PROV_NAME',   'dmaap-dr-prov'),
+    ('NODES',       'dmaap-dr-node'),
+    ('PROV_DOMAIN', ''),
+    ('DELIVERY_INIT_RETRY_INTERVAL', '10'),
+    ('DELIVERY_MAX_AGE', '86400'),
+    ('DELIVERY_MAX_RETRY_INTERVAL', '3600'),
+    ('DELIVERY_RETRY_RATIO', '2'),
+    ('LOGROLL_INTERVAL', '300'),
+    ('PROV_AUTH_ADDRESSES', 'dmaap-dr-prov|dmaap-dr-node'),
+    ('PROV_AUTH_SUBJECTS', ''),
+    ('PROV_MAXFEED_COUNT',  '10000'),
+    ('PROV_MAXSUB_COUNT',   '100000'),
+    ('PROV_REQUIRE_CERT', 'false'),
+    ('PROV_REQUIRE_SECURE', 'false'),
+    ('_INT_VALUES', 'LOGROLL_INTERVAL|PROV_MAXFEED_COUNT|PROV_MAXSUB_COUNT|DELIVERY_INIT_RETRY_INTERVAL|DELIVERY_MAX_RETRY_INTERVAL|DELIVERY_RETRY_RATIO|DELIVERY_MAX_AGE')
+    ;
+
+INSERT INTO GROUPS(GROUPID, AUTHID, NAME, DESCRIPTION, CLASSIFICATION, MEMBERS)
+VALUES (1, 'Basic dXNlcjE6cGFzc3dvcmQx', 'Group1', 'First Group for testing', 'Class1', 'Member1');
diff --git a/datarouter-prov/src/test/resources/h2Database.properties b/datarouter-prov/src/test/resources/h2Database.properties
new file mode 100755
index 0000000..5bc20ed
--- /dev/null
+++ b/datarouter-prov/src/test/resources/h2Database.properties
@@ -0,0 +1,26 @@
+#-------------------------------------------------------------------------------
+# ============LICENSE_START==================================================
+# * org.onap.dmaap
+# * ===========================================================================
+# * Copyright ? 2017 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====================================================
+# *
+# * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# *
+#-------------------------------------------------------------------------------
+
+# Database access
+org.onap.dmaap.datarouter.db.driver   = org.h2.Driver
+org.onap.dmaap.datarouter.db.url      = jdbc:h2:mem:test;DB_CLOSE_DELAY=-1