//! Integration tests #![forbid(unsafe_code)] #![warn(missing_docs, rust_2018_idioms, trivial_casts, unused_qualifications)] use lazy_static::lazy_static; use log::trace; use std::{env, sync::Mutex}; use yubikey_piv::{key::Key, Error, YubiKey}; lazy_static! { /// Provide thread-safe access to a YubiKey static ref YUBIKEY: Mutex = init_yubikey(); } /// One-time test initialization and setup fn init_yubikey() -> Mutex { // Only show logs if `RUST_LOG` is set if env::var("RUST_LOG").is_ok() { env_logger::builder().format_timestamp(None).init(); } let mut yubikey = YubiKey::open().unwrap(); trace!("serial: {}", yubikey.serial()); trace!("version: {}", yubikey.version()); Mutex::new(yubikey) } // // CCCID support // #[test] #[ignore] fn test_get_cccid() { let mut yubikey = YUBIKEY.lock().unwrap(); match yubikey.cccid() { Ok(cccid) => trace!("CCCID: {:?}", cccid), Err(Error::NotFound) => trace!("CCCID not found"), Err(err) => panic!("error getting CCCID: {:?}", err), } } // // CHUID support // #[test] #[ignore] fn test_get_chuid() { let mut yubikey = YUBIKEY.lock().unwrap(); match yubikey.chuid() { Ok(chuid) => trace!("CHUID: {:?}", chuid), Err(Error::NotFound) => trace!("CHUID not found"), Err(err) => panic!("error getting CHUID: {:?}", err), } } // // Device config support // #[test] #[ignore] fn test_get_config() { let mut yubikey = YUBIKEY.lock().unwrap(); let config_result = yubikey.config(); assert!(config_result.is_ok()); trace!("config: {:?}", config_result.unwrap()); } // // Cryptographic key support // #[test] #[ignore] fn test_list_keys() { let mut yubikey = YUBIKEY.lock().unwrap(); let keys_result = Key::list(&mut yubikey); assert!(keys_result.is_ok()); trace!("keys: {:?}", keys_result.unwrap()); } // // PIN support // #[test] #[ignore] fn test_verify_pin() { let mut yubikey = YUBIKEY.lock().unwrap(); assert!(yubikey.verify_pin(b"000000").is_err()); assert!(yubikey.verify_pin(b"123456").is_ok()); }