]> git.bitcoin.ninja Git - rust-lightning/blob - lightning-persister/src/test_utils.rs
Add `test_utils`
[rust-lightning] / lightning-persister / src / test_utils.rs
1 use lightning::util::persist::{KVStore, KVSTORE_NAMESPACE_KEY_MAX_LEN};
2
3 use std::panic::RefUnwindSafe;
4
5 pub(crate) fn do_read_write_remove_list_persist<K: KVStore + RefUnwindSafe>(kv_store: &K) {
6         let data = [42u8; 32];
7
8         let namespace = "testspace";
9         let sub_namespace = "testsubspace";
10         let key = "testkey";
11
12         // Test the basic KVStore operations.
13         kv_store.write(namespace, sub_namespace, key, &data).unwrap();
14
15         // Test empty namespace/sub_namespace is allowed, but not empty namespace and non-empty
16         // sub-namespace, and not empty key.
17         kv_store.write("", "", key, &data).unwrap();
18         let res = std::panic::catch_unwind(|| kv_store.write("", sub_namespace, key, &data));
19         assert!(res.is_err());
20         let res = std::panic::catch_unwind(|| kv_store.write(namespace, sub_namespace, "", &data));
21         assert!(res.is_err());
22
23         let listed_keys = kv_store.list(namespace, sub_namespace).unwrap();
24         assert_eq!(listed_keys.len(), 1);
25         assert_eq!(listed_keys[0], key);
26
27         let read_data = kv_store.read(namespace, sub_namespace, key).unwrap();
28         assert_eq!(data, &*read_data);
29
30         kv_store.remove(namespace, sub_namespace, key, false).unwrap();
31
32         let listed_keys = kv_store.list(namespace, sub_namespace).unwrap();
33         assert_eq!(listed_keys.len(), 0);
34
35         // Ensure we have no issue operating with namespace/sub_namespace/key being KVSTORE_NAMESPACE_KEY_MAX_LEN
36         let max_chars: String = std::iter::repeat('A').take(KVSTORE_NAMESPACE_KEY_MAX_LEN).collect();
37         kv_store.write(&max_chars, &max_chars, &max_chars, &data).unwrap();
38
39         let listed_keys = kv_store.list(&max_chars, &max_chars).unwrap();
40         assert_eq!(listed_keys.len(), 1);
41         assert_eq!(listed_keys[0], max_chars);
42
43         let read_data = kv_store.read(&max_chars, &max_chars, &max_chars).unwrap();
44         assert_eq!(data, &*read_data);
45
46         kv_store.remove(&max_chars, &max_chars, &max_chars, false).unwrap();
47
48         let listed_keys = kv_store.list(&max_chars, &max_chars).unwrap();
49         assert_eq!(listed_keys.len(), 0);
50 }