UNPKG

loadmill

Version:

A node.js module for running load tests and functional tests on loadmill.com

230 lines (229 loc) 9.04 kB
"use strict"; 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";