use systemd_run::{Identity, RunSystem};
#[async_std::test]
#[ignore]
#[cfg(feature = "systemd_227")]
async fn test_root_private_network_simple() {
let r = RunSystem::new("/bin/true")
.identity(Identity::dynamic())
.start()
.await
.expect("should be able to start true")
.wait()
.await
.expect("should be able to get the status of the Run");
assert!(
!r.is_failed(),
"should be able to run true in private network namespace"
);
}
#[async_std::test]
#[ignore]
#[cfg(feature = "systemd_236")]
async fn test_root_private_network_wget() {
let r = RunSystem::new("/usr/bin/wget")
.collect_on_fail()
.arg("https://example.org/")
.arg("-O")
.arg("/dev/null")
.private_network()
.identity(Identity::dynamic())
.start()
.await
.expect("should be able to start wget https://example.org")
.wait()
.await
.expect("should be able to get the status of the Run");
assert!(
r.is_failed(),
"should not be able to access Internet with private_network"
);
}
#[async_std::test]
#[ignore]
#[cfg(feature = "systemd_249")]
async fn test_root_private_ipc() {
const PATH: &'static str = concat!(env!("OUT_DIR"), "/test-aux/shm");
for _ in 0..2 {
let r = RunSystem::new(PATH)
.private_ipc()
.identity(Identity::user_group("nobody", "nogroup"))
.start()
.await
.expect("should be able to start the test program")
.wait()
.await
.expect("should be able to get the status of the Run");
assert!(
!r.is_failed(),
"should be able to create POSIX shm in the new IPC namespace"
);
}
}
#[async_std::test]
#[ignore]
#[cfg(feature = "systemd_232")]
async fn test_root_private_users() {
const PATH: &'static str = concat!(env!("OUT_DIR"), "/test-aux/setuid");
let r = RunSystem::new(PATH)
.private_users()
.start()
.await
.expect("should be able to start the test program")
.wait()
.await
.expect("should be able to get the status of the Run");
assert!(
!r.is_failed(),
"UID 514 should not exist in the separate user namespace"
);
}
#[async_std::test]
#[ignore]
#[cfg(feature = "systemd_227")]
async fn test_root_private_network_wget_join() {
let r = RunSystem::new("/usr/bin/wget")
.collect_on_fail()
.arg("https://example.org/")
.arg("-O")
.arg("/dev/null")
.private_network()
.joins_namespace_of("systemd-resolved.service")
.identity(Identity::dynamic())
.start()
.await
.expect("should be able to start wget https://example.org")
.wait()
.await
.expect("should be able to get the status of the Run");
assert!(
!r.is_failed(),
"should not be able to access Internet with joined namespace"
);
}