Skip to content

Commit 012bb7a

Browse files
committed
Implement KVStore for TestStore
We implement the async `KVStore` trait for `TestStore`. This is mostly useful in LDK Node tests, where we use `TestStore` and we now require all stores to implement both variants.
1 parent 828e10d commit 012bb7a

File tree

2 files changed

+60
-34
lines changed

2 files changed

+60
-34
lines changed

lightning/src/util/persist.rs

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,14 +1257,13 @@ mod tests {
12571257

12581258
let monitor_name = mon.persistence_key();
12591259
assert_eq!(
1260-
persister_0
1261-
.kv_store
1262-
.list(
1263-
CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE,
1264-
&monitor_name.to_string()
1265-
)
1266-
.unwrap()
1267-
.len() as u64,
1260+
KVStoreSync::list(
1261+
&*persister_0.kv_store,
1262+
CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE,
1263+
&monitor_name.to_string()
1264+
)
1265+
.unwrap()
1266+
.len() as u64,
12681267
mon.get_latest_update_id() % persister_0_max_pending_updates,
12691268
"Wrong number of updates stored in persister 0",
12701269
);
@@ -1276,14 +1275,13 @@ mod tests {
12761275
assert_eq!(mon.get_latest_update_id(), $expected_update_id);
12771276
let monitor_name = mon.persistence_key();
12781277
assert_eq!(
1279-
persister_1
1280-
.kv_store
1281-
.list(
1282-
CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE,
1283-
&monitor_name.to_string()
1284-
)
1285-
.unwrap()
1286-
.len() as u64,
1278+
KVStoreSync::list(
1279+
&*persister_1.kv_store,
1280+
CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE,
1281+
&monitor_name.to_string()
1282+
)
1283+
.unwrap()
1284+
.len() as u64,
12871285
mon.get_latest_update_id() % persister_1_max_pending_updates,
12881286
"Wrong number of updates stored in persister 1",
12891287
);
@@ -1481,28 +1479,26 @@ mod tests {
14811479
let persisted_chan_data = persister_0.read_all_channel_monitors_with_updates().unwrap();
14821480
let (_, monitor) = &persisted_chan_data[0];
14831481
let monitor_name = monitor.persistence_key();
1484-
persister_0
1485-
.kv_store
1486-
.write(
1487-
CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE,
1488-
&monitor_name.to_string(),
1489-
UpdateName::from(1).as_str(),
1490-
vec![0u8; 1],
1491-
)
1492-
.unwrap();
1482+
KVStoreSync::write(
1483+
&*persister_0.kv_store,
1484+
CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE,
1485+
&monitor_name.to_string(),
1486+
UpdateName::from(1).as_str(),
1487+
vec![0u8; 1],
1488+
)
1489+
.unwrap();
14931490

14941491
// Do the stale update cleanup
14951492
persister_0.cleanup_stale_updates(false).unwrap();
14961493

14971494
// Confirm the stale update is unreadable/gone
1498-
assert!(persister_0
1499-
.kv_store
1500-
.read(
1501-
CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE,
1502-
&monitor_name.to_string(),
1503-
UpdateName::from(1).as_str()
1504-
)
1505-
.is_err());
1495+
assert!(KVStoreSync::read(
1496+
&*persister_0.kv_store,
1497+
CHANNEL_MONITOR_UPDATE_PERSISTENCE_PRIMARY_NAMESPACE,
1498+
&monitor_name.to_string(),
1499+
UpdateName::from(1).as_str()
1500+
)
1501+
.is_err());
15061502
}
15071503

15081504
fn persist_fn<P: Deref, ChannelSigner: EcdsaChannelSigner>(_persist: P) -> bool

lightning/src/util/test_utils.rs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ use crate::util::dyn_signer::{
5757
use crate::util::logger::{Logger, Record};
5858
#[cfg(feature = "std")]
5959
use crate::util::mut_global::MutGlobal;
60-
use crate::util::persist::{KVStoreSync, MonitorName};
60+
use crate::util::persist::{KVStore, KVStoreSync, MonitorName};
6161
use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer};
6262
use crate::util::test_channel_signer::{EnforcementState, TestChannelSigner};
6363

@@ -84,7 +84,10 @@ use crate::io;
8484
use crate::prelude::*;
8585
use crate::sign::{EntropySource, NodeSigner, RandomBytes, Recipient, SignerProvider};
8686
use crate::sync::{Arc, Mutex};
87+
use alloc::boxed::Box;
88+
use core::future::Future;
8789
use core::mem;
90+
use core::pin::Pin;
8891
use core::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
8992
use core::time::Duration;
9093

@@ -950,6 +953,33 @@ impl TestStore {
950953
}
951954
}
952955

956+
impl KVStore for TestStore {
957+
fn read(
958+
&self, primary_namespace: &str, secondary_namespace: &str, key: &str,
959+
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, io::Error>> + 'static + Send>> {
960+
let res = self.read_internal(&primary_namespace, &secondary_namespace, &key);
961+
Box::pin(async move { res })
962+
}
963+
fn write(
964+
&self, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: Vec<u8>,
965+
) -> Pin<Box<dyn Future<Output = Result<(), io::Error>> + 'static + Send>> {
966+
let res = self.write_internal(&primary_namespace, &secondary_namespace, &key, buf);
967+
Box::pin(async move { res })
968+
}
969+
fn remove(
970+
&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool,
971+
) -> Pin<Box<dyn Future<Output = Result<(), io::Error>> + 'static + Send>> {
972+
let res = self.remove_internal(&primary_namespace, &secondary_namespace, &key, lazy);
973+
Box::pin(async move { res })
974+
}
975+
fn list(
976+
&self, primary_namespace: &str, secondary_namespace: &str,
977+
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, io::Error>> + 'static + Send>> {
978+
let res = self.list_internal(primary_namespace, secondary_namespace);
979+
Box::pin(async move { res })
980+
}
981+
}
982+
953983
impl KVStoreSync for TestStore {
954984
fn read(
955985
&self, primary_namespace: &str, secondary_namespace: &str, key: &str,

0 commit comments

Comments
 (0)