Unit tests for spindles and exclusive storage in htools
[ganeti-local] / test / hs / offline-test.sh
1 #!/bin/bash
2
3 # Copyright (C) 2012 Google Inc.
4
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9
10 # This program is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 # General Public License for more details.
14
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 # 02110-1301, USA.
19
20 # This is an offline testing script for most/all of the htools
21 # programs, checking basic command line functionality.
22
23 set -e
24 set -o pipefail
25
26 . $(dirname $0)/cli-tests-defs.sh
27
28 echo Running offline htools tests
29
30 export T=`mktemp -d`
31 trap 'rm -rf $T' EXIT
32 trap 'echo FAIL to build test files' ERR
33 echo Using $T as temporary dir
34
35 echo -n Generating hspace simulation data for hinfo and hbal...
36 # this cluster spec should be fine
37 ./test/hs/hspace --simu p,4,8T,64g,16 -S $T/simu-onegroup \
38   --disk-template drbd -l 8 -v -v -v >/dev/null 2>&1
39 echo OK
40
41 echo -n Generating hinfo and hbal test files for multi-group...
42 ./test/hs/hspace --simu p,4,8T,64g,16 --simu p,4,8T,64g,16 \
43   -S $T/simu-twogroups --disk-template drbd -l 8 >/dev/null 2>&1
44 echo OK
45
46 echo -n Generating test files for rebalancing...
47 # we generate a cluster with two node groups, one with unallocable
48 # policy, then we change all nodes from this group to the allocable
49 # one, and we check for rebalancing
50 FROOT="$T/simu-rebal-orig"
51 ./test/hs/hspace --simu u,4,8T,64g,16 --simu p,4,8T,64g,16 \
52   -S $FROOT --disk-template drbd -l 8 >/dev/null 2>&1
53 for suffix in standard tiered; do
54   RELOC="$T/simu-rebal-merged.$suffix"
55   # this relocates the nodes
56   sed -re 's/^(node-.*|fake-uuid-)-02(|.*)/\1-01\2/' \
57     < $FROOT.$suffix > $RELOC
58 done
59 export BACKEND_BAL_STD="-t$T/simu-rebal-merged.standard"
60 export BACKEND_BAL_TIER="-t$T/simu-rebal-merged.tiered"
61 echo OK
62
63 # For various tests
64 export BACKEND_DYNU="-t $T/simu-onegroup.standard"
65 export BACKEND_EXCL="-t $T/simu-onegroup.standard"
66
67 echo -n Generating data files for IAllocator checks...
68 for evac_mode in primary-only secondary-only all; do
69   sed -e 's/"evac_mode": "all"/"evac_mode": "'${evac_mode}'"/' \
70     -e 's/"spindles": [0-9]\+,//' \
71     < $TESTDATA_DIR/hail-node-evac.json \
72     > $T/hail-node-evac.json.$evac_mode
73 done
74 for bf in hail-alloc-drbd hail-alloc-invalid-twodisks hail-alloc-twodisks \
75   hail-change-group hail-node-evac hail-reloc-drbd hail-alloc-spindles; do
76   f=$bf.json
77   sed -e 's/"exclusive_storage": false/"exclusive_storage": true/' \
78     < $TESTDATA_DIR/$f > $T/$f.excl-stor
79   sed -e 's/"exclusive_storage": false/"exclusive_storage": true/' \
80     -e 's/"spindles": [0-9]\+,//' \
81     < $TESTDATA_DIR/$f > $T/$f.fail-excl-stor
82 done
83 echo OK
84
85 echo -n Checking file-based RAPI...
86 mkdir -p $T/hscan
87 export RAPI_URL="file://$TESTDATA_DIR/rapi"
88 ./test/hs/hscan -d $T/hscan/ -p -v -v $RAPI_URL >/dev/null 2>&1
89 # check that we file parsing is correct, i.e. hscan saves correct text
90 # files, and is idempotent (rapi+text == rapi); more is tested in
91 # shelltest later
92 RAPI_TXT="$(ls $T/hscan/*.data|head -n1)"
93 ./test/hs/hinfo -p --print-instances -m $RAPI_URL > $T/hscan/direct.hinfo 2>&1
94 ./test/hs/hinfo -p --print-instances -t $RAPI_TXT > $T/hscan/fromtext.hinfo 2>&1
95 echo OK
96
97 echo Running shelltest...
98
99 shelltest $SHELLTESTARGS \
100   ${TOP_SRCDIR:-.}/test/hs/shelltests/htools-*.test \
101   -- --hide-successes
102
103 echo All OK