// Take a look at the license at the top of the repository in the LICENSE file. // Once https://github.com/rust-lang/rfcs/blob/master/text/1422-pub-restricted.md // feature gets stabilized, we can move common parts in here. #[cfg(test)] mod tests { use crate::{ProcessExt, System, SystemExt}; #[test] fn test_refresh_system() { let mut sys = System::new(); sys.refresh_system(); // We don't want to test on unsupported systems. if System::IS_SUPPORTED { assert!(sys.total_memory() != 0); assert!(sys.free_memory() != 0); } assert!(sys.total_memory() >= sys.free_memory()); assert!(sys.total_swap() >= sys.free_swap()); } #[test] fn test_refresh_process() { let mut sys = System::new(); assert!(sys.processes().is_empty(), "no process should be listed!"); // We don't want to test on unsupported systems. #[cfg(not(feature = "apple-sandbox"))] if System::IS_SUPPORTED { assert!( sys.refresh_process(crate::get_current_pid().expect("failed to get current pid")), "process not listed", ); // Ensure that the process was really added to the list! assert!(sys .process(crate::get_current_pid().expect("failed to get current pid")) .is_some()); } } #[test] fn test_get_process() { let mut sys = System::new(); sys.refresh_processes(); let current_pid = match crate::get_current_pid() { Ok(pid) => pid, _ => { if !System::IS_SUPPORTED { return; } panic!("get_current_pid should work!"); } }; if let Some(p) = sys.process(current_pid) { assert!(p.memory() > 0); } else { #[cfg(not(feature = "apple-sandbox"))] assert!(!System::IS_SUPPORTED); } } #[test] fn check_if_send_and_sync() { trait Foo { fn foo(&self) {} } impl Foo for T where T: Send {} trait Bar { fn bar(&self) {} } impl Bar for T where T: Sync {} let mut sys = System::new(); sys.refresh_processes(); let current_pid = match crate::get_current_pid() { Ok(pid) => pid, _ => { if !System::IS_SUPPORTED { return; } panic!("get_current_pid should work!"); } }; if let Some(p) = sys.process(current_pid) { p.foo(); // If this doesn't compile, it'll simply mean that the Process type // doesn't implement the Send trait. p.bar(); // If this doesn't compile, it'll simply mean that the Process type // doesn't implement the Sync trait. } else { #[cfg(not(feature = "apple-sandbox"))] assert!(!System::IS_SUPPORTED); } } #[test] fn check_hostname_has_no_nuls() { let sys = System::new(); if let Some(hostname) = sys.host_name() { assert!(!hostname.contains('\u{0}')) } } #[test] fn check_uptime() { let sys = System::new(); let uptime = sys.uptime(); if System::IS_SUPPORTED { std::thread::sleep(std::time::Duration::from_millis(1000)); let new_uptime = sys.uptime(); assert!(uptime < new_uptime); } } }