xref: /illumos-gate/usr/src/test/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_all_fail.ksh (revision a629ded1d7b2e67c2028ccbc5ba9099328cc4e1b)
1#!/bin/ksh -p
2#
3# CDDL HEADER START
4#
5# This file and its contents are supplied under the terms of the
6# Common Development and Distribution License ("CDDL"), version 1.0.
7# You may only use this file in accordance with the terms of version
8# 1.0 of the CDDL.
9#
10# A full copy of the text of the CDDL should have accompanied this
11# source.  A copy of the CDDL is also available via the Internet at
12# http://www.illumos.org/license/CDDL.
13#
14# CDDL HEADER END
15#
16
17#
18# Copyright (c) 2017 by Delphix. All rights reserved.
19#
20
21. $STF_SUITE/include/libtest.shlib
22. $STF_SUITE/tests/functional/cli_root/zfs_mount/zfs_mount.kshlib
23
24# DESCRIPTION:
25#       Verify that if 'zfs mount -a' fails to mount one filesystem,
26#       the command fails with a non-zero error code, but all other
27#       filesystems are mounted.
28#
29# STRATEGY:
30#       1. Create zfs filesystems
31#       2. Unmount a leaf filesystem
32#       3. Create a file in the above filesystem's mountpoint
33#       4. Verify that 'zfs mount -a' fails to mount the above
34#       5. Verify that all other filesystems were mounted
35#
36
37verify_runnable "both"
38
39typeset -a filesystems
40typeset path=${TEST_BASE_DIR%%/}/testroot$$/$TESTPOOL
41typeset fscount=10
42
43function setup_all
44{
45	# Create $fscount filesystems at the top level of $path
46	for ((i=0; i<$fscount; i++)); do
47		setup_filesystem "$DISKS" "$TESTPOOL" $i "$path/$i" ctr
48	done
49
50	zfs list -r $TESTPOOL
51
52	return 0
53}
54
55function cleanup_all
56{
57	export __ZFS_POOL_RESTRICT="$TESTPOOL"
58	log_must zfs $unmountall
59	unset __ZFS_POOL_RESTRICT
60
61	[[ -d ${TEST_BASE_DIR%%/}/testroot$$ ]] && \
62		rm -rf ${TEST_BASE_DIR%%/}/testroot$$
63}
64
65log_onexit cleanup_all
66
67log_must setup_all
68
69#
70# Unmount all of the above so that we can create the stray file
71# in one of the mountpoint directories.
72#
73export __ZFS_POOL_RESTRICT="$TESTPOOL"
74log_must zfs $unmountall
75unset __ZFS_POOL_RESTRICT
76
77# All of our filesystems should be unmounted at this point
78for ((i=0; i<$fscount; i++)); do
79	log_mustnot mounted "$TESTPOOL/$i"
80done
81
82# Create a stray file in one filesystem's mountpoint
83touch $path/0/strayfile
84
85# Verify that zfs mount -a fails
86export __ZFS_POOL_RESTRICT="$TESTPOOL"
87log_mustnot zfs $mountall
88unset __ZFS_POOL_RESTRICT
89
90# All filesystems except for "0" should be mounted
91log_mustnot mounted "$TESTPOOL/0"
92for ((i=1; i<$fscount; i++)); do
93	log_must mounted "$TESTPOOL/$i"
94done
95
96log_pass "'zfs $mountall' failed as expected."
97