Migrate from MariaDB to PostgreSQL, add postgresql-testing-lite script too
diff --git a/scripts/Unix/postgres-setup-lite.sh b/scripts/Unix/postgres-setup-lite.sh
new file mode 100755
index 0000000..ec2cba6
--- /dev/null
+++ b/scripts/Unix/postgres-setup-lite.sh
@@ -0,0 +1,136 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+#
+
+#!/usr/bin/env bash
+
+githubAccount=$1
+
+# REM create core folder
+mkdir -p core
+cd core
+
+get_modules() {
+  for module in $@
+  do
+    git clone https://github.com/$githubAccount/$module.git -b develop
+    cd $module
+    git remote add upstream https://github.com/apache/$module.git
+    # For some reason permission gets denied
+    chmod +x gradlew
+    ./gradlew publishToMavenLocal
+    cd ..
+  done
+}
+
+get_modules fineract-cn-lang fineract-cn-api fineract-cn-async fineract-cn-cassandra fineract-cn-postgresql fineract-cn-command
+
+# REM clone fineract-cn-test FINCN-114
+git clone https://github.com/$githubAccount/fineract-cn-test.git -b FINCN-114
+cd fineract-cn-test
+git remote add upstream https://github.com/apache/fineract-cn-test.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# Return to start folder
+cd ..
+
+# REM create tools folder
+mkdir tools
+cd tools
+
+# REM initialize fineract-cn-crypto
+git clone https://github.com/$githubAccount/fineract-cn-crypto.git -b develop
+cd fineract-cn-crypto
+git remote add upstream https://github.com/apache/fineract-cn-crypto.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# exit tools directory
+cd ..
+
+get_modules fineract-cn-anubis fineract-cn-identity fineract-cn-permitted-feign-client
+
+# REM clone fineract-cn-provisioner FINCN-129
+git clone https://github.com/$githubAccount/fineract-cn-provisioner.git -b FINCN-129
+cd fineract-cn-provisioner
+git remote add upstream https://github.com/apache/fineract-cn-provisioner.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-rhythm FINCN-115
+git clone https://github.com/$githubAccount/fineract-cn-rhythm.git -b FINCN-115
+cd fineract-cn-rhythm
+git remote add upstream https://github.com/apache/fineract-cn-rhythm.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-template FINCN-120
+git clone https://github.com/$githubAccount/fineract-cn-template.git -b FINCN-120
+cd fineract-cn-template
+git remote add upstream https://github.com/apache/fineract-cn-template.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-office FINCN-117
+git clone https://github.com/$githubAccount/fineract-cn-office.git -b FINCN-117
+cd fineract-cn-office
+git remote add upstream https://github.com/apache/fineract-cn-office.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-customer FINCN-116
+git clone https://github.com/$githubAccount/fineract-cn-customer.git -b FINCN-116
+cd fineract-cn-customer
+git remote add upstream https://github.com/apache/fineract-cn-customer.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+mkdir integration-tests
+cd integration-tests
+
+# REM clone fineract-cn-service-starter FINCN-140
+git clone https://github.com/$githubAccount/fineract-cn-service-starter.git -b FINCN-140
+cd fineract-cn-service-starter
+git remote add upstream https://github.com/apache/fineract-cn-service-starter.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM clone fineract-cn-demo-server FINCN-141
+git clone https://github.com/$githubAccount/fineract-cn-demo-server.git -b FINCN-141
+cd fineract-cn-demo-server
+git remote add upstream https://github.com/apache/fineract-cn-demo-server.git
+chmod +x gradlew
+./gradlew publishToMavenLocal
+cd ..
+
+# REM initialize Web App
+git clone https://github.com/$githubAccount/fineract-cn-fims-web-app.git
+cd fineract-cn-fims-web-app
+git remote add upstream https://github.com/apache/fineract-cn-fims-web-app.git
+npm i
+
+cd ..
diff --git a/src/main/java/org/apache/fineract/cn/dev/ServiceRunner.java b/src/main/java/org/apache/fineract/cn/dev/ServiceRunner.java
index 357ea83..78698b0 100644
--- a/src/main/java/org/apache/fineract/cn/dev/ServiceRunner.java
+++ b/src/main/java/org/apache/fineract/cn/dev/ServiceRunner.java
@@ -18,8 +18,18 @@
  */
 package org.apache.fineract.cn.dev;
 
-import ch.vorburger.mariadb4j.DB;
-import ch.vorburger.mariadb4j.DBConfigurationBuilder;
+import static org.apache.fineract.cn.accounting.api.v1.EventConstants.POST_ACCOUNT;
+import static org.apache.fineract.cn.accounting.api.v1.EventConstants.POST_LEDGER;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Scanner;
+import java.util.concurrent.TimeUnit;
+
+import com.opentable.db.postgres.embedded.EmbeddedPostgres;
 import org.apache.fineract.cn.accounting.api.v1.client.LedgerManager;
 import org.apache.fineract.cn.accounting.importer.AccountImporter;
 import org.apache.fineract.cn.accounting.importer.LedgerImporter;
@@ -47,7 +57,7 @@
 import org.apache.fineract.cn.identity.api.v1.events.ApplicationSignatureEvent;
 import org.apache.fineract.cn.identity.api.v1.events.EventConstants;
 import org.apache.fineract.cn.lang.AutoTenantContext;
-import org.apache.fineract.cn.mariadb.util.MariaDBConstants;
+import org.apache.fineract.cn.postgresql.util.PostgreSQLConstants;
 import org.apache.fineract.cn.notification.api.v1.client.NotificationManager;
 import org.apache.fineract.cn.office.api.v1.client.OrganizationManager;
 import org.apache.fineract.cn.payroll.api.v1.client.PayrollManager;
@@ -90,17 +100,7 @@
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.util.Base64Utils;
 
-import java.io.IOException;
-import java.net.URL;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Scanner;
-import java.util.concurrent.TimeUnit;
-
-import static org.apache.fineract.cn.accounting.api.v1.EventConstants.POST_ACCOUNT;
-import static org.apache.fineract.cn.accounting.api.v1.EventConstants.POST_LEDGER;
 
 @SuppressWarnings("SpringAutowiredFieldsWarningInspection")
 @RunWith(SpringRunner.class)
@@ -131,7 +131,7 @@
   private static Microservice<GroupManager> groupManager;
   private static Microservice<NotificationManager> notificationManager;
 
-  private static DB embeddedMariaDb;
+  private static EmbeddedPostgres embeddedPostgres;
 
   private static final String CUSTOM_PROP_PREFIX = "custom.";
   private boolean runInDebug;
@@ -199,13 +199,8 @@
     if (!this.isPersistent) {
       // start embedded Cassandra
       EmbeddedCassandraServerHelper.startEmbeddedCassandra(TimeUnit.SECONDS.toMillis(30L));
-      // start embedded MariaDB
-      ServiceRunner.embeddedMariaDb = DB.newEmbeddedDB(
-          DBConfigurationBuilder.newBuilder()
-              .setPort(3306)
-              .build()
-      );
-      ServiceRunner.embeddedMariaDb.start();
+      // start embedded PostgreSQL
+      ServiceRunner.embeddedPostgres = embeddedPostgres.builder().setPort(5432).start();
     }
 
     ExtraProperties generalProperties = new ExtraProperties();
@@ -291,7 +286,7 @@
     ServiceRunner.identityManager.kill();
 
     if (!isPersistent) {
-      ServiceRunner.embeddedMariaDb.stop();
+      ServiceRunner.embeddedPostgres.close();
       EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();
     }
   }
@@ -728,16 +723,16 @@
       properties.setProperty(CassandraConnectorConstants.CLUSTER_PASSWORD_PROP, this.environment.getProperty(CassandraConnectorConstants.CLUSTER_PASSWORD_PROP));
     }
 
-    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_HOST_PROP)) {
-      properties.setProperty(MariaDBConstants.MARIADB_HOST_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_HOST_PROP));
+    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_HOST_PROP)) {
+      properties.setProperty(PostgreSQLConstants.POSTGRESQL_HOST_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_HOST_PROP));
     }
 
-    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_USER_PROP)) {
-      properties.setProperty(MariaDBConstants.MARIADB_USER_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_USER_PROP));
+    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_USER_PROP)) {
+      properties.setProperty(PostgreSQLConstants.POSTGRESQL_USER_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_USER_PROP));
     }
 
-    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_PASSWORD_PROP)) {
-      properties.setProperty(MariaDBConstants.MARIADB_PASSWORD_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + MariaDBConstants.MARIADB_PASSWORD_PROP));
+    if (this.environment.containsProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_PASSWORD_PROP)) {
+      properties.setProperty(PostgreSQLConstants.POSTGRESQL_PASSWORD_PROP, this.environment.getProperty(ServiceRunner.CUSTOM_PROP_PREFIX + PostgreSQLConstants.POSTGRESQL_PASSWORD_PROP));
     }
   }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/fineract/cn/dev/TenantBuilder.java b/src/main/java/org/apache/fineract/cn/dev/TenantBuilder.java
index a934053..d761ae3 100644
--- a/src/main/java/org/apache/fineract/cn/dev/TenantBuilder.java
+++ b/src/main/java/org/apache/fineract/cn/dev/TenantBuilder.java
@@ -19,7 +19,7 @@
 package org.apache.fineract.cn.dev;
 
 import org.apache.fineract.cn.cassandra.util.CassandraConnectorConstants;
-import org.apache.fineract.cn.mariadb.util.MariaDBConstants;
+import org.apache.fineract.cn.postgresql.util.PostgreSQLConstants;
 import org.apache.fineract.cn.test.env.TestEnvironment;
 import org.apache.fineract.cn.provisioner.api.v1.domain.CassandraConnectionInfo;
 import org.apache.fineract.cn.provisioner.api.v1.domain.DatabaseConnectionInfo;
@@ -40,12 +40,12 @@
 
     final DatabaseConnectionInfo databaseConnectionInfo = new DatabaseConnectionInfo();
 
-    databaseConnectionInfo.setDriverClass("org.mariadb.jdbc.Driver");
+    databaseConnectionInfo.setDriverClass(PostgreSQLConstants.POSTGRESQL_DRIVER_CLASS_DEFAULT);
     databaseConnectionInfo.setDatabaseName(databaseName);
-    databaseConnectionInfo.setHost(testEnvironment.getProperty(MariaDBConstants.MARIADB_HOST_PROP));
-    databaseConnectionInfo.setPort(testEnvironment.getProperty(MariaDBConstants.MARIADB_PORT_PROP));
-    databaseConnectionInfo.setUser(testEnvironment.getProperty(MariaDBConstants.MARIADB_USER_PROP));
-    databaseConnectionInfo.setPassword(testEnvironment.getProperty(MariaDBConstants.MARIADB_PASSWORD_PROP));
+    databaseConnectionInfo.setHost(testEnvironment.getProperty(PostgreSQLConstants.POSTGRESQL_HOST_PROP));
+    databaseConnectionInfo.setPort(testEnvironment.getProperty(PostgreSQLConstants.POSTGRESQL_PORT_PROP));
+    databaseConnectionInfo.setUser(testEnvironment.getProperty(PostgreSQLConstants.POSTGRESQL_USER_PROP));
+    databaseConnectionInfo.setPassword(testEnvironment.getProperty(PostgreSQLConstants.POSTGRESQL_PASSWORD_PROP));
     tenant.setDatabaseConnectionInfo(databaseConnectionInfo);
 
     final CassandraConnectionInfo cassandraConnectionInfo = new CassandraConnectionInfo();