// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package google import ( "net/http" "testing" "golang.org/x/oauth2" ) func TestAuthenticationError_Temporary(t *testing.T) { tests := []struct { name string code int want bool }{ { name: "temporary with 500", code: 500, want: true, }, { name: "temporary with 503", code: 503, want: true, }, { name: "temporary with 408", code: 408, want: true, }, { name: "temporary with 429", code: 429, want: true, }, { name: "temporary with 418", code: 418, want: false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ae := &AuthenticationError{ err: &oauth2.RetrieveError{ Response: &http.Response{ StatusCode: tt.code, }, }, } if got := ae.Temporary(); got != tt.want { t.Errorf("Temporary() = %v; want %v", got, tt.want) } }) } } func TestErrWrappingTokenSource_Token(t *testing.T) { tok := oauth2.Token{AccessToken: "MyAccessToken"} ts := errWrappingTokenSource{ src: oauth2.StaticTokenSource(&tok), } got, err := ts.Token() if *got != tok { t.Errorf("Token() = %v; want %v", got, tok) } if err != nil { t.Error(err) } } type errTokenSource struct { err error } func (s *errTokenSource) Token() (*oauth2.Token, error) { return nil, s.err } func TestErrWrappingTokenSource_TokenError(t *testing.T) { re := &oauth2.RetrieveError{ Response: &http.Response{ StatusCode: 500, }, } ts := errWrappingTokenSource{ src: &errTokenSource{ err: re, }, } _, err := ts.Token() if err == nil { t.Fatalf("errWrappingTokenSource.Token() err = nil, want *AuthenticationError") } ae, ok := err.(*AuthenticationError) if !ok { t.Fatalf("errWrappingTokenSource.Token() err = %T, want *AuthenticationError", err) } wrappedErr := ae.Unwrap() if wrappedErr == nil { t.Fatalf("AuthenticationError.Unwrap() err = nil, want *oauth2.RetrieveError") } _, ok = wrappedErr.(*oauth2.RetrieveError) if !ok { t.Errorf("AuthenticationError.Unwrap() err = %T, want *oauth2.RetrieveError", err) } }