[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