From 13e9135935da599c95e7ea656eaf2e9897ec64a3 Mon Sep 17 00:00:00 2001
From: gabime <gmelman1@gmail.com>
Date: Tue, 27 Aug 2019 19:45:21 +0300
Subject: [PATCH] Update test_backtrace.cpp

---
 tests/test_backtrace.cpp | 52 +++++++++++++++++++++++++++++++++-------
 1 file changed, 43 insertions(+), 9 deletions(-)

diff --git a/tests/test_backtrace.cpp b/tests/test_backtrace.cpp
index 2cef6215..4c6f123f 100644
--- a/tests/test_backtrace.cpp
+++ b/tests/test_backtrace.cpp
@@ -1,5 +1,6 @@
 #include "includes.h"
 #include "test_sink.h"
+#include "spdlog/async.h"
 
 
 
@@ -11,7 +12,7 @@ TEST_CASE("bactrace1", "[bactrace]")
 	auto test_sink = std::make_shared<test_sink_st>();
 	int backtrace_size = 5;
 
-	spdlog::logger logger("test", test_sink);
+	spdlog::logger logger("test-backtrace", test_sink);
 	logger.set_pattern("%v");
 	logger.enable_backtrace(backtrace_size);
 
@@ -23,14 +24,47 @@ TEST_CASE("bactrace1", "[bactrace]")
 	REQUIRE(test_sink->lines()[0] == "info message");
 
 	logger.dump_backtrace();
-	REQUIRE(test_sink->lines().size() == 8);	
+	REQUIRE(test_sink->lines().size() == backtrace_size +3);		
 	REQUIRE(test_sink->lines()[1] == "****************** Backtrace Start ******************");	
-	
-	for(int i = 0; i < backtrace_size; i++)
-	{
-		REQUIRE(test_sink->lines()[i+2] == fmt::format("debug message {}", 100 - backtrace_size + i));
-	}
-	REQUIRE(test_sink->lines()[7] == "****************** Backtrace End ********************");
-		
+	REQUIRE(test_sink->lines()[2] == "debug message 95");
+	REQUIRE(test_sink->lines()[3] == "debug message 96");
+	REQUIRE(test_sink->lines()[4] == "debug message 97");
+	REQUIRE(test_sink->lines()[5] == "debug message 98");	
+	REQUIRE(test_sink->lines()[6] == "debug message 99");			
+	REQUIRE(test_sink->lines()[7] == "****************** Backtrace End ********************");		
+}
+
+
+TEST_CASE("bactrace-async", "[bactrace]")
+{
+	using spdlog::sinks::test_sink_mt;		
+	auto test_sink = std::make_shared<test_sink_mt>();
+	using spdlog::details::os::sleep_for_millis;
+
+	int backtrace_size = 5;
+
+	spdlog::init_thread_pool(120, 1);
+	auto logger = std::make_shared<spdlog::async_logger>("test-bactrace-async", test_sink, spdlog::thread_pool());
+	logger->set_pattern("%v");
+	logger->enable_backtrace(backtrace_size);
+
+	logger->info("info message");   
+	for(int i = 0; i < 100; i++)
+		logger->debug("debug message {}", i);
+	
+	sleep_for_millis(10);
+	REQUIRE(test_sink->lines().size() == 1);
+	REQUIRE(test_sink->lines()[0] == "info message");
+
+	logger->dump_backtrace();
+	sleep_for_millis(100); //  give time for the async dump to complete
+	REQUIRE(test_sink->lines().size() == backtrace_size +3);		
+	REQUIRE(test_sink->lines()[1] == "****************** Backtrace Start ******************");	
+	REQUIRE(test_sink->lines()[2] == "debug message 95");
+	REQUIRE(test_sink->lines()[3] == "debug message 96");
+	REQUIRE(test_sink->lines()[4] == "debug message 97");
+	REQUIRE(test_sink->lines()[5] == "debug message 98");	
+	REQUIRE(test_sink->lines()[6] == "debug message 99");			
+	REQUIRE(test_sink->lines()[7] == "****************** Backtrace End ********************");		
 }