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