exframe-testing
Advanced tools
Comparing version 3.3.6 to 3.3.7
129
cli.js
@@ -135,3 +135,3 @@ #!/usr/bin/env node | ||
const startContractTests = () => new Promise((resolve, reject) => { | ||
const test = childProcess.spawn('npm', ['run', 'contract-tests']); | ||
const test = childProcess.spawn('docker', ['exec', `${containerName}`, 'npm', 'run', 'contract-tests']); | ||
test.stdout.pipe(process.stdout); | ||
@@ -161,86 +161,61 @@ test.stderr.pipe(process.stderr); | ||
const run = async () => { | ||
if (!argv.l) { | ||
log.info('Updating docker images'); | ||
await spawnAsync('docker', ['compose', 'pull']); | ||
log.info('Updating docker images'); | ||
await spawnAsync('docker', ['compose', 'pull']); | ||
log.info('Bringing up database environment'); | ||
await spawnAsync('docker', ['compose', 'up', '-d', '--no-deps', 'mongodb']); | ||
await spawnAsync('docker', ['compose', 'up', '-d', '--no-deps', 'mongo']); | ||
await spawnAsync('docker', ['compose', 'up', '-d', '--no-deps', 'mongo-seed']); | ||
log.info('Bringing up database environment'); | ||
await spawnAsync('docker', ['compose', 'up', '-d', '--no-deps', 'mongodb']); | ||
await spawnAsync('docker', ['compose', 'up', '-d', '--no-deps', 'mongo']); | ||
await spawnAsync('docker', ['compose', 'up', '-d', '--no-deps', 'mongo-seed']); | ||
log.info('checking for database seeding container'); | ||
const composeUp = childProcess.spawnSync('docker', ['compose', 'ps', 'mongo-seed']); | ||
const seedExists = composeUp.stdout.toString('utf8').indexOf('mongo-seed') !== -1; | ||
log.info('checking for database seeding container'); | ||
const composeUp = childProcess.spawnSync('docker', ['compose', 'ps', 'mongo-seed']); | ||
const seedExists = composeUp.stdout.toString('utf8').indexOf('mongo-seed') !== -1; | ||
if (seedExists) { | ||
try { | ||
const seedPortProc = childProcess.spawnSync('docker', ['inspect', '--format=\'{{(index (index .NetworkSettings.Ports "80/tcp") 0).HostPort}}\'', 'mongo-seed']); | ||
const seedPort = seedPortProc.stdout.toString('utf8').replace(/'/g, '').trim(); | ||
if (seedExists) { | ||
try { | ||
const seedPortProc = childProcess.spawnSync('docker', ['inspect', '--format=\'{{(index (index .NetworkSettings.Ports "80/tcp") 0).HostPort}}\'', 'mongo-seed']); | ||
const seedPort = seedPortProc.stdout.toString('utf8').replace(/'/g, '').trim(); | ||
if (seedPort.length === 0) { | ||
throw new Error('Mongo Seed health port not mapped in docker-compose'); | ||
} | ||
if (seedPort.length === 0) { | ||
throw new Error('Mongo Seed health port not mapped in docker-compose'); | ||
} | ||
await checkSeedHealth(seedPort); | ||
} catch (e) { | ||
log.error({ errorData: e }); | ||
await spawnAsync('docker', ['compose', 'down']); | ||
process.exit(1); // eslint-disable-line no-process-exit | ||
} | ||
await checkSeedHealth(seedPort); | ||
} catch (e) { | ||
log.error({ errorData: e }); | ||
await spawnAsync('docker', ['compose', 'down']); | ||
process.exit(1); // eslint-disable-line no-process-exit | ||
} | ||
log.info('Bringing up the environment'); | ||
if (argv.build) { | ||
await spawnAsync('docker', ['compose', 'up', '--build', '-d', '--no-recreate']); | ||
} else { | ||
await spawnAsync('docker', ['compose', 'up', '-d', '--no-recreate']); | ||
} | ||
log.info(`Killing ${containerName}`); | ||
await spawnAsync('docker', ['compose', 'kill', containerName]); | ||
log.info(`Removing ${containerName}`); | ||
await spawnAsync('docker', ['compose', 'rm', '-f', containerName]); | ||
} | ||
log.info('Bringing up the environment'); | ||
if (argv.build) { | ||
await spawnAsync('docker', ['compose', 'up', '--build', '-d', '--no-recreate']); | ||
} else { | ||
await spawnAsync('docker', ['compose', 'up', '-d', '--no-recreate']); | ||
} | ||
log.info(`Starting ${containerName}`); | ||
const container = childProcess.spawn('docker', ['compose', 'run', '--name', containerName, '--service-ports', '--entrypoint', `"npm test ${defaultArgs.join(' ')} -- -l ${argv.teamcity ? '--teamcity' : ''}"`, containerName], { shell: true }); | ||
container.stdout.pipe(process.stdout); | ||
container.stderr.pipe(process.stderr); | ||
container.on('error', (error) => { | ||
log.error('Error running tests in container', { errorData: error, containerName }); | ||
}); | ||
container.on('close', code => { | ||
process.exitCode = code; | ||
const logFile = `${process.cwd()}/docker-compose.log`; | ||
log.info(`Capturing docker-compose logs to file: ${logFile}`); | ||
const outFile = fs.openSync(logFile, 'w'); | ||
childProcess.spawnSync('docker', ['compose', 'logs', '--no-color'], { stdio: ['pipe', outFile, outFile] }); | ||
fs.closeSync(outFile); | ||
if (argv.down) { | ||
log.info('Tearing down the environment'); | ||
childProcess.spawnSync('docker', ['compose', 'down'], { stdio: 'inherit' }); | ||
} | ||
}); | ||
} else { | ||
let failures = 0; | ||
await spawnAsync('npm', ['config', 'delete', `${process.env.npm_package_name}:reporter`]); | ||
if (argv.teamcity) { | ||
await spawnAsync('npm', ['config', 'set', `${process.env.npm_package_name}:reporter`, 'mocha-teamcity-reporter']); | ||
log.info(`Starting ${containerName}`); | ||
let failures = 0; | ||
if (argv.teamcity) { | ||
await spawnAsync('docker', ['exec', `${containerName}`, 'npm', 'config', 'set', `${process.env.npm_package_name}:reporter`, 'mocha-teamcity-reporter']); | ||
} | ||
if (unit) { | ||
log.info('Running unit tests'); | ||
const unitResults = childProcess.spawnSync('docker', ['exec', `${containerName}`, 'npm', 'run', 'unit-tests', '--silent'], { stdio: 'inherit' }); | ||
log.info('Unit test results', { unitResults }); | ||
failures += unitResults.status; | ||
} | ||
if (contract) { | ||
log.info('Running contract tests'); | ||
try { | ||
const code = await runContractTests(); | ||
log.info('Contract test results', { code }); | ||
failures += code; | ||
const coverResult = childProcess.spawnSync('docker', ['exec', `${containerName}`, 'npm', 'run', 'combine-coverage'], { stdio: 'inherit' }); | ||
log.info('Combine coverage results', { coverResult }); | ||
process.exit(failures); // eslint-disable-line no-process-exit | ||
} catch (error) { | ||
log.error('error occurred running contract tests', { errorData: error }); | ||
} | ||
if (unit) { | ||
log.info('Running unit tests'); | ||
const unitResults = childProcess.spawnSync('npm', ['run', 'unit-tests', '--silent'], { stdio: 'inherit' }); | ||
log.info('Unit test results', { unitResults }); | ||
failures += unitResults.status; | ||
} | ||
if (contract) { | ||
log.info('Running contract tests'); | ||
try { | ||
const code = await runContractTests(); | ||
log.info('Contract test results', { code }); | ||
failures += code; | ||
const coverResult = childProcess.spawnSync('npm', ['run', 'combine-coverage'], { stdio: 'inherit' }); | ||
log.info('Combine coverage results', { coverResult }); | ||
process.exit(failures); // eslint-disable-line no-process-exit | ||
} catch (error) { | ||
log.error('error occurred running contract tests', { errorData: error }); | ||
} | ||
} | ||
} | ||
@@ -247,0 +222,0 @@ }; |
{ | ||
"name": "exframe-testing", | ||
"version": "3.3.6", | ||
"version": "3.3.7", | ||
"bin": { | ||
@@ -43,3 +43,3 @@ "exframe-testing": "cli.js" | ||
}, | ||
"gitHead": "358f85a1eb1077c399acc73c9ef3e8cd957df2cb" | ||
"gitHead": "c9936cc72348f41b1b01d9b51345e3f275e8fc73" | ||
} |
3
31713
498