Skip to content

Commit ed31bd4

Browse files
committed
Merge pull request #71 from browserstack/pre_prod
Pre prod
2 parents 778e322 + 477fafe commit ed31bd4

File tree

4 files changed

+90
-47
lines changed

4 files changed

+90
-47
lines changed

bin/cli.js

Lines changed: 66 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,46 @@ var Log = require('../lib/logger'),
2323
logLevel,
2424
tunnel;
2525

26-
function cleanUp(signal) {
27-
try {
28-
server.close();
29-
} catch (e) {
30-
logger.debug("Server already closed");
31-
}
32-
33-
logger.info("Exiting");
34-
35-
for (var key in workers) {
36-
var worker = workers[key];
37-
if (workers.hasOwnProperty(key)) {
38-
client.terminateWorker(worker.id, function () {
39-
if (!workers[key]) {
40-
return;
41-
}
42-
26+
function terminateAllWorkers(callback) {
27+
var cleanWorker = function(id, key) {
28+
client.terminateWorker(id, function() {
29+
var worker = workers[key];
30+
if(worker) {
4331
logger.debug('[%s] Terminated', worker.string);
4432
clearTimeout(worker.activityTimeout);
4533
delete workers[key];
4634
delete workerKeys[worker.id];
47-
});
35+
}
36+
if (utils.objectSize(workers) === 0) {
37+
callback();
38+
}
39+
});
40+
};
41+
42+
if (utils.objectSize(workers) === 0) {
43+
callback();
44+
} else {
45+
for (var key in workers){
46+
var worker = workers[key];
47+
if (worker.id) {
48+
cleanWorker(worker.id, key);
49+
} else {
50+
delete workers[key];
51+
if (utils.objectSize(workers) === 0) {
52+
callback();
53+
}
54+
}
4855
}
4956
}
57+
};
58+
59+
function cleanUpAndExit(signal, status) {
60+
try {
61+
server.close();
62+
} catch (e) {
63+
logger.debug("Server already closed");
64+
}
65+
5066
if (statusPoller) statusPoller.stop();
5167

5268
try {
@@ -59,9 +75,24 @@ function cleanUp(signal) {
5975
} catch (e) {
6076
logger.debug("Non existent pid file.");
6177
}
62-
if (signal) {
63-
process.kill(process.pid, 'SIGTERM');
78+
79+
if (signal == 'SIGTERM') {
80+
logger.info("Exiting");
81+
process.exit(status);
82+
} else {
83+
terminateAllWorkers(function() {
84+
logger.info("Exiting");
85+
process.exit(1);
86+
});
87+
}
88+
}
89+
90+
function getTestBrowserInfo(browserString, path) {
91+
var info = browserString;
92+
if(config.multipleTest) {
93+
info += ", " + path;
6494
}
95+
return info;
6596
}
6697

6798
function launchServer() {
@@ -71,9 +102,10 @@ function launchServer() {
71102
server.listen(parseInt(serverPort, 10));
72103
}
73104

74-
function launchBrowser(browser, url) {
105+
function launchBrowser(browser, path) {
106+
var url = 'http://localhost:' + serverPort.toString() + '/' + path;
75107
var browserString = utils.browserString(browser);
76-
logger.debug("[%s] Launching", browserString);
108+
logger.debug("[%s] Launching", getTestBrowserInfo(browserString, path));
77109

78110
var key = utils.uuid();
79111

@@ -118,6 +150,7 @@ function launchBrowser(browser, url) {
118150

119151
worker.config = browser;
120152
worker.string = browserString;
153+
worker.test_path = path;
121154
workers[key] = worker;
122155
workerKeys[worker.id] = {key: key, marked: false};
123156
});
@@ -127,13 +160,13 @@ function launchBrowser(browser, url) {
127160
function launchBrowsers(config, browser) {
128161
setTimeout(function () {
129162
if(Object.prototype.toString.call(config.test_path) === '[object Array]'){
163+
config.multipleTest = config.test_path.length > 1? true : false;
130164
config.test_path.forEach(function(path){
131-
var url = 'http://localhost:' + serverPort.toString() + '/' + path;
132-
launchBrowser(browser,url);
165+
launchBrowser(browser, path);
133166
});
134167
} else {
135-
var url = 'http://localhost:' + serverPort.toString() + '/' + config.test_path;
136-
launchBrowser(browser,url);
168+
config.multipleTest = false;
169+
launchBrowser(browser, config.test_path);
137170
}
138171
}, 100);
139172
}
@@ -157,7 +190,7 @@ var statusPoller = {
157190

158191
if (_worker.status === 'running') {
159192
//clearInterval(statusPoller);
160-
logger.debug('[%s] Launched', worker.string);
193+
logger.debug('[%s] Launched', getTestBrowserInfo(worker.string, worker.test_path));
161194
worker.launched = true;
162195
workerData.marked = true;
163196

@@ -177,7 +210,7 @@ var statusPoller = {
177210
config.status = 1;
178211
}
179212

180-
process.exit(config.status);
213+
process.kill(process.pid, 'SIGTERM');
181214
}
182215
}
183216
}, activityTimeout * 1000);
@@ -198,7 +231,7 @@ var statusPoller = {
198231
config.status = 1;
199232
}
200233

201-
process.exit(config.status);
234+
process.kill(process.pid, 'SIGTERM');
202235
}
203236
}
204237
}, (activityTimeout * 1000));
@@ -219,7 +252,8 @@ function runTests() {
219252
launchServer();
220253
tunnel = new Tunnel(config.key, serverPort, config.tunnelIdentifier, function () {
221254
statusPoller.start();
222-
logger.info("Launching " + browsers.length + " workers");
255+
var total_workers = config.browsers.length * (Object.prototype.toString.call(config.test_path) === '[object Array]' ? config.test_path.length : 1);
256+
logger.info("Launching " + total_workers + " workers");
223257
browsers.forEach(function(browser) {
224258
if (browser.browser_version === "latest") {
225259
logger.debug("[%s] Finding version.", utils.browserString(browser));
@@ -251,8 +285,8 @@ try {
251285
runTests();
252286
var pid_file = process.cwd() + '/browserstack-run.pid';
253287
fs.writeFileSync(pid_file, process.pid, 'utf-8')
254-
process.on('exit', function() {cleanUp(false)});
255-
process.on('SIGINT', function() {cleanUp(true)});
288+
process.on('SIGINT', function() { cleanUpAndExit('SIGINT', 1) });
289+
process.on('SIGTERM', function() { cleanUpAndExit('SIGTERM', config.status) });
256290
}
257291
} catch (e) {
258292
console.log(e);

lib/local.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ var Tunnel = function Tunnel(key, port, uniqueIdentifier, callback, err) {
2929
logger.debug(stderr);
3030
logger.debug(error);
3131
if (stdout.indexOf('Error') >= 0 || error) {
32-
logger.info("[%s] Tunnel launching failed", new Date());
33-
logger.info(stdout);
34-
process.exit(1);
32+
logger.debug("[%s] Tunnel launching failed", new Date());
33+
logger.debug(stdout);
34+
process.kill(process.pid, 'SIGINT');
3535
}
3636
});
3737

@@ -82,7 +82,7 @@ var Tunnel = function Tunnel(key, port, uniqueIdentifier, callback, err) {
8282
}, 100);
8383
}).on('error', function(e) {
8484
logger.info("Got error while downloading binary: " + e.message);
85-
process.exit(1);
85+
process.kill(process.pid, 'SIGINT');
8686
});
8787
});
8888
});

lib/server.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ var mimeTypes = {
2020
"css": "text/css"
2121
};
2222

23+
function getTestBrowserInfo(worker) {
24+
var info = worker.string;
25+
if(config.multipleTest) {
26+
info += ", " + worker.test_path
27+
}
28+
return info;
29+
}
30+
2331

2432
exports.Server = function Server(bsClient, workers) {
2533

@@ -28,8 +36,9 @@ exports.Server = function Server(bsClient, workers) {
2836
var query = url_parts.query;
2937

3038
if (query._worker_key && workers[query._worker_key]) {
31-
workers[query._worker_key].acknowledged = true;
32-
logger.debug("[%s] Acknowledged", query._browser_string);
39+
worker = workers[query._worker_key] || {};
40+
worker.acknowledged = true;
41+
logger.debug("[%s] Acknowledged", getTestBrowserInfo(worker));
3342
}
3443

3544
fs.exists(filename, function(exists) {
@@ -136,7 +145,7 @@ exports.Server = function Server(bsClient, workers) {
136145
handlers = {
137146
"_progress": function progressHandler(uri, body, request, response) {
138147
var uuid = request.headers['x-worker-uuid'];
139-
var worker = workers[uuid];
148+
var worker = workers[uuid] || {};
140149
query = "";
141150
try {
142151
query = parseBody(body);
@@ -147,7 +156,7 @@ exports.Server = function Server(bsClient, workers) {
147156

148157
if (query.tracebacks) {
149158
query.tracebacks.forEach(function(traceback) {
150-
logger.info(chalk.red("[%s] Error:"), worker.string, formatTraceback(traceback));
159+
logger.info(chalk.red("[%s] Error:"), getTestBrowserInfo(worker), formatTraceback(traceback));
151160
});
152161
}
153162
response.end();
@@ -159,34 +168,34 @@ exports.Server = function Server(bsClient, workers) {
159168
query = parseBody(body);
160169
} catch (e) {}
161170
var uuid = request.headers['x-worker-uuid'];
162-
var worker = workers[uuid];
171+
var worker = workers[uuid] || {};
163172

164173
if (query === null) {
165174
logger.info("[%s] Null response from remote Browser", request.headers['x-browser-string']);
166175
} else {
167176
if (query.tracebacks && query.tracebacks.length > 0) {
168-
logger.info("Tracebacks:");
177+
logger.info(chalk["red"]("[%s] Tracebacks:"), getTestBrowserInfo(worker));
169178
query.tracebacks.forEach(function(traceback) {
170179
logger.info(traceback);
171180
});
172181
}
173182
var color = query.failed ? "red" : "green";
174-
logger.info(chalk[color]("[%s] Completed in %d milliseconds. %d of %d passed, %d failed."), request.headers['x-browser-string'], query.runtime, query.passed, query.total, query.failed);
183+
logger.info(chalk[color]("[%s] Completed in %d milliseconds. %d of %d passed, %d failed."), getTestBrowserInfo(worker), query.runtime, query.passed, query.total, query.failed);
175184
config.status += query.failed;
176185
}
177186

178187
if (worker) {
179188
bsClient.takeScreenshot(worker.id, function(error, screenshot) {
180189
if (!error && screenshot.url) {
181-
logger.info('[%s] ' + chalk['yellow']('Screenshot') + ': %s', worker.string, screenshot.url);
190+
logger.info('[%s] ' + chalk['yellow']('Screenshot') + ': %s', getTestBrowserInfo(worker), screenshot.url);
182191
}
183192

184193
bsClient.terminateWorker(worker.id, function() {
185194
if (!workers[uuid]) {
186195
return;
187196
}
188197

189-
logger.debug('[%s] Terminated', worker.string);
198+
logger.debug('[%s] Terminated', getTestBrowserInfo(worker));
190199

191200
clearTimeout(workers[uuid].activityTimeout);
192201
delete workers[uuid];
@@ -199,7 +208,7 @@ exports.Server = function Server(bsClient, workers) {
199208
config.status = 1;
200209
}
201210

202-
process.exit(config.status);
211+
process.kill(process.pid, 'SIGTERM');
203212
}
204213
});
205214
});

lib/utils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ var alertBrowserStack = function alertBrowserStack(subject, content, params, fn)
4949
if (typeof params === 'function') {
5050
} else {
5151
fn = function() {
52-
process.exit(1);
52+
process.kill(process.pid, 'SIGINT');
5353
};
5454
}
5555
}

0 commit comments

Comments
 (0)