From a25c937f8afee766d3001c488a19acc9a8aac2dd Mon Sep 17 00:00:00 2001 From: Paul Elder Date: Thu, 11 Jul 2019 18:29:59 +0900 Subject: test: add logging API test 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 Reviewed-by: Laurent Pinchart --- test/log.cpp | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/meson.build | 1 + 2 files changed, 93 insertions(+) create mode 100644 test/log.cpp diff --git a/test/log.cpp b/test/log.cpp new file mode 100644 index 00000000..bc64325c --- /dev/null +++ b/test/log.cpp @@ -0,0 +1,92 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * log.cpp - log API test + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#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[32]; + snprintf(path, sizeof(path), "/proc/self/fd/%u", fd); + + logSetFile(path); + + logSetLevel("LogAPITest", "DEBUG"); + LOG(LogAPITest, Info) << "good 1"; + + logSetLevel("LogAPITest", "WARN"); + LOG(LogAPITest, Info) << "bad"; + + logSetLevel("LogAPITest", "ERROR"); + LOG(LogAPITest, Error) << "good 3"; + LOG(LogAPITest, Info) << "bad"; + + 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); + read(fd, buf, sizeof(buf)); + close(fd); + + std::list goodList = { 1, 3, 5 }; + std::basic_istringstream iss((std::string(buf))); + std::string line; + while (getline(iss, line)) { + if (goodList.empty()) { + cout << "Too many log lines" << endl; + return TestFail; + } + + unsigned int digit = line.back() - '0'; + unsigned int expect = goodList.front(); + goodList.pop_front(); + if (digit != expect) { + cout << "Incorrect log line" << endl; + return TestFail; + } + } + + if (!goodList.empty()) { + cout << "Too few log lines" << endl; + return TestFail; + } + + return TestPass; + } +}; + +TEST_REGISTER(LogAPITest) diff --git a/test/meson.build b/test/meson.build index 60ce9601..d308ac9c 100644 --- a/test/meson.build +++ b/test/meson.build @@ -21,6 +21,7 @@ public_tests = [ internal_tests = [ ['camera-sensor', 'camera-sensor.cpp'], + ['log', 'log.cpp'], ['message', 'message.cpp'], ['signal-threads', 'signal-threads.cpp'], ['threads', 'threads.cpp'], -- cgit v1.2.1