Message ID | 20200128072002.79250-7-brendanhiggins@google.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | kunit: create a centralized executor to dispatch all KUnit tests | expand |
Quoting Brendan Higgins (2020-01-27 23:20:01) > From: David Gow <davidgow@google.com> > > Add a new kernel command-line option, 'kunit_shutdown', which allows the > user to specify that the kernel poweroff, halt, or reboot after > completing all KUnit tests; this is very handy for running KUnit tests > on UML or a VM so that the UML/VM process exits cleanly immediately > after running all tests without needing a special initramfs. > > Signed-off-by: David Gow <davidgow@google.com> > Signed-off-by: Brendan Higgins <brendanhiggins@google.com> > --- Two nitpicks below Reviewed-by: Stephen Boyd <sboyd@kernel.org> > diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c > index 7fd16feff157e..d3ec1265a72fd 100644 > --- a/lib/kunit/executor.c > +++ b/lib/kunit/executor.c > @@ -1,6 +1,7 @@ > // SPDX-License-Identifier: GPL-2.0 > > #include <kunit/test.h> > +#include <linux/reboot.h> Should this include come before kunit/test.h? I imagine the order of includes would be linux, kunit, local? > > /* > * These symbols point to the .kunit_test_suites section and are defined in > @@ -11,6 +12,23 @@ extern struct kunit_suite * const * const __kunit_suites_end[]; > > #if IS_BUILTIN(CONFIG_KUNIT) > > +static char *kunit_shutdown; > +core_param(kunit_shutdown, kunit_shutdown, charp, 0644); > + > +static void kunit_handle_shutdown(void) > +{ > + if (!kunit_shutdown) > + return; > + > + if (!strcmp(kunit_shutdown, "poweroff")) { > + kernel_power_off(); > + } else if (!strcmp(kunit_shutdown, "halt")) { > + kernel_halt(); > + } else if (!strcmp(kunit_shutdown, "reboot")) { > + kernel_restart(NULL); > + } Kernel style would be to not have braces on single line if statements. > +} > + > static void kunit_print_tap_header(void) > { > struct kunit_suite * const * const *suites, * const *subsuite;
On Tue, Jan 28, 2020 at 10:33 PM Stephen Boyd <sboyd@kernel.org> wrote: > > Quoting Brendan Higgins (2020-01-27 23:20:01) > > From: David Gow <davidgow@google.com> > > > > Add a new kernel command-line option, 'kunit_shutdown', which allows the > > user to specify that the kernel poweroff, halt, or reboot after > > completing all KUnit tests; this is very handy for running KUnit tests > > on UML or a VM so that the UML/VM process exits cleanly immediately > > after running all tests without needing a special initramfs. > > > > Signed-off-by: David Gow <davidgow@google.com> > > Signed-off-by: Brendan Higgins <brendanhiggins@google.com> > > --- > > Two nitpicks below > > Reviewed-by: Stephen Boyd <sboyd@kernel.org> > > > diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c > > index 7fd16feff157e..d3ec1265a72fd 100644 > > --- a/lib/kunit/executor.c > > +++ b/lib/kunit/executor.c > > @@ -1,6 +1,7 @@ > > // SPDX-License-Identifier: GPL-2.0 > > > > #include <kunit/test.h> > > +#include <linux/reboot.h> > > Should this include come before kunit/test.h? I imagine the order of > includes would be linux, kunit, local? I think some reviewers/maintainers want them all to be alphabetical. So I have probably done it both ways in the past. Will fix. > > > > /* > > * These symbols point to the .kunit_test_suites section and are defined in > > @@ -11,6 +12,23 @@ extern struct kunit_suite * const * const __kunit_suites_end[]; > > > > #if IS_BUILTIN(CONFIG_KUNIT) > > > > +static char *kunit_shutdown; > > +core_param(kunit_shutdown, kunit_shutdown, charp, 0644); > > + > > +static void kunit_handle_shutdown(void) > > +{ > > + if (!kunit_shutdown) > > + return; > > + > > + if (!strcmp(kunit_shutdown, "poweroff")) { > > + kernel_power_off(); > > + } else if (!strcmp(kunit_shutdown, "halt")) { > > + kernel_halt(); > > + } else if (!strcmp(kunit_shutdown, "reboot")) { > > + kernel_restart(NULL); > > + } > > Kernel style would be to not have braces on single line if statements. Whoops. Sometimes I forget :-) > > +} > > + > > static void kunit_print_tap_header(void) > > { > > struct kunit_suite * const * const *suites, * const *subsuite; Thanks!
diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c index 7fd16feff157e..d3ec1265a72fd 100644 --- a/lib/kunit/executor.c +++ b/lib/kunit/executor.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include <kunit/test.h> +#include <linux/reboot.h> /* * These symbols point to the .kunit_test_suites section and are defined in @@ -11,6 +12,23 @@ extern struct kunit_suite * const * const __kunit_suites_end[]; #if IS_BUILTIN(CONFIG_KUNIT) +static char *kunit_shutdown; +core_param(kunit_shutdown, kunit_shutdown, charp, 0644); + +static void kunit_handle_shutdown(void) +{ + if (!kunit_shutdown) + return; + + if (!strcmp(kunit_shutdown, "poweroff")) { + kernel_power_off(); + } else if (!strcmp(kunit_shutdown, "halt")) { + kernel_halt(); + } else if (!strcmp(kunit_shutdown, "reboot")) { + kernel_restart(NULL); + } +} + static void kunit_print_tap_header(void) { struct kunit_suite * const * const *suites, * const *subsuite; @@ -42,6 +60,8 @@ int kunit_run_all_tests(void) } } + kunit_handle_shutdown(); + if (has_test_failed) return -EFAULT; diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py index cc5d844ecca13..43314aa537d30 100644 --- a/tools/testing/kunit/kunit_kernel.py +++ b/tools/testing/kunit/kunit_kernel.py @@ -141,7 +141,7 @@ class LinuxSourceTree(object): return True def run_kernel(self, args=[], timeout=None, build_dir=''): - args.extend(['mem=256M']) + args.extend(['mem=256M', 'kunit_shutdown=halt']) process = self._ops.linux_bin(args, timeout, build_dir) with open(os.path.join(build_dir, 'test.log'), 'w') as f: for line in process.stdout: diff --git a/tools/testing/kunit/kunit_parser.py b/tools/testing/kunit/kunit_parser.py index 78b3bdd03b1e4..633811dd9bce8 100644 --- a/tools/testing/kunit/kunit_parser.py +++ b/tools/testing/kunit/kunit_parser.py @@ -48,7 +48,7 @@ class TestStatus(Enum): FAILURE_TO_PARSE_TESTS = auto() kunit_start_re = re.compile(r'^TAP version [0-9]+$') -kunit_end_re = re.compile('List of all partitions:') +kunit_end_re = re.compile(r'reboot: System halted') def isolate_kunit_output(kernel_output): started = False