From 093b1b47d9c874b5d7d17e720f1f68f00d7c000e Mon Sep 17 00:00:00 2001
From: kwolekr <kwolekr@minetest.net>
Date: Fri, 12 Dec 2014 15:12:31 -0500
Subject: [PATCH] Log: Silence errorstream during unittests

---
 src/log.cpp  | 18 ++++++++++++++++++
 src/log.h    |  9 ++++++++-
 src/test.cpp |  4 ++++
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/src/log.cpp b/src/log.cpp
index ff2e16333..8ed1f7694 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -60,6 +60,21 @@ void log_remove_output(ILogOutput *out)
 	}
 }
 
+void log_set_lev_silence(enum LogMessageLevel lev, bool silence)
+{
+	log_threadnamemutex.Lock();
+
+	for (std::list<ILogOutput *>::iterator
+			it = log_outputs[lev].begin();
+			it != log_outputs[lev].end();
+			++it) {
+		ILogOutput *out = *it;
+		out->silence = silence;
+	}
+
+	log_threadnamemutex.Unlock();
+}
+
 void log_register_thread(const std::string &name)
 {
 	threadid_t id = get_current_thread_id();
@@ -107,6 +122,9 @@ void log_printline(enum LogMessageLevel lev, const std::string &text)
 	for(std::list<ILogOutput*>::iterator i = log_outputs[lev].begin();
 			i != log_outputs[lev].end(); i++){
 		ILogOutput *out = *i;
+		if (out->silence)
+			continue;
+
 		out->printLog(os.str());
 		out->printLog(os.str(), lev);
 		out->printLog(lev, text);
diff --git a/src/log.h b/src/log.h
index 7d8b60b71..6240e34ed 100644
--- a/src/log.h
+++ b/src/log.h
@@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 /*
 	Use this for logging everything.
-	
+
 	If you need to explicitly print something, use dstream or cout or cerr.
 */
 
@@ -39,18 +39,25 @@ enum LogMessageLevel {
 class ILogOutput
 {
 public:
+	ILogOutput() :
+		silence(false)
+	{}
+
 	/* line: Full line with timestamp, level and thread */
 	virtual void printLog(const std::string &line){};
 	/* line: Full line with timestamp, level and thread */
 	virtual void printLog(const std::string &line, enum LogMessageLevel lev){};
 	/* line: Only actual printed text */
 	virtual void printLog(enum LogMessageLevel lev, const std::string &line){};
+
+	bool silence;
 };
 
 void log_add_output(ILogOutput *out, enum LogMessageLevel lev);
 void log_add_output_maxlev(ILogOutput *out, enum LogMessageLevel lev);
 void log_add_output_all_levs(ILogOutput *out);
 void log_remove_output(ILogOutput *out);
+void log_set_lev_silence(enum LogMessageLevel lev, bool silence);
 
 void log_register_thread(const std::string &name);
 void log_deregister_thread();
diff --git a/src/test.cpp b/src/test.cpp
index 072bda8ef..fa18989e5 100644
--- a/src/test.cpp
+++ b/src/test.cpp
@@ -2177,6 +2177,8 @@ void run_tests()
 	IWritableNodeDefManager *ndef = createNodeDefManager();
 	define_some_nodes(idef, ndef);
 
+	log_set_lev_silence(LMT_ERROR, true);
+
 	infostream<<"run_tests() started"<<std::endl;
 	TEST(TestUtilities);
 	TEST(TestPath);
@@ -2198,6 +2200,8 @@ void run_tests()
 		dout_con<<"=== END RUNNING UNIT TESTS FOR CONNECTION ==="<<std::endl;
 	}
 
+	log_set_lev_silence(LMT_ERROR, false);
+
 	delete idef;
 	delete ndef;
 
-- 
GitLab