diff options
| author | Robin Krahl <robin.krahl@ireas.org> | 2018-05-28 22:02:10 +0000 | 
|---|---|---|
| committer | Robin Krahl <robin.krahl@ireas.org> | 2018-05-29 00:03:56 +0200 | 
| commit | 89b8a947e5c622272362e967847eb19337aa68da (patch) | |
| tree | ccbd24b53b4a98312247a304b51774fac2e3b685 /src/tests | |
| parent | f58400a22986cdedf34f85dc17d1d59335ffb404 (diff) | |
| download | nitrokey-rs-89b8a947e5c622272362e967847eb19337aa68da.tar.gz nitrokey-rs-89b8a947e5c622272362e967847eb19337aa68da.tar.bz2 | |
Add rudimentary support for the Nitrokey Storage
This patch adds the Storage struct and the test-storage feature.  It
also enables all currently supported Pro commands for the Storage.
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/device.rs | 51 | ||||
| -rw-r--r-- | src/tests/otp.rs | 29 | ||||
| -rw-r--r-- | src/tests/util.rs | 9 | 
3 files changed, 52 insertions, 37 deletions
| diff --git a/src/tests/device.rs b/src/tests/device.rs index 394861c..80541d4 100644 --- a/src/tests/device.rs +++ b/src/tests/device.rs @@ -1,6 +1,6 @@  use std::ffi::CStr; -use {Authenticate, CommandError, CommandStatus, Config, Device, Pro}; -use tests::util::{ADMIN_PASSWORD, USER_PASSWORD}; +use {Authenticate, CommandError, CommandStatus, Config, Device}; +use tests::util::{Target, ADMIN_PASSWORD, USER_PASSWORD};  static ADMIN_NEW_PASSWORD: &str = "1234567890";  static USER_NEW_PASSWORD: &str = "abcdefghij"; @@ -10,17 +10,23 @@ static USER_NEW_PASSWORD: &str = "abcdefghij";  fn connect_no_device() {      assert!(::connect().is_err());      assert!(::Pro::connect().is_err()); -    // TODO: test storage -    // assert!(::Storage::connect().is_err()); +    assert!(::Storage::connect().is_err());  }  #[test]  #[cfg_attr(not(feature = "test-pro"), ignore)]  fn connect_pro() {      assert!(::connect().is_ok()); -    assert!(Pro::connect().is_ok()); -    // TODO: test storage -    // assert!(::Storage::connect().is_err()); +    assert!(::Pro::connect().is_ok()); +    assert!(::Storage::connect().is_err()); +} + +#[test] +#[cfg_attr(not(feature = "test-storage"), ignore)] +fn connect_storage() { +    assert!(::connect().is_ok()); +    assert!(::Pro::connect().is_err()); +    assert!(::Storage::connect().is_ok());  }  fn assert_empty_serial_number() { @@ -33,16 +39,16 @@ fn assert_empty_serial_number() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn disconnect() { -    ::connect().unwrap(); +    Target::connect().unwrap();      assert_empty_serial_number(); -    ::connect() +    Target::connect()          .unwrap()          .authenticate_admin(ADMIN_PASSWORD)          .unwrap();      assert_empty_serial_number(); -    ::connect() +    Target::connect()          .unwrap()          .authenticate_user(USER_PASSWORD)          .unwrap(); @@ -50,9 +56,9 @@ fn disconnect() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn get_serial_number() { -    let device = ::connect().unwrap(); +    let device = Target::connect().unwrap();      let result = device.get_serial_number();      assert!(result.is_ok());      let serial_number = result.unwrap(); @@ -61,8 +67,9 @@ fn get_serial_number() {  }  #[test]  #[cfg_attr(not(feature = "test-pro"), ignore)] +// TODO: adapt for storage  fn get_firmware_version() { -    let device = ::connect().unwrap(); +    let device = Target::connect().unwrap();      assert_eq!(0, device.get_major_firmware_version());      let minor = device.get_minor_firmware_version();      assert!(minor == 7 || minor == 8); @@ -89,9 +96,9 @@ fn user_retry<T: Authenticate + Device>(device: T, suffix: &str, count: u8) -> T  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn get_retry_count() { -    let device = ::connect().unwrap(); +    let device = Target::connect().unwrap();      let device = admin_retry(device, "", 3);      let device = admin_retry(device, "123", 2); @@ -105,9 +112,9 @@ fn get_retry_count() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn config() { -    let device = ::connect().unwrap(); +    let device = Target::connect().unwrap();      let admin = device.authenticate_admin(ADMIN_PASSWORD).unwrap();      let config = Config::new(None, None, None, true);      assert_eq!(CommandStatus::Success, admin.write_config(config)); @@ -132,9 +139,9 @@ fn config() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn change_user_pin() { -    let device = ::connect().unwrap(); +    let device = Target::connect().unwrap();      let device = device.authenticate_user(USER_PASSWORD).unwrap().device();      let device = device.authenticate_user(USER_NEW_PASSWORD).unwrap_err().0; @@ -158,9 +165,9 @@ fn change_user_pin() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn change_admin_pin() { -    let device = ::connect().unwrap(); +    let device = Target::connect().unwrap();      let device = device.authenticate_admin(ADMIN_PASSWORD).unwrap().device();      let device = device.authenticate_admin(ADMIN_NEW_PASSWORD).unwrap_err().0; diff --git a/src/tests/otp.rs b/src/tests/otp.rs index e96bbfe..10f569d 100644 --- a/src/tests/otp.rs +++ b/src/tests/otp.rs @@ -1,7 +1,7 @@  use std::ops::Deref; -use {Admin, Authenticate, CommandError, CommandStatus, Config, ConfigureOtp, DeviceWrapper, GenerateOtp, +use {Admin, Authenticate, CommandError, CommandStatus, Config, ConfigureOtp, GenerateOtp,       OtpMode, OtpSlotData}; -use tests::util::{ADMIN_PASSWORD, USER_PASSWORD}; +use tests::util::{Target, ADMIN_PASSWORD, USER_PASSWORD};  // test suite according to RFC 4226, Appendix D  static HOTP_SECRET: &str = "3132333435363738393031323334353637383930"; @@ -21,8 +21,8 @@ static TOTP_CODES: &[(u64, &str)] = &[      (20000000000, "65353130"),  ]; -fn get_admin_test_device() -> Admin<DeviceWrapper> { -    ::connect().expect("Could not connect to the Nitrokey Pro.") +fn get_admin_test_device() -> Admin<Target> { +    Target::connect().expect("Could not connect to the Nitrokey Pro.")          .authenticate_admin(ADMIN_PASSWORD)          .expect("Could not login as admin.")  } @@ -40,7 +40,7 @@ fn check_hotp_codes(device: &GenerateOtp) {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn hotp_no_pin() {      let admin = get_admin_test_device();      let config = Config::new(None, None, None, false); @@ -54,7 +54,7 @@ fn hotp_no_pin() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn hotp_pin() {      let admin = get_admin_test_device();      let config = Config::new(None, None, None, true); @@ -68,7 +68,7 @@ fn hotp_pin() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn hotp_slot_name() {      let admin = get_admin_test_device();      let slot_data = OtpSlotData::new(1, "test-hotp", HOTP_SECRET, OtpMode::SixDigits); @@ -82,7 +82,7 @@ fn hotp_slot_name() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn hotp_error() {      let admin = get_admin_test_device();      let slot_data = OtpSlotData::new(1, "", HOTP_SECRET, OtpMode::SixDigits); @@ -100,7 +100,7 @@ fn hotp_error() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn hotp_erase() {      let admin = get_admin_test_device();      let config = Config::new(None, None, None, false); @@ -141,7 +141,7 @@ fn check_totp_codes(device: &GenerateOtp) {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn totp_no_pin() {      // TODO: this test may fail due to bad timing --> find solution      let admin = get_admin_test_device(); @@ -156,7 +156,7 @@ fn totp_no_pin() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn totp_pin() {      // TODO: this test may fail due to bad timing --> find solution      let admin = get_admin_test_device(); @@ -171,7 +171,7 @@ fn totp_pin() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn totp_slot_name() {      let admin = get_admin_test_device();      let slot_data = OtpSlotData::new(1, "test-totp", TOTP_SECRET, OtpMode::EightDigits); @@ -186,7 +186,7 @@ fn totp_slot_name() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn totp_error() {      let admin = get_admin_test_device();      let slot_data = OtpSlotData::new(1, "", HOTP_SECRET, OtpMode::SixDigits); @@ -204,7 +204,7 @@ fn totp_error() {  }  #[test] -#[cfg_attr(not(feature = "test-pro"), ignore)] +#[cfg_attr(not(any(feature = "test-pro", feature = "test-storage")), ignore)]  fn totp_erase() {      let admin = get_admin_test_device();      let config = Config::new(None, None, None, false); @@ -224,4 +224,3 @@ fn totp_erase() {      assert_eq!("test2", device.get_totp_slot_name(2).unwrap());  } - diff --git a/src/tests/util.rs b/src/tests/util.rs index cbf6b93..c6fbb8f 100644 --- a/src/tests/util.rs +++ b/src/tests/util.rs @@ -1,2 +1,11 @@  pub static ADMIN_PASSWORD: &str = "12345678";  pub static USER_PASSWORD: &str = "123456"; + +#[cfg(feature = "test-no-device")] +pub type Target = ::Pro; + +#[cfg(feature = "test-pro")] +pub type Target = ::Pro; + +#[cfg(feature = "test-storage")] +pub type Target = ::Storage; | 
