Adding saucelabs check to monitor

pull/248/head
Tim Robinson 2016-02-01 19:37:48 +00:00
rodzic 803c4ccf4a
commit 51b667363c
1 zmienionych plików z 171 dodań i 0 usunięć

171
node_modules/c9/saucelabs.js wygenerowano vendored 100644
Wyświetl plik

@ -0,0 +1,171 @@
var fs = require('fs');
var child_process = require('child_process');
var dbg = require("debug")("saucelabs:helpers");
var SLTOKEN = "0C309258-40FA-4138-91AF-C226F17C6954";
var ENDPOINT1 = "https://saucelabs.com/rest/v1/users";
var PROMOCODE = "C9HotSauce";
var FILE_LASTUSERINDEX = "./lastuserindex";
var FILE_USERS_CREATED = "./users_created";
var FILE_PROMOTED_ACCOUNTS_CREATED = "./promoted_accounts_created";
var EXPECTED_RESULT_PROMOTE = "7200 Sauce manual minutes";
var USERNAMESTART = "c9sauce";
var INDEXTAG = "_INDEX_";
var EMAIL_TAGGED = "test+sl" + INDEXTAG + "@c9.io";
function getRandomChars(len) {
var text = "";
if (!len) len = 5;
// no capitals because of https://cloud9ide.jira.com/browse/CLOUD-938
//var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var possible = "abcdefghijklmnopqrstuvwxyz0123456789";
for (var i=0; i < len; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
}
function readFile(file) {
var data = fs.readFileSync(file, "utf-8");
return data;
}
function writeFile(file, text) {
fs.writeFileSync(file, text+'\n', "utf-8");
return;
}
function appendFile(file, text) {
fs.appendFileSync(file, text+'\n');
return;
}
function createUser(username, password, email, callback) {
dbg("createUser()::username: " + username);
dbg("createUser()::password: " + password);
dbg("createUser()::email: " + email);
var enc_email = encodeURIComponent(email);
var postdata = '{"username": "' + username + '", '
+ '"password": "' + password + '", '
+ '"email": "' + enc_email + '", '
+ '"plan": "free", '
+ '"token": "' + SLTOKEN + '"}';
dbg("postdata: " + postdata);
child_process.execFile("curl", [
"-Ss",
"-X", "POST",
"-d", postdata,
ENDPOINT1
],
function(err, stdout, stderr) {
dbg("\nerr: " + JSON.stringify(err, null, 4));
dbg("\nstdout:\n" + stdout);
dbg("\nstderr:\n" + stderr);
if (err)
return callback("Error executing curl to create Saucelabs user (error: " + err.message + ")");
var response;
try {
response = JSON.parse(stdout);
}
catch (e) {
return callback("Could not parse curl response (createUser): " + stdout);
}
if (response.error)
return callback(response.error);
var user_object = {
username: username,
password: password,
access_key: response.access_key,
email: enc_email
};
callback(null, user_object);
}
)}
function promoteUser(user_object, callback) {
dbg("promoteUser()::username: " + user_object.username);
dbg("createUser()::password: " + user_object.password);
dbg("createUser()::email: " + user_object.email);
dbg("promoteUser()::access_key: " + user_object.access_key);
var postdata = '{"promocode": "' + PROMOCODE + '"}';
var url = "https://" + user_object.username + ":" + user_object.access_key + "@saucelabs.com/rest/v1/users/" + user_object.username + "/promotion/submit";
dbg("url: " + url);
child_process.execFile("curl", [
"-Ss",
"-X", "POST",
"-d", postdata,
url
],
function(err, stdout, stderr) {
dbg("\nerr: " + JSON.stringify(err, null, 4));
dbg("\nstdout:\n" + stdout);
dbg("\nstderr:\n" + stderr);
if (err || stdout.indexOf("error") != -1) {
var errmsg = "Error executing curl to promote Saucelabs user (";
errmsg += (err.message ? err.message+", " : "");
errmsg += "stdout: " + stdout + ")";
return callback(errmsg);
}
if (stdout.indexOf(EXPECTED_RESULT_PROMOTE) == -1)
return callback("Unexpected result promoting Saucelabs user (stdout: " + stdout + ")");
user_object.promoted = true;
callback(null, user_object);
}
)}
function createAndPromoteUser(callback) {
var lastIndex = readFile(FILE_LASTUSERINDEX);
dbg("last index: " + lastIndex);
var index = parseInt(lastIndex, 10) + 1;
dbg("new index: " + index);
var password = getRandomChars(8);
var email = EMAIL_TAGGED.replace(INDEXTAG, index);
var username = USERNAMESTART+index;
createUser(username, password, email, function(err, res1) {
if (err) {
console.error("[ERR] Error occurred: ", JSON.stringify(err));
process.exit(2);
}
dbg("writing last index file: " + index);
writeFile(FILE_LASTUSERINDEX, index);
var readable_result = JSON.stringify(res1);
appendFile(FILE_USERS_CREATED, readable_result);
promoteUser(res1, function(err, res2) {
if (err) {
console.error("[ERR] Error occurred: ", JSON.stringify(err));
process.exit(3);
}
readable_result = JSON.stringify(res2);
appendFile(FILE_PROMOTED_ACCOUNTS_CREATED, readable_result);
console.info("----> user created successfully ("+res2.username+")");
callback(null, readable_result);
});
});
}
module.exports = {
createAndPromoteUser: createAndPromoteUser
};