diff options
author | zelig <viktor.tron@gmail.com> | 2015-02-25 20:34:12 +0800 |
---|---|---|
committer | zelig <viktor.tron@gmail.com> | 2015-02-25 20:34:12 +0800 |
commit | 422490d75cf9a2406430f2d7c0d7dd77ede18f7c (patch) | |
tree | 63860f0914370bec71cac6f1708476da4f7533cc /blockpool/test/hash_pool.go | |
parent | d46c7bcaf9268a191f0156d36abf394df5374795 (diff) | |
download | dexon-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar dexon-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.gz dexon-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.bz2 dexon-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.lz dexon-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.xz dexon-422490d75cf9a2406430f2d7c0d7dd77ede18f7c.tar.zst dexon-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/hash_pool.go')
-rw-r--r-- | blockpool/test/hash_pool.go | 57 |
1 files changed, 57 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 +} |