Checking if the right kernel has been installed after we reboot.

From: jiqingtang@google.com



git-svn-id: http://test.kernel.org/svn/autotest/trunk@847 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/client/bin/kernel.py b/client/bin/kernel.py
index 11e79b7..bd2a377 100755
--- a/client/bin/kernel.py
+++ b/client/bin/kernel.py
@@ -487,8 +487,9 @@
 			ident = self.get_kernel_build_ident()
 			args += " IDENT=%d" % (when)
 
+			# TODO: how do we get the changelist number here?
 			self.job.next_step_prepend(["job.kernel_check_ident",
-						when, ident, self.subdir])
+						when, ident, None, self.subdir])
 
 		# Check if the kernel has been installed, if not install
 		# as the default tag and boot that.
@@ -600,28 +601,37 @@
 	""" Class for installing rpm kernel package
 	"""
 
-	def __init__(self, job, rpm_package, results_dir):
+	def __init__(self, job, rpm_package, subdir):
 		self.job = job
-		self.installed = False
 		self.rpm_package = rpm_package
-		self.log_dir = os.path.join(results_dir, 'debug')
+		self.log_dir = os.path.join(subdir, 'debug')
+		self.subdir = os.path.basename(subdir)
 		if os.path.exists(self.log_dir):
 			system('rm -rf ' + self.log_dir)
 		os.mkdir(self.log_dir)
+		self.installed_as = None
+		cl_re = re.compile(r'[-.](\d{7,})\.rpm$')
+		match = cl_re.findall(rpm_package)
+		if match:
+			self.changelist = match[0]
+		else:
+			self.changelist = None
 
 
-	def install(self):
+	def install(self, tag='autotest'):
+		self.installed_as = tag
+
 		logfile = os.path.join(self.log_dir, 'rpm_install')
 		self.job.stdout.redirect(logfile + '.stdout')
 		self.job.stderr.redirect(logfile + '.stderr')
 
-		rpm_name = system_output('rpm -qp ' + self.rpm_package)
+		self.rpm_name = system_output('rpm -qp ' + self.rpm_package)
 
 		# install
 		system('rpm -i --force ' + self.rpm_package)
 
 		# get file list
-		files = system_output('rpm -ql ' + rpm_name).splitlines()
+		files = system_output('rpm -ql ' + self.rpm_name).splitlines()
 
 		self.job.stdout.restore()
 		self.job.stderr.restore()
@@ -633,7 +643,7 @@
 				break
 		else:
 			raise TestError(self.rpm_package + " doesn't contain /boot/vmlinuz")
-		
+
 		# search for initrd
 		self.initrd = ''
 		for file in files:
@@ -643,8 +653,7 @@
 
 		# get version and release number
 		self.version, self.release = system_output(
-			'rpm --queryformat="%{VERSION}\\n%{RELEASE}\\n" -q ' + rpm_name).splitlines()[0:2]
-		self.installed = True
+			'rpm --queryformat="%{VERSION}\\n%{RELEASE}\\n" -q ' + self.rpm_name).splitlines()[0:2]
 
 
 	def add_to_bootloader(self, tag='autotest', args=''):
@@ -675,14 +684,26 @@
 		self.job.bootloader.add_kernel(self.image, tag, self.initrd, args = args, root = root)
 
 
-	def boot(self, args=''):
+	def boot(self, args='', ident=1):
+		""" install and boot this kernel
+		"""
+		
 		# Check if the kernel has been installed, if not install
 		# as the default tag and boot that.
-		if not self.installed:
-			self.install()
+		if not self.installed_as:
+			self.intsall()
+
+		# If we can check the kernel identity do so.
+		if ident:
+			when = int(time.time())
+			ident = '-'.join([self.version, self.rpm_name.split('-')[1], self.release])
+			args += " IDENT=%d" % (when)
+
+		self.job.next_step_prepend(["job.kernel_check_ident",
+			when, ident, self.changelist, self.subdir, 'rpm'])
 
 		# Boot the selected tag.
-		self.add_to_bootloader(args=args)
+		self.add_to_bootloader(args=args, tag=self.installed_as)
 
 		# Boot it.
-		self.job.reboot()
+		self.job.reboot(tag=self.installed_as)