1252190Srpaulo# $NetBSD: t_mknod.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $ 2252190Srpaulo# 3252190Srpaulo# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc. 4252190Srpaulo# All rights reserved. 5252190Srpaulo# 6252190Srpaulo# Redistribution and use in source and binary forms, with or without 7252190Srpaulo# modification, are permitted provided that the following conditions 8252190Srpaulo# are met: 9252190Srpaulo# 1. Redistributions of source code must retain the above copyright 10252190Srpaulo# notice, this list of conditions and the following disclaimer. 11252190Srpaulo# 2. Redistributions in binary form must reproduce the above copyright 12252190Srpaulo# notice, this list of conditions and the following disclaimer in the 13252190Srpaulo# documentation and/or other materials provided with the distribution. 14252190Srpaulo# 15252190Srpaulo# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16252190Srpaulo# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17252190Srpaulo# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18252190Srpaulo# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19252190Srpaulo# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20252190Srpaulo# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21252190Srpaulo# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22252190Srpaulo# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23252190Srpaulo# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24252190Srpaulo# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25252190Srpaulo# POSSIBILITY OF SUCH DAMAGE. 26252190Srpaulo# 27252190Srpaulo 28252190Srpaulo# 29252190Srpaulo# Verifies that the mknod operation works. 30252190Srpaulo# 31252190Srpaulo 32252190Srpauloatf_test_case block 33252190Srpauloblock_head() { 34252190Srpaulo atf_set "descr" "Tests that block devices can be created" 35252190Srpaulo atf_set "require.user" "root" 36252190Srpaulo} 37252190Srpauloblock_body() { 38252190Srpaulo test_mount 39252190Srpaulo umask 022 40252190Srpaulo 41252190Srpaulo atf_check -s eq:0 -o empty -e empty mknod fd0a b 2 0 42252190Srpaulo eval $(stat -s fd0a) 43252190Srpaulo [ ${st_mode} = 060644 ] || atf_fail "Invalid mode" 44252190Srpaulo [ ${st_rdev} -eq 512 ] || atf_fail "Invalid device" 45252190Srpaulo 46252190Srpaulo test_unmount 47252190Srpaulo} 48252190Srpaulo 49252190Srpauloatf_test_case block_kqueue 50252190Srpauloblock_kqueue_head() { 51252190Srpaulo atf_set "descr" "Tests that creating a block device raises the" \ 52252190Srpaulo "appropriate kqueue events" 53252190Srpaulo atf_set "require.user" "root" 54252190Srpaulo} 55252190Srpauloblock_kqueue_body() { 56252190Srpaulo test_mount 57252190Srpaulo umask 022 58252190Srpaulo 59252190Srpaulo atf_check -s eq:0 -o empty -e empty mkdir dir 60252190Srpaulo echo 'mknod dir/fd0a b 2 0' | kqueue_monitor 1 dir 61252190Srpaulo kqueue_check dir NOTE_WRITE 62252190Srpaulo 63252190Srpaulo test_unmount 64252190Srpaulo} 65252190Srpaulo 66252190Srpauloatf_test_case char 67252190Srpaulochar_head() { 68252190Srpaulo atf_set "descr" "Tests that character devices can be created" 69252190Srpaulo atf_set "require.user" "root" 70252190Srpaulo} 71252190Srpaulochar_body() { 72252190Srpaulo test_mount 73252190Srpaulo umask 022 74252190Srpaulo 75252190Srpaulo atf_check -s eq:0 -o empty -e empty mknod null c 2 2 76252190Srpaulo eval $(stat -s null) 77252190Srpaulo [ ${st_mode} = 020644 ] || atf_fail "Invalid mode" 78252190Srpaulo [ ${st_rdev} -eq 514 ] || atf_fail "Invalid device" 79252190Srpaulo 80252190Srpaulo test_unmount 81252190Srpaulo} 82252190Srpaulo 83252190Srpauloatf_test_case char_kqueue 84252190Srpaulochar_kqueue_head() { 85252190Srpaulo atf_set "descr" "Tests that creating a character device raises the" \ 86252190Srpaulo "appropriate kqueue events" 87252190Srpaulo atf_set "require.user" "root" 88252190Srpaulo} 89252190Srpaulochar_kqueue_body() { 90252190Srpaulo test_mount 91252190Srpaulo umask 022 92252190Srpaulo 93252190Srpaulo atf_check -s eq:0 -o empty -e empty mkdir dir 94252190Srpaulo echo 'mknod dir/null c 2 2' | kqueue_monitor 1 dir 95252190Srpaulo kqueue_check dir NOTE_WRITE 96252190Srpaulo 97252190Srpaulo test_unmount 98252190Srpaulo} 99252190Srpaulo 100252190Srpauloatf_test_case pipe 101252190Srpaulopipe_head() { 102252190Srpaulo atf_set "descr" "Tests that named pipes can be created" 103252190Srpaulo atf_set "require.user" "root" 104252190Srpaulo} 105252190Srpaulopipe_body() { 106252190Srpaulo test_mount 107252190Srpaulo umask 022 108252190Srpaulo 109252190Srpaulo atf_check -s eq:0 -o empty -e empty mknod pipe p 110252190Srpaulo eval $(stat -s pipe) 111252190Srpaulo [ ${st_mode} = 010644 ] || atf_fail "Invalid mode" 112252190Srpaulo 113252190Srpaulo test_unmount 114252190Srpaulo} 115252190Srpaulo 116252190Srpauloatf_test_case pipe_kqueue 117252190Srpaulopipe_kqueue_head() { 118252190Srpaulo atf_set "descr" "Tests that creating a named pipe raises the" \ 119252190Srpaulo "appropriate kqueue events" 120252190Srpaulo atf_set "require.user" "root" 121252190Srpaulo} 122252190Srpaulopipe_kqueue_body() { 123252190Srpaulo test_mount 124252190Srpaulo umask 022 125252190Srpaulo 126252190Srpaulo atf_check -s eq:0 -o empty -e empty mkdir dir 127252190Srpaulo echo 'mknod dir/pipe p' | kqueue_monitor 1 dir 128252190Srpaulo kqueue_check dir NOTE_WRITE 129252190Srpaulo 130252190Srpaulo test_unmount 131252190Srpaulo} 132252190Srpaulo 133252190Srpauloatf_init_test_cases() { 134252190Srpaulo . $(atf_get_srcdir)/../h_funcs.subr 135252190Srpaulo . $(atf_get_srcdir)/h_funcs.subr 136252190Srpaulo 137252190Srpaulo atf_add_test_case block 138252190Srpaulo atf_add_test_case block_kqueue 139252190Srpaulo atf_add_test_case char 140252190Srpaulo atf_add_test_case char_kqueue 141252190Srpaulo atf_add_test_case pipe 142252190Srpaulo atf_add_test_case pipe_kqueue 143252190Srpaulo} 144252190Srpaulo