summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--http/server.ts5
-rw-r--r--http/server_test.ts34
2 files changed, 36 insertions, 3 deletions
diff --git a/http/server.ts b/http/server.ts
index 54ec397d3..2b5fffc81 100644
--- a/http/server.ts
+++ b/http/server.ts
@@ -104,6 +104,7 @@ export class ServerRequest {
protoMinor!: number;
protoMajor!: number;
headers!: Headers;
+ conn!: Conn;
r!: BufReader;
w!: BufWriter;
done: Deferred<void> = deferred();
@@ -283,6 +284,7 @@ export function parseHTTPVersion(vers: string): [number, number] {
}
export async function readRequest(
+ conn: Conn,
bufr: BufReader
): Promise<ServerRequest | Deno.EOF> {
const tp = new TextProtoReader(bufr);
@@ -292,6 +294,7 @@ export async function readRequest(
if (headers === Deno.EOF) throw new UnexpectedEOFError();
const req = new ServerRequest();
+ req.conn = conn;
req.r = bufr;
[req.method, req.url, req.proto] = firstLine.split(" ", 3);
[req.protoMinor, req.protoMajor] = parseHTTPVersion(req.proto);
@@ -321,7 +324,7 @@ export class Server implements AsyncIterable<ServerRequest> {
while (!this.closing) {
try {
- req = await readRequest(bufr);
+ req = await readRequest(conn, bufr);
} catch (e) {
err = e;
break;
diff --git a/http/server_test.ts b/http/server_test.ts
index 9768ccdf4..f16293f77 100644
--- a/http/server_test.ts
+++ b/http/server_test.ts
@@ -74,6 +74,21 @@ test(async function responseWrite(): Promise<void> {
const request = new ServerRequest();
request.w = bufw;
+ request.conn = {
+ localAddr: "",
+ remoteAddr: "",
+ rid: -1,
+ closeRead: (): void => {},
+ closeWrite: (): void => {},
+ read: async (): Promise<number | Deno.EOF> => {
+ return 0;
+ },
+ write: async (): Promise<number> => {
+ return -1;
+ },
+ close: (): void => {}
+ };
+
await request.respond(testCase.response);
assertEquals(buf.toString(), testCase.raw);
await request.done;
@@ -318,6 +333,21 @@ test(async function writeStringReaderResponse(): Promise<void> {
assertEquals(r.more, false);
});
+const mockConn = {
+ localAddr: "",
+ remoteAddr: "",
+ rid: -1,
+ closeRead: (): void => {},
+ closeWrite: (): void => {},
+ read: async (): Promise<number | Deno.EOF> => {
+ return 0;
+ },
+ write: async (): Promise<number> => {
+ return -1;
+ },
+ close: (): void => {}
+};
+
test(async function readRequestError(): Promise<void> {
let input = `GET / HTTP/1.1
malformedHeader
@@ -325,7 +355,7 @@ malformedHeader
const reader = new BufReader(new StringReader(input));
let err;
try {
- await readRequest(reader);
+ await readRequest(mockConn, reader);
} catch (e) {
err = e;
}
@@ -404,7 +434,7 @@ test(async function testReadRequestError(): Promise<void> {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let req: any;
try {
- req = await readRequest(reader);
+ req = await readRequest(mockConn, reader);
} catch (e) {
err = e;
}