core/captcha/tokens_test.go

49 lines
1.4 KiB
Go

package captcha
import "testing"
func TestChallengeTokenRoundTrip(t *testing.T) {
secret := []byte("s3cr3t")
tok := makeChallengeToken(secret, "abc123", nowMs()+60_000, 50, 32, 4)
claims := verifyChallengeToken(secret, tok)
if claims == nil {
t.Fatal("valid token rejected")
}
if claims.Nonce != "abc123" || claims.C != 50 || claims.S != 32 || claims.D != 4 {
t.Fatalf("bad claims: %+v", claims)
}
}
func TestChallengeTokenTamperAndExpiry(t *testing.T) {
secret := []byte("s3cr3t")
tok := makeChallengeToken(secret, "abc123", nowMs()+60_000, 50, 32, 4)
if verifyChallengeToken([]byte("wrong"), tok) != nil {
t.Error("token accepted under wrong secret")
}
if verifyChallengeToken(secret, tok+"x") != nil {
t.Error("tampered token accepted")
}
expired := makeChallengeToken(secret, "abc123", nowMs()-1, 50, 32, 4)
if verifyChallengeToken(secret, expired) != nil {
t.Error("expired token accepted")
}
}
func TestVerificationToken(t *testing.T) {
secret := []byte("s3cr3t")
vt, err := makeVerificationToken(secret, nowMs()+60_000)
if err != nil {
t.Fatal(err)
}
if !verifyVerificationToken(secret, vt) {
t.Error("valid verification token rejected")
}
if verifyVerificationToken([]byte("wrong"), vt) {
t.Error("verification token accepted under wrong secret")
}
expired, _ := makeVerificationToken(secret, nowMs()-1)
if verifyVerificationToken(secret, expired) {
t.Error("expired verification token accepted")
}
}