UNPKG

@shackijj/karma-cbt-launcher

Version:

Custom launcher for Karma that allows testing remotely through CrossBrowserTesting.

62 lines (55 loc) 2.11 kB
'use strict'; /* This code was originally taken and modified from Actano/Marcus Mennemeier's karma-cbt-launcher. The original code can be found at http://github.com/actano/karma-cbt-launcher */ const consoleLogger = require('./console-logger'); const cbtTunnel = require('./tunnel'); const activeSessions = {}; const waitingSessions = {}; const remoteHub = 'http://hub.crossbrowsertesting.com:80/wd/hub'; let log = consoleLogger('cbt-session'); module.exports = { activeSessions: activeSessions, setLogger: logger => { log = logger.create('cbt-session'); cbtTunnel.setLogger(logger); }, register: id => { if (!waitingSessions[id]) waitingSessions[id] = ''; }, create: async id => { log.debug('Starting session %s', id); if (activeSessions[id]) throw new Error(`Session ${id} already active`); delete waitingSessions[id]; activeSessions[id] = ''; try { await cbtTunnel.start(); } catch (err) { console.error(err); process.exit(1); } return { async stop() { if (!activeSessions[id]) throw new Error(`Session ${id} not active`); log.debug('Closing session %s', id); delete activeSessions[id]; if (Object.keys(activeSessions).length === 0 && Object.keys(waitingSessions).length === 0) { log.info('Last session, stopping tunnel'); await cbtTunnel.stop(); } }, setSeleniumId: seleniumId => { activeSessions[id] = seleniumId; }, configureBuilder(builder) { const caps = builder.usingServer(remoteHub).getCapabilities(); log.debug('Configuring selenium builder for %s', JSON.stringify(caps)); caps.set('username', cbtTunnel.username); caps.set('password', cbtTunnel.authkey); caps.set('tunnel_name', cbtTunnel.name); return builder; } }; } };