v2 / vlib / net / ssl / ssl_read_all_test.v
59 lines · 50 sloc · 1.8 KB · 114ae6d4a297538895253a0ae37bd0411187c19f
Raw
1module ssl
2
3import io
4import net
5import net.mbedtls
6
7const issue_16557_server_cert = @VMODROOT + '/examples/ssl_server/cert/server.crt'
8const issue_16557_server_key = @VMODROOT + '/examples/ssl_server/cert/server.key'
9const issue_16557_request = 'ping\r\n'
10const issue_16557_response_chunk = 'hello over tls'
11const issue_16557_response_repeat = 2_000
12
13fn issue_16557_serve_once(mut listener mbedtls.SSLListener) {
14 defer {
15 listener.shutdown() or {}
16 }
17 mut conn := listener.accept() or { panic(err) }
18 defer {
19 conn.shutdown() or {}
20 }
21 mut request_buf := []u8{len: issue_16557_request.len}
22 _ = conn.read(mut request_buf) or { panic(err) }
23 response := issue_16557_expected_response()
24 mut start := 0
25 for start < response.len {
26 end := if start + 257 > response.len { response.len } else { start + 257 }
27 conn.write_string(response[start..end]) or { panic(err) }
28 start = end
29 }
30}
31
32fn issue_16557_expected_response() string {
33 return issue_16557_response_chunk.repeat(issue_16557_response_repeat)
34}
35
36fn test_io_read_all_reads_ssl_conn_until_eof() {
37 mut port_listener := net.listen_tcp(.ip, '127.0.0.1:0') or { panic(err) }
38 port := port_listener.addr() or { panic(err) }.port() or { panic(err) }
39 port_listener.close() or { panic(err) }
40
41 mut listener := mbedtls.new_ssl_listener('127.0.0.1:${port}', mbedtls.SSLConnectConfig{
42 cert: issue_16557_server_cert
43 cert_key: issue_16557_server_key
44 validate: false
45 }) or { panic(err) }
46 server := spawn issue_16557_serve_once(mut listener)
47
48 mut client := new_ssl_conn(validate: false) or { panic(err) }
49 defer {
50 client.shutdown() or {}
51 }
52 client.dial('127.0.0.1', port) or { panic(err) }
53 client.write_string(issue_16557_request) or { panic(err) }
54
55 bytes := io.read_all(reader: client) or { panic(err) }
56 server.wait()
57
58 assert bytes == issue_16557_expected_response().bytes()
59}
60