1
1
use std:: {
2
2
fs,
3
3
path:: Path ,
4
+ str:: FromStr ,
4
5
thread,
5
6
time:: { Duration , Instant } ,
6
7
} ;
7
8
8
9
use avalanche_network_runner_sdk:: { BlockchainSpec , Client , GlobalConfig , StartRequest } ;
9
- use avalanche_types:: subnet;
10
+ use avalanche_types:: { ids , subnet} ;
10
11
use spacesvm:: {
11
12
self ,
12
- api:: client:: { claim_tx, get_or_create_pk, Uri } ,
13
+ api:: client:: { claim_tx, get_or_create_pk, set_tx , Uri } ,
13
14
} ;
14
15
15
16
#[ tokio:: test]
@@ -33,7 +34,7 @@ async fn e2e() {
33
34
assert ! ( exists) ;
34
35
assert ! ( Path :: new( & vm_plugin_path) . exists( ) ) ;
35
36
36
- let vm_id = subnet:: vm_name_to_id ( "minikvvm " ) . unwrap ( ) ;
37
+ let vm_id = subnet:: vm_name_to_id ( "spacesvm " ) . unwrap ( ) ;
37
38
38
39
let ( mut avalanchego_exec_path, _) = crate :: get_avalanchego_path ( ) ;
39
40
let plugins_dir = if !avalanchego_exec_path. is_empty ( ) {
@@ -50,7 +51,7 @@ async fn e2e() {
50
51
// keep this in sync with "proto" crate
51
52
// ref. https://github.com/ava-labs/avalanchego/blob/v1.9.2/version/constants.go#L15-L17
52
53
let ( exec_path, plugins_dir) =
53
- avalanche_installer:: avalanchego:: download ( None , None , Some ( "v1.9.2 " . to_string ( ) ) )
54
+ avalanche_installer:: avalanchego:: download ( None , None , Some ( "v1.9.3 " . to_string ( ) ) )
54
55
. await
55
56
. unwrap ( ) ;
56
57
avalanchego_exec_path = exec_path;
@@ -180,33 +181,68 @@ async fn e2e() {
180
181
log:: info!( "{}: {}" , node_name, iv. uri) ;
181
182
rpc_eps. push ( iv. uri . clone ( ) ) ;
182
183
}
184
+ let mut blockchain_id = ids:: Id :: empty ( ) ;
185
+ for ( k, v) in cluster_info. custom_chains . iter ( ) {
186
+ log:: info!( "custom chain info: {}={:?}" , k, v) ;
187
+ if v. chain_name == "spacesvm" {
188
+ blockchain_id = ids:: Id :: from_str ( & v. chain_id ) . unwrap ( ) ;
189
+ break ;
190
+ }
191
+ }
192
+
193
+ log:: info!( "avalanchego RPC endpoints: {:?}" , rpc_eps) ;
183
194
184
- let ep = format ! (
185
- "{}/{}" ,
186
- rpc_eps[ 0 ] . to_owned( ) ,
187
- spacesvm:: vm:: PUBLIC_API_ENDPOINT
188
- ) ;
189
195
let private_key = get_or_create_pk ( "/tmp/.spacesvm-cli-pk" ) . expect ( "generate new private key" ) ;
196
+ let chain_url = format ! ( "{}/ext/bc/{}/public" , rpc_eps[ 0 ] , blockchain_id) ;
197
+ let mut scli =
198
+ spacesvm:: api:: client:: Client :: new ( chain_url. parse :: < Uri > ( ) . expect ( "valid endpoint" ) )
199
+ . set_private_key ( private_key) ;
200
+ for ep in rpc_eps. iter ( ) {
201
+ let chain_url = format ! ( "{}/ext/bc/{}/public" , ep, blockchain_id)
202
+ . parse :: < Uri > ( )
203
+ . expect ( "valid endpoint" ) ;
204
+ scli. set_endpoint ( chain_url) ;
205
+ let resp = scli. ping ( ) . await . unwrap ( ) ;
206
+ log:: info!( "ping response from {}: {:?}" , ep, resp) ;
207
+ assert ! ( resp. success) ;
208
+
209
+ thread:: sleep ( Duration :: from_millis ( 300 ) ) ;
210
+ }
190
211
191
- let mut scli = spacesvm:: api:: client:: Client :: new ( ep. parse :: < Uri > ( ) . expect ( "valid endpoint" ) )
192
- . set_private_key ( private_key) ;
193
- log:: info!( "ping request..." ) ;
194
- let resp = scli. ping ( ) . await . expect ( "ping success" ) ;
195
- log:: info!( "ping response from {}: {:?}" , ep, resp) ;
212
+ scli. set_endpoint ( chain_url. parse :: < Uri > ( ) . expect ( "valid endpoint" ) ) ;
196
213
197
214
log:: info!( "decode claim tx request..." ) ;
198
215
let resp = scli
199
216
. decode_tx ( claim_tx ( "test" ) )
200
217
. await
201
218
. expect ( "decodeTx success" ) ;
202
- log:: info!( "decode claim response from {}: {:?}" , ep , resp) ;
219
+ log:: info!( "decode claim response from {}: {:?}" , chain_url , resp) ;
203
220
204
221
log:: info!( "issue claim tx request..." ) ;
205
222
let resp = scli
206
223
. issue_tx ( & resp. typed_data )
207
224
. await
208
225
. expect ( "issue_tx success" ) ;
209
- log:: info!( "issue claim tx response from {}: {:?}" , ep, resp) ;
226
+ log:: info!( "issue claim tx response from {}: {:?}" , chain_url, resp) ;
227
+
228
+ log:: info!( "decode set tx request..." ) ;
229
+ let resp = scli
230
+ . decode_tx ( set_tx ( "test" , "foo" , "bar" ) )
231
+ . await
232
+ . expect ( "decodeTx success" ) ;
233
+ log:: info!( "decode set response from {}: {:?}" , chain_url, resp) ;
234
+
235
+ log:: info!( "issue set tx request..." ) ;
236
+ let resp = scli
237
+ . issue_tx ( & resp. typed_data )
238
+ . await
239
+ . expect ( "issue_tx success" ) ;
240
+ log:: info!( "issue tx tx response from {}: {:?}" , chain_url, resp) ;
241
+
242
+ log:: info!( "issue resolve request..." ) ;
243
+ let resp = scli. resolve ( "test" , "foo" ) . await . expect ( "resolve success" ) ;
244
+ log:: info!( "resolve response from {}: {:?}" , chain_url, resp) ;
245
+ assert_eq ! ( std:: str :: from_utf8( & resp. value) . unwrap( ) , "bar" ) ;
210
246
211
247
if crate :: get_network_runner_enable_shutdown ( ) {
212
248
log:: info!( "shutdown is enabled... stopping..." ) ;
0 commit comments