11use std:: { collections:: HashMap , sync:: Arc , time:: Duration } ;
22
3+ use alloy:: primitives:: U256 ;
34use cb_common:: {
45 config:: { HTTP_TIMEOUT_SECONDS_DEFAULT , MUXER_HTTP_MAX_LENGTH , RuntimeMuxConfig } ,
5- interop:: ssv:: utils:: request_ssv_pubkeys_from_public_api,
6+ interop:: ssv:: utils:: { request_ssv_pubkeys_from_public_api, request_ssv_pubkeys_from_ssv_node } ,
67 signer:: random_secret,
78 types:: Chain ,
89 utils:: { ResponseReadError , set_ignore_content_length} ,
910} ;
1011use cb_pbs:: { DefaultBuilderApi , PbsService , PbsState } ;
1112use cb_tests:: {
1213 mock_relay:: { MockRelayState , start_mock_relay_service} ,
13- mock_ssv:: { SsvMockState , TEST_HTTP_TIMEOUT , create_mock_ssv_server} ,
14+ mock_ssv_node:: create_mock_ssv_node_server,
15+ mock_ssv_public:: { PublicSsvMockState , TEST_HTTP_TIMEOUT , create_mock_public_ssv_server} ,
1416 mock_validator:: MockValidator ,
1517 utils:: {
1618 bls_pubkey_from_hex_unchecked, generate_mock_relay, get_pbs_static_config, setup_test_env,
@@ -25,10 +27,11 @@ use url::Url;
2527
2628#[ tokio:: test]
2729/// Tests that a successful SSV network fetch is handled and parsed properly
28- async fn test_ssv_network_fetch ( ) -> Result < ( ) > {
30+ /// from the public API
31+ async fn test_ssv_public_network_fetch ( ) -> Result < ( ) > {
2932 // Start the mock server
3033 let port = 30100 ;
31- let _server_handle = create_mock_ssv_server ( port, None ) . await ?;
34+ let _server_handle = create_mock_public_ssv_server ( port, None ) . await ?;
3235 let url =
3336 Url :: parse ( & format ! ( "http://localhost:{port}/api/v4/test_chain/validators/in_operator/1" ) )
3437 . unwrap ( ) ;
@@ -37,11 +40,11 @@ async fn test_ssv_network_fetch() -> Result<()> {
3740 . await ?;
3841
3942 // Make sure the response is correct
40- // NOTE: requires that ssv_data .json dpesn 't change
43+ // NOTE: requires that ssv_valid_public .json doesn 't change
4144 assert_eq ! ( response. validators. len( ) , 3 ) ;
4245 let expected_pubkeys = [
4346 bls_pubkey_from_hex_unchecked (
44- "967ba17a3e7f82a25aa5350ec34d6923e28ad8237b5a41efe2c5e325240d74d87a015bf04634f21900963539c8229b2a " ,
47+ "aa370f6250d421d00437b9900407a7ad93b041aeb7259d99b55ab8b163277746680e93e841f87350737bceee46aa104d " ,
4548 ) ,
4649 bls_pubkey_from_hex_unchecked (
4750 "ac769e8cec802e8ffee34de3253be8f438a0c17ee84bdff0b6730280d24b5ecb77ebc9c985281b41ee3bda8663b6658c" ,
@@ -66,7 +69,8 @@ async fn test_ssv_network_fetch() -> Result<()> {
6669async fn test_ssv_network_fetch_big_data ( ) -> Result < ( ) > {
6770 // Start the mock server
6871 let port = 30101 ;
69- let server_handle = cb_tests:: mock_ssv:: create_mock_ssv_server ( port, None ) . await ?;
72+ let server_handle =
73+ cb_tests:: mock_ssv_public:: create_mock_public_ssv_server ( port, None ) . await ?;
7074 let url = Url :: parse ( & format ! ( "http://localhost:{port}/big_data" ) ) . unwrap ( ) ;
7175 let response = request_ssv_pubkeys_from_public_api ( url, Duration :: from_secs ( 120 ) ) . await ;
7276
@@ -97,11 +101,11 @@ async fn test_ssv_network_fetch_big_data() -> Result<()> {
97101async fn test_ssv_network_fetch_timeout ( ) -> Result < ( ) > {
98102 // Start the mock server
99103 let port = 30102 ;
100- let state = SsvMockState {
104+ let state = PublicSsvMockState {
101105 validators : Arc :: new ( RwLock :: new ( vec ! [ ] ) ) ,
102106 force_timeout : Arc :: new ( RwLock :: new ( true ) ) ,
103107 } ;
104- let server_handle = create_mock_ssv_server ( port, Some ( state) ) . await ?;
108+ let server_handle = create_mock_public_ssv_server ( port, Some ( state) ) . await ?;
105109 let url =
106110 Url :: parse ( & format ! ( "http://localhost:{port}/api/v4/test_chain/validators/in_operator/1" ) )
107111 . unwrap ( ) ;
@@ -127,7 +131,7 @@ async fn test_ssv_network_fetch_big_data_without_content_length() -> Result<()>
127131 // Start the mock server
128132 let port = 30103 ;
129133 set_ignore_content_length ( true ) ;
130- let server_handle = create_mock_ssv_server ( port, None ) . await ?;
134+ let server_handle = create_mock_public_ssv_server ( port, None ) . await ?;
131135 let url = Url :: parse ( & format ! ( "http://localhost:{port}/big_data" ) ) . unwrap ( ) ;
132136 let response = request_ssv_pubkeys_from_public_api ( url, Duration :: from_secs ( 120 ) ) . await ;
133137
@@ -152,6 +156,37 @@ async fn test_ssv_network_fetch_big_data_without_content_length() -> Result<()>
152156 Ok ( ( ) )
153157}
154158
159+ #[ tokio:: test]
160+ /// Tests that a successful SSV network fetch is handled and parsed properly
161+ /// from the node API
162+ async fn test_ssv_node_network_fetch ( ) -> Result < ( ) > {
163+ // Start the mock server
164+ let port = 30104 ;
165+ let _server_handle = create_mock_ssv_node_server ( port, None ) . await ?;
166+ let url = Url :: parse ( & format ! ( "http://localhost:{port}/v1/validators" ) ) . unwrap ( ) ;
167+ let response = request_ssv_pubkeys_from_ssv_node (
168+ url,
169+ U256 :: from ( 1 ) ,
170+ Duration :: from_secs ( HTTP_TIMEOUT_SECONDS_DEFAULT ) ,
171+ )
172+ . await ?;
173+
174+ // Make sure the response is correct
175+ // NOTE: requires that ssv_valid_node.json doesn't change
176+ assert_eq ! ( response. data. len( ) , 1 ) ;
177+ let expected_pubkeys = [ bls_pubkey_from_hex_unchecked (
178+ "aa370f6250d421d00437b9900407a7ad93b041aeb7259d99b55ab8b163277746680e93e841f87350737bceee46aa104d" ,
179+ ) ] ;
180+ for ( i, validator) in response. data . iter ( ) . enumerate ( ) {
181+ assert_eq ! ( validator. public_key, expected_pubkeys[ i] ) ;
182+ }
183+
184+ // Clean up the server handle
185+ _server_handle. abort ( ) ;
186+
187+ Ok ( ( ) )
188+ }
189+
155190#[ tokio:: test]
156191async fn test_mux ( ) -> Result < ( ) > {
157192 setup_test_env ( ) ;
0 commit comments