1 #!/usr/bin/ksh -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 #
  24 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  25 # Use is subject to license terms.
  26 #
  27 
  28 #
  29 # Copyright (c) 2013 by Delphix. All rights reserved.
  30 #
  31 
  32 . $STF_SUITE/include/libtest.shlib
  33 . $STF_SUITE/tests/functional/userquota/userquota_common.kshlib
  34 
  35 #
  36 # DESCRIPTION:
  37 #       Check user|group quota to snapshot that:
  38 #       1) can not set user|group quota to snapshot directly
  39 #       2) snapshot can inherit the parent fs's user|groupquota
  40 #       3) the user|group quota will not change even the parent fs's quota changed.
  41 #
  42 #
  43 # STRATEGY:
  44 #       1. create a snapshot of a fs
  45 #       2. set the user|group quota to snapshot and expect fail
  46 #       3. set user|group quota to fs and check the snapshot
  47 #       4. re-set user|group quota to fs and check the snapshot's value
  48 #
  49 
  50 function cleanup
  51 {
  52         if datasetexists $snap_fs; then
  53                 log_must $ZFS destroy $snap_fs
  54         fi
  55 
  56         log_must cleanup_quota
  57 }
  58 
  59 log_onexit cleanup
  60 
  61 log_assert "Check the snapshot's user|group quota"
  62 typeset snap_fs=$QFS@snap
  63 
  64 
  65 log_must $ZFS set userquota@$QUSER1=$UQUOTA_SIZE $QFS
  66 log_must check_quota "userquota@$QUSER1" $QFS "$UQUOTA_SIZE"
  67 
  68 log_must $ZFS set groupquota@$QGROUP=$GQUOTA_SIZE $QFS
  69 log_must check_quota "groupquota@$QGROUP" $QFS "$GQUOTA_SIZE"
  70 
  71 log_must $ZFS snapshot $snap_fs
  72 
  73 log_note "check the snapshot $snap_fs user|group quota"
  74 log_must check_quota "userquota@$QUSER1" $snap_fs "$UQUOTA_SIZE"
  75 log_must check_quota "groupquota@$QGROUP" $snap_fs "$GQUOTA_SIZE"
  76 
  77 log_note  "set userquota and groupquota to $snap_fs which will fail"
  78 log_mustnot $ZFS set userquota@$QUSER1=$SNAP_QUOTA $snap_fs
  79 log_mustnot $ZFS set groupquota@$QGROUP=$SNAP_QUOTA $snap_fs
  80 
  81 log_note "change the parent's userquota and groupquota"
  82 log_must $ZFS set userquota@$QUSER1=$TEST_QUOTA $QFS
  83 log_must $ZFS set groupquota@$QGROUP=$TEST_QUOTA $QFS
  84 
  85 log_must check_quota "userquota@$QUSER1" $QFS $TEST_QUOTA
  86 log_must check_quota "groupquota@$QGROUP" $QFS $TEST_QUOTA
  87 
  88 log_note "check the snapshot $snap_fs userquota and groupquota"
  89 log_must check_quota "userquota@$QUSER1" $snap_fs "$UQUOTA_SIZE"
  90 log_must check_quota "groupquota@$QGROUP" $snap_fs "$GQUOTA_SIZE"
  91 
  92 log_pass "Check the snapshot's user|group quota pass as expect"