Line data Source code
1 : use rand::Rng;
2 : use tracing::{info, warn};
3 :
4 : use crate::walproposer_sim::log::{init_logger, init_tracing_logger};
5 : use crate::walproposer_sim::simulation::{TestConfig, generate_network_opts, generate_schedule};
6 : use crate::walproposer_sim::simulation_logs::validate_events;
7 :
8 : pub mod walproposer_sim;
9 :
10 : // Generates 500 random seeds and runs a schedule for each of them.
11 : // If you see this test fail, please report the last seed to the
12 : // @safekeeper team.
13 : #[test]
14 1 : fn test_random_schedules() -> anyhow::Result<()> {
15 1 : let clock = init_logger();
16 1 : let mut config = TestConfig::new(Some(clock));
17 :
18 501 : for _ in 0..500 {
19 500 : let seed: u64 = rand::thread_rng().r#gen();
20 500 : config.network = generate_network_opts(seed);
21 500 :
22 500 : let test = config.start(seed);
23 500 : warn!("Running test with seed {}", seed);
24 :
25 500 : let schedule = generate_schedule(seed);
26 500 : test.run_schedule(&schedule).unwrap();
27 500 : validate_events(test.world.take_events());
28 500 : test.world.deallocate();
29 : }
30 :
31 1 : Ok(())
32 1 : }
33 :
34 : // After you found a seed that fails, you can insert this seed here
35 : // and run the test to see the full debug output.
36 : #[test]
37 1 : fn test_one_schedule() -> anyhow::Result<()> {
38 1 : let clock = init_tracing_logger(true);
39 1 : let mut config = TestConfig::new(Some(clock));
40 1 :
41 1 : let seed = 11047466935058776390;
42 1 : config.network = generate_network_opts(seed);
43 1 : info!("network: {:?}", config.network);
44 1 : let test = config.start(seed);
45 1 : warn!("Running test with seed {}", seed);
46 :
47 1 : let schedule = generate_schedule(seed);
48 1 : info!("schedule: {:?}", schedule);
49 1 : test.run_schedule(&schedule).unwrap();
50 1 : validate_events(test.world.take_events());
51 1 : test.world.deallocate();
52 1 :
53 1 : Ok(())
54 1 : }
|