Commit cefd4a4a authored by Michele Tartara's avatar Michele Tartara

Add shelltests for the mon-collector

This commit adds shelltests for the mon-collector binary and for the DRBD
data collector.

Also, it fixes a small bug in the DRBD parser found thanks to the tests.
Signed-off-by: default avatarMichele Tartara <mtartara@google.com>
Reviewed-by: default avatarIustin Pop <iustin@google.com>
parent 332b1340
...@@ -413,6 +413,7 @@ HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail ...@@ -413,6 +413,7 @@ HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail
HS_ALL_PROGS = \ HS_ALL_PROGS = \
$(HS_PROGS) \ $(HS_PROGS) \
htest/hpc-htools \ htest/hpc-htools \
htest/hpc-mon-collector \
htest/test \ htest/test \
htools/hconfd \ htools/hconfd \
htools/rpc-test htools/rpc-test
...@@ -678,8 +679,11 @@ htest/test: HEXTRA_INT=-fhpc -ihtest ...@@ -678,8 +679,11 @@ htest/test: HEXTRA_INT=-fhpc -ihtest
# we compile the hpc-htools binary with the program coverage # we compile the hpc-htools binary with the program coverage
htest/hpc-htools: HEXTRA_INT=-fhpc htest/hpc-htools: HEXTRA_INT=-fhpc
# we compile the hpc-mon-collector binary with the program coverage
htest/hpc-mon-collector: HEXTRA_INT=-fhpc
# test dependency # test dependency
htest/offline-tests.sh: htest/hpc-htools htest/offline-tests.sh: htest/hpc-htools htest/hpc-mon-collector
# rules for building profiling-enabled versions of the haskell # rules for building profiling-enabled versions of the haskell
# programs: hs-prof does the full two-step build, whereas # programs: hs-prof does the full two-step build, whereas
...@@ -872,6 +876,7 @@ TEST_FILES = \ ...@@ -872,6 +876,7 @@ TEST_FILES = \
htest/shelltests/htools-rapi.test \ htest/shelltests/htools-rapi.test \
htest/shelltests/htools-single-group.test \ htest/shelltests/htools-single-group.test \
htest/shelltests/htools-text-backend.test \ htest/shelltests/htools-text-backend.test \
htest/shelltests/htools-mon-collector.test \
test/data/bdev-drbd-8.0.txt \ test/data/bdev-drbd-8.0.txt \
test/data/bdev-drbd-8.3.txt \ test/data/bdev-drbd-8.3.txt \
test/data/bdev-drbd-disk.txt \ test/data/bdev-drbd-disk.txt \
...@@ -1027,7 +1032,10 @@ check_SCRIPTS = ...@@ -1027,7 +1032,10 @@ check_SCRIPTS =
if WANT_HTOOLSTESTS if WANT_HTOOLSTESTS
nodist_TESTS += $(haskell_tests) nodist_TESTS += $(haskell_tests)
dist_TESTS += htest/offline-test.sh dist_TESTS += htest/offline-test.sh
check_SCRIPTS += htest/hpc-htools $(HS_BUILT_TEST_HELPERS) check_SCRIPTS += \
htest/hpc-htools \
htest/hpc-mon-collector \
$(HS_BUILT_TEST_HELPERS)
endif endif
TESTS = $(dist_TESTS) $(nodist_TESTS) TESTS = $(dist_TESTS) $(nodist_TESTS)
...@@ -1509,7 +1517,7 @@ check-local: check-dirs $(GENERATED_FILES) ...@@ -1509,7 +1517,7 @@ check-local: check-dirs $(GENERATED_FILES)
test -z "$$error" test -z "$$error"
.PHONY: hs-check .PHONY: hs-check
hs-check: htest/test htest/hpc-htools $(HS_BUILT_TEST_HELPERS) hs-check: htest/test htest/hpc-htools htest/hpc-mon-collector $(HS_BUILT_TEST_HELPERS)
@rm -f test.tix @rm -f test.tix
./htest/test ./htest/test
HBINARY="./htest/hpc-htools" ./htest/offline-test.sh HBINARY="./htest/hpc-htools" ./htest/offline-test.sh
...@@ -1726,12 +1734,12 @@ py-coverage: $(GENERATED_FILES) $(python_tests) ...@@ -1726,12 +1734,12 @@ py-coverage: $(GENERATED_FILES) $(python_tests)
$(python_tests) $(python_tests)
.PHONY: hs-coverage .PHONY: hs-coverage
hs-coverage: $(haskell_tests) htest/hpc-htools hs-coverage: $(haskell_tests) htest/hpc-htools htest/hpc-mon-collector
rm -f *.tix rm -f *.tix
$(MAKE) $(AM_MAKEFLAGS) hs-check $(MAKE) $(AM_MAKEFLAGS) hs-check
@mkdir_p@ $(COVERAGE_HS_DIR) @mkdir_p@ $(COVERAGE_HS_DIR)
hpc combine --union $(HPCEXCL) \ hpc combine --union $(HPCEXCL) \
test.tix hpc-htools.tix > coverage-htools.tix test.tix hpc-htools.tix hpc-mon-collector.tix > coverage-htools.tix
hpc markup --destdir=$(COVERAGE_HS_DIR) coverage-htools.tix hpc markup --destdir=$(COVERAGE_HS_DIR) coverage-htools.tix
hpc report coverage-htools.tix hpc report coverage-htools.tix
$(LN_S) -f hpc_index.html $(COVERAGE_HS_DIR)/index.html $(LN_S) -f hpc_index.html $(COVERAGE_HS_DIR)/index.html
......
...@@ -17,14 +17,14 @@ mv $tmpdir/lib $tmpdir/ganeti ...@@ -17,14 +17,14 @@ mv $tmpdir/lib $tmpdir/ganeti
ln -T -s $tmpdir/ganeti $tmpdir/lib ln -T -s $tmpdir/ganeti $tmpdir/lib
mkdir -p $tmpdir/htools $tmpdir/htest mkdir -p $tmpdir/htools $tmpdir/htest
for hfile in htools ganeti-confd; do for hfile in htools ganeti-confd mon-collector; do
if [ -e htools/$hfile ]; then if [ -e htools/$hfile ]; then
cp -p htools/$hfile $tmpdir/htools/ cp -p htools/$hfile $tmpdir/htools/
fi fi
done done
for hfile in hpc-htools test offline-test.sh cli-tests-defs.sh \ for hfile in hpc-htools test offline-test.sh cli-tests-defs.sh \
hbal hscan hspace hinfo hcheck hail; do hbal hscan hspace hinfo hcheck hail hpc-mon-collector; do
if [ -e htest/$hfile ]; then if [ -e htest/$hfile ]; then
cp -p htest/$hfile $tmpdir/htest/ cp -p htest/$hfile $tmpdir/htest/
fi fi
......
../htools/mon-collector.hs
\ No newline at end of file
# 1. Test that mon-collector won't run without specifying a personality
./htest/hpc-mon-collector
>>>= !0
# 2. Test that the drbd collector fails parsing /dev/null
./htest/hpc-mon-collector drbd /dev/null
>>>2
Error: ""
[]
Failed reading: versionInfo
>>>= !0
# 3. Test that the drbd collector fails parsing /dev/zero, but is not
# stuck forever printing \NUL chars
./htest/hpc-mon-collector drbd /dev/zero
>>>2
Error: "\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL"
[]
Failed reading: versionInfo
>>>= !0
...@@ -31,6 +31,7 @@ import Control.Applicative ((<*>), (*>), (<*), (<$>), (<|>), pure) ...@@ -31,6 +31,7 @@ import Control.Applicative ((<*>), (*>), (<*), (<$>), (<|>), pure)
import qualified Data.Attoparsec.Text as A import qualified Data.Attoparsec.Text as A
import qualified Data.Attoparsec.Combinator as AC import qualified Data.Attoparsec.Combinator as AC
import Data.Attoparsec.Text (Parser) import Data.Attoparsec.Text (Parser)
import Data.Maybe
import Data.Text (Text, unpack) import Data.Text (Text, unpack)
import Ganeti.Block.Drbd.Types import Ganeti.Block.Drbd.Types
...@@ -68,14 +69,22 @@ drbdStatusParser = ...@@ -68,14 +69,22 @@ drbdStatusParser =
-- | The parser for the version information lines. -- | The parser for the version information lines.
versionInfoParser :: Parser VersionInfo versionInfoParser :: Parser VersionInfo
versionInfoParser = versionInfoParser = do
VersionInfo versionF <- optional versionP
<$> optional versionP apiF <- optional apiP
<*> optional apiP protoF <- optional protoP
<*> optional protoP srcVersionF <- optional srcVersion
<*> optional srcVersion ghF <- fmap unpack <$> optional gh
<*> (fmap unpack <$> optional gh) builderF <- fmap unpack <$> optional builder
<*> (fmap unpack <$> optional builder) if isNothing versionF
&& isNothing apiF
&& isNothing protoF
&& isNothing srcVersionF
&& isNothing ghF
&& isNothing builderF
then fail "versionInfo"
else pure $ VersionInfo versionF apiF protoF srcVersionF ghF builderF
where versionP = where versionP =
A.string "version:" A.string "version:"
*> skipSpaces *> skipSpaces
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment