Skip to content

Commit f6748f0

Browse files
Merge pull request #186 from roshan04/Cypress_cli_instrumentations_rawlogs
Adding more instrumentation.
2 parents 6c19278 + 857f577 commit f6748f0

File tree

6 files changed

+100
-10
lines changed

6 files changed

+100
-10
lines changed

bin/commands/runs.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ const archiver = require("../helpers/archiver"),
1818
downloadBuildArtifacts = require('../helpers/buildArtifacts').downloadBuildArtifacts,
1919
updateNotifier = require('update-notifier'),
2020
pkg = require('../../package.json');
21-
2221
module.exports = function run(args) {
2322
let bsConfigPath = utils.getConfigPath(args.cf);
2423
//Delete build_results.txt from log folder if already present.
@@ -96,6 +95,9 @@ module.exports = function run(args) {
9695
//get the number of spec files
9796
let specFiles = utils.getNumberOfSpecFiles(bsConfig, args, cypressJson);
9897

98+
// return the number of parallels user specified
99+
let userSpecifiedParallels = utils.getParallels(bsConfig, args);
100+
99101
// accept the number of parallels
100102
utils.setParallels(bsConfig, args, specFiles.length);
101103

@@ -137,6 +139,11 @@ module.exports = function run(args) {
137139
utils.setProcessHooks(data.build_id, bsConfig, bs_local, args);
138140
let message = `${data.message}! ${Constants.userMessages.BUILD_CREATED} with build id: ${data.build_id}`;
139141
let dashboardLink = `${Constants.userMessages.VISIT_DASHBOARD} ${data.dashboard_url}`;
142+
let buildReportData = {
143+
'build_id': data.build_id,
144+
'user_id': data.user_id,
145+
'parallels': userSpecifiedParallels
146+
};
140147
utils.exportResults(data.build_id, `${config.dashboardUrl}${data.build_id}`);
141148
if ((utils.isUndefined(bsConfig.run_settings.parallels) && utils.isUndefined(args.parallels)) || (!utils.isUndefined(bsConfig.run_settings.parallels) && bsConfig.run_settings.parallels == Constants.cliMessages.RUN.DEFAULT_PARALLEL_MESSAGE)) {
142149
logger.warn(Constants.userMessages.NO_PARALLELS);
@@ -174,7 +181,7 @@ module.exports = function run(args) {
174181

175182
// Generate custom report!
176183
reportGenerator(bsConfig, data.build_id, args, function(){
177-
utils.sendUsageReport(bsConfig, args, `${message}\n${dashboardLink}`, Constants.messageTypes.SUCCESS, null);
184+
utils.sendUsageReport(bsConfig, args, `${message}\n${dashboardLink}`, Constants.messageTypes.SUCCESS, null, buildReportData);
178185
utils.handleSyncExit(exitCode, data.dashboard_url);
179186
});
180187
});
@@ -202,7 +209,8 @@ module.exports = function run(args) {
202209
dataToSend.used_auto_local = bsConfig.connection_settings.usedAutoLocal;
203210
}
204211
}
205-
utils.sendUsageReport(bsConfig, args, `${message}\n${dashboardLink}`, Constants.messageTypes.SUCCESS, null, dataToSend);
212+
buildReportData = { ...buildReportData, ...dataToSend };
213+
utils.sendUsageReport(bsConfig, args, `${message}\n${dashboardLink}`, Constants.messageTypes.SUCCESS, null, buildReportData);
206214
return;
207215
}).catch(async function (err) {
208216
// Build creation failed
@@ -283,7 +291,8 @@ module.exports = function run(args) {
283291
}).catch(function (err) {
284292
logger.error(err);
285293
utils.setUsageReportingFlag(null, args.disableUsageReporting);
286-
utils.sendUsageReport(null, args, err.message, Constants.messageTypes.ERROR, utils.getErrorCodeFromErr(err));
294+
let bsJsonData = utils.readBsConfigJSON(bsConfigPath);
295+
utils.sendUsageReport(bsJsonData, args, err.message, Constants.messageTypes.ERROR, utils.getErrorCodeFromErr(err));
287296
process.exitCode = Constants.ERROR_EXIT_CODE;
288297
}).finally(function(){
289298
updateNotifier({

bin/helpers/constants.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,14 @@ const usageReportingConstants = {
209209

210210
const LATEST_VERSION_SYNTAX_REGEX = /\d*.latest(.\d*)?/gm
211211

212+
const AUTH_REGEX = /"auth" *: *{[\s\S]*?}/g
213+
212214
const ERROR_EXIT_CODE = 1;
213215

216+
const REDACTED = "[REDACTED]";
217+
218+
const REDACTED_AUTH =`auth: { "username": ${REDACTED}, "access_key": ${REDACTED} }`;
219+
214220
module.exports = Object.freeze({
215221
syncCLI,
216222
userMessages,
@@ -228,5 +234,7 @@ module.exports = Object.freeze({
228234
METADATA_CHAR_BUFFER_PER_SPEC,
229235
usageReportingConstants,
230236
LATEST_VERSION_SYNTAX_REGEX,
231-
ERROR_EXIT_CODE
237+
ERROR_EXIT_CODE,
238+
AUTH_REGEX,
239+
REDACTED_AUTH
232240
});

bin/helpers/usageReporting.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const cp = require("child_process"),
88
const config = require('./config'),
99
fileLogger = require('./logger').fileLogger,
1010
utils = require('./utils');
11+
12+
const { AUTH_REGEX, REDACTED_AUTH } = require("./constants");
1113

1214
function get_version(package_name) {
1315
try {
@@ -173,19 +175,30 @@ function isUsageReportingEnabled() {
173175
function send(args) {
174176
if (isUsageReportingEnabled() === "true") return;
175177

176-
let bsConfig = args.bstack_config;
178+
let bsConfig = JSON.parse(JSON.stringify(args.bstack_config));
179+
let runSettings = "";
180+
let sanitizedbsConfig = "";
177181
let cli_details = cli_version_and_path(bsConfig);
178182
let data = utils.isUndefined(args.data) ? {} : args.data;
179183

180184
if (bsConfig && bsConfig.run_settings) {
181-
data.cypress_version = bsConfig.run_settings.cypress_version
185+
runSettings = bsConfig.run_settings;
186+
data.cypress_version = bsConfig.run_settings.cypress_version;
182187
}
183188

189+
sanitizedbsConfig = `${(typeof bsConfig === 'string') ? bsConfig :
190+
JSON.stringify(bsConfig)}`.replace(AUTH_REGEX, REDACTED_AUTH);
191+
184192
delete args.bstack_config;
185193

186194
const payload = {
187195
event_type: "cypress_cli_stats",
188196
data: {
197+
build_hashed_id: data.build_id,
198+
user_id: data.user_id,
199+
parallels: data.parallels,
200+
bstack_json: sanitizedbsConfig,
201+
run_settings: runSettings,
189202
os: _os(),
190203
os_version: os_version(),
191204
bstack_json_found_in_pwd: bstack_json_found_in_pwd(),

bin/helpers/utils.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ exports.setUsageReportingFlag = (bsConfig, disableUsageReporting) => {
138138
}
139139
};
140140

141+
exports.getParallels = (bsConfig, args) => {
142+
return args.parallels || bsConfig['run_settings']['parallels'];
143+
}
144+
141145
exports.setParallels = (bsConfig, args, numOfSpecs) => {
142146
if (!this.isUndefined(args.parallels)) {
143147
bsConfig["run_settings"]["parallels"] = args.parallels;
@@ -908,6 +912,15 @@ exports.setOtherConfigs = (bsConfig, args) => {
908912
}
909913
}
910914

915+
exports.readBsConfigJSON = (bsConfigPath) => {
916+
try {
917+
fs.accessSync(bsConfigPath, fs.constants.R_OK);
918+
return fs.readFileSync(bsConfigPath, 'utf-8');
919+
} catch (err) {
920+
return null;
921+
}
922+
}
923+
911924
exports.getCypressJSON = (bsConfig) => {
912925
let cypressJSON = undefined;
913926
if (bsConfig.run_settings.cypress_config_file && bsConfig.run_settings.cypress_config_filename !== 'false') {

test/unit/bin/commands/runs.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ describe("runs", () => {
2828
});
2929
getErrorCodeFromErrStub = sandbox.stub().returns("random-error-code");
3030
deleteResultsStub = sandbox.stub();
31+
readBsConfigJSONStub = sandbox.stub().returns(null);
3132
});
3233

3334
afterEach(() => {
@@ -47,7 +48,8 @@ describe("runs", () => {
4748
sendUsageReport: sendUsageReportStub,
4849
setUsageReportingFlag: setUsageReportingFlagStub,
4950
getConfigPath: getConfigPathStub,
50-
deleteResults: deleteResultsStub
51+
deleteResults: deleteResultsStub,
52+
readBsConfigJSON: readBsConfigJSONStub
5153
},
5254
});
5355

@@ -206,6 +208,7 @@ describe("runs", () => {
206208

207209
beforeEach(() => {
208210
sandbox = sinon.createSandbox();
211+
getParallelsStub = sandbox.stub();
209212
setParallelsStub = sandbox.stub();
210213
warnSpecLimitStub = sandbox.stub();
211214
setUsernameStub = sandbox.stub();
@@ -257,6 +260,7 @@ describe("runs", () => {
257260
'../helpers/utils': {
258261
validateBstackJson: validateBstackJsonStub,
259262
sendUsageReport: sendUsageReportStub,
263+
getParallels: getParallelsStub,
260264
setParallels: setParallelsStub,
261265
warnSpecLimit: warnSpecLimitStub,
262266
setUsername: setUsernameStub,
@@ -322,6 +326,7 @@ describe("runs", () => {
322326
sinon.assert.calledOnce(setLocalConfigFileStub);
323327
sinon.assert.calledOnce(setCypressConfigFilenameStub);
324328
sinon.assert.calledOnce(getNumberOfSpecFilesStub);
329+
sinon.assert.calledOnce(getParallelsStub);
325330
sinon.assert.calledOnce(setParallelsStub);
326331
sinon.assert.calledOnce(warnSpecLimitStub);
327332
sinon.assert.calledOnce(setLocalStub);
@@ -356,6 +361,7 @@ describe("runs", () => {
356361
beforeEach(() => {
357362
sandbox = sinon.createSandbox();
358363
validateBstackJsonStub = sandbox.stub();
364+
getParallelsStub = sandbox.stub();
359365
setParallelsStub = sandbox.stub();
360366
warnSpecLimitStub = sandbox.stub();
361367
setUsernameStub = sandbox.stub();
@@ -408,6 +414,7 @@ describe("runs", () => {
408414
'../helpers/utils': {
409415
validateBstackJson: validateBstackJsonStub,
410416
sendUsageReport: sendUsageReportStub,
417+
getParallels: getParallelsStub,
411418
setParallels: setParallelsStub,
412419
warnSpecLimit: warnSpecLimitStub,
413420
setUsername: setUsernameStub,
@@ -476,6 +483,7 @@ describe("runs", () => {
476483
sinon.assert.calledOnce(setLocalModeStub);
477484
sinon.assert.calledOnce(setLocalConfigFileStub);
478485
sinon.assert.calledOnce(getNumberOfSpecFilesStub);
486+
sinon.assert.calledOnce(getParallelsStub);
479487
sinon.assert.calledOnce(setParallelsStub);
480488
sinon.assert.calledOnce(warnSpecLimitStub);
481489
sinon.assert.calledOnce(setLocalStub);
@@ -513,6 +521,7 @@ describe("runs", () => {
513521
beforeEach(() => {
514522
sandbox = sinon.createSandbox();
515523
validateBstackJsonStub = sandbox.stub();
524+
getParallelsStub = sandbox.stub();
516525
setParallelsStub = sandbox.stub();
517526
warnSpecLimitStub = sandbox.stub();
518527
setUsernameStub = sandbox.stub();
@@ -567,6 +576,7 @@ describe("runs", () => {
567576
'../helpers/utils': {
568577
validateBstackJson: validateBstackJsonStub,
569578
sendUsageReport: sendUsageReportStub,
579+
getParallels: getParallelsStub,
570580
setParallels: setParallelsStub,
571581
warnSpecLimit: warnSpecLimitStub,
572582
setUsername: setUsernameStub,
@@ -646,6 +656,7 @@ describe("runs", () => {
646656
sinon.assert.calledOnce(validateBstackJsonStub);
647657
sinon.assert.calledOnce(capabilityValidatorStub);
648658
sinon.assert.calledOnce(getNumberOfSpecFilesStub);
659+
sinon.assert.calledOnce(getParallelsStub);
649660
sinon.assert.calledOnce(setParallelsStub);
650661
sinon.assert.calledOnce(warnSpecLimitStub);
651662
sinon.assert.calledOnce(setLocalStub);
@@ -683,6 +694,7 @@ describe("runs", () => {
683694
beforeEach(() => {
684695
sandbox = sinon.createSandbox();
685696
validateBstackJsonStub = sandbox.stub();
697+
getParallelsStub = sandbox.stub();
686698
setParallelsStub = sandbox.stub();
687699
warnSpecLimitStub = sandbox.stub()
688700
setUsernameStub = sandbox.stub();
@@ -748,7 +760,7 @@ describe("runs", () => {
748760
let errorCode = null;
749761
let message = `Success! ${Constants.userMessages.BUILD_CREATED} with build id: random_build_id`;
750762
let dashboardLink = `${Constants.userMessages.VISIT_DASHBOARD} ${dashboardUrl}`;
751-
let data = {time_components: {}, unique_id: 'random_hash', package_error: 'test', checkmd5_error: 'test', build_id: 'random_build_id', test_zip_size: 123, npm_zip_size: 123}
763+
let data = { user_id: 1234, parallels: 10, time_components: {}, unique_id: 'random_hash', package_error: 'test', checkmd5_error: 'test', build_id: 'random_build_id', test_zip_size: 123, npm_zip_size: 123}
752764

753765
const runs = proxyquire('../../../../bin/commands/runs', {
754766
'../helpers/utils': {
@@ -762,6 +774,7 @@ describe("runs", () => {
762774
setTestEnvs: setTestEnvsStub,
763775
setSystemEnvs: setSystemEnvsStub,
764776
setUsageReportingFlag: setUsageReportingFlagStub,
777+
getParallels: getParallelsStub,
765778
setParallels: setParallelsStub,
766779
warnSpecLimit: warnSpecLimitStub,
767780
getConfigPath: getConfigPathStub,
@@ -837,8 +850,9 @@ describe("runs", () => {
837850
stopLocalBinaryStub.returns(Promise.resolve("nothing"));
838851
nonEmptyArrayStub.returns(false);
839852
checkErrorStub.returns('test');
853+
getParallelsStub.returns(10);
854+
createBuildStub.returns(Promise.resolve({ message: 'Success', build_id: 'random_build_id', dashboard_url: dashboardUrl, user_id: 1234 }));
840855
fetchZipSizeStub.returns(123);
841-
createBuildStub.returns(Promise.resolve({ message: 'Success', build_id: 'random_build_id', dashboard_url: dashboardUrl }));
842856

843857
return runs(args)
844858
.then(function (_bsConfig) {
@@ -851,6 +865,7 @@ describe("runs", () => {
851865
sinon.assert.calledOnce(setLocalConfigFileStub);
852866
sinon.assert.calledOnce(capabilityValidatorStub);
853867
sinon.assert.calledOnce(getNumberOfSpecFilesStub);
868+
sinon.assert.calledOnce(getParallelsStub);
854869
sinon.assert.calledOnce(setParallelsStub);
855870
sinon.assert.calledOnce(warnSpecLimitStub);
856871
sinon.assert.calledTwice(fetchZipSizeStub);

test/unit/bin/helpers/utils.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,38 @@ describe('utils', () => {
239239
});
240240
});
241241

242+
describe('getparallels', () =>{
243+
it('should return the parallels specified by the user as arguments', ()=>{
244+
let bsConfig = {
245+
run_settings: {
246+
parallels: 100,
247+
},
248+
};
249+
let args = {
250+
parallels: 200
251+
};
252+
expect(utils.getParallels(bsConfig, args)).to.be.eq(200);
253+
});
254+
255+
it('should return the parallels specified by the user in bsconfig if not passed as arguments', ()=>{
256+
let bsConfig = {
257+
run_settings: {
258+
parallels: 100,
259+
},
260+
};
261+
let args = {};
262+
expect(utils.getParallels(bsConfig, args)).to.be.eq(100);
263+
});
264+
265+
it('should return the undefined if no parallels specified in bsconfig and arguments', ()=>{
266+
let bsConfig = {
267+
run_settings: {},
268+
};
269+
let args = {};
270+
expect(utils.getParallels(bsConfig, args)).to.be.eq(undefined);
271+
});
272+
});
273+
242274
describe('checkError', () => {
243275
it('should return error if exists', () => {
244276
expect(utils.checkError({error: "test error"})).to.be.eq("test error");

0 commit comments

Comments
 (0)