@@ -595,6 +595,7 @@ mod tests {
595595 use crate :: PruneConfig ;
596596 use alloy_primitives:: Address ;
597597 use reth_network_peers:: TrustedPeer ;
598+ use reth_network_types:: peers:: Discv5BootNode ;
598599 use reth_prune_types:: { PruneMode , PruneModes , ReceiptsLogPruneConfig } ;
599600 use std:: { collections:: BTreeMap , path:: Path , str:: FromStr , time:: Duration } ;
600601
@@ -1164,4 +1165,133 @@ connect_trusted_nodes_only = true
11641165 assert ! ( conf. peers. trusted_nodes. contains( & node) ) ;
11651166 }
11661167 }
1168+
1169+ #[ test]
1170+ fn test_bootnodes_v4_config ( ) {
1171+ let reth_toml = r#"
1172+ [peers]
1173+ bootnodes_v4 = [
1174+ "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303",
1175+ "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303"
1176+ ]
1177+ "# ;
1178+
1179+ let conf: Config = toml:: from_str ( reth_toml) . unwrap ( ) ;
1180+ assert_eq ! ( conf. peers. bootnodes_v4. len( ) , 2 ) ;
1181+
1182+ let expected_enodes = vec ! [
1183+ "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303" ,
1184+ "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303" ,
1185+ ] ;
1186+
1187+ for enode in expected_enodes {
1188+ let node = TrustedPeer :: from_str ( enode) . unwrap ( ) ;
1189+ assert ! ( conf. peers. bootnodes_v4. contains( & node) ) ;
1190+ }
1191+ }
1192+
1193+ #[ test]
1194+ fn test_bootnodes_v5_config_enode ( ) {
1195+ let reth_toml = r#"
1196+ [peers]
1197+ bootnodes_v5 = [
1198+ "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303",
1199+ "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303"
1200+ ]
1201+ "# ;
1202+
1203+ let conf: Config = toml:: from_str ( reth_toml) . unwrap ( ) ;
1204+ assert_eq ! ( conf. peers. bootnodes_v5. len( ) , 2 ) ;
1205+
1206+ let expected_enodes = vec ! [
1207+ "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303" ,
1208+ "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303" ,
1209+ ] ;
1210+
1211+ for enode in expected_enodes {
1212+ let node = TrustedPeer :: from_str ( enode) . unwrap ( ) ;
1213+ let bootnode = Discv5BootNode :: Enode ( node) ;
1214+ assert ! ( conf. peers. bootnodes_v5. contains( & bootnode) ) ;
1215+ }
1216+ }
1217+
1218+ #[ test]
1219+ fn test_bootnodes_v5_config_enr ( ) {
1220+ let reth_toml = r#"
1221+ [peers]
1222+ bootnodes_v5 = [
1223+ "enr:-J64QBwRIWAco7lv6jImSOjPU_W266lHXzpAS5YOh7WmgTyBZkgLgOwo_mxKJq3wz2XRbsoBItbv1dCyjIoNq67mFguGAYrTxM42gmlkgnY0gmlwhBLSsHKHb3BzdGFja4S0lAUAiXNlY3AyNTZrMaEDmoWSi8hcsRpQf2eJsNUx-sqv6fH4btmo2HsAzZFAKnKDdGNwgiQGg3VkcIIkBg"
1224+ ]
1225+ "# ;
1226+
1227+ let conf: Config = toml:: from_str ( reth_toml) . unwrap ( ) ;
1228+ assert_eq ! ( conf. peers. bootnodes_v5. len( ) , 1 ) ;
1229+
1230+ let expected_enr = "enr:-J64QBwRIWAco7lv6jImSOjPU_W266lHXzpAS5YOh7WmgTyBZkgLgOwo_mxKJq3wz2XRbsoBItbv1dCyjIoNq67mFguGAYrTxM42gmlkgnY0gmlwhBLSsHKHb3BzdGFja4S0lAUAiXNlY3AyNTZrMaEDmoWSi8hcsRpQf2eJsNUx-sqv6fH4btmo2HsAzZFAKnKDdGNwgiQGg3VkcIIkBg" ;
1231+ let bootnode = Discv5BootNode :: Enr ( expected_enr. to_string ( ) ) ;
1232+ assert ! ( conf. peers. bootnodes_v5. contains( & bootnode) ) ;
1233+ }
1234+
1235+ #[ test]
1236+ fn test_bootnodes_v5_config_mixed ( ) {
1237+ let reth_toml = r#"
1238+ [peers]
1239+ bootnodes_v5 = [
1240+ "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303",
1241+ "enr:-J64QBwRIWAco7lv6jImSOjPU_W266lHXzpAS5YOh7WmgTyBZkgLgOwo_mxKJq3wz2XRbsoBItbv1dCyjIoNq67mFguGAYrTxM42gmlkgnY0gmlwhBLSsHKHb3BzdGFja4S0lAUAiXNlY3AyNTZrMaEDmoWSi8hcsRpQf2eJsNUx-sqv6fH4btmo2HsAzZFAKnKDdGNwgiQGg3VkcIIkBg"
1242+ ]
1243+ "# ;
1244+
1245+ let conf: Config = toml:: from_str ( reth_toml) . unwrap ( ) ;
1246+ assert_eq ! ( conf. peers. bootnodes_v5. len( ) , 2 ) ;
1247+
1248+ let enode_node = TrustedPeer :: from_str (
1249+ "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303" ,
1250+ )
1251+ . unwrap ( ) ;
1252+ let enode_bootnode = Discv5BootNode :: Enode ( enode_node) ;
1253+ assert ! ( conf. peers. bootnodes_v5. contains( & enode_bootnode) ) ;
1254+
1255+ let enr_string = "enr:-J64QBwRIWAco7lv6jImSOjPU_W266lHXzpAS5YOh7WmgTyBZkgLgOwo_mxKJq3wz2XRbsoBItbv1dCyjIoNq67mFguGAYrTxM42gmlkgnY0gmlwhBLSsHKHb3BzdGFja4S0lAUAiXNlY3AyNTZrMaEDmoWSi8hcsRpQf2eJsNUx-sqv6fH4btmo2HsAzZFAKnKDdGNwgiQGg3VkcIIkBg" ;
1256+ let enr_bootnode = Discv5BootNode :: Enr ( enr_string. to_string ( ) ) ;
1257+ assert ! ( conf. peers. bootnodes_v5. contains( & enr_bootnode) ) ;
1258+ }
1259+
1260+ #[ test]
1261+ fn test_bootnodes_v4_and_v5_separate_config ( ) {
1262+ let reth_toml = r#"
1263+ [peers]
1264+ bootnodes_v4 = [
1265+ "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303"
1266+ ]
1267+ bootnodes_v5 = [
1268+ "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303"
1269+ ]
1270+ "# ;
1271+
1272+ let conf: Config = toml:: from_str ( reth_toml) . unwrap ( ) ;
1273+ assert_eq ! ( conf. peers. bootnodes_v4. len( ) , 1 ) ;
1274+ assert_eq ! ( conf. peers. bootnodes_v5. len( ) , 1 ) ;
1275+
1276+ let v4_node = TrustedPeer :: from_str (
1277+ "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303" ,
1278+ )
1279+ . unwrap ( ) ;
1280+ let v5_node = TrustedPeer :: from_str (
1281+ "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303" ,
1282+ )
1283+ . unwrap ( ) ;
1284+ let v5_bootnode = Discv5BootNode :: Enode ( v5_node. clone ( ) ) ;
1285+
1286+ assert ! ( conf. peers. bootnodes_v4. contains( & v4_node) ) ;
1287+ assert ! ( conf. peers. bootnodes_v5. contains( & v5_bootnode) ) ;
1288+ assert ! ( !conf. peers. bootnodes_v4. contains( & v5_node) ) ;
1289+ }
1290+
1291+ #[ test]
1292+ fn test_bootnodes_default_empty ( ) {
1293+ let conf: Config = Config :: default ( ) ;
1294+ assert ! ( conf. peers. bootnodes_v4. is_empty( ) ) ;
1295+ assert ! ( conf. peers. bootnodes_v5. is_empty( ) ) ;
1296+ }
11671297}
0 commit comments