xref: /freebsd/tests/sys/cddl/zfs/tests/zfsd/zfsd_test.sh (revision 0957b409)
1# CDDL HEADER START
2#
3# The contents of this file are subject to the terms of the
4# Common Development and Distribution License (the "License").
5# You may not use this file except in compliance with the License.
6#
7# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
8# or http://www.opensolaris.org/os/licensing.
9# See the License for the specific language governing permissions
10# and limitations under the License.
11#
12# When distributing Covered Code, include this CDDL HEADER in each
13# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
14# If applicable, add the following below this CDDL HEADER, with the
15# fields enclosed by brackets "[]" replaced with your own identifying
16# information: Portions Copyright [yyyy] [name of copyright owner]
17#
18# CDDL HEADER END
19#
20
21# $FreeBSD$
22
23#
24# Copyright 2012,2013 Spectra Logic.  All rights reserved.
25# Use is subject to license terms.
26#
27
28
29atf_test_case zfsd_fault_001_pos cleanup
30zfsd_fault_001_pos_head()
31{
32	atf_set "descr" "ZFS will fault a vdev that produces IO errors"
33	atf_set "require.progs"  zfs zpool zfsd
34	atf_set "timeout" 300
35}
36zfsd_fault_001_pos_body()
37{
38	. $(atf_get_srcdir)/../../include/default.cfg
39	. $(atf_get_srcdir)/zfsd.cfg
40
41	verify_disk_count "$DISKS" 2
42	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
43	ksh93 $(atf_get_srcdir)/zfsd_fault_001_pos.ksh
44	if [[ $? != 0 ]]; then
45		save_artifacts
46		atf_fail "Testcase failed"
47	fi
48}
49zfsd_fault_001_pos_cleanup()
50{
51	. $(atf_get_srcdir)/../../include/default.cfg
52	. $(atf_get_srcdir)/zfsd.cfg
53
54	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
55}
56
57
58atf_test_case zfsd_degrade_001_pos cleanup
59zfsd_degrade_001_pos_head()
60{
61	atf_set "descr" "ZFS will degrade a vdev that produces checksum errors"
62	atf_set "require.progs"  zpool zfsd
63	atf_set "timeout" 600
64}
65zfsd_degrade_001_pos_body()
66{
67	. $(atf_get_srcdir)/../../include/default.cfg
68	. $(atf_get_srcdir)/zfsd.cfg
69
70	verify_disk_count "$DISKS" 2
71	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
72	ksh93 $(atf_get_srcdir)/zfsd_degrade_001_pos.ksh
73	if [[ $? != 0 ]]; then
74		save_artifacts
75		atf_fail "Testcase failed"
76	fi
77}
78zfsd_degrade_001_pos_cleanup()
79{
80	. $(atf_get_srcdir)/../../include/default.cfg
81	. $(atf_get_srcdir)/zfsd.cfg
82
83	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
84}
85
86atf_test_case zfsd_degrade_002_pos cleanup
87zfsd_degrade_002_pos_head()
88{
89	atf_set "descr" "ZFS will degrade a spare that produces checksum errors"
90	atf_set "require.progs"  zpool zfsd
91	atf_set "timeout" 600
92}
93zfsd_degrade_002_pos_body()
94{
95	atf_expect_fail "https://www.illumos.org/issues/8614 Checksum errors on a mirrored child of a raidz are incorrectly accounted"
96	. $(atf_get_srcdir)/../../include/default.cfg
97	. $(atf_get_srcdir)/zfsd.cfg
98
99	verify_disk_count "$DISKS" 5
100	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
101	ksh93 $(atf_get_srcdir)/zfsd_degrade_002_pos.ksh
102	if [[ $? != 0 ]]; then
103		save_artifacts
104		atf_fail "Testcase failed"
105	fi
106}
107zfsd_degrade_002_pos_cleanup()
108{
109	. $(atf_get_srcdir)/../../include/default.cfg
110	. $(atf_get_srcdir)/zfsd.cfg
111
112	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
113}
114
115
116atf_test_case zfsd_hotspare_001_pos cleanup
117zfsd_hotspare_001_pos_head()
118{
119	atf_set "descr" "An active, damaged spare will be replaced by an available spare"
120	atf_set "require.progs"  zpool zfsd
121	atf_set "timeout" 3600
122}
123zfsd_hotspare_001_pos_body()
124{
125	. $(atf_get_srcdir)/../../include/default.cfg
126	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
127	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
128
129	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
130	ksh93 $(atf_get_srcdir)/zfsd_hotspare_001_pos.ksh
131	if [[ $? != 0 ]]; then
132		save_artifacts
133		atf_fail "Testcase failed"
134	fi
135}
136zfsd_hotspare_001_pos_cleanup()
137{
138	. $(atf_get_srcdir)/../../include/default.cfg
139	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
140	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
141
142	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
143}
144
145atf_test_case zfsd_hotspare_002_pos cleanup
146zfsd_hotspare_002_pos_head()
147{
148	atf_set "descr" "If a vdev becomes degraded, the spare will be activated."
149	atf_set "require.progs"  zpool zfsd zinject
150	atf_set "timeout" 3600
151}
152zfsd_hotspare_002_pos_body()
153{
154	. $(atf_get_srcdir)/../../include/default.cfg
155	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
156	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
157
158	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
159	ksh93 $(atf_get_srcdir)/zfsd_hotspare_002_pos.ksh
160	if [[ $? != 0 ]]; then
161		save_artifacts
162		atf_fail "Testcase failed"
163	fi
164}
165zfsd_hotspare_002_pos_cleanup()
166{
167	. $(atf_get_srcdir)/../../include/default.cfg
168	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
169	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
170
171	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
172}
173
174
175atf_test_case zfsd_hotspare_003_pos cleanup
176zfsd_hotspare_003_pos_head()
177{
178	atf_set "descr" "A faulted vdev will be replaced by an available spare"
179	atf_set "require.progs"  zpool zfsd zinject
180	atf_set "timeout" 3600
181}
182zfsd_hotspare_003_pos_body()
183{
184	. $(atf_get_srcdir)/../../include/default.cfg
185	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
186	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
187
188	verify_disk_count "$DISKS" 5
189	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
190	ksh93 $(atf_get_srcdir)/zfsd_hotspare_003_pos.ksh
191	if [[ $? != 0 ]]; then
192		save_artifacts
193		atf_fail "Testcase failed"
194	fi
195}
196zfsd_hotspare_003_pos_cleanup()
197{
198	. $(atf_get_srcdir)/../../include/default.cfg
199	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
200	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
201
202	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
203}
204
205atf_test_case zfsd_hotspare_004_pos cleanup
206zfsd_hotspare_004_pos_head()
207{
208	atf_set "descr" "Removing a disk from a pool results in the spare activating"
209	atf_set "require.progs"  gnop zpool camcontrol zfsd
210	atf_set "timeout" 3600
211}
212zfsd_hotspare_004_pos_body()
213{
214	. $(atf_get_srcdir)/../../include/default.cfg
215	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
216	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
217
218	verify_disk_count "$DISKS" 5
219	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
220	ksh93 $(atf_get_srcdir)/zfsd_hotspare_004_pos.ksh
221	if [[ $? != 0 ]]; then
222		save_artifacts
223		atf_fail "Testcase failed"
224	fi
225}
226zfsd_hotspare_004_pos_cleanup()
227{
228	. $(atf_get_srcdir)/../../include/default.cfg
229	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
230	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
231
232	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
233}
234
235atf_test_case zfsd_hotspare_005_pos cleanup
236zfsd_hotspare_005_pos_head()
237{
238	atf_set "descr" "A spare that is added to a degraded pool will be activated"
239	atf_set "require.progs"  zpool zfsd zinject
240	atf_set "timeout" 3600
241}
242zfsd_hotspare_005_pos_body()
243{
244	. $(atf_get_srcdir)/../../include/default.cfg
245	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
246	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
247
248	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
249	ksh93 $(atf_get_srcdir)/zfsd_hotspare_005_pos.ksh
250	if [[ $? != 0 ]]; then
251		save_artifacts
252		atf_fail "Testcase failed"
253	fi
254}
255zfsd_hotspare_005_pos_cleanup()
256{
257	. $(atf_get_srcdir)/../../include/default.cfg
258	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
259	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
260
261	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
262}
263
264atf_test_case zfsd_hotspare_006_pos cleanup
265zfsd_hotspare_006_pos_head()
266{
267	atf_set "descr" "zfsd will replace two vdevs that fail simultaneously"
268	atf_set "require.progs"  zpool zfsd zinject
269	atf_set "timeout" 3600
270}
271zfsd_hotspare_006_pos_body()
272{
273	. $(atf_get_srcdir)/../../include/default.cfg
274	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
275	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
276
277	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
278	ksh93 $(atf_get_srcdir)/zfsd_hotspare_006_pos.ksh
279	if [[ $? != 0 ]]; then
280		save_artifacts
281		atf_fail "Testcase failed"
282	fi
283}
284zfsd_hotspare_006_pos_cleanup()
285{
286	. $(atf_get_srcdir)/../../include/default.cfg
287	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
288	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
289
290	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
291}
292
293atf_test_case zfsd_hotspare_007_pos cleanup
294zfsd_hotspare_007_pos_head()
295{
296	atf_set "descr" "zfsd will swap failed drives at startup"
297	atf_set "require.progs"  gnop zpool camcontrol zfsd
298	atf_set "timeout" 3600
299}
300zfsd_hotspare_007_pos_body()
301{
302	. $(atf_get_srcdir)/../../include/default.cfg
303	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
304	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
305
306	verify_disk_count "$DISKS" 5
307	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
308	ksh93 $(atf_get_srcdir)/zfsd_hotspare_007_pos.ksh
309	if [[ $? != 0 ]]; then
310		save_artifacts
311		atf_fail "Testcase failed"
312	fi
313}
314zfsd_hotspare_007_pos_cleanup()
315{
316	. $(atf_get_srcdir)/../../include/default.cfg
317	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
318	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
319
320	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
321}
322
323atf_test_case zfsd_hotspare_008_neg cleanup
324zfsd_hotspare_008_neg_head()
325{
326	atf_set "descr" "zfsd will not use newly added spares on replacing vdevs"
327	atf_set "require.progs"  zpool zfsd
328	atf_set "timeout" 3600
329}
330zfsd_hotspare_008_neg_body()
331{
332	. $(atf_get_srcdir)/../../include/default.cfg
333	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
334	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
335
336	verify_disk_count "$DISKS" 4
337	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
338	ksh93 $(atf_get_srcdir)/zfsd_hotspare_008_neg.ksh
339	if [[ $? != 0 ]]; then
340		save_artifacts
341		atf_fail "Testcase failed"
342	fi
343}
344zfsd_hotspare_008_neg_cleanup()
345{
346	. $(atf_get_srcdir)/../../include/default.cfg
347	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
348	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
349
350	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
351}
352
353atf_test_case zfsd_autoreplace_001_neg cleanup
354zfsd_autoreplace_001_neg_head()
355{
356	atf_set "descr" "A pool without autoreplace set will not replace by physical path"
357	atf_set "require.progs"  zpool camcontrol zfsd gnop
358	atf_set "timeout" 3600
359}
360zfsd_autoreplace_001_neg_body()
361{
362	. $(atf_get_srcdir)/../../include/default.cfg
363	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
364	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
365
366	verify_disk_count "$DISKS" 5
367	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
368	ksh93 $(atf_get_srcdir)/zfsd_autoreplace_001_neg.ksh
369	if [[ $? != 0 ]]; then
370		save_artifacts
371		atf_fail "Testcase failed"
372	fi
373}
374zfsd_autoreplace_001_neg_cleanup()
375{
376	. $(atf_get_srcdir)/../../include/default.cfg
377	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
378	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
379
380	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
381}
382
383atf_test_case zfsd_autoreplace_002_pos cleanup
384zfsd_autoreplace_002_pos_head()
385{
386	atf_set "descr" "A pool with autoreplace set will replace by physical path"
387	atf_set "require.progs"  gnop zpool zfsd
388	atf_set "timeout" 3600
389}
390zfsd_autoreplace_002_pos_body()
391{
392	. $(atf_get_srcdir)/../../include/default.cfg
393	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
394	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
395
396	verify_disk_count "$DISKS" 5
397	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
398	ksh93 $(atf_get_srcdir)/zfsd_autoreplace_002_pos.ksh
399	if [[ $? != 0 ]]; then
400		save_artifacts
401		atf_fail "Testcase failed"
402	fi
403}
404zfsd_autoreplace_002_pos_cleanup()
405{
406	. $(atf_get_srcdir)/../../include/default.cfg
407	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
408	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
409
410	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
411}
412
413atf_test_case zfsd_autoreplace_003_pos cleanup
414zfsd_autoreplace_003_pos_head()
415{
416	atf_set "descr" "A pool with autoreplace set will replace by physical path even if a spare is active"
417	atf_set "require.progs"  zpool camcontrol zfsd gnop
418	atf_set "timeout" 3600
419}
420zfsd_autoreplace_003_pos_body()
421{
422	. $(atf_get_srcdir)/../../include/default.cfg
423	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
424	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
425
426	verify_disk_count "$DISKS" 5
427	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
428	ksh93 $(atf_get_srcdir)/zfsd_autoreplace_003_pos.ksh
429	if [[ $? != 0 ]]; then
430		save_artifacts
431		atf_fail "Testcase failed"
432	fi
433}
434zfsd_autoreplace_003_pos_cleanup()
435{
436	. $(atf_get_srcdir)/../../include/default.cfg
437	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
438	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
439
440	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
441}
442
443atf_test_case zfsd_replace_001_pos cleanup
444zfsd_replace_001_pos_head()
445{
446	atf_set "descr" "ZFSD will automatically replace a SAS disk that disappears and reappears in the same location, with the same devname"
447	atf_set "require.progs"  zpool camcontrol zfsd zfs gnop
448}
449zfsd_replace_001_pos_body()
450{
451	. $(atf_get_srcdir)/../../include/default.cfg
452	. $(atf_get_srcdir)/zfsd.cfg
453
454	verify_disk_count "$DISKS" 3
455	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
456	ksh93 $(atf_get_srcdir)/zfsd_replace_001_pos.ksh
457	if [[ $? != 0 ]]; then
458		save_artifacts
459		atf_fail "Testcase failed"
460	fi
461}
462zfsd_replace_001_pos_cleanup()
463{
464	. $(atf_get_srcdir)/../../include/default.cfg
465	. $(atf_get_srcdir)/zfsd.cfg
466
467	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
468}
469
470
471atf_test_case zfsd_replace_002_pos cleanup
472zfsd_replace_002_pos_head()
473{
474	atf_set "descr" "zfsd will reactivate a pool after all disks are failed and reappeared"
475	atf_set "require.progs"  zpool camcontrol zfsd zfs
476}
477zfsd_replace_002_pos_body()
478{
479	atf_expect_fail "Not yet implemented in zfsd"
480	. $(atf_get_srcdir)/../../include/default.cfg
481	. $(atf_get_srcdir)/zfsd.cfg
482
483	verify_disk_count "$DISKS" 3
484	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
485	ksh93 $(atf_get_srcdir)/zfsd_replace_002_pos.ksh
486	if [[ $? != 0 ]]; then
487		save_artifacts
488		atf_fail "Testcase failed"
489	fi
490}
491zfsd_replace_002_pos_cleanup()
492{
493	. $(atf_get_srcdir)/../../include/default.cfg
494	. $(atf_get_srcdir)/zfsd.cfg
495
496	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
497}
498
499atf_test_case zfsd_replace_003_pos cleanup
500zfsd_replace_003_pos_head()
501{
502	atf_set "descr" "ZFSD will correctly replace disks that dissapear and reappear with different devnames"
503	atf_set "require.progs"  zpool camcontrol zfsd zfs gnop
504}
505zfsd_replace_003_pos_body()
506{
507	. $(atf_get_srcdir)/../../include/default.cfg
508	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
509	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
510
511	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
512	ksh93 $(atf_get_srcdir)/zfsd_replace_003_pos.ksh
513	if [[ $? != 0 ]]; then
514		save_artifacts
515		atf_fail "Testcase failed"
516	fi
517}
518zfsd_replace_003_pos_cleanup()
519{
520	. $(atf_get_srcdir)/../../include/default.cfg
521	. $(atf_get_srcdir)/zfsd.cfg
522
523	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
524}
525
526atf_test_case zfsd_import_001_pos cleanup
527zfsd_import_001_pos_head()
528{
529	atf_set "descr" "If a removed drive gets reinserted while the pool is exported, it will detach its spare when imported."
530	atf_set "require.progs"  gnop zfsd zpool
531	atf_set "timeout" 3600
532}
533zfsd_import_001_pos_body()
534{
535	. $(atf_get_srcdir)/../../include/default.cfg
536	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
537	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
538
539	verify_disk_count "$DISKS" 5
540	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
541	ksh93 $(atf_get_srcdir)/zfsd_import_001_pos.ksh || atf_fail "Testcase failed"
542	if [[ $? != 0 ]]; then
543		save_artifacts
544		atf_fail "Testcase failed"
545	fi
546}
547zfsd_import_001_pos_cleanup()
548{
549	. $(atf_get_srcdir)/../../include/default.cfg
550	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
551	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
552
553	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
554}
555
556
557
558
559atf_init_test_cases()
560{
561	atf_add_test_case zfsd_fault_001_pos
562	atf_add_test_case zfsd_degrade_001_pos
563	atf_add_test_case zfsd_degrade_002_pos
564	atf_add_test_case zfsd_hotspare_001_pos
565	atf_add_test_case zfsd_hotspare_002_pos
566	atf_add_test_case zfsd_hotspare_003_pos
567	atf_add_test_case zfsd_hotspare_004_pos
568	atf_add_test_case zfsd_hotspare_005_pos
569	atf_add_test_case zfsd_hotspare_006_pos
570	atf_add_test_case zfsd_hotspare_007_pos
571	atf_add_test_case zfsd_hotspare_008_neg
572	atf_add_test_case zfsd_autoreplace_001_neg
573	atf_add_test_case zfsd_autoreplace_002_pos
574	atf_add_test_case zfsd_autoreplace_003_pos
575	atf_add_test_case zfsd_replace_001_pos
576	atf_add_test_case zfsd_replace_002_pos
577	atf_add_test_case zfsd_replace_003_pos
578	atf_add_test_case zfsd_import_001_pos
579}
580
581save_artifacts()
582{
583	# If ARTIFACTS_DIR is defined, save test artifacts for
584	# post-mortem analysis
585	if [[ -n $ARTIFACTS_DIR ]]; then
586		TC_ARTIFACTS_DIR=${ARTIFACTS_DIR}/sys/cddl/zfs/tests/zfsd/$(atf_get ident)
587		mkdir -p $TC_ARTIFACTS_DIR
588		cp -a /var/log/zfsd.log* $TC_ARTIFACTS_DIR
589		bzip2 $TC_ARTIFACTS_DIR/zfsd.log
590	fi
591}
592