| package auth |
| |
| import ( |
| "testing" |
| "time" |
| |
| "github.com/stretchr/testify/assert" |
| "go.skia.org/infra/go/mockhttpclient" |
| "go.skia.org/infra/go/testutils" |
| ) |
| |
| const ( |
| tokenUrl = "http://metadata/computeMetadata/v1/instance/service-accounts/default/token" |
| ) |
| |
| func TestSkolo(t *testing.T) { |
| testutils.SmallTest(t) |
| m := mockhttpclient.NewURLMock() |
| src := `{"access_token":"ya29.c.El...zwJOP","expires_in":900,"token_type":"Bearer"}` |
| m.Mock(tokenUrl, mockhttpclient.MockGetDialogue([]byte(src))) |
| |
| s := skoloTokenSource{ |
| client: m.Client(), |
| } |
| token, err := s.Token() |
| assert.NoError(t, err) |
| assert.True(t, token.Valid()) |
| assert.Equal(t, "Bearer", token.TokenType) |
| assert.True(t, time.Now().Before(token.Expiry)) |
| } |
| |
| func TestSkoloFail(t *testing.T) { |
| testutils.SmallTest(t) |
| testCases := []struct { |
| value string |
| hasError bool |
| message string |
| }{ |
| { |
| value: `{"access_token":"ya29.c.El...zwJOP","expires_in":900,"token_type":"Bearer"}`, |
| hasError: false, |
| message: "Good", |
| }, |
| { |
| value: `{"access_token":"ya29.c.El...zwJOP","token_type":"Bearer"}`, |
| hasError: true, |
| message: "Missing expires_in.", |
| }, |
| { |
| value: `{"expires_in":900,"token_type":"Bearer"}`, |
| hasError: true, |
| message: "Missing access_token.", |
| }, |
| } |
| |
| for _, tc := range testCases { |
| m := mockhttpclient.NewURLMock() |
| m.Mock(tokenUrl, mockhttpclient.MockGetDialogue([]byte(tc.value))) |
| s := skoloTokenSource{ |
| client: m.Client(), |
| } |
| _, err := s.Token() |
| if got, want := (err != nil), tc.hasError; got != want { |
| t.Errorf("Failed case Got %v Want %v: %s", got, want, tc.message) |
| } |
| } |
| } |