| package auth |
| |
| import ( |
| "testing" |
| "time" |
| |
| "github.com/stretchr/testify/require" |
| |
| "github.com/stretchr/testify/assert" |
| "go.skia.org/infra/go/mockhttpclient" |
| ) |
| |
| const ( |
| tokenUrl = "http://metadata/computeMetadata/v1/instance/service-accounts/default/token" |
| ) |
| |
| func TestSkoloToken_ValidToken_Success(t *testing.T) { |
| |
| const fakeToken = `{"access_token":"ya29.c.El...zwJOP","expires_in":900,"token_type":"Bearer"}` |
| |
| m := mockhttpclient.NewURLMock() |
| m.Mock(tokenUrl, mockhttpclient.MockGetDialogue([]byte(fakeToken))) |
| s := skoloTokenSource{ |
| client: m.Client(), |
| } |
| token, err := s.Token() |
| require.NoError(t, err) |
| require.NotNil(t, token) |
| assert.True(t, token.Valid()) |
| assert.Equal(t, "Bearer", token.TokenType) |
| assert.True(t, time.Now().Before(token.Expiry)) |
| } |
| |
| func TestSkoloToken_InvalidToken_ReturnsError(t *testing.T) { |
| |
| test := func(name, token string) { |
| t.Run(name, func(t *testing.T) { |
| m := mockhttpclient.NewURLMock() |
| m.Mock(tokenUrl, mockhttpclient.MockGetDialogue([]byte(token))) |
| s := skoloTokenSource{ |
| client: m.Client(), |
| } |
| _, err := s.Token() |
| require.Error(t, err) |
| }) |
| } |
| |
| test("Missing expires_in", `{"access_token":"ya29.c.El...zwJOP","token_type":"Bearer"}`) |
| test("Missing access_token", `{"expires_in":900,"token_type":"Bearer"}`) |
| } |