xref: /freebsd/sys/contrib/openzfs/tests/zfs-tests/tests/functional/block_cloning/block_cloning.kshlib (revision 61145dc2b94f12f6a47344fb9aac702321880e43)
1#!/bin/ksh -p
2# SPDX-License-Identifier: CDDL-1.0
3#
4# CDDL HEADER START
5#
6# The contents of this file are subject to the terms of the
7# Common Development and Distribution License (the "License").
8# You may not use this file except in compliance with the License.
9#
10# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
11# or https://opensource.org/licenses/CDDL-1.0.
12# See the License for the specific language governing permissions
13# and limitations under the License.
14#
15# When distributing Covered Code, include this CDDL HEADER in each
16# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
17# If applicable, add the following below this CDDL HEADER, with the
18# fields enclosed by brackets "[]" replaced with your own identifying
19# information: Portions Copyright [yyyy] [name of copyright owner]
20#
21# CDDL HEADER END
22#
23
24#
25# Copyright (c) 2023, Klara Inc.
26#
27
28. $STF_SUITE/include/libtest.shlib
29
30function have_same_content
31{
32	typeset hash1=$(xxh128digest $1)
33	typeset hash2=$(xxh128digest $2)
34
35	log_must [ "$hash1" = "$hash2" ]
36}
37
38#
39# get_same_blocks dataset1 path/to/file1 dataset2 path/to/file2
40#
41# Returns a space-separated list of the indexes (starting at 0) of the L0
42# blocks that are shared between both files (by first DVA and checksum).
43# Assumes that the two files have the same content, use have_same_content to
44# confirm that.
45#
46function get_same_blocks
47{
48    KEY=$5
49    if [ ${#KEY} -gt 0 ]; then
50        KEY="--key=$KEY"
51    fi
52	typeset zdbout1=$(mktemp)
53	typeset zdbout2=$(mktemp)
54	zdb $KEY -vvvvv $1 -O $2 | \
55	    awk '/ L0 / { print l++ " " $3 " " $7 }' > $zdbout1
56	zdb $KEY -vvvvv $3 -O $4 | \
57	    awk '/ L0 / { print l++ " " $3 " " $7 }' > $zdbout2
58	echo $(sort -n $zdbout1 $zdbout2 | uniq -d | cut -f1 -d' ')
59	rm -f $zdbout1 $zdbout2
60}
61
62