Get cache updates time.
This commit is contained in:
parent
56005a5e47
commit
fe29841ffe
@ -139,13 +139,17 @@ impl MoreThanText {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn get_entry(&self, id: &str) -> Result<CacheEntry, DBError> {
|
async fn get_entry(&self, id: &str) -> Result<CacheEntry, DBError> {
|
||||||
let cache = self.cache.lock().await;
|
let mut cache = self.cache.lock().await;
|
||||||
match cache.get(id) {
|
match cache.get_mut(id) {
|
||||||
Some(id) => Ok(id.clone()),
|
Some(entry) => {
|
||||||
|
entry.touch();
|
||||||
|
Ok(entry.clone())
|
||||||
|
}
|
||||||
None => match read(Path::new(&self.dir).join(&id)).await {
|
None => match read(Path::new(&self.dir).join(&id)).await {
|
||||||
Ok(content) => {
|
Ok(content) => {
|
||||||
let data = CacheType::from_bytes(content);
|
let data = CacheEntry::new(CacheType::from_bytes(content));
|
||||||
Ok(CacheEntry::new(data))
|
cache.insert(id.to_string(), data.clone());
|
||||||
|
Ok(data)
|
||||||
}
|
}
|
||||||
Err(_) => Err(DBError::new("cache entry not found")),
|
Err(_) => Err(DBError::new("cache entry not found")),
|
||||||
},
|
},
|
||||||
@ -272,6 +276,28 @@ mod cache {
|
|||||||
assert_eq!(content, expected.to_bytes());
|
assert_eq!(content, expected.to_bytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[async_std::test]
|
||||||
|
async fn get_entry_uodates_time() {
|
||||||
|
let mtt = MTT::new().await;
|
||||||
|
let id = "something";
|
||||||
|
let holder = CacheEntry {
|
||||||
|
data: CacheType::Raw("old".to_string()),
|
||||||
|
last_used: Instant::now() - Duration::from_secs(200),
|
||||||
|
};
|
||||||
|
let mut cache = mtt.db.cache.lock().await;
|
||||||
|
cache.insert(id.to_string(), holder);
|
||||||
|
drop(cache);
|
||||||
|
mtt.db.get_entry(&id).await.unwrap();
|
||||||
|
let cache = mtt.db.cache.lock().await;
|
||||||
|
let entry = cache.get(id).unwrap();
|
||||||
|
let held = entry.elapsed();
|
||||||
|
assert!(
|
||||||
|
Duration::from_secs(1) > held,
|
||||||
|
"Duration was {:?}, should have been close to 0s.",
|
||||||
|
held
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[async_std::test]
|
#[async_std::test]
|
||||||
async fn retrieve_from_disk() {
|
async fn retrieve_from_disk() {
|
||||||
let mtt = MTT::new().await;
|
let mtt = MTT::new().await;
|
||||||
@ -282,6 +308,9 @@ mod cache {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
let output = mtt.db.get_entry(id).await.unwrap();
|
let output = mtt.db.get_entry(id).await.unwrap();
|
||||||
assert_eq!(output.to_string(), data.to_string());
|
assert_eq!(output.to_string(), data.to_string());
|
||||||
|
let cache = mtt.db.cache.lock().await;
|
||||||
|
let stored = cache.get(id);
|
||||||
|
assert!(stored.is_some(), "Did not store entry in the cache.");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_std::test]
|
#[async_std::test]
|
||||||
@ -312,16 +341,28 @@ mod cache {
|
|||||||
#[async_std::test]
|
#[async_std::test]
|
||||||
async fn update_cache_entry() {
|
async fn update_cache_entry() {
|
||||||
let mtt = MTT::new().await;
|
let mtt = MTT::new().await;
|
||||||
let id = mtt
|
let id = "updateable";
|
||||||
.db
|
let holder = CacheEntry {
|
||||||
.add_entry(CacheType::Raw("same".to_string()))
|
data: CacheType::Raw("elder".to_string()),
|
||||||
.await
|
last_used: Instant::now() - Duration::from_secs(500),
|
||||||
.unwrap();
|
};
|
||||||
|
let mut cache = mtt.db.cache.lock().await;
|
||||||
|
cache.insert(id.to_string(), holder);
|
||||||
|
drop(cache);
|
||||||
let expected = "different";
|
let expected = "different";
|
||||||
let expect = CacheType::Raw(expected.to_string());
|
let expect = CacheType::Raw(expected.to_string());
|
||||||
mtt.db.update_entry(&id, expect.clone()).await.unwrap();
|
mtt.db.update_entry(id, expect.clone()).await.unwrap();
|
||||||
let output = mtt.db.get_entry(&id).await.unwrap();
|
let output = mtt.db.get_entry(id).await.unwrap();
|
||||||
assert_eq!(output.to_string(), expected);
|
assert_eq!(output.to_string(), expected);
|
||||||
|
let cache = mtt.db.cache.lock().await;
|
||||||
|
let entry = cache.get(id).unwrap();
|
||||||
|
let held = entry.elapsed();
|
||||||
|
assert!(
|
||||||
|
Duration::from_secs(1) > held,
|
||||||
|
"Duration was {:?}, should have been close to 0s.",
|
||||||
|
held
|
||||||
|
);
|
||||||
|
drop(cache);
|
||||||
let content = read(mtt.dir.path().join(DATA).join(id)).await.unwrap();
|
let content = read(mtt.dir.path().join(DATA).join(id)).await.unwrap();
|
||||||
assert_eq!(content, expect.to_bytes());
|
assert_eq!(content, expect.to_bytes());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user