diff options
author | Luca Casonato <hello@lcas.dev> | 2021-07-22 12:28:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-22 12:28:46 +0200 |
commit | 78fc9a4c600d28bf4c899695076f0bce159fb7a6 (patch) | |
tree | 9277a4dbf79c5d7205d25c44cff70b1e4212dbff /cli/tests/tls_starttls.js | |
parent | 7d151efc683e512386e4ad95bc01259b536d28fc (diff) |
fix: support --cert flag for tls connect APIs (#11484)
Diffstat (limited to 'cli/tests/tls_starttls.js')
-rw-r--r-- | cli/tests/tls_starttls.js | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/cli/tests/tls_starttls.js b/cli/tests/tls_starttls.js new file mode 100644 index 000000000..652ba869f --- /dev/null +++ b/cli/tests/tls_starttls.js @@ -0,0 +1,65 @@ +import { deferred } from "../../test_util/std/async/deferred.ts"; +import { assert, assertEquals } from "../../test_util/std/testing/asserts.ts"; +import { BufReader, BufWriter } from "../../test_util/std/io/bufio.ts"; +import { TextProtoReader } from "../../test_util/std/textproto/mod.ts"; + +const encoder = new TextEncoder(); +const decoder = new TextDecoder(); + +const resolvable = deferred(); +const hostname = "localhost"; +const port = 3504; + +const listener = Deno.listenTls({ + hostname, + port, + certFile: "./tls/localhost.crt", + keyFile: "./tls/localhost.key", +}); + +const response = encoder.encode( + "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World\n", +); + +listener.accept().then( + async (conn) => { + assert(conn.remoteAddr != null); + assert(conn.localAddr != null); + await conn.write(response); + // TODO(bartlomieju): this might be a bug + setTimeout(() => { + conn.close(); + resolvable.resolve(); + }, 0); + }, +); + +let conn = await Deno.connect({ hostname, port }); +conn = await Deno.startTls(conn, { hostname }); +assert(conn.rid > 0); +const w = new BufWriter(conn); +const r = new BufReader(conn); +const body = `GET / HTTP/1.1\r\nHost: ${hostname}:${port}\r\n\r\n`; +const writeResult = await w.write(encoder.encode(body)); +assertEquals(body.length, writeResult); +await w.flush(); +const tpr = new TextProtoReader(r); +const statusLine = await tpr.readLine(); +assert(statusLine !== null, `line must be read: ${String(statusLine)}`); +const m = statusLine.match(/^(.+?) (.+?) (.+?)$/); +assert(m !== null, "must be matched"); +const [_, proto, status, ok] = m; +assertEquals(proto, "HTTP/1.1"); +assertEquals(status, "200"); +assertEquals(ok, "OK"); +const headers = await tpr.readMIMEHeader(); +assert(headers !== null); +const contentLength = parseInt(headers.get("content-length")); +const bodyBuf = new Uint8Array(contentLength); +await r.readFull(bodyBuf); +assertEquals(decoder.decode(bodyBuf), "Hello World\n"); +conn.close(); +listener.close(); +await resolvable; + +console.log("DONE"); |