Skip to content

Commit 5243521

Browse files
committed
Switch to upstreamed TestStore
1 parent b70be88 commit 5243521

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
@@ -798,11 +798,12 @@ where
798798
#[cfg(test)]
799799
mod tests {
800800
use super::*;
801-
use crate::test::utils::{TestLogger, TestStore};
801+
use crate::test::utils::TestLogger;
802+
use lightning::util::test_utils::TestStore;
802803

803804
#[test]
804805
fn event_queue_persistence() {
805-
let store = Arc::new(TestStore::new());
806+
let store = Arc::new(TestStore::new(false));
806807
let logger = Arc::new(TestLogger::new());
807808
let event_queue = EventQueue::new(Arc::clone(&store), Arc::clone(&logger));
808809
assert_eq!(event_queue.next_event(), None);
@@ -813,13 +814,11 @@ mod tests {
813814
counterparty_node_id: None,
814815
};
815816
event_queue.add_event(expected_event.clone()).unwrap();
816-
assert!(store.get_and_clear_did_persist());
817817

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

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

838-
// Check we persisted on `event_handled()`
839836
event_queue.event_handled().unwrap();
840-
841-
assert!(store.get_and_clear_did_persist());
837+
assert_eq!(event_queue.next_event(), None);
842838
}
843839
}

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;
@@ -195,7 +194,7 @@ impl TestSyncStore {
195194
Some("test_sync_table".to_string()),
196195
)
197196
.unwrap();
198-
let test_store = TestStore::new();
197+
let test_store = TestStore::new(false);
199198
Self { serializer, fs_store, sqlite_store, test_store }
200199
}
201200

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
@@ -142,13 +142,16 @@ impl_writeable_tlv_based!(PeerInfo, {
142142
#[cfg(test)]
143143
mod tests {
144144
use super::*;
145-
use crate::test::utils::{TestLogger, TestStore};
145+
use crate::test::utils::TestLogger;
146+
147+
use lightning::util::test_utils::TestStore;
148+
146149
use std::str::FromStr;
147150
use std::sync::Arc;
148151

149152
#[test]
150153
fn peer_info_persistence() {
151-
let store = Arc::new(TestStore::new());
154+
let store = Arc::new(TestStore::new(false));
152155
let logger = Arc::new(TestLogger::new());
153156
let peer_store = PeerStore::new(Arc::clone(&store), Arc::clone(&logger));
154157

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

164173
// Check we can read back what we persisted.
165174
let persisted_bytes = store
@@ -176,6 +185,5 @@ mod tests {
176185
assert_eq!(peers.len(), 1);
177186
assert_eq!(peers[0], expected_peer_info);
178187
assert_eq!(deser_peer_store.get_peer(&node_id), Some(expected_peer_info));
179-
assert!(!store.get_and_clear_did_persist());
180188
}
181189
}

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)