kunit: Don't crash if no parameters are generated
authorDavid Gow <davidgow@google.com>
Tue, 2 Nov 2021 07:30:13 +0000 (00:30 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 10:04:40 +0000 (11:04 +0100)
[ Upstream commit 37dbb4c7c7442dbfc9b651e4ddd4afe30b26afc9 ]

It's possible that a parameterised test could end up with zero
parameters. At the moment, the test function will nevertheless be called
with NULL as the parameter. Instead, don't try to run the test code, and
just mark the test as SKIPped.

Reported-by: Daniel Latypov <dlatypov@google.com>
Signed-off-by: David Gow <davidgow@google.com>
Reviewed-by: Daniel Latypov <dlatypov@google.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
lib/kunit/test.c

index f246b847024e3f3409a2bf1356799aa29a695a0a..9aef816e573c1b1cc1d4b7d6280c3a28d204d935 100644 (file)
@@ -504,16 +504,18 @@ int kunit_run_tests(struct kunit_suite *suite)
                struct kunit_result_stats param_stats = { 0 };
                test_case->status = KUNIT_SKIPPED;
 
-               if (test_case->generate_params) {
+               if (!test_case->generate_params) {
+                       /* Non-parameterised test. */
+                       kunit_run_case_catch_errors(suite, test_case, &test);
+                       kunit_update_stats(&param_stats, test.status);
+               } else {
                        /* Get initial param. */
                        param_desc[0] = '\0';
                        test.param_value = test_case->generate_params(NULL, param_desc);
-               }
 
-               do {
-                       kunit_run_case_catch_errors(suite, test_case, &test);
+                       while (test.param_value) {
+                               kunit_run_case_catch_errors(suite, test_case, &test);
 
-                       if (test_case->generate_params) {
                                if (param_desc[0] == '\0') {
                                        snprintf(param_desc, sizeof(param_desc),
                                                 "param-%d", test.param_index);
@@ -530,11 +532,11 @@ int kunit_run_tests(struct kunit_suite *suite)
                                param_desc[0] = '\0';
                                test.param_value = test_case->generate_params(test.param_value, param_desc);
                                test.param_index++;
-                       }
 
-                       kunit_update_stats(&param_stats, test.status);
+                               kunit_update_stats(&param_stats, test.status);
+                       }
+               }
 
-               } while (test.param_value);
 
                kunit_print_test_stats(&test, param_stats);