hsa-app/internal/auth/pkce_test.go

55 lines
1.3 KiB
Go
Raw Normal View History

package auth
import (
"strings"
"testing"
)
// RFC 7636 Appendix B known vector.
// verifier = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"
// expected challenge (S256) = "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM"
const (
rfcVerifier = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"
rfcChallenge = "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM"
)
func TestChallengeS256_RFCVector(t *testing.T) {
got := ChallengeS256(rfcVerifier)
if got != rfcChallenge {
t.Errorf("ChallengeS256(%q) = %q, want %q", rfcVerifier, got, rfcChallenge)
}
}
func TestGenerateVerifier_Length(t *testing.T) {
v, err := GenerateVerifier()
if err != nil {
t.Fatal(err)
}
if len(v) < 43 || len(v) > 128 {
t.Errorf("verifier length %d outside [43,128]", len(v))
}
}
func TestGenerateVerifier_URLSafe(t *testing.T) {
for range 20 {
v, err := GenerateVerifier()
if err != nil {
t.Fatal(err)
}
for _, c := range v {
if !strings.ContainsRune("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~", c) {
t.Errorf("verifier %q contains non-URL-safe char %q", v, c)
break
}
}
}
}
func TestGenerateVerifier_Unique(t *testing.T) {
a, _ := GenerateVerifier()
b, _ := GenerateVerifier()
if a == b {
t.Error("two calls returned the same verifier")
}
}