Set up testing framework and utilities
This commit is contained in:
parent
ba0df856fe
commit
ae2592436c
11
.mockery.yaml
Normal file
11
.mockery.yaml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
with-expecter: true
|
||||||
|
dir: "{{.InterfaceDir}}/mocks"
|
||||||
|
mockname: "Mock{{.InterfaceName}}"
|
||||||
|
outpkg: "{{.PackageName}}"
|
||||||
|
filename: "mock_{{.InterfaceName | snakecase}}.go"
|
||||||
|
packages:
|
||||||
|
github.com/word-of-wisdom/internal/pow:
|
||||||
|
interfaces:
|
||||||
|
Generator:
|
||||||
|
Verifier:
|
||||||
|
Solver:
|
||||||
2
go.mod
2
go.mod
|
|
@ -1,3 +1,5 @@
|
||||||
module word-of-wisdom
|
module word-of-wisdom
|
||||||
|
|
||||||
go 1.24.3
|
go 1.24.3
|
||||||
|
|
||||||
|
require github.com/stretchr/testify v1.10.0 // indirect
|
||||||
|
|
|
||||||
2
go.sum
Normal file
2
go.sum
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||||
|
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
65
internal/pow/test_utils.go
Normal file
65
internal/pow/test_utils.go
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
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
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue