Skip to content

Commit

Permalink
kunit: fix bug in debugfs logs of parameterized tests
Browse files Browse the repository at this point in the history
Fix bug in debugfs logs that causes individual parameterized results to not
appear because the log is reinitialized (cleared) when each parameter is
run.

Ensure these results appear in the debugfs logs, increase log size to
allow for the size of parameterized results. As a result, append lines to
the log directly rather than using an intermediate variable that can cause
stack size warnings due to the increased log size.

Here is the debugfs log of ext4_inode_test which uses parameterized tests
before the fix:

     KTAP version 1

     # Subtest: ext4_inode_test
     1..1
 # Totals: pass:16 fail:0 skip:0 total:16
 ok 1 ext4_inode_test

As you can see, this log does not include any of the individual
parametrized results.

After (in combination with the next two fixes to remove extra empty line
and ensure KTAP valid format):

 KTAP version 1
 1..1
     KTAP version 1
     # Subtest: ext4_inode_test
     1..1
        KTAP version 1
         # Subtest: inode_test_xtimestamp_decoding
         ok 1 1901-12-13 Lower bound of 32bit < 0 timestamp, no extra bits
         ... (the rest of the individual parameterized tests)
         ok 16 2446-05-10 Upper bound of 32bit >=0 timestamp. All extra
     # inode_test_xtimestamp_decoding: pass:16 fail:0 skip:0 total:16
     ok 1 inode_test_xtimestamp_decoding
 # Totals: pass:16 fail:0 skip:0 total:16
 ok 1 ext4_inode_test

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 60684c2 commit 887d85a
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 7 deletions.
2 changes: 1 addition & 1 deletion include/kunit/test.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ DECLARE_STATIC_KEY_FALSE(kunit_running);
struct kunit;

/* Size of log associated with test. */
#define KUNIT_LOG_SIZE 512
#define KUNIT_LOG_SIZE 1500

/* Maximum size of parameter description string. */
#define KUNIT_PARAM_DESC_SIZE 128
Expand Down
18 changes: 12 additions & 6 deletions lib/kunit/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,22 +114,27 @@ static void kunit_print_test_stats(struct kunit *test,
*/
void kunit_log_append(char *log, const char *fmt, ...)
{
char line[KUNIT_LOG_SIZE];
va_list args;
int len_left;
int len, log_len, len_left;

if (!log)
return;

len_left = KUNIT_LOG_SIZE - strlen(log) - 1;
log_len = strlen(log);
len_left = KUNIT_LOG_SIZE - log_len - 1;
if (len_left <= 0)
return;

/* Evaluate length of line to add to log */
va_start(args, fmt);
vsnprintf(line, sizeof(line), fmt, args);
len = vsnprintf(NULL, 0, fmt, args) + 1;
va_end(args);

/* Print formatted line to the log */
va_start(args, fmt);
vsnprintf(log + log_len, min(len, len_left), fmt, args);
va_end(args);

strncat(log, line, len_left);
}
EXPORT_SYMBOL_GPL(kunit_log_append);

Expand Down Expand Up @@ -437,7 +442,6 @@ static void kunit_run_case_catch_errors(struct kunit_suite *suite,
struct kunit_try_catch_context context;
struct kunit_try_catch *try_catch;

kunit_init_test(test, test_case->name, test_case->log);
try_catch = &test->try_catch;

kunit_try_catch_init(try_catch,
Expand Down Expand Up @@ -533,6 +537,8 @@ int kunit_run_tests(struct kunit_suite *suite)
struct kunit_result_stats param_stats = { 0 };
test_case->status = KUNIT_SKIPPED;

kunit_init_test(&test, test_case->name, test_case->log);

if (!test_case->generate_params) {
/* Non-parameterised test. */
kunit_run_case_catch_errors(suite, test_case, &test);
Expand Down

0 comments on commit 887d85a

Please sign in to comment.