@@ -99,6 +99,70 @@ func TestEventEmitter(t *testing.T) {
9999 }
100100 })
101101
102+ t .Run ("error-cap" , func (t * testing.T ) {
103+ emitter := NewEventEmitter (WithSubscriptionBufSize (10 ))
104+
105+ for i := range 150 {
106+ emitter .EmitError (fmt .Sprintf ("error %d" , i ), st .ErrorLevelError )
107+ }
108+
109+ _ , _ , stateEvents := emitter .Subscribe ()
110+
111+ var errorEvents []Event
112+ for _ , ev := range stateEvents {
113+ if ev .Type == EventTypeError {
114+ errorEvents = append (errorEvents , ev )
115+ }
116+ }
117+
118+ assert .Len (t , errorEvents , maxStoredErrors )
119+
120+ // Errors should be the last 100: "error 50" through "error 149".
121+ for i , ev := range errorEvents {
122+ body , ok := ev .Payload .(ErrorBody )
123+ assert .True (t , ok )
124+ assert .Equal (t , fmt .Sprintf ("error %d" , i + 50 ), body .Message )
125+ }
126+ })
127+
128+ t .Run ("error-events-in-initial-state" , func (t * testing.T ) {
129+ mockClock := quartz .NewMock (t )
130+ fixedTime := time .Date (2024 , 1 , 1 , 12 , 0 , 0 , 0 , time .UTC )
131+ mockClock .Set (fixedTime )
132+
133+ emitter := NewEventEmitter (WithClock (mockClock ), WithSubscriptionBufSize (10 ))
134+
135+ emitter .EmitError ("err1" , st .ErrorLevelError )
136+ mockClock .Set (fixedTime .Add (1 * time .Second ))
137+ emitter .EmitError ("err2" , st .ErrorLevelWarning )
138+ mockClock .Set (fixedTime .Add (2 * time .Second ))
139+ emitter .EmitError ("err3" , st .ErrorLevelError )
140+
141+ _ , _ , stateEvents := emitter .Subscribe ()
142+
143+ var errorEvents []Event
144+ for _ , ev := range stateEvents {
145+ if ev .Type == EventTypeError {
146+ errorEvents = append (errorEvents , ev )
147+ }
148+ }
149+
150+ assert .Len (t , errorEvents , 3 )
151+
152+ expected := []ErrorBody {
153+ {Message : "err1" , Level : st .ErrorLevelError , Time : fixedTime },
154+ {Message : "err2" , Level : st .ErrorLevelWarning , Time : fixedTime .Add (1 * time .Second )},
155+ {Message : "err3" , Level : st .ErrorLevelError , Time : fixedTime .Add (2 * time .Second )},
156+ }
157+ for i , ev := range errorEvents {
158+ body , ok := ev .Payload .(ErrorBody )
159+ assert .True (t , ok )
160+ assert .Equal (t , expected [i ].Message , body .Message )
161+ assert .Equal (t , expected [i ].Level , body .Level )
162+ assert .Equal (t , expected [i ].Time , body .Time )
163+ }
164+ })
165+
102166 t .Run ("clock-injection" , func (t * testing.T ) {
103167 mockClock := quartz .NewMock (t )
104168 fixedTime := time .Date (2024 , 1 , 1 , 12 , 0 , 0 , 0 , time .UTC )
0 commit comments