...
Source file
src/github.com/ory/fosite/client_authentication_jwks_strategy_test.go
1
21
22 package fosite_test
23
24 import (
25 "encoding/json"
26 "net/http"
27 "net/http/httptest"
28 "testing"
29
30 "github.com/stretchr/testify/assert"
31 "github.com/stretchr/testify/require"
32 jose "gopkg.in/square/go-jose.v2"
33
34 . "github.com/ory/fosite"
35 "github.com/ory/fosite/internal"
36 )
37
38 func TestDefaultJWKSFetcherStrategy(t *testing.T) {
39 var h http.HandlerFunc
40
41 s := NewDefaultJWKSFetcherStrategy()
42 t.Run("case=fetching", func(t *testing.T) {
43 var set *jose.JSONWebKeySet
44 h = func(w http.ResponseWriter, r *http.Request) {
45 require.NoError(t, json.NewEncoder(w).Encode(set))
46 }
47 ts := httptest.NewServer(h)
48 defer ts.Close()
49
50 set = &jose.JSONWebKeySet{
51 Keys: []jose.JSONWebKey{
52 {
53 KeyID: "foo",
54 Use: "sig",
55 Key: &internal.MustRSAKey().PublicKey,
56 },
57 },
58 }
59
60 keys, err := s.Resolve(ts.URL, false)
61 require.NoError(t, err)
62 assert.True(t, len(keys.Key("foo")) == 1)
63
64 set = &jose.JSONWebKeySet{
65 Keys: []jose.JSONWebKey{
66 {
67 KeyID: "bar",
68 Use: "sig",
69 Key: &internal.MustRSAKey().PublicKey,
70 },
71 },
72 }
73
74 keys, err = s.Resolve(ts.URL, false)
75 require.NoError(t, err)
76 assert.True(t, len(keys.Key("foo")) == 1)
77 assert.True(t, len(keys.Key("bar")) == 0)
78
79 keys, err = s.Resolve(ts.URL, true)
80 require.NoError(t, err)
81 assert.True(t, len(keys.Key("foo")) == 0)
82 assert.True(t, len(keys.Key("bar")) == 1)
83 })
84
85 t.Run("case=error_network", func(t *testing.T) {
86 h = func(w http.ResponseWriter, r *http.Request) {
87 w.WriteHeader(400)
88 }
89 ts := httptest.NewServer(h)
90 defer ts.Close()
91
92 _, err := s.Resolve(ts.URL, true)
93 require.Error(t, err)
94
95 _, err = s.Resolve("$%/19", true)
96 require.Error(t, err)
97 })
98
99 t.Run("case=error_encoding", func(t *testing.T) {
100 h = func(w http.ResponseWriter, r *http.Request) {
101 w.Write([]byte("[]"))
102 }
103 ts := httptest.NewServer(h)
104 defer ts.Close()
105
106 _, err := s.Resolve(ts.URL, true)
107 require.Error(t, err)
108 })
109 }
110
View as plain text