Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / karma / lib / middleware / runner.js
1 /**
2  * Runner middleware is reponsible for communication with `karma run`.
3  *
4  * It basically triggers a test run and streams stdout back.
5  */
6
7 var path = require('path')
8 var helper = require('../helper')
9 var log = require('../logger').create()
10 var constant = require('../constants')
11 var json = require('connect').json()
12
13 // TODO(vojta): disable when single-run mode
14 var createRunnerMiddleware = function (emitter, fileList, capturedBrowsers, reporter, executor,
15   /* config.hostname */ hostname, /* config.port */ port, /* config.urlRoot */ urlRoot, config) {
16   return function (request, response, next) {
17     if (request.url !== '/__run__' && request.url !== urlRoot + 'run') {
18       return next()
19     }
20
21     log.debug('Execution (fired by runner)')
22     response.writeHead(200)
23
24     if (!capturedBrowsers.length) {
25       var url = 'http://' + hostname + ':' + port + urlRoot
26
27       return response.end('No captured browser, open ' + url + '\n')
28     }
29
30     json(request, response, function () {
31       if (!capturedBrowsers.areAllReady([])) {
32         response.write('Waiting for previous execution...\n')
33       }
34
35       emitter.once('run_start', function () {
36         var responseWrite = response.write.bind(response)
37
38         reporter.addAdapter(responseWrite)
39
40         // clean up, close runner response
41         emitter.once('run_complete', function (browsers, results) {
42           reporter.removeAdapter(responseWrite)
43           response.end(constant.EXIT_CODE + results.exitCode)
44         })
45       })
46
47       var data = request.body
48       log.debug('Setting client.args to ', data.args)
49       config.client.args = data.args
50
51       var fullRefresh = true
52
53       if (helper.isArray(data.changedFiles)) {
54         data.changedFiles.forEach(function (filepath) {
55           fileList.changeFile(path.resolve(config.basePath, filepath))
56           fullRefresh = false
57         })
58       }
59
60       if (helper.isArray(data.addedFiles)) {
61         data.addedFiles.forEach(function (filepath) {
62           fileList.addFile(path.resolve(config.basePath, filepath))
63           fullRefresh = false
64         })
65       }
66
67       if (helper.isArray(data.removedFiles)) {
68         data.removedFiles.forEach(function (filepath) {
69           fileList.removeFile(path.resolve(config.basePath, filepath))
70           fullRefresh = false
71         })
72       }
73
74       if (fullRefresh && data.refresh !== false) {
75         log.debug('Refreshing all the files / patterns')
76         fileList.refresh()
77
78         if (!config.autoWatch) {
79           executor.schedule()
80         }
81       } else {
82         executor.schedule()
83       }
84     })
85   }
86 }
87
88 createRunnerMiddleware.$inject = ['emitter', 'fileList', 'capturedBrowsers', 'reporter', 'executor',
89   'config.hostname', 'config.port', 'config.urlRoot', 'config']
90
91 // PUBLIC API
92 exports.create = createRunnerMiddleware