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  }