summaryrefslogtreecommitdiffstats
path: root/vendor/rustix/tests/process/rlimit.rs
blob: b01f9204cb8ca25a1dfb9ab41f5b6d6514efbbcc (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
use rustix::process::{Resource, Rlimit};

#[test]
fn test_getrlimit() {
    let lim = rustix::process::getrlimit(Resource::Stack);
    assert_ne!(lim.current, Some(0));
    assert_ne!(lim.maximum, Some(0));
}

#[test]
fn test_setrlimit() {
    let old = rustix::process::getrlimit(Resource::Core);
    let new = Rlimit {
        current: Some(0),
        maximum: Some(4096),
    };
    assert_ne!(old, new);
    rustix::process::setrlimit(Resource::Core, new.clone()).unwrap();

    let lim = rustix::process::getrlimit(Resource::Core);
    assert_eq!(lim, new);

    #[cfg(any(target_os = "android", target_os = "linux"))]
    {
        let new = Rlimit {
            current: Some(0),
            maximum: Some(0),
        };

        let first = rustix::process::getrlimit(Resource::Core);

        let old = match rustix::process::prlimit(None, Resource::Core, new.clone()) {
            Ok(rlimit) => rlimit,
            Err(rustix::io::Errno::NOSYS) => return,
            Err(e) => Err(e).unwrap(),
        };

        assert_eq!(first, old);

        let other = Rlimit {
            current: Some(0),
            maximum: Some(0),
        };

        let again =
            rustix::process::prlimit(Some(rustix::process::getpid()), Resource::Core, other)
                .unwrap();

        assert_eq!(again, new);
    }
}