use casc_storage::types::CascConfig;
use casc_storage::{CascStorage, EKey, ProgressiveConfig, SizeHint};
use tempfile::TempDir;
#[tokio::test]
async fn test_progressive_loading_initialization() {
let temp_dir = TempDir::new().unwrap();
let data_path = temp_dir.path().to_path_buf();
let config = CascConfig {
data_path: data_path.clone(),
cache_size_mb: 10,
max_archive_size: 100 * 1024 * 1024,
use_memory_mapping: false,
read_only: false,
};
let mut storage = CascStorage::new(config).unwrap();
let progressive_config = ProgressiveConfig {
chunk_size: 256 * 1024,
max_prefetch_chunks: 4,
chunk_timeout: std::time::Duration::from_secs(30),
use_predictive_prefetch: true,
min_progressive_size: 1024 * 1024,
};
storage.init_progressive_loading(progressive_config);
assert!(storage.has_progressive_loading());
}
#[tokio::test]
async fn test_progressive_file_creation() {
let temp_dir = TempDir::new().unwrap();
let data_path = temp_dir.path().to_path_buf();
let config = CascConfig {
data_path: data_path.clone(),
cache_size_mb: 10,
max_archive_size: 100 * 1024 * 1024,
use_memory_mapping: false,
read_only: false,
};
let mut storage = CascStorage::new(config).unwrap();
let progressive_config = ProgressiveConfig::default();
storage.init_progressive_loading(progressive_config);
let ekey = EKey::new([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
let result = storage.read_progressive(&ekey, SizeHint::Unknown).await;
assert!(result.is_ok());
if let Ok(progressive_file) = result {
let read_result = progressive_file.read(0, 100).await;
assert!(read_result.is_err());
}
}
#[tokio::test]
async fn test_progressive_stats() {
let temp_dir = TempDir::new().unwrap();
let data_path = temp_dir.path().to_path_buf();
let config = CascConfig {
data_path: data_path.clone(),
cache_size_mb: 10,
max_archive_size: 100 * 1024 * 1024,
use_memory_mapping: false,
read_only: false,
};
let mut storage = CascStorage::new(config).unwrap();
let progressive_config = ProgressiveConfig::default();
storage.init_progressive_loading(progressive_config);
let stats = storage.get_progressive_stats().await;
assert_eq!(stats.len(), 0);
storage.cleanup_progressive_files().await;
}
#[test]
fn test_size_hint_logic() {
let config = ProgressiveConfig::default();
assert!(SizeHint::Exact(2_000_000).should_use_progressive(&config));
assert!(!SizeHint::Exact(500_000).should_use_progressive(&config));
assert!(
SizeHint::Estimated {
size: 2_000_000,
confidence: 0.8
}
.should_use_progressive(&config)
);
assert!(
!SizeHint::Estimated {
size: 2_000_000,
confidence: 0.3
}
.should_use_progressive(&config)
);
assert!(SizeHint::Minimum(2_000_000).should_use_progressive(&config));
assert!(!SizeHint::Minimum(500_000).should_use_progressive(&config));
assert!(!SizeHint::Unknown.should_use_progressive(&config));
}