topic_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package server
  2. import (
  3. "math/rand"
  4. "sync/atomic"
  5. "testing"
  6. "time"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestTopic_CancelSubscribers(t *testing.T) {
  10. t.Parallel()
  11. subFn := func(v *visitor, msg *message) error {
  12. return nil
  13. }
  14. canceled1 := atomic.Bool{}
  15. cancelFn1 := func() {
  16. canceled1.Store(true)
  17. }
  18. canceled2 := atomic.Bool{}
  19. cancelFn2 := func() {
  20. canceled2.Store(true)
  21. }
  22. to := newTopic("mytopic")
  23. to.Subscribe(subFn, "", cancelFn1)
  24. to.Subscribe(subFn, "u_phil", cancelFn2)
  25. to.CancelSubscribers("u_phil")
  26. require.True(t, canceled1.Load())
  27. require.False(t, canceled2.Load())
  28. }
  29. func TestTopic_Keepalive(t *testing.T) {
  30. t.Parallel()
  31. to := newTopic("mytopic")
  32. to.lastAccess = time.Now().Add(-1 * time.Hour)
  33. to.Keepalive()
  34. require.True(t, to.LastAccess().Unix() >= time.Now().Unix()-2)
  35. require.True(t, to.LastAccess().Unix() <= time.Now().Unix()+2)
  36. }
  37. func TestTopic_Subscribe_DuplicateID(t *testing.T) {
  38. t.Parallel()
  39. to := newTopic("mytopic")
  40. // Fix random seed to force same number generation
  41. rand.Seed(1)
  42. a := rand.Int()
  43. to.subscribers[a] = &topicSubscriber{
  44. userID: "a",
  45. subscriber: nil,
  46. cancel: func() {},
  47. }
  48. subFn := func(v *visitor, msg *message) error {
  49. return nil
  50. }
  51. // Force rand.Int to generate the same id once more
  52. rand.Seed(1)
  53. id := to.Subscribe(subFn, "b", func() {})
  54. res := to.subscribers[id]
  55. require.NotEqual(t, id, a)
  56. require.Equal(t, "b", res.userID, "b")
  57. }