kopia lustrzana https://github.com/c9/core
Adding saucelabs check to monitor
rodzic
803c4ccf4a
commit
51b667363c
|
@ -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
|
||||
};
|
Ładowanie…
Reference in New Issue