Skip to content

Commit

Permalink
Support the sessionOverride flag
Browse files Browse the repository at this point in the history
  • Loading branch information
imurchie committed Apr 29, 2016
1 parent 216264f commit 406a06a
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
17 changes: 17 additions & 0 deletions lib/appium.js
Expand Up @@ -96,11 +96,28 @@ class AppiumDriver extends BaseDriver {
for (let [cap, value] of _.toPairs(caps)) {
log.info(` ${cap}: ${util.inspect(value)}`);
}

// sessionOverride server flag check
// this will need to be re-thought when we go to multiple session support
if (this.args.sessionOverride && !!this.sessions && _.keys(this.sessions).length > 0) {
log.info('Session override is on. Deleting other sessions.');
for (let id of _.keys(this.sessions)) {
log.info(` Deleting session '${id}'`);
try {
await this.deleteSession(id);
} catch (ign) {
// the error has already been logged in AppiumDriver.deleteSession
// continue
}
}
}

try {
curSessions = this.curSessionDataForDriver(InnerDriver);
} catch (e) {
throw new errors.SessionNotCreatedError(e.message);
}

let d = new InnerDriver(this.args);
let [innerSessionId, dCaps] = await d.createSession(caps, reqCaps, curSessions);
this.sessions[innerSessionId] = d;
Expand Down
35 changes: 35 additions & 0 deletions test/driver-specs.js
Expand Up @@ -71,6 +71,41 @@ describe('AppiumDriver', () => {
await appium.createSession(BASE_CAPS);
mockFakeDriver.verify();
});
it.only('should kill all other sessions if sessionOverride is on', async () => {
appium.args.sessionOverride = true;

// mock three sessions that should be removed when the new one is created
let fakeDrivers = [new FakeDriver(),
new FakeDriver(),
new FakeDriver()];
let mockFakeDrivers = _.map(fakeDrivers, (fd) => {return sinon.mock(fd);});
mockFakeDrivers[0].expects('deleteSession')
.once();
mockFakeDrivers[1].expects('deleteSession')
.once()
.throws('Cannot shut down Android driver; it has already shut down');
mockFakeDrivers[2].expects('deleteSession')
.once();
appium.sessions['abc-123-xyz'] = fakeDrivers[0];
appium.sessions['xyz-321-abc'] = fakeDrivers[1];
appium.sessions['123-abc-xyz'] = fakeDrivers[2];

let sessions = await appium.getSessions();
sessions.should.have.length(3);

mockFakeDriver.expects("createSession")
.once().withExactArgs(BASE_CAPS, undefined, [])
.returns([1, BASE_CAPS]);
await appium.createSession(BASE_CAPS);

sessions = await appium.getSessions();
sessions.should.have.length(1);

for (let mfd of mockFakeDrivers) {
mfd.verify();
}
mockFakeDriver.verify();
});
});
describe('deleteSession', () => {
let appium
Expand Down

0 comments on commit 406a06a

Please sign in to comment.