First round of sauce support cleanup.

This commit is contained in:
John-David Dalton
2013-10-28 09:29:57 -07:00
parent e538da3959
commit a1383c34b5
3 changed files with 96 additions and 95 deletions

View File

@@ -6,11 +6,8 @@ node_js:
env: env:
global: global:
- BIN="node" BUILD=false MAKE=false OPTION="" SAUCELABS=false - BIN="node" BUILD=false MAKE=false OPTION="" SAUCELABS=false
- SAUCE_USERNAME="jdalton"
# SauceLabs credentials: - secure: "woILQltl1pI3DgadZ5NrcqntdPvnRmQBwIVNZL91Ht5d9snIhgyAixI6xNAS8F8BzD9RzqzVPHay5sHfn+GhNaojcaiHs1nXAbdyclevMyfP+3MQ1HGfMSU0bv1GdT35LJ+C0u4Y3SuuZSbBlNEeLXRPMngPZahf4xL8RsZz/is="
- SAUCE_USERNAME="pimterry"
- secure: "KBETrs7sRrU3V8itVgLzBUVkzP9XXpAEZVjbd8icoNL9eVW3h4Kk5g/bOa06IAml0ThnMZztIwMKkplCIam6W/Cv+eIOiQT2kkG32lHFwbVXEkbq+rKj8XmpRmXBf/Th63V+u5GMVmQlYrIfdXju6cFfSEZ2uG8SHVg9hFyyf8c="
matrix: matrix:
- BUILD="compat" - BUILD="compat"
- BUILD="modern" - BUILD="modern"
@@ -54,7 +51,7 @@ before_install:
- "[ $BIN == 'rhino' ] && echo -e '#!/bin/sh\\njava -jar /opt/rhino-1.7R5/js.jar $@' | sudo tee /usr/local/bin/rhino && sudo chmod +x /usr/local/bin/rhino || true" - "[ $BIN == 'rhino' ] && echo -e '#!/bin/sh\\njava -jar /opt/rhino-1.7R5/js.jar $@' | sudo tee /usr/local/bin/rhino && sudo chmod +x /usr/local/bin/rhino || true"
- "[ $BIN == 'ringo' ] && wget http://ringojs.org/downloads/ringojs-0.9.zip && sudo unzip ringojs-0.9 -d /opt && rm ringojs-0.9.zip || true" - "[ $BIN == 'ringo' ] && wget http://ringojs.org/downloads/ringojs-0.9.zip && sudo unzip ringojs-0.9 -d /opt && rm ringojs-0.9.zip || true"
- "[ $BIN == 'ringo' ] && sudo ln -s /opt/ringojs-0.9/bin/ringo /usr/local/bin/ringo && sudo chmod +x /usr/local/bin/ringo || true" - "[ $BIN == 'ringo' ] && sudo ln -s /opt/ringojs-0.9/bin/ringo /usr/local/bin/ringo && sudo chmod +x /usr/local/bin/ringo || true"
- "[ $SAUCELABS != false ] && npm install connect request sauce-tunnel || true" - "[ $SAUCELABS != false ] && npm i connect request sauce-tunnel || true"
script: script:
- "[ $BIN == 'istanbul' ] && $BIN cover ./test/test.js || true" - "[ $BIN == 'istanbul' ] && $BIN cover ./test/test.js || true"
- "[ $BUILD != false ] && [ $BUILD != 'compat' ] && MAKE=true || true" - "[ $BUILD != false ] && [ $BUILD != 'compat' ] && MAKE=true || true"

View File

@@ -16,13 +16,6 @@
<script src="./asset/test-ui.js"></script> <script src="./asset/test-ui.js"></script>
<div id="qunit"></div> <div id="qunit"></div>
<div id="exports"></div> <div id="exports"></div>
<script>
// Report test results in a global, for saucelabs
window.global_test_results = null;
QUnit.done(function (results) {
window.global_test_results = results;
});
</script>
<script> <script>
// set bad shims // set bad shims
Array._isArray = Array.isArray; Array._isArray = Array.isArray;
@@ -79,6 +72,12 @@
delete Object._defineProperty; delete Object._defineProperty;
delete Object._keys; delete Object._keys;
// report test results in a global for Sauce Labs
var global_test_results;
QUnit.done(function(results) {
global_test_results = results;
});
// load Lo-Dash again to overwrite the existing `_` value // load Lo-Dash again to overwrite the existing `_` value
document.write('<script src="' + (ui.isModularize ? '../lodash.js' : ui.buildPath) + '"><\/script>'); document.write('<script src="' + (ui.isModularize ? '../lodash.js' : ui.buildPath) + '"><\/script>');

View File

@@ -1,108 +1,113 @@
var connect = require('connect'); var connect = require('connect'),
var path = require('path'); path = require('path'),
var SauceTunnel = require('sauce-tunnel'); request = require('request'),
var request = require('request'); SauceTunnel = require('sauce-tunnel');
var port = 8081,
username = process.env.SAUCE_USERNAME,
accessKey = process.env.SAUCE_ACCESS_KEY;
var port = 8081;
var username = process.env['SAUCE_USERNAME'];
var accessKey = process.env['SAUCE_ACCESS_KEY'];
var platforms = [ var platforms = [
["Windows 7", "chrome", ""], ['Windows 7', 'chrome', ''],
["Windows 7", "firefox", "24"], ['Windows 7', 'firefox', '24'],
["Windows 7", "internet explorer", "9"] ['Windows 7', 'internet explorer', '9']
]; ];
// Create a web server for the local dir // create a web server for the local dir
var server = connect.createServer( var server = connect.createServer(
connect.static(path.resolve(__dirname, '..')) connect.static(path.resolve(__dirname, '..'))
).listen(port); ).listen(port);
// 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); tunnel = new SauceTunnel(username, accessKey, null, true, tunnelTimeout);
console.log("Opening sauce connect tunnel..."); console.log('Opening sauce connect tunnel...');
tunnel.start(function (success) {
if (success) { tunnel.start(function(success) {
console.log("Sauce connect tunnel opened"); if (success) {
runTests(); console.log('Sauce connect tunnel opened');
} else { runTests();
console.error("Failed to open sauce connect tunnel") } else {
process.exit(2); console.error('Failed to open sauce connect tunnel')
} process.exit(2);
}
}); });
function runTests() { function runTests() {
var testDefinition = { var testDefinition = {
platforms: platforms, 'framework': 'qunit',
url: "http://localhost:" + port + "/test/index.html", 'platforms': platforms,
framework: "qunit" 'url': 'http://localhost:' + port + '/test/index.html'
}; };
console.log("Starting saucelabs tests: " + JSON.stringify(testDefinition)); console.log('Starting saucelabs tests: ' + JSON.stringify(testDefinition));
request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests', { request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests', {
auth: { user: username, pass: accessKey }, 'auth': { 'user': username, 'pass': accessKey },
json: testDefinition 'json': testDefinition
}, function (error, response, body) { }, function(error, response, body) {
if (response.statusCode == 200) { if (response.statusCode == 200) {
var testIdentifier = body; var testIdentifier = body;
waitForTestCompletion(testIdentifier); waitForTestCompletion(testIdentifier);
} else { } else {
console.error("Failed to submit test to SauceLabs, status " + response.statusCode + ", body:\n" + JSON.stringify(body)); console.error('Failed to submit test to SauceLabs, status ' + response.statusCode + ', body:\n' + JSON.stringify(body));
process.exit(3); process.exit(3);
} }
}); });
} }
function waitForTestCompletion(testIdentifier) { function waitForTestCompletion(testIdentifier) {
request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests/status', { request.post('https://saucelabs.com/rest/v1/' + username + '/js-tests/status', {
auth: { user: username, pass: accessKey }, 'auth': { 'user': username, 'pass': accessKey },
json: testIdentifier 'json': testIdentifier
}, function (error, response, body) { }, function(error, response, body) {
if (response.statusCode == 200) { if (response.statusCode == 200) {
if (body["completed"] == true) { if (body.completed) {
handleTestResults(body["js tests"]); 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, test) { var allTestsSuccessful = results.reduce(function(passedSoFar, test) {
return passedSoFar && test.result.failed === 0; return passedSoFar && test.result.failed === 0;
}, true); }, true);
if (allTestsSuccessful) { if (allTestsSuccessful) {
console.log("Tests passed"); console.log('Tests passed');
} else { }
var failingTests = results.filter(function (test) { else {
return test.result.failed !== 0; 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)); var failingPlatforms = failingTests.map(function(test) {
return test.platform;
});
failingTests.forEach(function (test) { console.error('Tests failed on platforms: ' + JSON.stringify(failingPlatforms));
var platform = JSON.stringify(test.platform);
if (test.result.failed) { failingTests.forEach(function(test) {
console.error(test.result.failed + " failures on " + platform + ". See " + test.url + " for details."); var platform = JSON.stringify(test.platform);
} else {
console.error("Testing on " + platform + " failed; no results available. See " + test.url + " for details.");
}
});
}
console.log("Shutting down sauce connect tunnel..."); if (test.result.failed) {
tunnel.stop(function () { console.error(test.result.failed + ' failures on ' + platform + '. See ' + test.url + ' for details.');
process.exit(allTestsSuccessful ? 0 : 1); } 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);
})
} }