Skip to content

Commit 64d34a4

Browse files
committed
add unittest for transaction
1 parent 863cae9 commit 64d34a4

File tree

2 files changed

+81
-1
lines changed

2 files changed

+81
-1
lines changed

executor/tests/error_code_test.rs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use anyhow::Result;
55
use once_cell::sync::Lazy;
66
use starcoin_crypto::hash::PlainCryptoHash;
7+
use starcoin_state_api::ChainStateWriter;
78
use starcoin_transaction_builder::{
89
encode_transfer_script_by_token_code, DEFAULT_EXPIRATION_TIME, DEFAULT_MAX_GAS_AMOUNT,
910
};
@@ -14,6 +15,7 @@ use starcoin_types::{
1415
account::Account, block_metadata::BlockMetadata, transaction::Transaction,
1516
transaction::TransactionStatus,
1617
};
18+
use starcoin_vm_runtime::starcoin_vm::StarcoinVM;
1719
use starcoin_vm_types::account_address::AccountAddress;
1820
use starcoin_vm_types::account_config::core_code_address;
1921
use starcoin_vm_types::account_config::{genesis_address, stc_type_tag};
@@ -252,3 +254,81 @@ fn test_call_deprecated_function() -> Result<()> {
252254
// assert_eq!(Some(4875), move_abort_code(status));
253255
Ok(())
254256
}
257+
258+
#[stest::test]
259+
fn test_stm_dependency() -> Result<()> {
260+
let (chain_state, net) = prepare_genesis();
261+
let account1 = Account::new();
262+
let txn1 = Transaction::UserTransaction(create_account_txn_sent_as_association(
263+
&account1, 0, 50_000_000, 1, &net,
264+
));
265+
let output1 = execute_and_apply(&chain_state, txn1);
266+
assert_eq!(KeptVMStatus::Executed, output1.status().status().unwrap());
267+
let account2 = Account::new();
268+
let txn2 = Transaction::UserTransaction(account1.sign_txn(
269+
starcoin_transaction_builder::build_transfer_txn(
270+
*account1.address(),
271+
*account2.address(),
272+
0,
273+
1000,
274+
1,
275+
DEFAULT_MAX_GAS_AMOUNT,
276+
net.time_service().now_secs() + DEFAULT_EXPIRATION_TIME,
277+
net.chain_id(),
278+
),
279+
));
280+
let output2 = execute_and_apply(&chain_state, txn2);
281+
assert_eq!(KeptVMStatus::Executed, output2.status().status().unwrap());
282+
let txn3 = Transaction::UserTransaction(account1.sign_txn(
283+
starcoin_transaction_builder::build_transfer_txn(
284+
*account1.address(),
285+
*account2.address(),
286+
1,
287+
1000,
288+
1,
289+
DEFAULT_MAX_GAS_AMOUNT,
290+
net.time_service().now_secs() + DEFAULT_EXPIRATION_TIME,
291+
net.chain_id(),
292+
),
293+
));
294+
let txn4 = Transaction::UserTransaction(account1.sign_txn(
295+
starcoin_transaction_builder::build_transfer_txn(
296+
*account1.address(),
297+
*account2.address(),
298+
2,
299+
1000,
300+
1,
301+
DEFAULT_MAX_GAS_AMOUNT,
302+
net.time_service().now_secs() + DEFAULT_EXPIRATION_TIME,
303+
net.chain_id(),
304+
),
305+
));
306+
//
307+
// let txn5 = Transaction::UserTransaction(account1.sign_txn(
308+
// starcoin_transaction_builder::build_transfer_txn(
309+
// *account1.address(),
310+
// *account2.address(),
311+
// 1,
312+
// 1000,
313+
// 1,
314+
// DEFAULT_MAX_GAS_AMOUNT,
315+
// net.time_service().now_secs() + DEFAULT_EXPIRATION_TIME,
316+
// net.chain_id(),
317+
// ),
318+
// ));
319+
StarcoinVM::set_concurrency_level_once(4);
320+
let outputs =
321+
starcoin_executor::execute_transactions(&chain_state, vec![txn3, txn4], None).unwrap();
322+
outputs.into_iter().for_each(|output| {
323+
if let TransactionStatus::Keep(_) = output.status() {
324+
chain_state
325+
.apply_write_set(output.write_set().clone())
326+
.expect("apply write_set should success.");
327+
chain_state.commit().expect("commit should success.");
328+
}
329+
});
330+
let balance = get_balance(*account2.address(), &chain_state);
331+
332+
assert_eq!(balance, 3000);
333+
Ok(())
334+
}

vm/transaction-benchmarks/src/transactions.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ use starcoin_crypto::HashValue;
1111
use std::time::{Instant, SystemTime};
1212

1313
use starcoin_language_e2e_tests::account::AccountData;
14+
use starcoin_language_e2e_tests::common_transactions::duration_since_epoch;
1415
use starcoin_language_e2e_tests::{
1516
account_universe::{log_balance_strategy, AUTransactionGen, AccountUniverseGen},
1617
executor::FakeExecutor,
1718
gas_costs::TXN_RESERVED,
1819
};
19-
use starcoin_language_e2e_tests::common_transactions::duration_since_epoch;
2020

2121
use starcoin_types::{block_metadata::BlockMetadata, transaction::Transaction};
2222

0 commit comments

Comments
 (0)