diff options
Diffstat (limited to 'blockpool/test')
-rw-r--r-- | blockpool/test/hash_pool.go | 55 | ||||
-rw-r--r-- | blockpool/test/logger.go | 74 | ||||
-rw-r--r-- | blockpool/test/util.go | 41 |
3 files changed, 170 insertions, 0 deletions
diff --git a/blockpool/test/hash_pool.go b/blockpool/test/hash_pool.go new file mode 100644 index 000000000..df3c750f9 --- /dev/null +++ b/blockpool/test/hash_pool.go @@ -0,0 +1,55 @@ +package test + +import ( + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" +) + +// hashPool is a test helper, that allows random hashes to be referred to by integers +type TestHashPool struct { + intToHash + hashToInt + lock sync.Mutex +} + +func NewHashPool() *TestHashPool { + return &TestHashPool{intToHash: make(intToHash), hashToInt: make(hashToInt)} +} + +type intToHash map[int]common.Hash + +type hashToInt map[common.Hash]int + +func newHash(i int) common.Hash { + return common.BytesToHash(crypto.Sha3([]byte(string(i)))) +} + +func (self *TestHashPool) IndexesToHashes(indexes []int) (hashes []common.Hash) { + self.lock.Lock() + defer self.lock.Unlock() + for _, i := range indexes { + hash, found := self.intToHash[i] + if !found { + hash = newHash(i) + self.intToHash[i] = hash + self.hashToInt[hash] = i + } + hashes = append(hashes, hash) + } + return +} + +func (self *TestHashPool) HashesToIndexes(hashes []common.Hash) (indexes []int) { + self.lock.Lock() + defer self.lock.Unlock() + for _, hash := range hashes { + i, found := self.hashToInt[hash] + if !found { + i = -1 + } + indexes = append(indexes, i) + } + return +} diff --git a/blockpool/test/logger.go b/blockpool/test/logger.go new file mode 100644 index 000000000..2828ffc83 --- /dev/null +++ b/blockpool/test/logger.go @@ -0,0 +1,74 @@ +package test + +import ( + "log" + "os" + "sync" + "testing" + + "github.com/ethereum/go-ethereum/logger" +) + +// logging in tests + +var once sync.Once + +/* usage: +func TestFunc(t *testing.T) { + test.LogInit() + // test +} +*/ +func LogInit() { + once.Do(func() { + logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.LogLevel(logger.DebugDetailLevel)) + }) +} + +type testLogger struct{ t *testing.T } + +/* usage: +func TestFunc(t *testing.T) { + defer test.Testlog.Detach() + // test +} +*/ +func Testlog(t *testing.T) testLogger { + logger.Reset() + l := testLogger{t} + logger.AddLogSystem(l) + return l +} + +func (l testLogger) LogPrint(msg logger.LogMsg) { + l.t.Log(msg.String()) +} + +func (testLogger) Detach() { + logger.Flush() + logger.Reset() +} + +type benchLogger struct{ b *testing.B } + +/* usage: +func BenchmarkFunc(b *testing.B) { + defer test.Benchlog.Detach() + // test +} +*/ +func Benchlog(b *testing.B) benchLogger { + logger.Reset() + l := benchLogger{b} + logger.AddLogSystem(l) + return l +} + +func (l benchLogger) LogPrint(msg logger.LogMsg) { + l.b.Log(msg.String()) +} + +func (benchLogger) Detach() { + logger.Flush() + logger.Reset() +} diff --git a/blockpool/test/util.go b/blockpool/test/util.go new file mode 100644 index 000000000..930601278 --- /dev/null +++ b/blockpool/test/util.go @@ -0,0 +1,41 @@ +package test + +import ( + "fmt" + "testing" + "time" +) + +// miscellaneous test helpers + +func CheckInt(name string, got int, expected int, t *testing.T) (err error) { + if got != expected { + err = fmt.Errorf("status for %v incorrect. expected %v, got %v", name, expected, got) + if t != nil { + t.Error(err) + } + } + return +} + +func CheckDuration(name string, got time.Duration, expected time.Duration, t *testing.T) (err error) { + if got != expected { + err = fmt.Errorf("status for %v incorrect. expected %v, got %v", name, expected, got) + if t != nil { + t.Error(err) + } + } + return +} + +func ArrayEq(a, b []int) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} |