Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 1.8k
octokit client should follow proxy settings#314
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
507e4be45cae671b905e9fe04d29076417c74808ba5c1b20ac4a91d3da95ba6fd75dbc9dafc948ae50a075d5d80File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,173 @@ | ||
| import * as http from 'http' | ||
| import proxy from 'proxy' | ||
| import {GitHub} from '../src/github' | ||
| describe('@actions/github', () => { | ||
| const proxyUrl = 'http://127.0.0.1:8080' | ||
| const originalProxyUrl = process.env['https_proxy'] | ||
| let proxyConnects: string[] | ||
| let proxyServer: http.Server | ||
| let first = true | ||
| beforeAll(async () => { | ||
| // Start proxy server | ||
| proxyServer = proxy() as http.Server | ||
| await new Promise(resolve => { | ||
| const port = Number(proxyUrl.split(':')[2]) | ||
| proxyServer.listen(port, () => resolve()) | ||
| }) | ||
| proxyServer.on('connect', req => { | ||
| proxyConnects.push(req.url) | ||
| }) | ||
| }) | ||
| beforeEach(() => { | ||
| delete process.env['https_proxy'] | ||
| proxyConnects = [] | ||
| }) | ||
| afterAll(async () => { | ||
| // Stop proxy server | ||
| await new Promise(resolve => { | ||
| proxyServer.once('close', () => resolve()) | ||
| proxyServer.close() | ||
| }) | ||
| if (originalProxyUrl) { | ||
| process.env['https_proxy'] = originalProxyUrl | ||
| } | ||
| }) | ||
| it('basic REST client', async () => { | ||
| const token = getToken() | ||
| if (!token) { | ||
| return | ||
| } | ||
| const octokit = new GitHub(token) | ||
| const branch = await octokit.repos.getBranch({ | ||
| owner: 'actions', | ||
| repo: 'toolkit', | ||
| branch: 'master' | ||
| }) | ||
| expect(branch.data.name).toBe('master') | ||
| expect(proxyConnects).toHaveLength(0) | ||
| }) | ||
| it('basic REST client with custom auth', async () => { | ||
| const token = getToken() | ||
| if (!token) { | ||
| return | ||
| } | ||
| // Valid token | ||
| let octokit = new GitHub({auth: `token ${token}`}) | ||
| const branch = await octokit.repos.getBranch({ | ||
| owner: 'actions', | ||
| repo: 'toolkit', | ||
| branch: 'master' | ||
| }) | ||
| expect(branch.data.name).toBe('master') | ||
| expect(proxyConnects).toHaveLength(0) | ||
| // Invalid token | ||
| octokit = new GitHub({auth: `token asdf`}) | ||
| let failed = false | ||
| try { | ||
| await octokit.repos.getBranch({ | ||
| owner: 'actions', | ||
| repo: 'toolkit', | ||
| branch: 'master' | ||
| }) | ||
| } catch (err) { | ||
| failed = true | ||
| } | ||
| expect(failed).toBeTruthy() | ||
| }) | ||
| it('basic REST client with proxy', async () => { | ||
| const token = getToken() | ||
| if (!token) { | ||
| return | ||
| } | ||
| process.env['https_proxy'] = proxyUrl | ||
| const octokit = new GitHub(token) | ||
| const branch = await octokit.repos.getBranch({ | ||
| owner: 'actions', | ||
| repo: 'toolkit', | ||
| branch: 'master' | ||
| }) | ||
| expect(branch.data.name).toBe('master') | ||
| expect(proxyConnects).toEqual(['api.github.com:443']) | ||
| }) | ||
| it('basic GraphQL client', async () => { | ||
| const token = getToken() | ||
| if (!token) { | ||
| return | ||
| } | ||
| const octokit = new GitHub(token) | ||
| const repository = await octokit.graphql( | ||
| '{repository(owner:"actions", name:"toolkit"){name}}' | ||
| ) | ||
| expect(repository).toEqual({repository: {name: 'toolkit'}}) | ||
| expect(proxyConnects).toHaveLength(0) | ||
| }) | ||
| it('basic GraphQL client with custom auth', async () => { | ||
| const token = getToken() | ||
| if (!token) { | ||
| return | ||
| } | ||
| // Valid token | ||
| let octokit = new GitHub(token) | ||
| const repository = await octokit.graphql( | ||
| '{repository(owner:"actions", name:"toolkit"){name}}' | ||
| ) | ||
| expect(repository).toEqual({repository: {name: 'toolkit'}}) | ||
| expect(proxyConnects).toHaveLength(0) | ||
| // Invalid token | ||
| octokit = new GitHub({auth: `token asdf`}) | ||
| let failed = false | ||
| try { | ||
| await octokit.graphql( | ||
| '{repository(owner:"actions", name:"toolkit"){name}}' | ||
| ) | ||
| } catch (err) { | ||
| failed = true | ||
| } | ||
| expect(failed).toBeTruthy() | ||
| }) | ||
| it('basic GraphQL client with proxy', async () => { | ||
| const token = getToken() | ||
| if (!token) { | ||
| return | ||
| } | ||
| process.env['https_proxy'] = proxyUrl | ||
| const octokit = new GitHub(token) | ||
| const repository = await octokit.graphql( | ||
| '{repository(owner:"actions", name:"toolkit"){name}}' | ||
| ) | ||
| expect(repository).toEqual({repository: {name: 'toolkit'}}) | ||
| expect(proxyConnects).toEqual(['api.github.com:443']) | ||
| }) | ||
| function getToken(): string { | ||
| const token = process.env['GITHUB_TOKEN'] || '' | ||
| if (!token && first) { | ||
| /* eslint-disable-next-line no-console */ | ||
| console.warn( | ||
| 'Skipping GitHub tests. Set $GITHUB_TOKEN to run REST client and GraphQL client tests' | ||
| ) | ||
| first = false | ||
| } | ||
| return token | ||
| } | ||
| }) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| declare module 'proxy' { | ||
ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. typescript made me do this :( | ||
| import * as http from 'http' | ||
| function internal(): http.Server | ||
| export = internal | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
New tests to exercise GitHub REST client and GraphQL client with and without proxy
Only runs when env var GITHUB_TOKEN is defined, otherwise warns for discoverability