hash-of-wisdom/internal/pow/test_utils.go

66 lines
1.5 KiB
Go

package pow
import (
"crypto/rand"
"encoding/hex"
"time"
)
// TestConfig returns a configuration suitable for testing
func TestConfig() *Config {
secret := make([]byte, 32)
rand.Read(secret)
return &Config{
DefaultDifficulty: 4,
MaxDifficulty: 10,
MinDifficulty: 3,
ChallengeTTL: 5 * time.Minute,
HMACSecret: secret,
Resource: "quotes",
LoadAdjustmentBits: 1,
FailurePenaltyBits: 2,
MaxFailurePenaltyBits: 6,
}
}
// TestChallenge returns a valid challenge for testing
func TestChallenge() *Challenge {
return &Challenge{
Timestamp: time.Now().Unix(),
Difficulty: 4,
Resource: "quotes",
Random: "a1b2c3d4e5f6",
HMAC: "", // To be filled by generator
}
}
// TestSolution returns a valid solution for testing
func TestSolution() *Solution {
return &Solution{
Challenge: *TestChallenge(),
Nonce: "42",
}
}
// RandomHex generates a random hex string of given length
func RandomHex(length int) string {
bytes := make([]byte, length/2)
rand.Read(bytes)
return hex.EncodeToString(bytes)
}
// ExpiredChallenge returns a challenge that has expired
func ExpiredChallenge() *Challenge {
challenge := TestChallenge()
challenge.Timestamp = time.Now().Add(-10 * time.Minute).Unix()
return challenge
}
// FutureChallenge returns a challenge with future timestamp
func FutureChallenge() *Challenge {
challenge := TestChallenge()
challenge.Timestamp = time.Now().Add(10 * time.Minute).Unix()
return challenge
}