RuntimeLibraryLoaderTest.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /*
  2. * Author: Patrick-Christopher Mattulat
  3. * Company: Lynar Studios
  4. * E-Mail: webmaster@lynarstudios.com
  5. * Created: 2022-09-06
  6. * Changed: 2022-10-23
  7. *
  8. * */
  9. #include <gtest/gtest.h>
  10. #include <ls_std/ls_std_os.hpp>
  11. #include <ls_std/ls_std_core.hpp>
  12. #include "TestHelper.hpp"
  13. namespace
  14. {
  15. class RuntimeLibraryLoaderTest : public ::testing::Test
  16. {
  17. protected:
  18. RuntimeLibraryLoaderTest() = default;
  19. ~RuntimeLibraryLoaderTest() override = default;
  20. void SetUp() override
  21. {}
  22. void TearDown() override
  23. {}
  24. static ls::std::os::RuntimeLibraryLoaderParameter createParameter()
  25. {
  26. ls::std::os::RuntimeLibraryLoaderParameter parameter{};
  27. #if defined(unix) || defined(__APPLE__)
  28. parameter.path = ls_std_test::TestHelper::getResourcesFolderLocation() + "libtest_math_d.so";
  29. #endif
  30. return parameter;
  31. }
  32. };
  33. TEST_F(RuntimeLibraryLoaderTest, constructor_empty_path_parameter)
  34. {
  35. EXPECT_THROW({
  36. try
  37. {
  38. ls::std::os::RuntimeLibraryLoader(ls::std::os::RuntimeLibraryLoaderParameter{});
  39. }
  40. catch (const ls::std::core::IllegalArgumentException &_exception)
  41. {
  42. throw;
  43. }
  44. }, ls::std::core::IllegalArgumentException);
  45. }
  46. TEST_F(RuntimeLibraryLoaderTest, close)
  47. {
  48. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  49. ASSERT_TRUE(loader.open());
  50. ASSERT_TRUE(loader.close());
  51. }
  52. TEST_F(RuntimeLibraryLoaderTest, close_no_handle)
  53. {
  54. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  55. ASSERT_FALSE(loader.close());
  56. }
  57. TEST_F(RuntimeLibraryLoaderTest, getSymbol)
  58. {
  59. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  60. ASSERT_TRUE(loader.open());
  61. ASSERT_TRUE(loader.loadSymbol("_ZN4Math3addERKiS1_"));
  62. using addSignature = int(const int&, const int&);
  63. ::std::function<addSignature> add{reinterpret_cast<addSignature*>(loader.getSymbol("_ZN4Math3addERKiS1_"))};
  64. ASSERT_EQ(5, add(2, 3));
  65. }
  66. TEST_F(RuntimeLibraryLoaderTest, getSymbol_no_symbol)
  67. {
  68. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  69. ASSERT_TRUE(loader.open());
  70. ASSERT_TRUE(loader.getSymbol("_ZN4Math3addERKiS1_") == nullptr);
  71. }
  72. TEST_F(RuntimeLibraryLoaderTest, hasSymbol_not_found)
  73. {
  74. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  75. ASSERT_FALSE(loader.hasSymbol("getSquare"));
  76. }
  77. TEST_F(RuntimeLibraryLoaderTest, loadSymbol)
  78. {
  79. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  80. ASSERT_TRUE(loader.open());
  81. ASSERT_TRUE(loader.loadSymbol("_ZN4Math3addERKiS1_"));
  82. }
  83. TEST_F(RuntimeLibraryLoaderTest, loadSymbol_symbol_not_available)
  84. {
  85. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  86. ASSERT_TRUE(loader.open());
  87. ASSERT_FALSE(loader.loadSymbol("_ZN4Math3subERKiS1_"));
  88. }
  89. TEST_F(RuntimeLibraryLoaderTest, open)
  90. {
  91. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  92. ASSERT_TRUE(loader.open());
  93. }
  94. TEST_F(RuntimeLibraryLoaderTest, open_no_library_found)
  95. {
  96. ls::std::os::RuntimeLibraryLoaderParameter parameter{};
  97. parameter.path = ls_std_test::TestHelper::getResourcesFolderLocation() + "libno_exist.so";
  98. ls::std::os::RuntimeLibraryLoader loader{parameter};
  99. ASSERT_FALSE(loader.open());
  100. }
  101. }