diff options
Diffstat (limited to 'tests/specs')
-rw-r--r-- | tests/specs/run/045_proxy/__test__.jsonc | 4 | ||||
-rw-r--r-- | tests/specs/run/045_proxy/programmatic_proxy_client.ts | 16 | ||||
-rw-r--r-- | tests/specs/run/045_proxy/proxy_client.ts | 5 | ||||
-rw-r--r-- | tests/specs/run/045_proxy/proxy_test.ts | 129 | ||||
-rw-r--r-- | tests/specs/run/045_proxy/proxy_test.ts.out | 6 |
5 files changed, 160 insertions, 0 deletions
diff --git a/tests/specs/run/045_proxy/__test__.jsonc b/tests/specs/run/045_proxy/__test__.jsonc new file mode 100644 index 000000000..d4fb7f60c --- /dev/null +++ b/tests/specs/run/045_proxy/__test__.jsonc @@ -0,0 +1,4 @@ +{ + "args": "run -L debug --allow-net --allow-env --allow-run --allow-read --reload --quiet proxy_test.ts", + "output": "proxy_test.ts.out" +} diff --git a/tests/specs/run/045_proxy/programmatic_proxy_client.ts b/tests/specs/run/045_proxy/programmatic_proxy_client.ts new file mode 100644 index 000000000..73af590c7 --- /dev/null +++ b/tests/specs/run/045_proxy/programmatic_proxy_client.ts @@ -0,0 +1,16 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +const client = Deno.createHttpClient({ + proxy: { + url: "http://localhost:4555", + basicAuth: { username: "username", password: "password" }, + }, +}); + +const res = await fetch( + "http://localhost:4545/run/045_mod.ts", + { client }, +); +console.log(`Response http: ${await res.text()}`); + +client.close(); diff --git a/tests/specs/run/045_proxy/proxy_client.ts b/tests/specs/run/045_proxy/proxy_client.ts new file mode 100644 index 000000000..41deae2a5 --- /dev/null +++ b/tests/specs/run/045_proxy/proxy_client.ts @@ -0,0 +1,5 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +const res = await fetch( + "http://localhost:4545/run/045_mod.ts", +); +console.log(`Response http: ${await res.text()}`); diff --git a/tests/specs/run/045_proxy/proxy_test.ts b/tests/specs/run/045_proxy/proxy_test.ts new file mode 100644 index 000000000..d3386f0d7 --- /dev/null +++ b/tests/specs/run/045_proxy/proxy_test.ts @@ -0,0 +1,129 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +import { Server } from "../../../util/std/http/server.ts"; + +const addr = Deno.args[1] || "localhost:4555"; + +async function proxyServer() { + const [hostname, p] = addr.split(":"); + const port = parseInt(p ?? 4555); + const server = new Server({ hostname, port, handler }); + console.log(`Proxy server listening on http://${addr}/`); + await server.listenAndServe(); +} + +async function handler(req: Request): Promise<Response> { + console.log(`Proxy request to: ${req.url}`); + const headers = new Headers(req.headers); + const proxyAuthorization = headers.get("proxy-authorization"); + if (proxyAuthorization) { + console.log(`proxy-authorization: ${proxyAuthorization}`); + headers.delete("proxy-authorization"); + } + const resp = await fetch(req.url, { + method: req.method, + headers: headers, + }); + return new Response(new Uint8Array(await resp.arrayBuffer()), { + status: resp.status, + headers: resp.headers, + }); +} + +function assertSuccessOutput(output: Deno.CommandOutput) { + if (output.code !== 0) { + console.error("STDOUT", new TextDecoder().decode(output.stdout)); + console.error("STDERR", new TextDecoder().decode(output.stderr)); + throw new Error(`Expected exit code 0, was ${output.code}`); + } +} + +async function testFetch() { + const output = await new Deno.Command(Deno.execPath(), { + args: [ + "run", + "--quiet", + "--reload", + "--allow-net", + "proxy_client.ts", + ], + env: { + HTTP_PROXY: `http://${addr}`, + }, + }).output(); + + assertSuccessOutput(output); +} + +async function testModuleDownload() { + const output = await new Deno.Command(Deno.execPath(), { + args: [ + "cache", + "--reload", + "--quiet", + "http://localhost:4545/run/045_mod.ts", + ], + env: { + HTTP_PROXY: `http://${addr}`, + }, + }).output(); + + assertSuccessOutput(output); +} + +async function testFetchNoProxy() { + const output = await new Deno.Command(Deno.execPath(), { + args: [ + "run", + "--quiet", + "--reload", + "--allow-net", + "proxy_client.ts", + ], + env: { + HTTP_PROXY: "http://not.exising.proxy.server", + NO_PROXY: "localhost", + }, + }).output(); + + assertSuccessOutput(output); +} + +async function testModuleDownloadNoProxy() { + const output = await new Deno.Command(Deno.execPath(), { + args: [ + "cache", + "--reload", + "--quiet", + "http://localhost:4545/run/045_mod.ts", + ], + env: { + HTTP_PROXY: "http://not.exising.proxy.server", + NO_PROXY: "localhost", + }, + }).output(); + + assertSuccessOutput(output); +} + +async function testFetchProgrammaticProxy() { + const output = await new Deno.Command(Deno.execPath(), { + args: [ + "run", + "--quiet", + "--reload", + "--allow-net=localhost:4545,localhost:4555", + "--unstable", + "programmatic_proxy_client.ts", + ], + }).output(); + + assertSuccessOutput(output); +} + +proxyServer(); +await testFetch(); +await testModuleDownload(); +await testFetchNoProxy(); +await testModuleDownloadNoProxy(); +await testFetchProgrammaticProxy(); +Deno.exit(0); diff --git a/tests/specs/run/045_proxy/proxy_test.ts.out b/tests/specs/run/045_proxy/proxy_test.ts.out new file mode 100644 index 000000000..a1e567a14 --- /dev/null +++ b/tests/specs/run/045_proxy/proxy_test.ts.out @@ -0,0 +1,6 @@ +Proxy server listening on [WILDCARD] +Proxy request to: http://localhost:4545/run/045_mod.ts +Proxy request to: http://localhost:4545/run/045_mod.ts +Proxy request to: http://localhost:4545/run/045_output.ts +Proxy request to: http://localhost:4545/run/045_mod.ts +proxy-authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= |