blob: e6b3bfe94d75150a93693c5f9b41e03d0dab121f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
# Hey Emacs, this is a -*- shell-script -*- !!! :-)
# Common variables and functions for all CTDB tests.
# Commands on different platforms may quote or sort things differently
# without this
export LANG=C
# Print a message and exit.
die()
{
echo "$1" >&2
exit "${2:-1}"
}
. "${TEST_SCRIPTS_DIR}/script_install_paths.sh"
if [ -d "$CTDB_TEST_HELPER_BINDIR" ]; then
PATH="${CTDB_TEST_HELPER_BINDIR}:${PATH}"
fi
# Used by integration tests (via test_wrap) and unit tests to run test
# helpers (built from ctdb/tests/src). A hacky side-effect is that
# local_daemons.sh takes advantage of this to be able to find ctdbd.
if [ -d "$CTDB_SCRIPTS_TESTS_LIBEXEC_DIR" ]; then
PATH="${CTDB_SCRIPTS_TESTS_LIBEXEC_DIR}:${PATH}"
fi
ctdb_test_error()
{
if [ $# -gt 0 ]; then
echo "$*"
fi
exit 99
}
ctdb_test_fail()
{
if [ $# -gt 0 ]; then
echo "$*"
fi
exit 1
}
ctdb_test_skip()
{
if [ $# -gt 0 ]; then
echo "$*"
fi
exit 77
}
# "$@" is supported OSes
ctdb_test_check_supported_OS()
{
_os=$(uname -s)
for _i; do
if [ "$_os" = "$_i" ]; then
return
fi
done
ctdb_test_skip "This test is not supported on ${_os}"
}
# Wait until either timeout expires or command succeeds. The command
# will be tried once per second, unless timeout has format T/I, where
# I is the recheck interval.
wait_until()
{
_timeout="$1"
shift # "$@" is the command...
_interval=1
case "$_timeout" in
*/*)
_interval="${_timeout#*/}"
_timeout="${_timeout%/*}"
;;
esac
_negate=false
if [ "$1" = "!" ]; then
_negate=true
shift
fi
printf '<%d|' "$_timeout"
_t="$_timeout"
while [ "$_t" -gt 0 ]; do
_rc=0
"$@" || _rc=$?
if {
! $_negate && [ $_rc -eq 0 ]
} ||
{
$_negate && [ $_rc -ne 0 ]
}; then
echo "|$((_timeout - _t))|"
echo "OK"
return 0
fi
for _i in $(seq 1 "$_interval"); do
printf '.'
done
_t=$((_t - _interval))
sleep "$_interval"
done
echo "*TIMEOUT*"
return 1
}
# setup_ctdb_base <parent> <subdir> [item-to-copy]...
setup_ctdb_base()
{
[ $# -ge 2 ] || die "usage: setup_ctdb_base <parent> <subdir> [item]..."
# If empty arguments are passed then we attempt to remove /
# (i.e. the root directory) below
if [ -z "$1" ] || [ -z "$2" ]; then
die "usage: setup_ctdb_base <parent> <subdir> [item]..."
fi
_parent="$1"
_subdir="$2"
# Other arguments are files/directories to copy
shift 2
export CTDB_BASE="${_parent}/${_subdir}"
if [ -d "$CTDB_BASE" ]; then
rm -r "$CTDB_BASE"
fi
mkdir -p "$CTDB_BASE" || die "Failed to create CTDB_BASE=$CTDB_BASE"
mkdir -p "${CTDB_BASE}/run" || die "Failed to create ${CTDB_BASE}/run"
mkdir -p "${CTDB_BASE}/var" || die "Failed to create ${CTDB_BASE}/var"
for _i; do
cp -pr "${CTDB_SCRIPTS_BASE}/${_i}" "${CTDB_BASE}/"
done
if [ -z "$CTDB_TEST_SUITE_DIR" ]; then
return
fi
for _i in "${CTDB_TEST_SUITE_DIR}/etc-ctdb/"*; do
# No/empty etc-ctdb directory
[ -e "$_i" ] || break
cp -pr "$_i" "${CTDB_BASE}/"
done
# Ensure existence of an event script component installation
# subdirectory corresponding to each event script component
# configuration subdirectory.
#
# This helps:
# local_daemons.sh <dir> onnode <n> ctdb event script list <component>
# to work.
for _d in "${CTDB_BASE}/events/"*; do
_b=$(basename "$_d")
mkdir -p "${CTDB_BASE}/share/events/${_b}"
done
}
|