X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/3e7220e4eb093906e659f2cd5abf9807ae24bd96..046fe3f59a2bddf5c6c46d44e9b4520e68731ca3:/htools/offline-test.sh diff --git a/htools/offline-test.sh b/htools/offline-test.sh index 28a5ad2..cd62c0c 100755 --- a/htools/offline-test.sh +++ b/htools/offline-test.sh @@ -21,79 +21,73 @@ # programs, checking basic command line functionality. set -e +set -o pipefail . $(dirname $0)/cli-tests-defs.sh -T=`mktemp -d` +echo Running offline htools tests + +export T=`mktemp -d` trap 'rm -rf $T' EXIT -trap 'echo FAIL' ERR +trap 'echo FAIL to build test files' ERR echo Using $T as temporary dir -echo Checking command line basic options -for prog in $ALL_ROLES; do - $prog --version >/dev/null - $prog --help >/dev/null - ! $prog --no-such-option 2>/dev/null -done -echo OK - -echo Checking missing backend failure -for prog in hspace hinfo hbal; do - ! $prog 2>/dev/null -done +echo -n Generating hspace simulation data for hinfo and hbal... +# this cluster spec should be fine +./test/hspace --simu p,4,8T,64g,16 -S $T/simu-onegroup \ + --disk-template drbd -l 8 -v -v -v >/dev/null 2>&1 echo OK -echo Checking hail missing input file -! hail 2>/dev/null +echo -n Generating hinfo and hbal test files for multi-group... +./test/hspace --simu p,4,8T,64g,16 --simu p,4,8T,64g,16 \ + -S $T/simu-twogroups --disk-template drbd -l 8 >/dev/null 2>&1 echo OK -echo Checking extra arguments -for prog in hspace hbal hinfo; do - ! $prog unexpected-argument 2>&1 | \ - grep -q "Error: this program doesn't take any arguments" +echo -n Generating test files for rebalancing... +# we generate a cluster with two node groups, one with unallocable +# policy, then we change all nodes from this group to the allocable +# one, and we check for rebalancing +FROOT="$T/simu-rebal-orig" +./test/hspace --simu u,4,8T,64g,16 --simu p,4,8T,64g,16 \ + -S $FROOT --disk-template drbd -l 8 >/dev/null 2>&1 +for suffix in standard tiered; do + RELOC="$T/simu-rebal-merged.$suffix" + # this relocates the nodes + sed -re 's/^(node-.*|fake-uuid-)-02(|.*)/\1-01\2/' \ + < $FROOT.$suffix > $RELOC done +export BACKEND_BAL_STD="-t$T/simu-rebal-merged.standard" +export BACKEND_BAL_TIER="-t$T/simu-rebal-merged.tiered" echo OK -echo Checking failure on multiple backends -(! hbal -t /dev/null -m localhost 2>&1 ) | \ - grep -q "Error: Only one of the rapi, luxi, and data files options should be given." -echo OK - -echo Checking hspace machine-readable mode -hspace --simu p,4,8T,64g,16 --machine-readable \ - --disk-template drbd -l 8 >$T/capacity -( . $T/capacity && test "$HTS_OK" = "1" ) -echo OK +# For various tests +export BACKEND_DYNU="-t $T/simu-onegroup.standard" +export BACKEND_EXCL="-t $T/simu-onegroup.standard" -echo Checking hspace simulation to hinfo to hbal -# this cluster spec should be fine -hspace --simu p,4,8T,64g,16 -S $T/simu-onegroup \ - --disk-template drbd -l 8 -v -v -v >/dev/null 2>&1 -# results in .tiered and .standard -for suffix in standard tiered; do - BACKEND="-t$T/simu-onegroup.$suffix" - hinfo -v -v -p --print-instances $BACKEND >/dev/null 2>&1 - hbal -v -v -p --print-instances $BACKEND >/dev/null 2>&1 - # hbal should not be able to balance - hbal $BACKEND | grep -qE "(Nothing to do, exiting|No solution found)" +echo -n Generating data files for IAllocator checks... +for evac_mode in primary-only secondary-only all; do + sed -e 's/"evac_mode": "all"/"evac_mode": "'${evac_mode}'"/' \ + < $TESTDATA_DIR/hail-node-evac.json \ + > $T/hail-node-evac.json.$evac_mode done echo OK -echo Checking hinfo and hbal on multi-nodegroup -hspace --simu p,4,8T,64g,16 --simu p,4,8T,64g,16 \ - -S $T/simu-twogroups --disk-template drbd -l 8 >/dev/null 2>&1 -# results in .tiered and .standard -for suffix in standard tiered; do - BACKEND="-t$T/simu-twogroups.$suffix" - hinfo -v -v -p --print-instances $BACKEND >/dev/null 2>&1 - ! hbal $BACKEND >/dev/null 2>&1 - # hbal should not be able to balance - ! hbal $BACKEND 2>&1 | grep -q "Found multiple node groups" - # but hbal should be able to balance one node group - hbal $BACKEND -G group-01 >/dev/null - # and it should not find an invalid group - ! hbal $BACKEND -G no-such-group >/dev/null 2>&1 -done +echo -n Checking file-based RAPI... +mkdir -p $T/hscan +export RAPI_URL="file://$TESTDATA_DIR/rapi" +./test/hscan -d $T/hscan/ -p -v -v $RAPI_URL >/dev/null 2>&1 +# check that we file parsing is correct, i.e. hscan saves correct text +# files, and is idempotent (rapi+text == rapi); more is tested in +# shelltest later +RAPI_TXT="$(ls $T/hscan/*.data|head -n1)" +./test/hinfo -p --print-instances -m $RAPI_URL > $T/hscan/direct.hinfo 2>&1 +./test/hinfo -p --print-instances -t $RAPI_TXT > $T/hscan/fromtext.hinfo 2>&1 echo OK +echo Running shelltest... + +shelltest $SHELLTESTARGS \ + ${TOP_SRCDIR:-.}/test/htools-*.test \ + -- --hide-successes + echo All OK