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