diff options
author | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-07-24 14:56:13 +0100 |
---|---|---|
committer | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-07-30 13:17:35 +0100 |
commit | bc2e210785a63e8360839e4ded5d2c15c2dffaf5 (patch) | |
tree | e9e4e75bab72ce7c7e599cfb86a6508a001d86bc /src/backends/backendsCommon/test/DynamicBackendTests.hpp | |
parent | 986c186468e6023b234c24bd10ed9687f9eea0da (diff) | |
download | armnn-bc2e210785a63e8360839e4ded5d2c15c2dffaf5.tar.gz |
IVGCVSW-3561 Test the DynamicBackend class
* Added unit test for valid dynamic backends
* Added unit tests for various cases of invalid dynamic backends
(invalid handle, malformed backends, incompatible version, etc.)
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
Change-Id: I4c3b33702bb0faac2bbebe224f69908639b4fc54
Diffstat (limited to 'src/backends/backendsCommon/test/DynamicBackendTests.hpp')
-rw-r--r-- | src/backends/backendsCommon/test/DynamicBackendTests.hpp | 209 |
1 files changed, 206 insertions, 3 deletions
diff --git a/src/backends/backendsCommon/test/DynamicBackendTests.hpp b/src/backends/backendsCommon/test/DynamicBackendTests.hpp index 9835113458..1b3edc5e22 100644 --- a/src/backends/backendsCommon/test/DynamicBackendTests.hpp +++ b/src/backends/backendsCommon/test/DynamicBackendTests.hpp @@ -5,17 +5,27 @@ #pragma once +#include <backendsCommon/DynamicBackend.hpp> #include <backendsCommon/DynamicBackendUtils.hpp> -#include <test/UnitTests.hpp> +#include <string> +#include <memory> #include <string> #include <boost/test/unit_test.hpp> #include <boost/filesystem.hpp> -static std::string g_TestSharedObjectSubDir = "src/backends/backendsCommon/test/"; -static std::string g_TestSharedObjectFileName = "libarmnnTestSharedObject.so"; +static std::string g_TestSharedObjectSubDir = "src/backends/backendsCommon/test/"; +static std::string g_TestSharedObjectFileName = "libarmnnTestSharedObject.so"; +static std::string g_TestValidTestDynamicBackendFileName = "libarmnnValidTestDynamicBackend.so"; +static std::string g_TestInvalidTestDynamicBackend1FileName = "libarmnnInvalidTestDynamicBackend1.so"; +static std::string g_TestInvalidTestDynamicBackend2FileName = "libarmnnInvalidTestDynamicBackend2.so"; +static std::string g_TestInvalidTestDynamicBackend3FileName = "libarmnnInvalidTestDynamicBackend3.so"; +static std::string g_TestInvalidTestDynamicBackend4FileName = "libarmnnInvalidTestDynamicBackend4.so"; +static std::string g_TestInvalidTestDynamicBackend5FileName = "libarmnnInvalidTestDynamicBackend5.so"; +static std::string g_TestInvalidTestDynamicBackend6FileName = "libarmnnInvalidTestDynamicBackend6.so"; +static std::string g_TestInvalidTestDynamicBackend7FileName = "libarmnnInvalidTestDynamicBackend7.so"; std::string GetTestFilePath(const std::string& fileName) { @@ -209,3 +219,196 @@ void BackendVersioningTestImpl() BOOST_TEST(earlierMinorBackendVersion <= backendApiVersion); BOOST_TEST(TestDynamicBackendUtils::IsBackendCompatibleTest(backendApiVersion, earlierMinorBackendVersion) == true); } + +void CreateValidDynamicBackendObjectTestImpl() +{ + // Valid shared object handle + // Correct name mangling + // Correct interface + // Correct backend implementation + + using namespace armnn; + + std::string sharedObjectFilePath = GetTestFilePath(g_TestValidTestDynamicBackendFileName); + + void* sharedObjectHandle = nullptr; + BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); + BOOST_TEST((sharedObjectHandle != nullptr)); + + std::unique_ptr<DynamicBackend> dynamicBackend; + BOOST_CHECK_NO_THROW(dynamicBackend.reset(new DynamicBackend(sharedObjectHandle))); + BOOST_TEST((dynamicBackend != nullptr)); + + BackendId dynamicBackendId; + BOOST_CHECK_NO_THROW(dynamicBackendId = dynamicBackend->GetBackendId()); + BOOST_TEST((dynamicBackendId == "ValidTestDynamicBackend")); + + BackendVersion dynamicBackendVersion; + BOOST_CHECK_NO_THROW(dynamicBackendVersion = dynamicBackend->GetBackendVersion()); + BOOST_TEST((dynamicBackendVersion == BackendVersion({ 1, 0 }))); + + IBackendInternalUniquePtr dynamicBackendInstance; + BOOST_CHECK_NO_THROW(dynamicBackendInstance = dynamicBackend->GetBackend()); + BOOST_TEST((dynamicBackendInstance != nullptr)); + + BOOST_TEST((dynamicBackendInstance->GetId() == "ValidTestDynamicBackend")); +} + +void CreateDynamicBackendObjectInvalidHandleTestImpl() +{ + // Invalid (null) shared object handle + + using namespace armnn; + + void* sharedObjectHandle = nullptr; + std::unique_ptr<DynamicBackend> dynamicBackend; + BOOST_CHECK_THROW(dynamicBackend.reset(new DynamicBackend(sharedObjectHandle)), InvalidArgumentException); + BOOST_TEST((dynamicBackend == nullptr)); +} + +void CreateDynamicBackendObjectInvalidInterface1TestImpl() +{ + // Valid shared object handle + // Wrong (not C-style) name mangling + + using namespace armnn; + + std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend1FileName); + + void* sharedObjectHandle = nullptr; + BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); + BOOST_TEST((sharedObjectHandle != nullptr)); + + std::unique_ptr<DynamicBackend> dynamicBackend; + BOOST_CHECK_THROW(dynamicBackend.reset(new DynamicBackend(sharedObjectHandle)), RuntimeException); + BOOST_TEST((dynamicBackend == nullptr)); +} + +void CreateDynamicBackendObjectInvalidInterface2TestImpl() +{ + // Valid shared object handle + // Correct name mangling + // Wrong interface (missing GetBackendId()) + + using namespace armnn; + + std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend2FileName); + + void* sharedObjectHandle = nullptr; + BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); + BOOST_TEST((sharedObjectHandle != nullptr)); + + std::unique_ptr<DynamicBackend> dynamicBackend; + BOOST_CHECK_THROW(dynamicBackend.reset(new DynamicBackend(sharedObjectHandle)), RuntimeException); + BOOST_TEST((dynamicBackend == nullptr)); +} + +void CreateDynamicBackendObjectInvalidInterface3TestImpl() +{ + // Valid shared object handle + // Correct name mangling + // Wrong interface (missing GetVersion()) + + using namespace armnn; + + std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend3FileName); + + void* sharedObjectHandle = nullptr; + BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); + BOOST_TEST((sharedObjectHandle != nullptr)); + + std::unique_ptr<DynamicBackend> dynamicBackend; + BOOST_CHECK_THROW(dynamicBackend.reset(new DynamicBackend(sharedObjectHandle)), RuntimeException); + BOOST_TEST((dynamicBackend == nullptr)); +} + +void CreateDynamicBackendObjectInvalidInterface4TestImpl() +{ + // Valid shared object handle + // Correct name mangling + // Wrong interface (missing BackendFactory()) + + using namespace armnn; + + std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend4FileName); + + void* sharedObjectHandle = nullptr; + BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); + BOOST_TEST((sharedObjectHandle != nullptr)); + + std::unique_ptr<DynamicBackend> dynamicBackend; + BOOST_CHECK_THROW(dynamicBackend.reset(new DynamicBackend(sharedObjectHandle)), RuntimeException); + BOOST_TEST((dynamicBackend == nullptr)); +} + +void CreateDynamicBackendObjectInvalidInterface5TestImpl() +{ + // Valid shared object handle + // Correct name mangling + // Correct interface + // Invalid (null) backend id returned by GetBackendId() + + using namespace armnn; + + std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend5FileName); + + void* sharedObjectHandle = nullptr; + BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); + BOOST_TEST((sharedObjectHandle != nullptr)); + + std::unique_ptr<DynamicBackend> dynamicBackend; + BOOST_CHECK_THROW(dynamicBackend.reset(new DynamicBackend(sharedObjectHandle)), RuntimeException); + BOOST_TEST((dynamicBackend == nullptr)); +} + +void CreateDynamicBackendObjectInvalidInterface6TestImpl() +{ + // Valid shared object handle + // Correct name mangling + // Correct interface + // Invalid (null) backend instance returned by BackendFactory() + + using namespace armnn; + + std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend6FileName); + + void* sharedObjectHandle = nullptr; + BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); + BOOST_TEST((sharedObjectHandle != nullptr)); + + std::unique_ptr<DynamicBackend> dynamicBackend; + BOOST_CHECK_NO_THROW(dynamicBackend.reset(new DynamicBackend(sharedObjectHandle))); + BOOST_TEST((dynamicBackend != nullptr)); + + BackendId dynamicBackendId; + BOOST_CHECK_NO_THROW(dynamicBackendId = dynamicBackend->GetBackendId()); + BOOST_TEST((dynamicBackendId == "InvalidTestDynamicBackend")); + + BackendVersion dynamicBackendVersion; + BOOST_CHECK_NO_THROW(dynamicBackendVersion = dynamicBackend->GetBackendVersion()); + BOOST_TEST((dynamicBackendVersion == BackendVersion({ 1, 0 }))); + + IBackendInternalUniquePtr dynamicBackendInstance; + BOOST_CHECK_THROW(dynamicBackendInstance = dynamicBackend->GetBackend(), RuntimeException); + BOOST_TEST((dynamicBackendInstance == nullptr)); +} + +void CreateDynamicBackendObjectInvalidInterface7TestImpl() +{ + // Valid shared object handle + // Correct name mangling + // Correct interface + // Invalid (incompatible backend API version) backend instance returned by BackendFactory() + + using namespace armnn; + + std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend7FileName); + + void* sharedObjectHandle = nullptr; + BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath)); + BOOST_TEST((sharedObjectHandle != nullptr)); + + std::unique_ptr<DynamicBackend> dynamicBackend; + BOOST_CHECK_THROW(dynamicBackend.reset(new DynamicBackend(sharedObjectHandle)), RuntimeException); + BOOST_TEST((dynamicBackend == nullptr)); +} |