1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package server
- import (
- "math/rand"
- "sync/atomic"
- "testing"
- "time"
- "github.com/stretchr/testify/require"
- )
- func TestTopic_CancelSubscribersExceptUser(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, "", 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")
- // 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
- }
- // 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")
- }
|