11.6Srillig# $NetBSD: t_read_write.sh,v 1.6 2024/04/28 07:27:41 rillig Exp $ 21.1Sjmmv# 31.3Sjmmv# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc. 41.1Sjmmv# All rights reserved. 51.1Sjmmv# 61.1Sjmmv# Redistribution and use in source and binary forms, with or without 71.1Sjmmv# modification, are permitted provided that the following conditions 81.1Sjmmv# are met: 91.1Sjmmv# 1. Redistributions of source code must retain the above copyright 101.1Sjmmv# notice, this list of conditions and the following disclaimer. 111.1Sjmmv# 2. Redistributions in binary form must reproduce the above copyright 121.1Sjmmv# notice, this list of conditions and the following disclaimer in the 131.1Sjmmv# documentation and/or other materials provided with the distribution. 141.1Sjmmv# 151.1Sjmmv# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 161.1Sjmmv# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 171.1Sjmmv# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 181.1Sjmmv# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 191.1Sjmmv# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 201.1Sjmmv# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 211.1Sjmmv# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 221.1Sjmmv# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 231.1Sjmmv# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 241.1Sjmmv# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 251.1Sjmmv# POSSIBILITY OF SUCH DAMAGE. 261.1Sjmmv# 271.1Sjmmv 281.1Sjmmv# 291.1Sjmmv# Verifies that the read and write operations work. 301.1Sjmmv# 311.1Sjmmv 321.1Sjmmvatf_test_case basic 331.1Sjmmvbasic_head() { 341.1Sjmmv atf_set "descr" "Checks that file removal works" 351.1Sjmmv atf_set "require.user" "root" 361.1Sjmmv} 371.1Sjmmvbasic_body() { 381.1Sjmmv test_mount 391.1Sjmmv 401.1Sjmmv echo "Testing write to a small file" 411.1Sjmmv echo foo >a || atf_fail "Failed to write to file" 421.1Sjmmv [ $(md5 a | cut -d ' ' -f 4) = d3b07384d113edec49eaa6238ad5ff00 ] || \ 431.1Sjmmv atf_fail "Invalid file contents" 441.1Sjmmv 451.1Sjmmv echo "Testing appending to a small file" 461.1Sjmmv echo bar >>a || atf_fail "Failed to append data to file" 471.1Sjmmv [ $(md5 a | cut -d ' ' -f 4) = f47c75614087a8dd938ba4acff252494 ] || \ 481.1Sjmmv atf_fail "Invalid file contents" 491.1Sjmmv 501.1Sjmmv echo "Testing write to a big file (bigger than a page)" 511.1Sjmmv jot 10000 >b || atf_fail "Failed to create a big file" 521.1Sjmmv [ $(md5 b | cut -d ' ' -f 4) = 72d4ff27a28afbc066d5804999d5a504 ] || \ 531.1Sjmmv atf_fail "Invalid file contents" 541.1Sjmmv 551.1Sjmmv test_unmount 561.1Sjmmv} 571.1Sjmmv 581.1Sjmmvatf_test_case kqueue 591.1Sjmmvkqueue_head() { 601.1Sjmmv atf_set "descr" "Checks that writing to a file raises the" \ 611.1Sjmmv "appropriate kqueue events" 621.1Sjmmv atf_set "require.user" "root" 631.1Sjmmv} 641.1Sjmmvkqueue_body() { 651.1Sjmmv test_mount 661.1Sjmmv 671.6Srillig atf_check -s exit:0 -o ignore -e ignore \ 681.3Sjmmv dd if=/dev/zero of=c bs=1k count=10 691.1Sjmmv echo 'dd if=/dev/zero of=c seek=2 bs=1k count=1 conv=notrunc' \ 701.1Sjmmv '>/dev/null 2>&1' | kqueue_monitor 1 c 711.1Sjmmv kqueue_check c NOTE_WRITE 721.1Sjmmv 731.1Sjmmv echo foo >d 741.1Sjmmv echo 'echo bar >>d' | kqueue_monitor 2 d 751.1Sjmmv kqueue_check d NOTE_EXTEND 761.1Sjmmv kqueue_check d NOTE_WRITE 771.1Sjmmv 781.1Sjmmv test_unmount 791.1Sjmmv} 801.1Sjmmv 811.1Sjmmvatf_init_test_cases() { 821.1Sjmmv . $(atf_get_srcdir)/../h_funcs.subr 831.1Sjmmv . $(atf_get_srcdir)/h_funcs.subr 841.1Sjmmv 851.1Sjmmv atf_add_test_case basic 861.1Sjmmv atf_add_test_case kqueue 871.1Sjmmv} 88