RuntimeLibraryLoaderTest.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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-20
  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. #include <ls_std/ls_std_time.hpp>
  14. namespace
  15. {
  16. class RuntimeLibraryLoaderTest : public ::testing::Test
  17. {
  18. protected:
  19. RuntimeLibraryLoaderTest() = default;
  20. ~RuntimeLibraryLoaderTest() override = default;
  21. void SetUp() override
  22. {}
  23. void TearDown() override
  24. {}
  25. static ls::std::os::RuntimeLibraryLoaderParameter createParameter()
  26. {
  27. ls::std::os::RuntimeLibraryLoaderParameter parameter{};
  28. #if defined(unix) || defined(__APPLE__)
  29. parameter.path = ls_std_test::TestHelper::getResourcesFolderLocation() + "libls_std_time.so";
  30. #endif
  31. return parameter;
  32. }
  33. };
  34. TEST_F(RuntimeLibraryLoaderTest, constructor_empty_path_parameter)
  35. {
  36. EXPECT_THROW({
  37. try
  38. {
  39. ls::std::os::RuntimeLibraryLoader(ls::std::os::RuntimeLibraryLoaderParameter{});
  40. }
  41. catch (const ls::std::core::IllegalArgumentException &_exception)
  42. {
  43. throw;
  44. }
  45. }, ls::std::core::IllegalArgumentException);
  46. }
  47. TEST_F(RuntimeLibraryLoaderTest, close)
  48. {
  49. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  50. ASSERT_TRUE(loader.open());
  51. ASSERT_TRUE(loader.close());
  52. }
  53. TEST_F(RuntimeLibraryLoaderTest, close_no_handle)
  54. {
  55. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  56. ASSERT_FALSE(loader.close());
  57. }
  58. TEST_F(RuntimeLibraryLoaderTest, getSymbol)
  59. {
  60. // TODO: also provide a debug library for loading - currently debug execution is not working due to lack of debug information
  61. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  62. ASSERT_TRUE(loader.open());
  63. ASSERT_TRUE(loader.loadSymbol("_ZN2ls3std4time4DateC1Ev"));
  64. using constructorType = ls::std::time::Date();
  65. ::std::function<ls::std::time::Date()> date{reinterpret_cast<constructorType*>(loader.getSymbol("_ZN2ls3std4time4DateC1Ev"))};
  66. ASSERT_TRUE(date().getDay() > 0);
  67. ASSERT_TRUE(date().getHour() > 0);
  68. }
  69. TEST_F(RuntimeLibraryLoaderTest, getSymbol_no_symbol)
  70. {
  71. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  72. ASSERT_TRUE(loader.open());
  73. ASSERT_TRUE(loader.getSymbol("_ZN2ls3std4time4DateC1Ev") == nullptr);
  74. }
  75. TEST_F(RuntimeLibraryLoaderTest, hasSymbol_not_found)
  76. {
  77. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  78. ASSERT_FALSE(loader.hasSymbol("getTimeStamp"));
  79. }
  80. TEST_F(RuntimeLibraryLoaderTest, loadSymbol)
  81. {
  82. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  83. ASSERT_TRUE(loader.open());
  84. ASSERT_TRUE(loader.loadSymbol("_ZN2ls3std4time4Date6getDayEv"));
  85. }
  86. TEST_F(RuntimeLibraryLoaderTest, loadSymbol_symbol_not_available)
  87. {
  88. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  89. ASSERT_TRUE(loader.open());
  90. ASSERT_FALSE(loader.loadSymbol("_ZN2ls3std4time4Date6getLeapEv"));
  91. }
  92. TEST_F(RuntimeLibraryLoaderTest, open)
  93. {
  94. ls::std::os::RuntimeLibraryLoader loader{createParameter()};
  95. ASSERT_TRUE(loader.open());
  96. }
  97. TEST_F(RuntimeLibraryLoaderTest, open_no_library_found)
  98. {
  99. ls::std::os::RuntimeLibraryLoaderParameter parameter{};
  100. parameter.path = ls_std_test::TestHelper::getResourcesFolderLocation() + "libno_exist.so";
  101. ls::std::os::RuntimeLibraryLoader loader{parameter};
  102. ASSERT_FALSE(loader.open());
  103. }
  104. }