Skip to main content
Module

std/node/http_test.ts

Deno standard library
Go to Latest
File
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import EventEmitter from "./events.ts";import http from "./http.ts";import { ERR_SERVER_NOT_RUNNING } from "./internal/errors.ts";import { assert, assertEquals } from "../testing/asserts.ts";import { deferred } from "../async/deferred.ts";
Deno.test("[node/http listen]", async () => { { const server = http.createServer(); assertEquals(0, EventEmitter.listenerCount(server, "request")); }
{ const server = http.createServer(() => {}); assertEquals(1, EventEmitter.listenerCount(server, "request")); }
{ const promise = deferred<void>(); const server = http.createServer();
server.listen(() => { server.close(); promise.resolve(); });
await promise; }
{ const promise = deferred<void>(); const server = http.createServer();
server.listen().on("listening", () => { server.close(); promise.resolve(); });
await promise; }
for (const port of [0, -0, 0.0, "0", null, undefined]) { const promise = deferred<void>(); const server = http.createServer();
server.listen(port, () => { server.close(); promise.resolve(); });
await promise; }});
Deno.test("[node/http close]", async () => { { const promise1 = deferred<void>(); const promise2 = deferred<void>(); // Node quirk: callback gets exception object, event listener does not. const server = http.createServer().close((err) => { assert(err instanceof ERR_SERVER_NOT_RUNNING); promise1.resolve(); }); server.on("close", (err) => { assertEquals(err, undefined); promise2.resolve(); }); server.on("listening", () => { throw Error("unreachable"); }); await promise1; await promise2; }
{ const promise1 = deferred<void>(); const promise2 = deferred<void>(); const server = http.createServer().listen().close((err) => { assertEquals(err, undefined); promise1.resolve(); }); server.on("close", (err) => { assertEquals(err, undefined); promise2.resolve(); }); server.on("listening", () => { throw Error("unreachable"); }); await promise1; await promise2; }});
Deno.test("[node/http chunked response", async () => { for (const body of [undefined, "", "ok"]) { const expected = body ?? ""; const promise = deferred<void>();
const server = http.createServer((_req, res) => { res.writeHead(200, { "transfer-encoding": "chunked" }); res.end(body); });
server.listen(async () => { const res = await fetch(`http://127.0.0.1:${server.address().port}/`); assert(res.ok);
const actual = await res.text(); assertEquals(actual, expected);
server.close(() => promise.resolve()); });
await promise; }});