testcafe
Version:
Automated browser testing for the modern web development stack.
98 lines • 13.2 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
const unstable_network_mode_1 = require("../browser/connection/unstable-network-mode");
const ACTIVE_SESSIONS_MAP = {};
class SessionController extends testcafe_hammerhead_1.Session {
constructor(uploadsRoot) {
super(uploadsRoot);
this.currentTestRun = null;
}
// Hammerhead payload
_getPayloadScript() {
return this.currentTestRun._getPayloadScript();
}
_getIframePayloadScript() {
return this.currentTestRun._getIframePayloadScript();
}
// Hammerhead handlers
handleServiceMessage(msg, serverInfo) {
if (this.currentTestRun[msg.cmd])
return super.handleServiceMessage.call(this.currentTestRun, msg, serverInfo);
return super.handleServiceMessage(msg, serverInfo);
}
getAuthCredentials() {
return this.currentTestRun.getAuthCredentials();
}
handleFileDownload() {
return this.currentTestRun.handleFileDownload();
}
handlePageError(ctx, err) {
return this.currentTestRun.handlePageError(ctx, err);
}
onPageRequest(ctx) {
const pendingStateSnapshot = this.pendingStateSnapshot;
super.onPageRequest(ctx);
if (pendingStateSnapshot && ctx.req.headers[unstable_network_mode_1.UNSTABLE_NETWORK_MODE_HEADER])
this.pendingStateSnapshot = pendingStateSnapshot;
}
// API
static getSession(testRun) {
let sessionInfo = ACTIVE_SESSIONS_MAP[testRun.browserConnection.id];
if (!sessionInfo || !testRun.disablePageReloads) {
if (sessionInfo && sessionInfo.url)
SessionController.closeSession(testRun);
let session = null;
if (testRun.test.isLegacy)
session = testRun;
else {
session = new SessionController(path_1.default.dirname(testRun.test.fixture.path));
session.currentTestRun = testRun;
}
sessionInfo = {
session: session,
proxy: null,
url: null
};
ACTIVE_SESSIONS_MAP[testRun.browserConnection.id] = sessionInfo;
}
else if (!testRun.test.isLegacy)
sessionInfo.session.currentTestRun = testRun;
return sessionInfo.session;
}
static getSessionUrl(testRun, proxy) {
let sessionInfo = ACTIVE_SESSIONS_MAP[testRun.browserConnection.id];
if (!sessionInfo || testRun.test.isLegacy) {
SessionController.getSession(testRun);
sessionInfo = ACTIVE_SESSIONS_MAP[testRun.browserConnection.id];
}
if (!sessionInfo.url) {
const pageUrl = testRun.test.pageUrl;
const externalProxyHost = testRun.opts.proxy;
let externalProxySettings = null;
if (externalProxyHost) {
externalProxySettings = {
url: externalProxyHost,
bypassRules: testRun.opts.proxyBypass
};
}
sessionInfo.proxy = proxy;
sessionInfo.url = proxy.openSession(pageUrl, sessionInfo.session, externalProxySettings);
}
return sessionInfo.url;
}
static closeSession(testRun) {
const sessionInfo = ACTIVE_SESSIONS_MAP[testRun.browserConnection.id];
if (!sessionInfo || !sessionInfo.url || !sessionInfo.proxy)
return;
sessionInfo.proxy.closeSession(sessionInfo.session);
delete ACTIVE_SESSIONS_MAP[testRun.browserConnection.id];
}
}
exports.default = SessionController;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QtcnVuL3Nlc3Npb24tY29udHJvbGxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdEQUF3QjtBQUN4Qiw2REFBOEM7QUFDOUMsdUZBQTJGO0FBRzNGLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBRS9CLE1BQXFCLGlCQUFrQixTQUFRLDZCQUFPO0lBQ2xELFlBQWEsV0FBVztRQUNwQixLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixpQkFBaUI7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFHRCxzQkFBc0I7SUFDdEIsb0JBQW9CLENBQUUsR0FBRyxFQUFFLFVBQVU7UUFDakMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDNUIsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRWpGLE9BQU8sS0FBSyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGtCQUFrQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUUs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RjtRQUVELE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBRSxPQUFPO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLO1lBQ3RELE9BQU87UUFFWCxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEQsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztDQUNKO0FBbkhELG9DQW1IQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgVU5TVEFCTEVfTkVUV09SS19NT0RFX0hFQURFUiB9IGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbi91bnN0YWJsZS1uZXR3b3JrLW1vZGUnO1xuXG5cbmNvbnN0IEFDVElWRV9TRVNTSU9OU19NQVAgPSB7fTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvbkNvbnRyb2xsZXIgZXh0ZW5kcyBTZXNzaW9uIHtcbiAgICBjb25zdHJ1Y3RvciAodXBsb2Fkc1Jvb3QpIHtcbiAgICAgICAgc3VwZXIodXBsb2Fkc1Jvb3QpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFRlc3RSdW4gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEhhbW1lcmhlYWQgcGF5bG9hZFxuICAgIF9nZXRQYXlsb2FkU2NyaXB0ICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRlc3RSdW4uX2dldFBheWxvYWRTY3JpcHQoKTtcbiAgICB9XG5cbiAgICBfZ2V0SWZyYW1lUGF5bG9hZFNjcmlwdCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUZXN0UnVuLl9nZXRJZnJhbWVQYXlsb2FkU2NyaXB0KCk7XG4gICAgfVxuXG5cbiAgICAvLyBIYW1tZXJoZWFkIGhhbmRsZXJzXG4gICAgaGFuZGxlU2VydmljZU1lc3NhZ2UgKG1zZywgc2VydmVySW5mbykge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VGVzdFJ1blttc2cuY21kXSlcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5oYW5kbGVTZXJ2aWNlTWVzc2FnZS5jYWxsKHRoaXMuY3VycmVudFRlc3RSdW4sIG1zZywgc2VydmVySW5mbyk7XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLmhhbmRsZVNlcnZpY2VNZXNzYWdlKG1zZywgc2VydmVySW5mbyk7XG4gICAgfVxuXG4gICAgZ2V0QXV0aENyZWRlbnRpYWxzICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRlc3RSdW4uZ2V0QXV0aENyZWRlbnRpYWxzKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRmlsZURvd25sb2FkICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRlc3RSdW4uaGFuZGxlRmlsZURvd25sb2FkKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlUGFnZUVycm9yIChjdHgsIGVycikge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVzdFJ1bi5oYW5kbGVQYWdlRXJyb3IoY3R4LCBlcnIpO1xuICAgIH1cblxuICAgIG9uUGFnZVJlcXVlc3QgKGN0eCkge1xuICAgICAgICBjb25zdCBwZW5kaW5nU3RhdGVTbmFwc2hvdCA9IHRoaXMucGVuZGluZ1N0YXRlU25hcHNob3Q7XG5cbiAgICAgICAgc3VwZXIub25QYWdlUmVxdWVzdChjdHgpO1xuXG4gICAgICAgIGlmIChwZW5kaW5nU3RhdGVTbmFwc2hvdCAmJiBjdHgucmVxLmhlYWRlcnNbVU5TVEFCTEVfTkVUV09SS19NT0RFX0hFQURFUl0pXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdTdGF0ZVNuYXBzaG90ID0gcGVuZGluZ1N0YXRlU25hcHNob3Q7XG4gICAgfVxuICAgIC8vIEFQSVxuICAgIHN0YXRpYyBnZXRTZXNzaW9uICh0ZXN0UnVuKSB7XG4gICAgICAgIGxldCBzZXNzaW9uSW5mbyA9IEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF07XG5cbiAgICAgICAgaWYgKCFzZXNzaW9uSW5mbyB8fCAhdGVzdFJ1bi5kaXNhYmxlUGFnZVJlbG9hZHMpIHtcbiAgICAgICAgICAgIGlmIChzZXNzaW9uSW5mbyAmJiBzZXNzaW9uSW5mby51cmwpXG4gICAgICAgICAgICAgICAgU2Vzc2lvbkNvbnRyb2xsZXIuY2xvc2VTZXNzaW9uKHRlc3RSdW4pO1xuXG4gICAgICAgICAgICBsZXQgc2Vzc2lvbiA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICh0ZXN0UnVuLnRlc3QuaXNMZWdhY3kpXG4gICAgICAgICAgICAgICAgc2Vzc2lvbiA9IHRlc3RSdW47XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uID0gbmV3IFNlc3Npb25Db250cm9sbGVyKHBhdGguZGlybmFtZSh0ZXN0UnVuLnRlc3QuZml4dHVyZS5wYXRoKSk7XG5cbiAgICAgICAgICAgICAgICBzZXNzaW9uLmN1cnJlbnRUZXN0UnVuID0gdGVzdFJ1bjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2Vzc2lvbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICAgICAgICAgICAgICBwcm94eTogICBudWxsLFxuICAgICAgICAgICAgICAgIHVybDogICAgIG51bGxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF0gPSBzZXNzaW9uSW5mbztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGVzdFJ1bi50ZXN0LmlzTGVnYWN5KVxuICAgICAgICAgICAgc2Vzc2lvbkluZm8uc2Vzc2lvbi5jdXJyZW50VGVzdFJ1biA9IHRlc3RSdW47XG5cbiAgICAgICAgcmV0dXJuIHNlc3Npb25JbmZvLnNlc3Npb247XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFNlc3Npb25VcmwgKHRlc3RSdW4sIHByb3h5KSB7XG4gICAgICAgIGxldCBzZXNzaW9uSW5mbyA9IEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF07XG5cbiAgICAgICAgaWYgKCFzZXNzaW9uSW5mbyB8fCB0ZXN0UnVuLnRlc3QuaXNMZWdhY3kpIHtcbiAgICAgICAgICAgIFNlc3Npb25Db250cm9sbGVyLmdldFNlc3Npb24odGVzdFJ1bik7XG5cbiAgICAgICAgICAgIHNlc3Npb25JbmZvID0gQUNUSVZFX1NFU1NJT05TX01BUFt0ZXN0UnVuLmJyb3dzZXJDb25uZWN0aW9uLmlkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2Vzc2lvbkluZm8udXJsKSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlVXJsICAgICAgICAgICAgID0gdGVzdFJ1bi50ZXN0LnBhZ2VVcmw7XG4gICAgICAgICAgICBjb25zdCBleHRlcm5hbFByb3h5SG9zdCAgID0gdGVzdFJ1bi5vcHRzLnByb3h5O1xuICAgICAgICAgICAgbGV0IGV4dGVybmFsUHJveHlTZXR0aW5ncyA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChleHRlcm5hbFByb3h5SG9zdCkge1xuICAgICAgICAgICAgICAgIGV4dGVybmFsUHJveHlTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgICAgICAgIGV4dGVybmFsUHJveHlIb3N0LFxuICAgICAgICAgICAgICAgICAgICBieXBhc3NSdWxlczogdGVzdFJ1bi5vcHRzLnByb3h5QnlwYXNzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2Vzc2lvbkluZm8ucHJveHkgPSBwcm94eTtcbiAgICAgICAgICAgIHNlc3Npb25JbmZvLnVybCAgID0gcHJveHkub3BlblNlc3Npb24ocGFnZVVybCwgc2Vzc2lvbkluZm8uc2Vzc2lvbiwgZXh0ZXJuYWxQcm94eVNldHRpbmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZXNzaW9uSW5mby51cmw7XG4gICAgfVxuXG4gICAgc3RhdGljIGNsb3NlU2Vzc2lvbiAodGVzdFJ1bikge1xuICAgICAgICBjb25zdCBzZXNzaW9uSW5mbyA9IEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF07XG5cbiAgICAgICAgaWYgKCFzZXNzaW9uSW5mbyB8fCAhc2Vzc2lvbkluZm8udXJsIHx8ICFzZXNzaW9uSW5mby5wcm94eSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBzZXNzaW9uSW5mby5wcm94eS5jbG9zZVNlc3Npb24oc2Vzc2lvbkluZm8uc2Vzc2lvbik7XG5cbiAgICAgICAgZGVsZXRlIEFDVElWRV9TRVNTSU9OU19NQVBbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF07XG4gICAgfVxufVxuXG4iXX0=