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