blob: 63a70651f2af8008e4c869011606e077449b9ed3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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);
}
}
}
|