Skip to content

Commit 1566dcb

Browse files
committed
Add basic testing of EventQueue
1 parent 799df1e commit 1566dcb

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

src/event.rs

+28-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ pub(crate) const EVENTS_PERSISTENCE_KEY: &str = "events";
3232
/// An event emitted by [`LdkLite`] that should be handled by the user.
3333
///
3434
/// [`LdkLite`]: [`crate::LdkLite`]
35-
#[derive(Debug, Clone)]
36-
pub enum LdkLiteEvent {
35+
#[derive(Debug, Clone, PartialEq)]
36+
pub enum Event {
3737
/// A payment we sent was successful.
3838
PaymentSuccessful {
3939
/// The hash of the payment.
@@ -564,3 +564,29 @@ impl LdkEventHandler for LdkLiteEventHandler {
564564
}
565565
}
566566
}
567+
568+
#[cfg(test)]
569+
mod tests {
570+
use super::*;
571+
use crate::test_utils::TestPersister;
572+
573+
#[test]
574+
fn event_queue_persistence() {
575+
let test_persister = Arc::new(TestPersister::new());
576+
let event_queue = EventQueue::new(Arc::clone(&test_persister));
577+
578+
let expected_event = Event::ChannelReady { channel_id: [23u8; 32], user_channel_id: 2323 };
579+
event_queue.add_event(expected_event.clone()).unwrap();
580+
assert!(test_persister.get_and_clear_pending_persist());
581+
582+
// Check we get the expected event and that it is returned until we mark it handled.
583+
for _ in 0..5 {
584+
assert_eq!(event_queue.next_event(), expected_event);
585+
assert_eq!(false, test_persister.get_and_clear_pending_persist());
586+
}
587+
588+
// Check we persisted on `event_handled()`
589+
event_queue.event_handled().unwrap();
590+
assert!(test_persister.get_and_clear_pending_persist());
591+
}
592+
}

src/test_utils.rs

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
use lightning::util::persist::KVStorePersister;
2+
use lightning::util::ser::Writeable;
3+
4+
use std::sync::atomic::{AtomicBool, Ordering};
5+
6+
pub(crate) struct TestPersister {
7+
pending_persist: AtomicBool,
8+
}
9+
10+
impl TestPersister {
11+
pub fn new() -> Self {
12+
let pending_persist = AtomicBool::new(false);
13+
Self { pending_persist }
14+
}
15+
16+
pub fn get_and_clear_pending_persist(&self) -> bool {
17+
self.pending_persist.swap(false, Ordering::SeqCst)
18+
}
19+
}
20+
21+
impl KVStorePersister for TestPersister {
22+
fn persist<W: Writeable>(&self, _key: &str, _object: &W) -> std::io::Result<()> {
23+
self.pending_persist.store(true, Ordering::SeqCst);
24+
Ok(())
25+
}
26+
}

0 commit comments

Comments
 (0)