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 https://opensource.org/licenses/CDDL-1.0.
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 2008 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/tests/functional/cache/cache.cfg
33. $STF_SUITE/tests/functional/cache/cache.kshlib
34
35#
36# DESCRIPTION:
37#	Verify that cache devices can be block devices, files or character devices
38#
39# STRATEGY:
40#	1. Create a pool
41#	2. Add different object as cache
42#	3. Verify character devices and files pass
43#
44
45verify_runnable "global"
46
47function cleanup_testenv
48{
49	cleanup
50	if [[ -n $lofidev ]]; then
51		if is_linux; then
52			losetup -d $lofidev
53		elif is_freebsd; then
54			mdconfig -du ${lofidev#md}
55		else
56			lofiadm -d $lofidev
57		fi
58	fi
59}
60
61log_assert "Verify cache devices can be disk, file, lofi device or any " \
62  "device that presents a block interface"
63
64verify_disk_count "$DISKS" 2
65log_onexit cleanup_testenv
66
67TESTVOL=testvol1$$
68dsk1=${DISKS%% *}
69log_must zpool create $TESTPOOL ${DISKS#$dsk1}
70
71# Add normal ${DEV_RDSKDIR} device
72log_must zpool add $TESTPOOL cache \
73    ${DEV_RDSKDIR}/${dsk1}
74log_must zpool remove $TESTPOOL ${DEV_RDSKDIR}/${dsk1}
75
76
77# Add provided disk
78log_must zpool add $TESTPOOL cache $dsk1
79log_must verify_cache_device $TESTPOOL $dsk1 'ONLINE'
80log_must zpool remove $TESTPOOL $dsk1
81
82# Add normal file
83log_must zpool add $TESTPOOL cache $VDEV
84ldev=$(random_get $VDEV)
85log_must verify_cache_device $TESTPOOL $ldev 'ONLINE'
86
87# Add loop back device
88if is_linux; then
89	lofidev=$(losetup -f)
90	log_must losetup $lofidev ${VDEV2%% *}
91	lofidev=${lofidev##*/}
92elif is_freebsd; then
93	lofidev=$(mdconfig -a ${VDEV2%% *})
94else
95	lofidev=${VDEV2%% *}
96	log_must lofiadm -a $lofidev
97	lofidev=$(lofiadm $lofidev)
98fi
99
100log_must zpool add $TESTPOOL cache $lofidev
101log_must verify_cache_device $TESTPOOL $lofidev 'ONLINE'
102
103log_pass "Verify cache devices can be disk, file, lofi device or any " \
104  "device that presents a block interface"
105