mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-17 16:37:43 +00:00
168 lines
5.1 KiB
JavaScript
168 lines
5.1 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const path = require('node:path');
|
|
const Module = require('node:module');
|
|
const { Agent: HttpsAgent } = require('node:https');
|
|
const { HttpsProxyAgent } = require('https-proxy-agent');
|
|
|
|
require('ts-node/register/transpile-only');
|
|
|
|
const originalModuleLoad = Module._load;
|
|
const originalEnv = { ...process.env };
|
|
const proxyAgentModulePath = path.resolve(__dirname, 'proxy-agent.ts');
|
|
|
|
const resetModule = () => {
|
|
delete require.cache[proxyAgentModulePath];
|
|
};
|
|
|
|
const clearProxyEnv = () => {
|
|
delete process.env.HTTPS_PROXY;
|
|
delete process.env.https_proxy;
|
|
delete process.env.HTTP_PROXY;
|
|
delete process.env.http_proxy;
|
|
delete process.env.NO_PROXY;
|
|
delete process.env.no_proxy;
|
|
};
|
|
|
|
const installMocks = () => {
|
|
Module._load = function patchedLoad(request, parent, isMain) {
|
|
if (request === 'electron-log/main') {
|
|
return {
|
|
log: () => {},
|
|
};
|
|
}
|
|
|
|
return originalModuleLoad.call(this, request, parent, isMain);
|
|
};
|
|
};
|
|
|
|
const loadProxyAgentModule = () => {
|
|
resetModule();
|
|
return require(proxyAgentModulePath);
|
|
};
|
|
|
|
test.beforeEach(() => {
|
|
clearProxyEnv();
|
|
installMocks();
|
|
resetModule();
|
|
});
|
|
|
|
test.afterEach(() => {
|
|
Module._load = originalModuleLoad;
|
|
process.env = { ...originalEnv };
|
|
resetModule();
|
|
});
|
|
|
|
test('returns undefined when no proxy or self-signed handling is configured', () => {
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
assert.equal(
|
|
createProxyAwareAgent('https://jira.internal.example/rest/api'),
|
|
undefined,
|
|
);
|
|
});
|
|
|
|
test('creates a proxy agent from HTTPS_PROXY', () => {
|
|
process.env.HTTPS_PROXY = 'http://proxy.example:8080';
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
const agent = createProxyAwareAgent('https://jira.external.example/rest/api');
|
|
|
|
assert.ok(agent instanceof HttpsProxyAgent);
|
|
assert.equal(agent.proxy.href, 'http://proxy.example:8080/');
|
|
});
|
|
|
|
test('bypasses proxy for an exact NO_PROXY host match', () => {
|
|
process.env.HTTPS_PROXY = 'http://proxy.example:8080';
|
|
process.env.NO_PROXY = 'jira.internal.example';
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
assert.equal(
|
|
createProxyAwareAgent('https://jira.internal.example/rest/api'),
|
|
undefined,
|
|
);
|
|
});
|
|
|
|
test('bypasses proxy for subdomains of a bare NO_PROXY domain', () => {
|
|
process.env.HTTPS_PROXY = 'http://proxy.example:8080';
|
|
process.env.NO_PROXY = 'internal.example';
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
assert.equal(
|
|
createProxyAwareAgent('https://jira.internal.example/rest/api'),
|
|
undefined,
|
|
);
|
|
assert.ok(
|
|
createProxyAwareAgent('https://notinternal.example/rest/api') instanceof
|
|
HttpsProxyAgent,
|
|
);
|
|
});
|
|
|
|
test('honors lowercase no_proxy and leading-dot suffix matches', () => {
|
|
process.env.HTTPS_PROXY = 'http://proxy.example:8080';
|
|
process.env.no_proxy = '.internal.example';
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
assert.equal(
|
|
createProxyAwareAgent('https://jira.internal.example/rest/api'),
|
|
undefined,
|
|
);
|
|
assert.equal(createProxyAwareAgent('https://internal.example/rest/api'), undefined);
|
|
});
|
|
|
|
test('honors wildcard NO_PROXY entries', () => {
|
|
process.env.HTTPS_PROXY = 'http://proxy.example:8080';
|
|
process.env.NO_PROXY = '*';
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
assert.equal(
|
|
createProxyAwareAgent('https://jira.external.example/rest/api'),
|
|
undefined,
|
|
);
|
|
});
|
|
|
|
test('honors wildcard suffix NO_PROXY entries', () => {
|
|
process.env.HTTPS_PROXY = 'http://proxy.example:8080';
|
|
process.env.NO_PROXY = '*.corp.example';
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
assert.equal(createProxyAwareAgent('https://jira.corp.example/rest/api'), undefined);
|
|
});
|
|
|
|
test('requires NO_PROXY port entries to match the request port', () => {
|
|
process.env.HTTPS_PROXY = 'http://proxy.example:8080';
|
|
process.env.NO_PROXY = 'jira.internal.example:8443';
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
assert.equal(
|
|
createProxyAwareAgent('https://jira.internal.example:8443/rest/api'),
|
|
undefined,
|
|
);
|
|
assert.ok(
|
|
createProxyAwareAgent('https://jira.internal.example:443/rest/api') instanceof
|
|
HttpsProxyAgent,
|
|
);
|
|
});
|
|
|
|
test('keeps self-signed handling when NO_PROXY bypasses the proxy', () => {
|
|
process.env.HTTPS_PROXY = 'http://proxy.example:8080';
|
|
process.env.NO_PROXY = 'jira.internal.example';
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
const agent = createProxyAwareAgent('https://jira.internal.example/rest/api', true);
|
|
|
|
assert.ok(agent instanceof HttpsAgent);
|
|
assert.equal(agent.options.rejectUnauthorized, false);
|
|
});
|
|
|
|
test('keeps proxy handling for non-matching NO_PROXY entries', () => {
|
|
process.env.HTTPS_PROXY = 'http://proxy.example:8080';
|
|
process.env.NO_PROXY = 'other.internal.example,.corp.example';
|
|
const { createProxyAwareAgent } = loadProxyAgentModule();
|
|
|
|
const agent = createProxyAwareAgent('https://jira.internal.example/rest/api', true);
|
|
|
|
assert.ok(agent instanceof HttpsProxyAgent);
|
|
assert.equal(agent.proxy.href, 'http://proxy.example:8080/');
|
|
assert.equal(agent.options.rejectUnauthorized, false);
|
|
});
|