Skip to content

Commit eccbbad

Browse files
starknet_os_flow_tests: migrate test_os_logic and some small refactors
1 parent f661e8b commit eccbbad

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
@@ -273,6 +273,10 @@ impl<S: FlowTestState> TestManager<S> {
273273
self.per_block_transactions.push(vec![]);
274274
}
275275

276+
pub(crate) fn total_txs(&self) -> usize {
277+
self.per_block_transactions.iter().map(|block| block.len()).sum()
278+
}
279+
276280
fn last_block_txs_mut(&mut self) -> &mut Vec<FlowTestTx> {
277281
self.per_block_transactions
278282
.last_mut()
@@ -441,22 +445,29 @@ impl<S: FlowTestState> TestManager<S> {
441445

442446
/// Verifies all the execution outputs are as expected w.r.t. revert reasons.
443447
fn verify_execution_outputs(
448+
block_index: usize,
444449
revert_reasons: &[Option<String>],
445450
execution_outputs: &[(TransactionExecutionInfo, StateMaps)],
446451
) {
447452
assert_eq!(revert_reasons.len(), execution_outputs.len());
448-
for (revert_reason, (execution_info, _)) in
449-
revert_reasons.iter().zip(execution_outputs.iter())
453+
for ((i, revert_reason), (execution_info, _)) in
454+
revert_reasons.iter().enumerate().zip(execution_outputs.iter())
450455
{
456+
let preamble = format!("Block {block_index}, transaction {i}:");
451457
if let Some(revert_reason) = revert_reason {
452458
let actual_revert_reason =
453459
execution_info.revert_error.as_ref().unwrap().to_string();
454460
assert!(
455461
actual_revert_reason.contains(revert_reason),
456-
"Expected '{revert_reason}' to be in revert string:\n'{actual_revert_reason}'"
462+
"{preamble} Expected '{revert_reason}' to be in revert \
463+
string:\n'{actual_revert_reason}'"
457464
);
458465
} else {
459-
assert!(execution_info.revert_error.is_none());
466+
assert!(
467+
execution_info.revert_error.is_none(),
468+
"{preamble} Expected no revert error, got: {}.",
469+
execution_info.revert_error.as_ref().unwrap()
470+
);
460471
}
461472
}
462473
}
@@ -520,8 +531,8 @@ impl<S: FlowTestState> TestManager<S> {
520531
"use_kzg_da flag in block contexts must match the test parameter."
521532
);
522533
let mut alias_keys = HashSet::new();
523-
for (block_txs_with_reason, block_context) in
524-
per_block_txs.into_iter().zip(block_contexts.into_iter())
534+
for ((block_index, block_txs_with_reason), block_context) in
535+
per_block_txs.into_iter().enumerate().zip(block_contexts.into_iter())
525536
{
526537
let (block_txs, revert_reasons): (Vec<_>, Vec<_>) = block_txs_with_reason
527538
.into_iter()
@@ -532,7 +543,7 @@ impl<S: FlowTestState> TestManager<S> {
532543
// Execute the transactions.
533544
let ExecutionOutput { execution_outputs, block_summary, mut final_state } =
534545
execute_transactions(state, &block_txs, block_context);
535-
Self::verify_execution_outputs(&revert_reasons, &execution_outputs);
546+
Self::verify_execution_outputs(block_index, &revert_reasons, &execution_outputs);
536547
let extended_state_diff = final_state.cache.borrow().extended_state_diff();
537548
// Update the wrapped state.
538549
let state_diff = final_state.to_state_diff().unwrap();

0 commit comments

Comments
 (0)