From 3501a1c61097dbc1a832966324d1b95116bf7a56 Mon Sep 17 00:00:00 2001 From: Sourav Date: Fri, 4 Mar 2022 12:10:06 +0530 Subject: [PATCH 01/10] force-upload should upload npm packages --- bin/helpers/checkUploaded.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/helpers/checkUploaded.js b/bin/helpers/checkUploaded.js index a05c87b3..a371e3e0 100644 --- a/bin/helpers/checkUploaded.js +++ b/bin/helpers/checkUploaded.js @@ -82,7 +82,7 @@ const checkUploadedMd5 = (bsConfig, args, instrumentBlocks) => { zipUrlPresent: false, packageUrlPresent: false, }; - if (args["force-upload"] && !utils.isTrueString(bsConfig.run_settings.cache_dependencies)) { + if (args["force-upload"]) { return resolve(obj); } From b003410d6338fa23d779dffa1c3159bdc80e1672 Mon Sep 17 00:00:00 2001 From: Sourav Date: Fri, 4 Mar 2022 14:19:57 +0530 Subject: [PATCH 02/10] fix purge upload bar exception --- bin/helpers/zipUpload.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/helpers/zipUpload.js b/bin/helpers/zipUpload.js index 8e54c6fd..31982deb 100644 --- a/bin/helpers/zipUpload.js +++ b/bin/helpers/zipUpload.js @@ -147,8 +147,8 @@ const uploadCypressZip = (bsConfig, md5data, packageData) => { }); return resolve(obj); }).catch((error) => { - purgeUploadBar(testZipUploadObj); - purgeUploadBar(npmPackageZipUploadObj); + testZipUploadObj.bar1 && purgeUploadBar(testZipUploadObj); + npmPackageZipUploadObj.bar1 && purgeUploadBar(npmPackageZipUploadObj); return reject(error); }) }) From d0a68512247d93a01bb18747ed802357f61444f0 Mon Sep 17 00:00:00 2001 From: Sourav Date: Fri, 4 Mar 2022 14:58:13 +0530 Subject: [PATCH 03/10] update testcases --- test/unit/bin/helpers/checkUploaded.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/unit/bin/helpers/checkUploaded.js b/test/unit/bin/helpers/checkUploaded.js index f683b7dc..6d98a5ab 100644 --- a/test/unit/bin/helpers/checkUploaded.js +++ b/test/unit/bin/helpers/checkUploaded.js @@ -204,7 +204,7 @@ describe("checkUploaded", () => { }); }); - it("resolves with zipUrlPresent false and packageUrlPresent true if force-upload enabled and cache_dependencies enabled", () => { + it("resolves with zipUrlPresent false and packageUrlPresent false if force-upload enabled and cache_dependencies enabled", () => { let requestStub = sandbox .stub(request, "post") .yields(null, { statusCode: 200 }, '{"npmPackageUrl":"bs://random_hashid2"}'); @@ -219,11 +219,12 @@ describe("checkUploaded", () => { bsConfig.run_settings.cache_dependencies = true return checkUploadedMd5rewire(bsConfig, {"force-upload": true}, instrumentBlocks) .then((data) => { - chai.assert.deepEqual(data, { zipUrlPresent: false, packageUrlPresent: true, npm_package_md5sum: 'random_md5sum', npmPackageUrl: 'bs://random_hashid2' }) - sinon.assert.calledOnce(requestStub); - sinon.assert.calledOnce(checkSpecsMd5Stub); + chai.assert.deepEqual(data, { zipUrlPresent: false, packageUrlPresent: false }) + sinon.assert.notCalled(requestStub); + sinon.assert.notCalled(checkSpecsMd5Stub); }) .catch((_error) => { + console.log(_error) chai.assert.fail("Promise error"); }); }); From 1da9162f3620a6fdb8e497ae487dfbbb8bcc69a4 Mon Sep 17 00:00:00 2001 From: Sourav Date: Mon, 7 Mar 2022 15:12:35 +0530 Subject: [PATCH 04/10] show error stacktrace with custom messages --- bin/commands/info.js | 3 +++ bin/helpers/build.js | 6 +++++- bin/helpers/buildArtifacts.js | 5 +++++ bin/helpers/reporterHTML.js | 6 +++++- bin/helpers/utils.js | 10 +++++++++- bin/helpers/zipUpload.js | 2 ++ test/unit/bin/commands/info.js | 18 ++++++++++++------ test/unit/bin/helpers/build.js | 7 ++++++- test/unit/bin/helpers/reporterHTML.js | 24 ++++++++++++++++-------- test/unit/bin/helpers/zipUpload.js | 6 ++++-- 10 files changed, 67 insertions(+), 20 deletions(-) diff --git a/bin/commands/info.js b/bin/commands/info.js index b12eb0b1..438313b3 100644 --- a/bin/commands/info.js +++ b/bin/commands/info.js @@ -47,6 +47,7 @@ module.exports = function info(args, rawArgs) { errorCode = 'api_failed_build_info'; logger.info(message); + logger.info(utils.formatRequest(err, resp, body)); } else { let build = null; try { @@ -66,6 +67,7 @@ module.exports = function info(args, rawArgs) { message = Constants.userMessages.API_DEPRECATED; logger.info(message); } + logger.info(utils.formatRequest(err, resp, body)); } else if (resp.statusCode != 200) { messageType = Constants.messageTypes.ERROR; errorCode = 'api_failed_build_info'; @@ -80,6 +82,7 @@ module.exports = function info(args, rawArgs) { message = Constants.userMessages.BUILD_INFO_FAILED; logger.error(message); } + logger.info(utils.formatRequest(err, resp, body)); } else { messageType = Constants.messageTypes.SUCCESS; message = `Build info for build id: \n ${JSON.stringify( diff --git a/bin/helpers/build.js b/bin/helpers/build.js index be664c74..161a7e6c 100644 --- a/bin/helpers/build.js +++ b/bin/helpers/build.js @@ -4,7 +4,8 @@ const request = require('request'); const config = require('./config'), capabilityHelper = require("../helpers/capabilityHelper"), Constants = require('../helpers/constants'), - utils = require('../helpers/utils'); + utils = require('../helpers/utils'), + logger = require('../helpers/logger').winstonLogger; const createBuild = (bsConfig, zip) => { return new Promise(function (resolve, reject) { @@ -24,6 +25,7 @@ const createBuild = (bsConfig, zip) => { request.post(options, function (err, resp, body) { if (err) { + logger.info(utils.formatRequest(err, resp, body)); reject(err); } else { let build = null; @@ -37,9 +39,11 @@ const createBuild = (bsConfig, zip) => { if (build) { resolve(build.message); } else { + logger.info(utils.formatRequest(err, resp, body)); reject(Constants.userMessages.API_DEPRECATED); } } else if (resp.statusCode != 201) { + logger.info(utils.formatRequest(err, resp, body)); if (build) { reject(`${Constants.userMessages.BUILD_FAILED} Error: ${build.message}`); } else { diff --git a/bin/helpers/buildArtifacts.js b/bin/helpers/buildArtifacts.js index 1be18432..130015c1 100644 --- a/bin/helpers/buildArtifacts.js +++ b/bin/helpers/buildArtifacts.js @@ -162,6 +162,7 @@ const sendUpdatesToBstack = async (bsConfig, buildId, args, options, rawArgs) => request.post(options, function (err, resp, data) { if(err) { utils.sendUsageReport(bsConfig, args, err, Constants.messageTypes.ERROR, 'api_failed_build_artifacts_status_update', null, rawArgs); + logger.info(utils.formatRequest(err, resp, body)); reject(err); } else { try { @@ -203,6 +204,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => { let buildDetails = null; request.get(options, async function (err, resp, body) { if(err) { + logger.info(utils.formatRequest(err, resp, body)); utils.sendUsageReport(bsConfig, args, err, Constants.messageTypes.ERROR, 'api_failed_build_artifacts', null, rawArgs); process.exitCode = Constants.ERROR_EXIT_CODE; } else { @@ -211,6 +213,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => { if(resp.statusCode != 200) { logger.error('Downloading the build artifacts failed.'); logger.error(`Error: Request failed with status code ${resp.statusCode}`) + logger.info(utils.formatRequest(err, resp, body)); utils.sendUsageReport(bsConfig, args, buildDetails, Constants.messageTypes.ERROR, 'api_failed_build_artifacts', null, rawArgs); process.exitCode = Constants.ERROR_EXIT_CODE; } else { @@ -220,6 +223,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => { messageType = Constants.messageTypes.ERROR; message = Constants.userMessages.DOWNLOAD_BUILD_ARTIFACTS_FAILED.replace('', buildId).replace('', BUILD_ARTIFACTS_FAIL_COUNT); logger.error(message); + logger.info(utils.formatRequest(err, resp, body)); process.exitCode = Constants.ERROR_EXIT_CODE; } else { messageType = Constants.messageTypes.SUCCESS; @@ -241,6 +245,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => { } utils.sendUsageReport(bsConfig, args, err, messageType, errorCode, null, rawArgs); logger.error(`Error: Request failed with status code ${resp.statusCode}`) + logger.info(utils.formatRequest(err, resp, body)); process.exitCode = Constants.ERROR_EXIT_CODE; } } diff --git a/bin/helpers/reporterHTML.js b/bin/helpers/reporterHTML.js index 875d3200..e24707f2 100644 --- a/bin/helpers/reporterHTML.js +++ b/bin/helpers/reporterHTML.js @@ -105,7 +105,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { let messageType = null; let errorCode = null; let build; - + if (err) { message = err; messageType = Constants.messageTypes.ERROR; @@ -113,6 +113,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { logger.error('Generating the build report failed.'); logger.error(message); + logger.info(utils.formatRequest(err, resp, body)); utils.sendUsageReport(bsConfig, args, message, messageType, errorCode, null, rawArgs); return; @@ -135,6 +136,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { message = Constants.userMessages.API_DEPRECATED; logger.info(message); } + logger.info(utils.formatRequest(err, resp, body)); } else if (resp.statusCode === 422) { messageType = Constants.messageTypes.ERROR; errorCode = 'api_failed_build_generate_report'; @@ -146,6 +148,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { response = {message: message}; } logger.error(response.message); + logger.info(utils.formatRequest(err, resp, body)); } else if (resp.statusCode != 200) { messageType = Constants.messageTypes.ERROR; errorCode = 'api_failed_build_generate_report'; @@ -160,6 +163,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { message = Constants.userMessages.BUILD_GENERATE_REPORT_FAILED.replace('', buildId); logger.error(message); } + logger.info(utils.formatRequest(err, resp, body)); } else { messageType = Constants.messageTypes.SUCCESS; message = `Report for build: ${buildId} was successfully created.`; diff --git a/bin/helpers/utils.js b/bin/helpers/utils.js index 07aaee7a..94636fa3 100644 --- a/bin/helpers/utils.js +++ b/bin/helpers/utils.js @@ -969,6 +969,14 @@ exports.setCLIMode = (bsConfig, args) => { } } +exports.formatRequest = (err, resp, body) => { + return { + err, + status: resp ? resp.statusCode : null, + body: body ? JSON.stringify(body) : null + } +} + exports.stopBrowserStackBuild = async (bsConfig, args, buildId, rawArgs) => { let that = this; return new Promise(function (resolve, reject) { @@ -1079,4 +1087,4 @@ exports.getVideoConfig = (cypressJson) => { if (!this.isUndefined(cypressJson.videoUploadOnPasses)) conf.videoUploadOnPasses = cypressJson.videoUploadOnPasses; return conf; -} +} \ No newline at end of file diff --git a/bin/helpers/zipUpload.js b/bin/helpers/zipUpload.js index 31982deb..701d041e 100644 --- a/bin/helpers/zipUpload.js +++ b/bin/helpers/zipUpload.js @@ -52,6 +52,7 @@ const uploadSuits = (bsConfig, filePath, opts, obj) => { var r = request.post(options, function (err, resp, body) { if (err) { + logger.info(utils.formatRequest(err, resp, body)); reject(err); } else { try { @@ -60,6 +61,7 @@ const uploadSuits = (bsConfig, filePath, opts, obj) => { responseData = {}; } if (resp.statusCode != 200) { + logger.info(utils.formatRequest(err, resp, body)); if (resp.statusCode == 401) { if (responseData && responseData["error"]) { responseData["time"] = Date.now() - obj.startTime; diff --git a/test/unit/bin/commands/info.js b/test/unit/bin/commands/info.js index 4cf73217..4bd8fc9e 100644 --- a/test/unit/bin/commands/info.js +++ b/test/unit/bin/commands/info.js @@ -5,7 +5,8 @@ const chai = require("chai"), const Constants = require("../../../../bin/helpers/constants"), logger = require("../../../../bin/helpers/logger").winstonLogger, - testObjects = require("../../support/fixtures/testObjects"); + testObjects = require("../../support/fixtures/testObjects"), + formatRequest = require('../../../../bin/helpers/utils').formatRequest; const proxyquire = require("proxyquire").noCallThru(); @@ -60,7 +61,8 @@ describe("buildInfo", () => { setCypressConfigFilename: setCypressConfigFilenameStub, getUserAgent: getUserAgentStub, getConfigPath: getConfigPathStub, - setDefaults: setDefaultsStub + setDefaults: setDefaultsStub, + formatRequest, }, request: {get: requestStub}, }); @@ -98,7 +100,8 @@ describe("buildInfo", () => { setCypressConfigFilename: setCypressConfigFilenameStub, getUserAgent: getUserAgentStub, getConfigPath: getConfigPathStub, - setDefaults: setDefaultsStub + setDefaults: setDefaultsStub, + formatRequest, }, request: {get: requestStub}, }); @@ -160,7 +163,8 @@ describe("buildInfo", () => { setCypressConfigFilename: setCypressConfigFilenameStub, getUserAgent: getUserAgentStub, getConfigPath: getConfigPathStub, - setDefaults: setDefaultsStub + setDefaults: setDefaultsStub, + formatRequest, }, request: {get: requestStub}, }); @@ -204,7 +208,8 @@ describe("buildInfo", () => { setCypressConfigFilename: setCypressConfigFilenameStub, getUserAgent: getUserAgentStub, getConfigPath: getConfigPathStub, - setDefaults: setDefaultsStub + setDefaults: setDefaultsStub, + formatRequest, }, request: {get: requestStub}, }); @@ -243,7 +248,8 @@ describe("buildInfo", () => { setCypressConfigFilename: setCypressConfigFilenameStub, getUserAgent: getUserAgentStub, getConfigPath: getConfigPathStub, - setDefaults: setDefaultsStub + setDefaults: setDefaultsStub, + formatRequest, }, request: {get: requestStub}, }); diff --git a/test/unit/bin/helpers/build.js b/test/unit/bin/helpers/build.js index 57f55925..95208b8a 100644 --- a/test/unit/bin/helpers/build.js +++ b/test/unit/bin/helpers/build.js @@ -5,7 +5,8 @@ const chai = require("chai"), const Constants = require("../../../../bin/helpers/constants"), logger = require("../../../../bin/helpers/logger").winstonLogger, - testObjects = require("../../support/fixtures/testObjects"); + testObjects = require("../../support/fixtures/testObjects"), + formatRequest = require("../../../../bin/helpers/utils").formatRequest; const proxyquire = require("proxyquire").noCallThru(); @@ -37,6 +38,7 @@ describe("build", () => { const build = proxyquire("../../../../bin/helpers/build", { "../helpers/utils": { getUserAgent: getUserAgentStub, + formatRequest, }, "../helpers/capabilityHelper": { caps: capsStub, @@ -64,6 +66,7 @@ describe("build", () => { const build = proxyquire("../../../../bin/helpers/build", { "../helpers/utils": { getUserAgent: getUserAgentStub, + formatRequest, }, "../helpers/capabilityHelper": { caps: capsStub, @@ -121,6 +124,7 @@ describe("build", () => { const build = proxyquire("../../../../bin/helpers/build", { "../helpers/utils": { getUserAgent: getUserAgentStub, + formatRequest, }, "../helpers/capabilityHelper": { caps: capsStub, @@ -153,6 +157,7 @@ describe("build", () => { const build = proxyquire("../../../../bin/helpers/build", { "../helpers/utils": { getUserAgent: getUserAgentStub, + formatRequest, }, "../helpers/capabilityHelper": { caps: capsStub, diff --git a/test/unit/bin/helpers/reporterHTML.js b/test/unit/bin/helpers/reporterHTML.js index 9bea002f..3ad6b07f 100644 --- a/test/unit/bin/helpers/reporterHTML.js +++ b/test/unit/bin/helpers/reporterHTML.js @@ -9,7 +9,8 @@ const fs = require('fs'), request = require('request'), Constants = require("../../../../bin/helpers/constants"), logger = require("../../../../bin/helpers/logger").winstonLogger, - testObjects = require("../../support/fixtures/testObjects"); + testObjects = require("../../support/fixtures/testObjects"), + formatRequest = require("../../../../bin/helpers/utils").formatRequest; const proxyquire = require("proxyquire").noCallThru(); @@ -69,7 +70,8 @@ describe("reportHTML", () => { setCypressConfigFilename: setCypressConfigFilenameStub, sendUsageReport: sendUsageReportStub, setDefaults: setDefaultsStub, - getErrorCodeFromErr: getErrorCodeFromErrStub + getErrorCodeFromErr: getErrorCodeFromErrStub, + formatRequest, }, request: {get: requestStub} }); @@ -100,7 +102,8 @@ describe("reportHTML", () => { setCypressConfigFilename: setCypressConfigFilenameStub, sendUsageReport: sendUsageReportStub, setDefaults: setDefaultsStub, - getErrorCodeFromErr: getErrorCodeFromErrStub + getErrorCodeFromErr: getErrorCodeFromErrStub, + formatRequest, }, request: {get: requestStub} }); @@ -132,7 +135,8 @@ describe("reportHTML", () => { setCypressConfigFilename: setCypressConfigFilenameStub, sendUsageReport: sendUsageReportStub, setDefaults: setDefaultsStub, - getErrorCodeFromErr: getErrorCodeFromErrStub + getErrorCodeFromErr: getErrorCodeFromErrStub, + formatRequest, }, request: {get: requestStub} }); @@ -165,7 +169,8 @@ describe("reportHTML", () => { setCypressConfigFilename: setCypressConfigFilenameStub, sendUsageReport: sendUsageReportStub, setDefaults: setDefaultsStub, - getErrorCodeFromErr: getErrorCodeFromErrStub + getErrorCodeFromErr: getErrorCodeFromErrStub, + formatRequest, }, request: {get: requestStub} }); @@ -198,7 +203,8 @@ describe("reportHTML", () => { setCypressConfigFilename: setCypressConfigFilenameStub, sendUsageReport: sendUsageReportStub, setDefaults: setDefaultsStub, - getErrorCodeFromErr: getErrorCodeFromErrStub + getErrorCodeFromErr: getErrorCodeFromErrStub, + formatRequest, }, request: {get: requestStub} }); @@ -227,7 +233,8 @@ describe("reportHTML", () => { setCypressConfigFilename: setCypressConfigFilenameStub, sendUsageReport: sendUsageReportStub, setDefaults: setDefaultsStub, - getErrorCodeFromErr: getErrorCodeFromErrStub + getErrorCodeFromErr: getErrorCodeFromErrStub, + formatRequest, }, request: {get: requestStub} }); @@ -259,7 +266,8 @@ describe("reportHTML", () => { setCypressConfigFilename: setCypressConfigFilenameStub, sendUsageReport: sendUsageReportStub, setDefaults: setDefaultsStub, - getErrorCodeFromErr: getErrorCodeFromErrStub + getErrorCodeFromErr: getErrorCodeFromErrStub, + formatRequest, }, request: {get: requestStub} }); diff --git a/test/unit/bin/helpers/zipUpload.js b/test/unit/bin/helpers/zipUpload.js index 93d6b09b..e5c9ea70 100644 --- a/test/unit/bin/helpers/zipUpload.js +++ b/test/unit/bin/helpers/zipUpload.js @@ -6,7 +6,8 @@ const chai = require("chai"), request = require("request"); const logger = require("../../../../bin/helpers/logger").winstonLogger, - constant = require('../../../../bin/helpers/constants'); + constant = require('../../../../bin/helpers/constants'), + formatRequest = require('../../../../bin/helpers/utils').formatRequest; const rewire = require("rewire"), cliProgress = require('cli-progress'); @@ -44,7 +45,8 @@ describe("zipUpload", () => { const zipUploader = rewire("../../../../bin/helpers/zipUpload"); beforeEach(() => { utilsStub = { - generateUploadParams: sinon.stub().returns({}) + generateUploadParams: sinon.stub().returns({}), + formatRequest, }; loggerStub = { info: sandbox.stub().returns(null) From 0b9e87dc1b970c5dd9023ee9c8921083686d9865 Mon Sep 17 00:00:00 2001 From: Sourav Date: Tue, 8 Mar 2022 12:33:45 +0530 Subject: [PATCH 05/10] change to logger.error incase of errors --- bin/commands/info.js | 4 ++-- bin/helpers/build.js | 6 +++--- bin/helpers/buildArtifacts.js | 10 +++++----- bin/helpers/reporterHTML.js | 8 ++++---- bin/helpers/zipUpload.js | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/bin/commands/info.js b/bin/commands/info.js index 438313b3..f0e4b036 100644 --- a/bin/commands/info.js +++ b/bin/commands/info.js @@ -47,7 +47,7 @@ module.exports = function info(args, rawArgs) { errorCode = 'api_failed_build_info'; logger.info(message); - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); } else { let build = null; try { @@ -82,7 +82,7 @@ module.exports = function info(args, rawArgs) { message = Constants.userMessages.BUILD_INFO_FAILED; logger.error(message); } - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); } else { messageType = Constants.messageTypes.SUCCESS; message = `Build info for build id: \n ${JSON.stringify( diff --git a/bin/helpers/build.js b/bin/helpers/build.js index 161a7e6c..acd9b804 100644 --- a/bin/helpers/build.js +++ b/bin/helpers/build.js @@ -25,7 +25,7 @@ const createBuild = (bsConfig, zip) => { request.post(options, function (err, resp, body) { if (err) { - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); reject(err); } else { let build = null; @@ -39,11 +39,11 @@ const createBuild = (bsConfig, zip) => { if (build) { resolve(build.message); } else { - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); reject(Constants.userMessages.API_DEPRECATED); } } else if (resp.statusCode != 201) { - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); if (build) { reject(`${Constants.userMessages.BUILD_FAILED} Error: ${build.message}`); } else { diff --git a/bin/helpers/buildArtifacts.js b/bin/helpers/buildArtifacts.js index 130015c1..4ce59638 100644 --- a/bin/helpers/buildArtifacts.js +++ b/bin/helpers/buildArtifacts.js @@ -162,7 +162,7 @@ const sendUpdatesToBstack = async (bsConfig, buildId, args, options, rawArgs) => request.post(options, function (err, resp, data) { if(err) { utils.sendUsageReport(bsConfig, args, err, Constants.messageTypes.ERROR, 'api_failed_build_artifacts_status_update', null, rawArgs); - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); reject(err); } else { try { @@ -204,7 +204,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => { let buildDetails = null; request.get(options, async function (err, resp, body) { if(err) { - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); utils.sendUsageReport(bsConfig, args, err, Constants.messageTypes.ERROR, 'api_failed_build_artifacts', null, rawArgs); process.exitCode = Constants.ERROR_EXIT_CODE; } else { @@ -213,7 +213,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => { if(resp.statusCode != 200) { logger.error('Downloading the build artifacts failed.'); logger.error(`Error: Request failed with status code ${resp.statusCode}`) - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); utils.sendUsageReport(bsConfig, args, buildDetails, Constants.messageTypes.ERROR, 'api_failed_build_artifacts', null, rawArgs); process.exitCode = Constants.ERROR_EXIT_CODE; } else { @@ -223,7 +223,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => { messageType = Constants.messageTypes.ERROR; message = Constants.userMessages.DOWNLOAD_BUILD_ARTIFACTS_FAILED.replace('', buildId).replace('', BUILD_ARTIFACTS_FAIL_COUNT); logger.error(message); - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); process.exitCode = Constants.ERROR_EXIT_CODE; } else { messageType = Constants.messageTypes.SUCCESS; @@ -245,7 +245,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => { } utils.sendUsageReport(bsConfig, args, err, messageType, errorCode, null, rawArgs); logger.error(`Error: Request failed with status code ${resp.statusCode}`) - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); process.exitCode = Constants.ERROR_EXIT_CODE; } } diff --git a/bin/helpers/reporterHTML.js b/bin/helpers/reporterHTML.js index e24707f2..dded4f9e 100644 --- a/bin/helpers/reporterHTML.js +++ b/bin/helpers/reporterHTML.js @@ -113,7 +113,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { logger.error('Generating the build report failed.'); logger.error(message); - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); utils.sendUsageReport(bsConfig, args, message, messageType, errorCode, null, rawArgs); return; @@ -136,7 +136,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { message = Constants.userMessages.API_DEPRECATED; logger.info(message); } - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); } else if (resp.statusCode === 422) { messageType = Constants.messageTypes.ERROR; errorCode = 'api_failed_build_generate_report'; @@ -148,7 +148,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { response = {message: message}; } logger.error(response.message); - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); } else if (resp.statusCode != 200) { messageType = Constants.messageTypes.ERROR; errorCode = 'api_failed_build_generate_report'; @@ -163,7 +163,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { message = Constants.userMessages.BUILD_GENERATE_REPORT_FAILED.replace('', buildId); logger.error(message); } - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); } else { messageType = Constants.messageTypes.SUCCESS; message = `Report for build: ${buildId} was successfully created.`; diff --git a/bin/helpers/zipUpload.js b/bin/helpers/zipUpload.js index 701d041e..32444842 100644 --- a/bin/helpers/zipUpload.js +++ b/bin/helpers/zipUpload.js @@ -52,7 +52,7 @@ const uploadSuits = (bsConfig, filePath, opts, obj) => { var r = request.post(options, function (err, resp, body) { if (err) { - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); reject(err); } else { try { @@ -61,7 +61,7 @@ const uploadSuits = (bsConfig, filePath, opts, obj) => { responseData = {}; } if (resp.statusCode != 200) { - logger.info(utils.formatRequest(err, resp, body)); + logger.error(utils.formatRequest(err, resp, body)); if (resp.statusCode == 401) { if (responseData && responseData["error"]) { responseData["time"] = Date.now() - obj.startTime; From c96fc94cce2fd2c660a86c3ac8776858187a7575 Mon Sep 17 00:00:00 2001 From: Sourav Date: Tue, 8 Mar 2022 14:30:21 +0530 Subject: [PATCH 06/10] handle circular body, add test cases for utils.formatRequest --- bin/helpers/utils.js | 3 ++- test/unit/bin/helpers/utils.js | 11 +++++++++++ test/unit/bin/helpers/zipUpload.js | 3 ++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/bin/helpers/utils.js b/bin/helpers/utils.js index 94636fa3..22109f21 100644 --- a/bin/helpers/utils.js +++ b/bin/helpers/utils.js @@ -7,6 +7,7 @@ const getmac = require('getmac').default; const { v4: uuidv4 } = require('uuid'); const browserstack = require('browserstack-local'); const crypto = require('crypto'); +const util = require('util'); const usageReporting = require("./usageReporting"), logger = require("./logger").winstonLogger, @@ -973,7 +974,7 @@ exports.formatRequest = (err, resp, body) => { return { err, status: resp ? resp.statusCode : null, - body: body ? JSON.stringify(body) : null + body: body ? util.format('%j', body) : null } } diff --git a/test/unit/bin/helpers/utils.js b/test/unit/bin/helpers/utils.js index ef7e0ea5..f32682bd 100644 --- a/test/unit/bin/helpers/utils.js +++ b/test/unit/bin/helpers/utils.js @@ -2919,4 +2919,15 @@ describe('utils', () => { expect(utils.getVideoConfig({video: false, videoUploadOnPasses: false})).to.be.eql({video: false, videoUploadOnPasses: false}); }); }); + + describe('formatRequest', () => { + it('should return correct JSON', () => { + expect(utils.formatRequest('Something went wrong.', undefined, undefined)).to.be.eql({err: 'Something went wrong.', status: null, body: null}); + const body = {message: "Something went wrong"}; + expect(utils.formatRequest(null, {statusCode: 400}, body)).to.be.eql({err: null, status: 400, body: JSON.stringify(body)}); + const cricularBody = {message: "Something went wrong"}; + cricularBody.body = cricularBody; + expect(utils.formatRequest(null, {statusCode: 500}, cricularBody)).to.be.eql({err: null, status: 500, body: '[Circular]'}); + }); + }); }); diff --git a/test/unit/bin/helpers/zipUpload.js b/test/unit/bin/helpers/zipUpload.js index e5c9ea70..30648add 100644 --- a/test/unit/bin/helpers/zipUpload.js +++ b/test/unit/bin/helpers/zipUpload.js @@ -49,7 +49,8 @@ describe("zipUpload", () => { formatRequest, }; loggerStub = { - info: sandbox.stub().returns(null) + info: sandbox.stub().returns(null), + error: sandbox.stub().returns(null), }; sinon.stub(fs, 'lstatSync').returns({ size: 123 }); }); From cdcf071ded049bdfc9053ad86ed444fd9680b129 Mon Sep 17 00:00:00 2001 From: Sourav Date: Tue, 8 Mar 2022 14:41:38 +0530 Subject: [PATCH 07/10] fix linting --- bin/helpers/reporterHTML.js | 2 +- bin/helpers/utils.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/helpers/reporterHTML.js b/bin/helpers/reporterHTML.js index dded4f9e..c93dbe92 100644 --- a/bin/helpers/reporterHTML.js +++ b/bin/helpers/reporterHTML.js @@ -105,7 +105,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { let messageType = null; let errorCode = null; let build; - + if (err) { message = err; messageType = Constants.messageTypes.ERROR; diff --git a/bin/helpers/utils.js b/bin/helpers/utils.js index 22109f21..a0038210 100644 --- a/bin/helpers/utils.js +++ b/bin/helpers/utils.js @@ -1088,4 +1088,4 @@ exports.getVideoConfig = (cypressJson) => { if (!this.isUndefined(cypressJson.videoUploadOnPasses)) conf.videoUploadOnPasses = cypressJson.videoUploadOnPasses; return conf; -} \ No newline at end of file +} From 540b955fbe3a720e73afd921b16da0d737c04494 Mon Sep 17 00:00:00 2001 From: Sourav Date: Tue, 8 Mar 2022 15:40:40 +0530 Subject: [PATCH 08/10] fix zip upload log --- bin/helpers/zipUpload.js | 17 ++++++++--------- test/unit/bin/helpers/zipUpload.js | 14 +++++++------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/bin/helpers/zipUpload.js b/bin/helpers/zipUpload.js index 32444842..30f3bf19 100644 --- a/bin/helpers/zipUpload.js +++ b/bin/helpers/zipUpload.js @@ -52,8 +52,7 @@ const uploadSuits = (bsConfig, filePath, opts, obj) => { var r = request.post(options, function (err, resp, body) { if (err) { - logger.error(utils.formatRequest(err, resp, body)); - reject(err); + reject({message: err, stacktrace: utils.formatRequest(err, resp, body)}); } else { try { responseData = JSON.parse(body); @@ -61,13 +60,12 @@ const uploadSuits = (bsConfig, filePath, opts, obj) => { responseData = {}; } if (resp.statusCode != 200) { - logger.error(utils.formatRequest(err, resp, body)); if (resp.statusCode == 401) { if (responseData && responseData["error"]) { responseData["time"] = Date.now() - obj.startTime; - return reject(responseData["error"]); + return reject({message: responseData["error"], stacktrace: utils.formatRequest(err, resp, body)}); } else { - return reject(Constants.validationMessages.INVALID_DEFAULT_AUTH_PARAMS); + return reject({message: Constants.validationMessages.INVALID_DEFAULT_AUTH_PARAMS, stacktrace: utils.formatRequest(err, resp, body)}); } } if (!opts.propogateError){ @@ -75,12 +73,12 @@ const uploadSuits = (bsConfig, filePath, opts, obj) => { } if(responseData && responseData["error"]){ responseData["time"] = Date.now() - obj.startTime; - reject(responseData["error"]); + reject({message: responseData["error"], stacktrace: utils.formatRequest(err, resp, body)}); } else { if (resp.statusCode == 413) { - reject(Constants.userMessages.ZIP_UPLOAD_LIMIT_EXCEEDED); + reject({message: Constants.userMessages.ZIP_UPLOAD_LIMIT_EXCEEDED, stacktrace: utils.formatRequest(err, resp, body)}); } else { - reject(Constants.userMessages.ZIP_UPLOADER_NOT_REACHABLE); + reject({message: Constants.userMessages.ZIP_UPLOADER_NOT_REACHABLE, stacktrace: utils.formatRequest(err, resp, body)}); } } } else { @@ -151,7 +149,8 @@ const uploadCypressZip = (bsConfig, md5data, packageData) => { }).catch((error) => { testZipUploadObj.bar1 && purgeUploadBar(testZipUploadObj); npmPackageZipUploadObj.bar1 && purgeUploadBar(npmPackageZipUploadObj); - return reject(error); + logger.error(error.stacktrace) + return reject(error.message); }) }) } diff --git a/test/unit/bin/helpers/zipUpload.js b/test/unit/bin/helpers/zipUpload.js index 30648add..60f8f24b 100644 --- a/test/unit/bin/helpers/zipUpload.js +++ b/test/unit/bin/helpers/zipUpload.js @@ -85,7 +85,7 @@ describe("zipUpload", () => { chai.assert.fail("Promise error"); }) .catch((error) => { - chai.assert.equal(error.message, "test error"); + chai.assert.equal(error.message.message, "test error"); }); }); @@ -219,7 +219,7 @@ describe("zipUpload", () => { chai.assert.fail("Promise error"); }) .catch((error) => { - chai.assert.equal(error, "auth failed"); + chai.assert.equal(error.message, "auth failed"); }); }); @@ -249,7 +249,7 @@ describe("zipUpload", () => { chai.assert.fail("Promise error"); }) .catch((error) => { - chai.assert.equal(error, constant.validationMessages.INVALID_DEFAULT_AUTH_PARAMS); + chai.assert.equal(error.message, constant.validationMessages.INVALID_DEFAULT_AUTH_PARAMS); }); }); @@ -311,7 +311,7 @@ describe("zipUpload", () => { chai.assert.fail("Promise error"); }) .catch((error) => { - chai.assert.deepEqual(error, "test error"); + chai.assert.deepEqual(error.message, "test error"); }); }); @@ -342,7 +342,7 @@ describe("zipUpload", () => { chai.assert.fail("Promise error"); }) .catch((error) => { - chai.assert.deepEqual(error, constant.userMessages.ZIP_UPLOAD_LIMIT_EXCEEDED); + chai.assert.deepEqual(error.message, constant.userMessages.ZIP_UPLOAD_LIMIT_EXCEEDED); }); }); @@ -373,7 +373,7 @@ describe("zipUpload", () => { chai.assert.fail("Promise error"); }) .catch((error) => { - chai.assert.deepEqual(error, constant.userMessages.ZIP_UPLOADER_NOT_REACHABLE); + chai.assert.deepEqual(error.message, constant.userMessages.ZIP_UPLOADER_NOT_REACHABLE); }); }); }); @@ -427,7 +427,7 @@ describe("zipUpload", () => { chai.assert.fail("Promise error"); }) .catch((error) => { - chai.assert.equal(error, "test error"); + chai.assert.equal(error.message, "test error"); }); }); }); From 34e38067a1e415abb68fdf9b49b0bab0c5865c20 Mon Sep 17 00:00:00 2001 From: Sourav Date: Tue, 8 Mar 2022 16:00:43 +0530 Subject: [PATCH 09/10] update testcases --- test/unit/bin/helpers/zipUpload.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit/bin/helpers/zipUpload.js b/test/unit/bin/helpers/zipUpload.js index 60f8f24b..42543295 100644 --- a/test/unit/bin/helpers/zipUpload.js +++ b/test/unit/bin/helpers/zipUpload.js @@ -410,12 +410,12 @@ describe("zipUpload", () => { }); it("reject with error while uploading suit", () => { - let uploadSuitsErrorStub = sandbox.stub().returns(Promise.reject("test error")); + let uploadSuitsErrorStub = sandbox.stub().returns(Promise.reject({message: "test error", stacktrace: "stacktrace error"})); let purgeUploadBarStub = sandbox.stub().returns(true); zipUploader.__set__({ utils: utilsStub, uploadSuits: uploadSuitsErrorStub, - purgeUploadBar: purgeUploadBarStub + purgeUploadBar: purgeUploadBarStub, }); let uploadCypressZiprewire = zipUploader.__get__('uploadCypressZip'); let bsConfig = {} @@ -427,7 +427,7 @@ describe("zipUpload", () => { chai.assert.fail("Promise error"); }) .catch((error) => { - chai.assert.equal(error.message, "test error"); + chai.assert.equal(error, "test error"); }); }); }); From 6cf33d16bea2f6ed385e7647874988088aaeaf69 Mon Sep 17 00:00:00 2001 From: Sourav Date: Tue, 8 Mar 2022 17:18:38 +0530 Subject: [PATCH 10/10] remove redundant logs --- bin/helpers/reporterHTML.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/bin/helpers/reporterHTML.js b/bin/helpers/reporterHTML.js index c93dbe92..5ae38315 100644 --- a/bin/helpers/reporterHTML.js +++ b/bin/helpers/reporterHTML.js @@ -112,7 +112,6 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { errorCode = 'api_failed_build_report'; logger.error('Generating the build report failed.'); - logger.error(message); logger.error(utils.formatRequest(err, resp, body)); utils.sendUsageReport(bsConfig, args, message, messageType, errorCode, null, rawArgs); @@ -136,7 +135,6 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { message = Constants.userMessages.API_DEPRECATED; logger.info(message); } - logger.error(utils.formatRequest(err, resp, body)); } else if (resp.statusCode === 422) { messageType = Constants.messageTypes.ERROR; errorCode = 'api_failed_build_generate_report'; @@ -147,7 +145,6 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { logger.error(`Error generating the report: ${error}`); response = {message: message}; } - logger.error(response.message); logger.error(utils.formatRequest(err, resp, body)); } else if (resp.statusCode != 200) { messageType = Constants.messageTypes.ERROR; @@ -161,9 +158,8 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => { if (build.message === 'Unauthorized') errorCode = 'api_auth_failed'; } else { message = Constants.userMessages.BUILD_GENERATE_REPORT_FAILED.replace('', buildId); - logger.error(message); + logger.error(utils.formatRequest(err, resp, body)); } - logger.error(utils.formatRequest(err, resp, body)); } else { messageType = Constants.messageTypes.SUCCESS; message = `Report for build: ${buildId} was successfully created.`;