wdio-docker-service
Advanced tools
| import { expect } from 'chai'; | ||
| import path from 'path'; | ||
| import { stub, spy } from 'sinon'; | ||
| import Docker from '../../../src/utils/docker'; | ||
| import fs from 'fs-extra'; | ||
| import * as ChildProcess from '../../../src/utils/child-process'; | ||
| import Promise from 'bluebird'; | ||
| describe('Docker', function () { | ||
| describe('#constructor', function () { | ||
| context('when image argument is not provided', function () { | ||
| const tryToInstantiate = () => { | ||
| new Docker(); | ||
| }; | ||
| it('must throw an error', function () { | ||
| expect(tryToInstantiate).to.throw(); | ||
| }); | ||
| }); | ||
| context('when image argument is provided', function () { | ||
| context('when optional arguments are not provided', function () { | ||
| it('must use defaults', function () { | ||
| const docker = new Docker('my-image'); | ||
| const cidfile = path.join(process.cwd(), 'my_image.cid'); | ||
| expect(docker.args).to.eql(undefined); | ||
| expect(docker.cidfile).to.eql(cidfile); | ||
| expect(docker.command).to.eql(undefined); | ||
| expect(docker.debug).to.eql(false); | ||
| expect(docker.healthCheck).to.eql(undefined); | ||
| expect(docker.logger).to.eql(console); | ||
| expect(docker.process).to.eql(null); | ||
| expect(docker.options).to.eql({ | ||
| rm: true, | ||
| cidfile | ||
| }); | ||
| }); | ||
| }); | ||
| context('when debug argument is set', function () { | ||
| it('must set debug property', function () { | ||
| const docker = new Docker('my-image', { debug: true }); | ||
| expect(docker.debug).to.eql(true); | ||
| }); | ||
| }); | ||
| context('when docker options are set', function () { | ||
| it('must properly translate them into a docker run command', function () { | ||
| const docker = new Docker('my-image', { | ||
| options: { | ||
| d: true, | ||
| p: ['1234:1234'], | ||
| foo: 'bar' | ||
| } | ||
| }); | ||
| expect(docker.dockerRunCommand).to.eql(`docker run --cidfile ${ docker.cidfile } --rm -d -p 1234:1234 --foo bar my-image`); | ||
| }); | ||
| }); | ||
| context('when docker command argument is provided ', function () { | ||
| it('must place it after image name ', function () { | ||
| const docker = new Docker('my-image', { command: 'test' }); | ||
| expect(docker.dockerRunCommand).to.eql(`docker run --cidfile ${ docker.cidfile } --rm my-image test`); | ||
| }); | ||
| }); | ||
| context('when docker args argument is provided ', function () { | ||
| it('must place it after image name ', function () { | ||
| const docker = new Docker('my-image', { args: '-foo' }); | ||
| expect(docker.dockerRunCommand).to.eql(`docker run --cidfile ${ docker.cidfile } --rm my-image -foo`); | ||
| }); | ||
| }); | ||
| context('when both command and args arguments are provided', function () { | ||
| it('must place both of them after image name where command is followed by args', function () { | ||
| const docker = new Docker('my-image', { command: 'test', args: '-foo' }); | ||
| expect(docker.dockerRunCommand).to.eql(`docker run --cidfile ${ docker.cidfile } --rm my-image test -foo`); | ||
| }); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('#stop', function () { | ||
| const killSpy = new spy(); | ||
| let mockProcess = { | ||
| kill: killSpy | ||
| }; | ||
| before(function () { | ||
| stub(Docker.prototype, '_removeStaleContainer').returns(Promise.resolve()); | ||
| }); | ||
| after(function () { | ||
| Docker.prototype._removeStaleContainer.restore(); | ||
| }); | ||
| it('must must process', function () { | ||
| const docker = new Docker('my-image'); | ||
| docker.process = mockProcess; | ||
| return docker.stop().then(() => { | ||
| expect(killSpy.called).to.eql(true); | ||
| expect(docker.process).to.eql(null); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('#run', function () { | ||
| const mockProcess = { | ||
| stdout: { | ||
| on: new spy() | ||
| }, | ||
| stderr: { | ||
| on: new spy() | ||
| }, | ||
| kill: new spy() | ||
| }; | ||
| beforeEach(function () { | ||
| stub(ChildProcess, 'runProcess').returns(Promise.resolve(mockProcess)); | ||
| stub(Docker.prototype, '_removeStaleContainer').returns(Promise.resolve()); | ||
| stub(Docker.prototype, '_reportWhenDockerIsRunning').returns(Promise.resolve()); | ||
| }); | ||
| afterEach(function () { | ||
| ChildProcess.runProcess.restore(); | ||
| Docker.prototype._removeStaleContainer.restore(); | ||
| Docker.prototype._reportWhenDockerIsRunning.restore(); | ||
| }); | ||
| context('when image is not yet pulled (first time)', function () { | ||
| before(function () { | ||
| stub(Docker.prototype, '_isImagePresent').returns(Promise.reject()); | ||
| stub(Docker.prototype, '_pullImage').returns(Promise.resolve()); | ||
| }); | ||
| after(function () { | ||
| Docker.prototype._isImagePresent.restore(); | ||
| Docker.prototype._pullImage.restore(); | ||
| }); | ||
| it('must attempt to pull image', function () { | ||
| const docker = new Docker('my-image'); | ||
| return docker.run().then(() => { | ||
| expect(Docker.prototype._pullImage.called).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| context('when image is already pulled', function () { | ||
| before(function () { | ||
| stub(Docker.prototype, '_isImagePresent').returns(Promise.resolve()); | ||
| spy(Docker.prototype, '_pullImage'); | ||
| }); | ||
| after(function () { | ||
| Docker.prototype._isImagePresent.restore(); | ||
| Docker.prototype._pullImage.restore(); | ||
| }); | ||
| it('must just run the command', function () { | ||
| const docker = new Docker('my-image'); | ||
| return docker.run().then(() => { | ||
| expect(Docker.prototype._pullImage.called).to.eql(false); | ||
| expect(ChildProcess.runProcess.called).to.eql(true); | ||
| }); | ||
| }); | ||
| it('must emit processCreated event', function () { | ||
| const processCreatedSpy = new spy(); | ||
| const docker = new Docker('my-image'); | ||
| docker.on('processCreated', processCreatedSpy); | ||
| return docker.run().then(() => { | ||
| expect(ChildProcess.runProcess.called).to.eql(true); | ||
| expect(processCreatedSpy.called).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| context('when running with debug flag enabled', function () { | ||
| const mockLogger = { | ||
| log: spy(), | ||
| info: spy(), | ||
| warn: spy(), | ||
| error: spy() | ||
| }; | ||
| before(function () { | ||
| stub(Docker.prototype, '_isImagePresent').returns(Promise.resolve()); | ||
| }); | ||
| after(function () { | ||
| Docker.prototype._isImagePresent.restore(); | ||
| }); | ||
| it('must log docker run command', function () { | ||
| const docker = new Docker('my-image', { debug: true }, mockLogger); | ||
| return docker.run().then(() => { | ||
| expect(mockLogger.log.calledWith(`Docker command: docker run --cidfile ${ docker.cidfile } --rm my-image`)).to.eql(true); | ||
| }); | ||
| }); | ||
| it('must listen to stdout data event', function () { | ||
| const docker = new Docker('my-image', { debug: true }, mockLogger); | ||
| return docker.run().then((process) => { | ||
| expect(process.stdout.on.called).to.eql(true); | ||
| }); | ||
| }); | ||
| it('must listen to stderr data event', function () { | ||
| const docker = new Docker('my-image', { debug: true }, mockLogger); | ||
| return docker.run().then((process) => { | ||
| expect(process.stderr.on.called).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('#stopContainer', function () { | ||
| before(function () { | ||
| stub(ChildProcess, 'runCommand').returns(Promise.resolve()); | ||
| }); | ||
| after(function () { | ||
| ChildProcess.runCommand.restore(); | ||
| }); | ||
| it('must call docker command to stop running conrainer', function () { | ||
| return Docker.stopContainer('123').then(() => { | ||
| expect(ChildProcess.runCommand.calledWith('docker stop 123')).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('#removeContainer', function () { | ||
| before(function () { | ||
| stub(ChildProcess, 'runCommand').returns(Promise.resolve()); | ||
| }); | ||
| after(function () { | ||
| ChildProcess.runCommand.restore(); | ||
| }); | ||
| it('must call docker command to stop running conrainer', function () { | ||
| return Docker.removeContainer('123').then(() => { | ||
| expect(ChildProcess.runCommand.calledWith('docker rm 123')).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('#serializeOption', function () { | ||
| describe('when a single letter option', function () { | ||
| context('and is a boolean', function () { | ||
| it('must serialize correctly', function () { | ||
| const option = Docker.serializeOption('d', true); | ||
| expect(option).to.eql('-d'); | ||
| }); | ||
| }); | ||
| context('and is a string', function () { | ||
| it('must serialize correctly', function () { | ||
| const option = Docker.serializeOption('d', 'boo'); | ||
| expect(option).to.eql('-d boo'); | ||
| }); | ||
| }); | ||
| context('and is an array', function () { | ||
| it('must serialize correctly', function () { | ||
| const option = Docker.serializeOption('d', ['foo=bar', 'bar=foo']); | ||
| expect(option).to.eql(['-d foo=bar', '-d bar=foo']); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('when multiple-letter option', function () { | ||
| context('and is a boolean', function () { | ||
| it('must serialize correctly', function () { | ||
| const option = Docker.serializeOption('foo', true); | ||
| expect(option).to.eql('--foo'); | ||
| }); | ||
| }); | ||
| context('and is a string', function () { | ||
| it('must serialize correctly', function () { | ||
| const option = Docker.serializeOption('foo', 'boo'); | ||
| expect(option).to.eql('--foo boo'); | ||
| }); | ||
| }); | ||
| context('and is an array', function () { | ||
| it('must serialize correctly', function () { | ||
| const option = Docker.serializeOption('doo', ['foo=bar', 'bar=foo']); | ||
| expect(option).to.eql(['--doo foo=bar', '--doo bar=foo']); | ||
| }); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('#serializeOptions', function () { | ||
| it('must return an array of serialized options', function () { | ||
| const options = { | ||
| d: true, | ||
| foo: true, | ||
| boo: 'bop', | ||
| e: ['123=345', '678=901'] | ||
| }; | ||
| expect(Docker.serializeOptions(options)).to.deep.eql([ | ||
| '-d', | ||
| '--foo', | ||
| '--boo bop', | ||
| '-e 123=345', | ||
| '-e 678=901' | ||
| ]); | ||
| }); | ||
| }); | ||
| describe('#_removeStaleContainer', function () { | ||
| beforeEach(function () { | ||
| stub(fs, 'remove').returns(Promise.resolve()); | ||
| stub(Docker, 'stopContainer').returns(Promise.resolve()); | ||
| stub(Docker, 'removeContainer').returns(Promise.resolve()); | ||
| }); | ||
| afterEach(function () { | ||
| fs.remove.restore(); | ||
| Docker.stopContainer.restore(); | ||
| Docker.removeContainer.restore(); | ||
| }); | ||
| context('when cid file exists', function () { | ||
| before(function () { | ||
| stub(fs, 'readFile').returns(Promise.resolve('123')); | ||
| }); | ||
| after(function () { | ||
| fs.readFile.restore(); | ||
| }); | ||
| it('must remove stale container', function () { | ||
| const docker = new Docker('my-image'); | ||
| return docker._removeStaleContainer().then(() => { | ||
| expect(fs.readFile.calledWith(docker.cidfile)).to.eql(true); | ||
| expect(fs.remove.calledWith(docker.cidfile)).to.eql(true); | ||
| expect(Docker.stopContainer.calledWith('123')).to.eql(true); | ||
| expect(Docker.removeContainer.calledWith('123')).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| context('when cid file does not exist', function () { | ||
| before(function () { | ||
| stub(fs, 'readFile').returns(Promise.reject()); | ||
| }); | ||
| after(function () { | ||
| fs.readFile.restore(); | ||
| }); | ||
| it('must attempt to remove stale container', function () { | ||
| const docker = new Docker('my-image'); | ||
| return docker._removeStaleContainer().catch(() => { | ||
| expect(fs.readFile.calledWith(docker.cidfile)).to.eql(true); | ||
| expect(fs.remove.calledWith(docker.cidfile)).to.eql(true); | ||
| expect(Docker.stopContainer.calledWith('123')).to.eql(false); | ||
| expect(Docker.removeContainer.calledWith('123')).to.eql(false); | ||
| }); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('#_pullImage', function () { | ||
| before(function () { | ||
| stub(ChildProcess, 'runCommand').returns(Promise.resolve()); | ||
| }); | ||
| after(function () { | ||
| ChildProcess.runCommand.restore(); | ||
| }); | ||
| it('must call runCommand', function () { | ||
| const docker = new Docker('my-image'); | ||
| return docker._pullImage().then(() => { | ||
| expect(ChildProcess.runCommand.calledWith('docker pull my-image')).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('#_isImagePresent', function () { | ||
| before(function () { | ||
| stub(ChildProcess, 'runCommand').returns(Promise.resolve()); | ||
| }); | ||
| after(function () { | ||
| ChildProcess.runCommand.restore(); | ||
| }); | ||
| it('must call runCommand', function () { | ||
| const docker = new Docker('my-image'); | ||
| return docker._isImagePresent().then(() => { | ||
| expect(ChildProcess.runCommand.calledWith('docker image inspect my-image')).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('#_reportWhenDockerIsRunning', function () { | ||
| context('when healthCheck is not set', function () { | ||
| const pingDef = require('../../../src/utils/ping'); | ||
| before(function () { | ||
| stub(pingDef, 'default').returns(Promise.reject()); | ||
| spy(global, 'clearTimeout'); | ||
| }); | ||
| after(function () { | ||
| pingDef.default.restore(); | ||
| global.clearTimeout.restore(); | ||
| }); | ||
| it('must resolve promise right away', function () { | ||
| const docker = new Docker('my-image'); | ||
| return docker._reportWhenDockerIsRunning().then(() => { | ||
| expect(global.clearTimeout.called).to.eql(true); | ||
| expect(pingDef.default.called).to.eql(false); | ||
| }); | ||
| }); | ||
| }); | ||
| context('when healthCheck is provided', function () { | ||
| const pingDef = require('../../../src/utils/ping'); | ||
| before(function () { | ||
| stub(pingDef, 'default').returns(Promise.resolve()); | ||
| spy(global, 'clearTimeout'); | ||
| }); | ||
| after(function () { | ||
| pingDef.default.restore(); | ||
| global.clearTimeout.restore(); | ||
| }); | ||
| it('must Ping the healthCheck url', function () { | ||
| const docker = new Docker('my-image', { healthCheck: 'http://localhost:8080' }); | ||
| return docker._reportWhenDockerIsRunning().then(() => { | ||
| expect(global.clearTimeout.called).to.eql(true); | ||
| expect(pingDef.default.calledWith('http://localhost:8080')).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| context('when healthCheck is provided but is unreachable', function () { | ||
| const pingDef = require('../../../src/utils/ping'); | ||
| before(function () { | ||
| stub(pingDef, 'default').returns(Promise.reject()); | ||
| spy(global, 'clearTimeout'); | ||
| }); | ||
| after(function () { | ||
| pingDef.default.restore(); | ||
| global.clearTimeout.restore(); | ||
| }); | ||
| it('must attempt to ping healthCheck url and then exit', function () { | ||
| const docker = new Docker('my-image', { healthCheck: 'http://localhost:8080' }); | ||
| this.timeout(15000); | ||
| return docker._reportWhenDockerIsRunning().catch(() => { | ||
| expect(global.clearTimeout.called).to.eql(true); | ||
| expect(pingDef.default.calledWith('http://localhost:8080')).to.eql(true); | ||
| }); | ||
| }); | ||
| }); | ||
| }); | ||
| }); |
+269
-137
@@ -17,3 +17,32 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <component name="FileEditorManager"> | ||
| <leaf /> | ||
| <leaf> | ||
| <file leaf-file-name="dockerSpec.js" pinned="false" current-in-tab="true"> | ||
| <entry file="file://$PROJECT_DIR$/test/unit/utils/dockerSpec.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="280"> | ||
| <caret line="206" column="110" lean-forward="false" selection-start-line="206" selection-start-column="110" selection-end-line="206" selection-end-column="110" /> | ||
| <folding> | ||
| <element signature="e#0#30#0" expanded="true" /> | ||
| <element signature="e#3747#4408#0" expanded="false" /> | ||
| <element signature="e#5256#5924#0" expanded="false" /> | ||
| <element signature="e#5988#7164#0" expanded="false" /> | ||
| <element signature="e#8082#8324#0" expanded="false" /> | ||
| <element signature="e#8391#8633#0" expanded="false" /> | ||
| <element signature="e#8700#9169#0" expanded="false" /> | ||
| <element signature="e#9218#9687#0" expanded="false" /> | ||
| <element signature="e#9736#11624#0" expanded="false" /> | ||
| <element signature="e#11674#12150#0" expanded="false" /> | ||
| <element signature="e#12205#14280#0" expanded="false" /> | ||
| <element signature="e#14324#14811#0" expanded="false" /> | ||
| <element signature="e#14860#15361#0" expanded="false" /> | ||
| <element signature="e#15421#18057#0" expanded="false" /> | ||
| <element signature="e#15482#16223#0" expanded="false" /> | ||
| <element signature="e#16287#17097#0" expanded="false" /> | ||
| <element signature="e#17180#18049#0" expanded="false" /> | ||
| </folding> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| </file> | ||
| </leaf> | ||
| </component> | ||
@@ -42,2 +71,4 @@ <component name="FileTemplateManagerImpl"> | ||
| <find>"</find> | ||
| <find>Promise</find> | ||
| <find>--cidfile</find> | ||
| </findStrings> | ||
@@ -83,3 +114,2 @@ <replaceStrings> | ||
| <option value="$PROJECT_DIR$/test/integration/main.spec.js" /> | ||
| <option value="$PROJECT_DIR$/src/utils/child-process.js" /> | ||
| <option value="$PROJECT_DIR$/test/integration/wdio.conf.js" /> | ||
@@ -97,3 +127,2 @@ <option value="$PROJECT_DIR$/test/mocks/MockChildProcess.js" /> | ||
| <option value="$PROJECT_DIR$/test/unit/utils/deepMergeSpec.js" /> | ||
| <option value="$PROJECT_DIR$/src/utils/docker.js" /> | ||
| <option value="$PROJECT_DIR$/test/integration/docker-app/wdio.conf.js" /> | ||
@@ -105,6 +134,9 @@ <option value="$PROJECT_DIR$/.gitignore" /> | ||
| <option value="$PROJECT_DIR$/launcher.js" /> | ||
| <option value="$PROJECT_DIR$/test/unit/launcherSpec.js" /> | ||
| <option value="$PROJECT_DIR$/README.md" /> | ||
| <option value="$PROJECT_DIR$/src/launcher.js" /> | ||
| <option value="$PROJECT_DIR$/test/unit/launcherSpec.js" /> | ||
| <option value="$PROJECT_DIR$/src/utils/docker.js" /> | ||
| <option value="$PROJECT_DIR$/src/utils/child-process.js" /> | ||
| <option value="$PROJECT_DIR$/package.json" /> | ||
| <option value="$PROJECT_DIR$/README.md" /> | ||
| <option value="$PROJECT_DIR$/test/unit/utils/dockerSpec.js" /> | ||
| </list> | ||
@@ -163,2 +195,13 @@ </option> | ||
| <item name="wdio-docker-service" type="462c0819:PsiDirectoryNode" /> | ||
| <item name="src" type="462c0819:PsiDirectoryNode" /> | ||
| </path> | ||
| <path> | ||
| <item name="wdio-docker-service" type="b2602c69:ProjectViewProjectNode" /> | ||
| <item name="wdio-docker-service" type="462c0819:PsiDirectoryNode" /> | ||
| <item name="src" type="462c0819:PsiDirectoryNode" /> | ||
| <item name="utils" type="462c0819:PsiDirectoryNode" /> | ||
| </path> | ||
| <path> | ||
| <item name="wdio-docker-service" type="b2602c69:ProjectViewProjectNode" /> | ||
| <item name="wdio-docker-service" type="462c0819:PsiDirectoryNode" /> | ||
| <item name="test" type="462c0819:PsiDirectoryNode" /> | ||
@@ -172,2 +215,9 @@ </path> | ||
| </path> | ||
| <path> | ||
| <item name="wdio-docker-service" type="b2602c69:ProjectViewProjectNode" /> | ||
| <item name="wdio-docker-service" type="462c0819:PsiDirectoryNode" /> | ||
| <item name="test" type="462c0819:PsiDirectoryNode" /> | ||
| <item name="unit" type="462c0819:PsiDirectoryNode" /> | ||
| <item name="utils" type="462c0819:PsiDirectoryNode" /> | ||
| </path> | ||
| </expand> | ||
@@ -188,3 +238,3 @@ <select /> | ||
| <property name="node.js.selected.package.eslint" value="$PROJECT_DIR$/node_modules/eslint" /> | ||
| <property name="settings.editor.selected.configurable" value="preferences.pluginManager" /> | ||
| <property name="settings.editor.selected.configurable" value="editing.templates" /> | ||
| <property name="javascript.nodejs.core.library.configured.version" value="6.10.2" /> | ||
@@ -195,3 +245,3 @@ <property name="JavaScriptWeakerCompletionTypeGuess" value="true" /> | ||
| <property name="DefaultHtmlFileTemplate" value="HTML File" /> | ||
| <property name="SearchEverywhereHistoryKey" value="docker	FILE	file:///Users/simontsvilik/Development/wdio-docker-service/src/utils/docker.js" /> | ||
| <property name="SearchEverywhereHistoryKey" value="	FILE	file:///Users/simontsvilik/Development/wdio-docker-service/src/utils/child-process.js child	FILE	file:///Users/simontsvilik/Development/wdio-docker-service/lib/utils/child-process.js.map docker	FILE	file:///Users/simontsvilik/Development/wdio-docker-service/src/utils/docker.js" /> | ||
| </component> | ||
@@ -352,3 +402,3 @@ <component name="RecentsManager"> | ||
| <workItem from="1515853342240" duration="17000" /> | ||
| <workItem from="1515853388398" duration="28068000" /> | ||
| <workItem from="1515853388398" duration="49760000" /> | ||
| </task> | ||
@@ -614,34 +664,62 @@ <task id="LOCAL-00001" summary="initial commit"> | ||
| </task> | ||
| <option name="localTasksCounter" value="38" /> | ||
| <task id="LOCAL-00038" summary="chore: v1.1.0"> | ||
| <created>1515943619857</created> | ||
| <option name="number" value="00038" /> | ||
| <option name="presentableId" value="LOCAL-00038" /> | ||
| <option name="project" value="LOCAL" /> | ||
| <updated>1515943619857</updated> | ||
| </task> | ||
| <task id="LOCAL-00039" summary="feat: use bluebird"> | ||
| <created>1516080459482</created> | ||
| <option name="number" value="00039" /> | ||
| <option name="presentableId" value="LOCAL-00039" /> | ||
| <option name="project" value="LOCAL" /> | ||
| <updated>1516080459482</updated> | ||
| </task> | ||
| <task id="LOCAL-00040" summary="test: add docker unit tests"> | ||
| <created>1516080479970</created> | ||
| <option name="number" value="00040" /> | ||
| <option name="presentableId" value="LOCAL-00040" /> | ||
| <option name="project" value="LOCAL" /> | ||
| <updated>1516080479970</updated> | ||
| </task> | ||
| <task id="LOCAL-00041" summary="test: add docker unit tests"> | ||
| <created>1516080919932</created> | ||
| <option name="number" value="00041" /> | ||
| <option name="presentableId" value="LOCAL-00041" /> | ||
| <option name="project" value="LOCAL" /> | ||
| <updated>1516080919932</updated> | ||
| </task> | ||
| <option name="localTasksCounter" value="42" /> | ||
| <servers /> | ||
| </component> | ||
| <component name="TestHistory"> | ||
| <history-entry file="Unit_Tests - 2018.01.13 at 23h 27m 15s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 10m 54s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
| </history-entry> | ||
| <history-entry file="Unit_Tests - 2018.01.13 at 23h 35m 57s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 16m 02s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
| </history-entry> | ||
| <history-entry file="Unit_Tests - 2018.01.13 at 23h 37m 33s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 16m 26s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
| </history-entry> | ||
| <history-entry file="Unit_Tests - 2018.01.13 at 23h 38m 14s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 16m 52s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
| </history-entry> | ||
| <history-entry file="Unit_Tests - 2018.01.13 at 23h 40m 41s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 17m 55s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
| </history-entry> | ||
| <history-entry file="Unit_Tests - 2018.01.13 at 23h 46m 51s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 19m 50s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
| </history-entry> | ||
| <history-entry file="Unit_Tests - 2018.01.13 at 23h 47m 33s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 20m 19s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
| </history-entry> | ||
| <history-entry file="Unit_Tests - 2018.01.13 at 23h 48m 00s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 22m 22s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
| </history-entry> | ||
| <history-entry file="Unit_Tests - 2018.01.14 at 00h 22m 56s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 22m 47s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
| </history-entry> | ||
| <history-entry file="Unit_Tests - 2018.01.14 at 00h 23m 08s.xml"> | ||
| <history-entry file="Unit_Tests - 2018.01.16 at 00h 35m 06s.xml"> | ||
| <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" /> | ||
@@ -651,3 +729,3 @@ </history-entry> | ||
| <component name="TimeTrackingManager"> | ||
| <option name="totallyTimeSpent" value="110608000" /> | ||
| <option name="totallyTimeSpent" value="132300000" /> | ||
| </component> | ||
@@ -662,8 +740,9 @@ <component name="ToolWindowManager"> | ||
| <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32968536" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> | ||
| <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32968536" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> | ||
| <window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32968536" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> | ||
| <window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.17300789" sideWeight="0.504788" order="0" side_tool="true" content_ui="tabs" /> | ||
| <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> | ||
| <window_info id="Remote Host" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> | ||
| <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17229003" sideWeight="0.49521205" order="0" side_tool="false" content_ui="combo" /> | ||
| <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17229003" sideWeight="0.49521205" order="0" side_tool="false" content_ui="combo" /> | ||
| <window_info id="Docker" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> | ||
| <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" /> | ||
| <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" /> | ||
@@ -728,7 +807,10 @@ <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" /> | ||
| <MESSAGE value="chore: fix travis to upload code coverage" /> | ||
| <option name="LAST_COMMIT_MESSAGE" value="chore: fix travis to upload code coverage" /> | ||
| <MESSAGE value="chore: v1.1.0" /> | ||
| <MESSAGE value="feat: use bluebird" /> | ||
| <MESSAGE value="test: add docker unit tests" /> | ||
| <option name="LAST_COMMIT_MESSAGE" value="test: add docker unit tests" /> | ||
| </component> | ||
| <component name="XDebuggerManager"> | ||
| <breakpoint-manager> | ||
| <option name="time" value="111" /> | ||
| <option name="time" value="143" /> | ||
| </breakpoint-manager> | ||
@@ -742,2 +824,4 @@ <watches-manager> | ||
| <watch expression="ColorLogger._writeLog.calledWith('info', 'test')" language="JavaScript" /> | ||
| <watch expression="fs" language="JavaScript" /> | ||
| <watch expression="typeof fetchSpy" language="JavaScript" /> | ||
| </configuration> | ||
@@ -749,2 +833,12 @@ </watches-manager> | ||
| <expression> | ||
| <expression-string>typeof fetchSpy</expression-string> | ||
| <language-id>JavaScript</language-id> | ||
| <evaluation-mode>EXPRESSION</evaluation-mode> | ||
| </expression> | ||
| <expression> | ||
| <expression-string>fs</expression-string> | ||
| <language-id>JavaScript</language-id> | ||
| <evaluation-mode>EXPRESSION</evaluation-mode> | ||
| </expression> | ||
| <expression> | ||
| <expression-string>ColorLogger._writeLog.calledWith('info', 'test')</expression-string> | ||
@@ -767,51 +861,2 @@ <language-id>JavaScript</language-id> | ||
| <component name="editorHistoryManager"> | ||
| <entry file="file://$PROJECT_DIR$/launcher.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="45"> | ||
| <caret line="3" column="0" lean-forward="false" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/launcher.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="45"> | ||
| <caret line="3" column="47" lean-forward="false" selection-start-line="3" selection-start-column="47" selection-end-line="3" selection-end-column="47" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/.gitignore"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="0"> | ||
| <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/index.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="15"> | ||
| <caret line="1" column="20" lean-forward="false" selection-start-line="1" selection-start-column="20" selection-end-line="1" selection-end-column="20" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/launcher.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="45"> | ||
| <caret line="3" column="0" lean-forward="false" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/launcher.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="45"> | ||
| <caret line="3" column="47" lean-forward="false" selection-start-line="3" selection-start-column="47" selection-end-line="3" selection-end-column="47" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/test/.eslintrc"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="90"> | ||
| <caret line="6" column="5" lean-forward="false" selection-start-line="6" selection-start-column="5" selection-end-line="6" selection-end-column="5" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/test/docker-harness.js" /> | ||
@@ -834,9 +879,2 @@ <entry file="file://$PROJECT_DIR$/test/selenium_standalone-firefox.cid" /> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/utils/getFilePath.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="300"> | ||
| <caret line="20" column="1" lean-forward="false" selection-start-line="20" selection-start-column="1" selection-end-line="20" selection-end-column="1" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/index.js"> | ||
@@ -850,9 +888,2 @@ <provider selected="true" editor-type-id="text-editor"> | ||
| <entry file="file://$PROJECT_DIR$/docker-service.txt" /> | ||
| <entry file="file://$PROJECT_DIR$/src/utils/ping.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="60"> | ||
| <caret line="4" column="1" lean-forward="false" selection-start-line="4" selection-start-column="1" selection-end-line="4" selection-end-column="1" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/utils/camel-to-dash.js"> | ||
@@ -901,9 +932,2 @@ <provider selected="true" editor-type-id="text-editor"> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/utils/child-process.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="690"> | ||
| <caret line="46" column="76" lean-forward="false" selection-start-line="46" selection-start-column="29" selection-end-line="46" selection-end-column="76" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/test/unit/camelToDashSpec.js"> | ||
@@ -1014,10 +1038,2 @@ <provider selected="true" editor-type-id="text-editor"> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/utils/docker.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="293"> | ||
| <caret line="43" column="19" lean-forward="true" selection-start-line="43" selection-start-column="19" selection-end-line="43" selection-end-column="19" /> | ||
| <folding /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/test/integration/docker-app/wdio.conf.js"> | ||
@@ -1055,18 +1071,55 @@ <provider selected="true" editor-type-id="text-editor"> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/launcher.js"> | ||
| <entry file="file://$PROJECT_DIR$/.travis.yml"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="369"> | ||
| <caret line="80" column="0" lean-forward="false" selection-start-line="80" selection-start-column="0" selection-end-line="80" selection-end-column="7" /> | ||
| <folding> | ||
| <element signature="e#0#26#0" expanded="false" /> | ||
| </folding> | ||
| <state relative-caret-position="293"> | ||
| <caret line="27" column="12" lean-forward="false" selection-start-line="27" selection-start-column="12" selection-end-line="27" selection-end-column="12" /> | ||
| <folding /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/README.md"> | ||
| <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> | ||
| <state split_layout="SPLIT"> | ||
| <first_editor relative-caret-position="60"> | ||
| <caret line="4" column="0" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" /> | ||
| <folding> | ||
| <marker date="1515942934461" expanded="true" signature="1982:2031" ph="{...}" /> | ||
| <marker date="1515942934461" expanded="true" signature="2229:2384" ph="{...}" /> | ||
| <marker date="1515942934461" expanded="true" signature="2327:2382" ph="{...}" /> | ||
| <marker date="1515942934461" expanded="true" signature="3471:3586" ph="{...}" /> | ||
| </folding> | ||
| </first_editor> | ||
| <second_editor /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/.babelrc"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="75"> | ||
| <caret line="5" column="7" lean-forward="false" selection-start-line="5" selection-start-column="7" selection-end-line="5" selection-end-column="7" /> | ||
| <folding /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/.coveralls.yml"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="30"> | ||
| <caret line="2" column="0" lean-forward="false" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" /> | ||
| <folding /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/.gitignore"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="105"> | ||
| <caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" /> | ||
| <folding /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/test/unit/launcherSpec.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="75"> | ||
| <state relative-caret-position="-226"> | ||
| <caret line="5" column="4" lean-forward="false" selection-start-line="5" selection-start-column="4" selection-end-line="6" selection-end-column="57" /> | ||
| <folding> | ||
| <element signature="e#0#30#0" expanded="false" /> | ||
| <element signature="e#558#799#0" expanded="false" /> | ||
@@ -1089,6 +1142,6 @@ <element signature="e#969#1407#0" expanded="false" /> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/.travis.yml"> | ||
| <entry file="file://$PROJECT_DIR$/test/unit/utils/deepMergeSpec.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="293"> | ||
| <caret line="27" column="12" lean-forward="false" selection-start-line="27" selection-start-column="12" selection-end-line="27" selection-end-column="12" /> | ||
| <state relative-caret-position="15"> | ||
| <caret line="1" column="0" lean-forward="false" selection-start-line="1" selection-start-column="0" selection-end-line="2" selection-end-column="0" /> | ||
| <folding /> | ||
@@ -1098,22 +1151,19 @@ </state> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/README.md"> | ||
| <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> | ||
| <state split_layout="SPLIT"> | ||
| <first_editor relative-caret-position="60"> | ||
| <caret line="4" column="0" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" /> | ||
| <folding> | ||
| <marker date="1515942628420" expanded="true" signature="1983:2032" ph="{...}" /> | ||
| <marker date="1515942628420" expanded="true" signature="2230:2385" ph="{...}" /> | ||
| <marker date="1515942628420" expanded="true" signature="2328:2383" ph="{...}" /> | ||
| <marker date="1515942628420" expanded="true" signature="3472:3587" ph="{...}" /> | ||
| </folding> | ||
| </first_editor> | ||
| <second_editor /> | ||
| <entry file="file://$PROJECT_DIR$/test/unit/utils/childProcessSpec.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="0"> | ||
| <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> | ||
| <folding> | ||
| <element signature="e#0#41#0" expanded="false" /> | ||
| </folding> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/package.json"> | ||
| <entry file="file://$PROJECT_DIR$/lib/utils/child-process.js.map"> | ||
| <provider editor-type-id="sourcemapFileViewerProvider"> | ||
| <state /> | ||
| </provider> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="-519"> | ||
| <caret line="4" column="51" lean-forward="true" selection-start-line="4" selection-start-column="51" selection-end-line="4" selection-end-column="51" /> | ||
| <state relative-caret-position="0"> | ||
| <caret line="0" column="110" lean-forward="false" selection-start-line="0" selection-start-column="110" selection-end-line="0" selection-end-column="110" /> | ||
| <folding /> | ||
@@ -1123,6 +1173,16 @@ </state> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/.babelrc"> | ||
| <entry file="file://$PROJECT_DIR$/test/unit/utils/getFilePathSpec.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="75"> | ||
| <caret line="5" column="7" lean-forward="false" selection-start-line="5" selection-start-column="7" selection-end-line="5" selection-end-column="7" /> | ||
| <state relative-caret-position="-27"> | ||
| <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> | ||
| <folding> | ||
| <element signature="e#0#57#0" expanded="false" /> | ||
| </folding> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/utils/getFilePath.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="300"> | ||
| <caret line="20" column="1" lean-forward="false" selection-start-line="20" selection-start-column="1" selection-end-line="20" selection-end-column="1" /> | ||
| <folding /> | ||
@@ -1132,6 +1192,16 @@ </state> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/.coveralls.yml"> | ||
| <entry file="file://$PROJECT_DIR$/src/utils/child-process.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="30"> | ||
| <caret line="2" column="0" lean-forward="false" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" /> | ||
| <caret line="2" column="0" lean-forward="true" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" /> | ||
| <folding> | ||
| <element signature="e#0#38#0" expanded="false" /> | ||
| </folding> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/node_modules/node-fetch/lib/request.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="300"> | ||
| <caret line="20" column="9" lean-forward="false" selection-start-line="20" selection-start-column="9" selection-end-line="20" selection-end-column="9" /> | ||
| <folding /> | ||
@@ -1141,6 +1211,6 @@ </state> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/.gitignore"> | ||
| <entry file="file://$PROJECT_DIR$/node_modules/node-fetch/index.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="105"> | ||
| <caret line="7" column="0" lean-forward="false" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" /> | ||
| <state relative-caret-position="60"> | ||
| <caret line="35" column="4" lean-forward="false" selection-start-line="35" selection-start-column="4" selection-end-line="35" selection-end-column="4" /> | ||
| <folding /> | ||
@@ -1150,3 +1220,65 @@ </state> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/utils/ping.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="45"> | ||
| <caret line="3" column="4" lean-forward="false" selection-start-line="3" selection-start-column="4" selection-end-line="3" selection-end-column="4" /> | ||
| <folding /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/utils/docker.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="2085"> | ||
| <caret line="139" column="4" lean-forward="false" selection-start-line="139" selection-start-column="4" selection-end-line="139" selection-end-column="4" /> | ||
| <folding> | ||
| <element signature="e#0#42#0" expanded="true" /> | ||
| </folding> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/package.json"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="332"> | ||
| <caret line="34" column="44" lean-forward="true" selection-start-line="34" selection-start-column="44" selection-end-line="34" selection-end-column="44" /> | ||
| <folding /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/launcher.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="-667"> | ||
| <caret line="14" column="23" lean-forward="false" selection-start-line="14" selection-start-column="23" selection-end-line="14" selection-end-column="23" /> | ||
| <folding> | ||
| <element signature="e#0#26#0" expanded="true" /> | ||
| </folding> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/test/unit/utils/dockerSpec.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="280"> | ||
| <caret line="206" column="110" lean-forward="false" selection-start-line="206" selection-start-column="110" selection-end-line="206" selection-end-column="110" /> | ||
| <folding> | ||
| <element signature="e#0#30#0" expanded="true" /> | ||
| <element signature="e#3747#4408#0" expanded="false" /> | ||
| <element signature="e#5256#5924#0" expanded="false" /> | ||
| <element signature="e#5988#7164#0" expanded="false" /> | ||
| <element signature="e#8082#8324#0" expanded="false" /> | ||
| <element signature="e#8391#8633#0" expanded="false" /> | ||
| <element signature="e#8700#9169#0" expanded="false" /> | ||
| <element signature="e#9218#9687#0" expanded="false" /> | ||
| <element signature="e#9736#11624#0" expanded="false" /> | ||
| <element signature="e#11674#12150#0" expanded="false" /> | ||
| <element signature="e#12205#14280#0" expanded="false" /> | ||
| <element signature="e#14324#14811#0" expanded="false" /> | ||
| <element signature="e#14860#15361#0" expanded="false" /> | ||
| <element signature="e#15421#18057#0" expanded="false" /> | ||
| <element signature="e#15482#16223#0" expanded="false" /> | ||
| <element signature="e#16287#17097#0" expanded="false" /> | ||
| <element signature="e#17180#18049#0" expanded="false" /> | ||
| </folding> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| </component> | ||
| </project> |
+2
-1
| { | ||
| "name": "wdio-docker-service", | ||
| "version": "1.1.0", | ||
| "version": "1.1.1", | ||
| "description": "WebdriverIO service to start and stop docker container (for Selenium and more)", | ||
@@ -48,2 +48,3 @@ "repository": { | ||
| "dependencies": { | ||
| "bluebird": "^3.5.1", | ||
| "chalk": "^2.3.0", | ||
@@ -50,0 +51,0 @@ "fs-extra": "^5.0.0", |
+1
-0
| import fs from 'fs-extra'; | ||
| import Docker from './utils/docker'; | ||
| import getFilePath from './utils/getFilePath'; | ||
| import Promise from 'bluebird'; | ||
@@ -5,0 +6,0 @@ const DEFAULT_LOG_FILENAME = 'docker-log.txt'; |
| import { spawn } from 'child_process'; | ||
| import Promise from 'bluebird'; | ||
@@ -3,0 +4,0 @@ const SPACE = ' '; |
+12
-7
@@ -8,2 +8,3 @@ import camelToDash from './camel-to-dash'; | ||
| import { EventEmitter } from 'events'; | ||
| import Promise from 'bluebird'; | ||
@@ -13,3 +14,2 @@ const SPACE = ' '; | ||
| const MAX_INSPECT_ATTEMPTS = 10; | ||
| const DEFAULT_HEALTH_CHECK = 'http://localhost:4444'; | ||
| const DEFAULT_OPTIONS = { | ||
@@ -25,4 +25,4 @@ rm: true | ||
| * @param {String} image Docker image/tag name | ||
| * @param {Boolean} debug Enables logging | ||
| * @param {Object} options | ||
| * @param {Boolean} [debug] Enables logging | ||
| * @param {Object} [options] Docker run options | ||
| * @param {String} [healthCheck] Url that verifies that service is running | ||
@@ -33,10 +33,14 @@ * @param {String} [command] docker command that follows image/tag name | ||
| */ | ||
| constructor(image, { debug = false, options = {}, healthCheck, command, args }, logger) { | ||
| constructor(image, { debug = false, options = {}, healthCheck, command, args } = {}, logger = console) { | ||
| super(); | ||
| if (!image) { | ||
| throw new Error('Missing required image argument'); | ||
| } | ||
| this.args = args; | ||
| this.cidfile = path.join(process.cwd(), `${ image.replace(/\W+/g, '_') }.cid`); | ||
| this.command = command; | ||
| this.debug = debug; | ||
| this.healthCheck = healthCheck || DEFAULT_HEALTH_CHECK; | ||
| this.debug = Boolean(debug); | ||
| this.healthCheck = healthCheck; | ||
| this.image = image; | ||
@@ -118,2 +122,3 @@ this.logger = logger; | ||
| this.process.kill(); | ||
| this.process = null; | ||
| } | ||
@@ -230,3 +235,3 @@ | ||
| if (typeof value === 'boolean') { | ||
| if (typeof value === 'boolean' && value) { | ||
| return `${prefix}${key}`; | ||
@@ -233,0 +238,0 @@ } |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances in 1 package
137861
22.65%47
2.17%1602
34.51%4
33.33%6
20%+ Added
+ Added