37 lines
1.2 KiB
C
37 lines
1.2 KiB
C
|
#include <dlfcn.h>
|
||
|
#include <dvr/dvr_api.h>
|
||
|
|
||
|
#include <gtest/gtest.h>
|
||
|
|
||
|
/** DvrTestBase loads the libdvr.so at runtime and get the Dvr API version 1. */
|
||
|
class DvrApiTest : public ::testing::Test {
|
||
|
protected:
|
||
|
void SetUp() override {
|
||
|
int flags = RTLD_NOW | RTLD_LOCAL;
|
||
|
|
||
|
// Here we need to ensure that libdvr is loaded with RTLD_NODELETE flag set
|
||
|
// (so that calls to `dlclose` don't actually unload the library). This is a
|
||
|
// workaround for an Android NDK bug. See more detail:
|
||
|
// https://github.com/android-ndk/ndk/issues/360
|
||
|
flags |= RTLD_NODELETE;
|
||
|
platform_handle_ = dlopen("libdvr.google.so", flags);
|
||
|
ASSERT_NE(nullptr, platform_handle_) << "Dvr shared library missing.";
|
||
|
|
||
|
auto dvr_get_api = reinterpret_cast<decltype(&dvrGetApi)>(
|
||
|
dlsym(platform_handle_, "dvrGetApi"));
|
||
|
ASSERT_NE(nullptr, dvr_get_api) << "Platform library missing dvrGetApi.";
|
||
|
|
||
|
ASSERT_EQ(dvr_get_api(&api_, sizeof(api_), /*version=*/1), 0)
|
||
|
<< "Unable to find compatible Dvr API.";
|
||
|
}
|
||
|
|
||
|
void TearDown() override {
|
||
|
if (platform_handle_ != nullptr) {
|
||
|
dlclose(platform_handle_);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void* platform_handle_ = nullptr;
|
||
|
DvrApi_v1 api_;
|
||
|
};
|