mirror of
https://github.com/microsoft/playwright.git
synced 2024-12-14 21:53:35 +03:00
feat: pass server address as argument (#13412)
This commit is contained in:
parent
eaab6406cd
commit
f803a929e4
@ -240,10 +240,11 @@ Examples:
|
|||||||
program
|
program
|
||||||
.command('experimental-grid-server', { hidden: true })
|
.command('experimental-grid-server', { hidden: true })
|
||||||
.option('--port <port>', 'grid port; defaults to 3333')
|
.option('--port <port>', 'grid port; defaults to 3333')
|
||||||
|
.option('--address <address>', 'address of the server')
|
||||||
.option('--agent-factory <factory>', 'path to grid agent factory or npm package')
|
.option('--agent-factory <factory>', 'path to grid agent factory or npm package')
|
||||||
.option('--auth-token <authToken>', 'optional authentication token')
|
.option('--auth-token <authToken>', 'optional authentication token')
|
||||||
.action(function(options) {
|
.action(function(options) {
|
||||||
launchGridServer(options.agentFactory, options.port || 3333, options.authToken);
|
launchGridServer(options.agentFactory, options.port || 3333, options.address, options.authToken);
|
||||||
});
|
});
|
||||||
|
|
||||||
program
|
program
|
||||||
@ -641,7 +642,7 @@ function commandWithOpenOptions(command: string, description: string, options: a
|
|||||||
.option('--viewport-size <size>', 'specify browser viewport size in pixels, for example "1280, 720"');
|
.option('--viewport-size <size>', 'specify browser viewport size in pixels, for example "1280, 720"');
|
||||||
}
|
}
|
||||||
|
|
||||||
async function launchGridServer(factoryPathOrPackageName: string, port: number, authToken: string|undefined): Promise<void> {
|
async function launchGridServer(factoryPathOrPackageName: string, port: number, address: string | undefined, authToken: string | undefined): Promise<void> {
|
||||||
if (!factoryPathOrPackageName)
|
if (!factoryPathOrPackageName)
|
||||||
factoryPathOrPackageName = path.join('..', 'grid', 'simpleGridFactory');
|
factoryPathOrPackageName = path.join('..', 'grid', 'simpleGridFactory');
|
||||||
let factory;
|
let factory;
|
||||||
@ -655,7 +656,7 @@ async function launchGridServer(factoryPathOrPackageName: string, port: number,
|
|||||||
if (!factory || !factory.launch || typeof factory.launch !== 'function')
|
if (!factory || !factory.launch || typeof factory.launch !== 'function')
|
||||||
throw new Error('factory does not export `launch` method');
|
throw new Error('factory does not export `launch` method');
|
||||||
factory.name = factory.name || factoryPathOrPackageName;
|
factory.name = factory.name || factoryPathOrPackageName;
|
||||||
const gridServer = new GridServer(factory as GridFactory, authToken);
|
const gridServer = new GridServer(factory as GridFactory, authToken, address);
|
||||||
await gridServer.start(port);
|
await gridServer.start(port);
|
||||||
console.log('Grid server is running at ' + gridServer.urlPrefix());
|
console.log('Grid server is running at ' + gridServer.urlPrefix());
|
||||||
}
|
}
|
||||||
|
@ -220,11 +220,11 @@ export class GridServer {
|
|||||||
private _factory: GridFactory;
|
private _factory: GridFactory;
|
||||||
private _pwVersion: string;
|
private _pwVersion: string;
|
||||||
|
|
||||||
constructor(factory: GridFactory, authToken: string = '') {
|
constructor(factory: GridFactory, authToken: string = '', address: string = '') {
|
||||||
this._log = debug(`pw:grid:server`);
|
this._log = debug(`pw:grid:server`);
|
||||||
this._log(`using factory ${factory.name}`);
|
this._log(`using factory ${factory.name}`);
|
||||||
this._authToken = authToken || '';
|
this._authToken = authToken || '';
|
||||||
this._server = new HttpServer();
|
this._server = new HttpServer(address);
|
||||||
this._factory = factory;
|
this._factory = factory;
|
||||||
this._pwVersion = getPlaywrightVersion(true /* majorMinorOnly */);
|
this._pwVersion = getPlaywrightVersion(true /* majorMinorOnly */);
|
||||||
|
|
||||||
@ -323,7 +323,7 @@ export class GridServer {
|
|||||||
return await initPromise;
|
return await initPromise;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _createAgent(): {agent: GridAgent, initPromise: Promise<{ error: any }>} {
|
private _createAgent(): { agent: GridAgent, initPromise: Promise<{ error: any }> } {
|
||||||
const agent = new GridAgent(this._factory.capacity, this._factory.launchTimeout, this._factory.retireTimeout);
|
const agent = new GridAgent(this._factory.capacity, this._factory.launchTimeout, this._factory.retireTimeout);
|
||||||
this._agents.set(agent.agentId, agent);
|
this._agents.set(agent.agentId, agent);
|
||||||
agent.on('close', () => {
|
agent.on('close', () => {
|
||||||
|
@ -27,10 +27,11 @@ export class HttpServer {
|
|||||||
private _server: http.Server;
|
private _server: http.Server;
|
||||||
private _urlPrefix: string;
|
private _urlPrefix: string;
|
||||||
private _port: number = 0;
|
private _port: number = 0;
|
||||||
|
private _started = false;
|
||||||
private _routes: { prefix?: string, exact?: string, handler: ServerRouteHandler }[] = [];
|
private _routes: { prefix?: string, exact?: string, handler: ServerRouteHandler }[] = [];
|
||||||
private _activeSockets = new Set<import('net').Socket>();
|
private _activeSockets = new Set<import('net').Socket>();
|
||||||
constructor() {
|
constructor(address: string = '') {
|
||||||
this._urlPrefix = '';
|
this._urlPrefix = address;
|
||||||
this._server = http.createServer(this._onRequest.bind(this));
|
this._server = http.createServer(this._onRequest.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,7 +52,8 @@ export class HttpServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async start(port?: number): Promise<string> {
|
async start(port?: number): Promise<string> {
|
||||||
assert(!this._urlPrefix, 'server already started');
|
assert(!this._started, 'server already started');
|
||||||
|
this._started = true;
|
||||||
this._server.on('connection', socket => {
|
this._server.on('connection', socket => {
|
||||||
this._activeSockets.add(socket);
|
this._activeSockets.add(socket);
|
||||||
socket.once('close', () => this._activeSockets.delete(socket));
|
socket.once('close', () => this._activeSockets.delete(socket));
|
||||||
@ -59,12 +61,14 @@ export class HttpServer {
|
|||||||
this._server.listen(port);
|
this._server.listen(port);
|
||||||
await new Promise(cb => this._server!.once('listening', cb));
|
await new Promise(cb => this._server!.once('listening', cb));
|
||||||
const address = this._server.address();
|
const address = this._server.address();
|
||||||
if (typeof address === 'string') {
|
assert(address, 'Could not bind server socket');
|
||||||
this._urlPrefix = address;
|
if (!this._urlPrefix) {
|
||||||
} else {
|
if (typeof address === 'string') {
|
||||||
assert(address, 'Could not bind server socket');
|
this._urlPrefix = address;
|
||||||
this._port = address.port;
|
} else {
|
||||||
this._urlPrefix = `http://127.0.0.1:${address.port}`;
|
this._port = address.port;
|
||||||
|
this._urlPrefix = `http://127.0.0.1:${address.port}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return this._urlPrefix;
|
return this._urlPrefix;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user