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/status_test.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/status_test.go')
-rw-r--r-- | blockpool/status_test.go | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/blockpool/status_test.go b/blockpool/status_test.go new file mode 100644 index 000000000..7392f667a --- /dev/null +++ b/blockpool/status_test.go @@ -0,0 +1,228 @@ +package blockpool + +import ( + "fmt" + "testing" + // "time" + + "github.com/ethereum/go-ethereum/blockpool/test" +) + +var statusFields = []string{ + "BlockHashes", + "BlockHashesInPool", + "Blocks", + "BlocksInPool", + "BlocksInChain", + "NewBlocks", + "Forks", + "LongestChain", + "Peers", + "LivePeers", + "ActivePeers", + "BestPeers", + "BadPeers", +} + +func getStatusValues(s *Status) []int { + return []int{ + s.BlockHashes, + s.BlockHashesInPool, + s.Blocks, + s.BlocksInPool, + s.BlocksInChain, + s.NewBlocks, + s.Forks, + s.LongestChain, + s.Peers, + s.LivePeers, + s.ActivePeers, + s.BestPeers, + s.BadPeers, + } +} + +func checkStatus(t *testing.T, bp *BlockPool, syncing bool, expected []int) (err error) { + s := bp.Status() + if s.Syncing != syncing { + t.Errorf("status for Syncing incorrect. expected %v, got %v", syncing, s.Syncing) + } + got := getStatusValues(s) + for i, v := range expected { + err = test.CheckInt(statusFields[i], got[i], v, t) + if err != nil { + return err + } + fmt.Printf("%v: %v (%v)\n", statusFields[i], got[i], v) + } + return +} + +// func TestBlockPoolStatus(t *testing.T) { +// test.LogInit() +// _, blockPool, blockPoolTester := newTestBlockPool(t) +// blockPoolTester.blockChain[0] = nil +// blockPoolTester.initRefBlockChain(12) +// blockPoolTester.refBlockChain[3] = []int{4, 7} +// delete(blockPoolTester.refBlockChain, 6) + +// blockPool.Start() + +// peer1 := blockPoolTester.newPeer("peer1", 1, 9) +// peer2 := blockPoolTester.newPeer("peer2", 2, 6) +// peer3 := blockPoolTester.newPeer("peer3", 3, 11) +// peer4 := blockPoolTester.newPeer("peer4", 1, 9) +// peer2.blocksRequestsMap = peer1.blocksRequestsMap + +// var expected []int +// var err error +// expected = []int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +// err = checkStatus(t, blockPool, false, expected) +// if err != nil { +// return +// } + +// peer1.AddPeer() +// expected = []int{0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer1.serveBlocks(8, 9) +// expected = []int{0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer1.serveBlockHashes(9, 8, 7, 3, 2) +// expected = []int{5, 5, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer1.serveBlocks(3, 7, 8) +// expected = []int{5, 5, 3, 3, 0, 1, 0, 0, 1, 1, 1, 1, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer1.serveBlocks(2, 3) +// expected = []int{5, 5, 4, 4, 0, 1, 0, 0, 1, 1, 1, 1, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer4.AddPeer() +// expected = []int{5, 5, 4, 4, 0, 2, 0, 0, 2, 2, 1, 1, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer4.sendBlockHashes(12, 11) +// expected = []int{5, 5, 4, 4, 0, 2, 0, 0, 2, 2, 1, 1, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer2.AddPeer() +// expected = []int{5, 5, 4, 4, 0, 3, 0, 0, 3, 3, 1, 2, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer2.serveBlocks(5, 6) +// peer2.serveBlockHashes(6, 5, 4, 3, 2) +// expected = []int{8, 8, 5, 5, 0, 3, 1, 0, 3, 3, 2, 2, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer2.serveBlocks(2, 3, 4) +// expected = []int{8, 8, 6, 6, 0, 3, 1, 0, 3, 3, 2, 2, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// blockPool.RemovePeer("peer2") +// expected = []int{8, 8, 6, 6, 0, 3, 1, 0, 3, 2, 2, 2, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer1.serveBlockHashes(2, 1, 0) +// expected = []int{9, 9, 6, 6, 0, 3, 1, 0, 3, 2, 2, 2, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer1.serveBlocks(1, 2) +// expected = []int{9, 9, 7, 7, 0, 3, 1, 0, 3, 2, 2, 2, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer1.serveBlocks(4, 5) +// expected = []int{9, 9, 8, 8, 0, 3, 1, 0, 3, 2, 2, 2, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer3.AddPeer() +// expected = []int{9, 9, 8, 8, 0, 4, 1, 0, 4, 3, 2, 3, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer3.serveBlocks(10, 11) +// expected = []int{9, 9, 9, 9, 0, 4, 1, 0, 4, 3, 3, 3, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer3.serveBlockHashes(11, 10, 9) +// expected = []int{11, 11, 9, 9, 0, 4, 1, 0, 4, 3, 3, 3, 0} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer4.sendBlocks(11, 12) +// expected = []int{11, 11, 9, 9, 0, 4, 1, 0, 4, 3, 4, 3, 1} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } +// peer3.serveBlocks(9, 10) +// expected = []int{11, 11, 10, 10, 0, 4, 1, 0, 4, 3, 4, 3, 1} +// err = checkStatus(t, blockPool, true, expected) +// if err != nil { +// return +// } + +// peer3.serveBlocks(0, 1) +// blockPool.Wait(waitTimeout) +// time.Sleep(200 * time.Millisecond) +// expected = []int{11, 3, 11, 3, 8, 4, 1, 8, 4, 3, 4, 3, 1} +// err = checkStatus(t, blockPool, false, expected) +// if err != nil { +// return +// } + +// blockPool.Stop() +// } |