use crate::keytypes::User;
use super::utils;
use super::utils::kernel::*;
#[test]
fn have_invalidate() {
let can_test = *HAVE_INVALIDATE;
if !can_test {
eprintln!(
"This kernel does not support key invalidation. Please ignore test failures in \
this test failure."
);
}
}
#[test]
fn invalid_key() {
let key = utils::invalid_key();
let err = key.invalidate().unwrap_err();
assert_eq!(err, errno::Errno(libc::EINVAL));
}
#[test]
fn invalid_keyring() {
let keyring = utils::invalid_keyring();
let err = keyring.invalidate().unwrap_err();
assert_eq!(err, errno::Errno(libc::EINVAL));
}
#[test]
fn unlinked_key() {
let mut keyring = utils::new_test_keyring();
let payload = &b"payload"[..];
let key = keyring
.add_key::<User, _, _>("unlinked_key", payload)
.unwrap();
keyring.unlink_key(&key).unwrap();
utils::wait_for_key_gc(&key);
let err = key.invalidate().unwrap_err();
assert_eq!(err, errno::Errno(libc::ENOKEY));
}
#[test]
fn invalidate_key() {
let mut keyring = utils::new_test_keyring();
{
let (keys, keyrings) = keyring.read().unwrap();
assert!(keys.is_empty());
assert!(keyrings.is_empty());
}
let payload = &b"payload"[..];
let key = keyring
.add_key::<User, _, _>("invalidate_key", payload)
.unwrap();
let key_observer = key.clone();
key.invalidate().unwrap();
utils::wait_for_key_gc(&key_observer);
{
let (keys, keyrings) = keyring.read().unwrap();
assert!(keys.is_empty());
assert!(keyrings.is_empty());
}
}
#[test]
fn invalidate_keyring() {
let mut keyring = utils::new_test_keyring_manual();
{
let (keys, keyrings) = keyring.read().unwrap();
assert!(keys.is_empty());
assert!(keyrings.is_empty());
}
let payload = &b"payload"[..];
let key = keyring
.add_key::<User, _, _>("invalidate_keyring", payload)
.unwrap();
let keyring_observer = keyring.clone();
keyring.invalidate().unwrap();
utils::wait_for_keyring_gc(&keyring_observer);
let err = keyring_observer.read().unwrap_err();
assert_eq!(err, errno::Errno(libc::ENOKEY));
utils::wait_for_key_gc(&key);
let err = key.description().unwrap_err();
assert_eq!(err, errno::Errno(libc::ENOKEY));
}