Przeglądaj źródła

eth, eth/downloader: don't require td on downloader. Fixed tests

obscuren 10 lat temu
rodzic
commit
31f82eb334
4 zmienionych plików z 22 dodań i 25 usunięć
  1. 2 2
      eth/backend.go
  2. 1 4
      eth/downloader/downloader.go
  3. 17 17
      eth/downloader/downloader_test.go
  4. 2 2
      eth/handler.go

+ 2 - 2
eth/backend.go

@@ -217,7 +217,7 @@ func New(config *Config) (*Ethereum, error) {
 	}
 
 	eth.chainManager = core.NewChainManager(blockDb, stateDb, eth.EventMux())
-	eth.downloader = downloader.New(eth.chainManager.HasBlock, eth.chainManager.InsertChain, eth.chainManager.Td)
+	eth.downloader = downloader.New(eth.chainManager.HasBlock, eth.chainManager.InsertChain)
 	eth.pow = ethash.New(eth.chainManager)
 	eth.txPool = core.NewTxPool(eth.EventMux(), eth.chainManager.State)
 	eth.blockProcessor = core.NewBlockProcessor(stateDb, extraDb, eth.pow, eth.txPool, eth.chainManager, eth.EventMux())
@@ -448,7 +448,7 @@ func (self *Ethereum) SuggestPeer(nodeURL string) error {
 }
 
 func (s *Ethereum) Stop() {
-	s.txSub.Unsubscribe()         // quits txBroadcastLoop
+	s.txSub.Unsubscribe() // quits txBroadcastLoop
 
 	s.protocolManager.Stop()
 	s.txPool.Stop()

+ 1 - 4
eth/downloader/downloader.go

@@ -39,7 +39,6 @@ var (
 type hashCheckFn func(common.Hash) bool
 type chainInsertFn func(types.Blocks) error
 type hashIterFn func() (common.Hash, error)
-type currentTdFn func() *big.Int
 
 type blockPack struct {
 	peerId string
@@ -61,7 +60,6 @@ type Downloader struct {
 	// Callbacks
 	hasBlock    hashCheckFn
 	insertChain chainInsertFn
-	currentTd   currentTdFn
 
 	// Status
 	fetchingHashes    int32
@@ -76,13 +74,12 @@ type Downloader struct {
 	quit      chan struct{}
 }
 
-func New(hasBlock hashCheckFn, insertChain chainInsertFn, currentTd currentTdFn) *Downloader {
+func New(hasBlock hashCheckFn, insertChain chainInsertFn) *Downloader {
 	downloader := &Downloader{
 		queue:       newqueue(),
 		peers:       make(peers),
 		hasBlock:    hasBlock,
 		insertChain: insertChain,
-		currentTd:   currentTd,
 		newPeerCh:   make(chan *peer, 1),
 		syncCh:      make(chan syncPack, 1),
 		hashCh:      make(chan []common.Hash, 1),

+ 17 - 17
eth/downloader/downloader_test.go

@@ -49,7 +49,7 @@ type downloadTester struct {
 
 func newTester(t *testing.T, hashes []common.Hash, blocks map[common.Hash]*types.Block) *downloadTester {
 	tester := &downloadTester{t: t, hashes: hashes, blocks: blocks, done: make(chan bool)}
-	downloader := New(tester.hasBlock, tester.insertChain, func() *big.Int { return new(big.Int) })
+	downloader := New(tester.hasBlock, tester.insertChain)
 	tester.downloader = downloader
 
 	return tester
@@ -112,7 +112,8 @@ func TestDownload(t *testing.T) {
 	minDesiredPeerCount = 4
 	blockTtl = 1 * time.Second
 
-	hashes := createHashes(0, 1000)
+	targetBlocks := 1000
+	hashes := createHashes(0, targetBlocks)
 	blocks := createBlocksFromHashes(hashes)
 	tester := newTester(t, hashes, blocks)
 
@@ -121,21 +122,21 @@ func TestDownload(t *testing.T) {
 	tester.badBlocksPeer("peer3", big.NewInt(0), common.Hash{})
 	tester.badBlocksPeer("peer4", big.NewInt(0), common.Hash{})
 
-success:
-	select {
-	case <-tester.done:
-		break success
-	case <-time.After(10 * time.Second): // XXX this could actually fail on a slow computer
-		t.Error("timeout")
+	blox, err := tester.downloader.Synchronise("peer1", hashes[0])
+	if err != nil {
+		t.Error("download error", err)
+	}
+
+	if len(blox) != targetBlocks {
+		t.Error("expected", targetBlocks, "have", len(blox))
 	}
 }
 
 func TestMissing(t *testing.T) {
-	t.Skip()
-
 	glog.SetV(logger.Detail)
 	glog.SetToStderr(true)
 
+	targetBlocks := 1000
 	hashes := createHashes(0, 1000)
 	extraHashes := createHashes(1001, 1003)
 	blocks := createBlocksFromHashes(append(extraHashes, hashes...))
@@ -146,13 +147,12 @@ func TestMissing(t *testing.T) {
 	hashes = append(extraHashes, hashes[:len(hashes)-1]...)
 	tester.newPeer("peer2", big.NewInt(0), common.Hash{})
 
-success1:
-	select {
-	case <-tester.done:
-		break success1
-	case <-time.After(10 * time.Second): // XXX this could actually fail on a slow computer
-		t.Error("timout")
+	blox, err := tester.downloader.Synchronise("peer1", hashes[0])
+	if err != nil {
+		t.Error("download error", err)
 	}
 
-	tester.downloader.AddBlock("peer2", blocks[hashes[len(hashes)-1]], big.NewInt(10001))
+	if len(blox) != targetBlocks {
+		t.Error("expected", targetBlocks, "have", len(blox))
+	}
 }

+ 2 - 2
eth/handler.go

@@ -134,14 +134,14 @@ out:
 			if len(pm.peers) < minDesiredPeerCount {
 				break
 			}
-			itimer.Stop()
 
 			// Find the best peer
 			peer := getBestPeer(pm.peers)
 			if peer == nil {
 				glog.V(logger.Debug).Infoln("Sync attempt cancelled. No peers available")
-				return
 			}
+
+			itimer.Stop()
 			go pm.synchronise(peer)
 		case <-itimer.C:
 			// The timer will make sure that the downloader keeps an active state