Add an end-to-end test.

This test runs a selection of collectors against the fixtures and
compares the output to a reference.

The uname and filesystem collectors are disabled because they use system
calls that cannot be fixtured easily.
This commit is contained in:
Matthias Rampke 2015-09-26 20:54:49 +02:00 committed by Matthias Rampke
parent 788ac9a859
commit 7c47338081
5 changed files with 1381 additions and 1 deletions

View file

@ -11,3 +11,5 @@ install:
script:
- go test -v ./...
- go build
- ./end-to-end-test.sh -v

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,3 @@
#!/usr/bin/env bash
cat fixtures/megacli_disks.txt
cat "$(dirname "$0")/megacli_disks.txt"

View file

@ -226,6 +226,7 @@ func (c *mdadmCollector) Update(ch chan<- prometheus.Metric) (err error) {
_, err = os.Stat(statusfile)
if os.IsNotExist(err) {
// no such file or directory, nothing to do, just return
log.Debugf("Not collecting mdstat, file does not exist: %s", statusfile)
return nil
}

91
end-to-end-test.sh Executable file
View file

@ -0,0 +1,91 @@
#!/usr/bin/env bash
set +euf +o pipefail
cd "$(dirname $0)"
port="$((10000 + (RANDOM % 10000)))"
tmpdir=$(mktemp -d /tmp/node_exporter_e2e_test.XXXXXX)
skip_re="^(go_|node_exporter_|process_|node_textfile_mtime)"
keep=0; update=0; verbose=0
while getopts 'hkuv' opt
do
case "$opt" in
k)
keep=1
;;
u)
update=1
;;
v)
verbose=1
set -x
;;
*)
echo "Usage: $0 [-k] [-u] [-v]"
echo " -k: keep temporary files and leave node_exporter running"
echo " -u: update fixture"
echo " -v: verbose output"
exit 1
;;
esac
done
./node_exporter \
-collector.procfs="collector/fixtures/proc" \
-collector.sysfs="collector/fixtures/sys" \
-collectors.enabled="diskstats,filefd,loadavg,mdadm,meminfo,netdev,netstat,sockstat,stat,textfile,bonding,megacli" \
-collector.textfile.directory="collector/fixtures/textfile/two_metric_files/" \
-collector.megacli.command="collector/fixtures/megacli" \
-web.listen-address "127.0.0.1:${port}" \
-log.level="debug" > "${tmpdir}/node_exporter.log" 2>&1 &
echo $! > "${tmpdir}/node_exporter.pid"
finish() {
if [ ${verbose} -ne 0 ]
then
echo "LOG ====================="
cat "${tmpdir}/node_exporter.log"
echo "========================="
fi
if [ ${update} -ne 0 ]
then
cp "${tmpdir}/e2e-output.txt" "collector/fixtures/e2e-output.txt"
fi
if [ ${keep} -eq 0 ]
then
kill -9 "$(cat ${tmpdir}/node_exporter.pid)"
# This silences the "Killed" message
wait "$(cat ${tmpdir}/node_exporter.pid)" > /dev/null 2>&1
rm -rf "${tmpdir}"
fi
}
trap finish EXIT
get() {
if which curl > /dev/null 2>&1
then
curl -s -f "$@"
elif which wget > /dev/null 2>&1
then
wget -O - "$@"
else
echo "Neither curl nor wget found"
exit 1
fi
}
sleep 1
get "127.0.0.1:${port}/metrics" > "${tmpdir}/e2e-output.txt"
diff -u \
<(grep -E -v "${skip_re}" "collector/fixtures/e2e-output.txt") \
<(grep -E -v "${skip_re}" "${tmpdir}/e2e-output.txt")