| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Copyright Microsoft Corporation. All rights reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  |  * you may not use this file except in compliance with the License. | 
					
						
							|  |  |  |  * You may obtain a copy of the License at | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  |  * distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  |  * See the License for the specific language governing permissions and | 
					
						
							|  |  |  |  * limitations under the License. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import http from 'http'; | 
					
						
							|  |  |  | import path from 'path'; | 
					
						
							|  |  |  | import { test, expect } from './playwright-test-fixtures'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test('should create a server', async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							|  |  |  |   const port = workerIndex + 10500; | 
					
						
							|  |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('connect to the server via the baseURL', async ({baseURL, page}) => { | 
					
						
							|  |  |  |         await page.goto('/hello'); | 
					
						
							|  |  |  |         await page.waitForURL('/hello'); | 
					
						
							|  |  |  |         expect(page.url()).toBe('http://localhost:${port}/hello'); | 
					
						
							|  |  |  |         expect(await page.textContent('body')).toBe('hello'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |         webServer: { | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |           command: 'node ${JSON.stringify(path.join(__dirname, 'assets', 'simple-server.js'))} ${port}', | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |           port: ${port}, | 
					
						
							| 
									
										
										
										
											2021-07-14 19:01:46 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |         globalSetup: 'globalSetup.ts', | 
					
						
							|  |  |  |         globalTeardown: 'globalTeardown.ts', | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'globalSetup.ts': `
 | 
					
						
							|  |  |  |       module.exports = async () => { | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |         const http = require("http"); | 
					
						
							|  |  |  |         const response = await new Promise(resolve => { | 
					
						
							|  |  |  |           const request = http.request("http://localhost:${port}/hello", resolve); | 
					
						
							|  |  |  |           request.end(); | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         console.log('globalSetup-status-'+response.statusCode) | 
					
						
							|  |  |  |         return async () => { | 
					
						
							|  |  |  |           const response = await new Promise(resolve => { | 
					
						
							|  |  |  |             const request = http.request("http://localhost:${port}/hello", resolve); | 
					
						
							|  |  |  |             request.end(); | 
					
						
							|  |  |  |           }) | 
					
						
							|  |  |  |           console.log('globalSetup-teardown-status-'+response.statusCode) | 
					
						
							|  |  |  |         }; | 
					
						
							| 
									
										
										
										
											2021-07-14 19:01:46 +02:00
										 |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'globalTeardown.ts': `
 | 
					
						
							|  |  |  |       module.exports = async () => { | 
					
						
							|  |  |  |         const http = require("http"); | 
					
						
							|  |  |  |         const response = await new Promise(resolve => { | 
					
						
							|  |  |  |           const request = http.request("http://localhost:${port}/hello", resolve); | 
					
						
							|  |  |  |           request.end(); | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         console.log('globalTeardown-status-'+response.statusCode) | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   expect(result.exitCode).toBe(0); | 
					
						
							|  |  |  |   expect(result.passed).toBe(1); | 
					
						
							| 
									
										
										
										
											2022-02-18 07:54:01 -08:00
										 |  |  |   expect(result.output).not.toContain('[WebServer] listening'); | 
					
						
							|  |  |  |   expect(result.output).toContain('[WebServer] error from server'); | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |   expect(result.report.suites[0].specs[0].tests[0].results[0].status).toContain('passed'); | 
					
						
							| 
									
										
										
										
											2021-07-14 19:01:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |   const expectedLogMessages = ['globalSetup-status-200', 'globalSetup-teardown-status', 'globalTeardown-status-200']; | 
					
						
							| 
									
										
										
										
											2021-07-14 19:01:46 +02:00
										 |  |  |   const actualLogMessages = expectedLogMessages.map(log => ({ | 
					
						
							|  |  |  |     log, | 
					
						
							|  |  |  |     index: result.output.indexOf(log), | 
					
						
							|  |  |  |   })).sort((a, b) => a.index - b.index).filter(l => l.index !== -1).map(l => l.log); | 
					
						
							|  |  |  |   expect(actualLogMessages).toStrictEqual(expectedLogMessages); | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test('should create a server with environment variables', async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							|  |  |  |   const port = workerIndex + 10500; | 
					
						
							|  |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('connect to the server', async ({baseURL, page}) => { | 
					
						
							|  |  |  |         expect(baseURL).toBe('http://localhost:${port}'); | 
					
						
							|  |  |  |         await page.goto(baseURL + '/env-FOO'); | 
					
						
							|  |  |  |         expect(await page.textContent('body')).toBe('BAR'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |         webServer: { | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |           command: 'node ${JSON.stringify(path.join(__dirname, 'assets', 'simple-server.js'))} ${port}', | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |           port: ${port}, | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |           env: { | 
					
						
							|  |  |  |             'FOO': 'BAR', | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							| 
									
										
										
										
											2022-02-18 07:54:01 -08:00
										 |  |  |   }, {}, { DEBUG: 'pw:webserver' }); | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |   expect(result.exitCode).toBe(0); | 
					
						
							|  |  |  |   expect(result.passed).toBe(1); | 
					
						
							| 
									
										
										
										
											2022-02-18 07:54:01 -08:00
										 |  |  |   expect(result.output).toContain('[WebServer] listening'); | 
					
						
							|  |  |  |   expect(result.output).toContain('[WebServer] error from server'); | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |   expect(result.report.suites[0].specs[0].tests[0].results[0].status).toContain('passed'); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-27 01:32:58 +01:00
										 |  |  | test('should create a server with url', async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							|  |  |  |   const port = workerIndex + 10500; | 
					
						
							|  |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('connect to the server', async ({baseURL, page}) => { | 
					
						
							| 
									
										
										
										
											2022-02-08 15:57:36 -08:00
										 |  |  |         expect(baseURL).toBe(undefined); | 
					
						
							|  |  |  |         await page.goto('http://localhost:${port}/ready'); | 
					
						
							| 
									
										
										
										
											2022-01-27 01:32:58 +01:00
										 |  |  |         expect(await page.textContent('body')).toBe('hello'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							|  |  |  |         webServer: { | 
					
						
							|  |  |  |           command: 'node ${JSON.stringify(path.join(__dirname, 'assets', 'simple-server-with-ready-route.js'))} ${port}', | 
					
						
							|  |  |  |           url: 'http://localhost:${port}/ready' | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   expect(result.exitCode).toBe(0); | 
					
						
							|  |  |  |   expect(result.passed).toBe(1); | 
					
						
							|  |  |  |   expect(result.report.suites[0].specs[0].tests[0].results[0].status).toContain('passed'); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  | test('should time out waiting for a server', async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							|  |  |  |   const port = workerIndex + 10500; | 
					
						
							|  |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('connect to the server', async ({baseURL, page}) => { | 
					
						
							|  |  |  |         expect(baseURL).toBe('http://localhost:${port}'); | 
					
						
							|  |  |  |         await page.goto(baseURL + '/hello'); | 
					
						
							|  |  |  |         expect(await page.textContent('body')).toBe('hello'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |         webServer: { | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |           command: 'node ${JSON.stringify(JSON.stringify(path.join(__dirname, 'assets', 'simple-server.js')))} ${port}', | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |           port: ${port}, | 
					
						
							|  |  |  |           timeout: 100, | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   expect(result.exitCode).toBe(1); | 
					
						
							| 
									
										
										
										
											2021-09-27 11:32:57 +02:00
										 |  |  |   expect(result.output).toContain(`Timed out waiting 100ms from config.webServer.`); | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-27 01:32:58 +01:00
										 |  |  | test('should time out waiting for a server with url', async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							|  |  |  |   const port = workerIndex + 10500; | 
					
						
							|  |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('connect to the server', async ({baseURL, page}) => { | 
					
						
							|  |  |  |         expect(baseURL).toBe('http://localhost:${port}/ready'); | 
					
						
							|  |  |  |         await page.goto(baseURL); | 
					
						
							|  |  |  |         expect(await page.textContent('body')).toBe('hello'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							|  |  |  |         webServer: { | 
					
						
							|  |  |  |           command: 'node ${JSON.stringify(path.join(__dirname, 'assets', 'simple-server-with-ready-route.js'))} ${port}', | 
					
						
							|  |  |  |           url: 'http://localhost:${port}/ready', | 
					
						
							|  |  |  |           timeout: 300, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   expect(result.exitCode).toBe(1); | 
					
						
							|  |  |  |   expect(result.output).toContain(`Timed out waiting 300ms from config.webServer.`); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  | test('should be able to specify the baseURL without the server', async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |   const port = workerIndex + 10500; | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |   const server = http.createServer((req: http.IncomingMessage, res: http.ServerResponse) => { | 
					
						
							|  |  |  |     res.end('<html><body>hello</body></html>'); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2021-10-01 19:40:47 -07:00
										 |  |  |   await new Promise<void>(resolve => server.listen(port, resolve)); | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('connect to the server', async ({baseURL, page}) => { | 
					
						
							|  |  |  |         expect(baseURL).toBe('http://localhost:${port}'); | 
					
						
							|  |  |  |         await page.goto(baseURL + '/hello'); | 
					
						
							|  |  |  |         expect(await page.textContent('body')).toBe('hello'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |         use: { | 
					
						
							|  |  |  |           baseURL: 'http://localhost:${port}', | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   expect(result.exitCode).toBe(0); | 
					
						
							|  |  |  |   expect(result.passed).toBe(1); | 
					
						
							|  |  |  |   expect(result.report.suites[0].specs[0].tests[0].results[0].status).toContain('passed'); | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |   await new Promise(resolve => server.close(resolve)); | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-29 17:41:26 +01:00
										 |  |  | test('should be able to specify a custom baseURL with the server', async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							|  |  |  |   const customWebServerPort = workerIndex + 10500; | 
					
						
							|  |  |  |   const webServerPort = customWebServerPort + 1; | 
					
						
							|  |  |  |   const server = http.createServer((req: http.IncomingMessage, res: http.ServerResponse) => { | 
					
						
							|  |  |  |     res.end('<html><body>hello</body></html>'); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   await new Promise<void>(resolve => server.listen(customWebServerPort, resolve)); | 
					
						
							|  |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('connect to the server', async ({baseURL, page}) => { | 
					
						
							|  |  |  |         expect(baseURL).toBe('http://localhost:${customWebServerPort}'); | 
					
						
							|  |  |  |         await page.goto(baseURL + '/hello'); | 
					
						
							|  |  |  |         expect(await page.textContent('body')).toBe('hello'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							|  |  |  |         webServer: { | 
					
						
							|  |  |  |           command: 'node ${JSON.stringify(path.join(__dirname, 'assets', 'simple-server.js'))} ${webServerPort}', | 
					
						
							|  |  |  |           port: ${webServerPort}, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         use: { | 
					
						
							|  |  |  |           baseURL: 'http://localhost:${customWebServerPort}', | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   expect(result.exitCode).toBe(0); | 
					
						
							|  |  |  |   expect(result.passed).toBe(1); | 
					
						
							|  |  |  |   expect(result.report.suites[0].specs[0].tests[0].results[0].status).toContain('passed'); | 
					
						
							|  |  |  |   await new Promise(resolve => server.close(resolve)); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  | test('should be able to use an existing server when reuseExistingServer:true ', async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |   const port = workerIndex + 10500; | 
					
						
							|  |  |  |   const server = http.createServer((req: http.IncomingMessage, res: http.ServerResponse) => { | 
					
						
							|  |  |  |     res.end('<html><body>hello</body></html>'); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2021-10-01 19:40:47 -07:00
										 |  |  |   await new Promise<void>(resolve => server.listen(port, resolve)); | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |       test('connect to the server via the baseURL', async ({baseURL, page}) => { | 
					
						
							|  |  |  |         await page.goto('/hello'); | 
					
						
							|  |  |  |         await page.waitForURL('/hello'); | 
					
						
							|  |  |  |         expect(page.url()).toBe('http://localhost:${port}/hello'); | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |         expect(await page.textContent('body')).toBe('hello'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |         webServer: { | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |           command: 'node ${JSON.stringify(path.join(__dirname, 'assets', 'simple-server.js'))} ${port}', | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |           port: ${port}, | 
					
						
							|  |  |  |           reuseExistingServer: true, | 
					
						
							| 
									
										
										
										
											2021-07-07 20:19:42 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   expect(result.exitCode).toBe(0); | 
					
						
							|  |  |  |   expect(result.passed).toBe(1); | 
					
						
							| 
									
										
										
										
											2021-09-27 11:32:57 +02:00
										 |  |  |   expect(result.output).not.toContain('[WebServer] '); | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |   expect(result.report.suites[0].specs[0].tests[0].results[0].status).toContain('passed'); | 
					
						
							|  |  |  |   await new Promise(resolve => server.close(resolve)); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test('should throw when a server is already running on the given port and strict is true ', async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							|  |  |  |   const port = workerIndex + 10500; | 
					
						
							|  |  |  |   const server = http.createServer((req: http.IncomingMessage, res: http.ServerResponse) => { | 
					
						
							|  |  |  |     res.end('<html><body>hello</body></html>'); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2021-10-01 19:40:47 -07:00
										 |  |  |   await new Promise<void>(resolve => server.listen(port, resolve)); | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('connect to the server via the baseURL', async ({baseURL, page}) => { | 
					
						
							|  |  |  |         await page.goto('/hello'); | 
					
						
							|  |  |  |         await page.waitForURL('/hello'); | 
					
						
							|  |  |  |         expect(page.url()).toBe('http://localhost:${port}/hello'); | 
					
						
							|  |  |  |         expect(await page.textContent('body')).toBe('hello'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |         webServer: { | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |           command: 'node ${JSON.stringify(path.join(__dirname, 'assets', 'simple-server.js'))} ${port}', | 
					
						
							| 
									
										
										
										
											2021-08-03 23:24:14 +02:00
										 |  |  |           port: ${port}, | 
					
						
							|  |  |  |           reuseExistingServer: false, | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   expect(result.exitCode).toBe(1); | 
					
						
							| 
									
										
										
										
											2022-01-27 01:32:58 +01:00
										 |  |  |   expect(result.output).toContain(`http://localhost:${port} is already used, make sure that nothing is running on the port/url`); | 
					
						
							| 
									
										
										
										
											2021-07-15 01:19:45 +02:00
										 |  |  |   await new Promise(resolve => server.close(resolve)); | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-09-02 18:39:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | for (const host of ['localhost', '127.0.0.1', '0.0.0.0']) { | 
					
						
							|  |  |  |   test(`should detect the server if a web-server is already running on ${host}`, async ({ runInlineTest }, { workerIndex }) => { | 
					
						
							|  |  |  |     const port = workerIndex + 10500; | 
					
						
							|  |  |  |     const server = http.createServer((req: http.IncomingMessage, res: http.ServerResponse) => { | 
					
						
							|  |  |  |       res.end('<html><body>hello</body></html>'); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2021-10-01 19:40:47 -07:00
										 |  |  |     await new Promise<void>(resolve => server.listen(port, host, resolve)); | 
					
						
							| 
									
										
										
										
											2021-09-02 18:39:41 +02:00
										 |  |  |     try { | 
					
						
							|  |  |  |       const result = await runInlineTest({ | 
					
						
							|  |  |  |         'test.spec.ts': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('connect to the server via the baseURL', async ({baseURL, page}) => { | 
					
						
							|  |  |  |         await page.goto('/hello'); | 
					
						
							|  |  |  |         expect(await page.textContent('body')).toBe('hello'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |         'playwright.config.ts': `
 | 
					
						
							|  |  |  |       module.exports = { | 
					
						
							|  |  |  |         webServer: { | 
					
						
							|  |  |  |           command: 'node -e "process.exit(1)"', | 
					
						
							|  |  |  |           port: ${port}, | 
					
						
							|  |  |  |           reuseExistingServer: false, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       expect(result.exitCode).toBe(1); | 
					
						
							| 
									
										
										
										
											2022-01-27 01:32:58 +01:00
										 |  |  |       expect(result.output).toContain(`http://localhost:${port} is already used, make sure that nothing is running on the port/url`); | 
					
						
							| 
									
										
										
										
											2021-09-02 18:39:41 +02:00
										 |  |  |     } finally { | 
					
						
							|  |  |  |       await new Promise(resolve => server.close(resolve)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-03-24 17:30:52 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | test(`should suport self signed certificate`, async ({ runInlineTest, httpsServer }) => { | 
					
						
							|  |  |  |   const result = await runInlineTest({ | 
					
						
							|  |  |  |     'test.spec.js': `
 | 
					
						
							|  |  |  |       const { test } = pwt; | 
					
						
							|  |  |  |       test('pass', async ({}) => { }); | 
					
						
							|  |  |  |     `,
 | 
					
						
							|  |  |  |     'playwright.config.js': `
 | 
					
						
							|  |  |  |     module.exports = { | 
					
						
							|  |  |  |       webServer: { | 
					
						
							|  |  |  |         url: '${httpsServer.EMPTY_PAGE}', | 
					
						
							|  |  |  |         ignoreHTTPSErrors: true, | 
					
						
							|  |  |  |         reuseExistingServer: true, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   `,
 | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   expect(result.exitCode).toBe(0); | 
					
						
							|  |  |  | }); |