topic_test.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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.False(t, id == a)
  56. require.True(t, res.userID == "b")
  57. }