...
1 package keyfunc_test
2
3 import (
4 "errors"
5 "net/http"
6 "net/http/httptest"
7 "sync"
8 "testing"
9
10 "github.com/MicahParks/keyfunc"
11 )
12
13 func TestResponseExtractorStatusOK(t *testing.T) {
14 var mux sync.Mutex
15 statusCode := http.StatusOK
16
17 server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
18 mux.Lock()
19 writer.WriteHeader(statusCode)
20 mux.Unlock()
21 _, _ = writer.Write([]byte(jwksJSON))
22 }))
23 defer server.Close()
24
25 options := keyfunc.Options{
26 ResponseExtractor: keyfunc.ResponseExtractorStatusOK,
27 }
28 jwks, err := keyfunc.Get(server.URL, options)
29 if err != nil {
30 t.Fatalf("Failed to get JWK Set from server.\nError: %s", err)
31 }
32
33 if len(jwks.ReadOnlyKeys()) == 0 {
34 t.Fatalf("Expected JWK Set to have keys.")
35 }
36
37 mux.Lock()
38 statusCode = http.StatusInternalServerError
39 mux.Unlock()
40
41 _, err = keyfunc.Get(server.URL, options)
42 if !errors.Is(err, keyfunc.ErrInvalidHTTPStatusCode) {
43 t.Fatalf("Expected error to be ErrInvalidHTTPStatusCode.\nError: %s", err)
44 }
45 }
46
47 func TestResponseExtractorStatusAny(t *testing.T) {
48 var mux sync.Mutex
49 statusCode := http.StatusOK
50
51 server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
52 mux.Lock()
53 writer.WriteHeader(statusCode)
54 mux.Unlock()
55 _, _ = writer.Write([]byte(jwksJSON))
56 }))
57 defer server.Close()
58
59 options := keyfunc.Options{
60 ResponseExtractor: keyfunc.ResponseExtractorStatusAny,
61 }
62 jwks, err := keyfunc.Get(server.URL, options)
63 if err != nil {
64 t.Fatalf("Failed to get JWK Set from server.\nError: %s", err)
65 }
66
67 if len(jwks.ReadOnlyKeys()) == 0 {
68 t.Fatalf("Expected JWK Set to have keys.")
69 }
70
71 mux.Lock()
72 statusCode = http.StatusInternalServerError
73 mux.Unlock()
74
75 _, err = keyfunc.Get(server.URL, options)
76 if err != nil {
77 t.Fatalf("Expected error no error for 500 status code.\nError: %s", err)
78 }
79 }
80
View as plain text