From 85939618c88c5e0176a9ed824d3f91eacdae3ffe Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Wed, 22 Dec 2021 23:45:19 +0100 Subject: [PATCH] Fix Poll(); yeyy tests --- .github/workflows/test.yaml | 2 +- client/client.go | 1 + client/client_test.go | 30 ++++++++++++++++++++++++++++++ server/server.go | 7 ++++--- server/server_test.go | 21 +++++++++++++++++++++ util/util_test.go | 6 ++++++ 6 files changed, 63 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 451107f4..1a73b1f8 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -11,7 +11,7 @@ jobs: - name: Checkout code uses: actions/checkout@v2 - name: Install dependencies - run: sudo apt update && sudo apt install -y python3-pip + run: sudo apt update && sudo apt install -y python3-pip curl - name: Build docs (required for tests) run: make docs - name: Run tests, formatting, vetting and linting diff --git a/client/client.go b/client/client.go index abcfecf7..81defdc9 100644 --- a/client/client.go +++ b/client/client.go @@ -116,6 +116,7 @@ func (c *Client) Poll(topic string, options ...SubscribeOption) ([]*Message, err msgChan := make(chan *Message) errChan := make(chan error) topicURL := c.expandTopicURL(topic) + options = append(options, WithPoll()) go func() { err := performSubscribeRequest(ctx, msgChan, topicURL, "", options...) close(msgChan) diff --git a/client/client_test.go b/client/client_test.go index aca16748..5b589daf 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -62,6 +62,36 @@ func TestClient_Publish_Subscribe(t *testing.T) { require.Nil(t, msg) } +func TestClient_Publish_Poll(t *testing.T) { + s, port := test.StartServer(t) + defer test.StopServer(t, s, port) + c := client.New(newTestConfig(port)) + + msg, err := c.Publish("mytopic", "some message", client.WithNoFirebase(), client.WithTagsList("tag1,tag2")) + require.Nil(t, err) + require.Equal(t, "some message", msg.Message) + require.Equal(t, []string{"tag1", "tag2"}, msg.Tags) + + msg, err = c.Publish("mytopic", "this won't be cached", client.WithNoCache()) + require.Nil(t, err) + require.Equal(t, "this won't be cached", msg.Message) + + msg, err = c.Publish("mytopic", "some delayed message", client.WithDelay("20 min")) + require.Nil(t, err) + require.Equal(t, "some delayed message", msg.Message) + + messages, err := c.Poll("mytopic") + require.Nil(t, err) + require.Equal(t, 1, len(messages)) + require.Equal(t, "some message", messages[0].Message) + + messages, err = c.Poll("mytopic", client.WithScheduled()) + require.Nil(t, err) + require.Equal(t, 2, len(messages)) + require.Equal(t, "some message", messages[0].Message) + require.Equal(t, "some delayed message", messages[1].Message) +} + func newTestConfig(port int) *client.Config { c := client.NewConfig() c.DefaultHost = fmt.Sprintf("http://127.0.0.1:%d", port) diff --git a/server/server.go b/server/server.go index 1a02f3a8..3259e0f8 100644 --- a/server/server.go +++ b/server/server.go @@ -196,16 +196,17 @@ func (s *Server) Run() error { listenStr += fmt.Sprintf(" %s/https", s.config.ListenHTTPS) } log.Printf("Listening on %s", listenStr) - http.HandleFunc("/", s.handle) + mux := http.NewServeMux() + mux.HandleFunc("/", s.handle) errChan := make(chan error) s.mu.Lock() s.closeChan = make(chan bool) - s.httpServer = &http.Server{Addr: s.config.ListenHTTP} + s.httpServer = &http.Server{Addr: s.config.ListenHTTP, Handler: mux} go func() { errChan <- s.httpServer.ListenAndServe() }() if s.config.ListenHTTPS != "" { - s.httpsServer = &http.Server{Addr: s.config.ListenHTTP} + s.httpsServer = &http.Server{Addr: s.config.ListenHTTP, Handler: mux} go func() { errChan <- s.httpsServer.ListenAndServeTLS(s.config.CertFile, s.config.KeyFile) }() diff --git a/server/server_test.go b/server/server_test.go index 66195888..377f1d64 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -487,6 +487,27 @@ func TestServer_SubscribeWithQueryFilters(t *testing.T) { require.Equal(t, keepaliveEvent, messages[2].Event) } +/* +func TestServer_Curl_Publish_Poll(t *testing.T) { + s, port := test.StartServer(t) + defer test.StopServer(t, s, port) + + cmd := exec.Command("sh", "-c", fmt.Sprintf(`curl -sd "This is a test" localhost:%d/mytopic`, port)) + require.Nil(t, cmd.Run()) + b, err := cmd.CombinedOutput() + require.Nil(t, err) + msg := toMessage(t, string(b)) + require.Equal(t, "This is a test", msg.Message) + + cmd = exec.Command("sh", "-c", fmt.Sprintf(`curl "localhost:%d/mytopic?poll=1"`, port)) + require.Nil(t, cmd.Run()) + b, err = cmd.CombinedOutput() + require.Nil(t, err) + msg = toMessage(t, string(b)) + require.Equal(t, "This is a test", msg.Message) +} +*/ + func newTestConfig(t *testing.T) *Config { conf := NewConfig() conf.CacheFile = filepath.Join(t.TempDir(), "cache.db") diff --git a/util/util_test.go b/util/util_test.go index 50a3a689..79f4fc65 100644 --- a/util/util_test.go +++ b/util/util_test.go @@ -62,6 +62,12 @@ func TestInStringListAll(t *testing.T) { require.False(t, InStringListAll(s, []string{"three", "five"})) } +func TestInIntList(t *testing.T) { + s := []int{1, 2} + require.True(t, InIntList(s, 2)) + require.False(t, InIntList(s, 3)) +} + func TestSplitNoEmpty(t *testing.T) { require.Equal(t, []string{}, SplitNoEmpty("", ",")) require.Equal(t, []string{}, SplitNoEmpty(",,,", ","))