kunit: fix bug of extra newline characters in debugfs logs
Fix bug of the extra newline characters in debugfs logs. When a line is added to debugfs with a newline character at the end, an extra line appears in the debugfs log. This is due to a discrepancy between how the lines are printed and how they are added to the logs. Remove this discrepancy by checking if a newline character is present before adding a newline character. This should closely match the printk behavior. Add kunit_log_newline_test to provide test coverage for this issue. (Also, move kunit_log_test above suite definition to remove the unnecessary declaration prior to the suite definition) As an example, say we add these two lines to the log: kunit_log(..., "KTAP version 1\n"); kunit_log(..., "1..1"); The debugfs log before this fix: KTAP version 1 1..1 The debugfs log after this fix: KTAP version 1 1..1 Signed-off-by: Rae Moar <rmoar@google.com> Reviewed-by: David Gow <davidgow@google.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
Родитель
f9a301c331
Коммит
2c6a96dad5
|
@ -420,7 +420,7 @@ void __printf(2, 3) kunit_log_append(char *log, const char *fmt, ...);
|
|||
#define kunit_log(lvl, test_or_suite, fmt, ...) \
|
||||
do { \
|
||||
printk(lvl fmt, ##__VA_ARGS__); \
|
||||
kunit_log_append((test_or_suite)->log, fmt "\n", \
|
||||
kunit_log_append((test_or_suite)->log, fmt, \
|
||||
##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
|
|
|
@ -443,18 +443,6 @@ static struct kunit_suite kunit_resource_test_suite = {
|
|||
.test_cases = kunit_resource_test_cases,
|
||||
};
|
||||
|
||||
static void kunit_log_test(struct kunit *test);
|
||||
|
||||
static struct kunit_case kunit_log_test_cases[] = {
|
||||
KUNIT_CASE(kunit_log_test),
|
||||
{}
|
||||
};
|
||||
|
||||
static struct kunit_suite kunit_log_test_suite = {
|
||||
.name = "kunit-log-test",
|
||||
.test_cases = kunit_log_test_cases,
|
||||
};
|
||||
|
||||
static void kunit_log_test(struct kunit *test)
|
||||
{
|
||||
struct kunit_suite suite;
|
||||
|
@ -481,6 +469,29 @@ static void kunit_log_test(struct kunit *test)
|
|||
#endif
|
||||
}
|
||||
|
||||
static void kunit_log_newline_test(struct kunit *test)
|
||||
{
|
||||
kunit_info(test, "Add newline\n");
|
||||
if (test->log) {
|
||||
KUNIT_ASSERT_NOT_NULL_MSG(test, strstr(test->log, "Add newline\n"),
|
||||
"Missing log line, full log:\n%s", test->log);
|
||||
KUNIT_EXPECT_NULL(test, strstr(test->log, "Add newline\n\n"));
|
||||
} else {
|
||||
kunit_skip(test, "only useful when debugfs is enabled");
|
||||
}
|
||||
}
|
||||
|
||||
static struct kunit_case kunit_log_test_cases[] = {
|
||||
KUNIT_CASE(kunit_log_test),
|
||||
KUNIT_CASE(kunit_log_newline_test),
|
||||
{}
|
||||
};
|
||||
|
||||
static struct kunit_suite kunit_log_test_suite = {
|
||||
.name = "kunit-log-test",
|
||||
.test_cases = kunit_log_test_cases,
|
||||
};
|
||||
|
||||
static void kunit_status_set_failure_test(struct kunit *test)
|
||||
{
|
||||
struct kunit fake;
|
||||
|
|
|
@ -108,6 +108,22 @@ static void kunit_print_test_stats(struct kunit *test,
|
|||
stats.total);
|
||||
}
|
||||
|
||||
/**
|
||||
* kunit_log_newline() - Add newline to the end of log if one is not
|
||||
* already present.
|
||||
* @log: The log to add the newline to.
|
||||
*/
|
||||
static void kunit_log_newline(char *log)
|
||||
{
|
||||
int log_len, len_left;
|
||||
|
||||
log_len = strlen(log);
|
||||
len_left = KUNIT_LOG_SIZE - log_len - 1;
|
||||
|
||||
if (log_len > 0 && log[log_len - 1] != '\n')
|
||||
strncat(log, "\n", len_left);
|
||||
}
|
||||
|
||||
/*
|
||||
* Append formatted message to log, size of which is limited to
|
||||
* KUNIT_LOG_SIZE bytes (including null terminating byte).
|
||||
|
@ -135,6 +151,8 @@ void kunit_log_append(char *log, const char *fmt, ...)
|
|||
vsnprintf(log + log_len, min(len, len_left), fmt, args);
|
||||
va_end(args);
|
||||
|
||||
/* Add newline to end of log if not already present. */
|
||||
kunit_log_newline(log);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_log_append);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче