@@ -6934,13 +6934,40 @@ fn test_alpenglow_ensure_liveness_after_intertwined_notar_and_skip_fallbacks() {
69346934 assert_eq ! ( NUM_NODES , vote_pubkey_to_node_index. len( ) ) ;
69356935
69366936 /// Helper struct to manage experiment state and vote pattern tracking
6937- #[ derive( PartialEq , Eq ) ]
6937+ #[ derive( Debug , PartialEq , Eq ) ]
69386938 enum Stage {
69396939 Stability ,
69406940 ObserveSkipFallbacks ,
69416941 ObserveLiveness ,
69426942 }
69436943
6944+ impl Stage {
6945+ fn timeout ( & self ) -> Duration {
6946+ match self {
6947+ Stage :: Stability => Duration :: from_secs ( 60 ) ,
6948+ Stage :: ObserveSkipFallbacks => Duration :: from_secs ( 120 ) ,
6949+ Stage :: ObserveLiveness => Duration :: from_secs ( 180 ) ,
6950+ }
6951+ }
6952+
6953+ fn name ( & self ) -> & ' static str {
6954+ match self {
6955+ Stage :: Stability => "Stability" ,
6956+ Stage :: ObserveSkipFallbacks => "ObserveSkipFallbacks" ,
6957+ Stage :: ObserveLiveness => "ObserveLiveness" ,
6958+ }
6959+ }
6960+
6961+ fn all ( ) -> Vec < Stage > {
6962+ vec ! [
6963+ Stage :: Stability ,
6964+ Stage :: ObserveSkipFallbacks ,
6965+ Stage :: ObserveLiveness ,
6966+ ]
6967+ }
6968+ }
6969+
6970+ #[ derive( Debug ) ]
69446971 struct ExperimentState {
69456972 stage : Stage ,
69466973 vote_type_bitmap : HashMap < u64 , [ u8 ; 4 ] > , // slot -> [node_vote_pattern; 4]
@@ -7019,6 +7046,8 @@ fn test_alpenglow_ensure_liveness_after_intertwined_notar_and_skip_fallbacks() {
70197046 let mut buffer = [ 0u8 ; 65_535 ] ;
70207047 let mut experiment_state = ExperimentState :: new ( ) ;
70217048
7049+ let timer = std:: time:: Instant :: now ( ) ;
7050+
70227051 loop {
70237052 let bytes_received = vote_listener_socket
70247053 . recv ( & mut buffer)
@@ -7037,6 +7066,21 @@ fn test_alpenglow_ensure_liveness_after_intertwined_notar_and_skip_fallbacks() {
70377066 . as_alpenglow_transaction_ref ( )
70387067 . expect ( "Failed to get alpenglow vote reference" ) ;
70397068
7069+ // Stage timeouts
7070+ let elapsed_time = timer. elapsed ( ) ;
7071+
7072+ for stage in Stage :: all ( ) {
7073+ if elapsed_time > stage. timeout ( ) {
7074+ panic ! (
7075+ "Timeout during {} stage. node_c_turbine_disabled: {:#?}. Latest vote: {:#?}. Experiment state: {:#?}" ,
7076+ stage. name( ) ,
7077+ node_c_turbine_disabled. load( Ordering :: Acquire ) ,
7078+ vote,
7079+ experiment_state
7080+ ) ;
7081+ }
7082+ }
7083+
70407084 // Stage 1: Wait for stability, then introduce partition at slot 50
70417085 if vote. slot ( ) == 50 && !node_c_turbine_disabled. load ( Ordering :: Acquire ) {
70427086 node_c_turbine_disabled. store ( true , Ordering :: Release ) ;
0 commit comments