Skip to content

Commit 54669b5

Browse files
starknet_os_flow_tests: migrate test_os_logic and some small refactors
1 parent 40cdcc7 commit 54669b5

File tree

4 files changed

+567
-25
lines changed

4 files changed

+567
-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
@@ -261,6 +261,10 @@ impl<S: FlowTestState> TestManager<S> {
261261
self.per_block_transactions.push(vec![]);
262262
}
263263

264+
pub(crate) fn total_txs(&self) -> usize {
265+
self.per_block_transactions.iter().map(|block| block.len()).sum()
266+
}
267+
264268
fn last_block_txs_mut(&mut self) -> &mut Vec<FlowTestTx> {
265269
self.per_block_transactions
266270
.last_mut()
@@ -429,21 +433,28 @@ impl<S: FlowTestState> TestManager<S> {
429433

430434
/// Verifies all the execution outputs are as expected w.r.t. revert reasons.
431435
fn verify_execution_outputs(
436+
block_index: usize,
432437
revert_reasons: &[Option<String>],
433438
execution_outputs: &[(TransactionExecutionInfo, StateMaps)],
434439
) {
435-
for (revert_reason, (execution_info, _)) in
436-
revert_reasons.iter().zip(execution_outputs.iter())
440+
for ((i, revert_reason), (execution_info, _)) in
441+
revert_reasons.iter().enumerate().zip(execution_outputs.iter())
437442
{
443+
let preamble = format!("Block {block_index}, transaction {i}:");
438444
if let Some(revert_reason) = revert_reason {
439445
let actual_revert_reason =
440446
execution_info.revert_error.as_ref().unwrap().to_string();
441447
assert!(
442448
actual_revert_reason.contains(revert_reason),
443-
"Expected '{revert_reason}' to be in revert string:\n'{actual_revert_reason}'"
449+
"{preamble} Expected '{revert_reason}' to be in revert \
450+
string:\n'{actual_revert_reason}'"
444451
);
445452
} else {
446-
assert!(execution_info.revert_error.is_none());
453+
assert!(
454+
execution_info.revert_error.is_none(),
455+
"{preamble} Expected no revert error, got: {}.",
456+
execution_info.revert_error.as_ref().unwrap()
457+
);
447458
}
448459
}
449460
}
@@ -507,8 +518,8 @@ impl<S: FlowTestState> TestManager<S> {
507518
"use_kzg_da flag in block contexts must match the test parameter."
508519
);
509520
let mut alias_keys = HashSet::new();
510-
for (block_txs_with_reason, block_context) in
511-
per_block_txs.into_iter().zip(block_contexts.into_iter())
521+
for ((block_index, block_txs_with_reason), block_context) in
522+
per_block_txs.into_iter().enumerate().zip(block_contexts.into_iter())
512523
{
513524
// Clone the block info for later use.
514525
let (block_txs, revert_reasons): (Vec<_>, Vec<_>) = block_txs_with_reason
@@ -519,7 +530,7 @@ impl<S: FlowTestState> TestManager<S> {
519530
// Execute the transactions.
520531
let ExecutionOutput { execution_outputs, block_summary, mut final_state } =
521532
execute_transactions(state, &block_txs, block_context);
522-
Self::verify_execution_outputs(&revert_reasons, &execution_outputs);
533+
Self::verify_execution_outputs(block_index, &revert_reasons, &execution_outputs);
523534
let extended_state_diff = final_state.cache.borrow().extended_state_diff();
524535
// Update the wrapped state.
525536
let state_diff = final_state.to_state_diff().unwrap();

0 commit comments

Comments
 (0)