test_backtrace.cpp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "includes.h"
  2. #include "test_sink.h"
  3. #include "spdlog/async.h"
  4. TEST_CASE("bactrace1", "[bactrace]") {
  5. using spdlog::sinks::test_sink_st;
  6. auto test_sink = std::make_shared<test_sink_st>();
  7. size_t backtrace_size = 5;
  8. spdlog::logger logger("test-backtrace", test_sink);
  9. logger.set_pattern("%v");
  10. logger.enable_backtrace(backtrace_size);
  11. logger.info("info message");
  12. for (int i = 0; i < 100; i++) logger.debug("debug message {}", i);
  13. REQUIRE(test_sink->lines().size() == 1);
  14. REQUIRE(test_sink->lines()[0] == "info message");
  15. logger.dump_backtrace();
  16. REQUIRE(test_sink->lines().size() == backtrace_size + 3);
  17. REQUIRE(test_sink->lines()[1] == "****************** Backtrace Start ******************");
  18. REQUIRE(test_sink->lines()[2] == "debug message 95");
  19. REQUIRE(test_sink->lines()[3] == "debug message 96");
  20. REQUIRE(test_sink->lines()[4] == "debug message 97");
  21. REQUIRE(test_sink->lines()[5] == "debug message 98");
  22. REQUIRE(test_sink->lines()[6] == "debug message 99");
  23. REQUIRE(test_sink->lines()[7] == "****************** Backtrace End ********************");
  24. }
  25. TEST_CASE("bactrace-empty", "[bactrace]") {
  26. using spdlog::sinks::test_sink_st;
  27. auto test_sink = std::make_shared<test_sink_st>();
  28. size_t backtrace_size = 5;
  29. spdlog::logger logger("test-backtrace", test_sink);
  30. logger.set_pattern("%v");
  31. logger.enable_backtrace(backtrace_size);
  32. logger.dump_backtrace();
  33. REQUIRE(test_sink->lines().size() == 0);
  34. }
  35. TEST_CASE("bactrace-async", "[bactrace]") {
  36. using spdlog::sinks::test_sink_mt;
  37. auto test_sink = std::make_shared<test_sink_mt>();
  38. using spdlog::details::os::sleep_for_millis;
  39. size_t backtrace_size = 5;
  40. spdlog::init_thread_pool(120, 1);
  41. auto logger = std::make_shared<spdlog::async_logger>("test-bactrace-async", test_sink,
  42. spdlog::thread_pool());
  43. logger->set_pattern("%v");
  44. logger->enable_backtrace(backtrace_size);
  45. logger->info("info message");
  46. for (int i = 0; i < 100; i++) logger->debug("debug message {}", i);
  47. sleep_for_millis(100);
  48. REQUIRE(test_sink->lines().size() == 1);
  49. REQUIRE(test_sink->lines()[0] == "info message");
  50. logger->dump_backtrace();
  51. sleep_for_millis(100); // give time for the async dump to complete
  52. REQUIRE(test_sink->lines().size() == backtrace_size + 3);
  53. REQUIRE(test_sink->lines()[1] == "****************** Backtrace Start ******************");
  54. REQUIRE(test_sink->lines()[2] == "debug message 95");
  55. REQUIRE(test_sink->lines()[3] == "debug message 96");
  56. REQUIRE(test_sink->lines()[4] == "debug message 97");
  57. REQUIRE(test_sink->lines()[5] == "debug message 98");
  58. REQUIRE(test_sink->lines()[6] == "debug message 99");
  59. REQUIRE(test_sink->lines()[7] == "****************** Backtrace End ********************");
  60. }