kernel: add a boot validation step post boot
When requesting a boot via a kernel generate a kernel identifier
for that kernel and a command line validator (the time). These
are then checked in a post boot validation stepper "step" which
is inserted before the users next step.
Signed-off-by: Andy Whitcroft <apw@shadowen.org>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@657 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/client/bin/kernel.py b/client/bin/kernel.py
index 3344bb5..74d7d19 100755
--- a/client/bin/kernel.py
+++ b/client/bin/kernel.py
@@ -1,6 +1,6 @@
__author__ = """Copyright Martin J. Bligh, 2006"""
-import os,os.path,shutil,urllib,copy,pickle,re,glob
+import os,os.path,shutil,urllib,copy,pickle,re,glob,time
from autotest_utils import *
import kernel_config, test, os_dep
@@ -428,11 +428,53 @@
return arch
- def boot(self, args='', once=True):
+ def get_kernel_build_release(self):
+ releasem = re.compile(r'.*UTS_RELEASE\s+"([^"]+)".*');
+ versionm = re.compile(r'.*UTS_VERSION\s+"([^"]+)".*');
+
+ release = None
+ version = None
+
+ for file in [ self.build_dir + "/include/linux/version.h",
+ self.build_dir + "/include/linux/utsrelease.h",
+ self.build_dir + "/include/linux/compile.h" ]:
+ if os.path.exists(file):
+ fd = open(file, 'r')
+ for line in fd.readlines():
+ m = releasem.match(line)
+ if m:
+ release = m.groups()[0]
+ m = versionm.match(line)
+ if m:
+ version = m.groups()[0]
+ fd.close()
+
+ return (release, version)
+
+
+ def get_kernel_build_ident(self):
+ (release, version) = self.get_kernel_build_release()
+
+ if not release or not version:
+ raise JobError('kernel has no identity')
+
+ return release + '::' + version
+
+
+ def boot(self, args='', once=True, ident=1):
""" install and boot this kernel, do not care how
just make it happen.
"""
+ # If we can check the kernel identity do so.
+ if ident:
+ when = int(time.time())
+ ident = self.get_kernel_build_ident()
+ args += " IDENT=%d" % (when)
+
+ self.job.next_step_prepend([kernel_check_ident,
+ when, ident])
+
# Install this kernel.
self.install()
self.add_to_bootloader(args=args, tag='autotest')