blob: d8359e78a87681bf1862629a6dc86b495add29b5 [file] [log] [blame]
#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.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_;
};