in src/utils/src/arg_parser.rs [665:953]
fn test_parse() {
let arg_parser = build_arg_parser();
// Test different scenarios for the command line arguments provided by user.
let mut arguments = arg_parser.arguments().clone();
let args = vec!["binary-name", "--exec-file", "foo", "--help"]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert!(arguments.parse(&args).is_ok());
assert!(arguments.args.contains_key("help"));
arguments = arg_parser.arguments().clone();
let args = vec!["binary-name", "--exec-file", "foo", "--version"]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert!(arguments.parse(&args).is_ok());
assert!(arguments.args.contains_key("version"));
arguments = arg_parser.arguments().clone();
let args = vec!["binary-name", "--exec-file", "foo", "--describe-snapshot"]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::MissingValue("describe-snapshot".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--describe-snapshot",
"--",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::MissingValue("describe-snapshot".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--api-sock",
"--id",
"bar",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::MissingValue("api-sock".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--api-sock",
"bar",
"--api-sock",
"foobar",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::DuplicateArgument("api-sock".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec!["binary-name", "--api-sock", "foo"]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::MissingArgument("exec-file".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--api-sock",
"bar",
"--invalid-arg",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::UnexpectedArgument("invalid-arg".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--api-sock",
"bar",
"--id",
"foobar",
"--no-api",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::MissingArgument("config-file".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--api-sock",
"bar",
"--id",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::MissingValue("id".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--config-file",
"bar",
"--no-api",
"foobar",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::UnexpectedArgument("foobar".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--api-sock",
"bar",
"--id",
"foobar",
"--seccomp-filter",
"0",
"--no-seccomp",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::ForbiddenArgument(
"no-seccomp".to_string(),
"seccomp-filter".to_string(),
))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--api-sock",
"bar",
"--id",
"foobar",
"--no-seccomp",
"--seccomp-filter",
"0",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::ForbiddenArgument(
"no-seccomp".to_string(),
"seccomp-filter".to_string(),
))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--api-sock",
"bar",
"foobar",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::UnexpectedArgument("foobar".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec!["binary-name", "foo"]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert_eq!(
arguments.parse(&args),
Err(Error::UnexpectedArgument("foo".to_string()))
);
arguments = arg_parser.arguments().clone();
let args = vec![
"binary-name",
"--exec-file",
"foo",
"--api-sock",
"bar",
"--id",
"foobar",
"--seccomp-filter",
"0",
"--",
"--extra-flag",
]
.into_iter()
.map(String::from)
.collect::<Vec<String>>();
assert!(arguments.parse(&args).is_ok());
assert!(arguments.extra_args.contains(&"--extra-flag".to_string()));
}