loadmill
Version:
A node.js module for running load tests and functional tests on loadmill.com
230 lines (229 loc) • 9.04 kB
JavaScript
;
exports.__esModule = true;
exports.TESTING_ORIGIN = exports.getLogger = exports.Logger = exports.sleep = exports.readRawParams = exports.toLoadmillParams = exports.isUUID = exports.isString = exports.isEmptyObj = exports.filterTags = exports.filterLabels = exports.convertArrToLabelQueryParams = exports.convertStrToArr = exports.printTestSuitesRunsReport = exports.printOnlyFailedFlowRunsReport = exports.getObjectAsString = exports.FLOW_STATUS = void 0;
var tslib_1 = require("tslib");
var fs = require("fs");
var isEmpty = require("lodash/isEmpty");
var isAString = require("lodash/isString");
var util = require("util");
var CLI_COLORS = {
RED: '\x1b[31m',
GREEN: '\x1b[32m',
YELLOW: '\x1b[33m',
GREY: '\x1b[90m',
DEFAULT: '\x1b[0m'
};
var STATUSES = {
PASSED: "PASSED",
FAILED: "FAILED",
STOPPED: "STOPPED",
FLAKY: "FLAKY"
};
var FLOW_STATUS;
(function (FLOW_STATUS) {
FLOW_STATUS["DISABLED"] = "Disabled";
FLOW_STATUS["DRAFT"] = "Draft";
FLOW_STATUS["EVALUATING"] = "Evaluating";
FLOW_STATUS["ACTIVE"] = "Active";
})(FLOW_STATUS = exports.FLOW_STATUS || (exports.FLOW_STATUS = {}));
;
var HALF_TAB = " ";
function failedFlowLine(f, colors) {
return "" + HALF_TAB + HALF_TAB + "Flow " + f.description + " - " + coloredFlowLine(f.status, colors);
}
var FAILED_STATUS_LINE = "status: '" + CLI_COLORS.RED + "FAILED" + CLI_COLORS.DEFAULT + "'";
var PASSED_STATUS_LINE = "status: '" + CLI_COLORS.GREEN + "PASSED" + CLI_COLORS.DEFAULT + "'";
var getObjectAsString = function (obj, colors) {
// trim response body to length of 255
if (obj.response && obj.response.text && obj.response.text.length > 1024) {
obj.response.text = obj.response.text.substring(0, 1024) + ' [trimmed]';
}
var str = util.inspect(obj, { showHidden: false, depth: null, compact: false });
if (colors) {
str = str
.replace(/status:\s*'FAILED'/g, FAILED_STATUS_LINE)
.replace(/status:\s*'PASSED'/g, PASSED_STATUS_LINE);
}
return str;
};
exports.getObjectAsString = getObjectAsString;
var coloredFlowLine = function (status, colors) {
if (!colors) {
return status;
}
return "" + getStatusColor(status) + status + CLI_COLORS.DEFAULT;
};
var printOnlyFailedFlowRunsReport = function (testSuitesRuns, logger, colors) {
if (Array.isArray(testSuitesRuns) && testSuitesRuns.length > 0) {
var total_1 = 0;
var totalFailed_1 = 0;
var lines_1 = [];
testSuitesRuns.forEach(function (suiteRun) {
var flowRuns = suiteRun.flowRuns;
if (flowRuns && Array.isArray(flowRuns)) {
total_1 += flowRuns.length;
var suiteLines_1 = [];
flowRuns.forEach(function (f) {
if (f.status === STATUSES.FAILED && f.flowStatus === FLOW_STATUS.ACTIVE) {
suiteLines_1.push(failedFlowLine(f, colors));
}
});
if (suiteLines_1.length > 0) {
lines_1.push("");
lines_1.push(HALF_TAB + "Test Suite " + suiteRun.description + " has failed flow:");
lines_1 = lines_1.concat(suiteLines_1);
lines_1.push(HALF_TAB + "More info can be found at " + suiteRun.url);
totalFailed_1 += suiteLines_1.length;
}
}
});
if (lines_1.length > 0) {
logger.log("");
logger.log("Test Plan errors report - " + CLI_COLORS.RED + totalFailed_1 + " flows have failed " + CLI_COLORS.DEFAULT + " (out of " + total_1 + " total).");
lines_1.forEach(function (l) { return logger.log(l); });
}
}
};
exports.printOnlyFailedFlowRunsReport = printOnlyFailedFlowRunsReport;
var printTestSuitesRunsReport = function (testPlanDescription, testSuitesRuns, logger, colors) {
if (Array.isArray(testSuitesRuns) && testSuitesRuns.length > 0) {
logger.log("");
logger.log("Test Plan [" + testPlanDescription + "] Suites Runs report:");
testSuitesRuns.map(function (ts) { return logger.log("Test Suite " + ts.description + " - " + coloredFlowLine(ts.status, colors)); });
}
};
exports.printTestSuitesRunsReport = printTestSuitesRunsReport;
var convertStrToArr = function (strWithCommas) {
return typeof strWithCommas !== "string" ? null : strWithCommas.split(",");
};
exports.convertStrToArr = convertStrToArr;
var convertArrToLabelQueryParams = function (arr) {
return '&label=' + arr.join('&label=');
};
exports.convertArrToLabelQueryParams = convertArrToLabelQueryParams;
var filterLabels = function (labels) {
if (!Array.isArray(labels)) {
throw new Error("lables need be in array format i.e. ['my label', 'another label']. Got " + labels);
}
if (labels.every(function (l) { return l == ''; })) {
return null;
}
return labels.filter(function (l) { return (typeof l === 'string' || typeof l === 'number') && l !== ''; });
};
exports.filterLabels = filterLabels;
var filterTags = function (tags) {
if (!Array.isArray(tags)) {
throw new Error("Tags need be in array format i.e. ['tag1', 'another tag']. Got " + tags);
}
if (tags.every(function (l) { return l == ''; })) {
return null;
}
return tags.filter(function (l) { return (typeof l === 'string') && l !== ''; });
};
exports.filterTags = filterTags;
var isEmptyObj = function (obj) { return isEmpty(obj); };
exports.isEmptyObj = isEmptyObj;
var isString = function (obj) { return isAString(obj); };
exports.isString = isString;
var isUUID = function (s) {
return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(s);
};
exports.isUUID = isUUID;
var toLoadmillParams = function (rawParams) {
var parameters = {};
rawParams.forEach(function (pair) {
if (!pair) {
return;
}
var pivot = pair.indexOf('=');
if (pivot <= 0) {
throw new Error("Invalid parameter assignment: " + pair);
}
var name = pair.slice(0, pivot);
parameters[name] = pair.slice(pivot + 1, pair.length);
});
return parameters;
};
exports.toLoadmillParams = toLoadmillParams;
var readRawParams = function (filePath) {
try {
return fs.readFileSync(filePath, 'utf-8').split(/\r?\n/);
}
catch (err) {
throw new Error("Couldn't find file '" + filePath + "'. Please check file path and permissions.");
}
};
exports.readRawParams = readRawParams;
var sleep = function (ms) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, new Promise(function (r) { return setTimeout(r, ms); })];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); };
exports.sleep = sleep;
var Logger = /** @class */ (function () {
function Logger(verbose, colors) {
var _this = this;
this.verb = false;
this.colors = false;
this.log = function (msg) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return console.log.apply(console, tslib_1.__spreadArray([msg], args));
};
this.error = function (err) {
if (_this.colors) {
console.log(CLI_COLORS.RED, err, CLI_COLORS.DEFAULT);
}
else {
console.log(err);
}
};
this.warn = function (wrn) {
if (_this.colors) {
console.log(CLI_COLORS.YELLOW, wrn, CLI_COLORS.DEFAULT);
}
else {
console.log(wrn);
}
};
this.verbose = function (msg) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return _this.verb ? console.log.apply(console, tslib_1.__spreadArray([msg], args)) : void (0);
};
this.verb = verbose;
this.colors = colors;
}
return Logger;
}());
exports.Logger = Logger;
var getLogger = function (testArgs) {
var verbose = testArgs && testArgs.verbose ? testArgs.verbose : false;
var colors = testArgs && testArgs.colors ? testArgs.colors : false;
return new Logger(verbose, colors);
};
exports.getLogger = getLogger;
var getStatusColor = function (status) {
switch (status) {
case STATUSES.PASSED:
return CLI_COLORS.GREEN;
case STATUSES.FAILED:
return CLI_COLORS.RED;
case STATUSES.STOPPED:
return CLI_COLORS.GREY;
case STATUSES.FLAKY:
return CLI_COLORS.YELLOW;
default:
return CLI_COLORS.DEFAULT;
}
};
exports.TESTING_ORIGIN = process.env.LOADMILL_ORIGIN || "https://app.loadmill.com";