19b7401e7Sjmmv#!/bin/sh 29b7401e7Sjmmv# 3*d8f5b04cSrillig# $NetBSD: h_funcs.subr,v 1.6 2024/04/28 07:27:41 rillig Exp $ 49b7401e7Sjmmv# 59b7401e7Sjmmv# Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc. 69b7401e7Sjmmv# All rights reserved. 79b7401e7Sjmmv# 89b7401e7Sjmmv# Redistribution and use in source and binary forms, with or without 99b7401e7Sjmmv# modification, are permitted provided that the following conditions 109b7401e7Sjmmv# are met: 119b7401e7Sjmmv# 1. Redistributions of source code must retain the above copyright 129b7401e7Sjmmv# notice, this list of conditions and the following disclaimer. 139b7401e7Sjmmv# 2. Redistributions in binary form must reproduce the above copyright 149b7401e7Sjmmv# notice, this list of conditions and the following disclaimer in the 159b7401e7Sjmmv# documentation and/or other materials provided with the distribution. 169b7401e7Sjmmv# 179b7401e7Sjmmv# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 189b7401e7Sjmmv# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 199b7401e7Sjmmv# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 209b7401e7Sjmmv# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 219b7401e7Sjmmv# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 229b7401e7Sjmmv# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 239b7401e7Sjmmv# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 249b7401e7Sjmmv# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 259b7401e7Sjmmv# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 269b7401e7Sjmmv# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 279b7401e7Sjmmv# POSSIBILITY OF SUCH DAMAGE. 289b7401e7Sjmmv# 299b7401e7Sjmmv 309b7401e7SjmmvMount_Point= 319b7401e7Sjmmv 329b7401e7Sjmmv# 339b7401e7Sjmmv# test_mount [args] 349b7401e7Sjmmv# 359b7401e7Sjmmv# Mounts tmpfs over ${Mount_Point} and changes the current directory 369b7401e7Sjmmv# to the mount point. Optional arguments may be passed to the 379b7401e7Sjmmv# mount command. 389b7401e7Sjmmv# 399b7401e7Sjmmvtest_mount() { 409b7401e7Sjmmv require_fs tmpfs 419b7401e7Sjmmv 429b7401e7Sjmmv Mount_Point=$(pwd)/mntpt 43*d8f5b04cSrillig atf_check -s exit:0 -o empty -e empty mkdir "${Mount_Point}" 440818487dSjmmv echo "mount -t tmpfs ${*} tmpfs ${Mount_Point}" 450818487dSjmmv mount -t tmpfs "${@}" tmpfs "${Mount_Point}" 2>mounterr 460818487dSjmmv if [ "${?}" -ne 0 ]; then 470818487dSjmmv cat mounterr 1>&2 480818487dSjmmv if grep 'Operation not supported' mounterr > /dev/null; then 4991971b52Spooka atf_skip "tmpfs not supported" 5091971b52Spooka fi 510818487dSjmmv atf_fail "Failed to mount a tmpfs file system" 5291971b52Spooka fi 530818487dSjmmv cd "${Mount_Point}" 549b7401e7Sjmmv} 559b7401e7Sjmmv 569b7401e7Sjmmv# 579b7401e7Sjmmv# test_unmount 589b7401e7Sjmmv# 599b7401e7Sjmmv# Unmounts the file system mounted by test_mount. 609b7401e7Sjmmv# 619b7401e7Sjmmvtest_unmount() { 629b7401e7Sjmmv cd - >/dev/null 63*d8f5b04cSrillig atf_check -s exit:0 -o empty -e empty umount ${Mount_Point} 64*d8f5b04cSrillig atf_check -s exit:0 -o empty -e empty rmdir ${Mount_Point} 659b7401e7Sjmmv Mount_Point= 669b7401e7Sjmmv} 679b7401e7Sjmmv 689b7401e7Sjmmv# 699b7401e7Sjmmv# kqueue_monitor expected_nevents file1 [.. fileN] 709b7401e7Sjmmv# 719b7401e7Sjmmv# Monitors the commands given through stdin (one per line) using 729b7401e7Sjmmv# kqueue and stores the events raised in a log that can be later 739b7401e7Sjmmv# verified with kqueue_check. 749b7401e7Sjmmv# 759b7401e7Sjmmvkqueue_monitor() { 769b7401e7Sjmmv nev=${1}; shift 779b7401e7Sjmmv echo "Running kqueue-monitored commands and expecting" \ 789b7401e7Sjmmv "${nev} events" 799b7401e7Sjmmv $(atf_get_srcdir)/h_tools kqueue ${*} >kqueue.log || \ 809b7401e7Sjmmv atf_fail "Could not launch kqueue monitor" 819b7401e7Sjmmv got=$(wc -l kqueue.log | awk '{ print $1 }') 829b7401e7Sjmmv test ${got} -eq ${nev} || \ 839b7401e7Sjmmv atf_fail "Got ${got} events but expected ${nev}" 849b7401e7Sjmmv} 859b7401e7Sjmmv 869b7401e7Sjmmv# 879b7401e7Sjmmv# kqueue_check file event 889b7401e7Sjmmv# 899b7401e7Sjmmv# Checks if kqueue raised the given event when monitoring the 909b7401e7Sjmmv# given file. 919b7401e7Sjmmv# 929b7401e7Sjmmvkqueue_check() { 939b7401e7Sjmmv echo "Checking if ${1} received ${2}" 949b7401e7Sjmmv grep "^${1} - ${2}$" kqueue.log >/dev/null || \ 959b7401e7Sjmmv atf_fail "${1} did not receive ${2}" 969b7401e7Sjmmv} 97