oeqa/runtime/microcode: Enable microcode update test

With iucode-tool, identified the selected microcode to be used for
microcode update by the specific processor. Compared the updated
microcode from dmesg to the selected microcode, test failed if the
updated microcode revision does not match the available selected
microcode revision from the iucode-tool. Compute int from hexadecimal
for comparison based on Naveen Kumar suggestion.

Signed-off-by: Yeoh Ee Peng <ee.peng.yeoh@intel.com>
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
This commit is contained in:
Yeoh Ee Peng 2019-07-05 10:38:54 +08:00 committed by Anuj Mittal
parent 918789b6fd
commit 0b5476b20d

View File

@ -0,0 +1,36 @@
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.runtime.decorator.package import OEHasPackage
import re
class MicrocodeTest(OERuntimeTestCase):
def get_revision_from_microcode_string_list(self, microcode_string_list, re_pattern):
re_compile = re.compile(re_pattern)
rev_list = []
for s in microcode_string_list:
matched_revs = re_compile.findall(s)
if matched_revs:
for mr in matched_revs:
rev_list.append(int(mr, 16))
return rev_list
@OEHasPackage(["iucode-tool"])
def test_microcode_update(self):
(status, output) = self.target.run('iucode_tool /lib/firmware/intel-ucode/ -tb -lS | grep rev')
if status:
self.skipTest("The iucode_tool detected no microcode for update.")
selected_microcodes = output.splitlines()
selected_rev_list = self.get_revision_from_microcode_string_list(selected_microcodes, "rev (\w*)")
self.assertTrue(selected_rev_list, msg="Could not find any rev from iucode_tool selected microcode.")
(status, output) = self.target.run('dmesg | grep microcode')
self.assertEqual(status, 0, msg='status and output: %s and %s' % (status, output))
updated_microcodes = output.splitlines()
updated_rev_list = self.get_revision_from_microcode_string_list(updated_microcodes, "revision=(\w*)")
self.assertTrue(updated_rev_list, msg="Could not find any updated revision from microcode dmesg.")
for ul in updated_rev_list:
self.assertTrue(ul in selected_rev_list, msg="Updated revision, %s, not in selected revision list (%s)" %
(ul, selected_rev_list))