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 2008 Sun Microsystems, Inc.  All rights reserved.
27# Use is subject to license terms.
28#
29# ident	"@(#)zfs_snapshot_005_neg.ksh	1.2	08/05/14 SMI"
30#
31
32. $STF_SUITE/include/libtest.kshlib
33
34#################################################################################
35#
36# __stc_assertion_start
37#
38# ID: zfs_snapshot_005_neg
39#
40# DESCRIPTION:
41#	Long name filesystem with snapshot should not break ZFS.
42#
43# STRATEGY:
44#	1. Create filesystem and snapshot.
45#	2. When the snapshot length is 256, rename the filesystem.
46#	3. Verify it does not break ZFS
47#
48# TESTABILITY: explicit
49#
50# TEST_AUTOMATION_LEVEL: automated
51#
52# CODING_STATUS: COMPLETED (2007-08-09)
53#
54# __stc_assertion_end
55#
56################################################################################
57
58verify_runnable "both"
59
60log_assert "Verify long name filesystem with snapshot should not break ZFS."
61
62initfs=$TESTPOOL/$TESTFS/$TESTFS
63basefs=$initfs
64typeset -i ret=0 len snaplen
65while ((ret == 0)); do
66	$ZFS create $basefs
67	$ZFS snapshot $basefs@snap1
68	ret=$?
69
70	if ((ret != 0)); then
71		len=$($ECHO $basefs | $WC -c)
72		log_note "The deeply-nested filesystem len: $len"
73
74		#
75		# Make sure there are at lease 2 characters left
76		# for snapshot name space, otherwise snapshot name
77		# is incorrect
78		#
79		if ((len >= 255)); then
80			if datasetexists $basefs; then
81				log_must $ZFS destroy -r $basefs
82			fi
83			basefs=${basefs%/*}
84			len=$($ECHO $basefs| $WC -c)
85		fi
86		break
87	fi
88
89	basefs=$basefs/$TESTFS
90done
91
92# Make snapshot name length match the longest one
93((snaplen = 256 - len - 1)) # 1: @
94snap=$(gen_dataset_name $snaplen "s")
95log_must $ZFS snapshot $basefs@$snap
96
97log_mustnot $ZFS rename $basefs ${basefs}a
98log_mustnot $ZFS rename $basefs ${basefs}-new
99log_mustnot $ZFS rename $initfs ${initfs}-new
100log_mustnot $ZFS rename $TESTPOOL/$TESTFS $TESTPOOL/$TESTFS-new
101
102log_pass "Verify long name filesystem with snapshot should not break ZFS."
103