Skip to content

Commit 8843e7e

Browse files
authored
test(sns): speed up integration tests that involve SNS archive even more (#3272)
The new approach is to submit all the requests, then await all the responses, when spamming archive. On my machine, the total runtime of upgrade_everything_test goes from `109.0s`-`126.8s` to `64.3s`-`65.9s` after this change.
1 parent 8e1db64 commit 8843e7e

File tree

1 file changed

+39
-13
lines changed

1 file changed

+39
-13
lines changed

rs/nervous_system/integration_tests/src/pocket_ic_helpers.rs

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,20 +1047,29 @@ pub mod nns {
10471047
use super::*;
10481048
use icp_ledger::{Memo, TransferArgs};
10491049

1050-
pub async fn icrc1_transfer(
1050+
pub async fn icrc1_transfer_request(
10511051
pocket_ic: &PocketIc,
10521052
sender: PrincipalId,
10531053
transfer_arg: TransferArg,
1054-
) -> Result<Nat, TransferError> {
1055-
let result = pocket_ic
1056-
.update_call(
1054+
) -> pocket_ic::common::rest::RawMessageId {
1055+
pocket_ic
1056+
.submit_call(
10571057
LEDGER_CANISTER_ID.into(),
10581058
Principal::from(sender),
10591059
"icrc1_transfer",
10601060
Encode!(&transfer_arg).unwrap(),
10611061
)
10621062
.await
1063-
.unwrap();
1063+
.unwrap()
1064+
}
1065+
1066+
pub async fn icrc1_transfer(
1067+
pocket_ic: &PocketIc,
1068+
sender: PrincipalId,
1069+
transfer_arg: TransferArg,
1070+
) -> Result<Nat, TransferError> {
1071+
let call_id = icrc1_transfer_request(pocket_ic, sender, transfer_arg).await;
1072+
let result = pocket_ic.await_call(call_id).await.unwrap();
10641073
let result = match result {
10651074
WasmResult::Reply(result) => result,
10661075
WasmResult::Reject(s) => panic!("Call to icrc1_transfer failed: {:#?}", s),
@@ -1974,21 +1983,32 @@ pub mod sns {
19741983
Decode!(&result, Nat).unwrap()
19751984
}
19761985

1977-
pub async fn icrc1_transfer(
1986+
pub async fn icrc1_transfer_request(
19781987
pocket_ic: &PocketIc,
19791988
canister_id: PrincipalId,
19801989
sender: PrincipalId,
19811990
transfer_arg: TransferArg,
1982-
) -> Result<Nat, TransferError> {
1983-
let result = pocket_ic
1984-
.update_call(
1991+
) -> pocket_ic::common::rest::RawMessageId {
1992+
pocket_ic
1993+
.submit_call(
19851994
canister_id.into(),
19861995
Principal::from(sender),
19871996
"icrc1_transfer",
19881997
Encode!(&transfer_arg).unwrap(),
19891998
)
19901999
.await
1991-
.unwrap();
2000+
.unwrap()
2001+
}
2002+
2003+
pub async fn icrc1_transfer(
2004+
pocket_ic: &PocketIc,
2005+
canister_id: PrincipalId,
2006+
sender: PrincipalId,
2007+
transfer_arg: TransferArg,
2008+
) -> Result<Nat, TransferError> {
2009+
let call_id =
2010+
icrc1_transfer_request(pocket_ic, canister_id, sender, transfer_arg).await;
2011+
let result = pocket_ic.await_call(call_id).await.unwrap();
19922012
let result = match result {
19932013
WasmResult::Reply(result) => result,
19942014
WasmResult::Reject(s) => panic!("Call to icrc1_transfer failed: {:#?}", s),
@@ -2232,15 +2252,17 @@ pub mod sns {
22322252
const NUM_TRANSACTIONS_NEEDED_TO_SPAWN_FIRST_ARCHIVE: u64 = 2000;
22332253

22342254
// Generate a bunch of SNS token transactions.
2235-
stream::iter(0..NUM_TRANSACTIONS_NEEDED_TO_SPAWN_FIRST_ARCHIVE)
2255+
// Sending all the requests, then awaiting all the responses, is much faster than sending each request in
2256+
// serial.
2257+
let transfer_requests = stream::iter(0..NUM_TRANSACTIONS_NEEDED_TO_SPAWN_FIRST_ARCHIVE)
22362258
.map(|i| {
22372259
async move {
22382260
let user_principal_id = PrincipalId::new_user_test_id(i);
22392261
let direct_participant_swap_account = Account {
22402262
owner: user_principal_id.0,
22412263
subaccount: None,
22422264
};
2243-
let _block_height = ledger::icrc1_transfer(
2265+
ledger::icrc1_transfer_request(
22442266
pocket_ic,
22452267
sns_ledger_canister_id,
22462268
sns_governance_canister_id,
@@ -2254,12 +2276,16 @@ pub mod sns {
22542276
},
22552277
)
22562278
.await
2257-
.unwrap();
22582279
}
22592280
})
22602281
.buffer_unordered(100)
22612282
.collect::<Vec<_>>()
22622283
.await;
2284+
let _transfer_responses = stream::iter(transfer_requests)
2285+
.map(|call_id| async move { pocket_ic.await_call(call_id).await.unwrap() })
2286+
.buffer_unordered(100)
2287+
.collect::<Vec<_>>()
2288+
.await;
22632289

22642290
let mut archives = ledger::archives(pocket_ic, sns_ledger_canister_id).await;
22652291

0 commit comments

Comments
 (0)