summaryrefslogtreecommitdiff
path: root/test/test_unistd.rs
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_unistd.rs')
-rw-r--r--test/test_unistd.rs57
1 files changed, 45 insertions, 12 deletions
diff --git a/test/test_unistd.rs b/test/test_unistd.rs
index 8fe1d432..0b2a810a 100644
--- a/test/test_unistd.rs
+++ b/test/test_unistd.rs
@@ -256,8 +256,38 @@ fn test_initgroups() {
#[cfg(not(target_os = "redox"))]
macro_rules! execve_test_factory(
($test_name:ident, $syscall:ident, $exe: expr $(, $pathname:expr, $flags:expr)*) => (
- #[test]
- fn $test_name() {
+
+ #[cfg(test)]
+ mod $test_name {
+ use super::*;
+
+ fn syscall_cstr_ref() -> Result<std::convert::Infallible, nix::Error> {
+ $syscall(
+ $exe,
+ $(CString::new($pathname).unwrap().as_c_str(), )*
+ &[CString::new(b"".as_ref()).unwrap().as_c_str(),
+ CString::new(b"-c".as_ref()).unwrap().as_c_str(),
+ CString::new(b"echo nix!!! && echo foo=$foo && echo baz=$baz"
+ .as_ref()).unwrap().as_c_str()],
+ &[CString::new(b"foo=bar".as_ref()).unwrap().as_c_str(),
+ CString::new(b"baz=quux".as_ref()).unwrap().as_c_str()]
+ $(, $flags)*)
+ }
+
+ fn syscall_cstring() -> Result<std::convert::Infallible, nix::Error> {
+ $syscall(
+ $exe,
+ $(CString::new($pathname).unwrap().as_c_str(), )*
+ &[CString::new(b"".as_ref()).unwrap(),
+ CString::new(b"-c".as_ref()).unwrap(),
+ CString::new(b"echo nix!!! && echo foo=$foo && echo baz=$baz"
+ .as_ref()).unwrap()],
+ &[CString::new(b"foo=bar".as_ref()).unwrap(),
+ CString::new(b"baz=quux".as_ref()).unwrap()]
+ $(, $flags)*)
+ }
+
+ fn common_test(syscall: fn() -> Result<std::convert::Infallible, nix::Error>) {
if "execveat" == stringify!($syscall) {
// Though undocumented, Docker's default seccomp profile seems to
// block this syscall. https://github.com/nix-rust/nix/issues/1122
@@ -276,16 +306,7 @@ macro_rules! execve_test_factory(
Child => {
// Make `writer` be the stdout of the new process.
dup2(writer, 1).unwrap();
- let r = $syscall(
- $exe,
- $(CString::new($pathname).unwrap().as_c_str(), )*
- &[CString::new(b"".as_ref()).unwrap().as_c_str(),
- CString::new(b"-c".as_ref()).unwrap().as_c_str(),
- CString::new(b"echo nix!!! && echo foo=$foo && echo baz=$baz"
- .as_ref()).unwrap().as_c_str()],
- &[CString::new(b"foo=bar".as_ref()).unwrap().as_c_str(),
- CString::new(b"baz=quux".as_ref()).unwrap().as_c_str()]
- $(, $flags)*);
+ let r = syscall();
let _ = std::io::stderr()
.write_all(format!("{:?}", r).as_bytes());
// Should only get here in event of error
@@ -307,6 +328,18 @@ macro_rules! execve_test_factory(
}
}
}
+
+ #[test]
+ fn test_cstr_ref() {
+ common_test(syscall_cstr_ref);
+ }
+
+ #[test]
+ fn test_cstring() {
+ common_test(syscall_cstring);
+ }
+ }
+
)
);