diff --git a/stackdriver/client.go b/stackdriver/client.go index 8a9a9e02..22dd7a15 100644 --- a/stackdriver/client.go +++ b/stackdriver/client.go @@ -112,7 +112,7 @@ func (c *Client) getConnection(ctx context.Context) (*grpc.ClientConn, error) { if useAuth { rpcCreds, err := oauth.NewApplicationDefault(context.Background(), MonitoringWriteScope) if err != nil { - return nil, err + return nil, recoverableError{err} } tlsCreds := credentials.NewTLS(&tls.Config{}) dopts = append(dopts, diff --git a/stackdriver/client_test.go b/stackdriver/client_test.go index 297e464a..925b0852 100644 --- a/stackdriver/client_test.go +++ b/stackdriver/client_test.go @@ -43,6 +43,32 @@ func newLocalListener() net.Listener { return l } +func TestStoreErrorHandlingOnCredentialRetrieval(t *testing.T) { + listener := newLocalListener() + grpcServer := grpc.NewServer() + monitoring.RegisterMetricServiceServer(grpcServer, &metricServiceServer{nil}) + go grpcServer.Serve(listener) + defer grpcServer.Stop() + + serverURL, err := url.Parse("https://" + listener.Addr().String()) + if err != nil { + t.Fatal(err) + } + + c := NewClient(&ClientConfig{ + URL: serverURL, + Timeout: time.Second, + }) + err = c.Store(&monitoring.CreateTimeSeriesRequest{ + TimeSeries: []*monitoring.TimeSeries{ + &monitoring.TimeSeries{}, + }, + }) + if _, recoverable := err.(recoverableError); !recoverable { + t.Errorf("expected recoverableError in error %v", err) + } +} + func TestStoreErrorHandlingOnTimeout(t *testing.T) { listener := newLocalListener() grpcServer := grpc.NewServer()