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