Add Query support for Nodes (no filtering, no RPC)
[ganeti-local] / htools / offline-test.sh
index 28a5ad2..cd62c0c 100755 (executable)
 # 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