Made sure that cache did not over write itself.
This commit is contained in:
parent
e49d6f5e46
commit
49b0eaf2ec
@ -99,6 +99,18 @@ impl Cache {
|
|||||||
output
|
output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn next_id(&mut self) -> String {
|
||||||
|
let mut id: String;
|
||||||
|
loop {
|
||||||
|
id = self.ids.next().unwrap();
|
||||||
|
match self.get(&id) {
|
||||||
|
FromCache::Error(_) => break,
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
id
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn listen(&mut self, listener: Receiver<ToCache>) {
|
pub async fn listen(&mut self, listener: Receiver<ToCache>) {
|
||||||
loop {
|
loop {
|
||||||
match listener.recv().await.unwrap() {
|
match listener.recv().await.unwrap() {
|
||||||
@ -132,7 +144,7 @@ impl Cache {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
for name in data.list() {
|
for name in data.list() {
|
||||||
let id = self.ids.next().unwrap();
|
let id = self.next_id();
|
||||||
match store.add_by_id(name, &id) {
|
match store.add_by_id(name, &id) {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
self.data.insert(id, FromCache::DB(Database::new()));
|
self.data.insert(id, FromCache::DB(Database::new()));
|
||||||
@ -244,6 +256,37 @@ mod engine {
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[async_std::test]
|
||||||
|
async fn ids_are_not_overwritten() {
|
||||||
|
let ids = ["first", "first", "second"];
|
||||||
|
let names = ["barney", "fred"];
|
||||||
|
let dir = tempdir().unwrap();
|
||||||
|
let mut cache = Cache::with_ids(dir.path(), ids).await;
|
||||||
|
let mut store1 = Store::new();
|
||||||
|
store1.add(names[0]).unwrap();
|
||||||
|
let mut store2 = Store::new();
|
||||||
|
store2.add(names[1]).unwrap();
|
||||||
|
cache.commit(store1);
|
||||||
|
cache.commit(store2);
|
||||||
|
assert_eq!(
|
||||||
|
cache.data.len(),
|
||||||
|
3,
|
||||||
|
"cache.data had the following entries {:?}",
|
||||||
|
cache.data.keys()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[async_std::test]
|
||||||
|
async fn no_duplicate_ids() {
|
||||||
|
let ids = ["one", "two"];
|
||||||
|
let dir = tempdir().unwrap();
|
||||||
|
let mut cache = Cache::with_ids(dir.path(), ids).await;
|
||||||
|
cache
|
||||||
|
.data
|
||||||
|
.insert(ids[0].to_string(), FromCache::DB(Database::new()));
|
||||||
|
assert_eq!(cache.next_id(), ids[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
Loading…
Reference in New Issue
Block a user