Skip to content

Commit 3de0895

Browse files
starknet_os_flow_tests: migrate test_os_logic and some small refactors
1 parent a010edf commit 3de0895

File tree

4 files changed

+471
-25
lines changed

4 files changed

+471
-25
lines changed

crates/starknet_os/src/io/os_output.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,12 @@ pub fn message_l1_from_output_iter<It: Iterator<Item = Felt>>(
111111
// An L1 to L2 message header, the message payload is concatenated to the end of the header.
112112
pub struct MessageToL2 {
113113
// The L1 address of the contract sending the message.
114-
pub(crate) from_address: EthAddress,
114+
pub from_address: EthAddress,
115115
// The L2 address of the contract receiving the message.
116-
pub(crate) to_address: ContractAddress,
117-
pub(crate) nonce: Nonce,
118-
pub(crate) selector: EntryPointSelector,
119-
pub(crate) payload: L1ToL2Payload,
116+
pub to_address: ContractAddress,
117+
pub nonce: Nonce,
118+
pub selector: EntryPointSelector,
119+
pub payload: L1ToL2Payload,
120120
}
121121

122122
impl TryFromOutputIter for MessageToL2 {

crates/starknet_os_flow_tests/src/initial_state.rs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,28 @@ pub(crate) fn get_deploy_contract_tx_and_address(
299299
nonce: Nonce,
300300
resource_bounds: ValidResourceBounds,
301301
) -> (Transaction, ContractAddress) {
302-
let contract_address_salt = Felt::ONE;
302+
let (deploy_contract_tx, contract_address) = get_deploy_contract_tx_and_address_with_salt(
303+
class_hash,
304+
ctor_calldata,
305+
nonce,
306+
resource_bounds,
307+
Felt::ONE,
308+
);
309+
(
310+
Transaction::new_for_sequencing(StarknetAPITransaction::Account(
311+
AccountTransaction::Invoke(deploy_contract_tx),
312+
)),
313+
contract_address,
314+
)
315+
}
316+
317+
pub(crate) fn get_deploy_contract_tx_and_address_with_salt(
318+
class_hash: ClassHash,
319+
ctor_calldata: Calldata,
320+
nonce: Nonce,
321+
resource_bounds: ValidResourceBounds,
322+
contract_address_salt: Felt,
323+
) -> (InvokeTransaction, ContractAddress) {
303324
let calldata = [class_hash.0, contract_address_salt, ctor_calldata.0.len().into()]
304325
.iter()
305326
.chain(ctor_calldata.0.iter())
@@ -329,12 +350,7 @@ pub(crate) fn get_deploy_contract_tx_and_address(
329350
*FUNDED_ACCOUNT_ADDRESS,
330351
)
331352
.unwrap();
332-
(
333-
Transaction::new_for_sequencing(StarknetAPITransaction::Account(
334-
AccountTransaction::Invoke(deploy_contract_tx),
335-
)),
336-
contract_address,
337-
)
353+
(deploy_contract_tx, contract_address)
338354
}
339355

340356
pub(crate) fn get_deploy_fee_token_tx_and_address(nonce: Nonce) -> (Transaction, ContractAddress) {

crates/starknet_os_flow_tests/src/test_manager.rs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,10 @@ impl<S: FlowTestState> TestManager<S> {
282282
self.per_block_transactions.push(vec![]);
283283
}
284284

285+
pub(crate) fn total_txs(&self) -> usize {
286+
self.per_block_transactions.iter().map(|block| block.len()).sum()
287+
}
288+
285289
fn last_block_txs_mut(&mut self) -> &mut Vec<FlowTestTx> {
286290
self.per_block_transactions
287291
.last_mut()
@@ -471,22 +475,29 @@ impl<S: FlowTestState> TestManager<S> {
471475

472476
/// Verifies all the execution outputs are as expected w.r.t. revert reasons.
473477
fn verify_execution_outputs(
478+
block_index: usize,
474479
revert_reasons: &[Option<String>],
475480
execution_outputs: &[(TransactionExecutionInfo, StateMaps)],
476481
) {
477482
assert_eq!(revert_reasons.len(), execution_outputs.len());
478-
for (revert_reason, (execution_info, _)) in
479-
revert_reasons.iter().zip(execution_outputs.iter())
483+
for ((i, revert_reason), (execution_info, _)) in
484+
revert_reasons.iter().enumerate().zip(execution_outputs.iter())
480485
{
486+
let preamble = format!("Block {block_index}, transaction {i}:");
481487
if let Some(revert_reason) = revert_reason {
482488
let actual_revert_reason =
483489
execution_info.revert_error.as_ref().unwrap().to_string();
484490
assert!(
485491
actual_revert_reason.contains(revert_reason),
486-
"Expected '{revert_reason}' to be in revert string:\n'{actual_revert_reason}'"
492+
"{preamble} Expected '{revert_reason}' to be in revert \
493+
string:\n'{actual_revert_reason}'"
487494
);
488495
} else {
489-
assert!(execution_info.revert_error.is_none());
496+
assert!(
497+
execution_info.revert_error.is_none(),
498+
"{preamble} Expected no revert error, got: {}.",
499+
execution_info.revert_error.as_ref().unwrap()
500+
);
490501
}
491502
}
492503
}
@@ -553,8 +564,8 @@ impl<S: FlowTestState> TestManager<S> {
553564
"use_kzg_da flag in block contexts must match the test parameter."
554565
);
555566
let mut alias_keys = HashSet::new();
556-
for (block_txs_with_reason, block_context) in
557-
per_block_txs.into_iter().zip(block_contexts.into_iter())
567+
for ((block_index, block_txs_with_reason), block_context) in
568+
per_block_txs.into_iter().enumerate().zip(block_contexts.into_iter())
558569
{
559570
let (block_txs, revert_reasons): (Vec<_>, Vec<_>) = block_txs_with_reason
560571
.into_iter()
@@ -565,7 +576,7 @@ impl<S: FlowTestState> TestManager<S> {
565576
// Execute the transactions.
566577
let ExecutionOutput { execution_outputs, block_summary, mut final_state } =
567578
execute_transactions(state, &block_txs, block_context);
568-
Self::verify_execution_outputs(&revert_reasons, &execution_outputs);
579+
Self::verify_execution_outputs(block_index, &revert_reasons, &execution_outputs);
569580
let extended_state_diff = final_state.cache.borrow().extended_state_diff();
570581
// Update the wrapped state.
571582
let state_diff = final_state.to_state_diff().unwrap();

0 commit comments

Comments
 (0)