Skip to content

Add docker based integration test suite. #13

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 16, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ go:
script:
- make all
- make docker
- make test-integration
after_success:
- if [ "$TRAVIS_BRANCH" == "master" ]; then docker login -e $DOCKER_EMAIL -u $DOCKER_USER
-p $DOCKER_PASS ; docker push wrouesnel/postgres_exporter ; fi
Expand Down
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ vet:
test:
go test -v .

test-integration:
tests/test-smoke

# Do a self-contained docker build - we pull the official upstream container,
# then template out a dockerfile which builds the real image.
docker-build: postgres_exporter
Expand Down
2 changes: 1 addition & 1 deletion postgres_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
"strconv"
)

var Version string = "0.0.0-dev"
var Version string = "0.0.1"

var (
listenAddress = flag.String(
Expand Down
73 changes: 73 additions & 0 deletions tests/test-smoke
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/bin/bash
# Basic integration tests with postgres. Requires docker to work.

VERSIONS=( \
9.1 \
9.2 \
9.3 \
9.4 \
9.5 \
)

smoketest_postgres() {
local version=$1
local CONTAINER_NAME=postgres_exporter-test-smoke
local TIMEOUT=30
local IMAGE_NAME=postgres

local CUR_IMAGE=$IMAGE_NAME:$version

docker run -d --name=$CONTAINER_NAME -e POSTGRES_PASSWORD=password -p 127.0.0.1:55432:5432 $CUR_IMAGE

local WAIT_START=$(date +%s)
while ! docker exec $CONTAINER_NAME bash -c "psql -U postgres -c \"select 'running'\" > /dev/null 2>&1 " ; do
echo "Waiting for postgres to start..."
if [ $(( $(date +%s) - $WAIT_START )) -gt $TIMEOUT ]; then
echo "Timed out waiting for postgres!" 1>&2
docker logs $CONTAINER_NAME
docker kill $CONTAINER_NAME
docker rm $CONTAINER_NAME
exit 1
fi
sleep 1
done

DATA_SOURCE_NAME="postgresql://postgres:password@localhost:55432/?sslmode=disable" ./postgres_exporter &
exporter_pid=$!
local DAEMON_WAIT_START=$(date +%s)
while ! nc -z localhost 9113 ; do
echo "Waiting for exporter to start..."
if [ $(( $(date +%s) - $WAIT_START )) -gt $TIMEOUT ]; then
echo "Timed out waiting for exporter!" 1>&2
docker logs $CONTAINER_NAME
docker kill $CONTAINER_NAME
docker rm $CONTAINER_NAME
exit 1
fi
sleep 1
done

wget -q -O - http://localhost:9113/metrics 1> /dev/null
if [ "$?" != "0" ]; then
echo "Failed on postgres $version ($DOCKER_IMAGE)" 1>&2
kill $exporter_pid
docker logs $CONTAINER_NAME
docker kill $CONTAINER_NAME
docker rm $CONTAINER_NAME
exit 1
fi

kill $exporter_pid
docker kill $CONTAINER_NAME
docker rm $CONTAINER_NAME
}

# Start pulling the docker images in advance
for version in ${VERSIONS[@]}; do
docker pull postgres:$version > /dev/null &
done

for version in ${VERSIONS[@]}; do
echo "Testing postgres version $version"
smoketest_postgres $version
done