From b91f0ffbfdd5d43dfcdda287494911bb1d0175b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Coste?= <jerome.coste@etu.utc.fr>
Date: Thu, 9 Nov 2017 00:30:19 +0100
Subject: [PATCH] add tests scripts

---
 .../testing_data/2017.11.27 200000.sql        |  0
 pica-backup/Dockerfile                        | 18 ++++
 pica-backup/docker-compose.yml                | 12 +++
 pica-backup/mysql-backup                      |  1 +
 pica-backup/mysql-run.sh                      | 82 ++++++++++++++++++
 pica-backup/postgres-backup                   |  1 +
 pica-backup/postgres-run.sh                   | 83 +++++++++++++++++++
 pica-backup/run.sh                            | 38 +++++++++
 8 files changed, 235 insertions(+)
 create mode 100644 mysql-backup/testing_data/2017.11.27 200000.sql
 create mode 100644 pica-backup/Dockerfile
 create mode 100644 pica-backup/docker-compose.yml
 create mode 120000 pica-backup/mysql-backup
 create mode 100755 pica-backup/mysql-run.sh
 create mode 120000 pica-backup/postgres-backup
 create mode 100755 pica-backup/postgres-run.sh
 create mode 100755 pica-backup/run.sh

diff --git a/mysql-backup/testing_data/2017.11.27 200000.sql b/mysql-backup/testing_data/2017.11.27 200000.sql
new file mode 100644
index 00000000..e69de29b
diff --git a/pica-backup/Dockerfile b/pica-backup/Dockerfile
new file mode 100644
index 00000000..3bc49eab
--- /dev/null
+++ b/pica-backup/Dockerfile
@@ -0,0 +1,18 @@
+FROM debian:latest
+MAINTAINER antoine@barbare.me
+
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+      postgresql-client \
+      mysql-client \
+      cron && \
+    apt-get clean
+
+ENV CRON_TIME="0 0 * * *" \
+    MYSQL_DB="--all-databases"
+COPY mysql-run.sh /mysql-run.sh
+COPY postgres-run.sh /postgres-backup.sh
+
+VOLUME ["/backup"]
+
+CMD ["/bin/bash"]
diff --git a/pica-backup/docker-compose.yml b/pica-backup/docker-compose.yml
new file mode 100644
index 00000000..3a9ec1a4
--- /dev/null
+++ b/pica-backup/docker-compose.yml
@@ -0,0 +1,12 @@
+version: "2"
+
+services:
+  backup:
+    image: backup
+    container_name: test-backup
+    volumes:
+     - /home/user/Documents/Picasoft/dockerfiles/pica-backup/t1:/backup/test-backup1
+     - /home/user/Documents/Picasoft/dockerfiles/pica-backup/t2:/backup/test-backup2
+    environment:
+            - TEST=aaaaa,bbbbbbb,ccccc
+
diff --git a/pica-backup/mysql-backup b/pica-backup/mysql-backup
new file mode 120000
index 00000000..2d628b24
--- /dev/null
+++ b/pica-backup/mysql-backup
@@ -0,0 +1 @@
+../mysql-backup/
\ No newline at end of file
diff --git a/pica-backup/mysql-run.sh b/pica-backup/mysql-run.sh
new file mode 100755
index 00000000..1116ef3e
--- /dev/null
+++ b/pica-backup/mysql-run.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+
+if [ "${MYSQL_ENV_MYSQL_PASS}" == "**Random**" ]; then
+        unset MYSQL_ENV_MYSQL_PASS
+fi
+
+MYSQL_HOST=${MYSQL_PORT_3306_TCP_ADDR:-${MYSQL_HOST}}
+MYSQL_HOST=${MYSQL_PORT_1_3306_TCP_ADDR:-${MYSQL_HOST}}
+MYSQL_PORT=${MYSQL_PORT_3306_TCP_PORT:-${MYSQL_PORT}}
+MYSQL_PORT=${MYSQL_PORT_1_3306_TCP_PORT:-${MYSQL_PORT}}
+MYSQL_USER=${MYSQL_USER:-${MYSQL_ENV_MYSQL_USER}}
+MYSQL_PASS=${MYSQL_PASS:-${MYSQL_ENV_MYSQL_PASS}}
+
+[ -z "${MYSQL_HOST}" ] && { echo "=> MYSQL_HOST cannot be empty" && exit 1; }
+[ -z "${MYSQL_PORT}" ] && { echo "=> MYSQL_PORT cannot be empty" && exit 1; }
+[ -z "${MYSQL_USER}" ] && { echo "=> MYSQL_USER cannot be empty" && exit 1; }
+[ -z "${MYSQL_PASS}" ] && { echo "=> MYSQL_PASS cannot be empty" && exit 1; }
+
+BACKUP_CMD="mysqldump -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} ${EXTRA_OPTS} ${MYSQL_DB} > /backup/"'${BACKUP_NAME}'
+
+echo "=> Creating backup script"
+rm -f /backup.sh
+cat <<EOF >> /backup.sh
+#!/bin/bash
+MAX_BACKUPS=${MAX_BACKUPS}
+
+BACKUP_NAME=\$(date +\%Y.\%m.\%d.\%H\%M\%S).sql
+
+echo "=> Backup started: \${BACKUP_NAME}"
+if ${BACKUP_CMD} ;then
+    echo "   Backup succeeded"
+else
+    echo "   Backup failed"
+    rm -rf /backup/\${BACKUP_NAME}
+fi
+
+if [ -n "\${MAX_BACKUPS}" ]; then
+    while [ \$(ls /backup -N1 | wc -l) -gt \${MAX_BACKUPS} ];
+    do
+        BACKUP_TO_BE_DELETED=\$(ls /backup -N1 | sort | head -n 1)
+        echo "   Backup \${BACKUP_TO_BE_DELETED} is deleted"
+        rm -rf /backup/\${BACKUP_TO_BE_DELETED}
+    done
+fi
+echo "=> Backup done"
+EOF
+chmod +x /backup.sh
+
+echo "=> Creating restore script"
+rm -f /restore.sh
+cat <<EOF >> /restore.sh
+#!/bin/bash
+echo "=> Restore database from \$1"
+if mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} < \$1 ;then
+    echo "   Restore succeeded"
+else
+    echo "   Restore failed"
+fi
+echo "=> Done"
+EOF
+chmod +x /restore.sh
+
+touch /mysql_backup.log
+tail -F /mysql_backup.log &
+
+if [ -n "${INIT_BACKUP}" ]; then
+    echo "=> Create a backup on the startup"
+    /backup.sh
+elif [ -n "${INIT_RESTORE_LATEST}" ]; then
+    echo "=> Restore lates backup"
+    until nc -z $MYSQL_HOST $MYSQL_PORT
+    do
+        echo "waiting database container..."
+        sleep 1
+    done
+    ls -d -1 /backup/* | tail -1 | xargs /restore.sh
+fi
+
+echo "${CRON_TIME} /backup.sh >> /mysql_backup.log 2>&1" > /crontab.conf
+crontab  /crontab.conf
+echo "=> Running cron job"
+exec cron -f
diff --git a/pica-backup/postgres-backup b/pica-backup/postgres-backup
new file mode 120000
index 00000000..3fc1dc77
--- /dev/null
+++ b/pica-backup/postgres-backup
@@ -0,0 +1 @@
+../postgres-backup/
\ No newline at end of file
diff --git a/pica-backup/postgres-run.sh b/pica-backup/postgres-run.sh
new file mode 100755
index 00000000..2fe57848
--- /dev/null
+++ b/pica-backup/postgres-run.sh
@@ -0,0 +1,83 @@
+#!/bin/bash
+
+[ -z "${POSTGRES_HOST}" ] && { echo "=> POSTGRES_HOST cannot be empty" && exit 1; }
+[ -z "${POSTGRES_PORT}" ] && { echo "=> POSTGRES_PORT cannot be empty" && exit 1; }
+[ -z "${POSTGRES_USER}" ] && { echo "=> POSTGRES_USER cannot be empty" && exit 1; }
+[ -z "${POSTGRES_PASS}" ] && { echo "=> POSTGRES_PASS cannot be empty" && exit 1; }
+[ -z "${POSTGRES_DB}" ] && { echo "=> POSTGRES_DB cannot be empty" && exit 1; }
+
+BACKUP_CMD="pg_dump -w -c > /backup/"'${BACKUP_NAME}'
+
+echo "=> Creating backup script"
+rm -f /backup.sh
+cat <<EOF >> /backup.sh
+#!/bin/bash
+MAX_BACKUPS=${MAX_BACKUPS}
+export PGHOST=$POSTGRES_HOST
+export PGPORT=$POSTGRES_PORT
+export PGDATABASE=$POSTGRES_DB
+export PGUSER=$POSTGRES_USER
+export PGPASSWORD=$POSTGRES_PASS
+
+BACKUP_NAME=\$(date +\%Y.\%m.\%d.\%H\%M\%S).sql
+
+echo "=> Backup started: \${BACKUP_NAME}"
+if ${BACKUP_CMD} ;then
+    echo "   Backup succeeded"
+else
+    echo "   Backup failed"
+    rm -rf /backup/\${BACKUP_NAME}
+fi
+
+if [ -n "\${MAX_BACKUPS}" ]; then
+    while [ \$(ls /backup -N1 | wc -l) -gt \${MAX_BACKUPS} ];
+    do
+        BACKUP_TO_BE_DELETED=\$(ls /backup -N1 | sort | head -n 1)
+        echo "   Backup \${BACKUP_TO_BE_DELETED} is deleted"
+        rm -rf /backup/\${BACKUP_TO_BE_DELETED}
+    done
+fi
+echo "=> Backup done"
+EOF
+chmod +x /backup.sh
+
+echo "=> Creating restore script"
+rm -f /restore.sh
+cat <<EOF >> /restore.sh
+#!/bin/bash
+export PGHOST=$POSTGRES_HOST
+export PGPORT=$POSTGRES_PORT
+export PGDATABASE=$POSTGRES_DB
+export PGUSER=$POSTGRES_USER
+export PGPASSWORD=$POSTGRES_PASS
+
+echo "=> Restore database from \$1"
+if pg_restore -w -d $POSTGRES_DB < \$1 ;then
+    echo "   Restore succeeded"
+else
+    echo "   Restore failed"
+fi
+echo "=> Done"
+EOF
+chmod +x /restore.sh
+
+touch /postgres_backup.log
+tail -F /postgres_backup.log &
+
+if [ -n "${INIT_BACKUP}" ]; then
+    echo "=> Create a backup on the startup"
+    /backup.sh
+elif [ -n "${INIT_RESTORE_LATEST}" ]; then
+    echo "=> Restore lates backup"
+    until nc -z $POSTGRES_HOST $POSTGRES_PORT
+    do
+        echo "waiting database container..."
+        sleep 1
+    done
+    ls -d -1 /backup/* | tail -1 | xargs /restore.sh
+fi
+
+echo "${CRON_TIME} /backup.sh >> /postgres_backup.log 2>&1" > /crontab.conf
+crontab  /crontab.conf
+echo "=> Running cron job"
+exec cron -f
diff --git a/pica-backup/run.sh b/pica-backup/run.sh
new file mode 100755
index 00000000..e5c0ae6b
--- /dev/null
+++ b/pica-backup/run.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# DB_TYPE : MYSQL|POSTGRES
+
+# MYSQL			POSTGRESQL
+#
+# MYSQL_HOST_LIST		POSTGRES_HOST_LIST
+# MYSQL_PORT_LIST		POSTGRES_PORT_LIST
+# MYSQL_USER_LIST		POSTGRES_USER_LIST
+# MYSQL_PASS_LIST		POSTGRES_PASS_LIST
+#				POSTGRES_DB_LIST
+# MYSQL_MAX_BACKUP_LIST		POSTGRES_MAX_BACKUP_LIST
+# MYSQL_INIT_BACKUP_LIST	POSTGRES_INIT_BACKUP_LIST
+# MYSQL_CRON_TIME_LIST		POSTGRES_CRON_TIME_LIST
+# MYSQL_EXTRA_OPTS_LIST		POSTGRES_EXTRA_OPTS-LIST
+
+IFS=,
+#MYSQL
+read -a MYSQL_HOST_ARRAY <<< "$MYSQL_HOST_LIST"
+read -a MYSQL_PORT_ARRAY <<< "$MYSQL_PORT_LIST"
+read -a MYSQL_USER_ARRAY <<< "$MYSQL_USER_LIST"
+read -a MYSQL_PASS_ARRAY <<< "$MYSQL_PASS_LIST"
+read -a MYSQL_MAX_BACKUP_ARRAY <<< "$MYSQL_MAX_BACKUP_LIST"
+read -a MYSQL_INIT_BACKUP_ARRAY <<< "$MYSQL_INIT_BACKUP_LIST"
+read -a MYSQL_CRON_TIME_ARRAY <<< "$MYSQL_CRON_TIME_LIST"
+read -a MYSQL_EXTRA_OPTS_ARRAY <<< "$MYSQL_EXTRA_OPTS_LIST"
+
+#POSTGRES
+read -a POSTGRES_HOST_ARRAY <<< "$POSTGRES_HOST_LIST"
+read -a POSTGRES_PORT_ARRAY <<< "$POSTGRES_PORT_LIST"
+read -a POSTGRES_USER_ARRAY <<< "$POSTGRES_PASS_LIST"
+read -a POSTGRES_DB_ARRAY <<< "$POSTGRES_DB_LIST"
+read -a POSTGRES_MAX_BACKUP_ARRAY <<< "$POSTGRES_MAX_BACKUP_LIST"
+read -a POSTGRES_INIT_BACKUP_ARRAY <<< "$POSTGRES_INIT_BACKUP_LIST"
+read -a POSTGRES_CRON_TIME_ARRAY <<< "$POSTGRES_CRON_TIME_LIST"
+read -a POSTGRES_EXTRA_OPTS_ARRAY <<< "$POSTGRES_EXTRA_OPTS_LIST"
+
+
-- 
GitLab