| 1 | module http |
| 2 | |
| 3 | import net |
| 4 | import net.mbedtls |
| 5 | |
| 6 | const vschannel_test_cert_path = @VEXEROOT + |
| 7 | '/vlib/net/websocket/tests/autobahn/fuzzing_server_wss/config/server.crt' |
| 8 | const vschannel_test_key_path = @VEXEROOT + |
| 9 | '/vlib/net/websocket/tests/autobahn/fuzzing_server_wss/config/server.key' |
| 10 | |
| 11 | fn 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 | |
| 23 | fn 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 | |
| 38 | fn 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 | |
| 49 | fn 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 | |