summaryrefslogtreecommitdiff
path: root/nn/runtime/test/TestExtensions.cpp
diff options
context:
space:
mode:
authorPrzemyslaw Szczepaniak <pszczepaniak@google.com>2019-03-01 11:53:00 +0000
committerPrzemyslaw Szczepaniak <pszczepaniak@google.com>2019-04-04 09:19:41 +0000
commit4c8845ed10fcb2c490705bab3435f7e5cf004d97 (patch)
tree235e4efd1d089190f551dcfd56af952ea9b1f67a /nn/runtime/test/TestExtensions.cpp
parent5c05e5e185c28102e3c918ff04ddbaee4d4d5ee1 (diff)
downloadml-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.cpp114
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