Skip to content

Commit 6e8a32c

Browse files
authored
fix: continue leader failed should close leader component (#56)
* fix: continue leader failed should close leader component * test: add case for LeaderChangeHandler
1 parent 6ddfd94 commit 6e8a32c

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

fastflow.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ func (l *LeaderChangedHandler) Handle(cxt context.Context, e goevent.Event) {
152152
log.Println("leader initial")
153153
}
154154
// continue leader failed
155-
if !lcEvent.IsLeader && len(l.leaderCloser) == 0 {
155+
if !lcEvent.IsLeader && len(l.leaderCloser) != 0 {
156156
l.Close()
157157
}
158158
}

fastflow_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package fastflow
22

33
import (
4+
"context"
45
"fmt"
56
"testing"
67
"time"
78

89
"github.com/shiningrush/fastflow/pkg/entity"
10+
"github.com/shiningrush/fastflow/pkg/event"
911
"github.com/shiningrush/fastflow/pkg/mod"
1012
"github.com/shiningrush/fastflow/pkg/utils"
1113
"github.com/stretchr/testify/assert"
@@ -190,3 +192,48 @@ tasks:
190192
})
191193
}
192194
}
195+
196+
func Test_LeaderChangeHandler(t *testing.T) {
197+
tests := []struct {
198+
isLeader bool
199+
calledEnsured []bool
200+
closerLenth int
201+
}{
202+
{
203+
isLeader: true,
204+
calledEnsured: []bool{},
205+
closerLenth: 1,
206+
},
207+
{
208+
isLeader: false,
209+
calledEnsured: []bool{true},
210+
closerLenth: 0,
211+
},
212+
}
213+
214+
for _, tc := range tests {
215+
called := []bool{}
216+
keeper := &mod.MockKeeper{}
217+
handler := &LeaderChangedHandler{
218+
opt: &InitialOption{
219+
Keeper: keeper,
220+
},
221+
leaderCloser: []mod.Closer{},
222+
}
223+
224+
closer := &mod.MockCloser{}
225+
closer.On("Close").Run(func(args mock.Arguments) {
226+
called = append(called, true)
227+
}).Return(nil)
228+
handler.leaderCloser = append(handler.leaderCloser, closer)
229+
230+
mockEvent := &event.LeaderChanged{IsLeader: tc.isLeader, WorkerKey: "worker-key"}
231+
ctx := context.Background()
232+
233+
// Simulate the event that leads to leadership
234+
handler.Handle(ctx, mockEvent)
235+
236+
assert.Equal(t, tc.calledEnsured, called)
237+
assert.Equal(t, tc.closerLenth, len(handler.leaderCloser))
238+
}
239+
}

0 commit comments

Comments
 (0)