mod rc_common;
use cryptoki::context::{CInitializeArgs, CInitializeFlags, Pkcs11};
use cryptoki::session::UserType;
use cryptoki::types::AuthPin;
fn test_re_initialize_common(
dbtype: &str,
) -> Result<(), Box<dyn std::error::Error>> {
let test_name = format!("test_re_initialize_{}", dbtype);
let config_dbtype = format!("dbtype={}", dbtype);
let (pkcs11, slot) = rc_common::setup_token(&test_name, &[&config_dbtype]);
let token_info = pkcs11.get_token_info(slot)?;
let expected_label = token_info.label();
pkcs11.finalize()?;
let module = rc_common::get_module();
let pkcs11 = Pkcs11::new(&module).expect("Failed to load PKCS#11 module");
pkcs11
.initialize(CInitializeArgs::new(CInitializeFlags::OS_LOCKING_OK))
.expect("Failed to re-initialize PKCS#11");
let token_info = pkcs11.get_token_info(slot)?;
assert_eq!(token_info.label(), expected_label);
let session = pkcs11.open_rw_session(slot)?;
let user_pin = AuthPin::new("12345678".into());
session.login(UserType::User, Some(&user_pin))?;
session.logout()?;
Ok(())
}
#[test]
fn test_re_initialize() -> Result<(), Box<dyn std::error::Error>> {
#[cfg(all(feature = "integration_tests", feature = "default"))]
test_re_initialize_common("sqlite")?;
#[cfg(all(feature = "integration_tests", feature = "nssdb"))]
test_re_initialize_common("nssdb")?;
Ok(())
}