Skip to content

Commit

Permalink
kunit: fix bug of extra newline characters in debugfs logs
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Rae Moar authored and Shuah Khan committed Mar 10, 2023
1 parent f9a301c commit 2c6a96d
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 13 deletions.
2 changes: 1 addition & 1 deletion include/kunit/test.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
35 changes: 23 additions & 12 deletions lib/kunit/kunit-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
18 changes: 18 additions & 0 deletions lib/kunit/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit 2c6a96d

Please sign in to comment.