func processTxs(repl *testjethre, t *testing.T, expTxc int) bool { var txc int64 var err error for i := 0; i < 50; i++ { txc, err = pendingTransactions(repl, t) if err != nil { t.Errorf("unexpected error checking pending transactions: %v", err) return false } if expTxc < int(txc) { t.Errorf("too many pending transactions: expected %v, got %v", expTxc, txc) return false } else if expTxc == int(txc) { break } time.Sleep(100 * time.Millisecond) } if int(txc) != expTxc { t.Errorf("incorrect number of pending transactions, expected %v, got %v", expTxc, txc) return false } var ethereum *eth.Ethereum repl.stack.Service(ðereum) err = ethereum.StartMining(runtime.NumCPU(), "") if err != nil { t.Errorf("unexpected error mining: %v", err) return false } defer ethereum.StopMining() timer := time.NewTimer(100 * time.Second) blockNr := ethereum.BlockChain().CurrentBlock().Number() height := new(big.Int).Add(blockNr, big.NewInt(1)) repl.wait <- height select { case <-timer.C: // if times out make sure the xeth loop does not block go func() { select { case repl.wait <- nil: case <-repl.wait: } }() case <-repl.wait: } txc, err = pendingTransactions(repl, t) if err != nil { t.Errorf("unexpected error checking pending transactions: %v", err) return false } if txc != 0 { t.Errorf("%d trasactions were not mined", txc) return false } return true }