mirror of
https://github.com/hashicorp/vault-action.git
synced 2025-11-07 07:06:56 +00:00
add proxy support through global-agent, add proxy tests, update README
This commit is contained in:
parent
4c06c5ccf5
commit
1c8fc1b2a9
2 changed files with 96 additions and 0 deletions
24
src/proxy.js
Normal file
24
src/proxy.js
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
const {bootstrap} = require('global-agent');
|
||||
const core = require("@actions/core");
|
||||
const MAJOR_NODEJS_VERSION = parseInt(process.version.slice(1).split('.')[0], 10);
|
||||
|
||||
/**
|
||||
* Will enable global-agent proxy if the necessary
|
||||
* [global-agent environment variables](https://github.com/gajus/global-agent?tab=readme-ov-file#environment-variables)
|
||||
* has been set.
|
||||
* Important note: `global-agent` only works with Node.js v10 and above.
|
||||
* Node.js versions below v10 are not supported
|
||||
*
|
||||
* The bootstrap routine guards against multiple initializations of global-agent
|
||||
*/
|
||||
function enableProxy() {
|
||||
if (MAJOR_NODEJS_VERSION >= 10) {
|
||||
bootstrap();
|
||||
} else {
|
||||
core.debug('proxy configuration does not work with Node.js below v10')
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
enableProxy
|
||||
}
|
||||
72
src/proxy.test.js
Normal file
72
src/proxy.test.js
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
const {enableProxy } = require('./proxy')
|
||||
const got = require('got');
|
||||
|
||||
describe('global-agent proxy support works as expected', () => {
|
||||
|
||||
it('should fail with a request specific RequestError if got tries to request any-host without proxy', async () => {
|
||||
const expectedRequestErrorMessage = `getaddrinfo ENOTFOUND any-host`;
|
||||
try {
|
||||
await got.get('http://any-host')
|
||||
throw new Error('Test fail if the got request succeeds against expectation');
|
||||
} catch(e) {
|
||||
expect(e).toBeDefined();
|
||||
expect(e.message).toEqual(expectedRequestErrorMessage);
|
||||
expect(e.code).toEqual('ENOTFOUND');
|
||||
}
|
||||
});
|
||||
|
||||
it('should fail with a proxy specific RequestError if got tries to request through the defined proxy', async () => {
|
||||
const PROXY_HOST = "my-test-proxy-server";
|
||||
process.env.GLOBAL_AGENT_HTTP_PROXY = `http://${PROXY_HOST}:8000`;
|
||||
enableProxy();
|
||||
const expectedRequestErrorMessage = `getaddrinfo ENOTFOUND ${PROXY_HOST}`;
|
||||
try {
|
||||
await got.get('http://any-host')
|
||||
throw new Error('Test fail if the got request succeeds against expectation');
|
||||
} catch(e) {
|
||||
expect(e).toBeDefined();
|
||||
expect(e.message).toEqual(expectedRequestErrorMessage);
|
||||
expect(e.code).toEqual('ENOTFOUND');
|
||||
}
|
||||
});
|
||||
|
||||
it('should fail with a request specific RequestError if HTTP_PROXY URL is undefined', async () => {
|
||||
// set proxy url to undefined at runtime
|
||||
global.GLOBAL_AGENT.HTTP_PROXY = undefined;
|
||||
const expectedRequestErrorMessage = `getaddrinfo ENOTFOUND any-host`;
|
||||
try {
|
||||
await got.get('http://any-host')
|
||||
throw new Error('Test fail if the got request succeeds against expectation');
|
||||
} catch(e) {
|
||||
expect(e).toBeDefined();
|
||||
expect(e.message).toEqual(expectedRequestErrorMessage);
|
||||
expect(e.code).toEqual('ENOTFOUND');
|
||||
}
|
||||
});
|
||||
|
||||
it('should fail with a request specific RequestError if HTTP_PROXY URL is empty', async () => {
|
||||
// set proxy url to empty string at runtime
|
||||
global.GLOBAL_AGENT.HTTP_PROXY = '';
|
||||
const expectedRequestErrorMessage = `getaddrinfo ENOTFOUND any-host`;
|
||||
try {
|
||||
await got.get('http://any-host')
|
||||
throw new Error('Test fail if the got request succeeds against expectation');
|
||||
} catch(e) {
|
||||
expect(e).toBeDefined();
|
||||
expect(e.message).toEqual(expectedRequestErrorMessage);
|
||||
expect(e.code).toEqual('ENOTFOUND');
|
||||
}
|
||||
});
|
||||
|
||||
it('should fail with UNEXPECTED_STATE_ERROR if HTTP_PROXY URL protocol does not start with "http:"', async () => {
|
||||
// set proxy url to string with blanks at runtime
|
||||
global.GLOBAL_AGENT.HTTP_PROXY = 'file://';
|
||||
try {
|
||||
await got.get('http://any-host')
|
||||
throw new Error('Test fail if the got request succeeds against expectation');
|
||||
} catch(e) {
|
||||
expect(e).toBeDefined();
|
||||
expect(e.code).toEqual('UNEXPECTED_STATE_ERROR');
|
||||
}
|
||||
});
|
||||
})
|
||||
Loading…
Reference in a new issue