23
23
package handler
24
24
25
25
import (
26
+ "errors"
26
27
"sync"
27
28
"testing"
28
29
"time"
@@ -32,12 +33,14 @@ import (
32
33
"github.com/uber-go/tally"
33
34
34
35
"github.com/uber/cadence/client/history"
36
+ "github.com/uber/cadence/common"
35
37
"github.com/uber/cadence/common/cache"
36
38
"github.com/uber/cadence/common/clock"
37
39
"github.com/uber/cadence/common/cluster"
38
40
"github.com/uber/cadence/common/dynamicconfig"
39
41
cadence_errors "github.com/uber/cadence/common/errors"
40
42
"github.com/uber/cadence/common/log/loggerimpl"
43
+ "github.com/uber/cadence/common/log/testlogger"
41
44
"github.com/uber/cadence/common/membership"
42
45
"github.com/uber/cadence/common/metrics"
43
46
"github.com/uber/cadence/common/persistence"
@@ -274,6 +277,49 @@ func TestSubscriptionAndErrorReturned(t *testing.T) {
274
277
e .subscribeToMembershipChanges ()
275
278
}
276
279
280
+ func TestSubscribeToMembershipChangesQuitsIfSubscribeFails (t * testing.T ) {
281
+ ctrl := gomock .NewController (t )
282
+ m := membership .NewMockResolver (ctrl )
283
+
284
+ logger , logs := testlogger .NewObserved (t )
285
+
286
+ shutdownWG := sync.WaitGroup {}
287
+ shutdownWG .Add (1 )
288
+
289
+ e := matchingEngineImpl {
290
+ shutdownCompletion : & shutdownWG ,
291
+ membershipResolver : m ,
292
+ config : & config.Config {
293
+ EnableTasklistOwnershipGuard : func (opts ... dynamicconfig.FilterOption ) bool { return true },
294
+ },
295
+ shutdown : make (chan struct {}),
296
+ logger : logger ,
297
+ }
298
+
299
+ // this should trigger the error case on a membership event
300
+ m .EXPECT ().WhoAmI ().Return (membership.HostInfo {}, assert .AnError ).AnyTimes ()
301
+
302
+ m .EXPECT ().Subscribe (service .Matching , "matching-engine" , gomock .Any ()).
303
+ Return (errors .New ("matching-engine is already subscribed to updates" ))
304
+
305
+ go func () {
306
+ // then call stop so the test can finish
307
+ time .Sleep (time .Second )
308
+ e .Stop ()
309
+ }()
310
+
311
+ e .subscribeToMembershipChanges ()
312
+ // check we emitted error-message
313
+ filteredLogs := logs .FilterMessage ("Failed to subscribe to membership updates" )
314
+ assert .Equal (t , 1 , filteredLogs .Len (), "error-message should be produced" )
315
+
316
+ assert .True (
317
+ t ,
318
+ common .AwaitWaitGroup (& shutdownWG , 10 * time .Second ),
319
+ "subscribeToMembershipChanges should immediately shut down because of critical error" ,
320
+ )
321
+ }
322
+
277
323
func TestGetTasklistManagerShutdownScenario (t * testing.T ) {
278
324
ctrl := gomock .NewController (t )
279
325
m := membership .NewMockResolver (ctrl )
0 commit comments