Skip to content

Commit 4224986

Browse files
committed
test: unit test for log event stream
1 parent 3943601 commit 4224986

File tree

3 files changed

+71
-2
lines changed

3 files changed

+71
-2
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

timeboost-contract/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ alloy = { workspace = true }
1818
anyhow = { workspace = true }
1919
bincode = { workspace = true }
2020
clap = { workspace = true }
21+
futures = { workspace = true }
2122
rand = { workspace = true }
2223
serde = { workspace = true }
2324
timeboost-config = { path = "../timeboost-config" }

timeboost-contract/src/deployer.rs

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,17 @@ where
4848

4949
#[cfg(test)]
5050
mod tests {
51-
use crate::{CommitteeMemberSol, CommitteeSol, KeyManager};
52-
use alloy::{providers::WalletProvider, sol_types::SolValue};
51+
use super::deploy_key_manager_contract;
52+
use crate::{CommitteeMemberSol, CommitteeSol, KeyManager, KeyManager::CommitteeCreated};
53+
use alloy::{
54+
eips::BlockNumberOrTag,
55+
node_bindings::Anvil,
56+
providers::{Provider, ProviderBuilder, WalletProvider},
57+
rpc::types::Filter,
58+
sol_types::{SolEvent, SolValue},
59+
transports::ws::WsConnect,
60+
};
61+
use futures::StreamExt;
5362
use rand::prelude::*;
5463

5564
#[tokio::test]
@@ -93,4 +102,62 @@ mod tests {
93102
.abi_encode_sequence()
94103
);
95104
}
105+
106+
#[tokio::test]
107+
async fn test_event_stream() {
108+
let anvil = Anvil::new().spawn();
109+
let wallet = anvil.wallet().unwrap();
110+
let provider = ProviderBuilder::new()
111+
.wallet(wallet)
112+
.connect_http(anvil.endpoint_url());
113+
let pubsub_provider = ProviderBuilder::new()
114+
.connect_pubsub_with(WsConnect::new(anvil.ws_endpoint_url()))
115+
.await
116+
.unwrap();
117+
assert_eq!(
118+
pubsub_provider.get_chain_id().await.unwrap(),
119+
provider.get_chain_id().await.unwrap()
120+
);
121+
122+
let manager = provider.default_signer_address();
123+
let km_addr = deploy_key_manager_contract(&provider, manager)
124+
.await
125+
.unwrap();
126+
let contract = KeyManager::new(km_addr, &provider);
127+
128+
// setup event stream
129+
let filter = Filter::new()
130+
.address(km_addr)
131+
.event(KeyManager::CommitteeCreated::SIGNATURE)
132+
.from_block(BlockNumberOrTag::Latest);
133+
let mut events = pubsub_provider
134+
.subscribe_logs(&filter)
135+
.await
136+
.unwrap()
137+
.into_stream();
138+
139+
// register some committees on the contract, which emit events
140+
let rng = &mut rand::rng();
141+
let c0_timestamp = rng.random::<u64>();
142+
for i in 0..5 {
143+
let members = (0..5)
144+
.map(|_| CommitteeMemberSol::random())
145+
.collect::<Vec<_>>();
146+
let timestamp = c0_timestamp + 1000 * i;
147+
148+
let _tx_receipt = contract
149+
.setNextCommittee(timestamp, members.clone())
150+
.send()
151+
.await
152+
.unwrap()
153+
.get_receipt()
154+
.await
155+
.unwrap();
156+
157+
// Read the corresponding event
158+
let log = events.next().await.unwrap();
159+
let typed_log = log.log_decode_validate::<CommitteeCreated>().unwrap();
160+
assert_eq!(typed_log.data().id, i);
161+
}
162+
}
96163
}

0 commit comments

Comments
 (0)