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