[libcamera-devel] [PATCH v2 2/4] test: logging: add logSetStream test

Paul Elder paul.elder at ideasonboard.com
Tue Jul 16 09:05:06 CEST 2019


Test the new logSetStream logging API call. Reorganize the logging API
tests at the same time.

logSetTarget for the syslog logging destination is not tested.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
Changes in v2:
- add testing for logSetTarget, to test that writing to none doesn't
  crash, and to test that setting to file or stream fail
- make verifyOutput() take an istream (instead of a string)
- make total test passage checking nicer

 test/log.cpp | 106 +++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 81 insertions(+), 25 deletions(-)

diff --git a/test/log.cpp b/test/log.cpp
index 89fb5ca..33622f8 100644
--- a/test/log.cpp
+++ b/test/log.cpp
@@ -29,19 +29,8 @@ LOG_DEFINE_CATEGORY(LogAPITest)
 class LogAPITest : public Test
 {
 protected:
-	int run() override
+	void doLogging()
 	{
-		int fd = open("/tmp", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR);
-		if (fd < 0) {
-			cerr << "Failed to open tmp log file" << endl;
-			return TestFail;
-		}
-
-		char path[32];
-		snprintf(path, sizeof(path), "/proc/self/fd/%u", fd);
-
-		logSetFile(path);
-
 		logSetLevel("LogAPITest", "DEBUG");
 		LOG(LogAPITest, Info) << "good 1";
 
@@ -55,20 +44,13 @@ protected:
 		logSetLevel("LogAPITest", "WARN");
 		LOG(LogAPITest, Warning) << "good 5";
 		LOG(LogAPITest, Info) << "bad";
+	}
 
-		char buf[1000];
-		memset(buf, 0, sizeof(buf));
-		lseek(fd, 0, SEEK_SET);
-		if (read(fd, buf, sizeof(buf)) < 0) {
-			cerr << "Failed to read tmp log file" << endl;
-			return TestFail;
-		}
-		close(fd);
-
-		std::list<int> goodList = { 1, 3, 5 };
-		std::basic_istringstream<char> iss((std::string(buf)));
-		std::string line;
-		while (getline(iss, line)) {
+	int verifyOutput(istream &is)
+	{
+		list<int> goodList = { 1, 3, 5 };
+		string line;
+		while (getline(is, line)) {
 			if (goodList.empty()) {
 				cout << "Too many log lines" << endl;
 				return TestFail;
@@ -90,6 +72,80 @@ protected:
 
 		return TestPass;
 	}
+
+	int testFile()
+	{
+		int fd = open("/tmp", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR);
+		if (fd < 0) {
+			cerr << "Failed to open tmp log file" << endl;
+			return TestFail;
+		}
+
+		char path[32];
+		snprintf(path, sizeof(path), "/proc/self/fd/%u", fd);
+
+		if (logSetFile(path) < 0) {
+			cerr << "Failed to set log file" << endl;
+			return TestFail;
+		}
+
+		doLogging();
+
+		char buf[1000];
+		memset(buf, 0, sizeof(buf));
+		lseek(fd, 0, SEEK_SET);
+		if (read(fd, buf, sizeof(buf)) < 0) {
+			cerr << "Failed to read tmp log file" << endl;
+			return TestFail;
+		}
+		close(fd);
+
+		istringstream iss(buf);
+		return verifyOutput(iss);
+	}
+
+	int testStream()
+	{
+		stringstream log;
+		/* Never fails, so no need to check return value */
+		logSetStream(&log);
+
+		doLogging();
+
+		return verifyOutput(log);
+	}
+
+	int testTarget()
+	{
+		logSetTarget(LoggingTargetNone);
+		logSetLevel("LogAPITest", "DEBUG");
+		LOG(LogAPITest, Info) << "don't crash please";
+
+		if (!logSetTarget(LoggingTargetFile))
+			return TestFail;
+
+		if (!logSetTarget(LoggingTargetStream))
+			return TestFail;
+
+		return TestPass;
+	}
+
+	int run() override
+	{
+		int ret = testFile();
+		if (ret != TestPass)
+			return TestFail;
+
+		ret = testStream();
+		if (ret != TestPass)
+			return TestFail;
+
+		ret = testTarget();
+		if (ret != TestPass)
+			return TestFail;
+
+		return TestPass;
+	}
 };
 
 TEST_REGISTER(LogAPITest)
-- 
2.17.1



More information about the libcamera-devel mailing list