session_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package server
  2. import (
  3. "github.com/mkaminski/goaim/oscar"
  4. "github.com/stretchr/testify/assert"
  5. "testing"
  6. "time"
  7. )
  8. func TestSession_SendMessage_SessSendOK(t *testing.T) {
  9. s := Session{
  10. msgCh: make(chan oscar.XMessage, 1),
  11. stopCh: make(chan struct{}),
  12. }
  13. if res := s.SendMessage(oscar.XMessage{}); res != SessSendOK {
  14. t.Fatalf("expected SessSendOK, got %+v", res)
  15. }
  16. }
  17. func TestSession_SendMessage_SessSendClosed(t *testing.T) {
  18. s := Session{
  19. msgCh: make(chan oscar.XMessage, 1),
  20. stopCh: make(chan struct{}),
  21. }
  22. s.Close()
  23. if res := s.SendMessage(oscar.XMessage{}); res != SessSendClosed {
  24. t.Fatalf("expected SessSendClosed, got %+v", res)
  25. }
  26. }
  27. func TestSession_SendMessage_SessQueueFull(t *testing.T) {
  28. bufSize := 10
  29. s := Session{
  30. msgCh: make(chan oscar.XMessage, bufSize),
  31. stopCh: make(chan struct{}),
  32. }
  33. for i := 0; i < bufSize; i++ {
  34. assert.Equal(t, SessSendOK, s.SendMessage(oscar.XMessage{}))
  35. }
  36. assert.Equal(t, SessQueueFull, s.SendMessage(oscar.XMessage{}))
  37. }
  38. func TestSession_Close_Twice(t *testing.T) {
  39. s := Session{
  40. stopCh: make(chan struct{}),
  41. }
  42. s.Close()
  43. s.Close() // make sure close is idempotent
  44. if !s.closed {
  45. t.Fatal("expected session to be closed")
  46. }
  47. select {
  48. case <-s.Closed():
  49. case <-time.After(1 * time.Second):
  50. t.Fatalf("channel is not closed")
  51. }
  52. }