t_tcp_nc.sh revision 1.1 1 # $NetBSD: t_tcp_nc.sh,v 1.1 2022/11/02 09:37:56 ozaki-r Exp $
2 #
3 # Copyright (c) 2022 Internet Initiative Japan Inc.
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 # POSSIBILITY OF SUCH DAMAGE.
26 #
27
28 SOCK_LOCAL=unix://tcp_nc_local
29 SOCK_PEER=unix://tcp_nc_peer
30 BUS=./bus_tcp_nc
31 FILE_SND=./file.snd
32 FILE_RCV=./file.rcv
33 IP_LOCAL=10.0.0.1
34 IP_PEER=10.0.0.2
35 NC_OPTS="-w 3"
36
37 DEBUG=${DEBUG:-false}
38
39 setup_servers()
40 {
41
42 rump_server_start $SOCK_LOCAL
43 rump_server_start $SOCK_PEER
44 rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
45 rump_server_add_iface $SOCK_PEER shmif0 $BUS
46 export RUMP_SERVER=$SOCK_LOCAL
47 atf_check -s exit:0 rump.ifconfig shmif0 $IP_LOCAL/24
48 export RUMP_SERVER=$SOCK_PEER
49 atf_check -s exit:0 rump.ifconfig shmif0 $IP_PEER/24
50 }
51
52 prepare_snd_file()
53 {
54 local file=$FILE_SND
55 local size=${1:-5120}
56
57 # XXX accepts only multiple of 512
58 dd if=/dev/zero of=$file bs=512 count=$(($size / 512))
59 }
60
61 cleanup_file()
62 {
63
64 rm -f $FILE_SND
65 rm -f $FILE_RCV
66 }
67
68 test_tcp_nc_econnrefused()
69 {
70
71 export RUMP_SERVER=$SOCK_LOCAL
72
73 atf_check -s not-exit:0 -e match:'Connection refused' \
74 $HIJACKING nc $NC_OPTS -v 127.0.0.1 80 < $FILE_SND
75 atf_check -s not-exit:0 -e match:'Connection refused' \
76 $HIJACKING nc $NC_OPTS -v $IP_PEER 80 < $FILE_SND
77 }
78
79 test_tcp_nc_rcvbuf()
80 {
81
82 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4 "-O 16384"
83
84 atf_check -s exit:0 $HIJACKING nc $NC_OPTS $IP_PEER 80 < $FILE_SND
85 }
86
87 test_tcp_nc_small_rcvbuf()
88 {
89
90 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4 "-O 1024"
91
92 prepare_snd_file $((512 * 1024))
93 atf_check -s exit:0 $HIJACKING nc $NC_OPTS $IP_PEER 80 < $FILE_SND
94 }
95
96 test_tcp_nc_sndbuf()
97 {
98
99 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4
100
101 atf_check -s exit:0 $HIJACKING nc $NC_OPTS -I 16384 $IP_PEER 80 < $FILE_SND
102 }
103
104 test_tcp_nc_small_sndbuf()
105 {
106
107 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4
108
109 prepare_snd_file $((512 * 1024))
110 atf_check -s exit:0 $HIJACKING nc $NC_OPTS -I 1024 $IP_PEER 80 < $FILE_SND
111 }
112
113 test_tcp_nc_md5sig()
114 {
115
116 atf_expect_fail "TCP_SIGNATURE is not enabled by default"
117
118 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4
119
120 atf_check -s exit:0 $HIJACKING nc $NC_OPTS -S $IP_PEER 80 < $FILE_SND
121 }
122
123 add_test_tcp_nc()
124 {
125 local type=$1
126 local name= desc=
127
128 desc="Test TCP with nc ($type)"
129 name="tcp_nc_${type}"
130
131 atf_test_case ${name} cleanup
132 eval "
133 ${name}_head() {
134 atf_set descr \"$desc\"
135 atf_set require.progs rump_server nc
136 }
137 ${name}_body() {
138 setup_servers
139 prepare_snd_file
140 test_tcp_nc_$type
141 rump_server_destroy_ifaces
142 }
143 ${name}_cleanup() {
144 cleanup_file
145 \$DEBUG && dump
146 cleanup
147 }
148 "
149 atf_add_test_case ${name}
150 }
151
152 atf_init_test_cases()
153 {
154
155 add_test_tcp_nc econnrefused
156 add_test_tcp_nc rcvbuf
157 add_test_tcp_nc small_rcvbuf
158 add_test_tcp_nc sndbuf
159 add_test_tcp_nc small_sndbuf
160 add_test_tcp_nc md5sig
161 }
162