@@ -433,6 +433,68 @@ suite('TelemetryService', () => {
433
433
service . dispose ( ) ;
434
434
} ) ) ;
435
435
436
+ test ( 'Unexpected Error Telemetry removes PII but preserves Code file path when PIIPath is configured' , sinon . test ( function ( ) {
437
+
438
+ let origErrorHandler = Errors . errorHandler . getUnexpectedErrorHandler ( ) ;
439
+ Errors . setUnexpectedErrorHandler ( ( ) => { } ) ;
440
+
441
+ try {
442
+ let settings = new ErrorTestingSettings ( ) ;
443
+ let testAppender = new TestTelemetryAppender ( ) ;
444
+ let service = new TelemetryService ( { appender : testAppender , piiPaths : [ settings . personalInfo + '/resources/app/' ] } , undefined ) ;
445
+ const errorTelemetry = new ErrorTelemetry ( service ) ;
446
+
447
+ let dangerousPathWithImportantInfoError : any = new Error ( settings . dangerousPathWithImportantInfo ) ;
448
+ dangerousPathWithImportantInfoError . stack = settings . stack ;
449
+
450
+ // Test that important information remains but personal info does not
451
+ Errors . onUnexpectedError ( dangerousPathWithImportantInfoError ) ;
452
+ this . clock . tick ( ErrorTelemetry . ERROR_FLUSH_TIMEOUT ) ;
453
+
454
+ assert . notEqual ( testAppender . events [ 0 ] . data . message . indexOf ( settings . importantInfo ) , - 1 ) ;
455
+ assert . equal ( testAppender . events [ 0 ] . data . message . indexOf ( settings . personalInfo ) , - 1 ) ;
456
+ assert . equal ( testAppender . events [ 0 ] . data . message . indexOf ( settings . filePrefix ) , - 1 ) ;
457
+ assert . notEqual ( testAppender . events [ 0 ] . data . stack . indexOf ( settings . importantInfo ) , - 1 ) ;
458
+ assert . equal ( testAppender . events [ 0 ] . data . stack . indexOf ( settings . personalInfo ) , - 1 ) ;
459
+ assert . equal ( testAppender . events [ 0 ] . data . stack . indexOf ( settings . filePrefix ) , - 1 ) ;
460
+ assert . notEqual ( testAppender . events [ 0 ] . data . stack . indexOf ( settings . stack [ 4 ] ) , - 1 ) ;
461
+ assert . equal ( testAppender . events [ 0 ] . data . stack . split ( '\n' ) . length , settings . stack . length ) ;
462
+
463
+ errorTelemetry . dispose ( ) ;
464
+ service . dispose ( ) ;
465
+ }
466
+ finally {
467
+ Errors . setUnexpectedErrorHandler ( origErrorHandler ) ;
468
+ }
469
+ } ) ) ;
470
+
471
+ test ( 'Uncaught Error Telemetry removes PII but preserves Code file path when PIIPath is configured' , sinon . test ( function ( ) {
472
+ let errorStub = this . stub ( window , 'onerror' ) ;
473
+ let settings = new ErrorTestingSettings ( ) ;
474
+ let testAppender = new TestTelemetryAppender ( ) ;
475
+ let service = new TelemetryService ( { appender : testAppender , piiPaths : [ settings . personalInfo + '/resources/app/' ] } , undefined ) ;
476
+ const errorTelemetry = new ErrorTelemetry ( service ) ;
477
+
478
+ let dangerousPathWithImportantInfoError : any = new Error ( 'dangerousPathWithImportantInfo' ) ;
479
+ dangerousPathWithImportantInfoError . stack = settings . stack ;
480
+ ( < any > window . onerror ) ( settings . dangerousPathWithImportantInfo , 'test.js' , 2 , 42 , dangerousPathWithImportantInfoError ) ;
481
+ this . clock . tick ( ErrorTelemetry . ERROR_FLUSH_TIMEOUT ) ;
482
+
483
+ assert . equal ( errorStub . callCount , 1 ) ;
484
+ // Test that important information remains but personal info does not
485
+ assert . notEqual ( testAppender . events [ 0 ] . data . message . indexOf ( settings . importantInfo ) , - 1 ) ;
486
+ assert . equal ( testAppender . events [ 0 ] . data . message . indexOf ( settings . personalInfo ) , - 1 ) ;
487
+ assert . equal ( testAppender . events [ 0 ] . data . message . indexOf ( settings . filePrefix ) , - 1 ) ;
488
+ assert . notEqual ( testAppender . events [ 0 ] . data . stack . indexOf ( settings . importantInfo ) , - 1 ) ;
489
+ assert . equal ( testAppender . events [ 0 ] . data . stack . indexOf ( settings . personalInfo ) , - 1 ) ;
490
+ assert . equal ( testAppender . events [ 0 ] . data . stack . indexOf ( settings . filePrefix ) , - 1 ) ;
491
+ assert . notEqual ( testAppender . events [ 0 ] . data . stack . indexOf ( settings . stack [ 4 ] ) , - 1 ) ;
492
+ assert . equal ( testAppender . events [ 0 ] . data . stack . split ( '\n' ) . length , settings . stack . length ) ;
493
+
494
+ errorTelemetry . dispose ( ) ;
495
+ service . dispose ( ) ;
496
+ } ) ) ;
497
+
436
498
test ( 'Unexpected Error Telemetry removes PII but preserves Missing Model error message' , sinon . test ( function ( ) {
437
499
438
500
let origErrorHandler = Errors . errorHandler . getUnexpectedErrorHandler ( ) ;
0 commit comments