1
1
import { Yok } from "../../yok" ;
2
2
import { Logger } from "../../logger" ;
3
- import * as assert from "assert" ;
3
+ import * as path from "path" ;
4
+ import { assert } from "chai" ;
5
+ import * as fileSystemFile from "../../file-system" ;
4
6
5
7
const passwordReplacement = "*******" ;
6
8
const debugTrace = [ "debug" , "trace" ] ;
@@ -14,6 +16,7 @@ function createTestInjector(logLevel?: string): IInjector {
14
16
log : logLevel
15
17
} ) ;
16
18
testInjector . register ( "logger" , Logger ) ;
19
+ testInjector . register ( "fs" , fileSystemFile . FileSystem ) ;
17
20
18
21
return testInjector ;
19
22
}
@@ -22,10 +25,12 @@ describe("logger", () => {
22
25
let testInjector : IInjector ;
23
26
let logger : any ;
24
27
let outputs : any ;
28
+ let fs : IFileSystem ;
25
29
26
30
beforeEach ( ( ) => {
27
31
testInjector = createTestInjector ( ) ;
28
32
logger = testInjector . resolve ( "logger" ) ;
33
+ fs = testInjector . resolve ( "fs" ) ;
29
34
outputs = {
30
35
debug : "" ,
31
36
trace : ""
@@ -45,67 +50,83 @@ describe("logger", () => {
45
50
46
51
describe ( debugTrace . join ( "+" ) , ( ) => {
47
52
_ . each ( debugTrace , methodName => {
53
+
54
+ it ( `${ methodName } should obfuscate password parameter when the string is larger` , ( ) => {
55
+ const dataFilePath = path . join ( __dirname , './mocks/nativescript-cloud-npmjs-result.txt' ) ;
56
+ const data = fs . readText ( dataFilePath ) ;
57
+ const before = Date . now ( ) ;
58
+ logger [ methodName ] . call ( logger , data ) ;
59
+ const after = Date . now ( ) ;
60
+ console . log ( after - before ) ;
61
+
62
+ assert . notEqual ( outputs [ methodName ] . indexOf ( "password:'*******'" ) , - 1 ) ;
63
+ assert . isTrue ( after - before < 10 ) ;
64
+ } ) ;
65
+
66
+ it ( `${ methodName } should not get slower when the string is really large` , ( ) => {
67
+ const dataFilePath = path . join ( __dirname , './mocks/tns-android-npmjs-result.txt' ) ;
68
+ const data = fs . readText ( dataFilePath ) ;
69
+ const before = Date . now ( ) ;
70
+ logger [ methodName ] . call ( logger , data ) ;
71
+ const after = Date . now ( ) ;
72
+
73
+ assert . notEqual ( outputs [ methodName ] . indexOf ( "https://github.com/NativeScript/android-runtime" ) , - 1 ) ;
74
+ assert . isTrue ( after - before < 10 ) ;
75
+ } ) ;
76
+
48
77
_ . each ( passwordPair , passwordString => {
49
78
it ( `${ methodName } should obfuscate properties ending in '${ passwordString } ' with values surrounded by single quotes` , ( ) => {
50
79
const logArgument = `{ certificate${ passwordString } : 'pass', otherProperty: 'pass' }` ;
51
80
52
81
logger [ methodName ] . call ( logger , logArgument ) ;
53
82
54
- assert . deepStrictEqual ( outputs [ methodName ] , `{ certificate${ passwordString } : '${ passwordReplacement } ', otherProperty: 'pass' }` , `logger.${ methodName } should obfuscate ${ passwordString } properties` ) ;
83
+ assert . deepEqual ( outputs [ methodName ] , `{ certificate${ passwordString } : '${ passwordReplacement } ', otherProperty: 'pass' }` , `logger.${ methodName } should obfuscate ${ passwordString } properties` ) ;
55
84
} ) ;
56
85
57
86
it ( `${ methodName } should obfuscate properties ending in '${ passwordString } ' with values surrounded by single quotes when it is the last property` , ( ) => {
58
87
const logArgument = `{ certificate${ passwordString } : 'pass' }` ;
59
88
60
89
logger [ methodName ] . call ( logger , logArgument ) ;
61
90
62
- assert . deepStrictEqual ( outputs [ methodName ] , `{ certificate${ passwordString } : '${ passwordReplacement } ' }` , `logger.${ methodName } should obfuscate ${ passwordString } properties` ) ;
91
+ assert . deepEqual ( outputs [ methodName ] , `{ certificate${ passwordString } : '${ passwordReplacement } ' }` , `logger.${ methodName } should obfuscate ${ passwordString } properties` ) ;
63
92
} ) ;
64
93
65
94
it ( `${ methodName } should obfuscate properties ending in '${ passwordString } ' with values surrounded by double quotes` , ( ) => {
66
95
const logArgument = `{ certificate${ passwordString } : "pass", otherProperty: "pass" }` ;
67
96
68
97
logger [ methodName ] . call ( logger , logArgument ) ;
69
98
70
- assert . deepStrictEqual ( outputs [ methodName ] , `{ certificate${ passwordString } : "${ passwordReplacement } ", otherProperty: "pass" }` , `logger.${ methodName } should obfuscate ${ passwordString } properties` ) ;
99
+ assert . deepEqual ( outputs [ methodName ] , `{ certificate${ passwordString } : "${ passwordReplacement } ", otherProperty: "pass" }` , `logger.${ methodName } should obfuscate ${ passwordString } properties` ) ;
71
100
} ) ;
72
101
73
102
it ( `${ methodName } should obfuscate properties ending in '${ passwordString } ' with values surrounded by double quotes when it is the last property` , ( ) => {
74
103
const logArgument = `{ certificate${ passwordString } : "pass" }` ;
75
104
76
105
logger [ methodName ] . call ( logger , logArgument ) ;
77
106
78
- assert . deepStrictEqual ( outputs [ methodName ] , `{ certificate${ passwordString } : "${ passwordReplacement } " }` , `logger.${ methodName } should obfuscate ${ passwordString } properties` ) ;
107
+ assert . deepEqual ( outputs [ methodName ] , `{ certificate${ passwordString } : "${ passwordReplacement } " }` , `logger.${ methodName } should obfuscate ${ passwordString } properties` ) ;
79
108
} ) ;
80
109
81
110
it ( `${ methodName } should obfuscate '${ passwordString } ' query parameter when it is the last query parameter` , ( ) => {
82
111
const logArgument = `{ proto: 'https', host: 'platform.telerik.com', path: '/appbuilder/api/itmstransporter/applications?username=dragon.telerikov%40yahoo.com&${ passwordString } =somePassword', method: 'POST' }` ;
83
112
84
113
logger [ methodName ] . call ( logger , logArgument ) ;
85
114
86
- assert . deepStrictEqual ( outputs [ methodName ] , `{ proto: 'https', host: 'platform.telerik.com', path: '/appbuilder/api/itmstransporter/applications?username=dragon.telerikov%40yahoo.com&${ passwordString } =${ passwordReplacement } ', method: 'POST' }` , `logger.${ methodName } should obfuscate ${ passwordString } when in query parameter` ) ;
115
+ assert . deepEqual ( outputs [ methodName ] , `{ proto: 'https', host: 'platform.telerik.com', path: '/appbuilder/api/itmstransporter/applications?username=dragon.telerikov%40yahoo.com&${ passwordString } =${ passwordReplacement } ', method: 'POST' }` , `logger.${ methodName } should obfuscate ${ passwordString } when in query parameter` ) ;
87
116
} ) ;
88
117
89
118
it ( `${ methodName } should obfuscate '${ passwordString } ' query parameter when it is not the last query parameter` , ( ) => {
90
119
const logArgument = `{ proto: 'https', host: 'platform.telerik.com', path: '/appbuilder/api/itmstransporter/applications?username=dragon.telerikov%40yahoo.com&${ passwordString } =somePassword&data=someOtherData', method: 'POST' }` ;
91
120
92
121
logger [ methodName ] . call ( logger , logArgument ) ;
93
122
94
- assert . deepStrictEqual ( outputs [ methodName ] , `{ proto: 'https', host: 'platform.telerik.com', path: '/appbuilder/api/itmstransporter/applications?username=dragon.telerikov%40yahoo.com&${ passwordString } =${ passwordReplacement } &data=someOtherData', method: 'POST' }` , `logger.${ methodName } should obfuscate ${ passwordString } when in query parameter` ) ;
123
+ assert . deepEqual ( outputs [ methodName ] , `{ proto: 'https', host: 'platform.telerik.com', path: '/appbuilder/api/itmstransporter/applications?username=dragon.telerikov%40yahoo.com&${ passwordString } =${ passwordReplacement } &data=someOtherData', method: 'POST' }` , `logger.${ methodName } should obfuscate ${ passwordString } when in query parameter` ) ;
95
124
} ) ;
96
125
} ) ;
97
126
} ) ;
98
127
} ) ;
99
128
100
129
describe ( "trace" , ( ) => {
101
- it ( "should obfuscate body of request to /api/itmstransporter" , ( ) => {
102
- const request = "{ proto: 'https', host: 'platform.telerik.com', path: '/appbuilder/api/itmstransporter/applications?username=dragon.telerikov%40yahoo.com', method: 'POST' }" ;
103
- const requestBody = '"password"' ;
104
-
105
- logger . trace ( request , requestBody ) ;
106
-
107
- assert . deepEqual ( outputs . trace , `${ request } "${ passwordReplacement } "` , "logger.trace should obfuscate body of api/itmstransporter requests" ) ;
108
- } ) ;
109
130
110
131
it ( "should not obfuscate body of other requests" , ( ) => {
111
132
const request = "{ proto: 'https', host: 'platform.telerik.com', path: '/appbuilder/api/endpoint/applications?data=somedata, method: 'POST' }" ;
0 commit comments