-
Notifications
You must be signed in to change notification settings - Fork 77
Open
Description
in my project, i modified the helpers in setup.rs to something like this
pub fn send_transaction(
&mut self,
instruction: Instruction,
signers: &[&Keypair],
) -> Result<u64, Box<dyn std::error::Error>> {
match self.send_transaction_inner(instruction, signers) {
Ok((cu, logs)) => {
if std::env::var("TX_LOGS").is_ok() {
println!("[TX OK] logs:\n{}", logs.join("\n"));
}
Ok(cu)
}
Err((err, logs)) => {
if std::env::var("TX_LOGS").is_ok() {
println!("[TX ERR] logs:\n{}", logs.join("\n"));
}
Err(format!("Transaction failed: {:?}", err).into())
}
}
}
pub fn send_transaction_expect_error(
&mut self,
instruction: Instruction,
signers: &[&Keypair],
) -> TransactionError {
match self.send_transaction_inner(instruction, signers) {
Ok((_, logs)) => {
if std::env::var("TX_LOGS").is_ok() {
println!("[TX OK - unexpected] logs:\n{}", logs.join("\n"));
}
panic!("Transaction should fail");
}
Err((err, logs)) => {
if std::env::var("TX_LOGS").is_ok() {
println!("[TX ERR] logs:\n{}", logs.join("\n"));
}
err
}
}
}
fn send_transaction_inner(
&mut self,
instruction: Instruction,
signers: &[&Keypair],
) -> Result<(u64, Vec<String>), (TransactionError, Vec<String>)> {
let mut all_signers = vec![&self.payer as &dyn Signer];
all_signers.extend(signers.iter().map(|k| *k as &dyn Signer));
let transaction = Transaction::new_signed_with_payer(
&[instruction],
Some(&self.payer.pubkey()),
&all_signers,
self.svm.latest_blockhash(),
);
match self.svm.send_transaction(transaction) {
Ok(meta) => Ok((meta.compute_units_consumed, meta.logs)),
Err(failed) => Err((failed.err, failed.meta.logs)),
}
}So i can be able to print logs to the terminal when i test my code, and not just test passing cases, so i run
TX_LOGS=1 cargo test test_name -- --nocapture
and i get tx logs
running 1 test
[TX OK] logs:
Program 11111111111111111111111111111111 invoke [1]
Program 11111111111111111111111111111111 success
[TX OK] logs:
Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [1]
Program log: Instruction: InitializeMint
Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2920 of 200000 compute units
Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success
[TX OK] logs:
Program 11111111111111111111111111111111 invoke [1]
Program 11111111111111111111111111111111 success
[TX OK] logs:
it will be great to incorporate something like this, its really helpful
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels