forked from course/hse-2026
111 lines
3.7 KiB
Rust
111 lines
3.7 KiB
Rust
use anysystem::test::TestResult;
|
|
use anysystem::Message;
|
|
|
|
use crate::common::*;
|
|
|
|
pub fn test_run(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
let msg = Message::new("PING", r#"{"value": "Hello!"}"#);
|
|
sys.send_local_message("client", msg);
|
|
sys.step_until_no_events();
|
|
Ok(true)
|
|
}
|
|
|
|
pub fn test_result(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
let data = r#"{"value": "Hello!"}"#;
|
|
sys.send_local_message("client", Message::new("PING", data));
|
|
sys.step_until_no_events();
|
|
check(sys.read_local_messages("client"), data)
|
|
}
|
|
|
|
pub fn test_result_unreliable(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
sys.network().set_drop_rate(0.5);
|
|
let data = r#"{"value": "Hello!"}"#;
|
|
sys.send_local_message("client", Message::new("PING", data));
|
|
sys.step_until_no_events();
|
|
check(sys.read_local_messages("client"), data)
|
|
}
|
|
|
|
pub fn test_10_results_unreliable(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
sys.network().set_drop_rate(0.5);
|
|
let data = r#"{"value": "Hello!"}"#;
|
|
for _ in 0..10 {
|
|
sys.send_local_message("client", Message::new("PING", data));
|
|
sys.step_until_no_events();
|
|
check(sys.read_local_messages("client"), data)?;
|
|
}
|
|
Ok(true)
|
|
}
|
|
|
|
pub fn test_drop_ping(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
sys.network().set_drop_rate(1.0);
|
|
let data = r#"{"value": "Hello!"}"#;
|
|
sys.send_local_message("client", Message::new("PING", data));
|
|
sys.steps(10);
|
|
sys.network().set_drop_rate(0.0);
|
|
sys.step_until_no_events();
|
|
check(sys.read_local_messages("client"), data)
|
|
}
|
|
|
|
pub fn test_drop_pong(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
let data = r#"{"value": "Hello!"}"#;
|
|
sys.send_local_message("client", Message::new("PING", data));
|
|
sys.network().set_drop_rate(1.0);
|
|
sys.steps(10);
|
|
sys.network().set_drop_rate(0.0);
|
|
sys.step_until_no_events();
|
|
check(sys.read_local_messages("client"), data)
|
|
}
|
|
|
|
pub fn test_drop_ping_2(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
sys.network().drop_outgoing("client-node");
|
|
let data = r#"{"value": "Hello!"}"#;
|
|
sys.send_local_message("client", Message::new("PING", data));
|
|
sys.steps(10);
|
|
sys.network().pass_outgoing("client-node");
|
|
sys.step_until_no_events();
|
|
check(sys.read_local_messages("client"), data)
|
|
}
|
|
|
|
pub fn test_drop_pong_2(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
sys.network().drop_outgoing("server-node");
|
|
let data = r#"{"value": "Hello!"}"#;
|
|
sys.send_local_message("client", Message::new("PING", data));
|
|
sys.steps(10);
|
|
sys.network().pass_outgoing("server-node");
|
|
sys.step_until_no_events();
|
|
check(sys.read_local_messages("client"), data)
|
|
}
|
|
|
|
pub fn test_10_unique_results(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
sys.network().set_delays(1.0, 2.0);
|
|
for i in 0..10 {
|
|
let data = format!(r#"{{"value": "Hello{i}!"}}"#);
|
|
sys.send_local_message("client", Message::new("PING", &data));
|
|
let messages = sys.step_until_local_message("client")?;
|
|
check(messages, &data)?;
|
|
}
|
|
Ok(true)
|
|
}
|
|
|
|
pub fn test_10_unique_results_unreliable(config: &TestConfig) -> TestResult {
|
|
let mut sys = build_system(config);
|
|
sys.network().set_delays(1.0, 2.0);
|
|
sys.network().set_drop_rate(0.5);
|
|
for i in 0..10 {
|
|
let data = format!(r#"{{"value": "Hello{i}!"}}"#);
|
|
sys.send_local_message("client", Message::new("PING", &data));
|
|
let messages = sys.step_until_local_message("client")?;
|
|
check(messages, &data)?;
|
|
}
|
|
Ok(true)
|
|
}
|