]>
git.proxmox.com Git - mirror_zfs.git/blob - tests/zfs-tests/tests/functional/checksum/filetest_001_pos.ksh
5 # The contents of this file are subject to the terms of the
6 # Common Development and Distribution License (the "License").
7 # You may not use this file except in compliance with the License.
9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 # or http://www.opensolaris.org/os/licensing.
11 # See the License for the specific language governing permissions
12 # and limitations under the License.
14 # When distributing Covered Code, include this CDDL HEADER in each
15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 # If applicable, add the following below this CDDL HEADER, with the
17 # fields enclosed by brackets "[]" replaced with your own identifying
18 # information: Portions Copyright [yyyy] [name of copyright owner]
24 # Copyright (c) 2018, 2019 by Delphix. All rights reserved.
27 .
$STF_SUITE/include
/libtest.shlib
28 .
$STF_SUITE/include
/properties.shlib
29 .
$STF_SUITE/tests
/functional
/checksum
/default.cfg
32 # Sanity test to make sure checksum algorithms work.
33 # For each checksum, create a file in the pool using that checksum. Verify
34 # that there are no checksum errors. Next, for each checksum, create a single
35 # file in the pool using that checksum, corrupt the file, and verify that we
36 # correctly catch the checksum errors.
40 # 1. Create a mirrored pool
41 # 2. Create a file using each checksum
42 # 3. Export/import/scrub the pool
43 # 4. Verify there's no checksum errors.
47 # 6. For each checksum:
48 # 7. Create a file using the checksum
49 # 8. Corrupt all level 0 blocks in the file
51 # 10. Verify that there are checksum errors
53 verify_runnable
"both"
58 [[ -e $TESTDIR ]] && \
59 log_must
rm -rf $TESTDIR/* > /dev
/null
2>&1
62 log_assert
"Create and read back files with using different checksum algorithms"
68 # Get a list of vdevs in our pool
69 set -A array $
(get_disklist_fullpath
)
71 # Get the first vdev, since we will corrupt it later
74 # Test each checksum by writing a file using it, confirm there are no errors.
76 while [[ $i -lt ${#CHECKSUM_TYPES[*]} ]]; do
77 type=${CHECKSUM_TYPES[i]}
78 # edonr not supported on FreeBSD
79 if is_freebsd
&& [[ "$type" == "edonr" ]] ; then
83 log_must zfs
set checksum
=$type $TESTPOOL
84 log_must file_write
-o overwrite
-f $TESTDIR/test_
$type \
89 log_must zpool
export $TESTPOOL
90 log_must zpool import
$TESTPOOL
91 log_must zpool scrub
$TESTPOOL
92 log_must wait_scrubbed
$TESTPOOL
94 cksum=$
(zpool status
-P -v $TESTPOOL |
grep "$firstvdev" |
awk '{print $5}')
95 log_assert
"Normal file write test saw $cksum checksum errors"
96 log_must
[ $cksum -eq 0 ]
100 log_assert
"Test corrupting the files and seeing checksum errors"
102 while [[ $j -lt ${#CHECKSUM_TYPES[*]} ]]; do
103 type=${CHECKSUM_TYPES[$j]}
104 # edonr not supported on FreeBSD
105 if is_freebsd
&& [[ "$type" == "edonr" ]] ; then
109 log_must zfs
set checksum
=$type $TESTPOOL
110 log_must file_write
-o overwrite
-f $TESTDIR/test_
$type \
111 -b $WRITESZ -c 5 -d R
113 # Corrupt the level 0 blocks of this file
114 corrupt_blocks_at_level
$TESTDIR/test_
$type
116 log_must zpool scrub
$TESTPOOL
117 log_must wait_scrubbed
$TESTPOOL
119 cksum=$
(zpool status
-P -v $TESTPOOL |
grep "$firstvdev" | \
122 log_assert
"Checksum '$type' caught $cksum checksum errors"
123 log_must
[ $cksum -ne 0 ]
125 rm -f $TESTDIR/test_
$type
126 log_must zpool
clear $TESTPOOL