sync check method
This commit is contained in:
parent
9d23915caf
commit
c57e3cefe4
@ -112,8 +112,8 @@ impl IoHandler<BlockArrived> for TransitionHandler {
|
|||||||
|
|
||||||
fn timeout(&self, io: &IoContext<BlockArrived>, timer: TimerToken) {
|
fn timeout(&self, io: &IoContext<BlockArrived>, timer: TimerToken) {
|
||||||
if timer == ENGINE_TIMEOUT_TOKEN {
|
if timer == ENGINE_TIMEOUT_TOKEN {
|
||||||
debug!(target: "authorityround", "timeout");
|
|
||||||
if let Some(engine) = self.engine.upgrade() {
|
if let Some(engine) = self.engine.upgrade() {
|
||||||
|
debug!(target: "authorityround", "Timeout step: {}", engine.step.load(AtomicOrdering::Relaxed));
|
||||||
engine.step.fetch_add(1, AtomicOrdering::SeqCst);
|
engine.step.fetch_add(1, AtomicOrdering::SeqCst);
|
||||||
io.register_timer_once(ENGINE_TIMEOUT_TOKEN, engine.our_params.step_duration).expect("Failed to restart consensus step timer.")
|
io.register_timer_once(ENGINE_TIMEOUT_TOKEN, engine.our_params.step_duration).expect("Failed to restart consensus step timer.")
|
||||||
}
|
}
|
||||||
|
@ -21,15 +21,20 @@ use std::thread::sleep;
|
|||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use ethcore::client::BlockChainClient;
|
use ethcore::client::BlockChainClient;
|
||||||
|
|
||||||
|
fn authorities() -> Vec<H256> { vec!["1".sha3(), "2".sha3()] }
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn two_peer_tx_seal() {
|
fn three_peer_tx_seal() {
|
||||||
::env_logger::init().ok();
|
::env_logger::init().ok();
|
||||||
let mut net = MockNet::new_with_spec(2, vec!["1".sha3()], &Spec::new_test_round);
|
let mut net = MockNet::new_with_spec(2, authorities(), &Spec::new_test_round);
|
||||||
net.peer(1).issue_rand_tx();
|
net.peer(1).issue_rand_tx();
|
||||||
sleep(Duration::from_secs(1));
|
sleep(Duration::from_secs(1));
|
||||||
net.sync();
|
net.sync();
|
||||||
|
sleep(Duration::from_secs(1));
|
||||||
|
net.sync();
|
||||||
println!("{:?}", net.peer(0).client.chain_info());
|
println!("{:?}", net.peer(0).client.chain_info());
|
||||||
println!("{:?}", net.peer(1).client.chain_info());
|
println!("{:?}", net.peer(1).client.chain_info());
|
||||||
|
net.is_synced(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -43,15 +48,17 @@ fn issue_many() {
|
|||||||
net.sync();
|
net.sync();
|
||||||
println!("{:?}", net.peer(0).client.chain_info());
|
println!("{:?}", net.peer(0).client.chain_info());
|
||||||
println!("{:?}", net.peer(1).client.chain_info());
|
println!("{:?}", net.peer(1).client.chain_info());
|
||||||
|
net.is_synced(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn rand_simulation() {
|
fn rand_simulation() {
|
||||||
::env_logger::init().ok();
|
::env_logger::init().ok();
|
||||||
let mut net = MockNet::new_with_spec(2, vec!["1".sha3()], &Spec::new_test_round);
|
let mut net = MockNet::new_with_spec(3, authorities(), &Spec::new_test_round);
|
||||||
|
|
||||||
net.rand_simulation(10);
|
net.rand_simulation(10);
|
||||||
|
|
||||||
println!("{:?}", net.peer(0).client.chain_info());
|
println!("{:?}", net.peer(0).client.chain_info());
|
||||||
println!("{:?}", net.peer(1).client.chain_info());
|
println!("{:?}", net.peer(1).client.chain_info());
|
||||||
|
net.is_synced(10);
|
||||||
}
|
}
|
@ -29,6 +29,7 @@ use ::SyncConfig;
|
|||||||
use devtools::RandomTempPath;
|
use devtools::RandomTempPath;
|
||||||
use ethcore::miner::Miner;
|
use ethcore::miner::Miner;
|
||||||
use ethcore::service::ClientService;
|
use ethcore::service::ClientService;
|
||||||
|
use ethcore::header::BlockNumber;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::thread::sleep;
|
use std::thread::sleep;
|
||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng, Rng};
|
||||||
@ -271,6 +272,7 @@ impl MockNet {
|
|||||||
let mut io = TestIo::new(peer0.client.clone(), &peer0.snapshot_service, &mut *q0, None);
|
let mut io = TestIo::new(peer0.client.clone(), &peer0.snapshot_service, &mut *q0, None);
|
||||||
p.sync.write().maintain_sync(&mut io);
|
p.sync.write().maintain_sync(&mut io);
|
||||||
p.sync.write().propagate_new_transactions(&mut io);
|
p.sync.write().propagate_new_transactions(&mut io);
|
||||||
|
sleep(Duration::from_millis(10));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,8 +319,18 @@ impl MockNet {
|
|||||||
pub fn rand_simulation(&mut self, steps: usize) {
|
pub fn rand_simulation(&mut self, steps: usize) {
|
||||||
for _ in 0..steps {
|
for _ in 0..steps {
|
||||||
self.rand_peer().issue_rand_tx();
|
self.rand_peer().issue_rand_tx();
|
||||||
sleep(Duration::from_millis(100));
|
sleep(Duration::from_millis(500));
|
||||||
self.sync();
|
self.sync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_synced(&self, block: BlockNumber) {
|
||||||
|
println!("Is block {:?}", &block);
|
||||||
|
let hash = self.peer(0).client.chain_info().best_block_hash;
|
||||||
|
for p in &self.peers {
|
||||||
|
let ci = p.client.chain_info();
|
||||||
|
assert_eq!(ci.best_block_number, block);
|
||||||
|
assert_eq!(ci.best_block_hash, hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,4 +19,4 @@ pub mod snapshot;
|
|||||||
pub mod mocknet;
|
pub mod mocknet;
|
||||||
mod chain;
|
mod chain;
|
||||||
mod rpc;
|
mod rpc;
|
||||||
mod consensus;
|
mod auth_round;
|
||||||
|
Loading…
Reference in New Issue
Block a user