v2 / vlib / x / async / tests / net_websocket / net_websocket_integration_test.v
44 lines · 41 sloc · 1.04 KB · 15fb60b77ea6073658aa8355b247f2e1ae03b714
Raw
1import context
2import net.websocket
3import x.async as xasync
4
5fn test_net_websocket_task_processes_message_in_memory() {
6 msg := websocket.Message{
7 opcode: .text_frame
8 payload: 'hello'.bytes()
9 }
10 mut task := xasync.run[string](fn [msg] (mut ctx context.Context) !string {
11 _ = ctx
12 return websocket_message_text(msg)!
13 })!
14 assert task.wait()! == 'hello'
15}
16
17fn test_net_websocket_callback_error_propagates_through_group() {
18 mut group := xasync.new_group(context.background())
19 observed := chan string{cap: 1}
20 group.go(fn [observed] (mut ctx context.Context) ! {
21 _ = ctx
22 msg := websocket.Message{
23 opcode: .close
24 }
25 text := websocket_message_text(msg) or {
26 observed <- err.msg()
27 return err
28 }
29 observed <- text
30 })!
31 group.wait() or {
32 assert err.msg() == 'unsupported websocket opcode'
33 assert <-observed == 'unsupported websocket opcode'
34 return
35 }
36 assert false
37}
38
39fn websocket_message_text(msg websocket.Message) !string {
40 if msg.opcode != .text_frame {
41 return error('unsupported websocket opcode')
42 }
43 return msg.payload.bytestr()
44}
45