Skip to content

Commit

Permalink
ci: relax intermediate state check in stabilization test (#570)
Browse files Browse the repository at this point in the history
* Relax intermediate state check in stabilization test

* Improve wait_for assertion

* Incr stabilization times in stab test
  • Loading branch information
Ma233 authored Apr 11, 2024
1 parent 16f5adc commit 6f16630
Show file tree
Hide file tree
Showing 5 changed files with 157 additions and 232 deletions.
30 changes: 15 additions & 15 deletions crates/core/src/message/handlers/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -292,8 +292,8 @@ pub mod tests {
println!("========================================");

manually_establish_connection(&node1.swarm, &node2.swarm).await;
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

node1.assert_transports(vec![node2.did()]);
node2.assert_transports(vec![node1.did()]);
Expand All @@ -307,8 +307,8 @@ pub mod tests {
println!("========================================");

manually_establish_connection(&node3.swarm, &node2.swarm).await;
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state before connect via DHT ===");
node1.assert_transports(vec![node2.did()]);
Expand All @@ -331,8 +331,8 @@ pub mod tests {
assert_eq!(node1.dht().successors().max()?, node2.did());

node1.swarm.connect(node3.did()).await.unwrap();
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state after connect via DHT ===");
node1.assert_transports(vec![node2.did(), node3.did()]);
Expand Down Expand Up @@ -368,8 +368,8 @@ pub mod tests {
println!("========================================");

manually_establish_connection(&node1.swarm, &node2.swarm).await;
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

assert_eq!(node1.dht().successors().list()?, vec![node2.did()]);
assert_eq!(node2.dht().successors().list()?, vec![node1.did()]);
Expand All @@ -380,8 +380,8 @@ pub mod tests {
println!("========================================");

manually_establish_connection(&node3.swarm, &node2.swarm).await;
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state before connect via DHT ===");
node1.assert_transports(vec![node2.did()]);
Expand All @@ -404,8 +404,8 @@ pub mod tests {
assert_eq!(node1.dht().successors().max()?, node2.did());

node1.swarm.connect(node3.did()).await.unwrap();
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state after connect via DHT ===");
node1.assert_transports(vec![node2.did(), node3.did()]);
Expand Down Expand Up @@ -536,8 +536,8 @@ pub mod tests {
}

manually_establish_connection(&node1.swarm, &node2.swarm).await;
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

node1.assert_transports(vec![node2.did()]);
node2.assert_transports(vec![node1.did()]);
Expand Down Expand Up @@ -571,7 +571,7 @@ pub mod tests {
}
}

assert_no_more_msg(&node1, &node2, &node3).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

node1.assert_transports(vec![]);
node2.assert_transports(vec![]);
Expand Down
206 changes: 72 additions & 134 deletions crates/core/src/message/handlers/stabilization.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,16 +131,16 @@ mod test {
println!("========================================");

manually_establish_connection(&node1.swarm, &node2.swarm).await;
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("========================================");
println!("|| now we start join node3 to node2 ||");
println!("========================================");

manually_establish_connection(&node3.swarm, &node2.swarm).await;
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state before stabilization ===");
assert_eq!(node1.dht().successors().list()?, vec![node2.did()]);
Expand All @@ -161,62 +161,45 @@ mod test {
run_stabilization_once(node2.swarm.clone()).await?;
run_stabilization_once(node3.swarm.clone()).await?;

wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state after first stabilization ===");
// node1 -> node2 -> node3
// ^ |
// |-----------------|
// node1's pre is node2, node1's successor is node2
// node2's pre is node1, node2's successor is node3
// node3's pre is node2, node3's successor is node1
assert_eq!(node1.dht().successors().list()?, vec![
node2.did(),
node3.did()
]);
assert!(node1.dht().successors().list()?.contains(&node2.did()));
assert_eq!(node2.dht().successors().list()?, vec![
node3.did(),
node1.did()
]);
assert_eq!(node3.dht().successors().list()?, vec![
node1.did(),
node2.did()
]);
assert_eq!(*node1.dht().lock_predecessor()?, Some(node2.did()));
assert_eq!(*node2.dht().lock_predecessor()?, Some(node1.did()));
assert_eq!(*node3.dht().lock_predecessor()?, Some(node2.did()));

println!("=========================================");
println!("|| now we start second stabilization ||");
println!("=========================================");

run_stabilization_once(node1.swarm.clone()).await?;
run_stabilization_once(node2.swarm.clone()).await?;
run_stabilization_once(node3.swarm.clone()).await?;
assert!(node3.dht().successors().list()?.contains(&node2.did()));

println!("==========================================");
println!("|| now we start 5 times stabilization ||");
println!("==========================================");

for _ in 0..5 {
run_stabilization_once(node1.swarm.clone()).await?;
run_stabilization_once(node2.swarm.clone()).await?;
run_stabilization_once(node3.swarm.clone()).await?;

wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state after stabilization ===");
assert_eq!(node1.dht().successors().list()?, vec![
node2.did(),
node3.did()
]);
assert_eq!(node2.dht().successors().list()?, vec![
node3.did(),
node1.did()
]);
assert_eq!(node3.dht().successors().list()?, vec![
node1.did(),
node2.did()
]);
}

wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;

println!("=== Check state after second stabilization ===");
// node1 -> node2 -> node3
// ^ |
// |-----------------|
// node1's pre is node3, node1's successor is node2
// node2's pre is node1, node2's successor is node3
// node3's pre is node2, node3's successor is node1
assert_eq!(node1.dht().successors().list()?, vec![
node2.did(),
node3.did()
]);
assert_eq!(node2.dht().successors().list()?, vec![
node3.did(),
node1.did()
]);
assert_eq!(node3.dht().successors().list()?, vec![
node1.did(),
node2.did()
]);
println!("=== Check predecessor after all stabilization ===");
assert_eq!(*node1.dht().lock_predecessor()?, Some(node3.did()));
assert_eq!(*node2.dht().lock_predecessor()?, Some(node1.did()));
assert_eq!(*node3.dht().lock_predecessor()?, Some(node2.did()));
Expand All @@ -237,16 +220,16 @@ mod test {
println!("========================================");

manually_establish_connection(&node1.swarm, &node2.swarm).await;
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("========================================");
println!("|| now we start join node3 to node2 ||");
println!("========================================");

manually_establish_connection(&node3.swarm, &node2.swarm).await;
wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state before stabilization ===");
assert_eq!(node1.dht().successors().list()?, vec![node2.did()]);
Expand All @@ -267,90 +250,45 @@ mod test {
run_stabilization_once(node2.swarm.clone()).await?;
run_stabilization_once(node3.swarm.clone()).await?;

wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;
wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state after first stabilization ===");
// node3 -> node2 -> node1
// ^ |
// |-----------------|
// node1's pre is node2, node1's successor is node2
// node2's pre is node3, node2's successor is node1
// node3's pre is node2, node3's successor is node2
assert_eq!(node1.dht().successors().list()?, vec![node2.did()]);
assert!(node1.dht().successors().list()?.contains(&node2.did()));
assert_eq!(node2.dht().successors().list()?, vec![
node1.did(),
node3.did()
]);
assert_eq!(node3.dht().successors().list()?, vec![node2.did()]);
assert_eq!(*node1.dht().lock_predecessor()?, Some(node2.did()));
assert_eq!(*node2.dht().lock_predecessor()?, Some(node3.did()));
assert_eq!(*node3.dht().lock_predecessor()?, Some(node2.did()));

println!("=========================================");
println!("|| now we start second stabilization ||");
println!("=========================================");

run_stabilization_once(node1.swarm.clone()).await?;
run_stabilization_once(node2.swarm.clone()).await?;
run_stabilization_once(node3.swarm.clone()).await?;

wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;

println!("=== Check state after second stabilization ===");
// node3 -> node2 -> node1
// ^ |
// |-----------------|
// node1's pre is node2, node1's successor is node3
// node2's pre is node3, node2's successor is node1
// node3's pre is node2, node3's successor is node2
assert_eq!(node1.dht().successors().list()?, vec![
node3.did(),
node2.did()
]);
assert_eq!(node2.dht().successors().list()?, vec![
node1.did(),
node3.did()
]);
assert_eq!(node3.dht().successors().list()?, vec![
node2.did(),
node1.did()
]);
assert_eq!(*node1.dht().lock_predecessor()?, Some(node2.did()));
assert_eq!(*node2.dht().lock_predecessor()?, Some(node3.did()));
assert_eq!(*node3.dht().lock_predecessor()?, Some(node2.did()));

println!("=========================================");
println!("|| now we start third stabilization ||");
println!("=========================================");

run_stabilization_once(node1.swarm.clone()).await?;
run_stabilization_once(node2.swarm.clone()).await?;
run_stabilization_once(node3.swarm.clone()).await?;
assert!(node3.dht().successors().list()?.contains(&node2.did()));

println!("==========================================");
println!("|| now we start 5 times stabilization ||");
println!("==========================================");

for _ in 0..5 {
run_stabilization_once(node1.swarm.clone()).await?;
run_stabilization_once(node2.swarm.clone()).await?;
run_stabilization_once(node3.swarm.clone()).await?;

wait_for_msgs([&node1, &node2, &node3]).await;
assert_no_more_msg([&node1, &node2, &node3]).await;

println!("=== Check state after stabilization ===");
assert_eq!(node1.dht().successors().list()?, vec![
node3.did(),
node2.did()
]);
assert_eq!(node2.dht().successors().list()?, vec![
node1.did(),
node3.did()
]);
assert_eq!(node3.dht().successors().list()?, vec![
node2.did(),
node1.did()
]);
}

wait_for_msgs(&node1, &node2, &node3).await;
assert_no_more_msg(&node1, &node2, &node3).await;

println!("=== Check state after third stabilization ===");
// node3 -> node2 -> node1
// ^ |
// |-----------------|
// node1's pre is node2, node1's successor is node3
// node2's pre is node3, node2's successor is node1
// node3's pre is none1, node3's successor is node2
assert_eq!(node1.dht().successors().list()?, vec![
node3.did(),
node2.did()
]);
assert_eq!(node2.dht().successors().list()?, vec![
node1.did(),
node3.did()
]);
assert_eq!(node3.dht().successors().list()?, vec![
node2.did(),
node1.did()
]);
println!("=== Check predecessor after all stabilization ===");
assert_eq!(*node1.dht().lock_predecessor()?, Some(node2.did()));
assert_eq!(*node2.dht().lock_predecessor()?, Some(node3.did()));
assert_eq!(*node3.dht().lock_predecessor()?, Some(node1.did()));
Expand Down
Loading

0 comments on commit 6f16630

Please sign in to comment.