• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <dlfcn.h>
2 #include <dvr/dvr_api.h>
3 
4 #include <gtest/gtest.h>
5 
6 /** DvrTestBase loads the libdvr.so at runtime and get the Dvr API version 1. */
7 class DvrApiTest : public ::testing::Test {
8  protected:
SetUp()9   void SetUp() override {
10     int flags = RTLD_NOW | RTLD_LOCAL;
11 
12     // Here we need to ensure that libdvr is loaded with RTLD_NODELETE flag set
13     // (so that calls to `dlclose` don't actually unload the library). This is a
14     // workaround for an Android NDK bug. See more detail:
15     // https://github.com/android-ndk/ndk/issues/360
16     flags |= RTLD_NODELETE;
17     platform_handle_ = dlopen("libdvr.google.so", flags);
18     ASSERT_NE(nullptr, platform_handle_) << "Dvr shared library missing.";
19 
20     auto dvr_get_api = reinterpret_cast<decltype(&dvrGetApi)>(
21         dlsym(platform_handle_, "dvrGetApi"));
22     ASSERT_NE(nullptr, dvr_get_api) << "Platform library missing dvrGetApi.";
23 
24     ASSERT_EQ(dvr_get_api(&api_, sizeof(api_), /*version=*/1), 0)
25         << "Unable to find compatible Dvr API.";
26   }
27 
TearDown()28   void TearDown() override {
29     if (platform_handle_ != nullptr) {
30       dlclose(platform_handle_);
31     }
32   }
33 
34   void* platform_handle_ = nullptr;
35   DvrApi_v1 api_;
36 };
37