eleven / messenger Public

Clone
git clone https://amadan.net/eleven/messenger

Plain git — no account needed to clone.

Download

Download this file

1package main
2
3import (
4 "errors"
5 "net/http"
6 "net/http/httptest"
7 "testing"
8
9 "lchat/internal/apns"
10)
11
12// relaySender must map the relay's normalised 410 back to apns.ErrGone so
13// apnsFanOut prunes the dead token — and must NOT treat any other non-2xx as
14// gone (that would prune a live token on a transient relay error).
15func TestRelaySenderClassifies(t *testing.T) {
16 var status int
17 stub := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
18 if got := r.Header.Get("Authorization"); got != "Bearer tok" {
19 t.Errorf("missing bearer: %q", got)
20 }
21 w.WriteHeader(status)
22 }))
23 defer stub.Close()
24 rs := relaySender{url: stub.URL + "/api/push", token: "tok", http: http.DefaultClient}
25
26 status = http.StatusOK
27 if err := rs.send("aabbccdd", false, "th", "blob", 1, 1); err != nil {
28 t.Errorf("200: want nil, got %v", err)
29 }
30 status = http.StatusGone
31 if err := rs.send("aabbccdd", false, "th", "blob", 1, 1); !errors.Is(err, apns.ErrGone) {
32 t.Errorf("410: want ErrGone, got %v", err)
33 }
34 status = http.StatusTooManyRequests
35 if err := rs.send("aabbccdd", false, "th", "blob", 1, 1); err == nil || errors.Is(err, apns.ErrGone) {
36 t.Errorf("429: want a non-gone error, got %v", err)
37 }
38 status = http.StatusBadGateway
39 if err := rs.send("aabbccdd", false, "th", "blob", 1, 1); err == nil || errors.Is(err, apns.ErrGone) {
40 t.Errorf("502: want a non-gone error, got %v", err)
41 }
42}
43