diff options
author | Mohammad Sulaiman <mohammad.sulaiman@exalt.ps> | 2024-11-05 08:39:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-05 06:39:05 +0000 |
commit | 89f0b796bd442ff352c3f93f69156ca6d85bfd5e (patch) | |
tree | 3ac2a58c6d85f6af57eb2c6b07b1f2d0e8687b3a /tests/specs/run/tls_starttls/tls_starttls.js | |
parent | f9a05068d6de247574fb764044a446d1d7ed2e9b (diff) |
chore: deprecate run itests (#26444)
Diffstat (limited to 'tests/specs/run/tls_starttls/tls_starttls.js')
-rw-r--r-- | tests/specs/run/tls_starttls/tls_starttls.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/specs/run/tls_starttls/tls_starttls.js b/tests/specs/run/tls_starttls/tls_starttls.js new file mode 100644 index 000000000..cd5718ff5 --- /dev/null +++ b/tests/specs/run/tls_starttls/tls_starttls.js @@ -0,0 +1,64 @@ +import { assert, assertEquals } from "@std/assert"; +import { BufReader } from "@std/io/buf-reader"; +import { BufWriter } from "@std/io/buf-writer"; +import { TextProtoReader } from "./textproto.ts"; + +const encoder = new TextEncoder(); +const decoder = new TextDecoder(); + +const { promise, resolve } = Promise.withResolvers(); +const hostname = "localhost"; +const port = 3504; + +const listener = Deno.listenTls({ + hostname, + port, + cert: Deno.readTextFileSync("./localhost.crt"), + key: Deno.readTextFileSync("./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(); + resolve(); + }, 0); + }, +); + +let conn = await Deno.connect({ hostname, port }); +conn = await Deno.startTls(conn, { hostname }); +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 promise; + +console.log("DONE"); |