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 28SOCK_LOCAL=unix://tcp_nc_local 29SOCK_PEER=unix://tcp_nc_peer 30BUS=./bus_tcp_nc 31FILE_SND=./file.snd 32FILE_RCV=./file.rcv 33IP_LOCAL=10.0.0.1 34IP_PEER=10.0.0.2 35NC_OPTS="-w 3" 36 37DEBUG=${DEBUG:-false} 38 39setup_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 52prepare_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 61cleanup_file() 62{ 63 64 rm -f $FILE_SND 65 rm -f $FILE_RCV 66} 67 68test_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 79test_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 87test_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 96test_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 104test_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 113test_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 123add_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 152atf_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