use crate::keytypes::User;
use crate::Keyring;
use super::utils;
#[test]
fn invalid_keyring() {
let mut keyring = utils::invalid_keyring();
let err = keyring.clear().unwrap_err();
assert_eq!(err, errno::Errno(libc::EINVAL));
}
#[test]
fn clear_non_keyring() {
let mut keyring = utils::new_test_keyring();
let key = keyring
.add_key::<User, _, _>("clear_non_keyring", &b"payload"[..])
.unwrap();
let mut not_a_keyring = unsafe { Keyring::new(key.serial()) };
let err = not_a_keyring.clear().unwrap_err();
assert_eq!(err, errno::Errno(libc::ENOTDIR));
keyring.unlink_key(&key).unwrap();
}
#[test]
fn clear_deleted_keyring() {
let mut keyring = utils::new_test_keyring();
let mut sub_keyring = keyring.add_keyring("clear_deleted_keyring").unwrap();
keyring.unlink_keyring(&sub_keyring).unwrap();
loop {
let err = sub_keyring.clear().unwrap_err();
if err == errno::Errno(libc::EACCES) {
continue;
}
assert_eq!(err, errno::Errno(libc::ENOKEY));
break;
}
}
#[test]
fn clear_empty_keyring() {
let mut keyring = utils::new_test_keyring();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 0);
assert_eq!(keyrings.len(), 0);
keyring.clear().unwrap();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 0);
assert_eq!(keyrings.len(), 0);
}
#[test]
fn clear_keyring_one_key() {
let mut keyring = utils::new_test_keyring();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 0);
assert_eq!(keyrings.len(), 0);
let key_desc = "clear_keyring:key";
let payload = &b"payload"[..];
keyring.add_key::<User, _, _>(key_desc, payload).unwrap();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 1);
assert_eq!(keyrings.len(), 0);
assert_eq!(keys[0].description().unwrap().description, key_desc);
keyring.clear().unwrap();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 0);
assert_eq!(keyrings.len(), 0);
}
#[test]
fn clear_keyring_many_keys() {
let mut keyring = utils::new_test_keyring();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 0);
assert_eq!(keyrings.len(), 0);
let count = 40;
let payload = &b"payload"[..];
let mut descs = Vec::with_capacity(count);
for i in 0..count {
let key_desc = format!("clear_keyring:key{:02}", i);
keyring
.add_key::<User, _, _>(key_desc.as_ref(), payload)
.unwrap();
descs.push(key_desc);
}
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), count);
assert_eq!(keyrings.len(), 0);
let mut actual_descs = keys
.iter()
.map(|key| key.description().unwrap().description)
.collect::<Vec<_>>();
actual_descs.sort();
assert_eq!(actual_descs, descs);
keyring.clear().unwrap();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 0);
assert_eq!(keyrings.len(), 0);
}
#[test]
fn clear_keyring_keyring() {
let mut keyring = utils::new_test_keyring();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 0);
assert_eq!(keyrings.len(), 0);
let keyring_desc = "clear_keyring:keyring";
keyring.add_keyring(keyring_desc).unwrap();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 0);
assert_eq!(keyrings.len(), 1);
assert_eq!(keyrings[0].description().unwrap().description, keyring_desc);
keyring.clear().unwrap();
let (keys, keyrings) = keyring.read().unwrap();
assert_eq!(keys.len(), 0);
assert_eq!(keyrings.len(), 0);
}