mod util;
use pretty_assertions::assert_eq;
use rust_rocksdb::{CompactionDecision, DB, Options};
use util::DBPath;
#[cfg(test)]
#[allow(unused_variables)]
fn test_filter(level: u32, key: &[u8], value: &[u8]) -> CompactionDecision {
use self::CompactionDecision::*;
match key.first() {
Some(&b'_') => Remove,
Some(&b'%') => Change(b"secret"),
_ => Keep,
}
}
#[test]
fn compaction_filter_test() {
let path = DBPath::new("_rust_rocksdb_filter_test");
let mut opts = Options::default();
opts.create_if_missing(true);
opts.set_compaction_filter("test", test_filter);
let rocksdb_other_dir = tempfile::tempdir().unwrap();
let rocksdb_other = DB::open(&opts, rocksdb_other_dir.path()).unwrap();
{
let db = DB::open(&opts, &path).unwrap();
let _ = db.put(b"k1", b"a");
let _ = db.put(b"_k", b"b");
let _ = db.put(b"%k", b"c");
db.compact_range(None::<&[u8]>, None::<&[u8]>);
assert_eq!(&*db.get(b"k1").unwrap().unwrap(), b"a");
assert!(db.get(b"_k").unwrap().is_none());
assert_eq!(&*db.get(b"%k").unwrap().unwrap(), b"secret");
}
rocksdb_other.put(b"%k", b"c").unwrap();
rocksdb_other.compact_range(None::<&[u8]>, None::<&[u8]>);
assert_eq!(&*rocksdb_other.get(b"%k").unwrap().unwrap(), b"secret");
}