use std::time::Duration;
use evalbox_sandbox::{Executor, Plan};
use crate::common::{SIGSYS, payload};
#[test]
#[ignore]
fn test_payload_can_execute() {
let output = Executor::run(
Plan::new(["./payload"])
.executable("payload", payload("success"))
.binary_path("./payload")
.timeout(Duration::from_secs(5)),
)
.expect("Executor should run");
assert!(output.success(), "Control payload should succeed");
assert!(
output
.stdout_str()
.contains("payload executed successfully"),
"Should see success message"
);
}
#[test]
#[ignore]
fn test_ptrace_blocked() {
let output = Executor::run(
Plan::new(["./payload"])
.executable("payload", payload("syscall_ptrace"))
.binary_path("./payload")
.timeout(Duration::from_secs(5)),
)
.expect("Executor should run");
assert!(!output.success(), "ptrace should be blocked");
assert_eq!(
output.signal,
Some(SIGSYS),
"Should be killed by SIGSYS, got signal {:?}",
output.signal
);
}
#[test]
#[ignore]
fn test_mount_blocked() {
let output = Executor::run(
Plan::new(["./payload"])
.executable("payload", payload("syscall_mount"))
.binary_path("./payload")
.timeout(Duration::from_secs(5)),
)
.expect("Executor should run");
assert!(!output.success(), "mount should be blocked");
assert_eq!(
output.signal,
Some(SIGSYS),
"Should be killed by SIGSYS, got signal {:?}",
output.signal
);
}
#[test]
#[ignore]
fn test_reboot_blocked() {
let output = Executor::run(
Plan::new(["./payload"])
.executable("payload", payload("syscall_reboot"))
.binary_path("./payload")
.timeout(Duration::from_secs(5)),
)
.expect("Executor should run");
assert!(!output.success(), "reboot should be blocked");
assert_eq!(
output.signal,
Some(SIGSYS),
"Should be killed by SIGSYS, got signal {:?}",
output.signal
);
}
#[test]
#[ignore]
fn test_clone_newuser_blocked() {
let output = Executor::run(
Plan::new(["./payload"])
.executable("payload", payload("syscall_clone_ns"))
.binary_path("./payload")
.timeout(Duration::from_secs(5)),
)
.expect("Executor should run");
assert!(!output.success(), "clone(CLONE_NEWUSER) should be blocked");
assert_eq!(
output.signal,
Some(SIGSYS),
"Should be killed by SIGSYS, got signal {:?}",
output.signal
);
}
#[test]
#[ignore]
fn test_socket_netlink_blocked() {
let output = Executor::run(
Plan::new(["./payload"])
.executable("payload", payload("socket_netlink"))
.binary_path("./payload")
.timeout(Duration::from_secs(5)),
)
.expect("Executor should run");
assert!(!output.success(), "AF_NETLINK should be blocked");
assert_eq!(
output.signal,
Some(SIGSYS),
"Should be killed by SIGSYS, got signal {:?}",
output.signal
);
}
#[test]
#[ignore]
fn test_socket_raw_blocked() {
let output = Executor::run(
Plan::new(["./payload"])
.executable("payload", payload("socket_raw"))
.binary_path("./payload")
.timeout(Duration::from_secs(5)),
)
.expect("Executor should run");
assert!(!output.success(), "SOCK_RAW should be blocked");
assert_eq!(
output.signal,
Some(SIGSYS),
"Should be killed by SIGSYS, got signal {:?}",
output.signal
);
}
#[test]
#[ignore]
fn test_keyctl_blocked() {
let output = Executor::run(
Plan::new(["./payload"])
.executable("payload", payload("syscall_keyctl"))
.binary_path("./payload")
.timeout(Duration::from_secs(5)),
)
.expect("Executor should run");
assert!(!output.success(), "keyctl should be blocked");
assert_eq!(
output.signal,
Some(SIGSYS),
"Should be killed by SIGSYS, got signal {:?}",
output.signal
);
}
#[test]
#[ignore]
fn test_bpf_blocked() {
let output = Executor::run(
Plan::new(["./payload"])
.executable("payload", payload("syscall_bpf"))
.binary_path("./payload")
.timeout(Duration::from_secs(5)),
)
.expect("Executor should run");
assert!(!output.success(), "bpf should be blocked");
assert_eq!(
output.signal,
Some(SIGSYS),
"Should be killed by SIGSYS, got signal {:?}",
output.signal
);
}