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)
committerShuah Khan <skhan@linuxfoundation.org>
Mon, 13 Dec 2021 20:36:21 +0000 (13:36 -0700)
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>
lib/kunit/test.c

index 3bd741e50a2d3721b900339eb2587dbfbc5c6487..f96498ede2cc5f079a9281bd42ea72fe3bcb840e 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);