0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-10-31 09:14:20 -04:00
denoland-deno/std/http
Bartek Iwańczuk 6e2df8c64f
feat: Deno.test() sanitizes ops and resources (#4399)
This PR brings assertOps and assertResources sanitizers to Deno.test() API.

assertOps checks that test doesn't leak async ops, ie. there are no unresolved
promises originating from Deno APIs. Enabled by default, can be disabled using 
Deno.TestDefinition.disableOpSanitizer.

assertResources checks that test doesn't leak resources, ie. all resources used
in test are closed. For example; if a file is opened during a test case it must be
explicitly closed before test case finishes. It's most useful for asynchronous
generators. Enabled by default, can be disabled using 
Deno.TestDefinition.disableResourceSanitizer.

We've used those sanitizers in internal runtime tests and it proved very useful in
surfacing incorrect tests which resulted in interference between the tests.

All tests have been sanitized.

Closes #4208
2020-03-18 19:25:55 -04:00
..
testdata fix(file_server): don't crash on "%" pathname (#3953) 2020-02-11 15:53:09 -05:00
cookie.ts Enable TS strict mode by default (#3899) 2020-02-19 15:36:18 -05:00
cookie_test.ts refactor(std/http): move io functions to http/io.ts (#4126) 2020-02-26 10:48:35 -05:00
file_server.ts refactor: add no-return-await lint rule (#4384) 2020-03-16 10:22:16 +01:00
file_server_test.ts feat: Deno.test() sanitizes ops and resources (#4399) 2020-03-18 19:25:55 -04:00
http_bench.ts feat: Deno.args now does not include script (#3628) 2020-01-09 11:37:01 -07:00
http_status.ts Happy new year! (#3578) 2020-01-02 15:13:47 -05:00
io.ts fix(std): Use Deno.errors where possible. (#4356) 2020-03-13 21:40:13 -04:00
io_test.ts fix(std): Use Deno.errors where possible. (#4356) 2020-03-13 21:40:13 -04:00
mock.ts refactor(std/http): move io functions to http/io.ts (#4126) 2020-02-26 10:48:35 -05:00
mod.ts feat: Add missing mod.ts files in std (#3509) 2019-12-20 15:21:30 -05:00
racing_server.ts fix: [http] Consume unread body and trailers before reading next request (#3990) 2020-02-24 22:49:39 -05:00
racing_server_test.ts feat: Deno.test() sanitizes ops and resources (#4399) 2020-03-18 19:25:55 -04:00
README.md std/http: allow response body to be string (#3705) 2020-01-17 18:44:35 -05:00
server.ts doc(http/server): Add coherence to the docs (#4372) 2020-03-14 10:17:44 -04:00
server_test.ts feat: Deno.test() sanitizes ops and resources (#4399) 2020-03-18 19:25:55 -04:00

http

import { serve } from "https://deno.land/std/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
  req.respond({ body: "Hello World\n" });
}

File Server

A small program for serving local files over HTTP

deno --allow-net --allow-read https://deno.land/std/http/file_server.ts
> HTTP server listening on http://0.0.0.0:4500/

Helper to manipulate Cookie through ServerRequest and Response.

import { ServerRequest } from "https://deno.land/std/http/server.ts";
import { getCookies } from "https://deno.land/std/http/cookie.ts";

let request = new ServerRequest();
request.headers = new Headers();
request.headers.set("Cookie", "full=of; tasty=chocolate");

const cookies = getCookies(request);
console.log("cookies:", cookies);
// cookies: { full: "of", tasty: "chocolate" }

To set a Cookie you can add CookieOptions to properly set your Cookie

import { Response } from "https://deno.land/std/http/server.ts";
import { Cookie, setCookie } from "https://deno.land/std/http/cookie.ts";

let response: Response = {};
const cookie: Cookie = { name: "Space", value: "Cat" };
setCookie(response, cookie);

const cookieHeader = response.headers.get("set-cookie");
console.log("Set-Cookie:", cookieHeader);
// Set-Cookie: Space=Cat

Deleting a Cookie will set its expiration date before now. Forcing the browser to delete it.

import { Response } from "https://deno.land/std/http/server.ts";
import { delCookie } from "https://deno.land/std/http/cookie.ts";

let response: Response = {};
delCookie(response, "deno");

const cookieHeader = response.headers.get("set-cookie");
console.log("Set-Cookie:", cookieHeader);
// Set-Cookie: deno=; Expires=Thus, 01 Jan 1970 00:00:00 GMT

Note: At the moment multiple Set-Cookie in a Response is not handled.