Compare commits

...

1 Commits

Author SHA1 Message Date
Jarred Sumner
30fe5a4781 test(http): add incoming known fields test 2025-05-28 21:09:47 -07:00
2 changed files with 136 additions and 0 deletions

View File

@@ -408,6 +408,50 @@ const IncomingMessagePrototype = {
set socket(value) {
this[fakeSocketSymbol] = value;
},
_addHeaderLine(field: string, value: string | undefined, dest: any) {
field = String(field);
const key = field.toLowerCase();
if (key === "set-cookie") {
if (dest[key] !== undefined) {
dest[key].push(value);
} else {
dest[key] = [value];
}
return;
}
switch (key) {
case "content-type":
case "user-agent":
case "referer":
case "host":
case "authorization":
case "proxy-authorization":
case "if-modified-since":
case "if-unmodified-since":
case "location":
case "max-forwards":
case "retry-after":
case "etag":
case "last-modified":
case "server":
case "age":
case "expires":
if (dest[key] === undefined) dest[key] = value;
return;
case "cookie":
if (dest[key] === undefined) dest[key] = value;
else dest[key] += "; " + value;
return;
}
if (dest[key] === undefined) {
dest[key] = value;
} else {
dest[key] += ", " + value;
}
},
} satisfies typeof import("node:http").IncomingMessage.prototype;
IncomingMessage.prototype = IncomingMessagePrototype;
$setPrototypeDirect.$call(IncomingMessage, Readable);

View File

@@ -0,0 +1,92 @@
require('../common');
const assert = require('assert');
const IncomingMessage = require('http').IncomingMessage;
function checkDest(field, result, value) {
const dest = {};
const incomingMessage = new IncomingMessage(field);
// Dest is changed by IncomingMessage._addHeaderLine
if (value)
incomingMessage._addHeaderLine(field, 'test', dest);
incomingMessage._addHeaderLine(field, value, dest);
assert.deepStrictEqual(dest, result);
}
checkDest('', { '': undefined });
checkDest('Content-Type', { 'content-type': undefined });
checkDest('content-type', { 'content-type': 'test' }, 'value');
checkDest('User-Agent', { 'user-agent': undefined });
checkDest('user-agent', { 'user-agent': 'test' }, 'value');
checkDest('Referer', { referer: undefined });
checkDest('referer', { referer: 'test' }, 'value');
checkDest('Host', { host: undefined });
checkDest('host', { host: 'test' }, 'value');
checkDest('Authorization', { authorization: undefined }, undefined);
checkDest('authorization', { authorization: 'test' }, 'value');
checkDest('Proxy-Authorization', { 'proxy-authorization': undefined });
checkDest('proxy-authorization', { 'proxy-authorization': 'test' }, 'value');
checkDest('If-Modified-Since', { 'if-modified-since': undefined });
checkDest('if-modified-since', { 'if-modified-since': 'test' }, 'value');
checkDest('If-Unmodified-Since', { 'if-unmodified-since': undefined });
checkDest('if-unmodified-since', { 'if-unmodified-since': 'test' }, 'value');
checkDest('Form', { form: undefined });
checkDest('form', { form: 'test, value' }, 'value');
checkDest('Location', { location: undefined });
checkDest('location', { location: 'test' }, 'value');
checkDest('Max-Forwards', { 'max-forwards': undefined });
checkDest('max-forwards', { 'max-forwards': 'test' }, 'value');
checkDest('Retry-After', { 'retry-after': undefined });
checkDest('retry-after', { 'retry-after': 'test' }, 'value');
checkDest('Etag', { etag: undefined });
checkDest('etag', { etag: 'test' }, 'value');
checkDest('Last-Modified', { 'last-modified': undefined });
checkDest('last-modified', { 'last-modified': 'test' }, 'value');
checkDest('Server', { server: undefined });
checkDest('server', { server: 'test' }, 'value');
checkDest('Age', { age: undefined });
checkDest('age', { age: 'test' }, 'value');
checkDest('Expires', { expires: undefined });
checkDest('expires', { expires: 'test' }, 'value');
checkDest('Set-Cookie', { 'set-cookie': [undefined] });
checkDest('set-cookie', { 'set-cookie': ['test', 'value'] }, 'value');
checkDest('Transfer-Encoding', { 'transfer-encoding': undefined });
checkDest('transfer-encoding', { 'transfer-encoding': 'test, value' }, 'value');
checkDest('Date', { date: undefined });
checkDest('date', { date: 'test, value' }, 'value');
checkDest('Connection', { connection: undefined });
checkDest('connection', { connection: 'test, value' }, 'value');
checkDest('Cache-Control', { 'cache-control': undefined });
checkDest('cache-control', { 'cache-control': 'test, value' }, 'value');
checkDest('Transfer-Encoding', { 'transfer-encoding': undefined });
checkDest('transfer-encoding', { 'transfer-encoding': 'test, value' }, 'value');
checkDest('Vary', { vary: undefined });
checkDest('vary', { vary: 'test, value' }, 'value');
checkDest('Content-Encoding', { 'content-encoding': undefined }, undefined);
checkDest('content-encoding', { 'content-encoding': 'test, value' }, 'value');
checkDest('Cookie', { cookie: undefined });
checkDest('cookie', { cookie: 'test; value' }, 'value');
checkDest('Origin', { origin: undefined });
checkDest('origin', { origin: 'test, value' }, 'value');
checkDest('Upgrade', { upgrade: undefined });
checkDest('upgrade', { upgrade: 'test, value' }, 'value');
checkDest('Expect', { expect: undefined });
checkDest('expect', { expect: 'test, value' }, 'value');
checkDest('If-Match', { 'if-match': undefined });
checkDest('if-match', { 'if-match': 'test, value' }, 'value');
checkDest('If-None-Match', { 'if-none-match': undefined });
checkDest('if-none-match', { 'if-none-match': 'test, value' }, 'value');
checkDest('Accept', { accept: undefined });
checkDest('accept', { accept: 'test, value' }, 'value');
checkDest('Accept-Encoding', { 'accept-encoding': undefined });
checkDest('accept-encoding', { 'accept-encoding': 'test, value' }, 'value');
checkDest('Accept-Language', { 'accept-language': undefined });
checkDest('accept-language', { 'accept-language': 'test, value' }, 'value');
checkDest('X-Forwarded-For', { 'x-forwarded-for': undefined });
checkDest('x-forwarded-for', { 'x-forwarded-for': 'test, value' }, 'value');
checkDest('X-Forwarded-Host', { 'x-forwarded-host': undefined });
checkDest('x-forwarded-host', { 'x-forwarded-host': 'test, value' }, 'value');
checkDest('X-Forwarded-Proto', { 'x-forwarded-proto': undefined });
checkDest('x-forwarded-proto', { 'x-forwarded-proto': 'test, value' }, 'value');
checkDest('X-Foo', { 'x-foo': undefined });
checkDest('x-foo', { 'x-foo': 'test, value' }, 'value');