From 5536e04e1fc97ca761bb7ddea3b1ed830b342f99 Mon Sep 17 00:00:00 2001 From: Roman Maslennikov Date: Wed, 18 Sep 2024 20:47:41 +0400 Subject: [PATCH] feat(gtest): add self-sent delayed message test (#4240) --- Cargo.lock | 1 + examples/delayed-sender/src/wasm.rs | 19 +++++++++++++++++++ gtest/Cargo.toml | 1 + gtest/src/program.rs | 28 +++++++++++++++++++++++++++- 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index ac18442b9a2..1de88b5aea0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7490,6 +7490,7 @@ dependencies = [ "colored", "demo-constructor", "demo-custom", + "demo-delayed-sender", "demo-futures-unordered", "demo-piggy-bank", "demo-ping", diff --git a/examples/delayed-sender/src/wasm.rs b/examples/delayed-sender/src/wasm.rs index 16e8a6a1b66..ca582ff90c2 100644 --- a/examples/delayed-sender/src/wasm.rs +++ b/examples/delayed-sender/src/wasm.rs @@ -22,8 +22,23 @@ use gstd::{exec, msg, MessageId}; static mut MID: Option = None; static mut DONE: bool = false; +fn send_delayed_to_self() -> bool { + let to_self = msg::load_bytes().unwrap().as_slice() == b"self"; + if to_self { + gstd::debug!("sending delayed message to self"); + msg::send_bytes_delayed(exec::program_id(), b"self", 0, DELAY).unwrap(); + } + + to_self +} + #[no_mangle] extern "C" fn init() { + // Send message to self + if send_delayed_to_self() { + return; + } + let delay: u32 = msg::load().unwrap(); msg::send_bytes_delayed(msg::source(), "Delayed hello!", 0, delay).unwrap(); @@ -31,6 +46,10 @@ extern "C" fn init() { #[no_mangle] extern "C" fn handle() { + if send_delayed_to_self() { + return; + } + let size = msg::size(); if size == 0 { diff --git a/gtest/Cargo.toml b/gtest/Cargo.toml index 759ff6c922e..d73e7732708 100644 --- a/gtest/Cargo.toml +++ b/gtest/Cargo.toml @@ -40,3 +40,4 @@ demo-piggy-bank.workspace = true demo-ping.workspace = true demo-futures-unordered.workspace = true demo-constructor = { workspace = true, features = ["std"] } +demo-delayed-sender.workspace = true diff --git a/gtest/src/program.rs b/gtest/src/program.rs index f700b351529..79bab5b7a98 100644 --- a/gtest/src/program.rs +++ b/gtest/src/program.rs @@ -1484,7 +1484,7 @@ mod tests { #[test] fn tests_unused_gas_value_not_transferred() { let sys = System::new(); - sys.init_verbose_logger(); + sys.init_logger(); let user = 42; sys.mint_to(user, 2 * EXISTENTIAL_DEPOSIT); @@ -1497,4 +1497,30 @@ mod tests { // lower than ED assert_eq!(sys.balance_of(user), 0) } + + #[test] + fn tests_self_sent_delayed_message() { + use demo_delayed_sender::DELAY; + + let sys = System::new(); + sys.init_logger(); + + let user = DEFAULT_USER_ALICE; + let program_id = 69; + + let prog = Program::from_binary_with_id(&sys, program_id, demo_delayed_sender::WASM_BINARY); + + // Init message starts sequence of self-sent messages + prog.send_bytes(user, "self".as_bytes()); + let res = sys.run_next_block(); + assert_eq!(res.succeed.len(), 1); + + let mut target_block_nb = sys.block_height() + DELAY; + let res = sys.run_to_block(target_block_nb); + assert_eq!(res.iter().last().unwrap().succeed.len(), 1); + + target_block_nb += DELAY; + let res = sys.run_to_block(target_block_nb); + assert_eq!(res.iter().last().unwrap().succeed.len(), 1); + } }