55
66 "github.com/rs/zerolog"
77 "github.com/stretchr/testify/assert"
8+ "github.com/stretchr/testify/require"
89)
910
1011// No listening sessions will not write to the channel
@@ -22,12 +23,13 @@ func TestLoggerWrite_OneSession(t *testing.T) {
2223
2324 session := logger .Listen ()
2425 defer logger .Close (session )
25- zlog .Info ().Int ("type" , int (HTTP )).Msg ("hello" )
26+ zlog .Info ().Int (EventTypeKey , int (HTTP )).Msg ("hello" )
2627 select {
2728 case event := <- session .listener :
29+ assert .NotEmpty (t , event .Time )
2830 assert .Equal (t , "hello" , event .Message )
29- assert .Equal (t , LogLevel ( "info" ) , event .Level )
30- assert .Equal (t , HTTP , event .Type )
31+ assert .Equal (t , Info , event .Level )
32+ assert .Equal (t , HTTP , event .Event )
3133 default :
3234 assert .Fail (t , "expected an event to be in the listener" )
3335 }
@@ -41,26 +43,28 @@ func TestLoggerWrite_MultipleSessions(t *testing.T) {
4143 session1 := logger .Listen ()
4244 defer logger .Close (session1 )
4345 session2 := logger .Listen ()
44- zlog .Info ().Int ("type" , int (HTTP )).Msg ("hello" )
46+ zlog .Info ().Int (EventTypeKey , int (HTTP )).Msg ("hello" )
4547 for _ , session := range []* Session {session1 , session2 } {
4648 select {
4749 case event := <- session .listener :
50+ assert .NotEmpty (t , event .Time )
4851 assert .Equal (t , "hello" , event .Message )
49- assert .Equal (t , LogLevel ( "info" ) , event .Level )
50- assert .Equal (t , HTTP , event .Type )
52+ assert .Equal (t , Info , event .Level )
53+ assert .Equal (t , HTTP , event .Event )
5154 default :
5255 assert .Fail (t , "expected an event to be in the listener" )
5356 }
5457 }
5558
5659 // Close session2 and make sure session1 still receives events
5760 logger .Close (session2 )
58- zlog .Info ().Int ("type" , int (HTTP )).Msg ("hello2" )
61+ zlog .Info ().Int (EventTypeKey , int (HTTP )).Msg ("hello2" )
5962 select {
6063 case event := <- session1 .listener :
64+ assert .NotEmpty (t , event .Time )
6165 assert .Equal (t , "hello2" , event .Message )
62- assert .Equal (t , LogLevel ( "info" ) , event .Level )
63- assert .Equal (t , HTTP , event .Type )
66+ assert .Equal (t , Info , event .Level )
67+ assert .Equal (t , HTTP , event .Event )
6468 default :
6569 assert .Fail (t , "expected an event to be in the listener" )
6670 }
@@ -73,3 +77,62 @@ func TestLoggerWrite_MultipleSessions(t *testing.T) {
7377 // pass
7478 }
7579}
80+
81+ type mockWriter struct {
82+ event * Log
83+ err error
84+ }
85+
86+ func (m * mockWriter ) Write (p []byte ) (int , error ) {
87+ m .event , m .err = parseZerologEvent (p )
88+ return len (p ), nil
89+ }
90+
91+ // Validate all event types are set properly
92+ func TestParseZerologEvent_EventTypes (t * testing.T ) {
93+ writer := mockWriter {}
94+ zlog := zerolog .New (& writer ).With ().Timestamp ().Logger ().Level (zerolog .InfoLevel )
95+
96+ for _ , test := range []LogEventType {
97+ Cloudflared ,
98+ HTTP ,
99+ TCP ,
100+ UDP ,
101+ } {
102+ t .Run (test .String (), func (t * testing.T ) {
103+ defer func () { writer .err = nil }()
104+ zlog .Info ().Int (EventTypeKey , int (test )).Msg ("test" )
105+ require .NoError (t , writer .err )
106+ require .Equal (t , test , writer .event .Event )
107+ })
108+ }
109+
110+ // Invalid defaults to Cloudflared LogEventType
111+ t .Run ("Invalid" , func (t * testing.T ) {
112+ defer func () { writer .err = nil }()
113+ zlog .Info ().Str (EventTypeKey , "unknown" ).Msg ("test" )
114+ require .NoError (t , writer .err )
115+ require .Equal (t , Cloudflared , writer .event .Event )
116+ })
117+ }
118+
119+ // Validate top-level keys are removed from Fields
120+ func TestParseZerologEvent_Fields (t * testing.T ) {
121+ writer := mockWriter {}
122+ zlog := zerolog .New (& writer ).With ().Timestamp ().Logger ().Level (zerolog .InfoLevel )
123+ zlog .Info ().Int (EventTypeKey , int (Cloudflared )).Str ("test" , "test" ).Msg ("test message" )
124+ require .NoError (t , writer .err )
125+ event := writer .event
126+ require .NotEmpty (t , event .Time )
127+ require .Equal (t , Cloudflared , event .Event )
128+ require .Equal (t , Info , event .Level )
129+ require .Equal (t , "test message" , event .Message )
130+
131+ // Make sure Fields doesn't have other set keys used in the Log struct
132+ require .NotEmpty (t , event .Fields )
133+ require .Equal (t , "test" , event .Fields ["test" ])
134+ require .NotContains (t , event .Fields , EventTypeKey )
135+ require .NotContains (t , event .Fields , LevelKey )
136+ require .NotContains (t , event .Fields , MessageKey )
137+ require .NotContains (t , event .Fields , TimeKey )
138+ }
0 commit comments