@@ -89,11 +89,14 @@ pub fn run_test(run_config: &RunConfig, actions: &GeneratedActions) -> TestResul
8989 let mut rng = run_config. rng ( ) ;
9090 let mut nodes = create_nodes ( & mut rng, node_configs ( run_config, actions) ) . expect ( "failed to create nodes" ) ;
9191
92- // Scale steps based on number of peers (more peers = more stages = more effects)
93- let base_steps = 10000 ;
94- let per_peer_steps = 2000 ;
95- let total_peers = run_config. number_of_upstream_peers as usize + run_config. number_of_downstream_peers as usize ;
96- let steps = base_steps + ( total_peers * per_peer_steps) ;
92+ // Scale steps based on the number of nodes in the system.
93+ // Each step runs one effect on one randomly-selected node, so with N nodes
94+ // each node gets ~total_steps/N turns. We multiply by total_nodes to ensure
95+ // every node (especially the node under test) gets enough turns.
96+ let upstream = run_config. number_of_upstream_peers as usize ;
97+ let downstream = run_config. number_of_downstream_peers as usize ;
98+ let total_nodes = upstream + downstream + 1 ;
99+ let steps = total_nodes * ( 5000 + upstream * 500 ) ;
97100
98101 nodes. run ( & mut rng, steps) ;
99102 check_chain_property ( nodes, actions)
@@ -117,7 +120,12 @@ pub fn run_test(run_config: &RunConfig, actions: &GeneratedActions) -> TestResul
117120pub fn node_configs ( run_config : & RunConfig , actions : & GeneratedActions ) -> Vec < NodeTestConfig > {
118121 let upstream_peers = run_config. upstream_peers ( ) ;
119122
120- let upstream_nodes = upstream_peers
123+ // Only create nodes for peers that have actions. During shrinking, some peers may lose
124+ // all their actions, so we skip creating nodes for them.
125+ let active_peers: Vec < _ > =
126+ upstream_peers. iter ( ) . filter ( |peer| !get_peer_actions ( actions, peer) . is_empty ( ) ) . cloned ( ) . collect ( ) ;
127+
128+ let upstream_nodes = active_peers
121129 . iter ( )
122130 . map ( |peer| {
123131 NodeTestConfig :: default ( )
@@ -135,7 +143,7 @@ pub fn node_configs(run_config: &RunConfig, actions: &GeneratedActions) -> Vec<N
135143 let node_under_test = NodeTestConfig :: default ( )
136144 . with_listen_address ( listen_address)
137145 . with_chain_length ( run_config. generated_chain_depth )
138- . with_upstream_peers ( upstream_peers )
146+ . with_upstream_peers ( active_peers )
139147 . with_trace_buffer ( trace_buffer)
140148 . with_validated_blocks ( vec ! [ actions. get_anchor( ) ] )
141149 . with_node_type ( NodeUnderTest ) ;
0 commit comments