1#!/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, Delphix. All rights reserved. 16# Copyright (c) 2019, Kjeld Schouten-Lebbing. All Rights Reserved. 17# 18 19. $STF_SUITE/include/properties.shlib 20. $STF_SUITE/include/libtest.shlib 21. $STF_SUITE/tests/functional/nopwrite/nopwrite.shlib 22 23# 24# Description: 25# Verify that if the checksum on the origin and clone is sha256, any compression 26# algorithm enables nopwrite. 27# 28# Strategy: 29# 1. Create an origin dataset with compression and sha256 checksum. 30# 2. Write a 64M file into the origin dataset. 31# 3. For each of 4 randomly chosen compression types: 32# 3a. Create a snap and clone (inheriting the checksum property) of the origin. 33# 3b. Apply the compression property to the clone. 34# 3c. Write the same 64M of data into the file that exists in the clone. 35# 3d. Verify that no new space was consumed. 36# 37 38verify_runnable "global" 39origin="$TESTPOOL/$TESTFS" 40log_onexit cleanup 41 42function cleanup 43{ 44 datasetexists $origin && destroy_dataset $origin -R 45 log_must zfs create -o mountpoint=$TESTDIR $origin 46} 47 48log_assert "nopwrite works with sha256 and any compression algorithm" 49 50log_must zfs set compress=on $origin 51log_must zfs set checksum=sha256 $origin 52dd if=/dev/urandom of=$TESTDIR/file bs=1024k count=$MEGS conv=notrunc \ 53 >/dev/null 2>&1 || log_fail "initial dd failed." 54 55# Verify nop_write for all compression algorithms except "off" 56for i in "${compress_prop_vals[@]:1}"; do 57 zfs snapshot $origin@a || log_fail "zfs snap failed" 58 log_must zfs clone -o compress=$i $origin@a $origin/clone 59 dd if=/$TESTDIR/file of=/$TESTDIR/clone/file bs=1024k count=$MEGS \ 60 conv=notrunc >/dev/null 2>&1 || log_fail "dd failed." 61 log_must verify_nopwrite $origin $origin@a $origin/clone 62 zfs destroy -R $origin@a || log_fail "zfs destroy failed" 63done 64 65log_pass "nopwrite works with sha256 and any compression algorithm" 66