Serenity Operating System
at master 46 lines 1.3 kB view raw
1/* 2 * Copyright (c) 2021, Rodrigo Tobar <rtobarc@gmail.com> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibTest/TestCase.h> 8#include <dlfcn.h> 9 10TEST_CASE(test_dlopen) 11{ 12 auto liba = dlopen("/usr/Tests/LibELF/libDynlibA.so", 0); 13 EXPECT_NE(liba, nullptr); 14 auto libb = dlopen("/usr/Tests/LibELF/libDynlibB.so", 0); 15 EXPECT_NE(libb, nullptr); 16 17 typedef int (*dynlib_func_t)(); 18 dynlib_func_t func_a = (dynlib_func_t)dlsym(liba, "dynliba_function"); 19 EXPECT_NE(func_a, nullptr); 20 EXPECT_EQ(0, func_a()); 21 22 dynlib_func_t func_b = (dynlib_func_t)dlsym(libb, "dynlibb_function"); 23 EXPECT_NE(func_b, nullptr); 24 EXPECT_EQ(0, func_b()); 25} 26 27TEST_CASE(test_dlsym_rtld_default) 28{ 29 auto libd = dlopen("/usr/Tests/LibELF/libDynlibD.so", 0); 30 EXPECT_NE(libd, nullptr); 31 if (libd == nullptr) { 32 warnln("can't open libDynlibD.so, {}", dlerror()); 33 return; 34 } 35 36 typedef int (*dynlib_func_t)(); 37 dynlib_func_t func_c = (dynlib_func_t)dlsym(RTLD_DEFAULT, "dynlibc_function"); 38 EXPECT_NE(func_c, nullptr); 39 EXPECT_EQ(0, func_c()); 40 41 dynlib_func_t func_d = (dynlib_func_t)dlsym(RTLD_DEFAULT, "dynlibd_function"); 42 EXPECT_NE(func_d, nullptr); 43 EXPECT_EQ(0, func_d()); 44 45 dlclose(libd); 46}