server_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package server
  2. import (
  3. "bufio"
  4. "encoding/json"
  5. "github.com/stretchr/testify/assert"
  6. "heckel.io/ntfy/config"
  7. "net/http"
  8. "net/http/httptest"
  9. "path/filepath"
  10. "strings"
  11. "testing"
  12. )
  13. func TestServer_PublishAndPoll(t *testing.T) {
  14. s := newTestServer(t, newTestConfig(t))
  15. response1 := request(t, s, "PUT", "/mytopic", "my first message")
  16. msg1 := toMessage(t, response1.Body.String())
  17. assert.NotEmpty(t, msg1.ID)
  18. assert.Equal(t, "my first message", msg1.Message)
  19. response2 := request(t, s, "PUT", "/mytopic", "my second message")
  20. msg2 := toMessage(t, response2.Body.String())
  21. assert.NotEqual(t, msg1.ID, msg2.ID)
  22. assert.NotEmpty(t, msg2.ID)
  23. assert.Equal(t, "my second message", msg2.Message)
  24. response := request(t, s, "GET", "/mytopic/json?poll=1", "")
  25. messages := toMessages(t, response.Body.String())
  26. assert.Equal(t, 2, len(messages))
  27. }
  28. func TestServer_PublishAndSubscribe(t *testing.T) {
  29. s := newTestServer(t, newTestConfig(t))
  30. response1 := request(t, s, "PUT", "/mytopic", "my first message")
  31. msg1 := toMessage(t, response1.Body.String())
  32. assert.NotEmpty(t, msg1.ID)
  33. assert.Equal(t, "my first message", msg1.Message)
  34. response2 := request(t, s, "PUT", "/mytopic", "my second message")
  35. msg2 := toMessage(t, response2.Body.String())
  36. assert.NotEqual(t, msg1.ID, msg2.ID)
  37. assert.NotEmpty(t, msg2.ID)
  38. assert.Equal(t, "my second message", msg2.Message)
  39. response := request(t, s, "GET", "/mytopic/json?poll=1", "")
  40. messages := toMessages(t, response.Body.String())
  41. assert.Equal(t, 2, len(messages))
  42. }
  43. func newTestConfig(t *testing.T) *config.Config {
  44. conf := config.New(":80")
  45. conf.CacheFile = filepath.Join(t.TempDir(), "cache.db")
  46. return conf
  47. }
  48. func newTestServer(t *testing.T, config *config.Config) *Server {
  49. server, err := New(config)
  50. if err != nil {
  51. t.Fatal(err)
  52. }
  53. return server
  54. }
  55. func request(t *testing.T, s *Server, method, url, body string) *httptest.ResponseRecorder {
  56. rr := httptest.NewRecorder()
  57. req, err := http.NewRequest(method, url, strings.NewReader(body))
  58. if err != nil {
  59. t.Fatal(err)
  60. }
  61. s.handle(rr, req)
  62. return rr
  63. }
  64. func toMessages(t *testing.T, s string) []*message {
  65. messages := make([]*message, 0)
  66. scanner := bufio.NewScanner(strings.NewReader(s))
  67. for scanner.Scan() {
  68. messages = append(messages, toMessage(t, scanner.Text()))
  69. }
  70. return messages
  71. }
  72. func toMessage(t *testing.T, s string) *message {
  73. var m message
  74. assert.Nil(t, json.NewDecoder(strings.NewReader(s)).Decode(&m))
  75. return &m
  76. }