in src/jailer/src/main.rs [492:777]
fn test_error_display() {
use std::ffi::CStr;
let path = PathBuf::from("/foo");
let file_str = "/foo/bar";
let file_path = PathBuf::from(file_str);
let proc_mounts = "/proc/mounts";
let controller = "sysfs";
let id = "foobar";
let err_args_parse = arg_parser::Error::UnexpectedArgument("foo".to_string());
let err_regex = regex::Error::Syntax(id.to_string());
let err2_str = "No such file or directory (os error 2)";
let cgroup_file = "cpuset.mems";
assert_eq!(
format!("{}", Error::ArgumentParsing(err_args_parse)),
"Failed to parse arguments: Found argument 'foo' which wasn't expected, or isn't valid in this context."
);
assert_eq!(
format!(
"{}",
Error::Canonicalize(path.clone(), io::Error::from_raw_os_error(2))
),
format!("Failed to canonicalize path /foo: {}", err2_str)
);
assert_eq!(
format!(
"{}",
Error::CgroupInheritFromParent(path.clone(), file_str.to_string())
),
"Failed to inherit cgroups configurations from file /foo/bar in path /foo",
);
assert_eq!(
format!(
"{}",
Error::Chmod(path.clone(), io::Error::from_raw_os_error(2))
),
"Failed to change permissions on \"/foo\": No such file or directory (os error 2)",
);
assert_eq!(
format!(
"{}",
Error::CgroupLineNotFound(proc_mounts.to_string(), controller.to_string())
),
"sysfs configurations not found in /proc/mounts",
);
assert_eq!(
format!("{}", Error::CgroupInvalidFile(cgroup_file.to_string())),
"Cgroup invalid file: cpuset.mems",
);
assert_eq!(
format!(
"{}",
Error::CgroupWrite("1".to_string(), "2".to_string(), cgroup_file.to_string())
),
"Expected value 1 for cpuset.mems. Current value: 2",
);
assert_eq!(
format!("{}", Error::CgroupFormat(cgroup_file.to_string())),
"Invalid format for cgroups: cpuset.mems",
);
assert_eq!(
format!(
"{}",
Error::ChangeFileOwner(
PathBuf::from("/dev/net/tun"),
io::Error::from_raw_os_error(42)
)
),
"Failed to change owner for \"/dev/net/tun\": No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::ChdirNewRoot(io::Error::from_raw_os_error(42))),
"Failed to chdir into chroot directory: No message of desired type (os error 42)"
);
assert_eq!(
format!("{}", Error::Clone(io::Error::from_raw_os_error(42))),
"Failed cloning into a new child process: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::CloseNetNsFd(io::Error::from_raw_os_error(42))),
"Failed to close netns fd: No message of desired type (os error 42)",
);
assert_eq!(
format!(
"{}",
Error::CloseDevNullFd(io::Error::from_raw_os_error(42))
),
"Failed to close /dev/null fd: No message of desired type (os error 42)",
);
assert_eq!(
format!(
"{}",
Error::Copy(
file_path.clone(),
path.clone(),
io::Error::from_raw_os_error(2)
)
),
format!("Failed to copy /foo/bar to /foo: {}", err2_str)
);
assert_eq!(
format!(
"{}",
Error::CreateDir(path, io::Error::from_raw_os_error(2))
),
format!("Failed to create directory /foo: {}", err2_str)
);
assert_eq!(
format!(
"{}",
Error::CStringParsing(CString::new(b"f\0oo".to_vec()).unwrap_err())
),
"Encountered interior \\0 while parsing a string",
);
assert_eq!(
format!("{}", Error::Dup2(io::Error::from_raw_os_error(42))),
"Failed to duplicate fd: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::Exec(io::Error::from_raw_os_error(2))),
format!("Failed to exec into Firecracker: {}", err2_str)
);
assert_eq!(
format!("{}", Error::FileName(file_path.clone())),
"Failed to extract filename from path /foo/bar",
);
assert_eq!(
format!(
"{}",
Error::FileOpen(file_path.clone(), io::Error::from_raw_os_error(2))
),
format!("Failed to open file /foo/bar: {}", err2_str)
);
let err = CStr::from_bytes_with_nul(b"/dev").err().unwrap();
assert_eq!(
format!("{}", Error::FromBytesWithNul(err)),
"Failed to decode string from byte array: data provided is not nul terminated",
);
assert_eq!(
format!("{}", Error::GetOldFdFlags(io::Error::from_raw_os_error(42))),
"Failed to get flags from fd: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::Gid(id.to_string())),
"Invalid gid: foobar",
);
assert_eq!(
format!(
"{}",
Error::InvalidInstanceId(validators::Error::InvalidChar('a', 1))
),
"Invalid instance ID: invalid char (a) at position 1",
);
assert_eq!(
format!("{}", Error::MissingParent(file_path.clone())),
"File /foo/bar doesn't have a parent",
);
assert_eq!(
format!("{}", Error::MkdirOldRoot(io::Error::from_raw_os_error(42))),
"Failed to create the jail root directory before pivoting root: No message of desired \
type (os error 42)",
);
assert_eq!(
format!(
"{}",
Error::MknodDev(io::Error::from_raw_os_error(42), "/dev/net/tun")
),
"Failed to create /dev/net/tun via mknod inside the jail: No message of desired type \
(os error 42)",
);
assert_eq!(
format!("{}", Error::MountBind(io::Error::from_raw_os_error(42))),
"Failed to bind mount the jail root directory: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::MountPropagationSlave(io::Error::from_raw_os_error(42))),
"Failed to change the propagation type to slave: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::NotAFile(file_path.clone())),
"/foo/bar is not a file",
);
assert_eq!(
format!("{}", Error::NotADirectory(file_path.clone())),
"/foo/bar is not a directory",
);
assert_eq!(
format!("{}", Error::OpenDevNull(io::Error::from_raw_os_error(42))),
"Failed to open /dev/null: No message of desired type (os error 42)",
);
assert_eq!(
format!(
"{}",
Error::OsStringParsing(file_path.clone(), file_path.clone().into_os_string())
),
"Failed to parse path /foo/bar into an OsString",
);
assert_eq!(
format!("{}", Error::PivotRoot(io::Error::from_raw_os_error(42))),
"Failed to pivot root: No message of desired type (os error 42)",
);
assert_eq!(
format!(
"{}",
Error::ReadLine(file_path.clone(), io::Error::from_raw_os_error(2))
),
format!("Failed to read line from /foo/bar: {}", err2_str)
);
assert_eq!(
format!(
"{}",
Error::ReadToString(file_path.clone(), io::Error::from_raw_os_error(2))
),
format!("Failed to read file /foo/bar into a string: {}", err2_str)
);
assert_eq!(
format!("{}", Error::RegEx(err_regex.clone())),
format!("Regex failed: {:?}", err_regex),
);
assert_eq!(
format!("{}", Error::ResLimitArgument("foo".to_string())),
"Invalid resource argument: foo",
);
assert_eq!(
format!("{}", Error::ResLimitFormat("foo".to_string())),
"Invalid format for resources limits: foo",
);
assert_eq!(
format!(
"{}",
Error::ResLimitValue("foo".to_string(), "bar".to_string())
),
"Invalid limit value for resource: foo: bar",
);
assert_eq!(
format!("{}", Error::RmOldRootDir(io::Error::from_raw_os_error(42))),
"Failed to remove old jail root directory: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::SetCurrentDir(io::Error::from_raw_os_error(2))),
format!("Failed to change current directory: {}", err2_str),
);
assert_eq!(
format!("{}", Error::SetNetNs(io::Error::from_raw_os_error(42))),
"Failed to join network namespace: netns: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::Setrlimit("foobar".to_string())),
"Failed to set limit for resource: foobar",
);
assert_eq!(
format!("{}", Error::SetSid(io::Error::from_raw_os_error(42))),
"Failed to daemonize: setsid: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::Uid(id.to_string())),
"Invalid uid: foobar",
);
assert_eq!(
format!("{}", Error::UmountOldRoot(io::Error::from_raw_os_error(42))),
"Failed to unmount the old jail root: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::UnexpectedListenerFd(42)),
"Unexpected value for the socket listener fd: 42",
);
assert_eq!(
format!("{}", Error::UnshareNewNs(io::Error::from_raw_os_error(42))),
"Failed to unshare into new mount namespace: No message of desired type (os error 42)",
);
assert_eq!(
format!("{}", Error::UnsetCloexec(io::Error::from_raw_os_error(42))),
"Failed to unset the O_CLOEXEC flag on the socket fd: No message of desired type (os \
error 42)",
);
assert_eq!(
format!(
"{}",
Error::Write(file_path, io::Error::from_raw_os_error(2))
),
format!("Failed to write to /foo/bar: {}", err2_str),
);
}