Skip to content

Commit da2f80a

Browse files
starknet_os_flow_tests: migrate test_os_logic and some small refactors
1 parent d3699d4 commit da2f80a

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()
@@ -445,22 +449,29 @@ impl<S: FlowTestState> TestManager<S> {
445449

446450
/// Verifies all the execution outputs are as expected w.r.t. revert reasons.
447451
fn verify_execution_outputs(
452+
block_index: usize,
448453
revert_reasons: &[Option<String>],
449454
execution_outputs: &[(TransactionExecutionInfo, StateMaps)],
450455
) {
451456
assert_eq!(revert_reasons.len(), execution_outputs.len());
452-
for (revert_reason, (execution_info, _)) in
453-
revert_reasons.iter().zip(execution_outputs.iter())
457+
for ((i, revert_reason), (execution_info, _)) in
458+
revert_reasons.iter().enumerate().zip(execution_outputs.iter())
454459
{
460+
let preamble = format!("Block {block_index}, transaction {i}:");
455461
if let Some(revert_reason) = revert_reason {
456462
let actual_revert_reason =
457463
execution_info.revert_error.as_ref().unwrap().to_string();
458464
assert!(
459465
actual_revert_reason.contains(revert_reason),
460-
"Expected '{revert_reason}' to be in revert string:\n'{actual_revert_reason}'"
466+
"{preamble} Expected '{revert_reason}' to be in revert \
467+
string:\n'{actual_revert_reason}'"
461468
);
462469
} else {
463-
assert!(execution_info.revert_error.is_none());
470+
assert!(
471+
execution_info.revert_error.is_none(),
472+
"{preamble} Expected no revert error, got: {}.",
473+
execution_info.revert_error.as_ref().unwrap()
474+
);
464475
}
465476
}
466477
}
@@ -524,8 +535,8 @@ impl<S: FlowTestState> TestManager<S> {
524535
"use_kzg_da flag in block contexts must match the test parameter."
525536
);
526537
let mut alias_keys = HashSet::new();
527-
for (block_txs_with_reason, block_context) in
528-
per_block_txs.into_iter().zip(block_contexts.into_iter())
538+
for ((block_index, block_txs_with_reason), block_context) in
539+
per_block_txs.into_iter().enumerate().zip(block_contexts.into_iter())
529540
{
530541
let (block_txs, revert_reasons): (Vec<_>, Vec<_>) = block_txs_with_reason
531542
.into_iter()
@@ -536,7 +547,7 @@ impl<S: FlowTestState> TestManager<S> {
536547
// Execute the transactions.
537548
let ExecutionOutput { execution_outputs, block_summary, mut final_state } =
538549
execute_transactions(state, &block_txs, block_context);
539-
Self::verify_execution_outputs(&revert_reasons, &execution_outputs);
550+
Self::verify_execution_outputs(block_index, &revert_reasons, &execution_outputs);
540551
let extended_state_diff = final_state.cache.borrow().extended_state_diff();
541552
// Update the wrapped state.
542553
let state_diff = final_state.to_state_diff().unwrap();

0 commit comments

Comments
 (0)