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  }