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')