Add some integration tests
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
9cdf37c680
commit
eb80a81255
39
itest/bootstrap-tests.sh
Executable file
39
itest/bootstrap-tests.sh
Executable file
@ -0,0 +1,39 @@
|
||||
#! /bin/bash
|
||||
set -ex
|
||||
|
||||
# Create flat file
|
||||
echo "Hello" > /data/test.txt
|
||||
|
||||
# Create Sqlite database
|
||||
touch /data/test_database.db
|
||||
sqlite3 /data/test_database.db <<-EOF
|
||||
CREATE TABLE test_table (
|
||||
id integer PRIMARY KEY,
|
||||
data text NOT NULL,
|
||||
);
|
||||
|
||||
INSERT INTO test_table(data)
|
||||
VALUES ("Test row");
|
||||
EOF
|
||||
|
||||
# Create MySql database
|
||||
mysql --user "$MYSQL_USER" --password "$MYSQL_PWD" main <<-EOF
|
||||
CREATE TABLE test_table (
|
||||
id integer AUTO_INCREMENT PRIMARY KEY,
|
||||
data text NOT NULL,
|
||||
);
|
||||
|
||||
INSERT INTO test_table(data)
|
||||
VALUES ("Test row");
|
||||
EOF
|
||||
|
||||
# Create Postgresql database
|
||||
pgsql --username "$PGSQL_USER" --dbname main <<-EOF
|
||||
CREATE TABLE test_table (
|
||||
id integer PRIMARY KEY,
|
||||
data text NOT NULL,
|
||||
);
|
||||
|
||||
INSERT INTO test_table(data)
|
||||
VALUES ("Test row");
|
||||
EOF
|
35
itest/docker-compose.yml
Normal file
35
itest/docker-compose.yml
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
version: 3.9
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: mysql
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: shhh
|
||||
MYSQL_DATABASE: main
|
||||
|
||||
bootstrap:
|
||||
image: alpine
|
||||
command: /bootstrap-tests.sh
|
||||
environment:
|
||||
MYSQL_HOST: mysql
|
||||
MYSQL_USER: root
|
||||
MYSQL_PWD: shhh
|
||||
volumes:
|
||||
- ./bootstrap-tests.sh:/bootstrap-tests.sh
|
||||
- ./data:/data
|
||||
|
||||
main:
|
||||
build:
|
||||
context: ..
|
||||
command:
|
||||
volumes:
|
||||
- ./repo:/repo
|
||||
- ./data:/data
|
||||
- ./test-backup.hcl:/test-backup.hcl
|
||||
|
||||
validate:
|
||||
image: alpine
|
||||
command: /validate-tests.sh
|
||||
volumes:
|
||||
./validate-tests.sh:/validate-tests.sh
|
27
itest/run.sh
Executable file
27
itest/run.sh
Executable file
@ -0,0 +1,27 @@
|
||||
#! /bin/bash
|
||||
set -ex
|
||||
|
||||
echo Clean everything
|
||||
docker-compose down -v
|
||||
rm -fr ./repo/* ./data/*
|
||||
|
||||
echo Boostrap databases and data
|
||||
docker-compose up -d mysql
|
||||
docker-compose run bootstrap /bootstrap-tests.sh
|
||||
|
||||
echo Run backup job
|
||||
docker-compose run main -backup IntegrationTest -once /test-backup.hcl
|
||||
|
||||
echo Clean data
|
||||
docker-compose down -v
|
||||
rm -fr ./data/*
|
||||
|
||||
echo Run restore
|
||||
docker-compose run main -restore IntegrationTest -once /test-backup.hcl
|
||||
|
||||
echo Validate data
|
||||
docker-compose run validate /validate-tests.sh
|
||||
|
||||
echo Clean all again
|
||||
docker-compose down -v
|
||||
rm -fr ./repo/* ./data/*
|
29
itest/test-backup.hcl
Normal file
29
itest/test-backup.hcl
Normal file
@ -0,0 +1,29 @@
|
||||
job "IntegrationTest" {
|
||||
schedule = "@daily"
|
||||
|
||||
config {
|
||||
repo = "/repo"
|
||||
passphrase = "shh"
|
||||
}
|
||||
|
||||
mysql {
|
||||
hostname = env("MYSQL_HOST")
|
||||
database = "main"
|
||||
username = env("MYSQL_USER")
|
||||
password = env("MYSQL_PWD")
|
||||
dump_to = "/tmp/mysql.sql"
|
||||
}
|
||||
|
||||
sqlite {
|
||||
path = "/data/test_database.db"
|
||||
dump_to = "/data/test_database.db.bak"
|
||||
}
|
||||
|
||||
backup {
|
||||
paths = ["/data"]
|
||||
|
||||
restore_opts {
|
||||
Target = "/"
|
||||
}
|
||||
}
|
||||
}
|
20
itest/validate-tests.sh
Executable file
20
itest/validate-tests.sh
Executable file
@ -0,0 +1,20 @@
|
||||
#! /bin/bash
|
||||
set -ex
|
||||
|
||||
# Check flat file
|
||||
test -f /data/test.txt
|
||||
grep "^Hello" /data/test.txt
|
||||
|
||||
# Check Sqlite database
|
||||
test -f /data/test_database.db
|
||||
sqlite3 /data/test_database.db "select data from test_table where id = 1" | grep "^Test row"
|
||||
|
||||
# Check MySql database
|
||||
mysql --user "$MYSQL_USER" --password "$MYSQL_PWD" main <<-EOF | grep "^Test row"
|
||||
select data from test_table where id = 1;
|
||||
EOF
|
||||
|
||||
# Check Postgresql database
|
||||
pgsql --username "$PGSQL_USER" --dbname main <<-EOF | grep "^Test row"
|
||||
select data from test_table where id = 1;
|
||||
EOF
|
Loading…
Reference in New Issue
Block a user