more simulation methods
This commit is contained in:
parent
44c4845d84
commit
9d23915caf
@ -22,15 +22,12 @@ use std::time::Duration;
|
|||||||
use ethcore::client::BlockChainClient;
|
use ethcore::client::BlockChainClient;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn 2_peer_1_tx_seal() {
|
fn two_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, vec!["1".sha3()], &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();
|
||||||
net.sync();
|
|
||||||
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());
|
||||||
}
|
}
|
||||||
@ -39,21 +36,22 @@ fn 2_peer_1_tx_seal() {
|
|||||||
fn issue_many() {
|
fn issue_many() {
|
||||||
::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, vec!["1".sha3()], &Spec::new_test_round);
|
||||||
net.peer(1).issue_rand_tx();
|
net.peer(1).issue_rand_txs(5);
|
||||||
net.peer(1).issue_rand_tx();
|
|
||||||
net.peer(1).issue_rand_tx();
|
|
||||||
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();
|
||||||
|
net.peer(0).issue_rand_txs(5);
|
||||||
net.sync();
|
net.sync();
|
||||||
net.peer(0).issue_rand_tx();
|
println!("{:?}", net.peer(0).client.chain_info());
|
||||||
net.peer(0).issue_rand_tx();
|
println!("{:?}", net.peer(1).client.chain_info());
|
||||||
net.peer(0).issue_rand_tx();
|
}
|
||||||
net.peer(0).issue_rand_tx();
|
|
||||||
net.peer(0).issue_rand_tx();
|
#[test]
|
||||||
net.sync();
|
fn rand_simulation() {
|
||||||
net.sync();
|
::env_logger::init().ok();
|
||||||
//println!("{:?}", net.peer(0).client.chain_info());
|
let mut net = MockNet::new_with_spec(2, vec!["1".sha3()], &Spec::new_test_round);
|
||||||
//println!("{:?}", net.peer(1).client.chain_info());
|
|
||||||
|
net.rand_simulation(10);
|
||||||
|
|
||||||
|
println!("{:?}", net.peer(0).client.chain_info());
|
||||||
|
println!("{:?}", net.peer(1).client.chain_info());
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ use ethcore::miner::Miner;
|
|||||||
use ethcore::service::ClientService;
|
use ethcore::service::ClientService;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::thread::sleep;
|
use std::thread::sleep;
|
||||||
|
use rand::{thread_rng, Rng};
|
||||||
|
|
||||||
pub struct TestIo<'p> {
|
pub struct TestIo<'p> {
|
||||||
pub client: Arc<Client>,
|
pub client: Arc<Client>,
|
||||||
@ -196,6 +197,12 @@ impl MockPeer {
|
|||||||
pub fn issue_rand_tx(&self) {
|
pub fn issue_rand_tx(&self) {
|
||||||
self.issue_tx(random_transaction())
|
self.issue_tx(random_transaction())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn issue_rand_txs(&self, n: usize) {
|
||||||
|
for _ in 0..n {
|
||||||
|
self.issue_rand_tx();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct MockNet {
|
pub struct MockNet {
|
||||||
@ -264,7 +271,6 @@ 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_secs(2));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,4 +309,16 @@ impl MockNet {
|
|||||||
pub fn done(&self) -> bool {
|
pub fn done(&self) -> bool {
|
||||||
self.peers.iter().all(|p| p.queue.try_read().unwrap().is_empty())
|
self.peers.iter().all(|p| p.queue.try_read().unwrap().is_empty())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn rand_peer(&self) -> Arc<MockPeer> {
|
||||||
|
thread_rng().choose(&self.peers).unwrap().clone()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn rand_simulation(&mut self, steps: usize) {
|
||||||
|
for _ in 0..steps {
|
||||||
|
self.rand_peer().issue_rand_tx();
|
||||||
|
sleep(Duration::from_millis(100));
|
||||||
|
self.sync();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user