Add HowTo create Docker based test setup
README.md contains step (with necessary gerrit.config changes) for
setting up Postgres Docker based setup.
Change-Id: I550dc16e61bb398b179d31fb5592e88724d17575
Signed-off-by: Jacek Centkowski <jcentkowski@collab.net>
diff --git a/README.md b/README.md
index 0a3788b..ee820a8 100644
--- a/README.md
+++ b/README.md
@@ -63,3 +63,32 @@
If a unit suffix is not specified, `milliseconds` is assumed.
Default is `30 seconds`.
+
+## Testing with docker based Postgres setup
+
+One can start test Postgres server that contains both `gerrit_review`
+(Gerrit db) and `gerrit_caches` (db for caches) with the
+following command
+```
+docker-compose -f docker/gerrit-caches-compose.yaml up
+```
+
+One nedds to add the following parameters to `gerrit.config`
+```
+git config --file ${GERRIT_ETC_DIR}/gerrit.config database.type POSTGRESQL
+git config --file ${GERRIT_ETC_DIR}/gerrit.config database.hostname localhost
+git config --file ${GERRIT_ETC_DIR}/gerrit.config database.port 5432
+git config --file ${GERRIT_ETC_DIR}/gerrit.config database.database gerrit_review
+git config --file ${GERRIT_ETC_DIR}/gerrit.config database.username gerrit
+git config --file ${GERRIT_ETC_DIR}/gerrit.config database.password gerrit
+git config --file ${GERRIT_ETC_DIR}/gerrit.config cache.url "jdbc:postgresql://localhost:5432/gerrit_caches?user=gerrit&password=gerrit"
+```
+
+where `GERRIT_ETC_DIR` is `GERRIT_SITE/etc`;
+
+Notes
+* container name is `gerrit-pg`
+* container uses `docker_gerrit-db-data` volume therefore restarting it
+preserves data
+* details of Postgres user/dbs setup can be found in `docker/create-gerrit-dbs.sh`
+* Postgres container details (ports, volumes, etc.) are in `docker/gerrit-caches-compose.yaml`
diff --git a/docker/create-gerrit-dbs.sh b/docker/create-gerrit-dbs.sh
new file mode 100755
index 0000000..f681e78
--- /dev/null
+++ b/docker/create-gerrit-dbs.sh
@@ -0,0 +1,22 @@
+USERNAME="gerrit"
+USERPASS="gerrit"
+
+# create user and modify password
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
+ CREATE USER "$USERNAME";
+ ALTER USER "$USERNAME" WITH PASSWORD '$USERPASS';
+EOSQL
+
+# create caches DB
+DBNAME="gerrit_caches"
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
+ CREATE DATABASE "$DBNAME" ENCODING UTF8;
+ GRANT ALL PRIVILEGES ON DATABASE "$DBNAME" TO "$USERNAME";
+EOSQL
+
+# create review DB
+DBNAME="gerrit_review"
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
+ CREATE DATABASE "$DBNAME" ENCODING UTF8;
+ GRANT ALL PRIVILEGES ON DATABASE "$DBNAME" TO "$USERNAME";
+EOSQL
diff --git a/docker/gerrit-caches-compose.yaml b/docker/gerrit-caches-compose.yaml
new file mode 100644
index 0000000..57a89b1
--- /dev/null
+++ b/docker/gerrit-caches-compose.yaml
@@ -0,0 +1,21 @@
+version: '3.5'
+
+services:
+ db:
+ container_name: ${DB_CONTAINER_NAME:-gerrit-pg}
+ image: postgres:${DB_IMAGE_ID:-9.6.8-alpine}
+ restart: unless-stopped
+ environment:
+ - POSTGRES_USER=${DB_USER:-postgres}
+ - POSTGRES_PASSWORD=${DB_PASS:-postgres}
+ ports:
+ - '5432:5432'
+ volumes:
+ - type: bind
+ source: ./create-gerrit-dbs.sh
+ target: /docker-entrypoint-initdb.d/create-gerrit-dbs.sh
+ read_only: true
+ - gerrit-db-data:/var/lib/postgresql/data
+
+volumes:
+ gerrit-db-data: