forked from mystiq/dex
*: add standup script to run DB tests locally and hook up travis
This commit is contained in:
parent
0f577a469a
commit
877eb3dc7b
4 changed files with 160 additions and 4 deletions
|
@ -3,6 +3,13 @@ language: go
|
|||
go:
|
||||
- 1.7
|
||||
|
||||
services:
|
||||
- postgresql
|
||||
|
||||
env:
|
||||
- DEX_POSTGRES_DATABASE=postgres DEX_POSTGRES_USER=postgres DEX_POSTGRES_HOST="localhost"
|
||||
|
||||
|
||||
install:
|
||||
- go get -u github.com/golang/lint/golint
|
||||
|
||||
|
|
37
Documentation/dev-running-db-tests.md
Normal file
37
Documentation/dev-running-db-tests.md
Normal file
|
@ -0,0 +1,37 @@
|
|||
# Running database tests
|
||||
|
||||
Running database tests locally require:
|
||||
|
||||
* A systemd based Linux distro.
|
||||
* A recent version of [rkt](https://github.com/coreos/rkt) installed.
|
||||
|
||||
The `standup.sh` script in the SQL directory is used to run databases in
|
||||
containers with systemd daemonizing the process.
|
||||
|
||||
```
|
||||
$ sudo ./storage/sql/standup.sh create postgres
|
||||
Starting postgres. To view progress run
|
||||
|
||||
journalctl -fu dex-postgres
|
||||
|
||||
Running as unit dex-postgres.service.
|
||||
To run tests export the following environment variables:
|
||||
|
||||
export DEX_POSTGRES_DATABASE=postgres; export DEX_POSTGRES_USER=postgres; export DEX_POSTGRES_PASSWORD=postgres; export DEX_POSTGRES_HOST=172.16.28.3:5432
|
||||
|
||||
```
|
||||
|
||||
Exporting the variables will cause the database tests to be run, rather than
|
||||
skipped.
|
||||
|
||||
```
|
||||
$ # sqlite takes forever to compile, be sure to install test dependencies
|
||||
$ go test -v -i ./storage/sql
|
||||
$ go test -v ./storage/sql
|
||||
```
|
||||
|
||||
When you're done, tear down the unit using the `standup.sh` script.
|
||||
|
||||
```
|
||||
$ sudo ./storage/sql/standup.sh destroy postgres
|
||||
```
|
9
Makefile
9
Makefile
|
@ -10,7 +10,6 @@ DOCKER_IMAGE=$(DOCKER_REPO):$(VERSION)
|
|||
|
||||
export GOBIN=$(PWD)/bin
|
||||
export GO15VENDOREXPERIMENT=1
|
||||
export CGO_ENABLED:=0
|
||||
|
||||
LD_FLAGS="-w -X $(REPO_PATH)/version.Version=$(VERSION)"
|
||||
|
||||
|
@ -26,10 +25,12 @@ bin/example-app: FORCE
|
|||
@go install -ldflags $(LD_FLAGS) $(REPO_PATH)/cmd/example-app
|
||||
|
||||
test:
|
||||
@go test $(shell go list ./... | grep -v '/vendor/')
|
||||
@go test -v -i $(shell go list ./... | grep -v '/vendor/')
|
||||
@go test -v $(shell go list ./... | grep -v '/vendor/')
|
||||
|
||||
testrace:
|
||||
@CGO_ENABLED=1 go test --race $(shell go list ./... | grep -v '/vendor/')
|
||||
@go test -v -i --race $(shell go list ./... | grep -v '/vendor/')
|
||||
@go test -v --race $(shell go list ./... | grep -v '/vendor/')
|
||||
|
||||
vet:
|
||||
@go vet $(shell go list ./... | grep -v '/vendor/')
|
||||
|
@ -39,7 +40,7 @@ fmt:
|
|||
|
||||
lint:
|
||||
@for package in $(shell go list ./... | grep -v '/vendor/' | grep -v 'api/apipb'); do \
|
||||
golint $$package; \
|
||||
golint -set_exit_status $$package; \
|
||||
done
|
||||
|
||||
server/templates_default.go: $(wildcard web/templates/**)
|
||||
|
|
111
storage/sql/standup.sh
Executable file
111
storage/sql/standup.sh
Executable file
|
@ -0,0 +1,111 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "Please run as root"
|
||||
exit
|
||||
fi
|
||||
|
||||
function usage {
|
||||
cat << EOF >> /dev/stderr
|
||||
Usage: sudo ./standup.sh [create|destroy] [postgres|mysql|cockroach]
|
||||
|
||||
This is a script for standing up test databases. It uses systemd to daemonize
|
||||
rkt containers running on a local loopback IP.
|
||||
|
||||
The general workflow is to create a daemonized container, use the output to set
|
||||
the test environment variables, run the tests, then destroy the container.
|
||||
|
||||
sudo ./standup.sh create postgres
|
||||
# Copy environment variables and run tests.
|
||||
go test -v -i # always install test dependencies
|
||||
go test -v
|
||||
sudo ./standup.sh destroy postgres
|
||||
|
||||
EOF
|
||||
exit 2
|
||||
}
|
||||
|
||||
function main {
|
||||
if [ "$#" -ne 2 ]; then
|
||||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
"create")
|
||||
case "$2" in
|
||||
"postgres")
|
||||
create_postgres;;
|
||||
"mysql")
|
||||
create_mysql;;
|
||||
*)
|
||||
usage
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"destroy")
|
||||
case "$2" in
|
||||
"postgres")
|
||||
destroy_postgres;;
|
||||
"mysql")
|
||||
destroy_mysql;;
|
||||
*)
|
||||
usage
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function wait_for_file {
|
||||
while [ ! -f $1 ]; do
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
function wait_for_container {
|
||||
while [ -z "$( rkt list --full | grep $1 )" ]; do
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
function create_postgres {
|
||||
UUID_FILE=/tmp/dex-postgres-uuid
|
||||
if [ -f $UUID_FILE ]; then
|
||||
echo "postgres database already exists, try ./standup.sh destroy postgres"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
echo "Starting postgres. To view progress run:"
|
||||
echo ""
|
||||
echo " journalctl -fu dex-postgres"
|
||||
echo ""
|
||||
systemd-run --unit=dex-postgres \
|
||||
rkt run --uuid-file-save=$UUID_FILE --insecure-options=image docker://postgres:9.6
|
||||
|
||||
wait_for_file $UUID_FILE
|
||||
|
||||
UUID=$( cat $UUID_FILE )
|
||||
wait_for_container $UUID
|
||||
HOST=$( rkt list --full | grep "$UUID" | awk '{ print $NF }' | sed -e 's/default:ip4=//g' )
|
||||
echo "To run tests export the following environment variables:"
|
||||
echo ""
|
||||
echo " export DEX_POSTGRES_DATABASE=postgres; export DEX_POSTGRES_USER=postgres; export DEX_POSTGRES_PASSWORD=postgres; export DEX_POSTGRES_HOST=$HOST:5432"
|
||||
echo ""
|
||||
}
|
||||
|
||||
function destroy_postgres {
|
||||
UUID_FILE=/tmp/dex-postgres-uuid
|
||||
systemctl stop dex-postgres
|
||||
rkt rm --uuid-file=$UUID_FILE
|
||||
rm $UUID_FILE
|
||||
}
|
||||
|
||||
|
||||
main $@
|
Loading…
Reference in a new issue