From 42760092e7f0c34c9e8b0aef0db872b48e3d9367 Mon Sep 17 00:00:00 2001 From: Paul Elder Date: Sat, 13 Jul 2019 04:29:03 +0900 Subject: test: logging: add logSetStream test 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 Reviewed-by: Laurent Pinchart --- test/log.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 81 insertions(+), 25 deletions(-) (limited to 'test') diff --git a/test/log.cpp b/test/log.cpp index 89fb5cad..33622f84 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 goodList = { 1, 3, 5 }; - std::basic_istringstream iss((std::string(buf))); - std::string line; - while (getline(iss, line)) { + int verifyOutput(istream &is) + { + list 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) -- cgit v1.2.1