/
refresh_test.go
71 lines (55 loc) · 1.83 KB
/
refresh_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package oidc
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/oauth2"
)
func TestRefresh(t *testing.T) {
t.Parallel()
ctx, clearTimeout := context.WithTimeout(context.Background(), 10*time.Second)
t.Cleanup(clearTimeout)
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{
"access_token": "NEW_TOKEN",
"refresh_token": "NEW_REFRESH_TOKEN",
"expires_in": 3600
}`))
}))
t.Cleanup(s.Close)
cfg := &oauth2.Config{Endpoint: oauth2.Endpoint{TokenURL: s.URL}}
token := &oauth2.Token{
AccessToken: "OLD_TOKEN",
RefreshToken: "OLD_REFRESH_TOKEN",
// Even if a token is not expiring soon, Refresh() should still perform
// the refresh.
Expiry: time.Now().Add(time.Hour),
}
require.True(t, token.Valid())
newToken, err := Refresh(ctx, cfg, token)
require.NoError(t, err)
assert.Equal(t, "NEW_TOKEN", newToken.AccessToken)
assert.Equal(t, "NEW_REFRESH_TOKEN", newToken.RefreshToken)
}
func TestRefresh_errors(t *testing.T) {
t.Parallel()
ctx, clearTimeout := context.WithTimeout(context.Background(), 10*time.Second)
t.Cleanup(clearTimeout)
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("{}"))
}))
t.Cleanup(s.Close)
cfg := &oauth2.Config{Endpoint: oauth2.Endpoint{TokenURL: s.URL}}
_, err := Refresh(ctx, cfg, nil)
assert.Equal(t, ErrMissingRefreshToken, err)
_, err = Refresh(ctx, cfg, &oauth2.Token{})
assert.Equal(t, ErrMissingRefreshToken, err)
_, err = Refresh(ctx, cfg, &oauth2.Token{RefreshToken: "REFRESH_TOKEN"})
assert.Equal(t, "identity/oidc: refresh failed: oauth2: server response missing access_token",
err.Error())
}