// Copyright 2020, 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. //! Utility functions tests. use super::*; use anyhow::Result; #[test] fn check_device_attestation_permissions_test() -> Result<()> { check_device_attestation_permissions().or_else(|error| { match error.root_cause().downcast_ref::() { // Expected: the context for this test might not be allowed to attest device IDs. Some(Error::Km(ErrorCode::CANNOT_ATTEST_IDS)) => Ok(()), // Other errors are unexpected _ => Err(error), } }) } fn create_key_descriptors_from_aliases(key_aliases: &[&str]) -> Vec { key_aliases .iter() .map(|key_alias| KeyDescriptor { domain: Domain::APP, nspace: 0, alias: Some(key_alias.to_string()), blob: None, }) .collect::>() } fn aliases_from_key_descriptors(key_descriptors: &[KeyDescriptor]) -> Vec { key_descriptors .iter() .map(|kd| if let Some(alias) = &kd.alias { String::from(alias) } else { String::from("") }) .collect::>() } #[test] fn test_safe_amount_to_return() -> Result<()> { let key_aliases = vec!["key1", "key2", "key3"]; let key_descriptors = create_key_descriptors_from_aliases(&key_aliases); assert_eq!(estimate_safe_amount_to_return(Domain::APP, 1017, None, &key_descriptors, 20), 1); assert_eq!(estimate_safe_amount_to_return(Domain::APP, 1017, None, &key_descriptors, 50), 2); assert_eq!(estimate_safe_amount_to_return(Domain::APP, 1017, None, &key_descriptors, 100), 3); Ok(()) } #[test] fn test_merge_and_sort_lists_without_filtering() -> Result<()> { let legacy_key_aliases = vec!["key_c", "key_a", "key_b"]; let legacy_key_descriptors = create_key_descriptors_from_aliases(&legacy_key_aliases); let db_key_aliases = vec!["key_a", "key_d"]; let db_key_descriptors = create_key_descriptors_from_aliases(&db_key_aliases); let result = merge_and_filter_key_entry_lists(&legacy_key_descriptors, &db_key_descriptors, None); assert_eq!(aliases_from_key_descriptors(&result), vec!["key_a", "key_b", "key_c", "key_d"]); Ok(()) } #[test] fn test_merge_and_sort_lists_with_filtering() -> Result<()> { let legacy_key_aliases = vec!["key_f", "key_a", "key_e", "key_b"]; let legacy_key_descriptors = create_key_descriptors_from_aliases(&legacy_key_aliases); let db_key_aliases = vec!["key_c", "key_g"]; let db_key_descriptors = create_key_descriptors_from_aliases(&db_key_aliases); let result = merge_and_filter_key_entry_lists( &legacy_key_descriptors, &db_key_descriptors, Some("key_b"), ); assert_eq!(aliases_from_key_descriptors(&result), vec!["key_c", "key_e", "key_f", "key_g"]); Ok(()) } #[test] fn test_merge_and_sort_lists_with_filtering_and_dups() -> Result<()> { let legacy_key_aliases = vec!["key_f", "key_a", "key_e", "key_b"]; let legacy_key_descriptors = create_key_descriptors_from_aliases(&legacy_key_aliases); let db_key_aliases = vec!["key_d", "key_e", "key_g"]; let db_key_descriptors = create_key_descriptors_from_aliases(&db_key_aliases); let result = merge_and_filter_key_entry_lists( &legacy_key_descriptors, &db_key_descriptors, Some("key_c"), ); assert_eq!(aliases_from_key_descriptors(&result), vec!["key_d", "key_e", "key_f", "key_g"]); Ok(()) } #[test] fn test_list_key_parameters_with_filter_on_security_sensitive_info() -> Result<()> { let params = vec![ KmKeyParameter { tag: Tag::APPLICATION_ID, value: KeyParameterValue::Integer(0) }, KmKeyParameter { tag: Tag::APPLICATION_DATA, value: KeyParameterValue::Integer(0) }, KmKeyParameter { tag: Tag::CERTIFICATE_NOT_AFTER, value: KeyParameterValue::DateTime(UNDEFINED_NOT_AFTER), }, KmKeyParameter { tag: Tag::CERTIFICATE_NOT_BEFORE, value: KeyParameterValue::DateTime(0) }, ]; let wanted = vec![ KmKeyParameter { tag: Tag::CERTIFICATE_NOT_AFTER, value: KeyParameterValue::DateTime(UNDEFINED_NOT_AFTER), }, KmKeyParameter { tag: Tag::CERTIFICATE_NOT_BEFORE, value: KeyParameterValue::DateTime(0) }, ]; assert_eq!(log_security_safe_params(¶ms), wanted); Ok(()) }