]> git.proxmox.com Git - ceph.git/blob - ceph/qa/run-standalone.sh
9321cba6515016696afaf22a4d60583ff09ab459
[ceph.git] / ceph / qa / run-standalone.sh
1 #!/usr/bin/env bash
2 set -e
3
4 if [ ! -e Makefile -o ! -d bin ]; then
5 echo 'run this from the build dir'
6 exit 1
7 fi
8
9 if [ ! -d /tmp/ceph-disk-virtualenv -o ! -d /tmp/ceph-detect-init-virtualenv ]; then
10 echo '/tmp/*-virtualenv directories not built. Please run "make check" first.'
11 exit 1
12 fi
13
14 if [ `uname` = FreeBSD ]; then
15 # otherwise module prettytable will not be found
16 export PYTHONPATH=/usr/local/lib/python2.7/site-packages
17 exec_mode=+111
18 KERNCORE="kern.corefile"
19 COREPATTERN="core.%N.%P"
20 else
21 export PYTHONPATH=/usr/lib/python2.7/dist-packages
22 exec_mode=/111
23 KERNCORE="kernel.core_pattern"
24 COREPATTERN="core.%e.%p.%t"
25 fi
26
27 function finish() {
28 if [ -n "$precore" ]; then
29 sudo sysctl -w ${KERNCORE}=${precore}
30 fi
31 exit 0
32 }
33
34 trap finish TERM HUP INT
35
36 PATH=$(pwd)/bin:$PATH
37
38 # TODO: Use getops
39 dryrun=false
40 if [[ "$1" = "--dry-run" ]]; then
41 dryrun=true
42 shift
43 fi
44
45 all=false
46 if [ "$1" = "" ]; then
47 all=true
48 fi
49
50 select=("$@")
51
52 location="../qa/standalone"
53
54 count=0
55 errors=0
56 userargs=""
57 precore="$(sysctl -n $KERNCORE)"
58 # If corepattern already set, avoid having to use sudo
59 if [ "$precore" = "$COREPATTERN" ]; then
60 precore=""
61 else
62 sudo sysctl -w ${KERNCORE}=${COREPATTERN}
63 fi
64 # Clean out any cores in core target directory (currently .)
65 if ls $(dirname $(sysctl -n $KERNCORE)) | grep -q '^core\|core$' ; then
66 mkdir found.cores.$$ 2> /dev/null || true
67 for i in $(ls $(dirname $(sysctl -n $KERNCORE)) | grep '^core\|core$'); do
68 mv $i found.cores.$$
69 done
70 echo "Stray cores put in $(pwd)/found.cores.$$"
71 fi
72
73 ulimit -c unlimited
74 for f in $(cd $location ; find . -perm $exec_mode -type f)
75 do
76 f=$(echo $f | sed 's/\.\///')
77 # This is tested with misc/test-ceph-helpers.sh
78 if [[ "$f" = "ceph-helpers.sh" ]]; then
79 continue
80 fi
81 if [[ "$all" = "false" ]]; then
82 found=false
83 for c in "${!select[@]}"
84 do
85 # Get command and any arguments of subset of tests ro tun
86 allargs="${select[$c]}"
87 arg1=$(echo "$allargs" | cut --delimiter " " --field 1)
88 # Get user args for this selection for use below
89 userargs="$(echo $allargs | cut -s --delimiter " " --field 2-)"
90 if [[ "$arg1" = $(basename $f) ]]; then
91 found=true
92 break
93 fi
94 if [[ "$arg1" = "$f" ]]; then
95 found=true
96 break
97 fi
98 done
99 if [[ "$found" = "false" ]]; then
100 continue
101 fi
102 fi
103 # Don't run test-failure.sh unless explicitly specified
104 if [ "$all" = "true" -a "$f" = "special/test-failure.sh" ]; then
105 continue
106 fi
107
108 cmd="$location/$f $userargs"
109 count=$(expr $count + 1)
110 echo "--- $cmd ---"
111 if [[ "$dryrun" != "true" ]]; then
112 if ! PATH=$PATH:bin \
113 CEPH_ROOT=.. \
114 CEPH_LIB=lib \
115 LOCALRUN=yes \
116 $cmd ; then
117 echo "$f .............. FAILED"
118 errors=$(expr $errors + 1)
119 fi
120 fi
121 done
122 if [ -n "$precore" ]; then
123 sudo sysctl -w ${KERNCORE}=${precore}
124 fi
125
126 if [ "$errors" != "0" ]; then
127 echo "$errors TESTS FAILED, $count TOTAL TESTS"
128 exit 1
129 fi
130
131 echo "ALL $count TESTS PASSED"
132 exit 0