1 #!/usr/bin/ksh
   2 
   3 #
   4 # This file and its contents are supplied under the terms of the
   5 # Common Development and Distribution License ("CDDL"), version 1.0.
   6 # You may only use this file in accordance with the terms of version
   7 # 1.0 of the CDDL.
   8 #
   9 # A full copy of the text of the CDDL should have accompanied this
  10 # source.  A copy of the CDDL is also available via the Internet at
  11 # http://www.illumos.org/license/CDDL.
  12 #
  13 
  14 #
  15 # Copyright (c) 2012, 2016 by Delphix. All rights reserved.
  16 #
  17 
  18 . $STF_SUITE/include/libtest.shlib
  19 . $STF_SUITE/include/properties.shlib
  20 . $STF_SUITE/tests/functional/nopwrite/nopwrite.shlib
  21 
  22 #
  23 # Description:
  24 # Verify that if the checksum on the origin and clone is sha256, any compression
  25 # algorithm enables nopwrite.
  26 #
  27 # Strategy:
  28 # 1. Create an origin dataset with compression and sha256 checksum.
  29 # 2. Write a 64M file into the origin dataset.
  30 # 3. For each of 4 randomly chosen compression types:
  31 # 3a. Create a snap and clone (inheriting the checksum property) of the origin.
  32 # 3b. Apply the compression property to the clone.
  33 # 3c. Write the same 64M of data into the file that exists in the clone.
  34 # 3d. Verify that no new space was consumed.
  35 #
  36 
  37 verify_runnable "global"
  38 origin="$TESTPOOL/$TESTFS"
  39 log_onexit cleanup
  40 
  41 function cleanup
  42 {
  43         datasetexists $origin && log_must zfs destroy -R $origin
  44         log_must zfs create -o mountpoint=$TESTDIR $origin
  45 }
  46 
  47 log_assert "nopwrite works with sha256 and any compression algorithm"
  48 
  49 log_must zfs set compress=on $origin
  50 log_must zfs set checksum=sha256 $origin
  51 dd if=/dev/urandom of=$TESTDIR/file bs=1024k count=$MEGS conv=notrunc \
  52     >/dev/null 2>&1 || log_fail "initial dd failed."
  53 
  54 # Verify nop_write for 4 random compression algorithms
  55 for i in $(get_rand_compress 4); do
  56         zfs snapshot $origin@a || log_fail "zfs snap failed"
  57         log_must zfs clone -o compress=$i $origin@a $origin/clone
  58         dd if=/$TESTDIR/file of=/$TESTDIR/clone/file bs=1024k count=$MEGS \
  59             conv=notrunc >/dev/null 2>&1 || log_fail "dd failed."
  60         log_must verify_nopwrite $origin $origin@a $origin/clone
  61         zfs destroy -R $origin@a || log_fail "zfs destroy failed"
  62 done
  63 
  64 log_pass "nopwrite works with sha256 and any compression algorithm"