use crate::keytypes::{Keyring, User};
use crate::{Key, KeyType, Permission};
use super::utils;
use super::utils::kernel::*;
#[test]
fn invalid_key() {
let key = utils::invalid_key();
let err = key.description().unwrap_err();
assert_eq!(err, errno::Errno(libc::EINVAL));
}
#[test]
fn invalid_keyring() {
let keyring = utils::invalid_keyring();
let err = keyring.description().unwrap_err();
assert_eq!(err, errno::Errno(libc::EINVAL));
}
#[test]
fn non_existent_key() {
let mut keyring = utils::new_test_keyring();
let key = keyring
.add_key::<User, _, _>("non_existent_key", &b"payload"[..])
.unwrap();
keyring.unlink_key(&key).unwrap();
utils::wait_for_key_gc(&key);
}
#[test]
fn describe_keyring() {
let mut keyring = utils::new_test_keyring();
let description = "describe_keyring";
let keyring = keyring.add_keyring(description).unwrap();
let perms = Permission::POSSESSOR_ALL | Permission::USER_VIEW;
let desc = keyring.description().unwrap();
assert_eq!(desc.type_, Keyring::name());
assert_eq!(desc.uid, *UID);
assert_eq!(desc.gid, *GID);
assert_eq!(desc.perms, perms);
assert_eq!(desc.description, description);
keyring.invalidate().unwrap()
}
#[test]
fn describe_key() {
let mut keyring = utils::new_test_keyring();
let description = "describe_key";
let key = keyring
.add_key::<User, _, _>(description, &b"payload"[..])
.unwrap();
let perms = Permission::POSSESSOR_ALL | Permission::USER_VIEW;
let desc = key.description().unwrap();
assert_eq!(desc.type_, User::name());
assert_eq!(desc.uid, *UID);
assert_eq!(desc.gid, *GID);
assert_eq!(desc.perms, perms);
assert_eq!(desc.description, description);
}
#[test]
fn describe_key_no_perm() {
let mut keyring = utils::new_test_keyring();
let description = "describe_key_no_perm";
let mut key = keyring
.add_key::<User, _, _>(description, &b"payload"[..])
.unwrap();
let old_perms = key.description().unwrap().perms;
let perms = {
let mut perms = old_perms;
let view_bits = Permission::POSSESSOR_VIEW | Permission::USER_VIEW;
perms.remove(view_bits);
perms
};
key.set_permissions(perms).unwrap();
let err = key.description().unwrap_err();
assert_eq!(err, errno::Errno(libc::EACCES));
}
#[test]
fn describe_revoked_key() {
let mut keyring = utils::new_test_keyring();
let key = keyring
.add_key::<User, _, _>("describe_revoked_key", &b"payload"[..])
.unwrap();
let key_mirror = unsafe { Key::new(key.serial()) };
key.revoke().unwrap();
let err = key_mirror.description().unwrap_err();
assert_eq!(err, errno::Errno(libc::EKEYREVOKED));
}