1#!/usr/local/bin/ksh93 -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# $FreeBSD$
24
25#
26# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
27# Use is subject to license terms.
28#
29#ident	"@(#)zpool_create_008_pos.ksh	1.5	09/06/22 SMI"
30#
31. $STF_SUITE/include/libtest.kshlib
32. $STF_SUITE/tests/cli_root/zpool_create/zpool_create.kshlib
33
34################################################################################
35#
36# __stc_assertion_start
37#
38# ID: zpool_create_008_pos
39#
40# DESCRIPTION:
41# 'zpool create' have to use '-f' scenarios
42#
43# STRATEGY:
44# 1. Prepare the scenarios
45# 2. Create pool without '-f' and verify it fails
46# 3. Create pool with '-f' and verify it succeeds
47#
48# TESTABILITY: explicit
49#
50# TEST_AUTOMATION_LEVEL: automated
51#
52# CODING_STATUS: COMPLETED (2007-08-17)
53#
54# __stc_assertion_end
55#
56################################################################################
57
58verify_runnable "global"
59
60function cleanup
61{
62	if [[ $exported_pool == true ]]; then
63		if [[ $force_pool == true ]]; then
64			log_must $ZPOOL create -f $TESTPOOL ${disk}p1
65		else
66			log_must $ZPOOL import $TESTPOOL
67		fi
68	fi
69
70	if poolexists $TESTPOOL ; then
71                destroy_pool $TESTPOOL
72	fi
73
74	if poolexists $TESTPOOL1 ; then
75                destroy_pool $TESTPOOL1
76	fi
77
78	#
79	# recover it back to EFI label
80	#
81	wipe_partition_table $disk
82}
83
84#
85# create overlap slice 0 and 1 on $disk
86#
87function create_overlap_slice
88{
89        typeset format_file=$TMPDIR/format_overlap.${TESTCASE_ID}
90        typeset disk=$1
91
92        $ECHO "partition" >$format_file
93        $ECHO "0" >> $format_file
94        $ECHO "" >> $format_file
95        $ECHO "" >> $format_file
96        $ECHO "0" >> $format_file
97        $ECHO "200m" >> $format_file
98        $ECHO "1" >> $format_file
99        $ECHO "" >> $format_file
100        $ECHO "" >> $format_file
101        $ECHO "0" >> $format_file
102        $ECHO "400m" >> $format_file
103        $ECHO "label" >> $format_file
104        $ECHO "" >> $format_file
105        $ECHO "q" >> $format_file
106        $ECHO "q" >> $format_file
107
108        $FORMAT -e -s -d $disk -f $format_file
109	typeset -i ret=$?
110        $RM -fr $format_file
111
112	if (( ret != 0 )); then
113                log_fail "unable to create overlap slice."
114        fi
115
116        return 0
117}
118
119log_assert "'zpool create' have to use '-f' scenarios"
120log_onexit cleanup
121
122typeset exported_pool=false
123typeset force_pool=false
124
125if [[ -n $DISK ]]; then
126        disk=$DISK
127else
128        disk=$DISK0
129fi
130
131# overlapped slices as vdev need -f to create pool
132
133# Make the disk is EFI labeled first via pool creation
134create_pool $TESTPOOL $disk
135destroy_pool $TESTPOOL
136
137# Make the disk is VTOC labeled since only VTOC label supports overlap
138log_must labelvtoc $disk
139log_must create_overlap_slice $disk
140
141log_mustnot $ZPOOL create $TESTPOOL ${disk}p1
142log_must $ZPOOL create -f $TESTPOOL ${disk}p1
143destroy_pool $TESTPOOL
144
145# exported device to be as spare vdev need -f to create pool
146
147log_must $ZPOOL create -f $TESTPOOL $disk
148destroy_pool $TESTPOOL
149log_must partition_disk $SIZE $disk 6
150create_pool $TESTPOOL ${disk}p1 ${disk}p2
151log_must $ZPOOL export $TESTPOOL
152exported_pool=true
153log_mustnot $ZPOOL create $TESTPOOL1 ${disk}p3 spare ${disk}p2
154create_pool $TESTPOOL1 ${disk}p3 spare ${disk}p2
155force_pool=true
156destroy_pool $TESTPOOL1
157
158log_pass "'zpool create' have to use '-f' scenarios"
159