UNPKG

2.15 kBJavaScriptView Raw
1var http = require('http')
2
3var constant = require('./constants')
4var helper = require('./helper')
5var cfg = require('./config')
6var logger = require('./logger')
7var log = logger.create('runner')
8
9var parseExitCode = function (buffer, defaultCode, failOnEmptyTestSuite) {
10 var tailPos = buffer.length - Buffer.byteLength(constant.EXIT_CODE) - 2
11
12 if (tailPos < 0) {
13 return {exitCode: defaultCode, buffer: buffer}
14 }
15
16 // tail buffer which might contain the message
17 var tail = buffer.slice(tailPos)
18 var tailStr = tail.toString()
19 if (tailStr.substr(0, tailStr.length - 2) === constant.EXIT_CODE) {
20 var emptyInt = parseInt(tailStr.substr(-2, 1), 10)
21 var exitCode = parseInt(tailStr.substr(-1), 10)
22 if (failOnEmptyTestSuite === false && emptyInt === 0) {
23 log.warn('Test suite was empty.')
24 exitCode = 0
25 }
26 return {exitCode: exitCode, buffer: buffer.slice(0, tailPos)}
27 }
28
29 return {exitCode: defaultCode, buffer: buffer}
30}
31
32// TODO(vojta): read config file (port, host, urlRoot)
33exports.run = function (config, done) {
34 done = helper.isFunction(done) ? done : process.exit
35 config = cfg.parseConfig(config.configFile, config)
36
37 var exitCode = 1
38 var options = {
39 hostname: config.hostname,
40 path: config.urlRoot + 'run',
41 port: config.port,
42 method: 'POST',
43 headers: {
44 'Content-Type': 'application/json'
45 }
46 }
47
48 var request = http.request(options, function (response) {
49 response.on('data', function (buffer) {
50 var parsedResult = parseExitCode(buffer, exitCode, config.failOnEmptyTestSuite)
51 exitCode = parsedResult.exitCode
52 process.stdout.write(parsedResult.buffer)
53 })
54
55 response.on('end', function () {
56 done(exitCode)
57 })
58 })
59
60 request.on('error', function (e) {
61 if (e.code === 'ECONNREFUSED') {
62 log.error('There is no server listening on port %d', options.port)
63 done(1, e.code)
64 } else {
65 throw e
66 }
67 })
68
69 request.end(JSON.stringify({
70 args: config.clientArgs,
71 removedFiles: config.removedFiles,
72 changedFiles: config.changedFiles,
73 addedFiles: config.addedFiles,
74 refresh: config.refresh
75 }))
76}