From adbfa1c12257405112445497324938a011db8664 Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Fri, 25 Sep 2020 02:06:00 +0200 Subject: Update nitrokey to v0.8.0 This patch updates the nitrokey dependency to version 0.8.0 and applies all breaking changes (Config fields renaming, DeviceWrapper and Model non-exhaustiveness, changed Display implementation for Model). --- src/tests/list.rs | 2 +- src/tests/mod.rs | 1 + src/tests/run.rs | 40 ++++++++++++++++++++++++++-------------- src/tests/status.rs | 4 ++-- 4 files changed, 30 insertions(+), 17 deletions(-) (limited to 'src/tests') diff --git a/src/tests/list.rs b/src/tests/list.rs index cc969c6..e9f9506 100644 --- a/src/tests/list.rs +++ b/src/tests/list.rs @@ -17,7 +17,7 @@ fn not_connected() -> anyhow::Result<()> { fn connected(model: nitrokey::Model) -> anyhow::Result<()> { let re = regex::Regex::new( r#"^USB path\tmodel\tserial number -([[:^space:]]+\t(Pro|Storage|unknown)\t0x[[:xdigit:]]+ +([[:^space:]]+\t(Nitrokey Pro|Nitrokey Storage|unknown)\t0x[[:xdigit:]]+ )+$"#, ) .unwrap(); diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 1871f3c..23eecc5 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -78,6 +78,7 @@ impl Nitrocli { match model { nitrokey::Model::Pro => "--model=pro", nitrokey::Model::Storage => "--model=storage", + _ => panic!("Unexpected model in test suite: {}", model), } } diff --git a/src/tests/run.rs b/src/tests/run.rs index b39b1da..c4f8a6b 100644 --- a/src/tests/run.rs +++ b/src/tests/run.rs @@ -7,6 +7,7 @@ use std::collections; use std::ops; use std::path; +use crate::args; use super::*; #[test] @@ -171,34 +172,37 @@ fn connect_wrong_usb_path(_model: nitrokey::Model) { #[test_device] fn connect_model(_model: nitrokey::Model) -> anyhow::Result<()> { + use std::convert::TryInto; + 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; + let _ = model_counts.insert(args::DeviceModel::Pro, 0); + let _ = model_counts.insert(args::DeviceModel::Storage, 0); + for nkmodel in devices.iter().filter_map(|d| d.model) { + let model: args::DeviceModel = nkmodel.try_into().expect("Unexpected Nitrokey model"); + *model_counts.entry(model).or_default() += 1; } for (model, count) in model_counts { - let res = Nitrocli::new().handle(&["status", &format!("--model={}", model.to_lowercase())]); + let res = Nitrocli::new().handle(&["status", &format!("--model={}", model)]); if count == 0 { let err = res.unwrap_err().to_string(); assert_eq!( err, format!( "Nitrokey device not found (filter: model={})", - model.to_lowercase() + model ) ); } else if count == 1 { - assert!(res?.contains(&format!("model: {}\n", model))); + assert!(res?.contains(&format!("model: {}\n", nitrokey::Model::from(model)))); } else { let err = res.unwrap_err().to_string(); assert_eq!( err, format!( "Multiple Nitrokey devices found (filter: model={}). ", - model.to_lowercase() + model ) + "Use the --model, --serial-number, and --usb-path options to select one" ); } @@ -211,11 +215,15 @@ fn connect_model(_model: nitrokey::Model) -> anyhow::Result<()> { fn connect_usb_path_model_serial(_model: nitrokey::Model) -> anyhow::Result<()> { let devices = nitrokey::list_devices()?; for device in devices { + let model: Option = device.model.map(|nkmodel| { + use std::convert::TryInto; + nkmodel.try_into().expect("Unexpected Nitrokey model") + }); let mut args = Vec::new(); args.push("status".to_owned()); args.push(format!("--usb-path={}", device.path)); - if let Some(model) = device.model { - args.push(format!("--model={}", model.to_string().to_lowercase())); + if let Some(model) = model { + args.push(format!("--model={}", model)); } if let Some(sn) = device.serial_number { args.push(format!("--serial-number={}", sn)); @@ -236,22 +244,26 @@ fn connect_usb_path_model_serial(_model: nitrokey::Model) -> anyhow::Result<()> fn connect_usb_path_model_wrong_serial(_model: nitrokey::Model) -> anyhow::Result<()> { let devices = nitrokey::list_devices()?; for device in devices { + let model: Option = device.model.map(|nkmodel| { + use std::convert::TryInto; + nkmodel.try_into().expect("Unexpected Nitrokey model") + }); let mut args = Vec::new(); args.push("status".to_owned()); args.push(format!("--usb-path={}", device.path)); - if let Some(model) = device.model { - args.push(format!("--model={}", model.to_string().to_lowercase())); + if let Some(model) = model { + args.push(format!("--model={}", model)); } args.push("--serial-number=0xdeadbeef".to_owned()); let res = Nitrocli::new().handle(&args.iter().map(ops::Deref::deref).collect::>()); let err = res.unwrap_err().to_string(); - if let Some(model) = device.model { + if let Some(model) = model { assert_eq!( err, format!( "Nitrokey device not found (filter: model={}, serial number in [0xdeadbeef], usb path={})", - model.to_string().to_lowercase(), + model, device.path ) ); diff --git a/src/tests/status.rs b/src/tests/status.rs index ca16121..873bc69 100644 --- a/src/tests/status.rs +++ b/src/tests/status.rs @@ -25,7 +25,7 @@ fn not_found() { fn output_pro(model: nitrokey::Model) -> anyhow::Result<()> { let re = regex::Regex::new( r#"^Status: - model: Pro + model: Nitrokey Pro serial number: 0x[[:xdigit:]]{8} firmware version: v\d+\.\d+ user retry count: [0-3] @@ -43,7 +43,7 @@ $"#, fn output_storage(model: nitrokey::Model) -> anyhow::Result<()> { let re = regex::Regex::new( r#"^Status: - model: Storage + model: Nitrokey Storage serial number: 0x[[:xdigit:]]{8} firmware version: v\d+\.\d+ user retry count: [0-3] -- cgit v1.2.1