mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
ci: make websocket_test.v more robust (wait till the websocket server are open for connections, instead of relying on fixed time.sleep delays, which are not enough on the CI)
This commit is contained in:
parent
524c500146
commit
4c13a4c22c
|
@ -25,8 +25,8 @@ fn test_ws_ipv6() {
|
||||||
if should_skip {
|
if should_skip {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
spawn start_server(.ip6, 30001)
|
start_server(.ip6, 30001)!
|
||||||
time.sleep(1500 * time.millisecond)
|
|
||||||
ws_test(.ip6, 'ws://localhost:30001') or {
|
ws_test(.ip6, 'ws://localhost:30001') or {
|
||||||
eprintln('> error while connecting .ip6, err: ${err}')
|
eprintln('> error while connecting .ip6, err: ${err}')
|
||||||
assert false
|
assert false
|
||||||
|
@ -38,8 +38,8 @@ fn test_ws_ipv4() {
|
||||||
if should_skip {
|
if should_skip {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
spawn start_server(.ip, 30002)
|
start_server(.ip, 30002)!
|
||||||
time.sleep(1500 * time.millisecond)
|
|
||||||
ws_test(.ip, 'ws://localhost:30002') or {
|
ws_test(.ip, 'ws://localhost:30002') or {
|
||||||
eprintln('> error while connecting .ip, err: ${err}')
|
eprintln('> error while connecting .ip, err: ${err}')
|
||||||
assert false
|
assert false
|
||||||
|
@ -71,7 +71,19 @@ fn start_server(family net.AddrFamily, listen_port int) ! {
|
||||||
s.on_close(fn (mut ws websocket.Client, code int, reason string) ! {
|
s.on_close(fn (mut ws websocket.Client, code int, reason string) ! {
|
||||||
// not used
|
// not used
|
||||||
})
|
})
|
||||||
s.listen() or { panic('websocket server could not listen, err: ${err}') }
|
start_server_in_thread_and_wait_till_it_is_ready_to_accept_connections(mut s)
|
||||||
|
eprintln('> start_server finished')
|
||||||
|
}
|
||||||
|
|
||||||
|
fn start_server_in_thread_and_wait_till_it_is_ready_to_accept_connections(mut ws websocket.Server) {
|
||||||
|
eprintln('-----------------------------------------------------------------------------')
|
||||||
|
spawn fn [mut ws] () {
|
||||||
|
ws.listen() or { panic('websocket server could not listen, err: ${err}') }
|
||||||
|
}()
|
||||||
|
for ws.state != .open {
|
||||||
|
time.sleep(10 * time.millisecond)
|
||||||
|
}
|
||||||
|
eprintln('-----------------------------------------------------------------------------')
|
||||||
}
|
}
|
||||||
|
|
||||||
// ws_test tests connect to the websocket server from websocket client
|
// ws_test tests connect to the websocket server from websocket client
|
||||||
|
@ -79,18 +91,18 @@ fn ws_test(family net.AddrFamily, uri string) ! {
|
||||||
eprintln('connecting to ${uri} ...')
|
eprintln('connecting to ${uri} ...')
|
||||||
|
|
||||||
mut test_results := WebsocketTestResults{}
|
mut test_results := WebsocketTestResults{}
|
||||||
mut ws := websocket.new_client(uri)!
|
mut client := websocket.new_client(uri)!
|
||||||
ws.on_open(fn (mut ws websocket.Client) ! {
|
client.on_open(fn (mut client websocket.Client) ! {
|
||||||
ws.pong()!
|
client.pong()!
|
||||||
assert true
|
assert true
|
||||||
})
|
})
|
||||||
ws.on_error(fn (mut ws websocket.Client, err string) ! {
|
client.on_error(fn (mut client websocket.Client, err string) ! {
|
||||||
println('error: ${err}')
|
println('error: ${err}')
|
||||||
// this can be thrown by internet connection problems
|
// this can be thrown by internet connection problems
|
||||||
assert false
|
assert false
|
||||||
})
|
})
|
||||||
|
|
||||||
ws.on_message_ref(fn (mut ws websocket.Client, msg &websocket.Message, mut res WebsocketTestResults) ! {
|
client.on_message_ref(fn (mut client websocket.Client, msg &websocket.Message, mut res WebsocketTestResults) ! {
|
||||||
println('client got type: ${msg.opcode} payload:\n${msg.payload}')
|
println('client got type: ${msg.opcode} payload:\n${msg.payload}')
|
||||||
if msg.opcode == .text_frame {
|
if msg.opcode == .text_frame {
|
||||||
smessage := msg.payload.bytestr()
|
smessage := msg.payload.bytestr()
|
||||||
|
@ -109,11 +121,14 @@ fn ws_test(family net.AddrFamily, uri string) ! {
|
||||||
println('Binary message: ${msg}')
|
println('Binary message: ${msg}')
|
||||||
}
|
}
|
||||||
}, test_results)
|
}, test_results)
|
||||||
ws.connect() or { panic('fail to connect, err: ${err}') }
|
client.connect()!
|
||||||
spawn ws.listen()
|
spawn client.listen()
|
||||||
|
|
||||||
text := ['a'].repeat(2)
|
text := ['a'].repeat(2)
|
||||||
for msg in text {
|
for msg in text {
|
||||||
ws.write(msg.bytes(), .text_frame) or { panic('fail to write to websocket, err: ${err}') }
|
client.write(msg.bytes(), .text_frame) or {
|
||||||
|
panic('fail to write to websocket, err: ${err}')
|
||||||
|
}
|
||||||
// sleep to give time to recieve response before send a new one
|
// sleep to give time to recieve response before send a new one
|
||||||
time.sleep(100 * time.millisecond)
|
time.sleep(100 * time.millisecond)
|
||||||
}
|
}
|
||||||
|
@ -131,46 +146,34 @@ fn test_on_close_when_server_closing_connection() ! {
|
||||||
cli.close(1000, 'closing connection')!
|
cli.close(1000, 'closing connection')!
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
mut test_results := WebsocketTestResults{}
|
mut test_results := WebsocketTestResults{}
|
||||||
ws.on_close_ref(fn (mut cli websocket.Client, code int, reason string, mut res WebsocketTestResults) ! {
|
ws.on_close_ref(fn (mut cli websocket.Client, code int, reason string, mut res WebsocketTestResults) ! {
|
||||||
res.nr_closes++
|
res.nr_closes++
|
||||||
}, test_results)
|
}, test_results)
|
||||||
spawn ws.listen()
|
start_server_in_thread_and_wait_till_it_is_ready_to_accept_connections(mut ws)
|
||||||
|
//
|
||||||
mut client := websocket.new_client('ws://localhost:30003')!
|
mut client := websocket.new_client('ws://localhost:30003')!
|
||||||
|
|
||||||
client.connect()!
|
client.connect()!
|
||||||
spawn client.listen()
|
spawn client.listen()
|
||||||
|
|
||||||
time.sleep(1000 * time.millisecond)
|
time.sleep(1000 * time.millisecond)
|
||||||
|
|
||||||
client.write_string('a message')!
|
client.write_string('a message')!
|
||||||
|
|
||||||
time.sleep(1000 * time.millisecond)
|
time.sleep(1000 * time.millisecond)
|
||||||
|
|
||||||
assert test_results.nr_closes == 1
|
assert test_results.nr_closes == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_on_close_when_client_closing_connection() ! {
|
fn test_on_close_when_client_closing_connection() ! {
|
||||||
mut ws := websocket.new_server(.ip, 30004, '')
|
mut ws := websocket.new_server(.ip, 30004, '')
|
||||||
spawn ws.listen()
|
start_server_in_thread_and_wait_till_it_is_ready_to_accept_connections(mut ws)
|
||||||
|
//
|
||||||
mut client := websocket.new_client('ws://localhost:30004')!
|
mut client := websocket.new_client('ws://localhost:30004')!
|
||||||
|
|
||||||
mut test_results := WebsocketTestResults{}
|
mut test_results := WebsocketTestResults{}
|
||||||
client.on_close_ref(fn (mut cli websocket.Client, code int, reason string, mut res WebsocketTestResults) ! {
|
client.on_close_ref(fn (mut cli websocket.Client, code int, reason string, mut res WebsocketTestResults) ! {
|
||||||
res.nr_closes++
|
res.nr_closes++
|
||||||
}, test_results)
|
}, test_results)
|
||||||
|
|
||||||
client.connect()!
|
client.connect()!
|
||||||
spawn client.listen()
|
spawn client.listen()
|
||||||
|
|
||||||
time.sleep(1000 * time.millisecond)
|
time.sleep(1000 * time.millisecond)
|
||||||
|
|
||||||
client.close(1000, 'closing connection')!
|
client.close(1000, 'closing connection')!
|
||||||
|
|
||||||
time.sleep(1000 * time.millisecond)
|
time.sleep(1000 * time.millisecond)
|
||||||
|
|
||||||
assert test_results.nr_closes == 1
|
assert test_results.nr_closes == 1
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user