[libcamera-devel] [PATCH v2 2/2] test: add logging API test
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Jul 11 18:11:07 CEST 2019
Hi Paul,
Thank you for the patch.
On Thu, Jul 11, 2019 at 07:24:18PM +0900, Paul Elder wrote:
> 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 +
There's no need to create a directory for a single test, you can move it
to test/, and I would even call it log.cpp for now.
> 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];
That's a bit long, 32 will largely suffice.
> + snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd);
s/PATH_MAX/sizeof(path)/
s/%d/%u/ as we know the number is positive
> +
> + logSetFile(path);
> +
> + logSetLevel("LogAPITest", "DEBUG");
> + LOG(LogAPITest, Info) << "asdf";
> +
> + logSetLevel("LogAPITest", "WARN");
> + LOG(LogAPITest, Info) << "asdf";
> +
> + logSetLevel("LogAPITest", "WARN");
> + LOG(LogAPITest, Info) << "asdf";
Those two lines don't appear to do anything more than the two previous
ones.
> + 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";
I would print a sequence of numbers instead of "asdf", and verify that
the expected numbers are printed. This will be easier if you read the
whole file (in a bigger array than 200 bytes) and wrap the buffer in an
istringstream
(https://en.cppreference.com/w/cpp/io/basic_istringstream). You can then
call getline() in a loop and get the last character of each line.
> +
> + 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')
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list