1
1
#! /usr/bin/env dash
2
- # shellcheck disable=SC2030,SC2031
2
+ # shellcheck disable=SC2030,SC2031,SC2034
3
3
# # ^^ tests are intentionally run in subshells
4
+ # # variables that appear unused here are used by main script
4
5
5
6
# # test.sh contains zfs-replicate test cases
6
7
set -eu # # fail on errors and undefined variables
@@ -16,7 +17,6 @@ SCRIPT_PATH="${0%/*}"
16
17
_fail () {
17
18
line=$1
18
19
match=$2
19
- # # verbose testing
20
20
# # hack to match blank lines
21
21
if [ " $match " = " null" ] && [ -n " $line " ]; then
22
22
printf " FAILED '%s' != ''\n" " $line " && exit 1
@@ -30,44 +30,35 @@ _fail() {
30
30
31
31
_testZFSReplicate () {
32
32
# # wrapper for easy matching
33
- export ECHO=" echo"
34
- # # define test conditions
35
- export FIND=" ${SCRIPT_PATH} /find.sh"
36
- export ZFS=" ${SCRIPT_PATH} /zfs.sh"
37
- export SSH=" ${SCRIPT_PATH} /ssh.sh"
38
- export HOST_CHECK=" ${ECHO} %HOST%"
39
- export SYSLOG=0
40
- REPLICATE_SETS=" srcPool0/srcFS0:dstPool0/dstFS0"
41
- REPLICATE_SETS=" ${REPLICATE_SETS} srcPool1/srcFS1/subFS1:dstPool1/dstFS1@dstHost1"
42
- REPLICATE_SETS=" ${REPLICATE_SETS} srcPool2/srcFS2:dstPool2/dstFS2@dstHost2"
43
- REPLICATE_SETS=" ${REPLICATE_SETS} srcPool3/srcFS3@srcHost3:dstPool3/dstFS3"
44
- REPLICATE_SETS=" ${REPLICATE_SETS} srcPool4/srcFS4@srcHost4:dstPool4/dstFS4@dstHost4"
33
+ ECHO=" echo"
34
+ # # disable syslog for tests
35
+ SYSLOG=0
45
36
46
37
# # test loadConfig
47
38
(
48
- # # source script functions
49
39
# shellcheck source=/dev/null
50
40
. ../zfs-replicate.sh
51
- printf " _testSetsNoConfig/loadConfig \n" # # we expect no output and clean exit
41
+ printf " _testZFSReplicate/loadConfigWithError \n"
52
42
loadConfig | awk ' { print NR-1, $0 }' | while read -r idx line; do
53
43
printf " %d %s\n" " $idx " " $line "
54
44
case $idx in
55
- * )
56
- _fail " $line " " null "
45
+ 0 )
46
+ _fail " $line " " missing required setting REPLICATE_SETS "
57
47
;;
58
48
esac
59
49
done
60
50
)
61
51
62
- # # test config override
52
+ # # test config override of script defaults
63
53
(
64
54
# # likely default values at script load time
55
+ FIND=" /usr/bin/find"
65
56
ZFS=" /sbin/zfs"
66
57
SSH=" /usr/sbin/ssh"
67
- # # source script functions
58
+ REPLICATE_SETS= " fakeSource:fakeDest "
68
59
# shellcheck source=/dev/null
69
60
. ../zfs-replicate.sh
70
- printf " _testSetsNoConfig /loadConfigOverrideDefaults\n"
61
+ printf " _testZFSReplicate /loadConfigOverrideDefaults\n"
71
62
_fail " /usr/sbin/ssh %HOST% /sbin/zfs receive -vFd" " $DEST_PIPE_WITH_HOST "
72
63
_fail " /sbin/zfs receive -vFd" " $DEST_PIPE_WITHOUT_HOST "
73
64
# # generate config
@@ -81,12 +72,21 @@ _testZFSReplicate() {
81
72
_fail " myZFS receive -vFd" " $DEST_PIPE_WITHOUT_HOST "
82
73
)
83
74
84
- # # test snapCreate
75
+ # # test snapCreate with different set combinations
85
76
(
86
- # # source script functions
77
+ # # configure test parameters
78
+ FIND=" ${SCRIPT_PATH} /find.sh"
79
+ ZFS=" ${SCRIPT_PATH} /zfs.sh"
80
+ SSH=" ${SCRIPT_PATH} /ssh.sh"
81
+ HOST_CHECK=" ${ECHO} %HOST%"
82
+ REPLICATE_SETS=" srcPool0/srcFS0:dstPool0/dstFS0"
83
+ REPLICATE_SETS=" ${REPLICATE_SETS} srcPool1/srcFS1/subFS1:dstPool1/dstFS1@dstHost1"
84
+ REPLICATE_SETS=" ${REPLICATE_SETS} srcPool2/srcFS2:dstPool2/dstFS2@dstHost2"
85
+ REPLICATE_SETS=" ${REPLICATE_SETS} srcPool3/srcFS3@srcHost3:dstPool3/dstFS3"
86
+ REPLICATE_SETS=" ${REPLICATE_SETS} srcPool4/srcFS4@srcHost4:dstPool4/dstFS4@dstHost4"
87
87
# shellcheck source=/dev/null
88
88
. ../zfs-replicate.sh && loadConfig
89
- printf " _testSetsNoConfig/snapCreate \n"
89
+ printf " _testZFSReplicate/snapCreateWithoutErrors \n"
90
90
snapCreate | awk ' { print NR-1, $0 }' | while read -r idx line; do
91
91
match=" "
92
92
printf " %d %s\n" " $idx " " $line "
@@ -221,24 +221,86 @@ _testZFSReplicate() {
221
221
done
222
222
)
223
223
224
- # # test exitClean
224
+ # # test snapCreate with host check errors
225
225
(
226
+ # # configure test parameters
227
+ FIND=" ${SCRIPT_PATH} /find.sh"
228
+ ZFS=" ${SCRIPT_PATH} /zfs.sh"
229
+ SSH=" ${SCRIPT_PATH} /ssh.sh"
230
+ HOST_CHECK=" false"
231
+ REPLICATE_SETS=" srcPool0/srcFS0:dstPool0/dstFS0"
232
+ REPLICATE_SETS=" ${REPLICATE_SETS} srcPool1/srcFS1/subFS1:dstPool1/dstFS1@dstHost1"
233
+ REPLICATE_SETS=" ${REPLICATE_SETS} srcPool2/srcFS2:dstPool2/dstFS2@dstHost2"
234
+ REPLICATE_SETS=" ${REPLICATE_SETS} srcPool3/srcFS3@srcHost3:dstPool3/dstFS3"
235
+ REPLICATE_SETS=" ${REPLICATE_SETS} srcPool4/srcFS4@srcHost4:dstPool4/dstFS4@dstHost4"
236
+ # shellcheck source=/dev/null
237
+ . ../zfs-replicate.sh && loadConfig
238
+ printf " _testZFSReplicate/snapCreateWithHostCheckErrors\n"
239
+ snapCreate | awk ' { print NR-1, $0 }' | while read -r idx line; do
240
+ match=" "
241
+ printf " %d %s\n" " $idx " " $line "
242
+ case $idx in
243
+ 17)
244
+ match=" source or destination host check failed"
245
+ ;;
246
+ 19)
247
+ match=" source or destination host check failed"
248
+ ;;
249
+ 21)
250
+ match=" source or destination host check failed"
251
+ ;;
252
+ 23)
253
+ match=" source or destination host check failed"
254
+ ;;
255
+ esac
256
+ _fail " $line " " $match "
257
+ done
258
+ )
259
+
260
+ # # test exitClean code=0 and extra message
261
+ (
262
+ FIND=" fakeFIND"
263
+ ZFS=" fakeZFS"
264
+ SSH=" fakeSSH"
265
+ REPLICATE_SETS=" fakeSource:fakeDest"
226
266
# # source script functions
227
267
# shellcheck source=/dev/null
228
268
. ../zfs-replicate.sh && loadConfig
229
- printf " _testSetsNoConfig/exitClean \n"
269
+ printf " _testZFSReplicate/exitCleanSuccess \n"
230
270
exitClean 0 " test message" | awk ' { print NR-1, $0 }' | while read -r idx line; do
231
271
printf " %d %s\n" " $idx " " $line "
232
272
case $idx in
233
273
0)
234
- match=" success total sets 0 skipped 0: test message"
274
+ match=" success total sets 0 skipped 0: test message" # # counts in test are always zero
275
+ _fail " $line " " $match "
276
+ ;;
277
+ esac
278
+ done
279
+ )
280
+
281
+ # # test exitClean code=99 with error message
282
+ (
283
+ FIND=" fakeFIND"
284
+ ZFS=" fakeZFS"
285
+ SSH=" fakeSSH"
286
+ REPLICATE_SETS=" fakeSource:fakeDest"
287
+ # # source script functions
288
+ # shellcheck source=/dev/null
289
+ . ../zfs-replicate.sh && loadConfig
290
+ printf " _testZFSReplicate/exitCleanError\n"
291
+ exitClean 99 " error message" | awk ' { print NR-1, $0 }' | while read -r idx line; do
292
+ printf " %d %s\n" " $idx " " $line "
293
+ case $idx in
294
+ 0)
295
+ match=" operation exited unexpectedly: code=99 msg=error message"
235
296
_fail " $line " " $match "
236
297
;;
237
298
esac
238
299
done
239
300
)
240
301
241
302
# # yay, tests completed!
303
+ printf " Tests Complete: No Error!\n"
242
304
return 0
243
305
}
244
306
0 commit comments