aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mueller <deso@posteo.net>2020-01-24 20:36:34 -0800
committerDaniel Mueller <deso@posteo.net>2020-01-24 20:36:34 -0800
commit61b5aff7be250387ce8510138cae773ed3bd6577 (patch)
tree2ab4e1bd660651dda6ef4c8af3c6ccf037c93a3d
parent86401187fc26b6f3a41cbd4cec463c4ffe50c32c (diff)
downloadnitrocli-61b5aff7be250387ce8510138cae773ed3bd6577.tar.gz
nitrocli-61b5aff7be250387ce8510138cae773ed3bd6577.tar.bz2
Provide correct mutual exclusion between config set -o and -O options
The -o/--otp-pin and -O/--no-otp-pin options to the config set command are supposed to be mutually exclusive, with wrong usage detected by structopt. That is not the case currently, however, because the argument to structopt's conflicts_with attribute is supposed to be the resulting option and not the name of the variable capturing the result. This change fixes the problem by changing the string accordingly.
-rw-r--r--src/args.rs2
-rw-r--r--src/tests/config.rs17
2 files changed, 18 insertions, 1 deletions
diff --git a/src/args.rs b/src/args.rs
index 91bddc5..57e9743 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -172,7 +172,7 @@ struct ConfigSetArgs {
#[structopt(short = "o", long)]
otp_pin: bool,
/// Allows one-time password generation without PIN
- #[structopt(short = "O", long, conflicts_with("otp_pin"))]
+ #[structopt(short = "O", long, conflicts_with("otp-pin"))]
no_otp_pin: bool,
}
diff --git a/src/tests/config.rs b/src/tests/config.rs
index 728fdbd..fa311d5 100644
--- a/src/tests/config.rs
+++ b/src/tests/config.rs
@@ -19,6 +19,23 @@
use super::*;
+#[test]
+fn mutually_exclusive_set_options() {
+ fn test(option1: &str, option2: &str) {
+ let (rc, out, err) = Nitrocli::new().run(&["config", "set", option1, option2]);
+
+ assert_ne!(rc, 0);
+ assert_eq!(out, b"");
+
+ let err = String::from_utf8(err).unwrap();
+ assert!(err.contains("cannot be used with"), err);
+ }
+
+ test("-c", "-C");
+ test("-o", "-O");
+ test("-s", "-S");
+}
+
#[test_device]
fn get(model: nitrokey::Model) -> crate::Result<()> {
let re = regex::Regex::new(