blob: 3075d8a85f8b604decc86c45f23a25d537383a25 [file] [log] [blame]
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//! Tests of individual AuthGraph role (source or sink) functionality.
#![cfg(test)]
use authgraph_vts_test as vts;
use android_hardware_security_authgraph::aidl::android::hardware::security::authgraph::{
IAuthGraphKeyExchange::IAuthGraphKeyExchange,
};
use binder::StatusCode;
const AUTH_GRAPH_NONSECURE: &str =
"android.hardware.security.authgraph.IAuthGraphKeyExchange/nonsecure";
/// Retrieve the /nonsecure instance of AuthGraph, which supports both sink and source roles.
fn get_nonsecure() -> Option<binder::Strong<dyn IAuthGraphKeyExchange>> {
match binder::get_interface(AUTH_GRAPH_NONSECURE) {
Ok(ag) => Some(ag),
Err(StatusCode::NAME_NOT_FOUND) => None,
Err(e) => panic!("failed to get AuthGraph/nonsecure: {e:?}"),
}
}
/// Macro to require availability of a /nonsecure instance of AuthGraph.
///
/// Note that this macro triggers `return` if not found.
macro_rules! require_nonsecure {
{} => {
match get_nonsecure() {
Some(v) => v,
None => {
eprintln!("Skipping test as no /nonsecure impl found");
return;
}
}
}
}
#[test]
fn test_nonsecure_source_mainline() {
let mut sink = vts::test_ag_participant().expect("failed to create a local sink");
vts::source::test_mainline(&mut sink, require_nonsecure!());
}
#[test]
fn test_nonsecure_source_corrupt_sig() {
let mut sink = vts::test_ag_participant().expect("failed to create a local sink");
vts::source::test_corrupt_sig(&mut sink, require_nonsecure!());
}
#[test]
fn test_nonsecure_source_corrupt_keys() {
let mut sink = vts::test_ag_participant().expect("failed to create a local sink");
vts::source::test_corrupt_key(&mut sink, require_nonsecure!());
}
#[test]
fn test_nonsecure_sink_mainline() {
let mut source = vts::test_ag_participant().expect("failed to create a local source");
vts::sink::test_mainline(&mut source, require_nonsecure!());
}
#[test]
fn test_nonsecure_sink_corrupt_sig() {
let mut source = vts::test_ag_participant().expect("failed to create a local source");
vts::sink::test_corrupt_sig(&mut source, require_nonsecure!());
}
#[test]
fn test_nonsecure_sink_corrupt_keys() {
let mut source = vts::test_ag_participant().expect("failed to create a local source");
vts::sink::test_corrupt_keys(&mut source, require_nonsecure!());
}