1 #![cfg(target_os = "linux")]
2 
3 use std::io::ErrorKind;
4 
5 use rlimit::{prlimit, Resource};
6 
7 use super::{expect_err, expect_ok};
8 
9 #[test]
linux_prlimit()10 fn linux_prlimit() {
11     const SOFT: u64 = 4 * 1024 * 1024;
12     const HARD: u64 = 8 * 1024 * 1024;
13 
14     let res = Resource::CORE;
15 
16     expect_ok(prlimit(0, res, Some((SOFT, HARD)), None));
17 
18     let mut soft = 0;
19     let mut hard = 0;
20 
21     expect_ok(prlimit(0, res, None, Some((&mut soft, &mut hard))));
22 
23     assert_eq!((soft, hard), (SOFT, HARD));
24 
25     expect_err(
26         prlimit(0, res, Some((HARD, SOFT)), None),
27         ErrorKind::InvalidInput,
28     );
29 
30     expect_err(
31         prlimit(0, res, Some((HARD, HARD + 1)), None),
32         ErrorKind::PermissionDenied,
33     );
34 }
35 
36 #[test]
linux_proc_limits()37 fn linux_proc_limits() {
38     use rlimit::ProcLimits;
39 
40     let self_limits = ProcLimits::read_self().unwrap();
41     assert!(self_limits.max_cpu_time.is_some());
42     assert!(self_limits.max_file_size.is_some());
43     assert!(self_limits.max_data_size.is_some());
44     assert!(self_limits.max_stack_size.is_some());
45     assert!(self_limits.max_core_file_size.is_some());
46     assert!(self_limits.max_resident_set.is_some());
47     assert!(self_limits.max_processes.is_some());
48     assert!(self_limits.max_open_files.is_some());
49     assert!(self_limits.max_locked_memory.is_some());
50     assert!(self_limits.max_address_space.is_some());
51     assert!(self_limits.max_file_locks.is_some());
52     assert!(self_limits.max_pending_signals.is_some());
53     assert!(self_limits.max_msgqueue_size.is_some());
54     assert!(self_limits.max_nice_priority.is_some());
55     assert!(self_limits.max_realtime_priority.is_some());
56     assert!(self_limits.max_realtime_timeout.is_some());
57 
58     let self_pid = unsafe { libc::getpid() };
59     let process_limits = ProcLimits::read_process(self_pid).unwrap();
60 
61     macro_rules! assert_limit_eq{
62         {$lhs:expr, $rhs:expr, [$($field:tt,)+]} => {
63             $(
64                 assert_eq!($lhs.$field, $rhs.$field, stringify!($field));
65             )+
66         }
67     }
68 
69     assert_limit_eq!(
70         self_limits,
71         process_limits,
72         [
73             max_cpu_time,
74             max_file_size,
75             max_data_size,
76             max_stack_size,
77             max_core_file_size,
78             max_resident_set,
79             max_processes,
80             max_open_files,
81             max_locked_memory,
82             max_address_space,
83             max_file_locks,
84             max_pending_signals,
85             max_msgqueue_size,
86             max_nice_priority,
87             max_realtime_priority,
88             max_realtime_timeout,
89         ]
90     );
91 }
92