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

Paul Elder paul.elder at ideasonboard.com
Thu Jul 11 12:24:18 CEST 2019


Test that setting the log file and log levels works from an application
point of view. The test uses the internal logging mechanism as well,
just to write to the log file.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
Changes in v2:
- added more test cases to catch if log level changes fail

 test/log/log_api.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++
 test/log/meson.build | 12 +++++++
 test/meson.build     |  1 +
 3 files changed, 88 insertions(+)
 create mode 100644 test/log/log_api.cpp
 create mode 100644 test/log/meson.build

diff --git a/test/log/log_api.cpp b/test/log/log_api.cpp
new file mode 100644
index 0000000..395b857
--- /dev/null
+++ b/test/log/log_api.cpp
@@ -0,0 +1,75 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * log_api.cpp - log API test
+ */
+
+#include <algorithm>
+#include <fcntl.h>
+#include <iostream>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <libcamera/logging.h>
+
+#include "log.h"
+#include "test.h"
+
+using namespace std;
+using namespace libcamera;
+
+LOG_DEFINE_CATEGORY(LogAPITest)
+
+class LogAPITest : public Test
+{
+protected:
+	int run() override
+	{
+		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[PATH_MAX];
+		snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd);
+
+		logSetFile(path);
+
+		logSetLevel("LogAPITest", "DEBUG");
+		LOG(LogAPITest, Info) << "asdf";
+
+		logSetLevel("LogAPITest", "WARN");
+		LOG(LogAPITest, Info) << "asdf";
+
+		logSetLevel("LogAPITest", "WARN");
+		LOG(LogAPITest, Info) << "asdf";
+		LOG(LogAPITest, Debug) << "asdf";
+
+		logSetLevel("LogAPITest", "ERROR");
+		LOG(LogAPITest, Error) << "asdf";
+		LOG(LogAPITest, Info) << "asdf";
+
+		logSetLevel("LogAPITest", "WARN");
+		LOG(LogAPITest, Warning) << "asdf";
+		LOG(LogAPITest, Info) << "asdf";
+
+		char buf[200];
+		lseek(fd, 0, SEEK_SET);
+		read(fd, buf, 1000);
+		close(fd);
+
+		std::string s(buf);
+		int n = count(s.begin(), s.end(), '\n');
+		if (n == 3)
+			return TestPass;
+
+		return TestFail;
+	}
+};
+
+TEST_REGISTER(LogAPITest)
diff --git a/test/log/meson.build b/test/log/meson.build
new file mode 100644
index 0000000..35ea553
--- /dev/null
+++ b/test/log/meson.build
@@ -0,0 +1,12 @@
+log_api_test = [
+    ['log_api', 'log_api.cpp'],
+]
+
+foreach t : log_api_test
+    exe = executable(t[0], t[1],
+                     dependencies : libcamera_dep,
+                     link_with : test_libraries,
+                     include_directories : test_includes_internal)
+
+    test(t[0], exe, suite : 'log')
+endforeach
diff --git a/test/meson.build b/test/meson.build
index 60ce960..44d8495 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -4,6 +4,7 @@ subdir('camera')
 subdir('controls')
 subdir('ipa')
 subdir('ipc')
+subdir('log')
 subdir('media_device')
 subdir('pipeline')
 subdir('stream')
-- 
2.20.1



More information about the libcamera-devel mailing list