github.com/testrecall/reporter@v0.2.3-0.20240102230324-a312dcb6d921/reporter/send_test.go (about) 1 package reporter_test 2 3 import ( 4 "encoding/json" 5 "io" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/testrecall/reporter/reporter" 12 ) 13 14 const uploadToken = "abc123" 15 16 func TestSendOK(t *testing.T) { 17 const fileName = "report.xml" 18 19 h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 20 username, password, ok := r.BasicAuth() 21 assert.True(t, ok) 22 assert.Equal(t, "", username) 23 assert.Equal(t, uploadToken, password) 24 25 body, err := io.ReadAll(r.Body) 26 assert.NoError(t, err) 27 28 data := new(reporter.RequestData) 29 err = json.Unmarshal(body, data) 30 assert.NoError(t, err) 31 32 assert.Equal(t, reporter.RequestData{ 33 RunData: [][]byte{[]byte("foo")}, 34 Filenames: []string{fileName}, 35 }, *data) 36 37 w.WriteHeader(http.StatusCreated) 38 }) 39 40 s, teardown := testingHTTPClient(h) 41 defer teardown() 42 43 sender := reporter.NewSender(testLogger()) 44 err := sender.Send(s.URL, reporter.RequestPayload{ 45 UploadToken: uploadToken, 46 RequestData: reporter.RequestData{ 47 Filenames: []string{fileName}, 48 RunData: [][]byte{[]byte("foo")}, 49 }, 50 }) 51 52 assert.NoError(t, err) 53 } 54 55 func TestSendRecover(t *testing.T) { 56 counter := 0 57 h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 58 counter++ 59 if counter <= 3 { 60 w.WriteHeader(http.StatusInternalServerError) 61 _, err := w.Write([]byte("badbadbad")) 62 assert.NoError(t, err) 63 return 64 } 65 w.WriteHeader(http.StatusCreated) 66 }) 67 68 s, teardown := testingHTTPClient(h) 69 defer teardown() 70 71 sender := reporter.NewSender(testLogger()) 72 err := sender.Send(s.URL, reporter.RequestPayload{}) 73 74 assert.NoError(t, err, err) 75 assert.Equal(t, 4, counter) 76 } 77 78 func TestSendErr(t *testing.T) { 79 h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 80 w.WriteHeader(http.StatusBadRequest) 81 _, err := w.Write([]byte("")) 82 assert.NoError(t, err) 83 }) 84 85 s, teardown := testingHTTPClient(h) 86 defer teardown() 87 88 sender := reporter.NewSender(testLogger()) 89 err := sender.Send(s.URL, reporter.RequestPayload{}) 90 91 assert.Error(t, err) 92 } 93 94 func testingHTTPClient(handler http.Handler) (*httptest.Server, func()) { 95 s := httptest.NewServer(handler) 96 97 return s, s.Close 98 }