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 37verify_runnable "global" 38origin="$TESTPOOL/$TESTFS" 39log_onexit cleanup 40 41function cleanup 42{ 43 datasetexists $origin && log_must zfs destroy -R $origin 44 log_must zfs create -o mountpoint=$TESTDIR $origin 45} 46 47log_assert "nopwrite works with sha256 and any compression algorithm" 48 49log_must zfs set compress=on $origin 50log_must zfs set checksum=sha256 $origin 51dd 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 55for 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" 62done 63 64log_pass "nopwrite works with sha256 and any compression algorithm" 65