github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/services/remotecluster/service_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package remotecluster 5 6 import ( 7 "sync/atomic" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 13 "github.com/masterhung0112/hk_server/v5/model" 14 ) 15 16 func TestService_AddTopicListener(t *testing.T) { 17 var count int32 18 19 l1 := func(msg model.RemoteClusterMsg, rc *model.RemoteCluster, resp *Response) error { 20 atomic.AddInt32(&count, 1) 21 return nil 22 } 23 l2 := func(msg model.RemoteClusterMsg, rc *model.RemoteCluster, resp *Response) error { 24 atomic.AddInt32(&count, 1) 25 return nil 26 } 27 l3 := func(msg model.RemoteClusterMsg, rc *model.RemoteCluster, resp *Response) error { 28 atomic.AddInt32(&count, 1) 29 return nil 30 } 31 32 mockServer := newMockServer(t, makeRemoteClusters(NumRemotes, "")) 33 defer mockServer.Shutdown() 34 35 service, err := NewRemoteClusterService(mockServer) 36 require.NoError(t, err) 37 38 l1id := service.AddTopicListener("test", l1) 39 l2id := service.AddTopicListener("test", l2) 40 l3id := service.AddTopicListener("different", l3) 41 42 listeners := service.getTopicListeners("test") 43 assert.Len(t, listeners, 2) 44 45 rc := &model.RemoteCluster{} 46 msg1 := model.RemoteClusterMsg{Topic: "test"} 47 msg2 := model.RemoteClusterMsg{Topic: "different"} 48 49 service.ReceiveIncomingMsg(rc, msg1) 50 assert.Equal(t, int32(2), atomic.LoadInt32(&count)) 51 52 service.ReceiveIncomingMsg(rc, msg2) 53 assert.Equal(t, int32(3), atomic.LoadInt32(&count)) 54 55 service.RemoveTopicListener(l1id) 56 service.ReceiveIncomingMsg(rc, msg1) 57 assert.Equal(t, int32(4), atomic.LoadInt32(&count)) 58 59 service.RemoveTopicListener(l2id) 60 service.ReceiveIncomingMsg(rc, msg1) 61 assert.Equal(t, int32(4), atomic.LoadInt32(&count)) 62 63 service.ReceiveIncomingMsg(rc, msg2) 64 assert.Equal(t, int32(5), atomic.LoadInt32(&count)) 65 66 service.RemoveTopicListener(l3id) 67 service.ReceiveIncomingMsg(rc, msg1) 68 service.ReceiveIncomingMsg(rc, msg2) 69 assert.Equal(t, int32(5), atomic.LoadInt32(&count)) 70 71 listeners = service.getTopicListeners("test") 72 assert.Empty(t, listeners) 73 }