use rust_network_mgr::{
config::{load_config}, types::{AppConfig, ControlCommand, NetworkEvent, DockerEvent, SystemEvent}, NetworkMonitor, NftablesManager, SocketHandler
};
use std::io::Write;
use std::sync::Arc;
use tempfile::NamedTempFile;
use tokio::sync::{mpsc, Mutex};
use tokio::runtime::Runtime;
fn create_dummy_config_file() -> (NamedTempFile, AppConfig) {
let yaml = r#"
interfaces:
- name: "lo"
dhcp: false
address: "127.0.0.1/8"
- name: "eth0"
dhcp: true
nftables_zone: "wan"
socket_path: "/tmp/rust_network_mgr_test.sock"
"#;
let mut file = NamedTempFile::new().unwrap();
writeln!(file, "{}", yaml).unwrap();
let config = load_config(Some(file.path().to_str().unwrap())).expect("Failed to load dummy config");
(file, config)
}
#[tokio::test]
async fn test_config_loading_integration() {
let (_config_file, config) = create_dummy_config_file();
}
#[test]
#[ignore] fn test_component_instantiation() {
let rt = Runtime::new().unwrap();
rt.block_on(async {
let (_temp_file, config) = create_dummy_config_file();
let (network_tx, _network_rx) = mpsc::channel::<NetworkEvent>(100);
let (control_tx, _control_rx) = mpsc::channel::<ControlCommand>(10);
let (docker_ev, _docker_ev) = mpsc::channel::<DockerEvent>(100);
let (system_ev, _system_ev) = mpsc::channel::<SystemEvent>(100);
let _monitor = NetworkMonitor::new(system_ev.clone());
let interface_config_arc = Arc::new(Mutex::new(config.interfaces.clone()));
let nft_manager_result = NftablesManager::new(interface_config_arc).await;
assert!(nft_manager_result.is_ok(), "NftablesManager creation failed: {:?}", nft_manager_result.err());
let socket_result = SocketHandler::new(config.socket_path.as_deref(), system_ev.clone()).await;
assert!(socket_result.is_ok(), "SocketHandler creation failed: {:?}", socket_result.err());
if let Some(path) = &config.socket_path {
if std::path::Path::new(path).exists() {
let _ = std::fs::remove_file(path);
}
}
});
}