aboutsummaryrefslogtreecommitdiffstats
path: root/blockpool/status_test.go
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/status_test.go
parentd46c7bcaf9268a191f0156d36abf394df5374795 (diff)
downloaddexon-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.go228
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()
+// }