func TestHTTPPublisher(t *testing.T) { var ( token = "abcdefg" rpt = report.MakeReport() ) s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if want, have := xfer.AuthorizationHeader(token), r.Header.Get("Authorization"); want != have { t.Errorf("want %q, have %q", want, have) } var have report.Report if err := gob.NewDecoder(r.Body).Decode(&have); err != nil { t.Error(err) return } if want := rpt; !reflect.DeepEqual(want, have) { t.Error(test.Diff(want, have)) return } w.WriteHeader(http.StatusOK) })) defer s.Close() p, err := xfer.NewHTTPPublisher(s.URL, token) if err != nil { t.Fatal(err) } if err := p.Publish(rpt); err != nil { t.Error(err) } }
func TestHTTPPublisher(t *testing.T) { var ( token = "abcdefg" id = "1234567" rpt = report.MakeReport() done = make(chan struct{}) ) handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if want, have := xfer.AuthorizationHeader(token), r.Header.Get("Authorization"); want != have { t.Errorf("want %q, have %q", want, have) } if want, have := id, r.Header.Get(xfer.ScopeProbeIDHeader); want != have { t.Errorf("want %q, have %q", want, have) } var have report.Report reader := r.Body var err error if strings.Contains(r.Header.Get("Content-Encoding"), "gzip") { reader, err = gzip.NewReader(r.Body) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } defer reader.Close() } if err := gob.NewDecoder(reader).Decode(&have); err != nil { t.Error(err) return } if want := rpt; !reflect.DeepEqual(want, have) { t.Error(test.Diff(want, have)) return } w.WriteHeader(http.StatusOK) close(done) }) s := httptest.NewServer(handlers.CompressHandler(handler)) defer s.Close() p, err := xfer.NewHTTPPublisher(s.URL, token, id) if err != nil { t.Fatal(err) } if err := p.Publish(rpt); err != nil { t.Error(err) } select { case <-done: case <-time.After(time.Millisecond): t.Error("timeout") } }