xref: /freebsd/tests/sys/cddl/zfs/tests/zfsd/zfsd_test.sh (revision 4d846d26)
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" "ksh93 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	verify_zfsd_running
43	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
44	ksh93 $(atf_get_srcdir)/zfsd_fault_001_pos.ksh
45	if [[ $? != 0 ]]; then
46		save_artifacts
47		atf_fail "Testcase failed"
48	fi
49}
50zfsd_fault_001_pos_cleanup()
51{
52	. $(atf_get_srcdir)/../../include/default.cfg
53	. $(atf_get_srcdir)/zfsd.cfg
54
55	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
56}
57
58
59atf_test_case zfsd_degrade_001_pos cleanup
60zfsd_degrade_001_pos_head()
61{
62	atf_set "descr" "ZFS will degrade a vdev that produces checksum errors"
63	atf_set "require.progs" "ksh93 zpool zfsd"
64	atf_set "timeout" 600
65}
66zfsd_degrade_001_pos_body()
67{
68	. $(atf_get_srcdir)/../../include/default.cfg
69	. $(atf_get_srcdir)/zfsd.cfg
70
71	verify_disk_count "$DISKS" 2
72	verify_zfsd_running
73	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
74	ksh93 $(atf_get_srcdir)/zfsd_degrade_001_pos.ksh
75	if [[ $? != 0 ]]; then
76		save_artifacts
77		atf_fail "Testcase failed"
78	fi
79}
80zfsd_degrade_001_pos_cleanup()
81{
82	. $(atf_get_srcdir)/../../include/default.cfg
83	. $(atf_get_srcdir)/zfsd.cfg
84
85	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
86}
87
88atf_test_case zfsd_degrade_002_pos cleanup
89zfsd_degrade_002_pos_head()
90{
91	atf_set "descr" "ZFS will degrade a spare that produces checksum errors"
92	atf_set "require.progs" "ksh93 zpool zfsd"
93	atf_set "timeout" 600
94}
95zfsd_degrade_002_pos_body()
96{
97	atf_expect_fail "https://www.illumos.org/issues/8614 Checksum errors on a mirrored child of a raidz are incorrectly accounted"
98	. $(atf_get_srcdir)/../../include/default.cfg
99	. $(atf_get_srcdir)/zfsd.cfg
100
101	verify_disk_count "$DISKS" 5
102	verify_zfsd_running
103	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
104	ksh93 $(atf_get_srcdir)/zfsd_degrade_002_pos.ksh
105	if [[ $? != 0 ]]; then
106		save_artifacts
107		atf_fail "Testcase failed"
108	fi
109}
110zfsd_degrade_002_pos_cleanup()
111{
112	. $(atf_get_srcdir)/../../include/default.cfg
113	. $(atf_get_srcdir)/zfsd.cfg
114
115	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
116}
117
118
119atf_test_case zfsd_hotspare_001_pos cleanup
120zfsd_hotspare_001_pos_head()
121{
122	atf_set "descr" "An active, damaged spare will be replaced by an available spare"
123	atf_set "require.progs" "ksh93 zpool zfsd"
124	atf_set "timeout" 3600
125}
126zfsd_hotspare_001_pos_body()
127{
128	. $(atf_get_srcdir)/../../include/default.cfg
129	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
130	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
131
132	verify_zfsd_running
133	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
134	ksh93 $(atf_get_srcdir)/zfsd_hotspare_001_pos.ksh
135	if [[ $? != 0 ]]; then
136		save_artifacts
137		atf_fail "Testcase failed"
138	fi
139}
140zfsd_hotspare_001_pos_cleanup()
141{
142	. $(atf_get_srcdir)/../../include/default.cfg
143	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
144	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
145
146	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
147}
148
149atf_test_case zfsd_hotspare_002_pos cleanup
150zfsd_hotspare_002_pos_head()
151{
152	atf_set "descr" "If a vdev becomes degraded, the spare will be activated."
153	atf_set "require.progs" "ksh93 zpool zfsd zinject"
154	atf_set "timeout" 3600
155}
156zfsd_hotspare_002_pos_body()
157{
158	. $(atf_get_srcdir)/../../include/default.cfg
159	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
160	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
161
162	verify_zfsd_running
163	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
164	ksh93 $(atf_get_srcdir)/zfsd_hotspare_002_pos.ksh
165	if [[ $? != 0 ]]; then
166		save_artifacts
167		atf_fail "Testcase failed"
168	fi
169}
170zfsd_hotspare_002_pos_cleanup()
171{
172	. $(atf_get_srcdir)/../../include/default.cfg
173	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
174	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
175
176	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
177}
178
179
180atf_test_case zfsd_hotspare_003_pos cleanup
181zfsd_hotspare_003_pos_head()
182{
183	atf_set "descr" "A faulted vdev will be replaced by an available spare"
184	atf_set "require.progs" "ksh93 zpool zfsd zinject"
185	atf_set "timeout" 3600
186}
187zfsd_hotspare_003_pos_body()
188{
189	. $(atf_get_srcdir)/../../include/default.cfg
190	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
191	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
192
193	verify_disk_count "$DISKS" 5
194	verify_zfsd_running
195	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
196	ksh93 $(atf_get_srcdir)/zfsd_hotspare_003_pos.ksh
197	if [[ $? != 0 ]]; then
198		save_artifacts
199		atf_fail "Testcase failed"
200	fi
201}
202zfsd_hotspare_003_pos_cleanup()
203{
204	. $(atf_get_srcdir)/../../include/default.cfg
205	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
206	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
207
208	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
209}
210
211atf_test_case zfsd_hotspare_004_pos cleanup
212zfsd_hotspare_004_pos_head()
213{
214	atf_set "descr" "Removing a disk from a pool results in the spare activating"
215	atf_set "require.progs" "ksh93 gnop zpool camcontrol zfsd"
216	atf_set "timeout" 3600
217}
218zfsd_hotspare_004_pos_body()
219{
220	. $(atf_get_srcdir)/../../include/default.cfg
221	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
222	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
223
224	verify_disk_count "$DISKS" 5
225	verify_zfsd_running
226	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
227	ksh93 $(atf_get_srcdir)/zfsd_hotspare_004_pos.ksh
228	if [[ $? != 0 ]]; then
229		save_artifacts
230		atf_fail "Testcase failed"
231	fi
232}
233zfsd_hotspare_004_pos_cleanup()
234{
235	. $(atf_get_srcdir)/../../include/default.cfg
236	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
237	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
238
239	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
240}
241
242atf_test_case zfsd_hotspare_005_pos cleanup
243zfsd_hotspare_005_pos_head()
244{
245	atf_set "descr" "A spare that is added to a degraded pool will be activated"
246	atf_set "require.progs" "ksh93 zpool zfsd zinject"
247	atf_set "timeout" 3600
248}
249zfsd_hotspare_005_pos_body()
250{
251	. $(atf_get_srcdir)/../../include/default.cfg
252	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
253	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
254
255	verify_zfsd_running
256	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
257	ksh93 $(atf_get_srcdir)/zfsd_hotspare_005_pos.ksh
258	if [[ $? != 0 ]]; then
259		save_artifacts
260		atf_fail "Testcase failed"
261	fi
262}
263zfsd_hotspare_005_pos_cleanup()
264{
265	. $(atf_get_srcdir)/../../include/default.cfg
266	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
267	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
268
269	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
270}
271
272atf_test_case zfsd_hotspare_006_pos cleanup
273zfsd_hotspare_006_pos_head()
274{
275	atf_set "descr" "zfsd will replace two vdevs that fail simultaneously"
276	atf_set "require.progs" "ksh93 zpool zfsd zinject"
277	atf_set "timeout" 3600
278}
279zfsd_hotspare_006_pos_body()
280{
281	. $(atf_get_srcdir)/../../include/default.cfg
282	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
283	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
284
285	verify_zfsd_running
286	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
287	ksh93 $(atf_get_srcdir)/zfsd_hotspare_006_pos.ksh
288	if [[ $? != 0 ]]; then
289		save_artifacts
290		atf_fail "Testcase failed"
291	fi
292}
293zfsd_hotspare_006_pos_cleanup()
294{
295	. $(atf_get_srcdir)/../../include/default.cfg
296	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
297	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
298
299	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
300}
301
302atf_test_case zfsd_hotspare_007_pos cleanup
303zfsd_hotspare_007_pos_head()
304{
305	atf_set "descr" "zfsd will swap failed drives at startup"
306	atf_set "require.progs" "ksh93 gnop zpool camcontrol zfsd"
307	atf_set "timeout" 3600
308}
309zfsd_hotspare_007_pos_body()
310{
311	. $(atf_get_srcdir)/../../include/default.cfg
312	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
313	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
314
315	verify_disk_count "$DISKS" 5
316	verify_zfsd_running
317	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
318	ksh93 $(atf_get_srcdir)/zfsd_hotspare_007_pos.ksh
319	if [[ $? != 0 ]]; then
320		save_artifacts
321		atf_fail "Testcase failed"
322	fi
323}
324zfsd_hotspare_007_pos_cleanup()
325{
326	. $(atf_get_srcdir)/../../include/default.cfg
327	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
328	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
329
330	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
331}
332
333atf_test_case zfsd_hotspare_008_neg cleanup
334zfsd_hotspare_008_neg_head()
335{
336	atf_set "descr" "zfsd will not use newly added spares on replacing vdevs"
337	atf_set "require.progs" "ksh93 zpool zfsd"
338	atf_set "timeout" 3600
339}
340zfsd_hotspare_008_neg_body()
341{
342	. $(atf_get_srcdir)/../../include/default.cfg
343	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
344	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
345
346	verify_disk_count "$DISKS" 4
347	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
348	ksh93 $(atf_get_srcdir)/zfsd_hotspare_008_neg.ksh
349	if [[ $? != 0 ]]; then
350		save_artifacts
351		atf_fail "Testcase failed"
352	fi
353}
354zfsd_hotspare_008_neg_cleanup()
355{
356	. $(atf_get_srcdir)/../../include/default.cfg
357	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
358	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
359
360	ksh93 $(atf_get_srcdir)/hotspare_cleanup.ksh || atf_fail "Cleanup failed"
361}
362
363atf_test_case zfsd_autoreplace_001_neg cleanup
364zfsd_autoreplace_001_neg_head()
365{
366	atf_set "descr" "A pool without autoreplace set will not replace by physical path"
367	atf_set "require.progs" "ksh93 zpool camcontrol zfsd gnop"
368	atf_set "timeout" 3600
369}
370zfsd_autoreplace_001_neg_body()
371{
372	. $(atf_get_srcdir)/../../include/default.cfg
373	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
374	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
375
376	verify_disk_count "$DISKS" 5
377	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
378	ksh93 $(atf_get_srcdir)/zfsd_autoreplace_001_neg.ksh
379	if [[ $? != 0 ]]; then
380		save_artifacts
381		atf_fail "Testcase failed"
382	fi
383}
384zfsd_autoreplace_001_neg_cleanup()
385{
386	. $(atf_get_srcdir)/../../include/default.cfg
387	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
388	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
389
390	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
391}
392
393atf_test_case zfsd_autoreplace_002_pos cleanup
394zfsd_autoreplace_002_pos_head()
395{
396	atf_set "descr" "A pool with autoreplace set will replace by physical path"
397	atf_set "require.progs" "ksh93 gnop zpool zfsd"
398	atf_set "timeout" 3600
399}
400zfsd_autoreplace_002_pos_body()
401{
402	. $(atf_get_srcdir)/../../include/default.cfg
403	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
404	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
405
406	verify_disk_count "$DISKS" 5
407	verify_zfsd_running
408	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
409	ksh93 $(atf_get_srcdir)/zfsd_autoreplace_002_pos.ksh
410	if [[ $? != 0 ]]; then
411		save_artifacts
412		atf_fail "Testcase failed"
413	fi
414}
415zfsd_autoreplace_002_pos_cleanup()
416{
417	. $(atf_get_srcdir)/../../include/default.cfg
418	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
419	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
420
421	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
422}
423
424atf_test_case zfsd_autoreplace_003_pos cleanup
425zfsd_autoreplace_003_pos_head()
426{
427	atf_set "descr" "A pool with autoreplace set will replace by physical path even if a spare is active"
428	atf_set "require.progs" "ksh93 zpool camcontrol zfsd gnop"
429	atf_set "timeout" 3600
430}
431zfsd_autoreplace_003_pos_body()
432{
433	. $(atf_get_srcdir)/../../include/default.cfg
434	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
435	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
436
437	verify_disk_count "$DISKS" 5
438	verify_zfsd_running
439	ksh93 $(atf_get_srcdir)/hotspare_setup.ksh || atf_fail "Setup failed"
440	ksh93 $(atf_get_srcdir)/zfsd_autoreplace_003_pos.ksh
441	if [[ $? != 0 ]]; then
442		save_artifacts
443		atf_fail "Testcase failed"
444	fi
445}
446zfsd_autoreplace_003_pos_cleanup()
447{
448	. $(atf_get_srcdir)/../../include/default.cfg
449	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
450	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
451
452	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
453}
454
455atf_test_case zfsd_replace_001_pos cleanup
456zfsd_replace_001_pos_head()
457{
458	atf_set "descr" "ZFSD will automatically replace a SAS disk that disappears and reappears in the same location, with the same devname"
459	atf_set "require.progs" "ksh93 zpool camcontrol zfsd zfs gnop"
460}
461zfsd_replace_001_pos_body()
462{
463	. $(atf_get_srcdir)/../../include/default.cfg
464	. $(atf_get_srcdir)/zfsd.cfg
465
466	verify_disk_count "$DISKS" 3
467	verify_zfsd_running
468	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
469	ksh93 $(atf_get_srcdir)/zfsd_replace_001_pos.ksh
470	if [[ $? != 0 ]]; then
471		save_artifacts
472		atf_fail "Testcase failed"
473	fi
474}
475zfsd_replace_001_pos_cleanup()
476{
477	. $(atf_get_srcdir)/../../include/default.cfg
478	. $(atf_get_srcdir)/zfsd.cfg
479
480	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
481}
482
483
484atf_test_case zfsd_replace_002_pos cleanup
485zfsd_replace_002_pos_head()
486{
487	atf_set "descr" "zfsd will reactivate a pool after all disks are failed and reappeared"
488	atf_set "require.progs" "ksh93 zpool camcontrol zfsd zfs"
489}
490zfsd_replace_002_pos_body()
491{
492	atf_expect_fail "Not yet implemented in zfsd"
493	. $(atf_get_srcdir)/../../include/default.cfg
494	. $(atf_get_srcdir)/zfsd.cfg
495
496	verify_disk_count "$DISKS" 3
497	verify_zfsd_running
498	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
499	ksh93 $(atf_get_srcdir)/zfsd_replace_002_pos.ksh
500	if [[ $? != 0 ]]; then
501		save_artifacts
502		atf_fail "Testcase failed"
503	fi
504}
505zfsd_replace_002_pos_cleanup()
506{
507	. $(atf_get_srcdir)/../../include/default.cfg
508	. $(atf_get_srcdir)/zfsd.cfg
509
510	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
511}
512
513atf_test_case zfsd_replace_003_pos cleanup
514zfsd_replace_003_pos_head()
515{
516	atf_set "descr" "ZFSD will correctly replace disks that dissapear and reappear with different devnames"
517	atf_set "require.progs" "ksh93 zpool camcontrol zfsd zfs gnop"
518}
519zfsd_replace_003_pos_body()
520{
521	. $(atf_get_srcdir)/../../include/default.cfg
522	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
523	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
524
525	verify_zfsd_running
526	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
527	ksh93 $(atf_get_srcdir)/zfsd_replace_003_pos.ksh
528	if [[ $? != 0 ]]; then
529		save_artifacts
530		atf_fail "Testcase failed"
531	fi
532}
533zfsd_replace_003_pos_cleanup()
534{
535	. $(atf_get_srcdir)/../../include/default.cfg
536	. $(atf_get_srcdir)/zfsd.cfg
537
538	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
539}
540
541atf_test_case zfsd_replace_004_pos cleanup
542zfsd_replace_004_pos_head()
543{
544	atf_set "descr" "ZFSD will automatically replace a spare that disappears and reappears in the same location, with the same devname"
545	atf_set "require.progs" "ksh93 zpool zfs gnop"
546}
547zfsd_replace_004_pos_body()
548{
549	. $(atf_get_srcdir)/../../include/default.cfg
550	. $(atf_get_srcdir)/zfsd.cfg
551
552	verify_disk_count "$DISKS" 2
553	verify_zfsd_running
554	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
555	ksh93 $(atf_get_srcdir)/zfsd_replace_004_pos.ksh
556	if [[ $? != 0 ]]; then
557		save_artifacts
558		atf_fail "Testcase failed"
559	fi
560}
561zfsd_replace_004_pos_cleanup()
562{
563	. $(atf_get_srcdir)/../../include/default.cfg
564	. $(atf_get_srcdir)/zfsd.cfg
565
566	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
567}
568
569atf_test_case zfsd_replace_005_pos cleanup
570zfsd_replace_005_pos_head()
571{
572	atf_set "descr" "ZFSD will automatically replace a multi-pool spare that disappears and reappears"
573	atf_set "require.progs" "ksh93 zpool zfs gnop"
574}
575zfsd_replace_005_pos_body()
576{
577	. $(atf_get_srcdir)/../../include/default.cfg
578	. $(atf_get_srcdir)/zfsd.cfg
579
580	verify_disk_count "$DISKS" 3
581	verify_zfsd_running
582	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
583	ksh93 $(atf_get_srcdir)/zfsd_replace_005_pos.ksh
584	if [[ $? != 0 ]]; then
585		save_artifacts
586		atf_fail "Testcase failed"
587	fi
588}
589zfsd_replace_005_pos_cleanup()
590{
591	. $(atf_get_srcdir)/../../include/default.cfg
592	. $(atf_get_srcdir)/zfsd.cfg
593
594	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
595}
596
597atf_test_case zfsd_import_001_pos cleanup
598zfsd_import_001_pos_head()
599{
600	atf_set "descr" "If a removed drive gets reinserted while the pool is exported, it will detach its spare when imported."
601	atf_set "require.progs" "ksh93 gnop zfsd zpool"
602	atf_set "timeout" 3600
603}
604zfsd_import_001_pos_body()
605{
606	. $(atf_get_srcdir)/../../include/default.cfg
607	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
608	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
609
610	verify_disk_count "$DISKS" 5
611	verify_zfsd_running
612	ksh93 $(atf_get_srcdir)/setup.ksh || atf_fail "Setup failed"
613	ksh93 $(atf_get_srcdir)/zfsd_import_001_pos.ksh || atf_fail "Testcase failed"
614	if [[ $? != 0 ]]; then
615		save_artifacts
616		atf_fail "Testcase failed"
617	fi
618}
619zfsd_import_001_pos_cleanup()
620{
621	. $(atf_get_srcdir)/../../include/default.cfg
622	. $(atf_get_srcdir)/../hotspare/hotspare.kshlib
623	. $(atf_get_srcdir)/../hotspare/hotspare.cfg
624
625	ksh93 $(atf_get_srcdir)/cleanup.ksh || atf_fail "Cleanup failed"
626}
627
628
629
630
631atf_init_test_cases()
632{
633	atf_add_test_case zfsd_fault_001_pos
634	atf_add_test_case zfsd_degrade_001_pos
635	atf_add_test_case zfsd_degrade_002_pos
636	atf_add_test_case zfsd_hotspare_001_pos
637	atf_add_test_case zfsd_hotspare_002_pos
638	atf_add_test_case zfsd_hotspare_003_pos
639	atf_add_test_case zfsd_hotspare_004_pos
640	atf_add_test_case zfsd_hotspare_005_pos
641	atf_add_test_case zfsd_hotspare_006_pos
642	atf_add_test_case zfsd_hotspare_007_pos
643	atf_add_test_case zfsd_hotspare_008_neg
644	atf_add_test_case zfsd_autoreplace_001_neg
645	atf_add_test_case zfsd_autoreplace_002_pos
646	atf_add_test_case zfsd_autoreplace_003_pos
647	atf_add_test_case zfsd_replace_001_pos
648	atf_add_test_case zfsd_replace_002_pos
649	atf_add_test_case zfsd_replace_003_pos
650	atf_add_test_case zfsd_replace_004_pos
651	atf_add_test_case zfsd_replace_005_pos
652	atf_add_test_case zfsd_import_001_pos
653}
654
655save_artifacts()
656{
657	# If ARTIFACTS_DIR is defined, save test artifacts for
658	# post-mortem analysis
659	if [[ -n $ARTIFACTS_DIR ]]; then
660		TC_ARTIFACTS_DIR=${ARTIFACTS_DIR}/sys/cddl/zfs/tests/zfsd/$(atf_get ident)
661		mkdir -p $TC_ARTIFACTS_DIR
662		cp -a /var/log/zfsd.log* $TC_ARTIFACTS_DIR
663		bzip2 $TC_ARTIFACTS_DIR/zfsd.log
664	fi
665}
666
667verify_zfsd_running()
668{
669	service zfsd onestatus || \
670		atf_skip "zfsd(8) must be enabled and running for this test"
671}
672