blob: 2e05e16837f6f87530259f2956adb2c13387b632 [file] [log] [blame]
use core::ptr;
use std::io;
use assert_matches::assert_matches;
use serial_test::serial;
#[test]
fn security_id_default() {
let mut sid = super::SecurityID::default();
assert!(sid.is_unspecified());
assert!(!sid.is_raw_format());
assert!(sid.as_ptr().is_null());
assert!(sid.as_mut_ptr().is_null());
let _ignored = format!("{:?}", &sid);
}
#[serial]
#[test]
fn access_vector_cache_initialize() {
match super::AccessVectorCache::initialize(&[]) {
Ok(avc) => {
let _ignored = format!("{avc:?}");
}
Err(err) => {
assert_matches!(err, crate::errors::Error::IO { .. });
if let crate::errors::Error::IO { source, .. } = err {
assert_eq!(source.kind(), io::ErrorKind::NotFound);
}
}
}
let options = &[(selinux_sys::AVC_OPT_SETENFORCE, ptr::null())];
match super::AccessVectorCache::initialize(options) {
Ok(avc) => {
let _ignored = format!("{avc:?}");
}
Err(err) => {
assert_matches!(err, crate::errors::Error::IO { .. });
if let crate::errors::Error::IO { source, .. } = err {
assert_eq!(source.kind(), io::ErrorKind::NotFound);
}
}
}
if let Ok(avc0) = super::AccessVectorCache::initialize(options) {
if let Ok(avc1) = super::AccessVectorCache::initialize(options) {
if let Ok(avc2) = super::AccessVectorCache::initialize(&[(
selinux_sys::AVC_OPT_SETENFORCE,
ptr::null(),
)]) {
assert_eq!(avc0, avc1);
assert_eq!(avc0, avc2);
super::AccessVectorCache::initialize(&[]).unwrap_err();
}
}
}
}
#[serial]
#[test]
fn access_vector_cache_reset() {
let options = &[(selinux_sys::AVC_OPT_SETENFORCE, ptr::null())];
let avc = super::AccessVectorCache::initialize(options).unwrap();
avc.reset().unwrap();
}
#[serial]
#[test]
fn access_vector_cache_clean_up() {
let options = &[(selinux_sys::AVC_OPT_SETENFORCE, ptr::null())];
let avc = super::AccessVectorCache::initialize(options).unwrap();
avc.clean_up();
}
#[serial]
#[test]
fn access_vector_cache_kernel_initial_security_id() {
let options = &[(selinux_sys::AVC_OPT_SETENFORCE, ptr::null())];
let avc = super::AccessVectorCache::initialize(options).unwrap();
match avc.kernel_initial_security_id("unlabeled", false) {
Ok(mut sid) => {
assert_eq!(sid.as_ptr(), sid.as_mut_ptr());
assert!(!sid.is_raw_format());
assert!(!sid.is_unspecified());
let mut context = avc.security_context_from_security_id(sid).unwrap();
assert!(!context.is_raw_format());
assert_eq!(context.as_ptr(), context.as_mut_ptr());
assert!(!context.as_bytes().is_empty());
let _ignored = avc.security_id_from_security_context(context).unwrap();
}
Err(err) => {
assert_matches!(err, crate::errors::Error::IO { .. });
if let crate::errors::Error::IO { source, .. } = err {
assert_eq!(source.kind(), io::ErrorKind::NotFound);
}
}
}
match avc.kernel_initial_security_id("unlabeled", true) {
Ok(mut sid) => {
assert_eq!(sid.as_ptr(), sid.as_mut_ptr());
assert!(sid.is_raw_format());
assert!(!sid.is_unspecified());
let mut context = avc.security_context_from_security_id(sid).unwrap();
assert!(context.is_raw_format());
assert_eq!(context.as_ptr(), context.as_mut_ptr());
assert!(!context.as_bytes().is_empty());
let _ignored = avc.security_id_from_security_context(context).unwrap();
}
Err(err) => {
assert_matches!(err, crate::errors::Error::IO { .. });
if let crate::errors::Error::IO { source, .. } = err {
assert_eq!(source.kind(), io::ErrorKind::NotFound);
}
}
}
}