Statistics
| Branch: | Tag: | Revision:

root / htools / offline-test.sh @ a1741ae5

History | View | Annotate | Download (4.3 kB)

1 42089b55 Iustin Pop
#!/bin/bash
2 42089b55 Iustin Pop
3 42089b55 Iustin Pop
# Copyright (C) 2012 Google Inc.
4 42089b55 Iustin Pop
5 42089b55 Iustin Pop
# This program is free software; you can redistribute it and/or modify
6 42089b55 Iustin Pop
# it under the terms of the GNU General Public License as published by
7 42089b55 Iustin Pop
# the Free Software Foundation; either version 2 of the License, or
8 42089b55 Iustin Pop
# (at your option) any later version.
9 42089b55 Iustin Pop
10 42089b55 Iustin Pop
# This program is distributed in the hope that it will be useful, but
11 42089b55 Iustin Pop
# WITHOUT ANY WARRANTY; without even the implied warranty of
12 42089b55 Iustin Pop
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 42089b55 Iustin Pop
# General Public License for more details.
14 42089b55 Iustin Pop
15 42089b55 Iustin Pop
# You should have received a copy of the GNU General Public License
16 42089b55 Iustin Pop
# along with this program; if not, write to the Free Software
17 42089b55 Iustin Pop
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 42089b55 Iustin Pop
# 02110-1301, USA.
19 42089b55 Iustin Pop
20 42089b55 Iustin Pop
# This is an offline testing script for most/all of the htools
21 42089b55 Iustin Pop
# programs, checking basic command line functionality.
22 42089b55 Iustin Pop
23 42089b55 Iustin Pop
set -e
24 42089b55 Iustin Pop
25 42089b55 Iustin Pop
. $(dirname $0)/cli-tests-defs.sh
26 42089b55 Iustin Pop
27 3e7220e4 Iustin Pop
T=`mktemp -d`
28 3e7220e4 Iustin Pop
trap 'rm -rf $T' EXIT
29 3e7220e4 Iustin Pop
trap 'echo FAIL' ERR
30 3e7220e4 Iustin Pop
echo Using $T as temporary dir
31 3e7220e4 Iustin Pop
32 3e7220e4 Iustin Pop
echo Checking command line basic options
33 42089b55 Iustin Pop
for prog in $ALL_ROLES; do
34 42089b55 Iustin Pop
  $prog --version >/dev/null
35 42089b55 Iustin Pop
  $prog --help >/dev/null
36 42089b55 Iustin Pop
  ! $prog --no-such-option 2>/dev/null
37 42089b55 Iustin Pop
done
38 3e7220e4 Iustin Pop
echo OK
39 3e7220e4 Iustin Pop
40 3e7220e4 Iustin Pop
echo Checking missing backend failure
41 3e7220e4 Iustin Pop
for prog in hspace hinfo hbal; do
42 3e7220e4 Iustin Pop
  ! $prog 2>/dev/null
43 3e7220e4 Iustin Pop
done
44 3e7220e4 Iustin Pop
echo OK
45 3e7220e4 Iustin Pop
46 3e7220e4 Iustin Pop
echo Checking hail missing input file
47 3e7220e4 Iustin Pop
! hail 2>/dev/null
48 3e7220e4 Iustin Pop
echo OK
49 3e7220e4 Iustin Pop
50 3e7220e4 Iustin Pop
echo Checking extra arguments
51 3e7220e4 Iustin Pop
for prog in hspace hbal hinfo; do
52 3e7220e4 Iustin Pop
  ! $prog unexpected-argument 2>&1 | \
53 3e7220e4 Iustin Pop
    grep -q "Error: this program doesn't take any arguments"
54 3e7220e4 Iustin Pop
done
55 3e7220e4 Iustin Pop
echo OK
56 3e7220e4 Iustin Pop
57 3e7220e4 Iustin Pop
echo Checking failure on multiple backends
58 3e7220e4 Iustin Pop
(! hbal -t /dev/null -m localhost 2>&1 ) | \
59 3e7220e4 Iustin Pop
  grep -q "Error: Only one of the rapi, luxi, and data files options should be given."
60 3e7220e4 Iustin Pop
echo OK
61 3e7220e4 Iustin Pop
62 3e7220e4 Iustin Pop
echo Checking hspace machine-readable mode
63 3e7220e4 Iustin Pop
hspace --simu p,4,8T,64g,16 --machine-readable \
64 3e7220e4 Iustin Pop
  --disk-template drbd -l 8 >$T/capacity
65 3e7220e4 Iustin Pop
( . $T/capacity && test "$HTS_OK" = "1" )
66 3e7220e4 Iustin Pop
echo OK
67 3e7220e4 Iustin Pop
68 3e7220e4 Iustin Pop
echo Checking hspace simulation to hinfo to hbal
69 3e7220e4 Iustin Pop
# this cluster spec should be fine
70 3e7220e4 Iustin Pop
hspace --simu p,4,8T,64g,16 -S $T/simu-onegroup \
71 3e7220e4 Iustin Pop
  --disk-template drbd -l 8 -v -v -v >/dev/null 2>&1
72 3e7220e4 Iustin Pop
# results in .tiered and .standard
73 3e7220e4 Iustin Pop
for suffix in standard tiered; do
74 3e7220e4 Iustin Pop
  BACKEND="-t$T/simu-onegroup.$suffix"
75 3e7220e4 Iustin Pop
  hinfo -v -v -p --print-instances $BACKEND >/dev/null 2>&1
76 3e7220e4 Iustin Pop
  hbal  -v -v -p --print-instances $BACKEND >/dev/null 2>&1
77 3e7220e4 Iustin Pop
  # hbal should not be able to balance
78 3e7220e4 Iustin Pop
  hbal $BACKEND | grep -qE "(Nothing to do, exiting|No solution found)"
79 3e7220e4 Iustin Pop
done
80 3e7220e4 Iustin Pop
echo OK
81 3e7220e4 Iustin Pop
82 3e7220e4 Iustin Pop
echo Checking hinfo and hbal on multi-nodegroup
83 3e7220e4 Iustin Pop
hspace --simu p,4,8T,64g,16 --simu p,4,8T,64g,16 \
84 3e7220e4 Iustin Pop
  -S $T/simu-twogroups --disk-template drbd -l 8 >/dev/null 2>&1
85 3e7220e4 Iustin Pop
# results in .tiered and .standard
86 3e7220e4 Iustin Pop
for suffix in standard tiered; do
87 3e7220e4 Iustin Pop
  BACKEND="-t$T/simu-twogroups.$suffix"
88 3e7220e4 Iustin Pop
  hinfo -v -v -p --print-instances $BACKEND >/dev/null 2>&1
89 3e7220e4 Iustin Pop
  ! hbal $BACKEND >/dev/null 2>&1
90 3e7220e4 Iustin Pop
  # hbal should not be able to balance
91 3e7220e4 Iustin Pop
  ! hbal $BACKEND 2>&1 | grep -q "Found multiple node groups"
92 3e7220e4 Iustin Pop
  # but hbal should be able to balance one node group
93 3e7220e4 Iustin Pop
  hbal $BACKEND -G group-01 >/dev/null
94 3e7220e4 Iustin Pop
  # and it should not find an invalid group
95 3e7220e4 Iustin Pop
  ! hbal $BACKEND -G no-such-group >/dev/null 2>&1
96 3e7220e4 Iustin Pop
done
97 3e7220e4 Iustin Pop
echo OK
98 42089b55 Iustin Pop
99 16197d69 Iustin Pop
echo Checking rebalancing
100 16197d69 Iustin Pop
# we generate a cluster with two node groups, one with unallocable
101 16197d69 Iustin Pop
# policy, then we change all nodes from this group to the allocable
102 16197d69 Iustin Pop
# one, and we check for rebalancing
103 16197d69 Iustin Pop
FROOT="$T/simu-rebal-orig"
104 16197d69 Iustin Pop
hspace --simu p,4,8T,64g,16 --simu u,4,8T,64g,16 \
105 16197d69 Iustin Pop
  -S $FROOT --disk-template drbd -l 8 >/dev/null 2>&1
106 16197d69 Iustin Pop
for suffix in standard tiered; do
107 16197d69 Iustin Pop
  RELOC="$T/simu-rebal-merged.$suffix"
108 16197d69 Iustin Pop
  # this relocates the nodes
109 16197d69 Iustin Pop
  sed -re 's/^(node-.*|fake-uuid-)-02(|.*)/\1-01\2/' \
110 16197d69 Iustin Pop
    < $FROOT.$suffix > $RELOC
111 16197d69 Iustin Pop
  BACKEND="-t$RELOC"
112 16197d69 Iustin Pop
  hinfo -v -v -p --print-instances $BACKEND >/dev/null 2>&1
113 16197d69 Iustin Pop
  hbal -v -v -v -p --print-instances $BACKEND -G group-01 2>/dev/null | \
114 16197d69 Iustin Pop
    grep -qE -v "(Nothing to do, exiting|No solution found)"
115 16197d69 Iustin Pop
  hbal $BACKEND -G group-01 -C$T/rebal-cmds.$suffix \
116 16197d69 Iustin Pop
    -S $T/simu-rebal.$suffix >/dev/null 2>&1
117 16197d69 Iustin Pop
  grep -qE "gnt-instance (failover|migrate|replace-disks)" \
118 16197d69 Iustin Pop
    $T/rebal-cmds.$suffix
119 16197d69 Iustin Pop
  hbal $BACKEND -G group-01 -C \
120 16197d69 Iustin Pop
    -S $T/simu-rebal.$suffix 2>/dev/null | \
121 16197d69 Iustin Pop
    grep -qE "gnt-instance (failover|migrate|replace-disks)"
122 16197d69 Iustin Pop
  # state saved by hbal should be original
123 16197d69 Iustin Pop
  cmp $RELOC $T/simu-rebal.$suffix.original
124 16197d69 Iustin Pop
  # and we can't double rebalance
125 16197d69 Iustin Pop
  hbal -t $T/simu-rebal.$suffix.balanced \
126 16197d69 Iustin Pop
    -G group-01 | \
127 16197d69 Iustin Pop
    grep -qE "(Nothing to do, exiting|No solution found)"
128 16197d69 Iustin Pop
129 16197d69 Iustin Pop
done
130 16197d69 Iustin Pop
echo OK
131 16197d69 Iustin Pop
132 42089b55 Iustin Pop
echo All OK