1
- #! /bin/bash
1
+ #! /bin/bash -x
2
2
# Basic integration tests with postgres. Requires docker to work.
3
3
4
4
SOURCE=" ${BASH_SOURCE[0]} "
@@ -38,39 +38,41 @@ VERSIONS=( \
38
38
wait_for_postgres (){
39
39
local ip=$1
40
40
local port=$2
41
- if [ -z $ip ]; then
41
+ if [ -z " $ip " ]; then
42
42
echo " No IP specified." 1>&2
43
43
exit 1
44
44
fi
45
45
46
- if [ -z $port ]; then
46
+ if [ -z " $port " ]; then
47
47
echo " No port specified." 1>&2
48
48
exit 1
49
49
fi
50
50
51
51
local wait_start
52
52
wait_start=$( date +%s) || exit 1
53
53
echo " Waiting for postgres to start listening..."
54
- while ! pg_isready --host=$ip --port=$port & > /dev/null; do
55
- if [ $(( $(date +% s) - $ wait_start )) -gt $TIMEOUT ]; then
54
+ while ! pg_isready --host=" $ip " --port=" $port " & > /dev/null; do
55
+ if [ $(( $(date +% s) - wait_start )) -gt " $TIMEOUT " ]; then
56
56
echo " Timed out waiting for postgres to start!" 1>&2
57
57
exit 1
58
58
fi
59
59
sleep 1
60
60
done
61
+ echo " Postgres is online at $ip :$port "
61
62
}
62
63
63
64
wait_for_exporter () {
64
65
local wait_start
65
66
wait_start=$( date +%s) || exit 1
66
67
echo " Waiting for exporter to start..."
67
- while ! nc -z localhost $exporter_port ; do
68
- if [ $(( $(date +% s) - $ wait_start )) -gt $TIMEOUT ]; then
68
+ while ! nc -z localhost " $exporter_port " ; do
69
+ if [ $(( $(date +% s) - wait_start )) -gt " $TIMEOUT " ]; then
69
70
echo " Timed out waiting for exporter!" 1>&2
70
71
exit 1
71
72
fi
72
73
sleep 1
73
74
done
75
+ echo " Exporter is online at localhost:$exporter_port "
74
76
}
75
77
76
78
smoketest_postgres () {
@@ -89,22 +91,24 @@ smoketest_postgres() {
89
91
90
92
CONTAINER_NAME=$( $docker_cmd )
91
93
standalone_ip=$( docker inspect -f ' {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER_NAME )
94
+ # shellcheck disable=SC2064
92
95
trap " docker logs $CONTAINER_NAME ; docker kill $CONTAINER_NAME ; docker rm -v $CONTAINER_NAME ; exit 1" EXIT INT TERM
93
- wait_for_postgres $standalone_ip 5432
94
-
96
+ wait_for_postgres " $standalone_ip " 5432
95
97
96
98
# Run the test binary.
97
99
DATA_SOURCE_NAME=" postgresql://postgres:$POSTGRES_PASSWORD @$standalone_ip :5432/?sslmode=disable" $test_binary || exit $?
98
100
99
101
# Extract a raw metric list.
100
- DATA_SOURCE_NAME=" postgresql://postgres:$POSTGRES_PASSWORD @$standalone_ip :5432/?sslmode=disable" $postgres_exporter --log.level=debug --web.listen-address=:$exporter_port &
102
+ DATA_SOURCE_NAME=" postgresql://postgres:$POSTGRES_PASSWORD @$standalone_ip :5432/?sslmode=disable" $postgres_exporter \
103
+ --log.level=debug --web.listen-address=:$exporter_port &
101
104
exporter_pid=$!
105
+ # shellcheck disable=SC2064
102
106
trap " docker logs $CONTAINER_NAME ; docker kill $CONTAINER_NAME ; docker rm -v $CONTAINER_NAME ; kill $exporter_pid ; exit 1" EXIT INT TERM
103
107
wait_for_exporter
104
108
105
109
# Dump the metrics to a file.
106
- if wget -q -O - http://localhost:$exporter_port /metrics 1> " $METRICS_DIR /.metrics.single.$version .prom" ; then
107
- echo " Failed on postgres $version ($DOCKER_IMAGE )" 1>&2
110
+ if ! wget -q -O - http://localhost:$exporter_port /metrics 1> " $METRICS_DIR /.metrics.single.$version .prom" ; then
111
+ echo " Failed on postgres $version (standalone $DOCKER_IMAGE )" 1>&2
108
112
kill $exporter_pid
109
113
exit 1
110
114
fi
@@ -117,8 +121,8 @@ smoketest_postgres() {
117
121
fi
118
122
119
123
kill $exporter_pid
120
- docker kill $CONTAINER_NAME
121
- docker rm -v $CONTAINER_NAME
124
+ docker kill " $CONTAINER_NAME "
125
+ docker rm -v " $CONTAINER_NAME "
122
126
trap - EXIT INT TERM
123
127
124
128
echo " #######################"
@@ -127,7 +131,7 @@ smoketest_postgres() {
127
131
old_pwd=$( pwd)
128
132
cd docker-postgres-replication || exit 1
129
133
130
- if VERSION=" $version " p2 -t Dockerfile.p2 -o Dockerfile ; then
134
+ if ! VERSION=" $version " p2 -t Dockerfile.p2 -o Dockerfile ; then
131
135
echo " Templating failed" 1>&2
132
136
exit 1
133
137
fi
@@ -146,14 +150,15 @@ smoketest_postgres() {
146
150
147
151
DATA_SOURCE_NAME=" postgresql://postgres:$POSTGRES_PASSWORD @$master_ip :5432/?sslmode=disable" $test_binary || exit $?
148
152
149
- DATA_SOURCE_NAME=" postgresql://postgres:$POSTGRES_PASSWORD @$master_ip :5432/?sslmode=disable" $postgres_exporter --log.level=debug --web.listen-address=:$exporter_port &
153
+ DATA_SOURCE_NAME=" postgresql://postgres:$POSTGRES_PASSWORD @$master_ip :5432/?sslmode=disable" $postgres_exporter \
154
+ --log.level=debug --web.listen-address=:$exporter_port &
150
155
exporter_pid=$!
151
156
# shellcheck disable=SC2064
152
157
trap " docker-compose logs; docker-compose down ; docker-compose rm -v ; kill $exporter_pid ; exit 1" EXIT INT TERM
153
158
wait_for_exporter
154
159
155
- if wget -q -O - http://localhost:$exporter_port /metrics 1> " $METRICS_DIR /.metrics.replicated.$version .prom" ; then
156
- echo " Failed on postgres $version ($DOCKER_IMAGE )" 1>&2
160
+ if ! wget -q -O - http://localhost:$exporter_port /metrics 1> " $METRICS_DIR /.metrics.replicated.$version .prom" ; then
161
+ echo " Failed on postgres $version (replicated $DOCKER_IMAGE )" 1>&2
157
162
exit 1
158
163
fi
159
164
0 commit comments