1 #!/bin/ksh -p
   2 #
   3 # CDDL HEADER START
   4 #
   5 # This file and its contents are supplied under the terms of the
   6 # Common Development and Distribution License ("CDDL"), version 1.0.
   7 # You may only use this file in accordance with the terms of version
   8 # 1.0 of the CDDL.
   9 #
  10 # A full copy of the text of the CDDL should have accompanied this
  11 # source.  A copy of the CDDL is also available via the Internet at
  12 # http://www.illumos.org/license/CDDL.
  13 #
  14 # CDDL HEADER END
  15 #
  16 
  17 #
  18 # Copyright 2015, OmniTI Computer Consulting, Inc. All rights reserved.
  19 #
  20 
  21 . $STF_SUITE/include/libtest.shlib
  22 
  23 #
  24 # DESCRIPTION:
  25 #       refquota should be sent-and-received, but it should not interfere with
  26 #       the receipt of intermediate snapshots that may have proceeded the
  27 #       final snapshot, where the refquota should hold.
  28 #
  29 # STRATEGY:
  30 #       1. Create a filesystem.
  31 #       2. Create two equal-sized large files.
  32 #       3. Snapshot the filesystem.
  33 #       4. Remove one of the two large files.
  34 #       5. Create a refquota larger than one file, but smaller than both.
  35 #       6. Snapshot the filesystem again.
  36 #       7. Send a replication stream of the second snapshot to a new filesystem.
  37 #
  38 #
  39 # NOTE: illumos bug 4986 used the above strategy to demonstrate a failure.
  40 #       This test will fail until illumos 4986 is fixed.
  41 #
  42 
  43 verify_runnable "both"
  44 
  45 function cleanup
  46 {
  47         log_must $ZFS destroy -rf $TESTPOOL/$TESTFS1
  48         log_must $ZFS destroy -rf $TESTPOOL/$TESTFS2
  49 }
  50 
  51 log_assert "refquota is properly sent-and-received, regardless of any " \
  52         "intermediate snapshots sent by a replication stream."
  53 log_onexit cleanup
  54 
  55 orig=$TESTPOOL/$TESTFS1
  56 dest=$TESTPOOL/$TESTFS2
  57 #       1. Create a filesystem.
  58 log_must $ZFS create $orig
  59 origdir=$(get_prop mountpoint $orig)
  60 
  61 #       2. Create two equal-sized large files.
  62 log_must $MKFILE 25M $origdir/file1
  63 log_must $MKFILE 25M $origdir/file2
  64 log_must $SYNC
  65 
  66 #       3. Snapshot the filesystem.
  67 log_must $ZFS snapshot $orig@1
  68 
  69 #       4. Remove one of the two large files.
  70 log_must $RM $origdir/file2
  71 log_must $SYNC
  72 
  73 #       5. Create a refquota larger than one file, but smaller than both.
  74 log_must $ZFS set refquota=38M $orig
  75 
  76 #       6. Snapshot the filesystem again.
  77 log_must $ZFS snapshot $orig@2
  78 
  79 #       7. Send a replication stream of the second snapshot to a new filesystem.
  80 log_must $ZFS send -R $orig@2 | $ZFS recv $dest
  81 
  82 log_pass "refquota is properly sent-and-received, regardless of any " \
  83         "intermediate snapshots sent by a replication stream."