12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- var http = require('http')
- var constant = require('./constants')
- var helper = require('./helper')
- var cfg = require('./config')
- var logger = require('./logger')
- var log = logger.create('runner')
- var parseExitCode = function (buffer, defaultCode, failOnEmptyTestSuite) {
- var tailPos = buffer.length - Buffer.byteLength(constant.EXIT_CODE) - 2
- if (tailPos < 0) {
- return {exitCode: defaultCode, buffer: buffer}
- }
- // tail buffer which might contain the message
- var tail = buffer.slice(tailPos)
- var tailStr = tail.toString()
- if (tailStr.substr(0, tailStr.length - 2) === constant.EXIT_CODE) {
- var emptyInt = parseInt(tailStr.substr(-2, 1), 10)
- var exitCode = parseInt(tailStr.substr(-1), 10)
- if (failOnEmptyTestSuite === false && emptyInt === 0) {
- log.warn('Test suite was empty.')
- exitCode = 0
- }
- return {exitCode: exitCode, buffer: buffer.slice(0, tailPos)}
- }
- return {exitCode: defaultCode, buffer: buffer}
- }
- // TODO(vojta): read config file (port, host, urlRoot)
- exports.run = function (config, done) {
- config = config || {}
- logger.setupFromConfig(config)
- done = helper.isFunction(done) ? done : process.exit
- config = cfg.parseConfig(config.configFile, config)
- var exitCode = 1
- var options = {
- hostname: config.hostname,
- path: config.urlRoot + 'run',
- port: config.port,
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- }
- }
- var request = http.request(options, function (response) {
- response.on('data', function (buffer) {
- var parsedResult = parseExitCode(buffer, exitCode, config.failOnEmptyTestSuite)
- exitCode = parsedResult.exitCode
- process.stdout.write(parsedResult.buffer)
- })
- response.on('end', function () {
- done(exitCode)
- })
- })
- request.on('error', function (e) {
- if (e.code === 'ECONNREFUSED') {
- log.error('There is no server listening on port %d', options.port)
- done(1, e.code)
- } else {
- throw e
- }
- })
- request.end(JSON.stringify({
- args: config.clientArgs,
- removedFiles: config.removedFiles,
- changedFiles: config.changedFiles,
- addedFiles: config.addedFiles,
- refresh: config.refresh,
- colors: config.colors
- }))
- }
|