Improve console logging output for saucelabs tests, and explicitly close sauce connect

This commit is contained in:
pimterry
2013-10-27 19:30:42 +00:00
parent 3f4c92d739
commit 34c8d8dd2e

View File

@@ -19,6 +19,7 @@ var server = connect.createServer(
// Set up sauce connect so we can use this server from saucelabs // Set up sauce connect so we can use this server from saucelabs
var tunnelTimeout = 10000; var tunnelTimeout = 10000;
var tunnel = new SauceTunnel(username, accessKey, null, true, tunnelTimeout); var tunnel = new SauceTunnel(username, accessKey, null, true, tunnelTimeout);
console.log("Opening sauce connect tunnel..."); console.log("Opening sauce connect tunnel...");
tunnel.start(function (success) { tunnel.start(function (success) {
if (success) { if (success) {
@@ -39,52 +40,68 @@ function runTests() {
console.log("Starting saucelabs tests: " + JSON.stringify(testDefinition)); console.log("Starting saucelabs tests: " + JSON.stringify(testDefinition));
request.post( request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests', {
'https://saucelabs.com/rest/v1/' + username + '/js-tests', auth: { user: username, pass: accessKey },
{ json: testDefinition
auth: { user: username, pass: accessKey }, }, function (error, response, body) {
json: testDefinition if (response.statusCode == 200) {
}, var testIdentifier = body;
function (error, response, body) { waitForTestCompletion(testIdentifier);
if (response.statusCode == 200) { } else {
var testIdentifier = body; console.error("Failed to submit test to SauceLabs, status " + response.statusCode + ", body:\n" + JSON.stringify(body));
waitForTestCompletion(testIdentifier); process.exit(3);
} else {
console.error("Failed to submit test to SauceLabs, status " + response.statusCode + ", body:\n" + JSON.stringify(body));
process.exit(3);
}
} }
); });
} }
function waitForTestCompletion(testIdentifier) { function waitForTestCompletion(testIdentifier) {
request.post( request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests/status', {
'https://saucelabs.com/rest/v1/' + username + '/js-tests/status', auth: { user: username, pass: accessKey },
{ json: testIdentifier
auth: { user: username, pass: accessKey }, }, function (error, response, body) {
json: testIdentifier if (response.statusCode == 200) {
}, if (body["completed"] == true) {
function (error, response, body) { handleTestResults(body["js tests"]);
if (response.statusCode == 200) {
console.log(JSON.stringify(body));
if (body["completed"] == true) {
handleTestResults(body["js tests"]);
} else {
waitForTestCompletion(testIdentifier);
}
} else { } else {
console.error("Failed to check test status on SauceLabs, status " + response.statusCode + ", body:\n" + JSON.stringify(body)); waitForTestCompletion(testIdentifier);
process.exit(4);
} }
} else {
console.error("Failed to check test status on SauceLabs, status " + response.statusCode + ", body:\n" + JSON.stringify(body));
process.exit(4);
} }
); });
} }
function handleTestResults(results) { function handleTestResults(results) {
var allTestsSuccessful = results.reduce(function (passedSoFar, result) { var allTestsSuccessful = results.reduce(function (passedSoFar, test) {
return passedSoFar && !!result['passed'] return passedSoFar && test.result.failed === 0;
}, true); }, true);
console.log(allTestsSuccessful ? "Test passed" : "Test failed"); if (allTestsSuccessful) {
process.exit(allTestsSuccessful ? 0 : 1); console.log("Tests passed");
} else {
var failingTests = results.filter(function (test) {
return test.result.failed !== 0;
});
var failingPlatforms = failingTests.map(function (test) {
return test.platform;
});
console.error("Tests failed on platforms: " + JSON.stringify(failingPlatforms));
failingTests.forEach(function (test) {
var platform = JSON.stringify(test.platform);
if (test.result.failed) {
console.error(test.result.failed + " failures on " + platform + ". See " + test.url + " for details.");
} else {
console.error("Testing on " + platform + " failed; no results available. See " + test.url + " for details.");
}
});
}
console.log("Shutting down sauce connect tunnel...");
tunnel.stop(function () {
process.exit(allTestsSuccessful ? 0 : 1);
})
} }