cleanup multi node test

This commit is contained in:
Anatoly Yakovenko
2018-05-23 14:06:33 -07:00
committed by Greg Fitzgerald
parent 2a0095e322
commit f3c4acc723
2 changed files with 52 additions and 60 deletions

View File

@ -816,5 +816,4 @@ mod test {
t.join().unwrap(); t.join().unwrap();
} }
} }
} }

View File

@ -295,21 +295,21 @@ mod tests {
t.join().unwrap(); t.join().unwrap();
} }
} }
fn replicant( fn validator(
leader: &ReplicatedData, leader: &ReplicatedData,
exit: Arc<AtomicBool>, exit: Arc<AtomicBool>,
alice: &Mint, alice: &Mint,
threads: &mut Vec<JoinHandle<()>>, threads: &mut Vec<JoinHandle<()>>,
) { ) {
let replicant = TestNode::new(); let validator = TestNode::new();
let replicant_bank = Bank::new(&alice); let replicant_bank = Bank::new(&alice);
let mut ts = Server::new_validator( let mut ts = Server::new_validator(
replicant_bank, replicant_bank,
replicant.data.clone(), validator.data.clone(),
replicant.sockets.requests, validator.sockets.requests,
replicant.sockets.respond, validator.sockets.respond,
replicant.sockets.replicate, validator.sockets.replicate,
replicant.sockets.gossip, validator.sockets.gossip,
leader.clone(), leader.clone(),
exit.clone(), exit.clone(),
); );
@ -354,7 +354,7 @@ mod tests {
assert!(converged); assert!(converged);
threads.push(t_spy_listen); threads.push(t_spy_listen);
threads.push(t_spy_gossip); threads.push(t_spy_gossip);
let ret: Vec<_> = spy_ref let v: Vec<ReplicatedData> = spy_ref
.read() .read()
.unwrap() .unwrap()
.table .table
@ -363,10 +363,9 @@ mod tests {
.filter(|x| x.id != me) .filter(|x| x.id != me)
.map(|x| x.clone()) .map(|x| x.clone())
.collect(); .collect();
ret.clone() v.clone()
} }
#[test] #[test]
#[ignore]
fn test_multi_node() { fn test_multi_node() {
logger::setup(); logger::setup();
const N: usize = 5; const N: usize = 5;
@ -393,66 +392,60 @@ mod tests {
let mut threads = server.thread_hdls; let mut threads = server.thread_hdls;
for _ in 0..N { for _ in 0..N {
replicant(&leader.data, exit.clone(), &alice, &mut threads); validator(&leader.data, exit.clone(), &alice, &mut threads);
} }
let addrs = converge(&leader.data, exit.clone(), N + 2, &mut threads); let servers = converge(&leader.data, exit.clone(), N + 2, &mut threads);
//contains the leader addr as well //contains the leader addr as well
assert_eq!(addrs.len(), N + 1); assert_eq!(servers.len(), N + 1);
//verify leader can do transfer //verify leader can do transfer
let leader_balance = { let leader_balance = tx_and_retry_get_balance(&leader.data, &alice, &bob_pubkey).unwrap();
let requests_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
requests_socket
.set_read_timeout(Some(Duration::new(1, 0)))
.unwrap();
let events_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
let mut client = ThinClient::new(
leader.data.requests_addr,
requests_socket,
leader.data.events_addr,
events_socket,
);
trace!("getting leader last_id");
let last_id = client.get_last_id().wait().unwrap();
info!("executing leader transer");
let _sig = client
.transfer(500, &alice.keypair(), bob_pubkey, &last_id)
.unwrap();
trace!("getting leader balance");
client.get_balance(&bob_pubkey).unwrap()
};
assert_eq!(leader_balance, 500); assert_eq!(leader_balance, 500);
//verify replicant has the same balance //verify validator has the same balance
let mut success = 0usize; let mut success = 0usize;
for rd in addrs.iter() { for server in servers.iter() {
let requests_socket = UdpSocket::bind("0.0.0.0:0").unwrap(); let mut client = mk_client(server);
requests_socket if let Ok(bal) = poll_get_balance(&mut client, &bob_pubkey) {
.set_read_timeout(Some(Duration::new(1, 0))) trace!("validator balance {}", bal);
.unwrap();
let events_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
let mut client = ThinClient::new(
rd.requests_addr,
requests_socket,
rd.events_addr,
events_socket,
);
for i in 0..10 {
trace!("getting replicant balance {} {}/10", rd.requests_addr, i);
if let Ok(bal) = client.get_balance(&bob_pubkey) {
trace!("replicant balance {}", bal);
if bal == leader_balance { if bal == leader_balance {
success += 1; success += 1;
break;
} }
} }
sleep(Duration::new(1, 0));
} }
} assert_eq!(success, servers.len());
assert_eq!(success, addrs.len());
exit.store(true, Ordering::Relaxed); exit.store(true, Ordering::Relaxed);
for t in threads { for t in threads {
t.join().unwrap(); t.join().unwrap();
} }
} }
fn mk_client(leader: &ReplicatedData) -> ThinClient {
let requests_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
requests_socket
.set_read_timeout(Some(Duration::new(1, 0)))
.unwrap();
let events_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
ThinClient::new(
leader.requests_addr,
requests_socket,
leader.events_addr,
events_socket,
)
}
fn tx_and_retry_get_balance(
leader: &ReplicatedData,
alice: &Mint,
bob_pubkey: &PublicKey,
) -> io::Result<i64> {
let mut client = mk_client(leader);
trace!("getting leader last_id");
let last_id = client.get_last_id().wait().unwrap();
info!("executing leader transer");
let _sig = client
.transfer(500, &alice.keypair(), *bob_pubkey, &last_id)
.unwrap();
poll_get_balance(&mut client, bob_pubkey)
}
} }