v / vlib / net / http / vschannel_validation_windows_test.v
60 lines · 54 sloc · 1.69 KB · 6ea10df6ec054049f4ad8e3ab77b3eab33290f09
Raw
1module http
2
3import net
4import net.mbedtls
5
6const vschannel_test_cert_path = @VEXEROOT +
7 '/vlib/net/websocket/tests/autobahn/fuzzing_server_wss/config/server.crt'
8const vschannel_test_key_path = @VEXEROOT +
9 '/vlib/net/websocket/tests/autobahn/fuzzing_server_wss/config/server.key'
10
11fn start_vschannel_test_https_server() !(int, thread) {
12 mut port_listener := net.listen_tcp(.ip, '127.0.0.1:0')!
13 port := port_listener.addr()!.port()!
14 port_listener.close()!
15 mut listener := mbedtls.new_ssl_listener('127.0.0.1:${port}', mbedtls.SSLConnectConfig{
16 cert: vschannel_test_cert_path
17 cert_key: vschannel_test_key_path
18 validate: false
19 })!
20 return port, spawn serve_vschannel_test_https_once(mut listener)
21}
22
23fn serve_vschannel_test_https_once(mut listener mbedtls.SSLListener) {
24 defer {
25 listener.shutdown() or {}
26 }
27 mut conn := listener.accept() or { return }
28 defer {
29 conn.shutdown() or {}
30 }
31 mut request_buf := []u8{len: 2048}
32 _ = conn.read(mut request_buf) or { return }
33 conn.write_string('HTTP/1.1 200 OK\r\nContent-Length: 2\r\nConnection: close\r\n\r\nok') or {
34 return
35 }
36}
37
38fn test_vschannel_accepts_self_signed_certificate_when_validation_is_disabled() {
39 port, server := start_vschannel_test_https_server()!
40 resp := fetch(
41 url: 'https://127.0.0.1:${port}/'
42 validate: false
43 )!
44 server.wait()
45 assert resp.status_code == 200
46 assert resp.body == 'ok'
47}
48
49fn test_vschannel_rejects_self_signed_certificate_when_validation_is_enabled() {
50 port, server := start_vschannel_test_https_server()!
51 fetch(
52 url: 'https://127.0.0.1:${port}/'
53 validate: true
54 ) or {
55 server.wait()
56 return
57 }
58 server.wait()
59 assert false, 'expected certificate validation to reject the self-signed certificate'
60}
61