aboutsummaryrefslogtreecommitdiffstats
path: root/blockpool/test
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2015-02-25 20:34:12 +0800
committerzelig <viktor.tron@gmail.com>2015-02-25 20:34:12 +0800
commit422490d75cf9a2406430f2d7c0d7dd77ede18f7c (patch)
tree63860f0914370bec71cac6f1708476da4f7533cc /blockpool/test
parentd46c7bcaf9268a191f0156d36abf394df5374795 (diff)
downloadgo-tangerine-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar
go-tangerine-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.gz
go-tangerine-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.bz2
go-tangerine-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.lz
go-tangerine-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.xz
go-tangerine-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.zst
go-tangerine-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.zip
major rewrite, reorg of blockpool + new features
- blockpool moves to its own package - uses errs pkg for its own coded errors - publicly settable config of params (time intervals and batchsizes) - test helpers in subpackage - optional TD in blocks used now to update peers chain info - major improvement in algorithm - fix fragility and sync/parallelisation bugs - implement status for reporting on sync status (peers/hashes/blocks etc) - several tests added and further corner cases covered
Diffstat (limited to 'blockpool/test')
-rw-r--r--blockpool/test/hash_pool.go57
-rw-r--r--blockpool/test/logger.go78
-rw-r--r--blockpool/test/util.go35
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..4e0332d7d
--- /dev/null
+++ b/blockpool/test/hash_pool.go
@@ -0,0 +1,57 @@
+package test
+
+import (
+ "sync"
+
+ "github.com/ethereum/go-ethereum/crypto"
+)
+
+// test helpers
+// TODO: move into common test helper package (see p2p/crypto etc.)
+
+func NewHashPool() *TestHashPool {
+ return &TestHashPool{intToHash: make(intToHash), hashToInt: make(hashToInt)}
+}
+
+type intToHash map[int][]byte
+
+type hashToInt map[string]int
+
+// hashPool is a test helper, that allows random hashes to be referred to by integers
+type TestHashPool struct {
+ intToHash
+ hashToInt
+ lock sync.Mutex
+}
+
+func newHash(i int) []byte {
+ return crypto.Sha3([]byte(string(i)))
+}
+
+func (self *TestHashPool) IndexesToHashes(indexes []int) (hashes [][]byte) {
+ 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[string(hash)] = i
+ }
+ hashes = append(hashes, hash)
+ }
+ return
+}
+
+func (self *TestHashPool) HashesToIndexes(hashes [][]byte) (indexes []int) {
+ self.lock.Lock()
+ defer self.lock.Unlock()
+ for _, hash := range hashes {
+ i, found := self.hashToInt[string(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..8b776e0b5
--- /dev/null
+++ b/blockpool/test/logger.go
@@ -0,0 +1,78 @@
+package test
+
+import (
+ "log"
+ "os"
+ "sync"
+ "testing"
+
+ "github.com/ethereum/go-ethereum/logger"
+)
+
+var once sync.Once
+
+/* usage:
+func TestFunc(t *testing.T) {
+ test.LogInit()
+ // test
+}
+*/
+func LogInit() {
+ once.Do(func() {
+ var logsys = logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.LogLevel(logger.DebugDetailLevel))
+ logger.AddLogSystem(logsys)
+ })
+}
+
+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 (testLogger) GetLogLevel() logger.LogLevel { return logger.DebugLevel }
+func (testLogger) SetLogLevel(logger.LogLevel) {}
+
+func (l testLogger) LogPrint(level logger.LogLevel, msg string) {
+ l.t.Logf("%s", msg)
+}
+
+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 (benchLogger) GetLogLevel() logger.LogLevel { return logger.Silence }
+
+func (benchLogger) SetLogLevel(logger.LogLevel) {}
+func (l benchLogger) LogPrint(level logger.LogLevel, msg string) {
+ l.b.Logf("%s", msg)
+}
+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..e183bf1d1
--- /dev/null
+++ b/blockpool/test/util.go
@@ -0,0 +1,35 @@
+package test
+
+import (
+ "fmt"
+ "testing"
+ "time"
+)
+
+func CheckInt(name string, got int, expected int, t *testing.T) (err error) {
+ if got != expected {
+ t.Errorf("status for %v incorrect. expected %v, got %v", name, expected, got)
+ err = fmt.Errorf("")
+ }
+ return
+}
+
+func CheckDuration(name string, got time.Duration, expected time.Duration, t *testing.T) (err error) {
+ if got != expected {
+ t.Errorf("status for %v incorrect. expected %v, got %v", name, expected, got)
+ err = fmt.Errorf("")
+ }
+ 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
+}