1d583b39bSJohn Wren Kennedy#!/bin/ksh -p
2d583b39bSJohn Wren Kennedy#
3d583b39bSJohn Wren Kennedy# CDDL HEADER START
4d583b39bSJohn Wren Kennedy#
5d583b39bSJohn Wren Kennedy# The contents of this file are subject to the terms of the
6d583b39bSJohn Wren Kennedy# Common Development and Distribution License (the "License").
7d583b39bSJohn Wren Kennedy# You may not use this file except in compliance with the License.
8d583b39bSJohn Wren Kennedy#
9d583b39bSJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10d583b39bSJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing.
11d583b39bSJohn Wren Kennedy# See the License for the specific language governing permissions
12d583b39bSJohn Wren Kennedy# and limitations under the License.
13d583b39bSJohn Wren Kennedy#
14d583b39bSJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
15d583b39bSJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16d583b39bSJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
17d583b39bSJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
18d583b39bSJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
19d583b39bSJohn Wren Kennedy#
20d583b39bSJohn Wren Kennedy# CDDL HEADER END
21d583b39bSJohn Wren Kennedy#
22d583b39bSJohn Wren Kennedy
23d583b39bSJohn Wren Kennedy#
24d583b39bSJohn Wren Kennedy# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
25d583b39bSJohn Wren Kennedy# Use is subject to license terms.
26d583b39bSJohn Wren Kennedy#
27d583b39bSJohn Wren Kennedy
28d583b39bSJohn Wren Kennedy#
29*1d32ba66SJohn Wren Kennedy# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
30d583b39bSJohn Wren Kennedy#
31d583b39bSJohn Wren Kennedy
32d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib
33d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_mount/zfs_mount.kshlib
34d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zpool_import/zpool_import.cfg
35d583b39bSJohn Wren Kennedy
36d583b39bSJohn Wren Kennedy#
37d583b39bSJohn Wren Kennedy# DESCRIPTION:
38d583b39bSJohn Wren Kennedy# Verify that 'zpool import -a' succeeds as root.
39d583b39bSJohn Wren Kennedy#
40d583b39bSJohn Wren Kennedy# STRATEGY:
41d583b39bSJohn Wren Kennedy# 1. Create a group of pools with specified vdev.
42d583b39bSJohn Wren Kennedy# 2. Create zfs filesystems within the given pools.
43d583b39bSJohn Wren Kennedy# 3. Export the pools.
44d583b39bSJohn Wren Kennedy# 4. Verify that import command succeed.
45d583b39bSJohn Wren Kennedy#
46d583b39bSJohn Wren Kennedy
47d583b39bSJohn Wren Kennedyverify_runnable "global"
48d583b39bSJohn Wren Kennedy
49d583b39bSJohn Wren Kennedyset -A options "" "-R $ALTER_ROOT"
50d583b39bSJohn Wren Kennedy
51d583b39bSJohn Wren Kennedytypeset -i number=0
52d583b39bSJohn Wren Kennedytypeset -i id=0
53d583b39bSJohn Wren Kennedytypeset -i i=0
54d583b39bSJohn Wren Kennedytypeset checksum1
55d583b39bSJohn Wren Kennedytypeset unwantedpool
56d583b39bSJohn Wren Kennedy
57d583b39bSJohn Wren Kennedyfunction setup_single_disk #disk #pool #fs #mtpt
58d583b39bSJohn Wren Kennedy{
59d583b39bSJohn Wren Kennedy	typeset disk=$1
60d583b39bSJohn Wren Kennedy	typeset pool=$2
61d583b39bSJohn Wren Kennedy	typeset fs=${3##/}
62d583b39bSJohn Wren Kennedy	typeset mtpt=$4
63d583b39bSJohn Wren Kennedy
64d583b39bSJohn Wren Kennedy	setup_filesystem "$disk" "$pool" "$fs" "$mtpt"
65d583b39bSJohn Wren Kennedy
66*1d32ba66SJohn Wren Kennedy	log_must cp $MYTESTFILE $mtpt/$TESTFILE0
67d583b39bSJohn Wren Kennedy
68*1d32ba66SJohn Wren Kennedy	log_must zpool export $pool
69d583b39bSJohn Wren Kennedy
70d583b39bSJohn Wren Kennedy	[[ -d $mtpt ]] && \
71*1d32ba66SJohn Wren Kennedy		rm -rf $mtpt
72d583b39bSJohn Wren Kennedy}
73d583b39bSJohn Wren Kennedy
74d583b39bSJohn Wren Kennedyfunction cleanup_all
75d583b39bSJohn Wren Kennedy{
76d583b39bSJohn Wren Kennedy	typeset -i id=0
77d583b39bSJohn Wren Kennedy
78d583b39bSJohn Wren Kennedy	#
79d583b39bSJohn Wren Kennedy	# Try import individually if 'import -a' failed.
80d583b39bSJohn Wren Kennedy	#
81*1d32ba66SJohn Wren Kennedy	for pool in `zpool import | grep "pool:" | awk '{print $2}'`; do
82*1d32ba66SJohn Wren Kennedy		zpool import -f $pool
83d583b39bSJohn Wren Kennedy	done
84d583b39bSJohn Wren Kennedy
85*1d32ba66SJohn Wren Kennedy	for pool in `zpool import -d $DEVICE_DIR | grep "pool:" | awk '{print $2}'`; do
86*1d32ba66SJohn Wren Kennedy		log_must zpool import -d $DEVICE_DIR -f $pool
87d583b39bSJohn Wren Kennedy	done
88d583b39bSJohn Wren Kennedy
89d583b39bSJohn Wren Kennedy	while (( id < number )); do
90d583b39bSJohn Wren Kennedy		if ! poolexists ${TESTPOOL}-$id ; then
91d583b39bSJohn Wren Kennedy			(( id = id + 1 ))
92d583b39bSJohn Wren Kennedy			continue
93d583b39bSJohn Wren Kennedy		fi
94d583b39bSJohn Wren Kennedy
95d583b39bSJohn Wren Kennedy		if (( id == 0 )); then
96*1d32ba66SJohn Wren Kennedy			log_must zpool export ${TESTPOOL}-$id
97d583b39bSJohn Wren Kennedy
98d583b39bSJohn Wren Kennedy			[[ -d /${TESTPOOL}-$id ]] && \
99*1d32ba66SJohn Wren Kennedy				log_must rm -rf /${TESTPOOL}-$id
100d583b39bSJohn Wren Kennedy
101*1d32ba66SJohn Wren Kennedy			log_must zpool import -f ${TESTPOOL}-$id $TESTPOOL
102d583b39bSJohn Wren Kennedy
103d583b39bSJohn Wren Kennedy			[[ -e $TESTDIR/$TESTFILE0 ]] && \
104*1d32ba66SJohn Wren Kennedy				log_must rm -rf $TESTDIR/$TESTFILE0
105d583b39bSJohn Wren Kennedy		else
106d583b39bSJohn Wren Kennedy			cleanup_filesystem "${TESTPOOL}-$id" $TESTFS
107d583b39bSJohn Wren Kennedy
108d583b39bSJohn Wren Kennedy			destroy_pool ${TESTPOOL}-$id
109d583b39bSJohn Wren Kennedy		fi
110d583b39bSJohn Wren Kennedy
111d583b39bSJohn Wren Kennedy		(( id = id + 1 ))
112d583b39bSJohn Wren Kennedy        done
113d583b39bSJohn Wren Kennedy
114d583b39bSJohn Wren Kennedy	[[ -d $ALTER_ROOT ]] && \
115*1d32ba66SJohn Wren Kennedy		rm -rf $ALTER_ROOT
116d583b39bSJohn Wren Kennedy}
117d583b39bSJohn Wren Kennedy
118d583b39bSJohn Wren Kennedyfunction checksum_all #alter_root
119d583b39bSJohn Wren Kennedy{
120d583b39bSJohn Wren Kennedy	typeset alter_root=$1
121d583b39bSJohn Wren Kennedy	typeset -i id=0
122d583b39bSJohn Wren Kennedy	typeset file
123d583b39bSJohn Wren Kennedy	typeset checksum2
124d583b39bSJohn Wren Kennedy
125d583b39bSJohn Wren Kennedy	while (( id < number )); do
126d583b39bSJohn Wren Kennedy		if (( id == 2 )); then
127d583b39bSJohn Wren Kennedy			(( id = id + 1 ))
128d583b39bSJohn Wren Kennedy			continue
129d583b39bSJohn Wren Kennedy		fi
130d583b39bSJohn Wren Kennedy
131d583b39bSJohn Wren Kennedy		if (( id == 0 )); then
132d583b39bSJohn Wren Kennedy			file=${alter_root}/$TESTDIR/$TESTFILE0
133d583b39bSJohn Wren Kennedy		else
134d583b39bSJohn Wren Kennedy			file=${alter_root}/$TESTDIR.$id/$TESTFILE0
135d583b39bSJohn Wren Kennedy		fi
136d583b39bSJohn Wren Kennedy		[[ ! -e $file ]] && \
137d583b39bSJohn Wren Kennedy			log_fail "$file missing after import."
138d583b39bSJohn Wren Kennedy
139*1d32ba66SJohn Wren Kennedy		checksum2=$(sum $file | awk '{print $1}')
140d583b39bSJohn Wren Kennedy		[[ "$checksum1" != "$checksum2" ]] && \
141d583b39bSJohn Wren Kennedy			log_fail "Checksums differ ($checksum1 != $checksum2)"
142d583b39bSJohn Wren Kennedy
143d583b39bSJohn Wren Kennedy		(( id = id + 1 ))
144d583b39bSJohn Wren Kennedy	done
145d583b39bSJohn Wren Kennedy
146d583b39bSJohn Wren Kennedy	return 0
147d583b39bSJohn Wren Kennedy}
148d583b39bSJohn Wren Kennedy
149d583b39bSJohn Wren Kennedy
150d583b39bSJohn Wren Kennedylog_assert "Verify that 'zpool import -a' succeeds as root."
151d583b39bSJohn Wren Kennedy
152d583b39bSJohn Wren Kennedylog_onexit cleanup_all
153d583b39bSJohn Wren Kennedy
154*1d32ba66SJohn Wren Kennedychecksum1=$(sum $MYTESTFILE | awk '{print $1}')
155d583b39bSJohn Wren Kennedy
156*1d32ba66SJohn Wren Kennedylog_must zpool export $TESTPOOL
157*1d32ba66SJohn Wren Kennedylog_must zpool import $TESTPOOL ${TESTPOOL}-0
158*1d32ba66SJohn Wren Kennedylog_must cp $MYTESTFILE $TESTDIR/$TESTFILE0
159*1d32ba66SJohn Wren Kennedylog_must zpool export ${TESTPOOL}-0
160d583b39bSJohn Wren Kennedy[[ -d /${TESTPOOL}-0 ]] && \
161*1d32ba66SJohn Wren Kennedy	log_must rm -rf /${TESTPOOL}-0
162d583b39bSJohn Wren Kennedy
163d583b39bSJohn Wren Kennedy#
164d583b39bSJohn Wren Kennedy# setup exported pools on normal devices
165d583b39bSJohn Wren Kennedy#
166d583b39bSJohn Wren Kennedynumber=1
167d583b39bSJohn Wren Kennedywhile (( number <= $GROUP_NUM )); do
168d583b39bSJohn Wren Kennedy	if (( number == 2)); then
169d583b39bSJohn Wren Kennedy		(( number = number + 1 ))
170d583b39bSJohn Wren Kennedy		continue
171d583b39bSJohn Wren Kennedy	fi
172d583b39bSJohn Wren Kennedy
173d583b39bSJohn Wren Kennedy	setup_single_disk "${ZFS_DISK1}s${number}" \
174d583b39bSJohn Wren Kennedy		"${TESTPOOL}-$number" \
175d583b39bSJohn Wren Kennedy		"$TESTFS" \
176d583b39bSJohn Wren Kennedy		"$TESTDIR.$number"
177d583b39bSJohn Wren Kennedy
178d583b39bSJohn Wren Kennedy	(( number = number + 1 ))
179d583b39bSJohn Wren Kennedydone
180d583b39bSJohn Wren Kennedy
181d583b39bSJohn Wren Kennedy#
182d583b39bSJohn Wren Kennedy# setup exported pools on raw files
183d583b39bSJohn Wren Kennedy#
184d583b39bSJohn Wren Kennedyfor disk in $DEVICE_FILES
185d583b39bSJohn Wren Kennedydo
186d583b39bSJohn Wren Kennedy
187d583b39bSJohn Wren Kennedy	setup_single_disk "$disk" \
188d583b39bSJohn Wren Kennedy		"${TESTPOOL}-$number" \
189d583b39bSJohn Wren Kennedy		"$TESTFS" \
190d583b39bSJohn Wren Kennedy		"$TESTDIR.$number"
191d583b39bSJohn Wren Kennedy
192d583b39bSJohn Wren Kennedy	(( number = number + 1 ))
193d583b39bSJohn Wren Kennedydone
194d583b39bSJohn Wren Kennedy
195d583b39bSJohn Wren Kennedywhile (( i < ${#options[*]} )); do
196d583b39bSJohn Wren Kennedy
197*1d32ba66SJohn Wren Kennedy	log_must zpool import -d /dev/dsk -d $DEVICE_DIR ${options[i]} -a -f
198d583b39bSJohn Wren Kennedy
199d583b39bSJohn Wren Kennedy	# destroy unintentional imported pools
200*1d32ba66SJohn Wren Kennedy	typeset exclude=`eval echo \"'(${KEEP})'\"`
201*1d32ba66SJohn Wren Kennedy	for unwantedpool in $(zpool list -H -o name \
202*1d32ba66SJohn Wren Kennedy	     | egrep -v "$exclude" | grep -v $TESTPOOL); do
203*1d32ba66SJohn Wren Kennedy		log_must zpool export $unwantedpool
204d583b39bSJohn Wren Kennedy	done
205d583b39bSJohn Wren Kennedy
206d583b39bSJohn Wren Kennedy	if [[ -n ${options[i]} ]]; then
207d583b39bSJohn Wren Kennedy		checksum_all $ALTER_ROOT
208d583b39bSJohn Wren Kennedy	else
209d583b39bSJohn Wren Kennedy		checksum_all
210d583b39bSJohn Wren Kennedy	fi
211d583b39bSJohn Wren Kennedy
212d583b39bSJohn Wren Kennedy	id=0
213d583b39bSJohn Wren Kennedy	while (( id < number )); do
214d583b39bSJohn Wren Kennedy		if poolexists ${TESTPOOL}-$id ; then
215*1d32ba66SJohn Wren Kennedy			log_must zpool export ${TESTPOOL}-$id
216d583b39bSJohn Wren Kennedy		fi
217d583b39bSJohn Wren Kennedy		(( id = id + 1 ))
218d583b39bSJohn Wren Kennedy	done
219d583b39bSJohn Wren Kennedy
220d583b39bSJohn Wren Kennedy	(( i = i + 1 ))
221d583b39bSJohn Wren Kennedydone
222d583b39bSJohn Wren Kennedy
223d583b39bSJohn Wren Kennedylog_pass "'zpool import -a' succeeds as root."
224