From 5c70fe074e9f58125f5cdc50d49c0cb9066fc88a Mon Sep 17 00:00:00 2001 From: DudaGod Date: Mon, 5 Apr 2021 15:37:56 +0300 Subject: [PATCH] fix: reuse session caps in worker from master It is necessary to correctly define available protocols of session inside worker --- lib/browser/browser.js | 12 +- lib/browser/existing-browser.js | 4 +- lib/runner/test-runner/regular-test-runner.js | 1 + lib/worker/runner/browser-agent.js | 9 +- lib/worker/runner/browser-pool.js | 4 +- lib/worker/runner/index.js | 4 +- lib/worker/runner/test-runner/index.js | 4 +- test/lib/browser/existing-browser.js | 34 ++-- .../runner/test-runner/regular-test-runner.js | 20 ++- test/lib/worker/runner/browser-agent.js | 28 +++- test/lib/worker/runner/browser-pool.js | 155 +++++++++--------- test/lib/worker/runner/index.js | 7 +- test/lib/worker/runner/test-runner/index.js | 7 +- 13 files changed, 162 insertions(+), 127 deletions(-) diff --git a/lib/browser/browser.js b/lib/browser/browser.js index e27bed294..a1787c13d 100644 --- a/lib/browser/browser.js +++ b/lib/browser/browser.js @@ -35,8 +35,8 @@ module.exports = class Browser { this._addCommands(); } - async attach(sessionId) { - this._session = await this._attachSession(sessionId); + async attach(sessionId, sessionCaps) { + this._session = await this._attachSession(sessionId, sessionCaps); this._addCommands(); } @@ -59,12 +59,12 @@ module.exports = class Browser { return webdriverio.remote(sessionOpts); } - _attachSession(sessionId) { + _attachSession(sessionId, sessionCaps) { const sessionOpts = this._getSessionOpts({isAttach: true}); // TODO: remove after - https://github.com/webdriverio/webdriverio/issues/6554 const detectedSessionEnvFlags = sessionEnvironmentDetector({ - capabilities: sessionOpts.capabilities, + capabilities: sessionCaps, requestedCapabilities: sessionOpts.capabilities }); @@ -176,4 +176,8 @@ module.exports = class Browser { get state() { return this._state; } + + get capabilities() { + return this.publicAPI.capabilities; + } }; diff --git a/lib/browser/existing-browser.js b/lib/browser/existing-browser.js index c46781c3c..0fc643045 100644 --- a/lib/browser/existing-browser.js +++ b/lib/browser/existing-browser.js @@ -79,8 +79,8 @@ module.exports = class ExistingBrowser extends Browser { return this._config.baseUrl ? url.resolve(this._config.baseUrl, uri) : uri; } - async init(sessionId, calibrator) { - await super.attach(sessionId); + async init({sessionId, sessionCaps} = {}, calibrator) { + await super.attach(sessionId, sessionCaps); try { this.config.prepareBrowser && this.config.prepareBrowser(this.publicAPI); diff --git a/lib/runner/test-runner/regular-test-runner.js b/lib/runner/test-runner/regular-test-runner.js index 743bf68c5..e95385895 100644 --- a/lib/runner/test-runner/regular-test-runner.js +++ b/lib/runner/test-runner/regular-test-runner.js @@ -62,6 +62,7 @@ module.exports = class RegularTestRunner extends Runner { browserId: this._browser.id, browserVersion: this._browser.version, sessionId: this._browser.sessionId, + sessionCaps: this._browser.capabilities, file: this._test.file } ); diff --git a/lib/worker/runner/browser-agent.js b/lib/worker/runner/browser-agent.js index 239ecf9d4..7517dbb01 100644 --- a/lib/worker/runner/browser-agent.js +++ b/lib/worker/runner/browser-agent.js @@ -12,8 +12,13 @@ module.exports = class BrowserAgent { this._pool = pool; } - getBrowser(sessionId) { - return this._pool.getBrowser(this.browserId, this.browserVersion, sessionId); + getBrowser(sessionId, sessionCaps) { + return this._pool.getBrowser({ + browserId: this.browserId, + browserVersion: this.browserVersion, + sessionId, + sessionCaps + }); } freeBrowser(browser) { diff --git a/lib/worker/runner/browser-pool.js b/lib/worker/runner/browser-pool.js index fce8c389a..52010dd38 100644 --- a/lib/worker/runner/browser-pool.js +++ b/lib/worker/runner/browser-pool.js @@ -18,7 +18,7 @@ module.exports = class BrowserPool { this._calibrator = new Calibrator(); } - async getBrowser(browserId, browserVersion, sessionId) { + async getBrowser({browserId, browserVersion, sessionId, sessionCaps}) { this._browsers[browserId] = this._browsers[browserId] || []; let browser = _.find(this._browsers[browserId], (browser) => { @@ -33,7 +33,7 @@ module.exports = class BrowserPool { } browser = Browser.create(this._config, browserId, browserVersion, this._emitter); - await browser.init(sessionId, this._calibrator); + await browser.init({sessionId, sessionCaps}, this._calibrator); this._browsers[browserId].push(browser); diff --git a/lib/worker/runner/index.js b/lib/worker/runner/index.js index 749d06991..75edb9350 100644 --- a/lib/worker/runner/index.js +++ b/lib/worker/runner/index.js @@ -27,12 +27,12 @@ module.exports = class Runner extends AsyncEmitter { ]); } - runTest(fullTitle, {browserId, browserVersion, file, sessionId}) { + runTest(fullTitle, {browserId, browserVersion, file, sessionId, sessionCaps}) { const tests = this._testParser.parse({file, browserId}); const test = tests.find((t) => t.fullTitle() === fullTitle); const browserAgent = BrowserAgent.create(browserId, browserVersion, this._browserPool); const runner = TestRunner.create(test, this._config.forBrowser(browserId), browserAgent); - return runner.run({sessionId}); + return runner.run({sessionId, sessionCaps}); } }; diff --git a/lib/worker/runner/test-runner/index.js b/lib/worker/runner/test-runner/index.js index f90185044..df377796f 100644 --- a/lib/worker/runner/test-runner/index.js +++ b/lib/worker/runner/test-runner/index.js @@ -23,14 +23,14 @@ module.exports = class TestRunner { this._browserAgent = browserAgent; } - async run({sessionId}) { + async run({sessionId, sessionCaps}) { const test = this._test; const hermioneCtx = test.hermioneCtx || {}; let browser; try { - browser = await this._browserAgent.getBrowser(sessionId); + browser = await this._browserAgent.getBrowser(sessionId, sessionCaps); } catch (e) { throw Object.assign(e, {hermioneCtx}); } diff --git a/test/lib/browser/existing-browser.js b/test/lib/browser/existing-browser.js index fb67fe813..bb6b8a005 100644 --- a/test/lib/browser/existing-browser.js +++ b/test/lib/browser/existing-browser.js @@ -75,12 +75,16 @@ describe('ExistingBrowser', () => { describe('init', () => { it('should attach to browser with detected session environment flags', async () => { const desiredCapabilities = {browserName: 'yabro'}; - const detectedSessionEnvFlags = {isW3C: false, isChrome: false, isMobile: false}; + const detectedSessionEnvFlags = {isW3C: false, isMobile: false}; - await mkBrowser_({desiredCapabilities}).init(); + await mkBrowser_({desiredCapabilities}).init({ + sessionCaps: { + 'goog:chromeOptions': {} + } + }); assert.calledOnce(webdriverio.attach); - assert.calledWithMatch(webdriverio.attach, detectedSessionEnvFlags); + assert.calledWithMatch(webdriverio.attach, {...detectedSessionEnvFlags, isChrome: true}); }); it('should attach to browser with session environment flags from config', async () => { @@ -300,7 +304,7 @@ describe('ExistingBrowser', () => { }); it('should attach a browser to a provided session', async () => { - const browser = await mkBrowser_().init('100-500'); + const browser = await mkBrowser_().init({sessionId: '100-500'}); assert.equal(browser.sessionId, '100-500'); }); @@ -347,19 +351,19 @@ describe('ExistingBrowser', () => { it('should perform calibration if `calibrate` is turn on', async () => { calibrator.calibrate.withArgs(sinon.match.instanceOf(Browser)).resolves({foo: 'bar'}); - await mkBrowser_({calibrate: true}).init(null, calibrator); + await mkBrowser_({calibrate: true}).init({}, calibrator); assert.calledOnceWith(Camera.prototype.calibrate, {foo: 'bar'}); }); it('should not perform calibration if `calibrate` is turn off', async () => { - await mkBrowser_({calibrate: false}).init(null, calibrator); + await mkBrowser_({calibrate: false}).init({}, calibrator); assert.notCalled(Camera.prototype.calibrate); }); - it('should perform calibration after attaching of a session id', async () => { - await mkBrowser_({calibrate: true}).init('100-500', calibrator); + it('should perform calibration after attaching of a session', async () => { + await mkBrowser_({calibrate: true}).init({sessionId: '100-500'}, calibrator); const browser = calibrator.calibrate.lastCall.args[0]; assert.equal(browser.sessionId, '100-500'); @@ -370,7 +374,7 @@ describe('ExistingBrowser', () => { const calibrator = sinon.createStubInstance(Calibrator); calibrator.calibrate.resolves({foo: 'bar'}); - const browser = await mkBrowser_({calibrate: true}).init(null, calibrator); + const browser = await mkBrowser_({calibrate: true}).init({}, calibrator); assert.calledOnceWith(clientBridge.build, browser, {calibration: {foo: 'bar'}}); }); @@ -484,20 +488,18 @@ describe('ExistingBrowser', () => { }); }); - it('should extend options by calibration results', () => { + it('should extend options by calibration results', async () => { const clientBridge = stubClientBridge_(); const calibrator = sinon.createStubInstance(Calibrator); calibrator.calibrate.resolves({usePixelRatio: false}); const browser = mkBrowser_({calibrate: true}); - return browser.init(null, calibrator) - .then(() => browser.prepareScreenshot()) - .then(() => { - const opts = clientBridge.call.lastCall.args[1][1]; + await browser.init({}, calibrator); + await browser.prepareScreenshot(); - assert.propertyVal(opts, 'usePixelRatio', false); - }); + const opts = clientBridge.call.lastCall.args[1][1]; + assert.propertyVal(opts, 'usePixelRatio', false); }); it('should use pixel ratio by default if calibration was not met', () => { diff --git a/test/lib/runner/test-runner/regular-test-runner.js b/test/lib/runner/test-runner/regular-test-runner.js index 8feddc0b7..f5d7dbe56 100644 --- a/test/lib/runner/test-runner/regular-test-runner.js +++ b/test/lib/runner/test-runner/regular-test-runner.js @@ -45,14 +45,16 @@ describe('runner/test-runner/regular-test-runner', () => { }; const stubBrowser_ = (opts = {}) => { - return { - id: opts.id || 'default-id', - state: opts.state || {isBroken: false}, - sessionId: opts.sessionId || 'default-session-id', + return _.defaults(opts, { + id: 'default-id', + version: 'default-version', + capabilities: 'default-capabilities', + state: {isBroken: false}, + sessionId: 'default-session-id', applyState: sinon.stub().callsFake(function(state) { this.state = state; }) - }; + }); }; beforeEach(() => { @@ -73,7 +75,9 @@ describe('runner/test-runner/regular-test-runner', () => { it('should get browser before running test', async () => { BrowserAgent.prototype.getBrowser.resolves(stubBrowser_({ id: 'bro', - sessionId: '100500' + version: '1.0', + sessionId: '100500', + capabilities: {browserName: 'bro'} })); const workers = mkWorkers_(); @@ -81,7 +85,9 @@ describe('runner/test-runner/regular-test-runner', () => { assert.calledOnceWith(workers.runTest, sinon.match.any, sinon.match({ browserId: 'bro', - sessionId: '100500' + browserVersion: '1.0', + sessionId: '100500', + sessionCaps: {browserName: 'bro'} })); }); diff --git a/test/lib/worker/runner/browser-agent.js b/test/lib/worker/runner/browser-agent.js index 4beb3528c..8b20bd832 100644 --- a/test/lib/worker/runner/browser-agent.js +++ b/test/lib/worker/runner/browser-agent.js @@ -10,15 +10,31 @@ describe('worker/browser-agent', () => { describe('getBrowser', () => { it('should get a browser from the pool', () => { - browserPool.getBrowser.withArgs('bro-id', null, '100-500').returns({some: 'browser'}); - - assert.deepEqual(BrowserAgent.create('bro-id', null, browserPool).getBrowser('100-500'), {some: 'browser'}); + browserPool.getBrowser.withArgs({ + browserId: 'bro-id', + browserVersion: null, + sessionId: '100-500', + sessionCaps: 'some-caps' + }).returns({some: 'browser'}); + + assert.deepEqual( + BrowserAgent.create('bro-id', null, browserPool).getBrowser('100-500', 'some-caps'), + {some: 'browser'} + ); }); it('should get a browser with specific version from the pool', () => { - browserPool.getBrowser.withArgs('bro-id', '10.1', '100-500').returns({some: 'browser'}); - - assert.deepEqual(BrowserAgent.create('bro-id', '10.1', browserPool).getBrowser('100-500'), {some: 'browser'}); + browserPool.getBrowser.withArgs({ + browserId: 'bro-id', + browserVersion: '10.1', + sessionId: '100-500', + sessionCaps: 'some-caps' + }).returns({some: 'browser'}); + + assert.deepEqual( + BrowserAgent.create('bro-id', '10.1', browserPool).getBrowser('100-500', 'some-caps'), + {some: 'browser'} + ); }); }); diff --git a/test/lib/worker/runner/browser-pool.js b/test/lib/worker/runner/browser-pool.js index da51adb21..8c76581b2 100644 --- a/test/lib/worker/runner/browser-pool.js +++ b/test/lib/worker/runner/browser-pool.js @@ -56,7 +56,7 @@ describe('worker/browser-pool', () => { const browser = stubBrowser({browserId: 'bro-id'}); Browser.create.withArgs(config, 'bro-id', undefined, emitter).returns(browser); - await browserPool.getBrowser('bro-id'); + await browserPool.getBrowser({browserId: 'bro-id'}); assert.calledOnceWith(Browser.create, config, 'bro-id', undefined, emitter); }); @@ -68,7 +68,7 @@ describe('worker/browser-pool', () => { const browser = stubBrowser({browserId: 'bro-id'}); Browser.create.withArgs(config, 'bro-id', '10.1', emitter).returns(browser); - await browserPool.getBrowser('bro-id', '10.1'); + await browserPool.getBrowser({browserId: 'bro-id', browserVersion: '10.1'}); assert.calledOnceWith(Browser.create, config, 'bro-id', '10.1', emitter); }); @@ -80,7 +80,7 @@ describe('worker/browser-pool', () => { Browser.create.withArgs(config, 'bro-id').returns(browser); - return assert.becomes(browserPool.getBrowser('bro-id'), browser); + return assert.becomes(browserPool.getBrowser({browserId: 'bro-id'}), browser); }); it('should create a new browser with specific version if there are no free browsers in a cache', () => { @@ -90,19 +90,26 @@ describe('worker/browser-pool', () => { Browser.create.withArgs(config, 'bro-id', '10.1').returns(browser); - return assert.becomes(browserPool.getBrowser('bro-id', '10.1'), browser); + return assert.becomes(browserPool.getBrowser({browserId: 'bro-id', browserVersion: '10.1'}), browser); }); - it('should init a new created browser if there are no free browsers in a cache', () => { + it('should init a new created browser if there are no free browsers in a cache', async () => { const browser = stubBrowser({browserId: 'bro-id'}); Browser.create.returns(browser); - return createPool().getBrowser('bro-id', null, '100-500') - .then(() => assert.calledOnceWith(browser.init, '100-500', sinon.match.instanceOf(Calibrator))); + await createPool().getBrowser({ + browserId: 'bro-id', sessionId: '100-500', sessionCaps: 'some-caps' + }); + + assert.calledOnceWith( + browser.init, + {sessionId: '100-500', sessionCaps: 'some-caps'}, + sinon.match.instanceOf(Calibrator) + ); }); - it('should emit "NEW_BROWSER" event on creating of a browser', () => { + it('should emit "NEW_BROWSER" event on creating of a browser', async () => { const emitter = new EventEmitter(); const onNewBrowser = sandbox.spy().named('onNewBrowser'); const browserPool = createPool({emitter}); @@ -111,61 +118,55 @@ describe('worker/browser-pool', () => { Browser.create.returns(stubBrowser({id: 'bro-id', publicAPI: {some: 'api'}})); - return browserPool.getBrowser('bro-id', '10.1') - .then(() => assert.calledOnceWith(onNewBrowser, {some: 'api'}, {browserId: 'bro-id', browserVersion: '10.1'})); + await browserPool.getBrowser({browserId: 'bro-id', browserVersion: '10.1'}); + + assert.calledOnceWith(onNewBrowser, {some: 'api'}, {browserId: 'bro-id', browserVersion: '10.1'}); }); - it('should not create a new browser if there is a free browser in a cache', () => { + it('should not create a new browser if there is a free browser in a cache', async () => { const browserPool = createPool(); Browser.create.returns(stubBrowser()); - return browserPool.getBrowser('bro-id', null, '100-500') - .then((browser) => { - browserPool.freeBrowser(browser); - Browser.create.resetHistory(); + const browser = await browserPool.getBrowser({browserId: 'bro-id', sessionId: '100-500'}); + browserPool.freeBrowser(browser); + Browser.create.resetHistory(); - return browserPool.getBrowser('bro-id', null, '500-100') - .then((anotherBrowser) => { - assert.deepEqual(browser, anotherBrowser); - assert.notCalled(Browser.create); - }); - }); + const anotherBrowser = await browserPool.getBrowser({browserId: 'bro-id', sessionsId: '500-100'}); + assert.deepEqual(browser, anotherBrowser); + assert.notCalled(Browser.create); }); - it('should not create a new browser if there is a free browser in a cache with same version', () => { + it('should not create a new browser if there is a free browser in a cache with same version', async () => { const browserPool = createPool(); - Browser.create.returns(stubBrowser({version: '1.1'})); - return browserPool.getBrowser('bro-id', '1.1', '100-500') - .then((browser) => { - browserPool.freeBrowser(browser); - Browser.create.resetHistory(); + const browser = await browserPool.getBrowser({ + browserId: 'bro-id', browserVersion: '1.1', sessionId: '100-500' + }); + browserPool.freeBrowser(browser); + Browser.create.resetHistory(); - return browserPool.getBrowser('bro-id', '1.1', '500-100') - .then((anotherBrowser) => { - assert.deepEqual(browser, anotherBrowser); - assert.notCalled(Browser.create); - }); - }); + const anotherBrowser = await browserPool.getBrowser({ + browserId: 'bro-id', browserVersion: '1.1', sessionId: '500-100' + }); + assert.deepEqual(browser, anotherBrowser); + assert.notCalled(Browser.create); }); - it('should reinit a given session to a free browser in a cache', () => { + it('should reinit a given session to a free browser in a cache', async () => { const browserPool = createPool(); Browser.create.returns(stubBrowser()); - return browserPool.getBrowser('bro-id', null, '100-500') - .then((browser) => { - browserPool.freeBrowser(browser); + const browser = await browserPool.getBrowser({browserId: 'bro-id', sessionId: '100-500'}); + browserPool.freeBrowser(browser); - return browserPool.getBrowser('bro-id', null, '500-100') - .then((anotherBrowser) => assert.calledOnceWith(anotherBrowser.reinit, '500-100')); - }); + const anotherBrowser = await browserPool.getBrowser({browserId: 'bro-id', sessionId: '500-100'}); + assert.calledOnceWith(anotherBrowser.reinit, '500-100'); }); - it('should not emit "NEW_BROWSER" event on getting of a free browser from a cache', () => { + it('should not emit "NEW_BROWSER" event on getting of a free browser from a cache', async () => { const emitter = new EventEmitter(); const onNewBrowser = sandbox.spy().named('onNewBrowser'); const browserPool = createPool({emitter}); @@ -174,15 +175,13 @@ describe('worker/browser-pool', () => { emitter.on(RunnerEvents.NEW_BROWSER, onNewBrowser); - return browserPool.getBrowser('bro-id') - .then((browser) => { - browserPool.freeBrowser(browser); + const browser = await browserPool.getBrowser({browserId: 'bro-id'}); + browserPool.freeBrowser(browser); - onNewBrowser.reset(); + onNewBrowser.reset(); - return browserPool.getBrowser('bro-id') - .then(() => assert.notCalled(onNewBrowser)); - }); + await browserPool.getBrowser({browserId: 'bro-id'}); + assert.notCalled(onNewBrowser); }); describe('getting of browser fails', () => { @@ -193,7 +192,7 @@ describe('worker/browser-pool', () => { it('should be rejected if instance of browser was not created', () => { Browser.create.throws(new Error('foo bar')); - return assert.isRejected(createPool().getBrowser(), /foo bar/); + return assert.isRejected(createPool().getBrowser({}), /foo bar/); }); describe('init fails', () => { @@ -209,7 +208,7 @@ describe('worker/browser-pool', () => { it('should mark browser as broken', async () => { const browser = stubBrowserWhichRejectsOnInit({id: 'bro-id'}); - await createPool().getBrowser('bro-id').catch((e) => e); + await createPool().getBrowser({browserId: 'bro-id'}).catch((e) => e); assert.calledOnceWith(browser.markAsBroken); }); @@ -217,7 +216,7 @@ describe('worker/browser-pool', () => { it('should extend browser with session id', async () => { const browser = stubBrowserWhichRejectsOnInit({id: 'bro-id'}); - await createPool().getBrowser('bro-id', null, '100500').catch((e) => e); + await createPool().getBrowser({browserId: 'bro-id', sessionId: '100500'}).catch((e) => e); assert.equal(browser.sessionId, '100500'); }); @@ -225,7 +224,9 @@ describe('worker/browser-pool', () => { it('should extend browser with session id and browser version', async () => { const browser = stubBrowserWhichRejectsOnInit({id: 'bro-id', version: '10.1'}); - await createPool().getBrowser('bro-id', '10.1', '100500').catch((e) => e); + await createPool() + .getBrowser({browserId: 'bro-id', browserVersion: '10.1', sessionId: '100500'}) + .catch((e) => e); assert.equal(browser.version, '10.1'); }); @@ -233,7 +234,7 @@ describe('worker/browser-pool', () => { it('should free browser', async () => { const browser = stubBrowserWhichRejectsOnInit({id: 'bro-id'}); - await createPool().getBrowser('bro-id').catch((e) => e); + await createPool().getBrowser({browserId: 'bro-id'}).catch((e) => e); assert.calledOnceWith(BrowserPool.prototype.freeBrowser, browser); }); @@ -241,7 +242,7 @@ describe('worker/browser-pool', () => { it('should free browser after marking browser as broken', async () => { const browser = stubBrowserWhichRejectsOnInit({id: 'bro-id'}); - await createPool().getBrowser('bro-id').catch((e) => e); + await createPool().getBrowser({browserId: 'bro-id'}).catch((e) => e); assert.callOrder(browser.markAsBroken, BrowserPool.prototype.freeBrowser); }); @@ -249,7 +250,7 @@ describe('worker/browser-pool', () => { it('should be rejected with error extended by browser meta', async () => { stubBrowserWhichRejectsOnInit({id: 'bro-id', meta: {foo: 'bar'}}); - const error = await createPool().getBrowser('bro-id').catch((e) => e); + const error = await createPool().getBrowser({browserId: 'bro-id'}).catch((e) => e); assert.deepEqual(error.meta, {foo: 'bar'}); }); @@ -269,9 +270,9 @@ describe('worker/browser-pool', () => { const browser = stubBrowserWhichRejectsOnReinit({id: 'bro-id'}); const browserPool = createPool(); - await browserPool.getBrowser('bro-id'); + await browserPool.getBrowser({browserId: 'bro-id'}); await browserPool.freeBrowser(browser); - await browserPool.getBrowser('bro-id').catch((e) => e); + await browserPool.getBrowser({browserId: 'bro-id'}).catch((e) => e); assert.calledOnce(browser.markAsBroken); }); @@ -280,9 +281,9 @@ describe('worker/browser-pool', () => { const browser = stubBrowserWhichRejectsOnReinit({id: 'bro-id'}); const browserPool = createPool(); - await browserPool.getBrowser('bro-id'); + await browserPool.getBrowser({browserId: 'bro-id'}); await browserPool.freeBrowser(browser); - await browserPool.getBrowser('bro-id', null, '100500').catch((e) => e); + await browserPool.getBrowser({browserId: 'bro-id', sessionId: '100500'}).catch((e) => e); assert.equal(browser.sessionId, '100500'); }); @@ -291,10 +292,10 @@ describe('worker/browser-pool', () => { const browser = stubBrowserWhichRejectsOnReinit({id: 'bro-id'}); const browserPool = createPool(); - await browserPool.getBrowser('bro-id'); + await browserPool.getBrowser({browserId: 'bro-id'}); await browserPool.freeBrowser(browser); browserPool.freeBrowser.resetHistory(); - await browserPool.getBrowser('bro-id').catch((e) => e); + await browserPool.getBrowser({browserId: 'bro-id'}).catch((e) => e); assert.calledOnceWith(browserPool.freeBrowser, browser); }); @@ -303,10 +304,10 @@ describe('worker/browser-pool', () => { const browser = stubBrowserWhichRejectsOnReinit({id: 'bro-id'}); const browserPool = createPool(); - await browserPool.getBrowser('bro-id'); + await browserPool.getBrowser({browserId: 'bro-id'}); await browserPool.freeBrowser(browser); browserPool.freeBrowser.resetHistory(); - await browserPool.getBrowser('bro-id').catch((e) => e); + await browserPool.getBrowser({browserId: 'bro-id'}).catch((e) => e); assert.callOrder(browser.markAsBroken, browserPool.freeBrowser); }); @@ -315,9 +316,9 @@ describe('worker/browser-pool', () => { const browser = stubBrowserWhichRejectsOnReinit({id: 'bro-id', meta: {foo: 'bar'}}); const browserPool = createPool(); - await browserPool.getBrowser('bro-id'); + await browserPool.getBrowser({browserId: 'bro-id'}); await browserPool.freeBrowser(browser); - const error = await browserPool.getBrowser('bro-id').catch((e) => e); + const error = await browserPool.getBrowser({browserId: 'bro-id'}).catch((e) => e); assert.deepEqual(error.meta, {foo: 'bar'}); }); @@ -326,32 +327,28 @@ describe('worker/browser-pool', () => { }); describe('freeBrowser', () => { - it('should create a new browser if there is a broken browser in a cache', () => { + it('should create a new browser if there is a broken browser in a cache', async () => { const browserPool = createPool(); Browser.create.returns(stubBrowser({id: 'bro-id', state: {isBroken: true}})); - return browserPool.getBrowser('bro-id', '100-500') - .then((browser) => { - browserPool.freeBrowser(browser); - Browser.create.resetHistory(); + const browser = await browserPool.getBrowser({browserId: 'bro-id'}); + browserPool.freeBrowser(browser); + Browser.create.resetHistory(); - return browserPool.getBrowser('bro-id', '500-100') - .then(() => assert.calledOnce(Browser.create)); - }); + await browserPool.getBrowser({browserId: 'bro-id'}); + assert.calledOnce(Browser.create); }); - it('should set session id to "null"', () => { + it('should set session id to "null"', async () => { const browserPool = createPool(); Browser.create.returns(stubBrowser()); - return browserPool.getBrowser('bro-id', '100-500') - .then((browser) => { - browserPool.freeBrowser(browser); + const browser = await browserPool.getBrowser({browserId: 'bro-id'}); + browserPool.freeBrowser(browser); - assert.calledOnce(browser.quit); - }); + assert.calledOnce(browser.quit); }); it('should send test related freeBrowser event on browser release', async () => { diff --git a/test/lib/worker/runner/index.js b/test/lib/worker/runner/index.js index bf73b2f4d..15f70536e 100644 --- a/test/lib/worker/runner/index.js +++ b/test/lib/worker/runner/index.js @@ -129,9 +129,12 @@ describe('worker/runner', () => { const test = makeTest({fullTitle: () => 'some test'}); CachingTestParser.prototype.parse.returns([test]); - runner.runTest('some test', {sessionId: '100500'}); + runner.runTest('some test', {sessionId: '100500', sessionCaps: 'some-caps'}); - assert.calledOnceWith(TestRunner.prototype.run, {sessionId: '100500'}); + assert.calledOnceWith( + TestRunner.prototype.run, + {sessionId: '100500', sessionCaps: 'some-caps'} + ); }); }); }); diff --git a/test/lib/worker/runner/test-runner/index.js b/test/lib/worker/runner/test-runner/index.js index 6649d13e2..b17c971b1 100644 --- a/test/lib/worker/runner/test-runner/index.js +++ b/test/lib/worker/runner/test-runner/index.js @@ -72,16 +72,17 @@ describe('worker/runner/test-runner', () => { const test = opts.test || mkTest_(); const runner = opts.runner || mkRunner_({test}); const sessionId = opts.sessionId || 'default-sessionId'; + const sessionCaps = opts.sessionCaps || 'default-session-caps'; - return runner.run({sessionId}); + return runner.run({sessionId, sessionCaps}); }; it('should request browser for passed session', async () => { const runner = mkRunner_(); - await runner.run({sessionId: '100500'}); + await runner.run({sessionId: '100500', sessionCaps: 'some-caps'}); - assert.calledOnceWith(BrowserAgent.prototype.getBrowser, '100500'); + assert.calledOnceWithExactly(BrowserAgent.prototype.getBrowser, '100500', 'some-caps'); }); it('should create one time screenshooter', async () => {