mirror of
https://github.com/imputnet/cobalt.git
synced 2025-06-29 18:08:28 +00:00
54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
import { normalizeRequest } from "../processing/request.js";
|
|
import match from "../processing/match.js";
|
|
import { extract } from "../processing/url.js";
|
|
|
|
export async function runTest(url, params, expect) {
|
|
const { success, data: normalized } = await normalizeRequest({ url, ...params });
|
|
if (!success) {
|
|
throw "invalid request";
|
|
}
|
|
|
|
const parsed = extract(normalized.url);
|
|
if (parsed === null) {
|
|
throw `invalid url: ${normalized.url}`;
|
|
}
|
|
|
|
const result = await match({
|
|
host: parsed.host,
|
|
patternMatch: parsed.patternMatch,
|
|
params: normalized,
|
|
});
|
|
|
|
let error = [];
|
|
if (expect.status !== result.body.status) {
|
|
const detail = `${expect.status} (expected) != ${result.body.status} (actual)`;
|
|
error.push(`status mismatch: ${detail}`);
|
|
|
|
if (result.body.status === 'error') {
|
|
error.push(`error code: ${result.body?.error?.code}`);
|
|
}
|
|
}
|
|
|
|
if (expect.errorCode && expect.errorCode !== result.body?.error?.code) {
|
|
const detail = `${expect.errorCode} (expected) != ${result.body.error.code} (actual)`
|
|
error.push(`error mismatch: ${detail}`);
|
|
}
|
|
|
|
if (expect.code !== result.status) {
|
|
const detail = `${expect.code} (expected) != ${result.status} (actual)`;
|
|
error.push(`status code mismatch: ${detail}`);
|
|
}
|
|
|
|
if (error.length) {
|
|
if (result.body.text) {
|
|
error.push(`error message: ${result.body.text}`);
|
|
}
|
|
|
|
throw error.join('\n');
|
|
}
|
|
|
|
if (result.body.status === 'tunnel') {
|
|
// TODO: stream testing
|
|
}
|
|
}
|