-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
headers_test.go
122 lines (111 loc) · 3.09 KB
/
headers_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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package jws_test
import (
"encoding/json"
"reflect"
"testing"
"github.com/open-policy-agent/opa/internal/jwx/jwa"
"github.com/open-policy-agent/opa/internal/jwx/jws"
)
func TestHeader(t *testing.T) {
jwkSrc := `{
"kty": "RSA",
"n": "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
"e": "AQAB",
"alg": "RS256",
"kid": "2011-04-29"
}`
privateHeaderParams := map[string]interface{}{"one": "1", "two": "11"}
values := map[string]interface{}{
jws.AlgorithmKey: jwa.ES256,
jws.ContentTypeKey: "example",
jws.CriticalKey: []string{"exp"},
jws.JWKKey: jwkSrc,
jws.JWKSetURLKey: "https://www.jwk.com/key.json",
jws.TypeKey: "JWT",
jws.KeyIDKey: "e9bc097a-ce51-4036-9562-d2ade882db0d",
jws.PrivateParamsKey: privateHeaderParams,
}
t.Run("RoundTrip", func(t *testing.T) {
var h jws.StandardHeaders
for k, v := range values {
err := h.Set(k, v)
if err != nil {
t.Fatalf("Set failed for %s", k)
}
got, ok := h.Get(k)
if !ok {
t.Fatalf("Set failed for %s", k)
}
if !reflect.DeepEqual(v, got) {
t.Fatalf("Values do not match: (%v, %v)", v, got)
}
}
})
t.Run("JSON Marshal Unmarshal", func(t *testing.T) {
var h jws.StandardHeaders
for k, v := range values {
err := h.Set(k, v)
if err != nil {
t.Fatalf("Set failed for %s", k)
}
got, ok := h.Get(k)
if !ok {
t.Fatalf("Set failed for %s", k)
}
if !reflect.DeepEqual(v, got) {
t.Fatalf("Values do not match: (%v, %v)", v, got)
}
}
hByte, err := json.Marshal(h)
if err != nil {
t.Fatal("Failed to JSON marshal")
}
var hNew jws.StandardHeaders
err = json.Unmarshal(hByte, &hNew)
if err != nil {
t.Fatal("Failed to JSON marshal")
}
})
t.Run("RoundTripError", func(t *testing.T) {
type dummyStruct struct {
dummy1 int
dummy2 float64
}
dummy := &dummyStruct{1, 3.4}
values := map[string]interface{}{
jws.AlgorithmKey: dummy,
jws.ContentTypeKey: dummy,
jws.CriticalKey: dummy,
jws.JWKKey: dummy,
jws.JWKSetURLKey: dummy,
jws.KeyIDKey: dummy,
jws.TypeKey: dummy,
jws.PrivateParamsKey: dummy,
"invalid key": "",
}
var h jws.StandardHeaders
for k, v := range values {
err := h.Set(k, v)
if err == nil {
t.Fatalf("Setting %s value should have failed", k)
}
}
for k := range values {
_, ok := h.Get(k)
if ok {
t.Fatalf("Getting %s value should have failed", k)
}
}
})
t.Run("Unknown alg", func(t *testing.T) {
headers := `{"typ":"JWT",` + "\r\n" + ` "alg":"dummy"}`
var standardHeaders jws.StandardHeaders
err := json.Unmarshal([]byte(headers), &standardHeaders)
if err != nil {
t.Fatal(err)
}
if standardHeaders.Algorithm != jwa.Unsupported {
t.Errorf("expected unsupported algorithm")
}
})
}