123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package server
- import (
- "math/rand"
- "sync/atomic"
- "testing"
- "time"
- "github.com/stretchr/testify/require"
- )
- func TestTopic_CancelSubscribersExceptUser(t *testing.T) {
- subFn := func(v *visitor, msg *message) error {
- return nil
- }
- canceled1 := atomic.Bool{}
- cancelFn1 := func() {
- canceled1.Store(true)
- }
- canceled2 := atomic.Bool{}
- cancelFn2 := func() {
- canceled2.Store(true)
- }
- to := newTopic("mytopic")
- to.Subscribe(subFn, "", cancelFn1)
- to.Subscribe(subFn, "u_phil", cancelFn2)
- to.CancelSubscribersExceptUser("u_phil")
- require.True(t, canceled1.Load())
- require.False(t, canceled2.Load())
- }
- func TestTopic_CancelSubscribersUser(t *testing.T) {
- t.Parallel()
- subFn := func(v *visitor, msg *message) error {
- return nil
- }
- canceled1 := atomic.Bool{}
- cancelFn1 := func() {
- canceled1.Store(true)
- }
- canceled2 := atomic.Bool{}
- cancelFn2 := func() {
- canceled2.Store(true)
- }
- to := newTopic("mytopic")
- to.Subscribe(subFn, "u_another", cancelFn1)
- to.Subscribe(subFn, "u_phil", cancelFn2)
- to.CancelSubscriberUser("u_phil")
- require.False(t, canceled1.Load())
- require.True(t, canceled2.Load())
- }
- func TestTopic_Keepalive(t *testing.T) {
- t.Parallel()
- to := newTopic("mytopic")
- to.lastAccess = time.Now().Add(-1 * time.Hour)
- to.Keepalive()
- require.True(t, to.LastAccess().Unix() >= time.Now().Unix()-2)
- require.True(t, to.LastAccess().Unix() <= time.Now().Unix()+2)
- }
- func TestTopic_Subscribe_DuplicateID(t *testing.T) {
- t.Parallel()
- to := newTopic("mytopic")
- //lint:ignore SA1019 Fix random seed to force same number generation
- rand.Seed(1)
- a := rand.Int()
- to.subscribers[a] = &topicSubscriber{
- userID: "a",
- subscriber: nil,
- cancel: func() {},
- }
- subFn := func(v *visitor, msg *message) error {
- return nil
- }
- //lint:ignore SA1019 Force rand.Int to generate the same id once more
- rand.Seed(1)
- id := to.Subscribe(subFn, "b", func() {})
- res := to.subscribers[id]
- require.NotEqual(t, id, a)
- require.Equal(t, "b", res.userID, "b")
- }
|