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