@@ -7,7 +7,10 @@ use alloy::{
7
7
primitives:: U256 ,
8
8
providers:: { IpcConnect , Provider , ProviderBuilder , RootProvider } ,
9
9
pubsub:: PubSubFrontend ,
10
- rpc:: types:: { BlockNumberOrTag , BlockTransactions , BlockTransactionsKind , Header as RpcHeader } ,
10
+ rpc:: {
11
+ client:: ClientBuilder ,
12
+ types:: { BlockNumberOrTag , BlockTransactions , BlockTransactionsKind , Header as RpcHeader } ,
13
+ } ,
11
14
transports:: RpcError ,
12
15
} ;
13
16
use ethportal_api:: {
@@ -16,14 +19,15 @@ use ethportal_api::{
16
19
ContentValue , Header , HistoryContentKey , HistoryContentValue , HistoryNetworkApiClient ,
17
20
} ;
18
21
use jsonrpsee:: async_client:: Client ;
19
- use portalnet:: constants:: DEFAULT_WEB3_IPC_PATH ;
22
+ use portalnet:: constants:: { DEFAULT_WEB3_HTTP_ADDRESS , DEFAULT_WEB3_IPC_PATH } ;
20
23
use rpc:: RpcServerHandle ;
21
24
use serde_yaml:: Value ;
22
25
use serial_test:: serial;
23
26
use ssz:: Decode ;
24
27
25
28
mod utils;
26
29
use trin:: cli:: TrinConfig ;
30
+ use url:: Url ;
27
31
use utils:: init_tracing;
28
32
29
33
async fn setup_web3_server ( ) -> ( RpcServerHandle , RootProvider < PubSubFrontend > , Client ) {
@@ -62,6 +66,50 @@ async fn setup_web3_server() -> (RpcServerHandle, RootProvider<PubSubFrontend>,
62
66
( web3_server, web3_client, native_client)
63
67
}
64
68
69
+ #[ tokio:: test( flavor = "multi_thread" ) ]
70
+ #[ serial]
71
+ async fn test_batch_call ( ) {
72
+ init_tracing ( ) ;
73
+
74
+ let test_ip_addr = IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) ;
75
+ let test_discovery_port = 8999 ;
76
+ let external_addr = format ! ( "{test_ip_addr}:{test_discovery_port}" ) ;
77
+
78
+ let trin_config = TrinConfig :: new_from ( [
79
+ "trin" ,
80
+ "--external-address" ,
81
+ external_addr. as_str ( ) ,
82
+ "--web3-transport" ,
83
+ "http" ,
84
+ "--ephemeral" ,
85
+ "--discovery-port" ,
86
+ & test_discovery_port. to_string ( ) ,
87
+ "--bootnodes" ,
88
+ "none" ,
89
+ ] )
90
+ . unwrap ( ) ;
91
+
92
+ let web3_server = trin:: run_trin ( trin_config) . await . unwrap ( ) ;
93
+
94
+ let url = Url :: parse ( DEFAULT_WEB3_HTTP_ADDRESS ) . unwrap ( ) ;
95
+ let client = ClientBuilder :: default ( ) . http ( url) ;
96
+
97
+ let mut batch = client. new_batch ( ) ;
98
+
99
+ let client_version_future = batch
100
+ . add_call :: < ( ) , serde_json:: Value > ( "web3_clientVersion" , & ( ) )
101
+ . unwrap ( ) ;
102
+ let node_info_future = batch
103
+ . add_call :: < ( ) , serde_json:: Value > ( "discv5_nodeInfo" , & ( ) )
104
+ . unwrap ( ) ;
105
+
106
+ batch. send ( ) . await . unwrap ( ) ;
107
+ client_version_future. await . unwrap ( ) ;
108
+ node_info_future. await . unwrap ( ) ;
109
+
110
+ web3_server. stop ( ) . unwrap ( ) ;
111
+ }
112
+
65
113
#[ tokio:: test( flavor = "multi_thread" ) ]
66
114
#[ serial]
67
115
async fn test_eth_chain_id ( ) {
0 commit comments