Skip to content

Commit b867ab0

Browse files
committed
Switch to upstreamed TestStore
1 parent 0bc0760 commit b867ab0

File tree

5 files changed

+40
-122
lines changed

5 files changed

+40
-122
lines changed

src/event.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -797,11 +797,12 @@ where
797797
#[cfg(test)]
798798
mod tests {
799799
use super::*;
800-
use crate::test::utils::{TestLogger, TestStore};
800+
use crate::test::utils::TestLogger;
801+
use lightning::util::test_utils::TestStore;
801802

802803
#[test]
803804
fn event_queue_persistence() {
804-
let store = Arc::new(TestStore::new());
805+
let store = Arc::new(TestStore::new(false));
805806
let logger = Arc::new(TestLogger::new());
806807
let event_queue = EventQueue::new(Arc::clone(&store), Arc::clone(&logger));
807808
assert_eq!(event_queue.next_event(), None);
@@ -812,13 +813,11 @@ mod tests {
812813
counterparty_node_id: None,
813814
};
814815
event_queue.add_event(expected_event.clone()).unwrap();
815-
assert!(store.get_and_clear_did_persist());
816816

817817
// Check we get the expected event and that it is returned until we mark it handled.
818818
for _ in 0..5 {
819819
assert_eq!(event_queue.wait_next_event(), expected_event);
820820
assert_eq!(event_queue.next_event(), Some(expected_event.clone()));
821-
assert_eq!(false, store.get_and_clear_did_persist());
822821
}
823822

824823
// Check we can read back what we persisted.
@@ -832,11 +831,8 @@ mod tests {
832831
let deser_event_queue =
833832
EventQueue::read(&mut &persisted_bytes[..], (Arc::clone(&store), logger)).unwrap();
834833
assert_eq!(deser_event_queue.wait_next_event(), expected_event);
835-
assert!(!store.get_and_clear_did_persist());
836834

837-
// Check we persisted on `event_handled()`
838835
event_queue.event_handled().unwrap();
839-
840-
assert!(store.get_and_clear_did_persist());
836+
assert_eq!(event_queue.next_event(), None);
841837
}
842838
}

src/io/test_utils.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use crate::io::sqlite_store::SqliteStore;
2-
use crate::test::utils::TestStore;
32
use lightning_persister::fs_store::FilesystemStore;
43

54
use lightning::ln::functional_test_utils::{
@@ -10,7 +9,7 @@ use lightning::util::persist::{read_channel_monitors, KVStore, KVSTORE_NAMESPACE
109

1110
use lightning::chain::channelmonitor::CLOSED_CHANNEL_UPDATE_ID;
1211
use lightning::events::ClosureReason;
13-
use lightning::util::test_utils;
12+
use lightning::util::test_utils::{self, TestStore};
1413
use lightning::{check_added_monitors, check_closed_broadcast, check_closed_event};
1514

1615
use std::panic::RefUnwindSafe;
@@ -192,7 +191,7 @@ impl TestSyncStore {
192191
Some("test_sync_table".to_string()),
193192
)
194193
.unwrap();
195-
let test_store = TestStore::new();
194+
let test_store = TestStore::new(false);
196195
Self { fs_store, sqlite_store, test_store }
197196
}
198197
}

src/payment_store.rs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -217,18 +217,28 @@ where
217217
#[cfg(test)]
218218
mod tests {
219219
use super::*;
220-
use crate::test::utils::{TestLogger, TestStore};
220+
use crate::test::utils::TestLogger;
221+
use lightning::util::test_utils::TestStore;
221222
use std::sync::Arc;
222223

223224
#[test]
224225
fn payment_info_is_persisted() {
225-
let store = Arc::new(TestStore::new());
226+
let store = Arc::new(TestStore::new(false));
226227
let logger = Arc::new(TestLogger::new());
227228
let payment_store = PaymentStore::new(Vec::new(), Arc::clone(&store), logger);
228229

229230
let hash = PaymentHash([42u8; 32]);
230231
assert!(!payment_store.get(&hash).is_some());
231232

233+
let store_key = hex_utils::to_string(&hash.0);
234+
assert!(store
235+
.read(
236+
PAYMENT_INFO_PERSISTENCE_NAMESPACE,
237+
PAYMENT_INFO_PERSISTENCE_SUB_NAMESPACE,
238+
&store_key
239+
)
240+
.is_err());
241+
232242
let payment = PaymentDetails {
233243
hash,
234244
preimage: None,
@@ -238,18 +248,23 @@ mod tests {
238248
status: PaymentStatus::Pending,
239249
};
240250

241-
assert!(!store.get_and_clear_did_persist());
242-
243251
assert_eq!(Ok(false), payment_store.insert(payment.clone()));
244-
assert!(store.get_and_clear_did_persist());
252+
assert!(payment_store.get(&hash).is_some());
253+
assert!(store
254+
.read(
255+
PAYMENT_INFO_PERSISTENCE_NAMESPACE,
256+
PAYMENT_INFO_PERSISTENCE_SUB_NAMESPACE,
257+
&store_key
258+
)
259+
.is_ok());
245260

246261
assert_eq!(Ok(true), payment_store.insert(payment));
247-
assert!(store.get_and_clear_did_persist());
262+
assert!(payment_store.get(&hash).is_some());
248263

249264
let mut update = PaymentDetailsUpdate::new(hash);
250265
update.status = Some(PaymentStatus::Succeeded);
251266
assert_eq!(Ok(true), payment_store.update(&update));
252-
assert!(store.get_and_clear_did_persist());
267+
assert!(payment_store.get(&hash).is_some());
253268

254269
assert_eq!(PaymentStatus::Succeeded, payment_store.get(&hash).unwrap().status);
255270
}

src/peer_store.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,16 @@ impl_writeable_tlv_based!(PeerInfo, {
141141
#[cfg(test)]
142142
mod tests {
143143
use super::*;
144-
use crate::test::utils::{TestLogger, TestStore};
144+
use crate::test::utils::TestLogger;
145+
146+
use lightning::util::test_utils::TestStore;
147+
145148
use std::str::FromStr;
146149
use std::sync::Arc;
147150

148151
#[test]
149152
fn peer_info_persistence() {
150-
let store = Arc::new(TestStore::new());
153+
let store = Arc::new(TestStore::new(false));
151154
let logger = Arc::new(TestLogger::new());
152155
let peer_store = PeerStore::new(Arc::clone(&store), Arc::clone(&logger));
153156

@@ -157,8 +160,14 @@ mod tests {
157160
.unwrap();
158161
let address = SocketAddress::from_str("127.0.0.1:9738").unwrap();
159162
let expected_peer_info = PeerInfo { node_id, address };
163+
assert!(store
164+
.read(
165+
PEER_INFO_PERSISTENCE_NAMESPACE,
166+
PEER_INFO_PERSISTENCE_SUB_NAMESPACE,
167+
PEER_INFO_PERSISTENCE_KEY,
168+
)
169+
.is_err());
160170
peer_store.add_peer(expected_peer_info.clone()).unwrap();
161-
assert!(store.get_and_clear_did_persist());
162171

163172
// Check we can read back what we persisted.
164173
let persisted_bytes = store
@@ -175,6 +184,5 @@ mod tests {
175184
assert_eq!(peers.len(), 1);
176185
assert_eq!(peers[0], expected_peer_info);
177186
assert_eq!(deser_peer_store.get_peer(&node_id), Some(expected_peer_info));
178-
assert!(!store.get_and_clear_did_persist());
179187
}
180188
}

src/test/utils.rs

Lines changed: 0 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
use crate::builder::NodeBuilder;
22
use crate::io::test_utils::TestSyncStore;
3-
use crate::io::utils::check_namespace_key_validity;
43
use crate::{Config, Node};
54
use lightning::util::logger::{Level, Logger, Record};
6-
use lightning::util::persist::KVStore;
75

86
use bitcoin::{Address, Amount, Network, OutPoint, Txid};
97

@@ -16,12 +14,9 @@ use regex;
1614

1715
use rand::distributions::Alphanumeric;
1816
use rand::{thread_rng, Rng};
19-
use std::collections::hash_map;
2017
use std::collections::HashMap;
2118
use std::env;
22-
use std::io::{self, Write};
2319
use std::path::PathBuf;
24-
use std::sync::atomic::{AtomicBool, Ordering};
2520
use std::sync::Arc;
2621
use std::sync::Mutex;
2722
use std::time::Duration;
@@ -42,101 +37,6 @@ macro_rules! expect_event {
4237

4338
pub(crate) use expect_event;
4439

45-
pub(crate) struct TestStore {
46-
persisted_bytes: Mutex<HashMap<String, HashMap<String, Vec<u8>>>>,
47-
did_persist: Arc<AtomicBool>,
48-
}
49-
50-
impl TestStore {
51-
pub fn new() -> Self {
52-
let persisted_bytes = Mutex::new(HashMap::new());
53-
let did_persist = Arc::new(AtomicBool::new(false));
54-
55-
Self { persisted_bytes, did_persist }
56-
}
57-
58-
pub fn get_and_clear_did_persist(&self) -> bool {
59-
self.did_persist.swap(false, Ordering::Relaxed)
60-
}
61-
}
62-
63-
impl KVStore for TestStore {
64-
fn read(&self, namespace: &str, sub_namespace: &str, key: &str) -> io::Result<Vec<u8>> {
65-
check_namespace_key_validity(namespace, sub_namespace, Some(key), "read")?;
66-
let persisted_lock = self.persisted_bytes.lock().unwrap();
67-
let prefixed = if sub_namespace.is_empty() {
68-
namespace.to_string()
69-
} else {
70-
format!("{}/{}", namespace, sub_namespace)
71-
};
72-
73-
if let Some(outer_ref) = persisted_lock.get(&prefixed) {
74-
if let Some(inner_ref) = outer_ref.get(key) {
75-
let bytes = inner_ref.clone();
76-
Ok(bytes)
77-
} else {
78-
Err(io::Error::new(io::ErrorKind::NotFound, "Key not found"))
79-
}
80-
} else {
81-
Err(io::Error::new(io::ErrorKind::NotFound, "Namespace not found"))
82-
}
83-
}
84-
85-
fn write(&self, namespace: &str, sub_namespace: &str, key: &str, buf: &[u8]) -> io::Result<()> {
86-
check_namespace_key_validity(namespace, sub_namespace, Some(key), "write")?;
87-
let mut persisted_lock = self.persisted_bytes.lock().unwrap();
88-
89-
let prefixed = if sub_namespace.is_empty() {
90-
namespace.to_string()
91-
} else {
92-
format!("{}/{}", namespace, sub_namespace)
93-
};
94-
let outer_e = persisted_lock.entry(prefixed).or_insert(HashMap::new());
95-
let mut bytes = Vec::new();
96-
bytes.write_all(buf)?;
97-
outer_e.insert(key.to_string(), bytes);
98-
99-
self.did_persist.store(true, Ordering::SeqCst);
100-
101-
Ok(())
102-
}
103-
104-
fn remove(
105-
&self, namespace: &str, sub_namespace: &str, key: &str, _lazy: bool,
106-
) -> io::Result<()> {
107-
check_namespace_key_validity(namespace, sub_namespace, Some(key), "remove")?;
108-
let mut persisted_lock = self.persisted_bytes.lock().unwrap();
109-
110-
let prefixed = if sub_namespace.is_empty() {
111-
namespace.to_string()
112-
} else {
113-
format!("{}/{}", namespace, sub_namespace)
114-
};
115-
if let Some(outer_ref) = persisted_lock.get_mut(&prefixed) {
116-
outer_ref.remove(&key.to_string());
117-
}
118-
119-
self.did_persist.store(true, Ordering::SeqCst);
120-
121-
Ok(())
122-
}
123-
124-
fn list(&self, namespace: &str, sub_namespace: &str) -> io::Result<Vec<String>> {
125-
check_namespace_key_validity(namespace, sub_namespace, None, "list")?;
126-
let mut persisted_lock = self.persisted_bytes.lock().unwrap();
127-
128-
let prefixed = if sub_namespace.is_empty() {
129-
namespace.to_string()
130-
} else {
131-
format!("{}/{}", namespace, sub_namespace)
132-
};
133-
match persisted_lock.entry(prefixed) {
134-
hash_map::Entry::Occupied(e) => Ok(e.get().keys().cloned().collect()),
135-
hash_map::Entry::Vacant(_) => Ok(Vec::new()),
136-
}
137-
}
138-
}
139-
14040
// Copied over from upstream LDK
14141
#[allow(dead_code)]
14242
pub struct TestLogger {

0 commit comments

Comments
 (0)