summaryrefslogtreecommitdiff
path: root/tests/specs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/specs')
-rw-r--r--tests/specs/run/045_proxy/__test__.jsonc4
-rw-r--r--tests/specs/run/045_proxy/programmatic_proxy_client.ts16
-rw-r--r--tests/specs/run/045_proxy/proxy_client.ts5
-rw-r--r--tests/specs/run/045_proxy/proxy_test.ts129
-rw-r--r--tests/specs/run/045_proxy/proxy_test.ts.out6
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=