logger.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /* global test:false, expect:false, describe:false, beforeAll:false, */
  2. const chalk = require('chalk')
  3. const logger = require('../../src/server/logger')
  4. describe('Test Logger secret mask', () => {
  5. beforeAll(() => {
  6. logger.setMaskables(['ToBeMasked1', 'toBeMasked2', 'toBeMasked(And)?Escaped'])
  7. })
  8. test('masks secret values present in log.info messages', () => {
  9. let loggedMessage = null
  10. // override the default console.log to capture the logged message
  11. const defaultConsoleLog = console.log
  12. console.log = (logPrefix, message) => {
  13. loggedMessage = message
  14. defaultConsoleLog(logPrefix, message)
  15. }
  16. logger.info('this info has ToBeMasked1 and toBeMasked2 and case-insensitive TOBEMasKED2')
  17. // restore the default console.log before using "expect" to avoid weird log behaviors
  18. console.log = defaultConsoleLog
  19. const exptectedMsg = 'this info has ****** and ****** and case-insensitive ******'
  20. expect(loggedMessage).toBeTruthy()
  21. expect(loggedMessage).toBe(exptectedMsg)
  22. })
  23. test('masks secret values present in log.warn messages', () => {
  24. let loggedMessage = null
  25. // override the default console.log to capture the logged message
  26. const defaultConsoleLog = console.log
  27. console.log = (logPrefix, message) => {
  28. loggedMessage = message
  29. defaultConsoleLog(logPrefix, message)
  30. }
  31. logger.warn('this warning has ToBeMasked1 and toBeMasked2 and case-insensitive TOBEMasKED2')
  32. // restore the default console.log before using "expect" to avoid weird log behaviors
  33. console.log = defaultConsoleLog
  34. const exptectedMsg = chalk.bold.yellow('this warning has ****** and ****** and case-insensitive ******')
  35. expect(loggedMessage).toBeTruthy()
  36. expect(loggedMessage).toBe(exptectedMsg)
  37. })
  38. test('masks secret values present in log.error messages', () => {
  39. let loggedMessage = null
  40. // override the default console.log to capture the logged message
  41. const defaultConsoleLog = console.log
  42. console.log = (logPrefix, message) => {
  43. loggedMessage = message
  44. defaultConsoleLog(logPrefix, message)
  45. }
  46. logger.error(new Error('this error has ToBeMasked1 and toBeMasked2 and case-insensitive TOBEMasKED2'))
  47. // restore the default console.log before using "expect" to avoid weird log behaviors
  48. console.log = defaultConsoleLog
  49. const exptectedMsg = chalk.bold.red('Error: this error has ****** and ****** and case-insensitive ******')
  50. expect(loggedMessage).toBeTruthy()
  51. expect(loggedMessage).toBe(exptectedMsg)
  52. })
  53. test('masks secret values present in log.error stack trace', () => {
  54. let loggedMessage = null
  55. // override the default console.log to capture the logged message
  56. const defaultConsoleLog = console.log
  57. console.log = (logPrefix, message) => {
  58. loggedMessage = message
  59. defaultConsoleLog(logPrefix, message)
  60. }
  61. const err = new Error('this error has ToBeMasked1 and toBeMasked2 and case-insensitive TOBEMasKED2')
  62. logger.error(err, '', '', true)
  63. // restore the default console.log before using "expect" to avoid weird log behaviors
  64. console.log = defaultConsoleLog
  65. const exptectedMsg = chalk.bold.red('Error: this error has ****** and ****** and case-insensitive ******')
  66. expect(loggedMessage).toBeTruthy()
  67. expect(loggedMessage.startsWith(exptectedMsg)).toBe(true)
  68. expect(loggedMessage.includes('ToBeMasked1')).toBe(false)
  69. expect(loggedMessage.includes('toBeMasked2')).toBe(false)
  70. expect(loggedMessage.includes('TOBEMasKED2')).toBe(false)
  71. })
  72. test('escape regex characters from secret values before masking them', () => {
  73. let loggedMessage = null
  74. // override the default console.log to capture the logged message
  75. const defaultConsoleLog = console.log
  76. console.log = (logPrefix, message) => {
  77. loggedMessage = message
  78. defaultConsoleLog(logPrefix, message)
  79. }
  80. logger.warn('this warning has ToBeMasked(And)?Escaped but not toBeMaskedEscaped ')
  81. // restore the default console.log before using "expect" to avoid weird log behaviors
  82. console.log = defaultConsoleLog
  83. const exptectedMsg = chalk.bold.yellow('this warning has ****** but not toBeMaskedEscaped ')
  84. expect(loggedMessage).toBeTruthy()
  85. expect(loggedMessage).toBe(exptectedMsg)
  86. })
  87. })