Skip to content

Commit

Permalink
vlib: fix tcp_test.v
Browse files Browse the repository at this point in the history
The listen_tcp method should not accept .unix af.
Test that it indeed fails when invoked.
  • Loading branch information
hholst80 committed Jan 4, 2024
1 parent 7d29afe commit 46adaac
Showing 1 changed file with 22 additions and 40 deletions.
62 changes: 22 additions & 40 deletions vlib/net/tcp_test.v
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
// vtest flaky: true
// vtest retry: 8
import net
import os

const test_port = 45123

fn handle_conn(mut c net.TcpConn) {
fn handle_conn(mut c net.TcpConn) ! {
for {
mut buf := []u8{len: 100, init: 0}
read := c.read(mut buf) or {
println('Server: connection dropped')
return
eprintln('Server: connection dropped')
return err
}
c.write(buf[..read]) or {
println('Server: connection dropped')
return
eprintln('Server: connection dropped')
return err
}
}
}
Expand All @@ -24,40 +21,35 @@ fn one_shot_echo_server(mut l net.TcpListener, ch_started chan int) ! {
ch_started <- 1
mut new_conn := l.accept() or { return error('could not accept') }
eprintln(' > new_conn: ${new_conn}')
handle_conn(mut new_conn)
new_conn.close() or {}
handle_conn(mut new_conn)!
new_conn.close()!
}

fn echo(address string) ! {
mut c := net.dial_tcp(address)!
defer {
c.close() or {}
}

println('local: ' + c.addr()!.str())
println(' peer: ' + c.peer_addr()!.str())
eprintln('local: ' + c.addr()!.str())
eprintln(' peer: ' + c.peer_addr()!.str())

data := 'Hello from vlib/net!'
c.write_string(data)!
mut buf := []u8{len: 4096}
read := c.read(mut buf) or { panic(err) }
read := c.read(mut buf)!
assert read == data.len
for i := 0; i < read; i++ {
assert buf[i] == data[i]
}
println('Got "${buf.bytestr()}"')
c.close()!
}

fn test_tcp_ip6() {
eprintln('\n>>> ${@FN}')
address := 'localhost:${test_port}'
mut l := net.listen_tcp(.ip6, ':${test_port}') or { panic(err) }
address := '::1:${test_port}'
mut l := net.listen_tcp(.ip6, address) or { panic(err) }
dump(l)
start_echo_server(mut l)
echo(address) or { panic(err) }
l.close() or {}
// ensure there is at least one new socket created before the next test
l = net.listen_tcp(.ip6, ':${test_port + 1}') or { panic(err) }
l.close() or { panic(err) }
}

fn start_echo_server(mut l net.TcpListener) {
Expand All @@ -68,31 +60,21 @@ fn start_echo_server(mut l net.TcpListener) {

fn test_tcp_ip() {
eprintln('\n>>> ${@FN}')
address := 'localhost:${test_port}'
address := '127.0.0.1:${test_port}'
mut l := net.listen_tcp(.ip, address) or { panic(err) }
dump(l)
start_echo_server(mut l)
echo(address) or { panic(err) }
l.close() or {}
l.close() or { panic(err) }
}

fn test_tcp_unix() {
eprintln('\n>>> ${@FN}')
// TODO(emily):
// whilst windows supposedly supports unix sockets
// this doesnt work (wsaeopnotsupp at the call to bind())
$if !windows {
address := os.real_path('tcp-test.sock')
// address := 'tcp-test.sock'
println('${address}')

mut l := net.listen_tcp(.unix, address) or { panic(err) }
start_echo_server(mut l)
echo(address) or { panic(err) }
l.close() or {}
address := 'tcp-test.sock'
eprintln('${address}')

os.rm(address) or { panic('failed to remove socket file') }
}
mut l := net.listen_tcp(.unix, address) or { return }
assert false
}

fn testsuite_end() {
Expand All @@ -103,6 +85,6 @@ fn test_bind() {
$if !network ? {
return
}
mut conn := net.dial_tcp_with_bind('vlang.io:80', '127.0.0.1:0')!
conn.close()!
mut conn := net.dial_tcp_with_bind('vlang.io:80', '127.0.0.1:0') or { panic(err) }
conn.close() or { panic(err) }
}

0 comments on commit 46adaac

Please sign in to comment.