xref: /netbsd-src/tests/fs/tmpfs/h_funcs.subr (revision d8f5b04c091e033c7c2978066c7b27dbd1aa9d53)
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