1use std::fs::File;
2
3use rustix::fd::AsFd;
4#[cfg(not(target_os = "android"))]
5use rustix::fd::{FromRawFd, OwnedFd, RawFd};
6#[cfg(not(target_os = "android"))]
7use rustix::thread::*;
8
9#[test]
10#[ignore = "Requires CAP_SYS_ADMIN capability"]
11fn test_move_into_link_name_space() {
12    let f = File::open("/proc/self/ns/uts").unwrap();
13
14    rustix::thread::move_into_link_name_space(
15        f.as_fd(),
16        Some(rustix::thread::LinkNameSpaceType::HostNameAndNISDomainName),
17    )
18    .unwrap();
19}
20
21#[test]
22#[ignore = "Requires CAP_SYS_ADMIN capability"]
23#[cfg(not(target_os = "android"))] // Android libc bindings don't have `SYS_pidfd_open` yet.
24fn test_move_into_thread_name_spaces() {
25    let fd = unsafe { libc::syscall(libc::SYS_pidfd_open, std::process::id() as usize, 0_usize) };
26    if fd == -1 {
27        panic!("{}", std::io::Error::last_os_error());
28    }
29
30    let fd = unsafe { OwnedFd::from_raw_fd(fd as RawFd) };
31
32    rustix::thread::move_into_thread_name_spaces(
33        fd.as_fd(),
34        ThreadNameSpaceType::HOST_NAME_AND_NIS_DOMAIN_NAME,
35    )
36    .unwrap();
37}
38