diff options
Diffstat (limited to 'vendor/github.com/googleapis')
| -rw-r--r-- | vendor/github.com/googleapis/gax-go/call_option.go | 10 | ||||
| -rw-r--r-- | vendor/github.com/googleapis/gax-go/call_option_test.go | 88 | ||||
| -rw-r--r-- | vendor/github.com/googleapis/gax-go/header_test.go | 19 | ||||
| -rw-r--r-- | vendor/github.com/googleapis/gax-go/invoke_test.go | 156 | ||||
| -rw-r--r-- | vendor/github.com/googleapis/gax-go/path_template_test.go | 211 |
5 files changed, 1 insertions, 483 deletions
diff --git a/vendor/github.com/googleapis/gax-go/call_option.go b/vendor/github.com/googleapis/gax-go/call_option.go index 7b621643e..536cb8ce3 100644 --- a/vendor/github.com/googleapis/gax-go/call_option.go +++ b/vendor/github.com/googleapis/gax-go/call_option.go @@ -35,7 +35,6 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" ) // CallOption is an option used by Invoke to control behaviors of RPC calls. @@ -81,11 +80,7 @@ type boRetryer struct { } func (r *boRetryer) Retry(err error) (time.Duration, bool) { - st, ok := status.FromError(err) - if !ok { - return 0, false - } - c := st.Code() + c := grpc.Code(err) for _, rc := range r.codes { if c == rc { return r.backoff.Pause(), true @@ -126,9 +121,6 @@ func (bo *Backoff) Pause() time.Duration { if bo.Multiplier < 1 { bo.Multiplier = 2 } - // Select a duration between zero and the current max. It might seem counterintuitive to - // have so much jitter, but https://www.awsarchitectureblog.com/2015/03/backoff.html - // argues that that is the best strategy. d := time.Duration(rand.Int63n(int64(bo.cur))) bo.cur = time.Duration(float64(bo.cur) * bo.Multiplier) if bo.cur > bo.Max { diff --git a/vendor/github.com/googleapis/gax-go/call_option_test.go b/vendor/github.com/googleapis/gax-go/call_option_test.go deleted file mode 100644 index 6f81305ff..000000000 --- a/vendor/github.com/googleapis/gax-go/call_option_test.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2016, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package gax - -import ( - "testing" - "time" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -var _ Retryer = &boRetryer{} - -func TestBackofDefault(t *testing.T) { - backoff := Backoff{} - - max := []time.Duration{1, 2, 4, 8, 16, 30, 30, 30, 30, 30} - for i, m := range max { - max[i] = m * time.Second - } - - for i, w := range max { - if d := backoff.Pause(); d > w { - t.Errorf("Backoff duration should be at most %s, got %s", w, d) - } else if i < len(max)-1 && backoff.cur != max[i+1] { - t.Errorf("current envelope is %s, want %s", backoff.cur, max[i+1]) - } - } -} - -func TestBackoffExponential(t *testing.T) { - backoff := Backoff{Initial: 1, Max: 20, Multiplier: 2} - want := []time.Duration{1, 2, 4, 8, 16, 20, 20, 20, 20, 20} - for _, w := range want { - if d := backoff.Pause(); d > w { - t.Errorf("Backoff duration should be at most %s, got %s", w, d) - } - } -} - -func TestOnCodes(t *testing.T) { - // Lint errors grpc.Errorf in 1.6. It mistakenly expects the first arg to Errorf to be a string. - errf := status.Errorf - apiErr := errf(codes.Unavailable, "") - tests := []struct { - c []codes.Code - retry bool - }{ - {nil, false}, - {[]codes.Code{codes.DeadlineExceeded}, false}, - {[]codes.Code{codes.DeadlineExceeded, codes.Unavailable}, true}, - {[]codes.Code{codes.Unavailable}, true}, - } - for _, tst := range tests { - b := OnCodes(tst.c, Backoff{}) - if _, retry := b.Retry(apiErr); retry != tst.retry { - t.Errorf("retriable codes: %v, error: %s, retry: %t, want %t", tst.c, apiErr, retry, tst.retry) - } - } -} diff --git a/vendor/github.com/googleapis/gax-go/header_test.go b/vendor/github.com/googleapis/gax-go/header_test.go deleted file mode 100644 index 05d8de6fc..000000000 --- a/vendor/github.com/googleapis/gax-go/header_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package gax - -import "testing" - -func TestXGoogHeader(t *testing.T) { - for _, tst := range []struct { - kv []string - want string - }{ - {nil, ""}, - {[]string{"abc", "def"}, "abc/def"}, - {[]string{"abc", "def", "xyz", "123", "foo", ""}, "abc/def xyz/123 foo/"}, - } { - got := XGoogHeader(tst.kv...) - if got != tst.want { - t.Errorf("Header(%q) = %q, want %q", tst.kv, got, tst.want) - } - } -} diff --git a/vendor/github.com/googleapis/gax-go/invoke_test.go b/vendor/github.com/googleapis/gax-go/invoke_test.go deleted file mode 100644 index 3d12e6093..000000000 --- a/vendor/github.com/googleapis/gax-go/invoke_test.go +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright 2016, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package gax - -import ( - "errors" - "testing" - "time" - - "golang.org/x/net/context" -) - -var canceledContext context.Context - -func init() { - ctx, cancel := context.WithCancel(context.Background()) - cancel() - canceledContext = ctx -} - -// recordSleeper is a test implementation of sleeper. -type recordSleeper int - -func (s *recordSleeper) sleep(ctx context.Context, _ time.Duration) error { - *s++ - return ctx.Err() -} - -type boolRetryer bool - -func (r boolRetryer) Retry(err error) (time.Duration, bool) { return 0, bool(r) } - -func TestInvokeSuccess(t *testing.T) { - apiCall := func(context.Context, CallSettings) error { return nil } - var sp recordSleeper - err := invoke(context.Background(), apiCall, CallSettings{}, sp.sleep) - - if err != nil { - t.Errorf("found error %s, want nil", err) - } - if sp != 0 { - t.Errorf("slept %d times, should not have slept since the call succeeded", int(sp)) - } -} - -func TestInvokeNoRetry(t *testing.T) { - apiErr := errors.New("foo error") - apiCall := func(context.Context, CallSettings) error { return apiErr } - var sp recordSleeper - err := invoke(context.Background(), apiCall, CallSettings{}, sp.sleep) - - if err != apiErr { - t.Errorf("found error %s, want %s", err, apiErr) - } - if sp != 0 { - t.Errorf("slept %d times, should not have slept since retry is not specified", int(sp)) - } -} - -func TestInvokeNilRetry(t *testing.T) { - apiErr := errors.New("foo error") - apiCall := func(context.Context, CallSettings) error { return apiErr } - var settings CallSettings - WithRetry(func() Retryer { return nil }).Resolve(&settings) - var sp recordSleeper - err := invoke(context.Background(), apiCall, settings, sp.sleep) - - if err != apiErr { - t.Errorf("found error %s, want %s", err, apiErr) - } - if sp != 0 { - t.Errorf("slept %d times, should not have slept since retry is not specified", int(sp)) - } -} - -func TestInvokeNeverRetry(t *testing.T) { - apiErr := errors.New("foo error") - apiCall := func(context.Context, CallSettings) error { return apiErr } - var settings CallSettings - WithRetry(func() Retryer { return boolRetryer(false) }).Resolve(&settings) - var sp recordSleeper - err := invoke(context.Background(), apiCall, settings, sp.sleep) - - if err != apiErr { - t.Errorf("found error %s, want %s", err, apiErr) - } - if sp != 0 { - t.Errorf("slept %d times, should not have slept since retry is not specified", int(sp)) - } -} - -func TestInvokeRetry(t *testing.T) { - const target = 3 - - retryNum := 0 - apiErr := errors.New("foo error") - apiCall := func(context.Context, CallSettings) error { - retryNum++ - if retryNum < target { - return apiErr - } - return nil - } - var settings CallSettings - WithRetry(func() Retryer { return boolRetryer(true) }).Resolve(&settings) - var sp recordSleeper - err := invoke(context.Background(), apiCall, settings, sp.sleep) - - if err != nil { - t.Errorf("found error %s, want nil, call should have succeeded after %d tries", err, target) - } - if sp != target-1 { - t.Errorf("retried %d times, want %d", int(sp), int(target-1)) - } -} - -func TestInvokeRetryTimeout(t *testing.T) { - apiErr := errors.New("foo error") - apiCall := func(context.Context, CallSettings) error { return apiErr } - var settings CallSettings - WithRetry(func() Retryer { return boolRetryer(true) }).Resolve(&settings) - var sp recordSleeper - - err := invoke(canceledContext, apiCall, settings, sp.sleep) - - if err != context.Canceled { - t.Errorf("found error %s, want %s", err, context.Canceled) - } -} diff --git a/vendor/github.com/googleapis/gax-go/path_template_test.go b/vendor/github.com/googleapis/gax-go/path_template_test.go deleted file mode 100644 index 49dea47d5..000000000 --- a/vendor/github.com/googleapis/gax-go/path_template_test.go +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2016, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package gax - -import "testing" - -func TestPathTemplateMatchRender(t *testing.T) { - testCases := []struct { - message string - template string - path string - values map[string]string - }{ - { - "base", - "buckets/*/*/objects/*", - "buckets/f/o/objects/bar", - map[string]string{"$0": "f", "$1": "o", "$2": "bar"}, - }, - { - "path wildcards", - "bar/**/foo/*", - "bar/foo/foo/foo/bar", - map[string]string{"$0": "foo/foo", "$1": "bar"}, - }, - { - "named binding", - "buckets/{foo}/objects/*", - "buckets/foo/objects/bar", - map[string]string{"$0": "bar", "foo": "foo"}, - }, - { - "named binding with colon", - "buckets/{foo}/objects/*", - "buckets/foo:boo/objects/bar", - map[string]string{"$0": "bar", "foo": "foo:boo"}, - }, - { - "named binding with complex patterns", - "buckets/{foo=x/*/y/**}/objects/*", - "buckets/x/foo/y/bar/baz/objects/quox", - map[string]string{"$0": "quox", "foo": "x/foo/y/bar/baz"}, - }, - { - "starts with slash", - "/foo/*", - "/foo/bar", - map[string]string{"$0": "bar"}, - }, - } - for _, testCase := range testCases { - pt, err := NewPathTemplate(testCase.template) - if err != nil { - t.Errorf("[%s] Failed to parse template %s: %v", testCase.message, testCase.template, err) - continue - } - values, err := pt.Match(testCase.path) - if err != nil { - t.Errorf("[%s] PathTemplate '%s' failed to match with '%s', %v", testCase.message, testCase.template, testCase.path, err) - continue - } - for key, expected := range testCase.values { - actual, ok := values[key] - if !ok { - t.Errorf("[%s] The matched data misses the value for %s", testCase.message, key) - continue - } - delete(values, key) - if actual != expected { - t.Errorf("[%s] Failed to match: value for '%s' is expected '%s' but is actually '%s'", testCase.message, key, expected, actual) - } - } - if len(values) != 0 { - t.Errorf("[%s] The matched data has unexpected keys: %v", testCase.message, values) - } - built, err := pt.Render(testCase.values) - if err != nil || built != testCase.path { - t.Errorf("[%s] Built path '%s' is different from the expected '%s', %v", testCase.message, built, testCase.path, err) - } - } -} - -func TestPathTemplateMatchFailure(t *testing.T) { - testCases := []struct { - message string - template string - path string - }{ - { - "too many paths", - "buckets/*/*/objects/*", - "buckets/f/o/o/objects/bar", - }, - { - "missing last path", - "buckets/*/*/objects/*", - "buckets/f/o/objects", - }, - { - "too many paths at end", - "buckets/*/*/objects/*", - "buckets/f/o/objects/too/long", - }, - } - for _, testCase := range testCases { - pt, err := NewPathTemplate(testCase.template) - if err != nil { - t.Errorf("[%s] Failed to parse path %s: %v", testCase.message, testCase.template, err) - continue - } - if values, err := pt.Match(testCase.path); err == nil { - t.Errorf("[%s] PathTemplate %s doesn't expect to match %s, but succeeded somehow. Match result: %v", testCase.message, testCase.template, testCase.path, values) - - } - } -} - -func TestPathTemplateRenderTooManyValues(t *testing.T) { - // Test cases where Render() succeeds but Match() doesn't return the same map. - testCases := []struct { - message string - template string - values map[string]string - expected string - }{ - { - "too many", - "bar/*/foo/*", - map[string]string{"$0": "_1", "$1": "_2", "$2": "_3"}, - "bar/_1/foo/_2", - }, - } - for _, testCase := range testCases { - pt, err := NewPathTemplate(testCase.template) - if err != nil { - t.Errorf("[%s] Failed to parse template %s (error %v)", testCase.message, testCase.template, err) - continue - } - if result, err := pt.Render(testCase.values); err != nil || result != testCase.expected { - t.Errorf("[%s] Failed to build the path (expected '%s' but returned '%s'", testCase.message, testCase.expected, result) - } - } -} - -func TestPathTemplateParseErrors(t *testing.T) { - testCases := []struct { - message string - template string - }{ - { - "multiple path wildcards", - "foo/**/bar/**", - }, - { - "recursive named bindings", - "foo/{foo=foo/{bar}/baz/*}/baz/*", - }, - { - "complicated multiple path wildcards patterns", - "foo/{foo=foo/**/bar/*}/baz/**", - }, - { - "consective slashes", - "foo//bar", - }, - { - "invalid variable pattern", - "foo/{foo=foo/*/}bar", - }, - { - "same name multiple times", - "foo/{foo}/bar/{foo}", - }, - { - "empty string after '='", - "foo/{foo=}/bar", - }, - } - for _, testCase := range testCases { - if pt, err := NewPathTemplate(testCase.template); err == nil { - t.Errorf("[%s] Template '%s' should fail to be parsed, but succeeded and returned %+v", testCase.message, testCase.template, pt) - } - } -} |
