diff options
Diffstat (limited to 'tests/zfs-tests/tests/functional/block_cloning/block_cloning.kshlib')
-rw-r--r-- | tests/zfs-tests/tests/functional/block_cloning/block_cloning.kshlib | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/zfs-tests/tests/functional/block_cloning/block_cloning.kshlib b/tests/zfs-tests/tests/functional/block_cloning/block_cloning.kshlib new file mode 100644 index 000000000000..50f3a3d262c0 --- /dev/null +++ b/tests/zfs-tests/tests/functional/block_cloning/block_cloning.kshlib @@ -0,0 +1,58 @@ +#!/bin/ksh -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or https://opensource.org/licenses/CDDL-1.0. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright (c) 2023, Klara Inc. +# + +. $STF_SUITE/include/libtest.shlib + +function have_same_content +{ + typeset hash1=$(md5digest $1) + typeset hash2=$(md5digest $2) + + log_must [ "$hash1" = "$hash2" ] +} + +# +# get_same_blocks dataset1 path/to/file1 dataset2 path/to/file2 +# +# Returns a space-separated list of the indexes (starting at 0) of the L0 +# blocks that are shared between both files (by first DVA and checksum). +# Assumes that the two files have the same content, use have_same_content to +# confirm that. +# +function get_same_blocks +{ + KEY=$5 + if [ ${#KEY} -gt 0 ]; then + KEY="--key=$KEY" + fi + typeset zdbout=${TMPDIR:-$TEST_BASE_DIR}/zdbout.$$ + zdb $KEY -vvvvv $1 -O $2 | \ + awk '/ L0 / { print l++ " " $3 " " $7 }' > $zdbout.a + zdb $KEY -vvvvv $3 -O $4 | \ + awk '/ L0 / { print l++ " " $3 " " $7 }' > $zdbout.b + echo $(sort -n $zdbout.a $zdbout.b | uniq -d | cut -f1 -d' ') +} + |