1#!/bin/ksh -p
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22
23#
24# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
25# Use is subject to license terms.
26#
27
28#
29# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
30#
31
32. $STF_SUITE/include/libtest.shlib
33. $STF_SUITE/tests/functional/cachefile/cachefile.cfg
34. $STF_SUITE/tests/functional/cachefile/cachefile.kshlib
35
36#
37# DESCRIPTION:
38#	Verify set, export and destroy when cachefile is set on pool.
39#
40# STRATEGY:
41#	1. Create two pools with one same cahcefile1.
42#	2. Set cachefile of the two pools to another same cachefile2.
43#	3. Verify cachefile1 not exist.
44#	4. Export the two pools.
45#	5. Verify cachefile2 not exist.
46#	6. Import the two pools and set cachefile to cachefile2.
47#	7. Destroy the two pools.
48#	8. Verify cachefile2 not exist.
49#
50
51verify_runnable "global"
52
53function cleanup
54{
55	poolexists $TESTPOOL1 && destroy_pool $TESTPOOL1
56	poolexists $TESTPOOL2 && destroy_pool $TESTPOOL2
57
58	mntpnt=$(get_prop mountpoint $TESTPOOL)
59	typeset -i i=0
60	while ((i < 2)); do
61		if [[ -e $mntpnt/vdev$i ]]; then
62			log_must rm -f $mntpnt/vdev$i
63		fi
64		((i += 1))
65	done
66
67	if poolexists $TESTPOOL ; then
68		destroy_pool $TESTPOOL
69	fi
70
71	for file in $CPATH1 $CPATH2 ; do
72		if [[ -f $file ]] ; then
73			log_must rm $file
74		fi
75	done
76}
77
78
79log_assert "Verify set, export and destroy when cachefile is set on pool."
80log_onexit cleanup
81
82log_must zpool create $TESTPOOL $DISKS
83
84mntpnt=$(get_prop mountpoint $TESTPOOL)
85typeset -i i=0
86while ((i < 2)); do
87	log_must mkfile $MINVDEVSIZE $mntpnt/vdev$i
88	eval vdev$i=$mntpnt/vdev$i
89	((i += 1))
90done
91
92log_must zpool create -o cachefile=$CPATH1 $TESTPOOL1 $vdev0
93log_must pool_in_cache $TESTPOOL1 $CPATH1
94log_must zpool create -o cachefile=$CPATH1 $TESTPOOL2 $vdev1
95log_must pool_in_cache $TESTPOOL2 $CPATH1
96
97log_must zpool set cachefile=$CPATH2 $TESTPOOL1
98log_must pool_in_cache $TESTPOOL1 $CPATH2
99log_must zpool set cachefile=$CPATH2 $TESTPOOL2
100log_must pool_in_cache $TESTPOOL2 $CPATH2
101if [[ -f $CPATH1 ]]; then
102	log_fail "Verify set when cachefile is set on pool."
103fi
104
105log_must zpool export $TESTPOOL1
106log_must zpool export $TESTPOOL2
107if [[ -f $CPATH2 ]]; then
108	log_fail "Verify export when cachefile is set on pool."
109fi
110
111log_must zpool import -d $mntpnt $TESTPOOL1
112log_must zpool set cachefile=$CPATH2 $TESTPOOL1
113log_must pool_in_cache $TESTPOOL1 $CPATH2
114log_must zpool import -d $mntpnt $TESTPOOL2
115log_must zpool set cachefile=$CPATH2 $TESTPOOL2
116log_must pool_in_cache $TESTPOOL2 $CPATH2
117
118log_must zpool destroy $TESTPOOL1
119log_must zpool destroy $TESTPOOL2
120if [[ -f $CPATH2 ]]; then
121	log_fail "Verify destroy when cachefile is set on pool."
122fi
123
124log_pass "Verify set, export and destroy when cachefile is set on pool."
125