@@ -84,3 +84,69 @@ pub fn check_beacon_node_version(bn_version: &str) {
8484 Ok ( ( ) ) => { /* Do nothing */ }
8585 }
8686}
87+
88+ #[ cfg( test) ]
89+ mod tests {
90+ use super :: * ;
91+
92+ #[ test]
93+ fn check_beacon_node_version_status ( ) {
94+ let tc = vec ! [
95+ // Teku
96+ (
97+ "teku/v25.9.3/linux-x86_64/-eclipseadoptium-openjdk64bitservervm-java-21" ,
98+ Ok ( ( ) ) ,
99+ ) ,
100+ (
101+ "teku/vUNKNOWN+g40561a9/linux-x86_64/-eclipseadoptium-openjdk64bitservervm-java-21" ,
102+ Err ( BeaconNodeVersionError :: InvalidFormat ) ,
103+ ) ,
104+ // Lighthouse
105+ ( "Lighthouse/v8.0.1-e42406d/x86_64-linux" , Ok ( ( ) ) ) ,
106+ ( "Lighthouse/v8.0.0-54f7bc5/aarch64-linux" , Ok ( ( ) ) ) ,
107+ // Lodestar
108+ ( "Lodestar/v1.35.0/8335180" , Ok ( ( ) ) ) ,
109+ ( "Lodestar/v1.36.0/1a34f98" , Ok ( ( ) ) ) ,
110+ // Nimbus
111+ ( "Nimbus/v26.4.1-77cfa7-stateofus" , Ok ( ( ) ) ) ,
112+ ( "Nimbus/v26.5.0-d2f233-stateofus" , Ok ( ( ) ) ) ,
113+ (
114+ "Nimbus/v25.9.0-c7e5ca-stateofus" ,
115+ Err ( BeaconNodeVersionError :: TooOld {
116+ client: version:: SemVer :: try_from( "v25.9.0" ) . unwrap( ) ,
117+ minimum: version:: SemVer :: try_from( "v25.9.2" ) . unwrap( ) ,
118+ } ) ,
119+ ) ,
120+ // Prysm
121+ (
122+ "Prysm/v5.3.2 (linux amd64)" ,
123+ Err ( BeaconNodeVersionError :: TooOld {
124+ client: version:: SemVer :: try_from( "v5.3.2" ) . unwrap( ) ,
125+ minimum: version:: SemVer :: try_from( "v6.1.0" ) . unwrap( ) ,
126+ } ) ,
127+ ) ,
128+ ( "Prysm/v6.1.2 (linux amd64)" , Ok ( ( ) ) ) ,
129+ ( "Prysm/v6.2.0 (linux amd64)" , Ok ( ( ) ) ) ,
130+ // Grandine
131+ ( "Grandine/2.1.0-29cb5c1/x86_64-linux2025-05-19" , Ok ( ( ) ) ) ,
132+ // Additional error cases
133+ ( "" , Err ( BeaconNodeVersionError :: InvalidFormat ) ) ,
134+ ( "justastring" , Err ( BeaconNodeVersionError :: InvalidFormat ) ) ,
135+ ( "/v7.0.0" , Err ( BeaconNodeVersionError :: InvalidFormat ) ) ,
136+ (
137+ "UnknownClient/v7.0.0" ,
138+ Err ( BeaconNodeVersionError :: UnknownClient ) ,
139+ ) ,
140+ ( "Lighthouse/" , Err ( BeaconNodeVersionError :: InvalidFormat ) ) ,
141+ (
142+ "Lighthouse/vBAD" ,
143+ Err ( BeaconNodeVersionError :: InvalidFormat ) ,
144+ ) ,
145+ ] ;
146+
147+ for ( input, expected) in tc {
148+ let result = super :: check_beacon_node_version_status ( input) ;
149+ assert_eq ! ( result, expected) ;
150+ }
151+ }
152+ }
0 commit comments