use rocksdb::WriteBatch; use rpki::storage::{FetchCachePpKey, RocksStore}; #[test] fn storage_delete_rrdp_state_works() { let temp = tempfile::tempdir().expect("tempdir"); let store = RocksStore::open(temp.path()).expect("open rocksdb"); store .put_rrdp_state("https://example.net/rrdp/notification.xml", b"state") .expect("put state"); assert_eq!( store .get_rrdp_state("https://example.net/rrdp/notification.xml") .unwrap() .unwrap(), b"state" ); store .delete_rrdp_state("https://example.net/rrdp/notification.xml") .expect("delete state"); assert!( store .get_rrdp_state("https://example.net/rrdp/notification.xml") .unwrap() .is_none() ); } #[test] fn storage_raw_iter_prefix_filters_by_prefix() { let temp = tempfile::tempdir().expect("tempdir"); let store = RocksStore::open(temp.path()).expect("open rocksdb"); store .put_raw("rsync://example.net/repo/a/1.cer", b"1") .unwrap(); store .put_raw("rsync://example.net/repo/a/2.cer", b"2") .unwrap(); store .put_raw("rsync://example.net/repo/b/1.cer", b"3") .unwrap(); let prefix = b"rsync://example.net/repo/a/"; let items = store .raw_iter_prefix(prefix) .expect("iter") .map(|(k, v)| (String::from_utf8_lossy(&k).to_string(), v.to_vec())) .collect::>(); assert_eq!(items.len(), 2); for (k, _v) in &items { assert!(k.starts_with("rsync://example.net/repo/a/")); } } #[test] fn storage_fetch_cache_pp_key_format_is_stable() { let k = FetchCachePpKey::from_manifest_rsync_uri("rsync://example.net/repo/manifest.mft"); assert_eq!( k.as_str(), "fetch_cache_pp:rsync://example.net/repo/manifest.mft" ); } #[test] fn storage_write_batch_accepts_empty_batch() { let temp = tempfile::tempdir().expect("tempdir"); let store = RocksStore::open(temp.path()).expect("open rocksdb"); store .write_batch(WriteBatch::default()) .expect("write batch"); }