Document the rapi client not to have a QueryNetworks method
[ganeti-local] / devel / check-split-query
1 #!/bin/bash
2
3 # Copyright (C) 2013 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 # Checks query equivalence between masterd and confd
21 #
22 # This is not (currently) run automatically during QA, but you can run
23 # it manually on a test cluster. It will force all queries known to be
24 # converted via both paths and check the difference, via both 'list'
25 # and 'list-fields'. For best results, it should be run on a non-empty
26 # cluster.
27 #
28 # Also note that this is not expected to show 100% perfect matches,
29 # since the JSON output differs slightly for complex data types
30 # (e.g. dictionaries with different sort order for keys, etc.).
31 #
32 # Current known delta:
33 # - all dicts, sort order
34 # - ctime is always defined in Haskell as epoch 0 if missing
35
36 MA=`mktemp master.XXXXXX`
37 CF=`mktemp confd.XXXXXX`
38 trap 'rm -f "$MA" "$CF"' EXIT
39 trap 'exit 1' SIGINT
40
41 RET=0
42 SEP="--separator=,"
43 ENABLED_QUERIES="node group network backup"
44
45 test_cmd() {
46   cmd="$1"
47   desc="$2"
48   FORCE_LUXI_SOCKET=master $cmd > "$MA"
49   FORCE_LUXI_SOCKET=query  $cmd > "$CF"
50   diff -u "$MA" "$CF" || {
51     echo "Mismatch in $desc, see above."
52     RET=1
53   }
54 }
55
56 for kind in $ENABLED_QUERIES; do
57   all_fields=$(FORCE_LUXI_SOCKET=master gnt-$kind list-fields \
58     --no-headers --separator=,|cut -d, -f1)
59   comma_fields=$(echo $all_fields|tr ' ' ,|sed -e 's/,$//')
60   for op in list list-fields; do
61     test_cmd "gnt-$kind $op $SEP" "$kind $op"
62   done
63   #test_cmd "gnt-$kind list $SEP -o$comma_fields" "$kind list with all fields"
64   for field in $all_fields; do
65     test_cmd "gnt-$kind list $SEP -o$field" "$kind list for field $field"
66   done
67 done
68
69 exit $RET