You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by sw...@apache.org on 2024/01/08 03:15:00 UTC

(logging-log4cxx) branch master updated: Remove unnecessary delays in unit tests (#325)

This is an automated email from the ASF dual-hosted git repository.

swebb2066 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git


The following commit(s) were added to refs/heads/master by this push:
     new 13c1abca Remove unnecessary delays in unit tests (#325)
13c1abca is described below

commit 13c1abcacfa2161cce28f51396cf61be7cce4465
Author: Stephen Webb <st...@ieee.org>
AuthorDate: Mon Jan 8 14:14:54 2024 +1100

    Remove unnecessary delays in unit tests (#325)
    
    * Improve AsyncAppenderTestCase clarity
---
 src/test/cpp/asyncappendertestcase.cpp | 27 +++++++++++++--------------
 src/test/cpp/streamtestcase.cpp        |  5 +++--
 src/test/cpp/vectorappender.cpp        |  6 +++---
 src/test/cpp/vectorappender.h          |  9 +++++++--
 4 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/src/test/cpp/asyncappendertestcase.cpp b/src/test/cpp/asyncappendertestcase.cpp
index fd98ed0f..22c32860 100644
--- a/src/test/cpp/asyncappendertestcase.cpp
+++ b/src/test/cpp/asyncappendertestcase.cpp
@@ -123,9 +123,9 @@ class AsyncAppenderTestCase : public AppenderSkeletonTestCase
 
 		LOGUNIT_TEST(closeTest);
 		LOGUNIT_TEST(test2);
-		LOGUNIT_TEST(test3);
+		LOGUNIT_TEST(testEventFlush);
 		LOGUNIT_TEST(testBadAppender);
-		LOGUNIT_TEST(testLocationInfoTrue);
+		LOGUNIT_TEST(testBufferOverflowBehavior);
 #if LOG4CXX_HAS_DOMCONFIGURATOR
 		LOGUNIT_TEST(testConfiguration);
 #endif
@@ -197,15 +197,15 @@ class AsyncAppenderTestCase : public AppenderSkeletonTestCase
 			LOGUNIT_ASSERT(vectorAppender->isClosed());
 		}
 
-		// this test checks whether appenders embedded within an AsyncAppender are also
-		// closed
-		void test3()
+		// this test checks all messages are delivered when an AsyncAppender is closed
+		void testEventFlush()
 		{
-			size_t LEN = 200;
+			size_t LEN = 200; // Larger than default buffer size (128)
 			LoggerPtr root = Logger::getRootLogger();
 			VectorAppenderPtr vectorAppender = VectorAppenderPtr(new VectorAppender());
+			vectorAppender->setMillisecondDelay(1);
 			AsyncAppenderPtr asyncAppender = AsyncAppenderPtr(new AsyncAppender());
-			asyncAppender->setName(LOG4CXX_STR("async-test3"));
+			asyncAppender->setName(LOG4CXX_STR("async-testEventFlush"));
 			asyncAppender->addAppender(vectorAppender);
 			root->addAppender(asyncAppender);
 
@@ -253,14 +253,14 @@ class AsyncAppenderTestCase : public AppenderSkeletonTestCase
 		}
 
 		/**
-		 * Tests non-blocking behavior.
+		 * Tests behavior when the the async buffer overflows.
 		 */
-		void testLocationInfoTrue()
+		void testBufferOverflowBehavior()
 		{
 			BlockableVectorAppenderPtr blockableAppender = BlockableVectorAppenderPtr(new BlockableVectorAppender());
 			blockableAppender->setName(LOG4CXX_STR("async-blockableVector"));
 			AsyncAppenderPtr async = AsyncAppenderPtr(new AsyncAppender());
-			async->setName(LOG4CXX_STR("async-testLocationInfoTrue"));
+			async->setName(LOG4CXX_STR("async-testBufferOverflowBehavior"));
 			async->addAppender(blockableAppender);
 			async->setBufferSize(5);
 			async->setLocationInfo(true);
@@ -275,16 +275,15 @@ class AsyncAppenderTestCase : public AppenderSkeletonTestCase
 				for (int i = 0; i < 140; i++)
 				{
 					LOG4CXX_INFO(rootLogger, "Hello, World");
-					std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );
 				}
 
 				LOG4CXX_ERROR(rootLogger, "That's all folks.");
 			}
 			async->close();
 			const std::vector<spi::LoggingEventPtr>& events = blockableAppender->getVector();
-			LOGUNIT_ASSERT(events.size() > 0);
-			LoggingEventPtr initialEvent = events[0];
-			LoggingEventPtr discardEvent = events[events.size() - 1];
+			LOGUNIT_ASSERT(!events.empty());
+			LoggingEventPtr initialEvent = events.front();
+			LoggingEventPtr discardEvent = events.back();
 			LOGUNIT_ASSERT(initialEvent->getMessage() == LOG4CXX_STR("Hello, World"));
 			LOGUNIT_ASSERT(discardEvent->getMessage().substr(0, 10) == LOG4CXX_STR("Discarded "));
 			LOGUNIT_ASSERT_EQUAL(log4cxx::spi::LocationInfo::getLocationUnavailable().getClassName(),
diff --git a/src/test/cpp/streamtestcase.cpp b/src/test/cpp/streamtestcase.cpp
index c90efd90..df2bdd92 100644
--- a/src/test/cpp/streamtestcase.cpp
+++ b/src/test/cpp/streamtestcase.cpp
@@ -188,8 +188,9 @@ public:
 	{
 		LoggerPtr root(Logger::getRootLogger());
 		LOG4CXX_INFO(root, std::scientific << 0.000001115);
-		spi::LoggingEventPtr event(vectorAppender->getVector()[0]);
-		LogString msg(event->getMessage());
+		auto events = vectorAppender->getVector();
+		LOGUNIT_ASSERT_EQUAL((size_t) 1, events.size());
+		LogString msg(events.front()->getMessage());
 		LOGUNIT_ASSERT(msg.find(LOG4CXX_STR("e-")) != LogString::npos ||
 			msg.find(LOG4CXX_STR("E-")) != LogString::npos);
 	}
diff --git a/src/test/cpp/vectorappender.cpp b/src/test/cpp/vectorappender.cpp
index 13fa5656..e01dbad8 100644
--- a/src/test/cpp/vectorappender.cpp
+++ b/src/test/cpp/vectorappender.cpp
@@ -25,9 +25,9 @@ IMPLEMENT_LOG4CXX_OBJECT(VectorAppender)
 
 void VectorAppender::append(const spi::LoggingEventPtr& event, Pool& /*p*/)
 {
-	std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
-
-	vector.push_back(event);
+	if (0 < this->appendMillisecondDelay)
+		std::this_thread::sleep_for( std::chrono::milliseconds( this->appendMillisecondDelay ) );
+	this->vector.push_back(event);
 }
 
 void VectorAppender::close()
diff --git a/src/test/cpp/vectorappender.h b/src/test/cpp/vectorappender.h
index fe184dea..0d379fd4 100644
--- a/src/test/cpp/vectorappender.h
+++ b/src/test/cpp/vectorappender.h
@@ -37,7 +37,7 @@ class VectorAppender : public AppenderSkeleton
 		END_LOG4CXX_CAST_MAP()
 
 		std::vector<spi::LoggingEventPtr> vector;
-
+		int appendMillisecondDelay = 0;
 
 		/**
 		This method is called by the AppenderSkeleton#doAppend
@@ -47,7 +47,7 @@ class VectorAppender : public AppenderSkeleton
 
 		const std::vector<spi::LoggingEventPtr>& getVector() const
 		{
-			return vector;
+			return this->vector;
 		}
 
 		void close() override;
@@ -61,6 +61,11 @@ class VectorAppender : public AppenderSkeleton
 		{
 			return false;
 		}
+
+		void setMillisecondDelay(int milliseconds)
+		{
+			this->appendMillisecondDelay = milliseconds;
+		}
 };
 typedef std::shared_ptr<VectorAppender> VectorAppenderPtr;
 }