v0.4.1 merge http and simple token into one file, workflow update
Test and Fuzz / Build, Test, and Fuzz (push) Canceled after 0s

This commit is contained in:
lixen committed 2026-09-30 15:38:33 -04:00
1 parent 2bf8715e93
commit 5cf0a93676
6 files changed
+139 -250

No files matched your search

+51
View File
@@ -96,3 +96,54 @@ func TestSimpleTokenValidatorConcurrent(t *testing.T) {
}
eq(t, len(v.tokens), n/2, "surviving entries")
}
func TestParseBearerToken(t *testing.T) {
for _, tc := range []struct {
header, token string
want error
}{
{"Bearer abc.def-_/+~==", "abc.def-_/+~==", nil},
{"bEaReR token", "token", nil},
{"Bearer ", "", ErrAuthEmptyBearerToken},
{"Bearer ", "", ErrAuthEmptyBearerToken},
{"Bearer", "", ErrAuthInvalidBearerFormat},
{"Bearer x y", "", ErrAuthInvalidBearerFormat},
{"Bearer x ", "", ErrAuthInvalidBearerFormat},
{"Bearer x\r\n", "", ErrAuthInvalidBearerFormat},
{"Bearer x\ty", "", ErrAuthInvalidBearerFormat},
{"Bearer =", "", ErrAuthInvalidBearerFormat},
{"Bearer a=b", "", ErrAuthInvalidBearerFormat},
{"Other x", "", ErrAuthInvalidBearerFormat},
{"Bearer " + strings.Repeat("x", MaxTokenLen+1), "", ErrTokenTooLong},
} {
token, err := ParseBearerToken(tc.header)
if tc.want != nil {
errIs(t, err, tc.want, tc.header)
} else {
noErr(t, err, tc.header)
}
eq(t, token, tc.token, "token")
}
}
func FuzzParseBearerToken(f *testing.F) {
for _, seed := range []string{"Bearer token", "bearer abc+/==", "Bearer x\n", "Bearer a=b", ""} {
f.Add(seed)
}
f.Fuzz(func(t *testing.T, header string) {
token, err := ParseBearerToken(header)
if err != nil {
if token != "" {
t.Fatal("token with error")
}
return
}
if token == "" || len(token) > MaxTokenLen || strings.ContainsAny(token, " \t\r\n") {
t.Fatal("invalid token accepted")
}
again, err := ParseBearerToken("Bearer " + token)
if err != nil || again != token {
t.Fatal("noncanonical roundtrip")
}
})
}