diff --git a/src/node/proxy_agent.ts b/src/node/proxy_agent.ts index 416a97868..39607c8da 100644 --- a/src/node/proxy_agent.ts +++ b/src/node/proxy_agent.ts @@ -62,7 +62,7 @@ function newProxyAgent(inVSCode: boolean): http.Agent { // If they have $NO_PROXY set to example.com then this check won't work! // But that's drastically unlikely. -function shouldEnableProxy(): boolean { +export function shouldEnableProxy(): boolean { let shouldEnable = false const httpProxy = proxyFromEnv.getProxyForUrl(`http://example.com`) diff --git a/test/unit/node/proxy_agent.test.ts b/test/unit/node/proxy_agent.test.ts new file mode 100644 index 000000000..9868c19f7 --- /dev/null +++ b/test/unit/node/proxy_agent.test.ts @@ -0,0 +1,59 @@ +import { shouldEnableProxy } from "../../../src/node/proxy_agent" + +/** + * Helper function to set an env variable. + * + * Returns a function to cleanup the env variable. + */ +function setEnv(name: string, value: string) { + process.env[name] = value + + return { + cleanup() { + delete process.env[name] + }, + } +} + +describe("shouldEnableProxy", () => { + // Source: https://stackoverflow.com/a/48042799 + const OLD_ENV = process.env + + beforeEach(() => { + jest.resetModules() // Most important - it clears the cache + process.env = { ...OLD_ENV } // Make a copy + }) + + afterAll(() => { + process.env = OLD_ENV // Restore old environment + }) + + it("returns true when HTTP_PROXY is set", () => { + const { cleanup } = setEnv("HTTP_PROXY", "http://proxy.example.com") + expect(shouldEnableProxy()).toBe(true) + cleanup() + }) + it("returns true when HTTPS_PROXY is set", () => { + const { cleanup } = setEnv("HTTPS_PROXY", "http://proxy.example.com") + expect(shouldEnableProxy()).toBe(true) + cleanup() + }) + it("returns false when NO_PROXY is set", () => { + const { cleanup } = setEnv("NO_PROXY", "*") + expect(shouldEnableProxy()).toBe(false) + cleanup() + }) + it("should return false when neither HTTP_PROXY nor HTTPS_PROXY is set", () => { + expect(shouldEnableProxy()).toBe(false) + }) + it("should return false when NO_PROXY is set to https://example.com", () => { + const { cleanup } = setEnv("NO_PROXY", "https://example.com") + expect(shouldEnableProxy()).toBe(false) + cleanup() + }) + it("should return false when NO_PROXY is set to http://example.com", () => { + const { cleanup } = setEnv("NO_PROXY", "http://example.com") + expect(shouldEnableProxy()).toBe(false) + cleanup() + }) +})