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