Skip to content

Commit 5f4fc35

Browse files
starknet_os_flow_tests: migrate test_os_logic and some small refactors
1 parent 87b8d4e commit 5f4fc35

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
@@ -276,6 +276,10 @@ impl<S: FlowTestState> TestManager<S> {
276276
self.per_block_transactions.push(vec![]);
277277
}
278278

279+
pub(crate) fn total_txs(&self) -> usize {
280+
self.per_block_transactions.iter().map(|block| block.len()).sum()
281+
}
282+
279283
fn last_block_txs_mut(&mut self) -> &mut Vec<FlowTestTx> {
280284
self.per_block_transactions
281285
.last_mut()
@@ -465,22 +469,29 @@ impl<S: FlowTestState> TestManager<S> {
465469

466470
/// Verifies all the execution outputs are as expected w.r.t. revert reasons.
467471
fn verify_execution_outputs(
472+
block_index: usize,
468473
revert_reasons: &[Option<String>],
469474
execution_outputs: &[(TransactionExecutionInfo, StateMaps)],
470475
) {
471476
assert_eq!(revert_reasons.len(), execution_outputs.len());
472-
for (revert_reason, (execution_info, _)) in
473-
revert_reasons.iter().zip(execution_outputs.iter())
477+
for ((i, revert_reason), (execution_info, _)) in
478+
revert_reasons.iter().enumerate().zip(execution_outputs.iter())
474479
{
480+
let preamble = format!("Block {block_index}, transaction {i}:");
475481
if let Some(revert_reason) = revert_reason {
476482
let actual_revert_reason =
477483
execution_info.revert_error.as_ref().unwrap().to_string();
478484
assert!(
479485
actual_revert_reason.contains(revert_reason),
480-
"Expected '{revert_reason}' to be in revert string:\n'{actual_revert_reason}'"
486+
"{preamble} Expected '{revert_reason}' to be in revert \
487+
string:\n'{actual_revert_reason}'"
481488
);
482489
} else {
483-
assert!(execution_info.revert_error.is_none());
490+
assert!(
491+
execution_info.revert_error.is_none(),
492+
"{preamble} Expected no revert error, got: {}.",
493+
execution_info.revert_error.as_ref().unwrap()
494+
);
484495
}
485496
}
486497
}
@@ -547,8 +558,8 @@ impl<S: FlowTestState> TestManager<S> {
547558
"use_kzg_da flag in block contexts must match the test parameter."
548559
);
549560
let mut alias_keys = HashSet::new();
550-
for (block_txs_with_reason, block_context) in
551-
per_block_txs.into_iter().zip(block_contexts.into_iter())
561+
for ((block_index, block_txs_with_reason), block_context) in
562+
per_block_txs.into_iter().enumerate().zip(block_contexts.into_iter())
552563
{
553564
let (block_txs, revert_reasons): (Vec<_>, Vec<_>) = block_txs_with_reason
554565
.into_iter()
@@ -559,7 +570,7 @@ impl<S: FlowTestState> TestManager<S> {
559570
// Execute the transactions.
560571
let ExecutionOutput { execution_outputs, block_summary, mut final_state } =
561572
execute_transactions(state, &block_txs, block_context);
562-
Self::verify_execution_outputs(&revert_reasons, &execution_outputs);
573+
Self::verify_execution_outputs(block_index, &revert_reasons, &execution_outputs);
563574
let extended_state_diff = final_state.cache.borrow().extended_state_diff();
564575
// Update the wrapped state.
565576
let state_diff = final_state.to_state_diff().unwrap();

0 commit comments

Comments
 (0)