blob: 2b7cb5276ba489d20222ec656038db71a9310b89 [file] [log] [blame]
#![feature(cfg_version)]
// C string literals were stabilized in Rust 1.77
#![cfg_attr(not(version("1.77")), feature(c_str_literals))]
#[cfg(test)]
mod unittests;
#[cfg(test)]
mod tests {
use crate::define_tests_for;
use android_hardware_security_see_storage::aidl::android::hardware::security::see::storage::{
FileAvailability::FileAvailability, FileIntegrity::FileIntegrity,
FileProperties::FileProperties, ISecureStorage::ISecureStorage,
IStorageSession::IStorageSession,
};
use binder::{Status, StatusCode, Strong};
use core::ffi::CStr;
use rpcbinder::RpcSession;
use test::assert_ok;
//This line is needed in order to run the unit tests in Trusty
test::init!();
fn connect() -> Result<Strong<dyn ISecureStorage>, StatusCode> {
const STORAGE_AIDL_PORT_NAME: &CStr = c"com.android.hardware.security.see.storage";
RpcSession::new().setup_trusty_client(STORAGE_AIDL_PORT_NAME)
}
fn start_session(properties: &FileProperties) -> Result<Strong<dyn IStorageSession>, Status> {
connect()?.startSession(properties)
}
#[test]
fn ping() {
use binder::IBinder as _;
let secure_storage = assert_ok!(connect());
assert_ok!(secure_storage.as_binder().ping_binder());
}
const TP: &'static FileProperties = &FileProperties {
integrity: FileIntegrity::TAMPER_PROOF_AT_REST,
availability: FileAvailability::AFTER_USERDATA,
persistent: false,
};
const TDEA: &'static FileProperties = &FileProperties {
integrity: FileIntegrity::TAMPER_DETECT,
availability: FileAvailability::BEFORE_USERDATA,
persistent: false,
};
#[cfg(feature = "has_ns")]
const TDP: &'static FileProperties = &FileProperties {
integrity: FileIntegrity::TAMPER_DETECT,
availability: FileAvailability::AFTER_USERDATA,
persistent: true,
};
#[cfg(feature = "has_ns")]
const TD: &'static FileProperties = &FileProperties {
integrity: FileIntegrity::TAMPER_DETECT,
availability: FileAvailability::AFTER_USERDATA,
persistent: false,
};
define_tests_for!(tp, TP);
define_tests_for!(tdea, TDEA);
#[cfg(feature = "has_ns")]
define_tests_for!(tdp, TDP);
#[cfg(feature = "has_ns")]
define_tests_for!(td, TD);
#[macro_export]
macro_rules! define_tests_for {
($mod_name:ident, $file_properties:ident) => {
mod $mod_name {
use super::$file_properties;
use test::assert_ok;
use $crate::{tests::start_session, unittests};
#[test]
fn create_delete() {
let ss = assert_ok!(start_session($file_properties));
unittests::create_delete(&*ss);
}
#[test]
fn create_move_delete() {
let ss = assert_ok!(start_session($file_properties));
unittests::create_move_delete(&*ss);
}
#[test]
fn file_list() {
let ss = assert_ok!(start_session($file_properties));
unittests::file_list(&*ss);
}
#[test]
fn write_read_sequential() {
let ss = assert_ok!(start_session($file_properties));
unittests::write_read_sequential(&*ss);
}
}
};
}
}