@@ -9,7 +9,8 @@ function testImmutableContext() {
9
9
selectSenders : ( ) => [ ] ,
10
10
} ;
11
11
test ( "should not modify context in log() calls" , ( ) => {
12
- const logger = new Logger ( strategy ) ;
12
+ const logger = new Logger ( strategy ) ;
13
+ logger . side = 'test' ;
13
14
const originalContext = { } ;
14
15
const context = { ...originalContext } ;
15
16
@@ -29,7 +30,7 @@ function testImmutableContext() {
29
30
30
31
function testMessageContext ( ) {
31
32
let result ;
32
- const referenceContext = { a : "A" } ;
33
+ const referenceContext = ( ) => ( { a : "A" } ) ;
33
34
const sender = new class {
34
35
send ( level , message , context ) {
35
36
result = { level, message, context } ;
@@ -41,73 +42,117 @@ function testMessageContext() {
41
42
selectSenders : ( ) => [ sender ] ,
42
43
} ;
43
44
44
- const DETAILS_KEY = "message_details" ;
45
-
46
- test ( `should add the message argument to ${ DETAILS_KEY } ` , ( ) => {
45
+ /**
46
+ * log(..., { a: 1 }) should ...
47
+ *
48
+ * - log { message_details: { a: 1} }.
49
+ */
50
+ test ( `should add the message argument to ${ Logger . KEY_DETAILS } ` , ( ) => {
47
51
const logger = new Logger ( strategy ) ;
48
52
result = null ;
49
- logger . log ( LogLevel . DEBUG , "some message" , referenceContext ) ;
53
+ logger . log ( LogLevel . DEBUG , "some message" , referenceContext ( ) ) ;
50
54
51
- const actual = result . context [ DETAILS_KEY ] . a ;
55
+ const actual = result . context [ Logger . KEY_DETAILS ] . a ;
52
56
const expected = "A" ;
53
57
// Message details is set
54
58
expect ( actual ) . toBe ( expected ) ;
55
59
} ) ;
56
60
57
- test ( `should merge contents of existing ${ DETAILS_KEY } context key` , ( ) => {
61
+ /**
62
+ * log(..., { a: 1 }) should ...
63
+ *
64
+ * - NOT log { a: 1 }.
65
+ */
66
+ test ( "should not add the message arguments to context root" , ( ) => {
58
67
const logger = new Logger ( strategy ) ;
59
68
result = null ;
60
- const originalContext = Object . assign ( { [ DETAILS_KEY ] : { foo : "bar" } } , referenceContext ) ;
61
- logger . log ( LogLevel . DEBUG , "some message" , originalContext ) ;
69
+ logger . log ( LogLevel . DEBUG , "some message" , referenceContext ( ) ) ;
62
70
63
- const actual = result . context [ DETAILS_KEY ] ;
64
-
65
- // Original top-level key should be in top [DETAILS_KEY].
66
- const expectedReference = "A" ;
67
- expect ( actual ) . toHaveProperty ( "a" ) ;
68
- expect ( actual . a ) . toBe ( expectedReference ) ;
69
-
70
- // Key nested in original message_detail should also in top [DETAILS_KEY].
71
- const expectedNested = "bar" ;
72
- expect ( actual ) . toHaveProperty ( "foo" ) ;
73
- expect ( actual . foo ) . toBe ( expectedNested ) ;
71
+ const actual = result . context . hasOwnProperty ( "a" ) ;
72
+ const expected = false ;
73
+ // Message details is set
74
+ expect ( actual ) . toBe ( expected ) ;
74
75
} ) ;
75
76
76
- test ( `should not merge existing ${ DETAILS_KEY } context key itself` , ( ) => {
77
+ /**
78
+ * log(..., { a: "A", message_details: { foo: "bar" } }) should...
79
+ *
80
+ * - log { message_details: { a: "A", message_details: { foo: "bar" } } },
81
+ * unlike the message_details merging it did until 0.1.18 included.
82
+ */
83
+ test ( `should not merge contents of existing ${ Logger . KEY_DETAILS } context key` , ( ) => {
77
84
const logger = new Logger ( strategy ) ;
78
85
result = null ;
79
- const originalContext = Object . assign ( { [ DETAILS_KEY ] : { foo : "bar" } } , referenceContext ) ;
86
+ const originalContext = Object . assign ( { [ Logger . KEY_DETAILS ] : { foo : "bar" } } , referenceContext ( ) ) ;
80
87
logger . log ( LogLevel . DEBUG , "some message" , originalContext ) ;
81
88
82
- // Message+_details should not contain a nested [DETAILS_KEY].
83
- const actual = result . context [ DETAILS_KEY ] ;
84
- expect ( actual ) . not . toHaveProperty ( DETAILS_KEY ) ;
89
+ const actual = result . context ;
90
+ expect ( actual ) . not . toHaveProperty ( "a" ) ;
91
+ expect ( actual ) . not . toHaveProperty ( "foo" ) ;
92
+ expect ( actual ) . toHaveProperty ( Logger . KEY_DETAILS ) ;
93
+
94
+ // Original top-level keys should still be in top [KEY_DETAILS].
95
+ const actualDetails = actual [ Logger . KEY_DETAILS ] ;
96
+ expect ( actualDetails ) . toHaveProperty ( "a" , "A" ) ;
97
+ expect ( actualDetails ) . toHaveProperty ( Logger . KEY_DETAILS ) ;
98
+ expect ( actualDetails ) . not . toHaveProperty ( "foo" ) ;
99
+
100
+ // Key nested in original message_detail should remain in place.
101
+ const actualNested = actualDetails [ Logger . KEY_DETAILS ] ;
102
+ expect ( actualNested ) . not . toHaveProperty ( "a" , "A" ) ;
103
+ expect ( actualNested ) . not . toHaveProperty ( Logger . KEY_DETAILS ) ;
104
+ expect ( actualNested ) . toHaveProperty ( "foo" , 'bar' ) ;
85
105
} ) ;
86
106
87
- test ( `should keep the latest keys when merging existing ${ DETAILS_KEY } ` , ( ) => {
107
+ /**
108
+ * log(..., { a: "A", message_details: { a: "A" } }) should...
109
+ *
110
+ * - log { message_details: { a: "A", message_details: { a: "A" } } },
111
+ * unlike the message_details merging it did until 0.1.18 included.
112
+ */
113
+ test ( `should not merge existing ${ Logger . KEY_DETAILS } context key itself` , ( ) => {
88
114
const logger = new Logger ( strategy ) ;
89
115
result = null ;
90
- const originalContext = Object . assign ( referenceContext , { [ DETAILS_KEY ] : { a : "B " } } ) ;
116
+ const originalContext = Object . assign ( { [ Logger . KEY_DETAILS ] : { a : "A " } } , referenceContext ( ) ) ;
91
117
logger . log ( LogLevel . DEBUG , "some message" , originalContext ) ;
92
118
93
- // [DETAILS_KEY] should contain the newly added value for key "a", not the
94
- // one present in the initial [DETAILS_KEY].
95
- const actual = result . context [ DETAILS_KEY ] ;
96
- const expected = "A" ;
97
- // Message details is set
98
- expect ( actual ) . toHaveProperty ( "a" ) ;
99
- expect ( actual . a ) . toBe ( expected ) ;
119
+ // Message_details should only contain a nested [KEY_DETAILS].
120
+ const actual = result . context ;
121
+ const keys = Object . keys ( actual ) . sort ( ) ;
122
+ expect ( keys . length ) . toBe ( 3 ) ;
123
+ expect ( keys ) . toEqual ( [ Logger . KEY_DETAILS , Logger . KEY_SOURCE , Logger . KEY_TS ] ) ;
124
+ expect ( actual ) . toHaveProperty ( Logger . KEY_DETAILS ) ;
125
+
126
+ // Original top-level keys should still be in top [KEY_DETAILS].
127
+ const actualDetails = actual [ Logger . KEY_DETAILS ] ;
128
+ expect ( Object . keys ( actualDetails ) . length ) . toBe ( 2 ) ;
129
+ expect ( actualDetails ) . toHaveProperty ( "a" , "A" ) ;
130
+ expect ( actualDetails ) . toHaveProperty ( Logger . KEY_DETAILS ) ;
131
+
132
+ // Key nested in original message_detail should remain in place.
133
+ const actualNested = actualDetails [ Logger . KEY_DETAILS ] ;
134
+ expect ( Object . keys ( actualNested ) . length ) . toBe ( 1 ) ;
135
+ expect ( actualNested ) . toHaveProperty ( "a" , "A" ) ;
100
136
} ) ;
101
137
102
- test ( "should not add the message arguments to context root" , ( ) => {
138
+ /**
139
+ * log(..., { a: "A", message_details: { a: "B" } }) should ...
140
+ *
141
+ * - log { message_details: { a: "A", message_details: { a: "B" } } }.
142
+ */
143
+ test ( `should not merge keys within ${ Logger . KEY_DETAILS } ` , ( ) => {
103
144
const logger = new Logger ( strategy ) ;
104
145
result = null ;
105
- logger . log ( LogLevel . DEBUG , "some message" , referenceContext ) ;
146
+ const originalContext = Object . assign ( { [ Logger . KEY_DETAILS ] : { a : "B" } } , referenceContext ( ) ) ;
147
+ logger . log ( LogLevel . DEBUG , "some message" , originalContext ) ;
106
148
107
- const actual = result . context . hasOwnProperty ( "a" ) ;
108
- const expected = false ;
109
- // Message details is set
110
- expect ( actual ) . toBe ( expected ) ;
149
+ // [KEY_DETAILS] should contain the newly added value for key "a", not the
150
+ // one present in the initial [KEY_DETAILS].
151
+ const actual = result . context [ Logger . KEY_DETAILS ] ;
152
+ const expected = "A" ;
153
+ // Message details is set.
154
+ expect ( actual ) . toHaveProperty ( "a" ) ;
155
+ expect ( actual . a ) . toBe ( expected ) ;
111
156
} ) ;
112
157
}
113
158
@@ -303,7 +348,9 @@ function testProcessors() {
303
348
class TimeWarp extends ProcessorBase {
304
349
// Let's do the time warp again.
305
350
process ( context ) {
306
- context . timestamp = { log : + new Date ( "1978-11-19 05:00:00" ) } ;
351
+ context [ Logger . KEY_TS ] = {
352
+ test : { log : + new Date ( "1978-11-19 05:00:00" ) } ,
353
+ } ;
307
354
context . hostname = "remote" ;
308
355
return context ;
309
356
}
@@ -317,6 +364,7 @@ function testProcessors() {
317
364
selectSenders : ( ) => [ this . sender ] ,
318
365
} ;
319
366
this . logger = new Logger ( this . strategy ) ;
367
+ this . logger . side = 'test' ;
320
368
} ) ;
321
369
322
370
test ( "processors should be able to modify the content of ordinary existing keys" , ( ) => {
@@ -368,8 +416,8 @@ function testProcessors() {
368
416
expect ( this . sender . logs . length ) . toBe ( 1 ) ;
369
417
const [ , , context ] = this . sender . logs . pop ( ) ;
370
418
expect ( context ) . toHaveProperty ( "hostname" , "local" ) ;
371
- expect ( context ) . toHaveProperty ( "timestamp. log" ) ;
372
- const lag = ts - context . timestamp . log ;
419
+ expect ( context ) . toHaveProperty ( ` ${ Logger . KEY_TS } . ${ this . logger . side } . log` ) ;
420
+ const lag = ts - context [ Logger . KEY_TS ] [ this . logger . side ] . log ;
373
421
expect ( lag ) . toBeGreaterThanOrEqual ( 0 ) ;
374
422
// No sane machine should take more than 100 msec to return from log() with
375
423
// such a fast sending configuration.
@@ -384,8 +432,8 @@ function testProcessors() {
384
432
expect ( this . sender . logs . length ) . toBe ( 1 ) ;
385
433
const [ , , context ] = this . sender . logs . pop ( ) ;
386
434
expect ( context ) . toHaveProperty ( "hostname" , "remote" ) ;
387
- expect ( context ) . toHaveProperty ( "timestamp. log" ) ;
388
- const lag = ts - context . timestamp . log ;
435
+ expect ( context ) . toHaveProperty ( ` ${ Logger . KEY_TS } . ${ this . logger . side } . log` ) ;
436
+ const lag = ts - context [ Logger . KEY_TS ] [ this . logger . side ] . log ;
389
437
expect ( lag ) . toBeGreaterThanOrEqual ( 0 ) ;
390
438
// No sane machine should take more than 100 msec to return from log() with
391
439
// such a fast sending configuration. The TimeWarp processor attempts to
0 commit comments