mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-22 11:25:15 +08:00
refactor: reduce quality findings
This commit is contained in:
@@ -76,7 +76,8 @@ impl FileSystemCasRepository {
|
||||
|
||||
/// 读取对象并验证 Hash。
|
||||
pub async fn get(&self, hash: &Hash) -> Result<Vec<u8>> {
|
||||
self.storage.get(hash).await
|
||||
let data = self.storage.get(hash).await?;
|
||||
Ok(data)
|
||||
}
|
||||
|
||||
/// 检查对象是否存在。
|
||||
@@ -92,7 +93,8 @@ impl FileSystemCasRepository {
|
||||
|
||||
let size = self.storage.size(hash).await?;
|
||||
self.ref_counter.ensure_object(hash, size).await?;
|
||||
self.ref_counter.add_reference(hash).await
|
||||
let count = self.ref_counter.add_reference(hash).await?;
|
||||
Ok(count)
|
||||
}
|
||||
|
||||
/// 减少引用计数。
|
||||
@@ -146,10 +148,15 @@ mod tests {
|
||||
use super::*;
|
||||
use std::sync::Arc;
|
||||
|
||||
#[tokio::test]
|
||||
async fn store_increments_reference_count() {
|
||||
async fn temp_repo() -> (tempfile::TempDir, FileSystemCasRepository) {
|
||||
let temp_dir = tempfile::tempdir().unwrap();
|
||||
let repo = FileSystemCasRepository::new(temp_dir.path()).await.unwrap();
|
||||
(temp_dir, repo)
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn store_increments_reference_count() {
|
||||
let (_temp_dir, repo) = temp_repo().await;
|
||||
|
||||
let hash = repo.store(b"same data").await.unwrap();
|
||||
let second = repo.store(b"same data").await.unwrap();
|
||||
@@ -161,8 +168,7 @@ mod tests {
|
||||
|
||||
#[tokio::test]
|
||||
async fn gc_deletes_only_zero_reference_objects() {
|
||||
let temp_dir = tempfile::tempdir().unwrap();
|
||||
let repo = FileSystemCasRepository::new(temp_dir.path()).await.unwrap();
|
||||
let (_temp_dir, repo) = temp_repo().await;
|
||||
|
||||
let keep = repo.store(b"keep").await.unwrap();
|
||||
let delete = repo.store(b"delete").await.unwrap();
|
||||
@@ -180,8 +186,8 @@ mod tests {
|
||||
|
||||
#[tokio::test]
|
||||
async fn concurrent_store_is_safe_and_counts_references() {
|
||||
let temp_dir = tempfile::tempdir().unwrap();
|
||||
let repo = Arc::new(FileSystemCasRepository::new(temp_dir.path()).await.unwrap());
|
||||
let (_temp_dir, repo) = temp_repo().await;
|
||||
let repo = Arc::new(repo);
|
||||
let mut tasks = Vec::new();
|
||||
|
||||
for _ in 0..32 {
|
||||
@@ -203,13 +209,11 @@ mod tests {
|
||||
|
||||
#[tokio::test]
|
||||
async fn corrupted_object_is_detected_through_repository() {
|
||||
let temp_dir = tempfile::tempdir().unwrap();
|
||||
let repo = FileSystemCasRepository::new(temp_dir.path()).await.unwrap();
|
||||
let (_temp_dir, repo) = temp_repo().await;
|
||||
|
||||
let hash = repo.store(b"valid").await.unwrap();
|
||||
tokio::fs::write(repo.storage().object_path(&hash), b"invalid")
|
||||
.await
|
||||
.unwrap();
|
||||
let write_result = tokio::fs::write(repo.storage().object_path(&hash), b"invalid").await;
|
||||
write_result.unwrap();
|
||||
|
||||
assert!(matches!(
|
||||
repo.get(&hash).await,
|
||||
@@ -219,8 +223,7 @@ mod tests {
|
||||
|
||||
#[tokio::test]
|
||||
async fn add_reference_requires_existing_object() {
|
||||
let temp_dir = tempfile::tempdir().unwrap();
|
||||
let repo = FileSystemCasRepository::new(temp_dir.path()).await.unwrap();
|
||||
let (_temp_dir, repo) = temp_repo().await;
|
||||
let missing = compute_hash(b"missing");
|
||||
|
||||
assert!(matches!(
|
||||
@@ -231,8 +234,7 @@ mod tests {
|
||||
|
||||
#[tokio::test]
|
||||
async fn remove_reference_does_not_go_below_zero() {
|
||||
let temp_dir = tempfile::tempdir().unwrap();
|
||||
let repo = FileSystemCasRepository::new(temp_dir.path()).await.unwrap();
|
||||
let (_temp_dir, repo) = temp_repo().await;
|
||||
|
||||
let hash = repo.store(b"underflow").await.unwrap();
|
||||
assert_eq!(repo.remove_reference(&hash).await.unwrap(), 0);
|
||||
|
||||
Reference in New Issue
Block a user