From 814e479723454096f4ca080cc3a5f79bdff9b627 Mon Sep 17 00:00:00 2001 From: Bjoern Rabenstein Date: Mon, 16 Jun 2014 17:04:08 +0200 Subject: [PATCH] Treat non-200 HTTP response as error. Change-Id: I2a9f3b47012b3c4839be53aa44c66d16dd41a24a --- retrieval/target.go | 3 +++ retrieval/target_test.go | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/retrieval/target.go b/retrieval/target.go index 8f61dcdfd..2a34afafb 100644 --- a/retrieval/target.go +++ b/retrieval/target.go @@ -224,6 +224,9 @@ func (t *target) scrape(timestamp clientmodel.Timestamp, ingester extraction.Ing if err != nil { return err } + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("server returned HTTP status %s", resp.Status) + } defer resp.Body.Close() processor, err := extraction.ProcessorForRequestHeader(resp.Header) diff --git a/retrieval/target_test.go b/retrieval/target_test.go index 37ad8c071..e3df811a9 100644 --- a/retrieval/target_test.go +++ b/retrieval/target_test.go @@ -14,6 +14,7 @@ package retrieval import ( + "errors" "net/http" "net/http/httptest" "testing" @@ -127,3 +128,20 @@ func TestTargetScrapeTimeout(t *testing.T) { t.Fatal(err) } } + +func TestTargetScrape404(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNotFound) + })) + + defer server.Close() + + testTarget := NewTarget(server.URL, 10*time.Millisecond, clientmodel.LabelSet{}) + ingester := nopIngester{} + + want := errors.New("server returned HTTP status 404 Not Found") + got := testTarget.Scrape(time.Now(), ingester) + if got == nil || want.Error() != got.Error() { + t.Fatalf("want err %q, got %q", want, got) + } +}