diff options
-rw-r--r-- | src/tests/run.rs | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/tests/run.rs b/src/tests/run.rs index 4d470f6..4f53608 100644 --- a/src/tests/run.rs +++ b/src/tests/run.rs @@ -3,6 +3,7 @@ // Copyright (C) 2019-2020 The Nitrocli Developers // SPDX-License-Identifier: GPL-3.0-or-later +use std::collections; use std::path; use super::*; @@ -106,3 +107,75 @@ fn config_file() { assert_eq!(true, config.no_cache); assert_eq!(2, config.verbosity); } + +#[test_device] +fn connect_multiple(_model: nitrokey::Model) -> anyhow::Result<()> { + let devices = nitrokey::list_devices()?; + if devices.len() > 1 { + let res = Nitrocli::new().handle(&["status"]); + let err = res.unwrap_err().to_string(); + assert_eq!( + err, + "Multiple Nitrokey devices found. Use the --model and --serial-number options to select one" + ); + } + Ok(()) +} + +#[test_device] +fn connect_serial_number(_model: nitrokey::Model) -> anyhow::Result<()> { + let devices = nitrokey::list_devices()?; + for serial_number in devices.iter().filter_map(|d| d.serial_number) { + let res = Nitrocli::new().handle(&["status", &format!("--serial-number={}", serial_number)])?; + assert!(res.contains(&format!("serial number: {}\n", serial_number))); + } + Ok(()) +} + +#[test_device] +fn connect_wrong_serial_number(_model: nitrokey::Model) { + let res = Nitrocli::new().handle(&["status", "--serial-number=0xdeadbeef"]); + let err = res.unwrap_err().to_string(); + assert_eq!( + err, + "Nitrokey device not found (filter: serial number in [0xdeadbeef])" + ); +} + +#[test_device] +fn connect_model(_model: nitrokey::Model) -> anyhow::Result<()> { + let devices = nitrokey::list_devices()?; + let mut model_counts = collections::BTreeMap::new(); + let _ = model_counts.insert(nitrokey::Model::Pro.to_string(), 0); + let _ = model_counts.insert(nitrokey::Model::Storage.to_string(), 0); + for model in devices.iter().filter_map(|d| d.model) { + *model_counts.entry(model.to_string()).or_default() += 1; + } + + for (model, count) in model_counts { + let res = Nitrocli::new().handle(&["status", &format!("--model={}", model.to_lowercase())]); + if count == 0 { + let err = res.unwrap_err().to_string(); + assert_eq!( + err, + format!( + "Nitrokey device not found (filter: model={})", + model.to_lowercase() + ) + ); + } else if count == 1 { + assert!(res?.contains(&format!("model: {}\n", model))); + } else { + let err = res.unwrap_err().to_string(); + assert_eq!( + err, + format!( + "Multiple Nitrokey devices found (filter: model={}). ", + model.to_lowercase() + ) + "Use the --model and --serial-number options to select one" + ); + } + } + + Ok(()) +} |