-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver_test.v
More file actions
102 lines (81 loc) · 2 KB
/
server_test.v
File metadata and controls
102 lines (81 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
module jsonrpcv
import strings
struct StringRW {
mut:
buf strings.Builder = strings.new_builder(4096)
}
fn (mut s StringRW) read(mut buf []u8) !int {
len := s.buf.len
buf = s.buf.str().bytes()
s.buf = strings.new_builder(4096)
return len
}
fn (mut s StringRW) write(buf []u8) !int {
return s.buf.write(buf)
}
struct KVItem {
key string
value string
}
fn handle_test(req &Request, mut wr ResponseWriter) {
p := req.decode_params[KVItem]() or {
wr.write_error(invalid_params)
return
}
wr.write(p)
}
fn test_server_request_response() {
mut stream := StringRW{}
mut srv := new_server(ServerConfig{
stream: stream
handler: handle_test
})
id := 'req'
method := 'kv.item'
params := KVItem{
key: 'foo'
value: 'bar'
}
stream.write(new_request(method, params, id).encode().bytes())!
srv.respond()!
mut enc_resp := []u8{len: 4096}
stream.read(mut enc_resp)!
resp := decode_response(enc_resp.bytestr())!
assert resp.jsonrpc == version
assert resp.decode_result[KVItem]()! == params
assert resp.error == ResponseError{}
assert resp.id == id
}
fn test_server_router_request_response() {
mut r := Router{}
method := 'kv.item'
r.register(method, handle_test)
mut stream := StringRW{}
mut srv := new_server(ServerConfig{
stream: stream
handler: r.handle_jsonrpc
})
id := 'req'
params := KVItem{
key: 'foo'
value: 'bar'
}
stream.write(new_request(method, params, id).encode().bytes())!
srv.respond()!
mut enc_resp := []u8{len: 4096}
stream.read(mut enc_resp)!
mut resp := decode_response(enc_resp.bytestr())!
assert resp.jsonrpc == version
assert resp.decode_result[KVItem]()! == params
assert resp.error == ResponseError{}
assert resp.id == id
stream.write(new_request('unknown', params, id).encode().bytes())!
srv.respond()!
enc_resp = []u8{len: 4096}
stream.read(mut enc_resp)!
resp = decode_response(enc_resp.bytestr())!
assert resp.jsonrpc == version
assert resp.decode_result[Empty]()! == empty
assert resp.error == method_not_found
assert resp.id == id
}