|
| 1 | +package jws_test |
| 2 | + |
| 3 | +import ( |
| 4 | + "testing" |
| 5 | + |
| 6 | + "github.com/lestrrat-go/jwx/v3/jws" |
| 7 | + "github.com/stretchr/testify/require" |
| 8 | +) |
| 9 | + |
| 10 | +// A freshly constructed Headers must report ok=false on every typed |
| 11 | +// accessor for a field that has never been set. This is a regression |
| 12 | +// guard for the genjws generator where slice/interface accessors used |
| 13 | +// to unconditionally return ok=true. |
| 14 | +func TestHeaders_NilAccessorsReportNotPresent(t *testing.T) { |
| 15 | + t.Parallel() |
| 16 | + |
| 17 | + testcases := []struct { |
| 18 | + name string |
| 19 | + get func(jws.Headers) (any, bool) |
| 20 | + }{ |
| 21 | + {"Algorithm", func(h jws.Headers) (any, bool) { v, ok := h.Algorithm(); return v, ok }}, |
| 22 | + {"ContentType", func(h jws.Headers) (any, bool) { v, ok := h.ContentType(); return v, ok }}, |
| 23 | + {"Critical", func(h jws.Headers) (any, bool) { v, ok := h.Critical(); return v, ok }}, |
| 24 | + {"JWK", func(h jws.Headers) (any, bool) { v, ok := h.JWK(); return v, ok }}, |
| 25 | + {"JWKSetURL", func(h jws.Headers) (any, bool) { v, ok := h.JWKSetURL(); return v, ok }}, |
| 26 | + {"KeyID", func(h jws.Headers) (any, bool) { v, ok := h.KeyID(); return v, ok }}, |
| 27 | + {"Type", func(h jws.Headers) (any, bool) { v, ok := h.Type(); return v, ok }}, |
| 28 | + {"X509CertChain", func(h jws.Headers) (any, bool) { v, ok := h.X509CertChain(); return v, ok }}, |
| 29 | + {"X509CertThumbprint", func(h jws.Headers) (any, bool) { v, ok := h.X509CertThumbprint(); return v, ok }}, |
| 30 | + {"X509CertThumbprintS256", func(h jws.Headers) (any, bool) { v, ok := h.X509CertThumbprintS256(); return v, ok }}, |
| 31 | + {"X509URL", func(h jws.Headers) (any, bool) { v, ok := h.X509URL(); return v, ok }}, |
| 32 | + } |
| 33 | + |
| 34 | + for _, tc := range testcases { |
| 35 | + t.Run(tc.name, func(t *testing.T) { |
| 36 | + t.Parallel() |
| 37 | + _, ok := tc.get(jws.NewHeaders()) |
| 38 | + require.False(t, ok) |
| 39 | + }) |
| 40 | + } |
| 41 | +} |
0 commit comments