diff options
Diffstat (limited to 'vendor/sysinfo/src/system.rs')
-rw-r--r-- | vendor/sysinfo/src/system.rs | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/vendor/sysinfo/src/system.rs b/vendor/sysinfo/src/system.rs new file mode 100644 index 000000000..63a70651f --- /dev/null +++ b/vendor/sysinfo/src/system.rs @@ -0,0 +1,117 @@ +// 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<T> Foo for T where T: Send {} + + trait Bar { + fn bar(&self) {} + } + + impl<T> 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); + } + } +} |