From 622998add12734a6c2b5d79918338a4d6dca7ce6 Mon Sep 17 00:00:00 2001 From: George Goldberg Date: Tue, 9 May 2017 14:13:24 +0100 Subject: PLT-6398: Add dependency on go elastic search library. (#6340) --- vendor/gopkg.in/olivere/elastic.v5/retrier_test.go | 123 +++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 vendor/gopkg.in/olivere/elastic.v5/retrier_test.go (limited to 'vendor/gopkg.in/olivere/elastic.v5/retrier_test.go') diff --git a/vendor/gopkg.in/olivere/elastic.v5/retrier_test.go b/vendor/gopkg.in/olivere/elastic.v5/retrier_test.go new file mode 100644 index 000000000..100a17838 --- /dev/null +++ b/vendor/gopkg.in/olivere/elastic.v5/retrier_test.go @@ -0,0 +1,123 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "errors" + "net/http" + "sync/atomic" + "testing" + "time" +) + +type testRetrier struct { + Retrier + N int64 + Err error +} + +func (r *testRetrier) Retry(ctx context.Context, retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) { + atomic.AddInt64(&r.N, 1) + if r.Err != nil { + return 0, false, r.Err + } + return r.Retrier.Retry(ctx, retry, req, resp, err) +} + +func TestStopRetrier(t *testing.T) { + r := NewStopRetrier() + wait, ok, err := r.Retry(context.TODO(), 1, nil, nil, nil) + if want, got := 0*time.Second, wait; want != got { + t.Fatalf("expected %v, got %v", want, got) + } + if want, got := false, ok; want != got { + t.Fatalf("expected %v, got %v", want, got) + } + if err != nil { + t.Fatalf("expected nil, got %v", err) + } +} + +func TestRetrier(t *testing.T) { + var numFailedReqs int + fail := func(r *http.Request) (*http.Response, error) { + numFailedReqs += 1 + //return &http.Response{Request: r, StatusCode: 400}, nil + return nil, errors.New("request failed") + } + + tr := &failingTransport{path: "/fail", fail: fail} + httpClient := &http.Client{Transport: tr} + + retrier := &testRetrier{ + Retrier: NewBackoffRetrier(NewSimpleBackoff(100, 100, 100, 100, 100)), + } + + client, err := NewClient( + SetHttpClient(httpClient), + SetMaxRetries(5), + SetHealthcheck(false), + SetRetrier(retrier)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), "GET", "/fail", nil, nil) + if err == nil { + t.Fatal("expected error") + } + if res != nil { + t.Fatal("expected no response") + } + // Connection should be marked as dead after it failed + if numFailedReqs != 5 { + t.Errorf("expected %d failed requests; got: %d", 5, numFailedReqs) + } + if retrier.N != 5 { + t.Errorf("expected %d Retrier calls; got: %d", 5, retrier.N) + } +} + +func TestRetrierWithError(t *testing.T) { + var numFailedReqs int + fail := func(r *http.Request) (*http.Response, error) { + numFailedReqs += 1 + //return &http.Response{Request: r, StatusCode: 400}, nil + return nil, errors.New("request failed") + } + + tr := &failingTransport{path: "/fail", fail: fail} + httpClient := &http.Client{Transport: tr} + + kaboom := errors.New("kaboom") + retrier := &testRetrier{ + Err: kaboom, + Retrier: NewBackoffRetrier(NewSimpleBackoff(100, 100, 100, 100, 100)), + } + + client, err := NewClient( + SetHttpClient(httpClient), + SetMaxRetries(5), + SetHealthcheck(false), + SetRetrier(retrier)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), "GET", "/fail", nil, nil) + if err != kaboom { + t.Fatalf("expected %v, got %v", kaboom, err) + } + if res != nil { + t.Fatal("expected no response") + } + if numFailedReqs != 1 { + t.Errorf("expected %d failed requests; got: %d", 1, numFailedReqs) + } + if retrier.N != 1 { + t.Errorf("expected %d Retrier calls; got: %d", 1, retrier.N) + } +} -- cgit v1.2.3-1-g7c22