use std::{
collections::BTreeMap,
path::PathBuf,
sync::{
Mutex,
atomic::{AtomicBool, AtomicUsize},
},
};
use super::EventBus;
use crate::{CacheType, ContainerRegistry, ProgressFactory};
pub struct RuntimeInner {
pub cache_type: CacheType,
pub ssh_identity: Option<PathBuf>,
pub registry: ContainerRegistry,
pub event_bus: EventBus,
pub progress_factory: Mutex<ProgressFactory>,
pub abort_on_error: AtomicBool,
pub error_count: AtomicUsize,
pub writer_options: Mutex<BTreeMap<String, String>>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_runtime_inner_construction() {
let cache_type = CacheType::new_memory();
let registry = ContainerRegistry::default();
let event_bus = EventBus::new();
let progress_factory = Mutex::new(ProgressFactory::new(event_bus.clone(), false));
let inner = RuntimeInner {
cache_type,
ssh_identity: None,
registry,
event_bus,
progress_factory,
abort_on_error: AtomicBool::new(false),
error_count: AtomicUsize::new(0),
writer_options: Mutex::new(BTreeMap::new()),
};
assert_eq!(inner.cache_type, CacheType::InMemory);
}
#[test]
fn test_runtime_inner_with_disk_cache() {
let path_buf = std::path::PathBuf::from("/tmp/versatiles_cache");
let cache_type = CacheType::new_disk(path_buf.clone());
let registry = ContainerRegistry::default();
let event_bus = EventBus::new();
let progress_factory = Mutex::new(ProgressFactory::new(event_bus.clone(), false));
let inner = RuntimeInner {
cache_type,
ssh_identity: None,
registry,
event_bus,
progress_factory,
abort_on_error: AtomicBool::new(false),
error_count: AtomicUsize::new(0),
writer_options: Mutex::new(BTreeMap::new()),
};
assert_eq!(inner.cache_type, CacheType::Disk(path_buf));
}
#[test]
fn test_runtime_inner_progress_factory_mutex() {
let cache_type = CacheType::new_memory();
let registry = ContainerRegistry::default();
let event_bus = EventBus::new();
let progress_factory = Mutex::new(ProgressFactory::new(event_bus.clone(), false));
let inner = RuntimeInner {
cache_type,
ssh_identity: None,
registry,
event_bus,
progress_factory,
abort_on_error: AtomicBool::new(false),
error_count: AtomicUsize::new(0),
writer_options: Mutex::new(BTreeMap::new()),
};
let mut factory = inner.progress_factory.lock().unwrap();
let _progress = factory.create("Test", 100);
}
#[test]
fn test_runtime_inner_event_bus_access() {
let cache_type = CacheType::new_memory();
let registry = ContainerRegistry::default();
let event_bus = EventBus::new();
let progress_factory = Mutex::new(ProgressFactory::new(event_bus.clone(), false));
let inner = RuntimeInner {
cache_type,
ssh_identity: None,
registry,
event_bus: event_bus.clone(),
progress_factory,
abort_on_error: AtomicBool::new(false),
error_count: AtomicUsize::new(0),
writer_options: Mutex::new(BTreeMap::new()),
};
inner.event_bus.step("Test step".to_string());
}
}