...

Source file src/github.com/ory/fosite/client_authentication_jwks_strategy_test.go

Documentation: github.com/ory/fosite

     1  /*
     2   * Copyright © 2017-2018 Aeneas Rekkas <aeneas+oss@aeneas.io>
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   *
    16   * @author		Aeneas Rekkas <aeneas+oss@aeneas.io>
    17   * @Copyright 	2017-2018 Aeneas Rekkas <aeneas+oss@aeneas.io>
    18   * @license 	Apache-2.0
    19   *
    20   */
    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