Skip to content

Commit 444f408

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 11bb732 commit 444f408

File tree

2 files changed

+75
-34
lines changed

2 files changed

+75
-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: 46 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

@@ -864,6 +867,48 @@ impl TestStore {
864867
}
865868
}
866869

870+
impl KVStore for TestStore {
871+
fn read(
872+
&self, primary_namespace: &str, secondary_namespace: &str, key: &str,
873+
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, io::Error>> + 'static + Send>> {
874+
let primary_namespace = primary_namespace.to_string();
875+
let secondary_namespace = secondary_namespace.to_string();
876+
let key = key.to_string();
877+
let inner = Arc::clone(&self.inner);
878+
Box::pin(async move { inner.read_internal(&primary_namespace, &secondary_namespace, &key) })
879+
}
880+
fn write(
881+
&self, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: Vec<u8>,
882+
) -> Pin<Box<dyn Future<Output = Result<(), io::Error>> + 'static + Send>> {
883+
let primary_namespace = primary_namespace.to_string();
884+
let secondary_namespace = secondary_namespace.to_string();
885+
let key = key.to_string();
886+
let inner = Arc::clone(&self.inner);
887+
Box::pin(async move {
888+
inner.write_internal(&primary_namespace, &secondary_namespace, &key, buf)
889+
})
890+
}
891+
fn remove(
892+
&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool,
893+
) -> Pin<Box<dyn Future<Output = Result<(), io::Error>> + 'static + Send>> {
894+
let primary_namespace = primary_namespace.to_string();
895+
let secondary_namespace = secondary_namespace.to_string();
896+
let key = key.to_string();
897+
let inner = Arc::clone(&self.inner);
898+
Box::pin(async move {
899+
inner.remove_internal(&primary_namespace, &secondary_namespace, &key, lazy)
900+
})
901+
}
902+
fn list(
903+
&self, primary_namespace: &str, secondary_namespace: &str,
904+
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, io::Error>> + 'static + Send>> {
905+
let primary_namespace = primary_namespace.to_string();
906+
let secondary_namespace = secondary_namespace.to_string();
907+
let inner = Arc::clone(&self.inner);
908+
Box::pin(async move { inner.list_internal(&primary_namespace, &secondary_namespace) })
909+
}
910+
}
911+
867912
impl KVStoreSync for TestStore {
868913
fn read(
869914
&self, primary_namespace: &str, secondary_namespace: &str, key: &str,

0 commit comments

Comments
 (0)