v / vlib / net / jsonrpc / jsonrpc_test.v
196 lines · 161 sloc · 5.24 KB · f53920bcec4f43594143c41772b42b6465f1c6a9
Raw
1module jsonrpc
2
3import json
4
5fn test_try_decode_encode() {
6 obj_data := {
7 'key': 'value'
8 }
9 mut enc_data := try_encode[map[string]string](obj_data)
10 assert enc_data == json.encode(obj_data)
11 assert try_decode[map[string]string](enc_data)! == obj_data
12
13 str_data := 'string'
14 enc_data = try_encode[string](str_data)
15 assert enc_data == '"${str_data}"'
16 assert try_decode[string](enc_data)! == str_data
17
18 bool_data := true
19 enc_data = try_encode[bool](bool_data)
20 assert enc_data == bool_data.str()
21 assert try_decode[bool](enc_data)! == bool_data
22
23 int_data := 123
24 enc_data = try_encode[int](int_data)
25 assert enc_data == int_data.str()
26 assert try_decode[int](enc_data)! == int_data
27
28 null_data := null
29 enc_data = try_encode[Null](null_data)
30 assert enc_data == null_data.str()
31 assert try_decode[Null](enc_data)! == null_data
32
33 empty_data := empty
34 enc_data = try_encode[Empty](empty)
35 assert enc_data == empty_data.str()
36 assert try_decode[Empty](enc_data)! == empty_data
37}
38
39fn test_request_obj_params() {
40 id := 'obj'
41 method := 'params.' + id
42 params := {
43 'key': 'value'
44 }
45 mut req := new_request(method, params, id)
46 assert req.jsonrpc == version
47 assert req.method == method
48 assert req.params == json.encode(params)
49 assert req.id == id
50
51 enc_req := req.encode()
52 assert enc_req == '{"jsonrpc":"${version}","method":"${method}","params":${json.encode(params)},"id":"${id}"}'
53
54 assert req.decode_params[map[string]string]()! == params
55
56 dec_req := decode_request(enc_req)!
57 assert req.jsonrpc == dec_req.jsonrpc
58 assert req.method == dec_req.method
59 assert req.params == dec_req.params
60 assert req.id == dec_req.id
61}
62
63fn test_request_notification() {
64 id := ''
65 method := 'req.notif'
66 params := 'notif'
67 mut req := new_request(method, params, id)
68 assert req.jsonrpc == version
69 assert req.method == method
70 assert req.params == '"${params}"'
71 assert req.id == id
72
73 assert req.encode() == '{"jsonrpc":"${version}","method":"${method}","params":"${params}"}'
74 assert req.decode_params[string]()! == params
75}
76
77fn test_request_empty_params() {
78 id := ''
79 method := 'req.empty'
80 params := empty
81 mut req := new_request(method, params, id)
82 assert req.jsonrpc == version
83 assert req.method == method
84 assert req.params == params.str()
85 assert req.id == id
86
87 assert req.encode() == '{"jsonrpc":"${version}","method":"${method}"}'
88 assert req.decode_params[Empty]()! == params
89}
90
91fn test_request_batch() {
92 n_id := ''
93 n_method := 'req.notif'
94 n_params := 'notif'
95 mut notif := new_request(n_method, n_params, n_id)
96
97 r_id := 'obj'
98 r_method := 'params.obj'
99 r_params := {
100 'key': 'value'
101 }
102 mut req := new_request(r_method, r_params, r_id)
103
104 batch := [notif, req]
105 enc_batch := batch.encode_batch()
106 assert enc_batch == '[{"jsonrpc":"${version}","method":"${n_method}","params":"${n_params}"},{"jsonrpc":"${version}","method":"${r_method}","params":${json.encode(r_params)},"id":"${r_id}"}]'
107
108 assert decode_batch_request(enc_batch)! == batch
109}
110
111fn test_response_obj_result() {
112 id := 'obj'
113 result := {
114 'key': 'value'
115 }
116 mut resp := new_response(result, ResponseError{}, id)
117 assert resp.jsonrpc == version
118 assert resp.result == json.encode(result)
119 assert resp.error == ResponseError{}
120 assert resp.id == id
121
122 enc_resp := resp.encode()
123 assert enc_resp == '{"jsonrpc":"${version}","result":${json.encode(result)},"id":"${id}"}'
124
125 assert resp.decode_result[map[string]string]()! == result
126
127 dec_resp := decode_response(enc_resp)!
128 assert resp.jsonrpc == dec_resp.jsonrpc
129 assert resp.result == dec_resp.result
130 assert resp.error == dec_resp.error
131 assert resp.id == dec_resp.id
132}
133
134fn test_response_error() {
135 id := 'error'
136 result := 'should be null'
137 err := parse_error
138 mut resp := new_response(result, err, id)
139 assert resp.jsonrpc == version
140 assert resp.result == ''
141 assert resp.error == parse_error
142 assert resp.id == id
143
144 enc_resp := resp.encode()
145 assert enc_resp == '{"jsonrpc":"${version}","error":${json.encode(err)},"id":"${id}"}'
146
147 assert resp.decode_result[Empty]()! == empty
148
149 dec_resp := decode_response(enc_resp)!
150 assert resp.jsonrpc == dec_resp.jsonrpc
151 assert resp.result == dec_resp.result
152 assert resp.error == dec_resp.error
153 assert resp.id == dec_resp.id
154}
155
156fn test_response_null_id() {
157 id := ''
158 result := 'should be null'
159 err := parse_error
160 mut resp := new_response(result, err, id)
161 assert resp.jsonrpc == version
162 assert resp.result == ''
163 assert resp.error == parse_error
164 assert resp.id == id
165
166 enc_resp := resp.encode()
167 assert enc_resp == '{"jsonrpc":"${version}","error":${json.encode(err)},"id":${null.str()}}'
168
169 assert resp.decode_result[Empty]()! == empty
170
171 dec_resp := decode_response(enc_resp)!
172 assert resp.jsonrpc == dec_resp.jsonrpc
173 assert resp.result == dec_resp.result
174 assert resp.error == dec_resp.error
175 assert resp.id == dec_resp.id
176}
177
178fn test_response_batch() {
179 r_id := 'obj'
180 r_err := ResponseError{}
181 r_result := {
182 'key': 'value'
183 }
184 mut r_resp := new_response(r_result, r_err, r_id)
185
186 e_id := ''
187 e_result := 'should be null'
188 e_err := parse_error
189 mut e_resp := new_response(e_result, e_err, e_id)
190
191 batch := [r_resp, e_resp]
192 enc_batch := batch.encode_batch()
193 assert enc_batch == '[{"jsonrpc":"${version}","result":${json.encode(r_result)},"id":"${r_id}"},{"jsonrpc":"${version}","error":${json.encode(e_err)},"id":${null.str()}}]'
194
195 assert decode_batch_response(enc_batch)! == batch
196}
197