diff options
author | Przemyslaw Szczepaniak <pszczepaniak@google.com> | 2019-03-01 11:53:00 +0000 |
---|---|---|
committer | Przemyslaw Szczepaniak <pszczepaniak@google.com> | 2019-04-04 09:19:41 +0000 |
commit | 4c8845ed10fcb2c490705bab3435f7e5cf004d97 (patch) | |
tree | 235e4efd1d089190f551dcfd56af952ea9b1f67a /nn/runtime/test/TestExtensions.cpp | |
parent | 5c05e5e185c28102e3c918ff04ddbaee4d4d5ee1 (diff) | |
download | ml-4c8845ed10fcb2c490705bab3435f7e5cf004d97.tar.gz |
Relax NNAPI Vendor Extensions usage restrictions.
Enable use of NNAPI Vendor extensions in apps (and native binaries)
located on /product, /vendor, /odm and /data partitions.
Apps/binaries on /system partition are NOT able
to use NNAPI Vendor extension, even after update.
Apps/binaries on /product partition are able
to use NNAPI Vendor extension if system property
"ro.nnapi.extensions.deny_on_product" is not set
or empty.
GSI /product image sets this property to "true",
apps on it can't use NNAPI Vendor extensions.
Moved extensions use test from ModelBuilder to TypeManager,
so it's evaluated only once in app context.
Bug: 120483623
Test: NeuralNetworksTests_static
Change-Id: I17ba5b31b6819fff2bba41dcb1ecd25cb1815725
Merged-In: I17ba5b31b6819fff2bba41dcb1ecd25cb1815725
(cherry picked from commit c82e0e7230b20914a8646c4a7f2571275fb56d61)
Diffstat (limited to 'nn/runtime/test/TestExtensions.cpp')
-rw-r--r-- | nn/runtime/test/TestExtensions.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/nn/runtime/test/TestExtensions.cpp b/nn/runtime/test/TestExtensions.cpp index b801c08cd..bd182311e 100644 --- a/nn/runtime/test/TestExtensions.cpp +++ b/nn/runtime/test/TestExtensions.cpp @@ -21,11 +21,13 @@ #include "NeuralNetworks.h" #include "NeuralNetworksExtensions.h" #include "SampleDriver.h" +#include "TypeManager.h" namespace { using DeviceManager = ::android::nn::DeviceManager; using SampleDriver = ::android::nn::sample_driver::SampleDriver; +using TypeManager = ::android::nn::TypeManager; const char* kTestDriverName = "extensions-test-driver"; const char* kTestExtension1 = "vendor.test.one"; @@ -110,4 +112,116 @@ TEST_F(ExtensionsTest, DeviceReportsSupportedExtensions) { EXPECT_TRUE(testDriverSupportsExtension(kTestExtension3)); } +TEST_F(ExtensionsTest, TestAllowedNativeBinaries) { + EXPECT_FALSE(TypeManager::isExtensionsUseAllowed("", + /* productEnabled= */ false, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + + EXPECT_FALSE(TypeManager::isExtensionsUseAllowed("/foobar/foo", + /* productEnabled= */ false, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + + EXPECT_TRUE(TypeManager::isExtensionsUseAllowed("/data/foo", + /* productEnabled= */ false, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + + EXPECT_TRUE(TypeManager::isExtensionsUseAllowed("/vendor/foo", + /* productEnabled= */ false, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + + EXPECT_TRUE(TypeManager::isExtensionsUseAllowed("/odm/foo", + /* productEnabled= */ false, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + + EXPECT_FALSE(TypeManager::isExtensionsUseAllowed("/system/foo", + /* productEnabled= */ false, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + + EXPECT_FALSE(TypeManager::isExtensionsUseAllowed("/product/foo", + /* productEnabled= */ false, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + + EXPECT_TRUE(TypeManager::isExtensionsUseAllowed("/product/foo", + /* productEnabled= */ true, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); +} + +TEST_F(ExtensionsTest, TestAllowedApps) { + std::string app_process32 = "/system/bin/app_process32"; + std::string app_process64 = "/system/bin/app_process64"; + std::string other_binary = "/system/bin/foo"; + + auto test_app_process = [](const std::string& binary) { + // /data app + EXPECT_TRUE(TypeManager::isExtensionsUseAllowed(binary, + /* productEnabled= */ false, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + + // /system app + EXPECT_FALSE(TypeManager::isExtensionsUseAllowed(binary, + /* productEnabled= */ false, + /* isSystemApp= */ true, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + + // /vendor || /odm app + EXPECT_TRUE(TypeManager::isExtensionsUseAllowed(binary, + /* productEnabled= */ false, + /* isSystemApp= */ true, + /* isAppOnVendorImage= */ true, + /* isAppOnProductImage= */ false)); + + // /product app, disabled + EXPECT_FALSE(TypeManager::isExtensionsUseAllowed(binary, + /* productEnabled= */ false, + /* isSystemApp= */ true, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ true)); + + // /product app, enabled + EXPECT_TRUE(TypeManager::isExtensionsUseAllowed(binary, + /* productEnabled= */ true, + /* isSystemApp= */ true, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ true)); + }; + test_app_process(app_process64); + test_app_process(app_process32); + + // Test all positive cases fail if binary is not app_process32|64 + EXPECT_FALSE(TypeManager::isExtensionsUseAllowed(other_binary, + /* productEnabled= */ false, + /* isSystemApp= */ false, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ false)); + EXPECT_FALSE(TypeManager::isExtensionsUseAllowed(other_binary, + /* productEnabled= */ false, + /* isSystemApp= */ true, + /* isAppOnVendorImage= */ true, + /* isAppOnProductImage= */ false)); + EXPECT_FALSE(TypeManager::isExtensionsUseAllowed(other_binary, + /* productEnabled= */ true, + /* isSystemApp= */ true, + /* isAppOnVendorImage= */ false, + /* isAppOnProductImage= */ true)); +} + } // namespace |