Re-structured keystore test-utils module.
- Created separate build file.
- Moved ffi-utils from keystore2-client-tests to test-utils.
- Updated calling apis.
Test: atest keystore2_client_tests; atest keystore2_test_utils_test;
atest keystore2_test
Bug: 194359114
Change-Id: Ia2404218b7d13a9ae43b3fc4e481899576d24e63
diff --git a/keystore2/Android.bp b/keystore2/Android.bp
index a47c2c2..b8db7c6 100644
--- a/keystore2/Android.bp
+++ b/keystore2/Android.bp
@@ -78,27 +78,6 @@
}
rust_library {
- name: "libkeystore2_test_utils",
- crate_name: "keystore2_test_utils",
- srcs: ["test_utils/lib.rs"],
- defaults: [
- "keymint_use_latest_hal_aidl_rust",
- "keystore2_use_latest_aidl_rust",
- ],
- rustlibs: [
- "libbinder_rs",
- "libkeystore2_selinux",
- "liblog_rust",
- "libnix",
- "librand",
- "libserde",
- "libserde_cbor",
- "libthiserror",
- "libanyhow",
- ],
-}
-
-rust_library {
name: "libkeystore2_with_test_utils",
defaults: ["libkeystore2_defaults"],
features: [
@@ -112,30 +91,6 @@
}
rust_test {
- name: "keystore2_test_utils_test",
- srcs: ["test_utils/lib.rs"],
- defaults: [
- "keymint_use_latest_hal_aidl_rust",
- "keystore2_use_latest_aidl_rust",
- ],
- test_suites: ["general-tests"],
- require_root: true,
- auto_gen_config: true,
- compile_multilib: "first",
- rustlibs: [
- "libbinder_rs",
- "libkeystore2_selinux",
- "liblog_rust",
- "libnix",
- "librand",
- "libserde",
- "libserde_cbor",
- "libthiserror",
- "libanyhow",
- ],
-}
-
-rust_test {
name: "keystore2_test",
crate_name: "keystore2",
test_suites: ["general-tests"],
diff --git a/keystore2/test_utils/Android.bp b/keystore2/test_utils/Android.bp
new file mode 100644
index 0000000..eb04209
--- /dev/null
+++ b/keystore2/test_utils/Android.bp
@@ -0,0 +1,122 @@
+// Copyright 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.
+
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "system_security_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["system_security_license"],
+}
+
+rust_defaults {
+ name: "libkeystore2_test_utils_defaults",
+ defaults: [
+ "keymint_use_latest_hal_aidl_rust",
+ "keystore2_use_latest_aidl_rust",
+ ],
+ rustlibs: [
+ "libanyhow",
+ "libbinder_rs",
+ "libcxx",
+ "libkeystore2_selinux",
+ "liblog_rust",
+ "libnix",
+ "librand",
+ "libserde",
+ "libserde_cbor",
+ "libthiserror",
+ ],
+ static_libs: [
+ "libgtest",
+ "libkeymint_vts_test_utils",
+ "libkeystore2_ffi_test_utils",
+ ],
+ shared_libs: [
+ // libkeymint_vts_test_utils needs to be static for atest,
+ // and that pulls in keymint shared lib dependency
+ "android.hardware.security.keymint-V3-ndk",
+ "libbase",
+ "libbinder",
+ "libbinder_ndk",
+ "libcppbor_external",
+ "libcppcose_rkp",
+ "libcrypto",
+ "libcutils",
+ "libkeymaster_messages",
+ "libkeymaster_portable",
+ "libkeymint_remote_prov_support",
+ "libkeymint_support",
+ "libkeystore-engine",
+ "libutils",
+ "packagemanager_aidl-cpp",
+ ],
+}
+
+rust_library {
+ name: "libkeystore2_test_utils",
+ crate_name: "keystore2_test_utils",
+ srcs: ["lib.rs"],
+ defaults: ["libkeystore2_test_utils_defaults"],
+}
+
+rust_test {
+ name: "keystore2_test_utils_test",
+ srcs: ["lib.rs"],
+ defaults: ["libkeystore2_test_utils_defaults"],
+ test_suites: ["general-tests"],
+ require_root: true,
+ auto_gen_config: true,
+ compile_multilib: "first",
+}
+
+cc_library_static {
+ name: "libkeystore2_ffi_test_utils",
+ srcs: ["ffi_test_utils.cpp"],
+ defaults: [
+ "keymint_vts_defaults",
+ "hidl_defaults",
+ ],
+ generated_headers: [
+ "cxx-bridge-header",
+ "libkeystore2_ffi_test_utils_bridge_header",
+ ],
+ generated_sources: ["libkeystore2_ffi_test_utils_bridge_code"],
+ static_libs: [
+ "libkeymint_vts_test_utils",
+ ],
+ shared_libs: [
+ "libcppbor_external",
+ "libkeymaster_messages",
+ "libkeymaster_portable",
+ "libkeystore-engine",
+ ],
+}
+
+genrule {
+ name: "libkeystore2_ffi_test_utils_bridge_code",
+ tools: ["cxxbridge"],
+ cmd: "$(location cxxbridge) $(in) >> $(out)",
+ srcs: ["ffi_test_utils.rs"],
+ out: ["libkeystore2_test_utils_cxx_generated.cc"],
+}
+
+genrule {
+ name: "libkeystore2_ffi_test_utils_bridge_header",
+ tools: ["cxxbridge"],
+ cmd: "$(location cxxbridge) $(in) --header >> $(out)",
+ srcs: ["ffi_test_utils.rs"],
+ out: ["ffi_test_utils.rs.h"],
+}
diff --git a/keystore2/tests/ffi_test_utils.cpp b/keystore2/test_utils/ffi_test_utils.cpp
similarity index 100%
rename from keystore2/tests/ffi_test_utils.cpp
rename to keystore2/test_utils/ffi_test_utils.cpp
diff --git a/keystore2/tests/ffi_test_utils.hpp b/keystore2/test_utils/ffi_test_utils.hpp
similarity index 100%
rename from keystore2/tests/ffi_test_utils.hpp
rename to keystore2/test_utils/ffi_test_utils.hpp
diff --git a/keystore2/tests/ffi_test_utils.rs b/keystore2/test_utils/ffi_test_utils.rs
similarity index 91%
rename from keystore2/tests/ffi_test_utils.rs
rename to keystore2/test_utils/ffi_test_utils.rs
index c652174..019c26b 100644
--- a/keystore2/tests/ffi_test_utils.rs
+++ b/keystore2/test_utils/ffi_test_utils.rs
@@ -12,8 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+//! This module implements helper methods to access the functionalities implemented in CPP.
+
+use crate::key_generations::Error;
use android_hardware_security_keymint::aidl::android::hardware::security::keymint::Tag::Tag;
-use keystore2_test_utils::key_generations::Error;
#[cxx::bridge]
mod ffi {
@@ -46,6 +48,7 @@
Err(Error::ValidateCertChainFailed)
}
+/// Collect the result from CxxResult into a Rust supported structure.
fn get_result(result: ffi::CxxResult) -> Result<Vec<u8>, Error> {
if result.error == 0 && !result.data.is_empty() {
Ok(result.data)
@@ -82,6 +85,7 @@
get_result(ffi::buildAsn1DerEncodedWrappedKeyDescription())
}
+/// Performs crypto operation using Keystore-Engine APIs.
pub fn perform_crypto_op_using_keystore_engine(grant_id: i64) -> Result<bool, Error> {
if ffi::performCryptoOpUsingKeystoreEngine(grant_id) {
return Ok(true);
@@ -90,6 +94,7 @@
Err(Error::Keystore2EngineOpFailed)
}
+/// Get the value of the given `Tag` from attestation record.
pub fn get_value_from_attest_record(cert_buf: &[u8], tag: Tag) -> Result<Vec<u8>, Error> {
let result = ffi::getValueFromAttestRecord(cert_buf.to_vec(), tag.0);
if result.error == 0 && !result.data.is_empty() {
diff --git a/keystore2/test_utils/lib.rs b/keystore2/test_utils/lib.rs
index c63bfac..a373a2f 100644
--- a/keystore2/test_utils/lib.rs
+++ b/keystore2/test_utils/lib.rs
@@ -22,6 +22,7 @@
use android_system_keystore2::aidl::android::system::keystore2::IKeystoreService::IKeystoreService;
pub mod authorizations;
+pub mod ffi_test_utils;
pub mod key_generations;
pub mod run_as;
diff --git a/keystore2/tests/Android.bp b/keystore2/tests/Android.bp
index 32c39dc..a574fa1 100644
--- a/keystore2/tests/Android.bp
+++ b/keystore2/tests/Android.bp
@@ -34,70 +34,13 @@
test_config: "AndroidTest.xml",
rustlibs: [
- "librustutils",
- "libkeystore2_test_utils",
- "packagemanager_aidl-rust",
- "libnix",
- "libanyhow",
"libbinder_rs",
- "liblazy_static",
- "liblibc",
- "libserde",
- "libthiserror",
- "libcxx",
+ "libkeystore2_test_utils",
+ "libnix",
"libopenssl",
- ],
- static_libs: [
- "libkeystore2_ffi_test_utils",
- "libgtest",
- "libkeymint_vts_test_utils",
- ],
- shared_libs: [
- "libcrypto",
- "libkeymaster_portable",
- "libkeymaster_messages",
- "libcppbor_external",
- "libkeystore-engine",
- "libkeymint_support",
+ "librustutils",
+ "libserde",
+ "packagemanager_aidl-rust",
],
require_root: true,
}
-
-cc_library_static {
- name: "libkeystore2_ffi_test_utils",
- srcs: ["ffi_test_utils.cpp"],
- defaults: [
- "keymint_vts_defaults",
- "hidl_defaults",
- ],
- generated_headers: [
- "cxx-bridge-header",
- "libkeystore2_ffi_test_utils_bridge_header",
- ],
- generated_sources: ["libkeystore2_ffi_test_utils_bridge_code"],
- static_libs: [
- "libkeymint_vts_test_utils",
- ],
- shared_libs: [
- "libkeymaster_portable",
- "libkeymaster_messages",
- "libcppbor_external",
- "libkeystore-engine",
- ],
-}
-
-genrule {
- name: "libkeystore2_ffi_test_utils_bridge_code",
- tools: ["cxxbridge"],
- cmd: "$(location cxxbridge) $(in) >> $(out)",
- srcs: ["ffi_test_utils.rs"],
- out: ["libkeystore2_test_utils_cxx_generated.cc"],
-}
-
-genrule {
- name: "libkeystore2_ffi_test_utils_bridge_header",
- tools: ["cxxbridge"],
- cmd: "$(location cxxbridge) $(in) --header >> $(out)",
- srcs: ["ffi_test_utils.rs"],
- out: ["ffi_test_utils.rs.h"],
-}
diff --git a/keystore2/tests/keystore2_client_attest_key_tests.rs b/keystore2/tests/keystore2_client_attest_key_tests.rs
index b8ad90d..f3228ea 100644
--- a/keystore2/tests/keystore2_client_attest_key_tests.rs
+++ b/keystore2/tests/keystore2_client_attest_key_tests.rs
@@ -28,7 +28,7 @@
authorizations, get_keystore_service, key_generations, key_generations::Error,
};
-use crate::ffi_test_utils::{get_value_from_attest_record, validate_certchain};
+use keystore2_test_utils::ffi_test_utils::{get_value_from_attest_record, validate_certchain};
use crate::{
skip_test_if_no_app_attest_key_feature, skip_test_if_no_device_id_attestation_feature,
diff --git a/keystore2/tests/keystore2_client_import_keys_tests.rs b/keystore2/tests/keystore2_client_import_keys_tests.rs
index ecba402..3d108fe 100644
--- a/keystore2/tests/keystore2_client_import_keys_tests.rs
+++ b/keystore2/tests/keystore2_client_import_keys_tests.rs
@@ -32,7 +32,9 @@
authorizations, get_keystore_service, key_generations, key_generations::Error,
};
-use crate::ffi_test_utils::{create_wrapped_key, create_wrapped_key_additional_auth_data};
+use keystore2_test_utils::ffi_test_utils::{
+ create_wrapped_key, create_wrapped_key_additional_auth_data,
+};
use crate::keystore2_client_test_utils::{
encrypt_secure_key, encrypt_transport_key, has_default_keymint,
diff --git a/keystore2/tests/keystore2_client_keystore_engine_tests.rs b/keystore2/tests/keystore2_client_keystore_engine_tests.rs
index 339eb60..4651931 100644
--- a/keystore2/tests/keystore2_client_keystore_engine_tests.rs
+++ b/keystore2/tests/keystore2_client_keystore_engine_tests.rs
@@ -26,7 +26,7 @@
use keystore2_test_utils::{authorizations::AuthSetBuilder, get_keystore_service, run_as};
-use crate::ffi_test_utils::perform_crypto_op_using_keystore_engine;
+use keystore2_test_utils::ffi_test_utils::perform_crypto_op_using_keystore_engine;
use openssl::x509::X509;
diff --git a/keystore2/tests/keystore2_client_tests.rs b/keystore2/tests/keystore2_client_tests.rs
index 9be0bf8..3b6a78c 100644
--- a/keystore2/tests/keystore2_client_tests.rs
+++ b/keystore2/tests/keystore2_client_tests.rs
@@ -12,7 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-pub mod ffi_test_utils;
pub mod keystore2_client_3des_key_tests;
pub mod keystore2_client_aes_key_tests;
pub mod keystore2_client_attest_key_tests;