xref: /titanic_51/usr/src/test/zfs-tests/tests/functional/quota/quota.kshlib (revision f38cb554a534c6df738be3f4d23327e69888e634)
1*f38cb554SJohn Wren Kennedy#
2*f38cb554SJohn Wren Kennedy# CDDL HEADER START
3*f38cb554SJohn Wren Kennedy#
4*f38cb554SJohn Wren Kennedy# The contents of this file are subject to the terms of the
5*f38cb554SJohn Wren Kennedy# Common Development and Distribution License (the "License").
6*f38cb554SJohn Wren Kennedy# You may not use this file except in compliance with the License.
7*f38cb554SJohn Wren Kennedy#
8*f38cb554SJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*f38cb554SJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing.
10*f38cb554SJohn Wren Kennedy# See the License for the specific language governing permissions
11*f38cb554SJohn Wren Kennedy# and limitations under the License.
12*f38cb554SJohn Wren Kennedy#
13*f38cb554SJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
14*f38cb554SJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*f38cb554SJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
16*f38cb554SJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
17*f38cb554SJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
18*f38cb554SJohn Wren Kennedy#
19*f38cb554SJohn Wren Kennedy# CDDL HEADER END
20*f38cb554SJohn Wren Kennedy#
21*f38cb554SJohn Wren Kennedy
22*f38cb554SJohn Wren Kennedy#
23*f38cb554SJohn Wren Kennedy# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24*f38cb554SJohn Wren Kennedy# Use is subject to license terms.
25*f38cb554SJohn Wren Kennedy#
26*f38cb554SJohn Wren Kennedy
27*f38cb554SJohn Wren Kennedy#
28*f38cb554SJohn Wren Kennedy# Copyright (c) 2013 by Delphix. All rights reserved.
29*f38cb554SJohn Wren Kennedy#
30*f38cb554SJohn Wren Kennedy
31*f38cb554SJohn Wren Kennedy. $STF_SUITE/tests/functional/quota/quota.cfg
32*f38cb554SJohn Wren Kennedy
33*f38cb554SJohn Wren Kennedy# BLOCK_SIZE, QUOTA_VALUE and TOLERANCE set in quota.cfg
34*f38cb554SJohn Wren Kennedyreadonly EDQUOT=49
35*f38cb554SJohn Wren Kennedy
36*f38cb554SJohn Wren Kennedy#
37*f38cb554SJohn Wren Kennedy# Function to fill the quota of a zfs filesystem
38*f38cb554SJohn Wren Kennedy#
39*f38cb554SJohn Wren Kennedy# $1 - The File system or container to fill.
40*f38cb554SJohn Wren Kennedy# $2 - The mountpoint to use.
41*f38cb554SJohn Wren Kennedy#
42*f38cb554SJohn Wren Kennedyfunction fill_quota
43*f38cb554SJohn Wren Kennedy{
44*f38cb554SJohn Wren Kennedy	typeset FILESYSTEM="$1"
45*f38cb554SJohn Wren Kennedy	typeset MNTPT="$2"
46*f38cb554SJohn Wren Kennedy
47*f38cb554SJohn Wren Kennedy	log_must $ZFS set quota=$QUOTA_VALUE $FILESYSTEM
48*f38cb554SJohn Wren Kennedy
49*f38cb554SJohn Wren Kennedy	typeset -i write_size=0
50*f38cb554SJohn Wren Kennedy	(( write_size = 2 * QUOTA_VALUE ))
51*f38cb554SJohn Wren Kennedy
52*f38cb554SJohn Wren Kennedy	typeset -i zret=0
53*f38cb554SJohn Wren Kennedy	$FILE_WRITE -o create -f $MNTPT/$TESTFILE1 -b $BLOCK_SIZE \
54*f38cb554SJohn Wren Kennedy		 -c $write_size -d 0
55*f38cb554SJohn Wren Kennedy	zret=$?
56*f38cb554SJohn Wren Kennedy        [[ $zret -ne EDQUOT ]] && \
57*f38cb554SJohn Wren Kennedy            log_fail "Returned error code: $zret. Expected: $EDQUOT."
58*f38cb554SJohn Wren Kennedy
59*f38cb554SJohn Wren Kennedy	typeset -i file_size=`$LS -ls $MNTPT/$TESTFILE1 | $AWK '{ print $1 }'`
60*f38cb554SJohn Wren Kennedy	typeset -i limit=0
61*f38cb554SJohn Wren Kennedy	(( file_size = file_size * 512 ))
62*f38cb554SJohn Wren Kennedy	(( limit = QUOTA_VALUE + TOLERANCE ))
63*f38cb554SJohn Wren Kennedy	(( file_size > limit )) && \
64*f38cb554SJohn Wren Kennedy	    log_fail "File was created larger than the quota value, aborting!!!"
65*f38cb554SJohn Wren Kennedy	return 0
66*f38cb554SJohn Wren Kennedy}
67*f38cb554SJohn Wren Kennedy
68*f38cb554SJohn Wren Kennedy#
69*f38cb554SJohn Wren Kennedy# Function attempts to write another file in a ZFS filesystem
70*f38cb554SJohn Wren Kennedy# that has already filled its quota
71*f38cb554SJohn Wren Kennedy#
72*f38cb554SJohn Wren Kennedyfunction exceed_quota
73*f38cb554SJohn Wren Kennedy{
74*f38cb554SJohn Wren Kennedy	typeset FILESYSTEM="$1"
75*f38cb554SJohn Wren Kennedy	typeset MNTPT="$2"
76*f38cb554SJohn Wren Kennedy
77*f38cb554SJohn Wren Kennedy	log_must fill_quota $FILESYSTEM $MNTPT
78*f38cb554SJohn Wren Kennedy	typeset -i write_size=0
79*f38cb554SJohn Wren Kennedy        (( write_size = 2 * QUOTA_VALUE ))
80*f38cb554SJohn Wren Kennedy	typeset -i zret=0
81*f38cb554SJohn Wren Kennedy	#
82*f38cb554SJohn Wren Kennedy	# Writing a file without API to access return code
83*f38cb554SJohn Wren Kennedy	#
84*f38cb554SJohn Wren Kennedy	log_note "Creating a file in a FS that has already exceeded its quota"
85*f38cb554SJohn Wren Kennedy	$FILE_WRITE -o create -f $MNTPT/$TESTFILE2 \
86*f38cb554SJohn Wren Kennedy		-b $BLOCK_SIZE -c $write_size -d 0
87*f38cb554SJohn Wren Kennedy	zret=$?
88*f38cb554SJohn Wren Kennedy	[[ $zret -ne EDQUOT ]] && \
89*f38cb554SJohn Wren Kennedy	    log_fail "Returned error code: $zret. Expected: EDQUOT."
90*f38cb554SJohn Wren Kennedy	return 0
91*f38cb554SJohn Wren Kennedy}
92