Skip to content

Commit 7fc252f

Browse files
authored
test: fetch request through socks proxy over ipv4 (#34522)
1 parent 63f96ef commit 7fc252f

File tree

1 file changed

+86
-15
lines changed

1 file changed

+86
-15
lines changed

tests/library/browsertype-connect.spec.ts

Lines changed: 86 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ const test = playwrightTest.extend<ExtraFixtures>({
5353
const server = createHttpServer((req: http.IncomingMessage, res: http.ServerResponse) => {
5454
res.end('<html><body>from-dummy-server</body></html>');
5555
});
56-
await new Promise<void>(resolve => server.listen(0, resolve));
56+
// Only listen on IPv4 to check that we don't try to connect to it via IPv6.
57+
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
5758
await use((server.address() as net.AddressInfo).port);
5859
await new Promise<Error>(resolve => server.close(resolve));
5960
},
@@ -792,9 +793,23 @@ for (const kind of ['launchServer', 'run-server'] as const) {
792793
const remoteServer = await startRemoteServer(kind);
793794
const browser = await connect(remoteServer.wsEndpoint(), { _exposeNetwork: '*' } as any, dummyServerPort);
794795
const page = await browser.newPage();
795-
await page.goto(`http://127.0.0.1:${examplePort}/foo.html`);
796-
expect(await page.content()).toContain('from-dummy-server');
797-
expect(reachedOriginalTarget).toBe(false);
796+
{
797+
await page.setContent('empty');
798+
await page.goto(`http://127.0.0.1:${examplePort}/foo.html`);
799+
expect(await page.content()).toContain('from-dummy-server');
800+
expect(reachedOriginalTarget).toBe(false);
801+
}
802+
{
803+
await page.setContent('empty');
804+
await page.goto(`http://localhost:${examplePort}/foo.html`);
805+
expect(await page.content()).toContain('from-dummy-server');
806+
expect(reachedOriginalTarget).toBe(false);
807+
}
808+
{
809+
const error = await page.goto(`http://[::1]:${examplePort}/foo.html`).catch(() => 'failed');
810+
expect(error).toBe('failed');
811+
expect(reachedOriginalTarget).toBe(false);
812+
}
798813
});
799814

800815
test('should proxy ipv6 localhost requests @smoke', async ({ startRemoteServer, server, browserName, connect, platform, ipV6ServerPort }, testInfo) => {
@@ -809,15 +824,27 @@ for (const kind of ['launchServer', 'run-server'] as const) {
809824
const remoteServer = await startRemoteServer(kind);
810825
const browser = await connect(remoteServer.wsEndpoint(), { exposeNetwork: '*' }, ipV6ServerPort);
811826
const page = await browser.newPage();
812-
await page.goto(`http://[::1]:${examplePort}/foo.html`);
813-
expect(await page.content()).toContain('from-ipv6-server');
814-
const page2 = await browser.newPage();
815-
await page2.goto(`http://localhost:${examplePort}/foo.html`);
816-
expect(await page2.content()).toContain('from-ipv6-server');
817-
expect(reachedOriginalTarget).toBe(false);
827+
{
828+
await page.setContent('empty');
829+
await page.goto(`http://[::1]:${examplePort}/foo.html`);
830+
expect(await page.content()).toContain('from-ipv6-server');
831+
expect(reachedOriginalTarget).toBe(false);
832+
}
833+
{
834+
await page.setContent('empty');
835+
await page.goto(`http://localhost:${examplePort}/foo.html`);
836+
expect(await page.content()).toContain('from-ipv6-server');
837+
expect(reachedOriginalTarget).toBe(false);
838+
}
839+
{
840+
const error = await page.goto(`http://127.0.0.1:${examplePort}/foo.html`).catch(() => 'failed');
841+
expect(error).toBe('failed');
842+
expect(reachedOriginalTarget).toBe(false);
843+
}
818844
});
819845

820-
test('should proxy localhost requests from fetch api', async ({ startRemoteServer, server, browserName, connect, channel, platform, dummyServerPort }, workerInfo) => {
846+
test('should proxy requests from fetch api', async ({ startRemoteServer, server, browserName, connect, channel, platform, dummyServerPort }, workerInfo) => {
847+
test.fixme(true, 'broken because of socks proxy agent error: Socks5 proxy rejected connection - ConnectionRefused');
821848
test.skip(browserName === 'webkit' && platform === 'darwin', 'no localhost proxying');
822849

823850
let reachedOriginalTarget = false;
@@ -829,10 +856,54 @@ for (const kind of ['launchServer', 'run-server'] as const) {
829856
const remoteServer = await startRemoteServer(kind);
830857
const browser = await connect(remoteServer.wsEndpoint(), { exposeNetwork: '*' }, dummyServerPort);
831858
const page = await browser.newPage();
832-
const response = await page.request.get(`http://127.0.0.1:${examplePort}/foo.html`);
833-
expect(response.status()).toBe(200);
834-
expect(await response.text()).toContain('from-dummy-server');
835-
expect(reachedOriginalTarget).toBe(false);
859+
{
860+
const response = await page.request.get(`http://localhost:${examplePort}/foo.html`);
861+
expect(response.status()).toBe(200);
862+
expect(await response.text()).toContain('from-dummy-server');
863+
expect(reachedOriginalTarget).toBe(false);
864+
}
865+
{
866+
const response = await page.request.get(`http://127.0.0.1:${examplePort}/foo.html`);
867+
expect(response.status()).toBe(200);
868+
expect(await response.text()).toContain('from-dummy-server');
869+
expect(reachedOriginalTarget).toBe(false);
870+
}
871+
{
872+
const error = await page.request.get(`http://[::1]:${examplePort}/foo.html`).catch(e => 'failed');
873+
expect(error).toBe('failed');
874+
expect(reachedOriginalTarget).toBe(false);
875+
}
876+
});
877+
878+
test('should proxy requests from fetch api over ipv6', async ({ startRemoteServer, server, browserName, connect, channel, platform, ipV6ServerPort }, workerInfo) => {
879+
test.skip(browserName === 'webkit' && platform === 'darwin', 'no localhost proxying');
880+
881+
let reachedOriginalTarget = false;
882+
server.setRoute('/foo.html', async (req, res) => {
883+
reachedOriginalTarget = true;
884+
res.end('<html><body></body></html>');
885+
});
886+
const examplePort = 20_000 + workerInfo.workerIndex * 3;
887+
const remoteServer = await startRemoteServer(kind);
888+
const browser = await connect(remoteServer.wsEndpoint(), { exposeNetwork: '*' }, ipV6ServerPort);
889+
const page = await browser.newPage();
890+
{
891+
const response = await page.request.get(`http://localhost:${examplePort}/foo.html`);
892+
expect(response.status()).toBe(200);
893+
expect(await response.text()).toContain('from-ipv6-server');
894+
expect(reachedOriginalTarget).toBe(false);
895+
}
896+
{
897+
const response = await page.request.get(`http://[::1]:${examplePort}/foo.html`);
898+
expect(response.status()).toBe(200);
899+
expect(await response.text()).toContain('from-ipv6-server');
900+
expect(reachedOriginalTarget).toBe(false);
901+
}
902+
{
903+
const error = await page.request.get(`http://127.0.0.1:${examplePort}/foo.html`).catch(e => 'failed');
904+
expect(error).toBe('failed');
905+
expect(reachedOriginalTarget).toBe(false);
906+
}
836907
});
837908

838909
test('should proxy local.playwright requests', async ({ connect, server, dummyServerPort, startRemoteServer }, workerInfo) => {

0 commit comments

Comments
 (0)