UNPKG

wdio-docker-service

Version:

WebdriverIO service to start and stop docker container (for Selenium and more)

100 lines (81 loc) 2.38 kB
"use strict"; var _fsExtra = _interopRequireDefault(require("fs-extra")); var _docker = _interopRequireDefault(require("./utils/docker")); var _getFilePath = _interopRequireDefault(require("./utils/getFilePath")); var _logger = _interopRequireDefault(require("@wdio/logger")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const DEFAULT_LOG_FILENAME = 'docker-log.txt'; const Logger = (0, _logger.default)('wdio-docker-service'); class DockerLauncher { constructor() { this.logToStdout = false; this.docker = null; this.dockerLogs = null; } onPrepare(config) { this.logToStdout = config.logToStdout; this.dockerLogs = config.dockerLogs; this.watchMode = !!config.watch; Logger.setLevel(config.logLevel || 'info'); const { dockerOptions: { args, command, healthCheck, image, options }, onDockerReady, logLevel } = config; if (!image) { return Promise.reject(new Error('dockerOptions.image is a required property')); } this.docker = new _docker.default(image, { args, command, healthCheck, options, debug: logLevel && logLevel === 'debug' }, Logger); if (typeof this.dockerLogs === 'string') { const logFile = (0, _getFilePath.default)(this.dockerLogs, DEFAULT_LOG_FILENAME); this.docker.once('processCreated', () => { this._redirectLogStream(logFile); }); } return this.docker.run().then(() => { if (typeof onDockerReady === 'function') { onDockerReady(); } }).catch(err => { Logger.error(`Failed to run container: ${err.message}`); }); } onComplete() { // do not stop docker if in watch mode if (!this.watchMode && this.docker) { return this.docker.stop(); } } afterSession() { if (this.docker) { this.docker.stop(); } } /** * @param logFile * @private */ _redirectLogStream(logFile) { // ensure file & directory exists return _fsExtra.default.ensureFile(logFile).then(() => { const logStream = _fsExtra.default.createWriteStream(logFile, { flags: 'w' }); this.docker.process.stdout.pipe(logStream); this.docker.process.stderr.pipe(logStream); }); } } module.exports = DockerLauncher;