aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/googleapis
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/googleapis')
-rw-r--r--vendor/github.com/googleapis/gax-go/call_option.go10
-rw-r--r--vendor/github.com/googleapis/gax-go/call_option_test.go88
-rw-r--r--vendor/github.com/googleapis/gax-go/header_test.go19
-rw-r--r--vendor/github.com/googleapis/gax-go/invoke_test.go156
-rw-r--r--vendor/github.com/googleapis/gax-go/path_template_test.go211
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)
- }
- }
-}