kunit: Add 'kunit_shutdown' option
This adds a new kernel command-line option, 'kunit_shutdown', which
shuts the kernel down (halts the machine) after tests are complete.
It also updates kunit_tool to use this option, and recognise the kernel
shutting down as the end of the test.
Change-Id: I5b2b25d767f7af4d80c0bc4ae2967bfaf18c73b0
Signed-off-by: David Gow <davidgow@google.com>
diff --git a/test/test-executor.c b/test/test-executor.c
index d117e96..2cb8bb3 100644
--- a/test/test-executor.c
+++ b/test/test-executor.c
@@ -1,10 +1,15 @@
#include <linux/init.h>
+#include <linux/moduleparam.h>
#include <linux/printk.h>
+#include <linux/reboot.h>
#include <test/test.h>
extern char __test_modules_start;
extern char __test_modules_end;
+static int kunit_shutdown;
+core_param(kunit_shutdown, kunit_shutdown, int, 0644);
+
static bool test_run_all_tests(void)
{
struct test_module **module;
@@ -19,6 +24,9 @@ static bool test_run_all_tests(void)
has_test_failed = true;
}
+ if (kunit_shutdown)
+ kernel_halt();
+
return !has_test_failed;
}
diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py
index 76420d2..ff0968b 100644
--- a/tools/testing/kunit/kunit_kernel.py
+++ b/tools/testing/kunit/kunit_kernel.py
@@ -155,7 +155,7 @@
return BuildResult(BuildStatus.SUCCESS, 'Built kernel!')
def run_kernel(self, args=[], timeout=None):
- args.extend(['mem=256M'])
+ args.extend(['mem=256M kunit_shutdown=1'])
raw_log = self._ops.linux_bin(args, timeout)
with open('test.log', 'w') as f:
for line in raw_log.split('\n'):
diff --git a/tools/testing/kunit/kunit_parser.py b/tools/testing/kunit/kunit_parser.py
index 4d65e0a..bc63ada 100644
--- a/tools/testing/kunit/kunit_parser.py
+++ b/tools/testing/kunit/kunit_parser.py
@@ -29,7 +29,7 @@
TestCase = namedtuple('TestCase', ['status','name','log'])
kunit_start_re = re.compile('console .* enabled')
-kunit_end_re = re.compile('List of all partitions:')
+kunit_end_re = re.compile('reboot: System halted')
TIMED_OUT_LOG_ENTRY = 'Timeout Reached - Process Terminated'
diff --git a/tools/testing/kunit/kunit_test.py b/tools/testing/kunit/kunit_test.py
index 6471a93..7e3be7a 100755
--- a/tools/testing/kunit/kunit_test.py
+++ b/tools/testing/kunit/kunit_test.py
@@ -180,7 +180,7 @@
kunit_kernel.BuildStatus.SUCCESS, ''))
self.linux_source_mock.run_kernel = mock.Mock(return_value=[
'console 0 enabled',
- 'List of all partitions:'])
+ 'reboot: System halted'])
def tearDown(self):
self.print_patch.stop()
diff --git a/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log b/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log
index c553ca5..d0900d1 100644
--- a/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log
+++ b/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log
@@ -69,7 +69,4 @@
Console initialized on /dev/tty0
console [tty0] enabled
console [mc-1] enabled
-List of all partitions:
-No filesystem could mount root, tried:
-
-Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(98,0)
+reboot: System halted
diff --git a/tools/testing/kunit/test_data/test_output_isolated_correctly.log b/tools/testing/kunit/test_data/test_output_isolated_correctly.log
index c1ec856..3c63bea 100644
--- a/tools/testing/kunit/test_data/test_output_isolated_correctly.log
+++ b/tools/testing/kunit/test_data/test_output_isolated_correctly.log
@@ -61,4 +61,4 @@
kunit example: initializing
kunit example: example_mock_test passed
kunit example: all tests passed
-List of all partitions:
+reboot: System halted