Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(428)

Side by Side Diff: client/site_tests/hardware_Components/hardware_Components.py

Issue 3493016: Add EC hash in hardware_Components database (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git
Patch Set: change field ordering by alphabet Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « client/site_tests/hardware_Components/approved_components ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import glob, hashlib, logging, os, pprint, re, sys 5 import glob, hashlib, logging, os, pprint, re, sys
6 from autotest_lib.client.bin import factory 6 from autotest_lib.client.bin import factory
7 from autotest_lib.client.bin import test, utils 7 from autotest_lib.client.bin import test, utils
8 from autotest_lib.client.common_lib import error 8 from autotest_lib.client.common_lib import error
9 from autotest_lib.client.common_lib import flashrom_util 9 from autotest_lib.client.common_lib import flashrom_util
10 from autotest_lib.client.common_lib import gbb_util 10 from autotest_lib.client.common_lib import gbb_util
11 from autotest_lib.client.common_lib import site_fmap 11 from autotest_lib.client.common_lib import site_fmap
12 from autotest_lib.client.common_lib import site_vblock 12 from autotest_lib.client.common_lib import site_vblock
13 13
14 14
15 class hardware_Components(test.test): 15 class hardware_Components(test.test):
16 version = 1 16 version = 1
17 _cids = [ 17 _cids = [
18 'data_display_geometry', 18 'data_display_geometry',
19 'hash_ec_firmware',
19 'hash_ro_firmware', 20 'hash_ro_firmware',
20 'part_id_audio_codec', 21 'part_id_audio_codec',
21 'part_id_cpu', 22 'part_id_cpu',
22 'part_id_display_panel', 23 'part_id_display_panel',
23 'part_id_embedded_controller', 24 'part_id_embedded_controller',
24 'part_id_ethernet', 25 'part_id_ethernet',
25 'part_id_flash_chip', 26 'part_id_flash_chip',
26 'part_id_hwqual', 27 'part_id_hwqual',
27 'part_id_storage', 28 'part_id_storage',
28 'part_id_wireless', 29 'part_id_wireless',
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 Returns a colon delimited string where the first section 240 Returns a colon delimited string where the first section
240 is the vendor id and the second section is the device id. 241 is the vendor id and the second section is the device id.
241 """ 242 """
242 part_id = utils.read_one_line('/sys/class/net/wlan0/device/device') 243 part_id = utils.read_one_line('/sys/class/net/wlan0/device/device')
243 vendor_id = utils.read_one_line('/sys/class/net/wlan0/device/vendor') 244 vendor_id = utils.read_one_line('/sys/class/net/wlan0/device/vendor')
244 return "%s:%s" % (vendor_id.replace('0x',''), part_id.replace('0x','')) 245 return "%s:%s" % (vendor_id.replace('0x',''), part_id.replace('0x',''))
245 246
246 247
247 def get_closed_vendor_id_touchpad(self, vendor_name): 248 def get_closed_vendor_id_touchpad(self, vendor_name):
248 """ 249 """
249 Using closed-source method to derive the vendor information 250 Using closed-source method to derive the vendor information
250 given the vendor name. 251 given the vendor name.
251 """ 252 """
252 part_id = '' 253 part_id = ''
253 if vendor_name.lower() == 'synaptics': 254 if vendor_name.lower() == 'synaptics':
254 # Turn off raw mode in order to show touch pad as input 255 # Turn off raw mode in order to show touch pad as input
255 script_set_raw = '/opt/Synaptics/bin/synset' 256 script_set_raw = '/opt/Synaptics/bin/synset'
256 redirect_std_1_2 = '> /dev/null 2>&1' 257 redirect_std_1_2 = '> /dev/null 2>&1'
257 if not os.path.exists(script_set_raw): 258 if not os.path.exists(script_set_raw):
258 return part_id 259 return part_id
259 cmd_disable_raw = ' '.join([script_set_raw, 'stop', \ 260 cmd_disable_raw = ' '.join([script_set_raw, 'stop', \
260 redirect_std_1_2]) 261 redirect_std_1_2])
261 utils.system(cmd_disable_raw, ignore_status=True) 262 utils.system(cmd_disable_raw, ignore_status=True)
262 263
263 # Now we can capture touch pad input under /sys/class/input 264 # Now we can capture touch pad input under /sys/class/input
264 touchpad_input_path = '/sys/class/input/' 265 touchpad_input_path = '/sys/class/input/'
265 input_dirs = os.listdir(touchpad_input_path) 266 input_dirs = os.listdir(touchpad_input_path)
266 part_ids = [] 267 part_ids = []
267 for input_dir in input_dirs: 268 for input_dir in input_dirs:
268 if not input_dir.startswith('input'): 269 if not input_dir.startswith('input'):
269 continue 270 continue
270 fname = os.path.join(touchpad_input_path, input_dir, 'name') 271 fname = os.path.join(touchpad_input_path, input_dir, 'name')
271 input_id = utils.read_file(fname) 272 input_id = utils.read_file(fname)
272 if input_id.startswith('SynPS'): 273 if input_id.startswith('SynPS'):
273 part_ids.append(input_id.strip()) 274 part_ids.append(input_id.strip())
274 part_id = ",".join(part_ids) 275 part_id = ",".join(part_ids)
275 276
276 # Turn on raw mode again 277 # Turn on raw mode again
277 cmd_enable_raw = ' '.join([script_set_raw, 'start', \ 278 cmd_enable_raw = ' '.join([script_set_raw, 'start', \
278 redirect_std_1_2]) 279 redirect_std_1_2])
279 utils.system(cmd_enable_raw) 280 utils.system(cmd_enable_raw)
280 return part_id 281 return part_id
281 282
282 283
283 def get_vendor_id_touchpad(self): 284 def get_vendor_id_touchpad(self):
284 # First, try to use closed-source method to probe touch pad 285 # First, try to use closed-source method to probe touch pad
285 part_id = self.get_closed_vendor_id_touchpad('Synaptics') 286 part_id = self.get_closed_vendor_id_touchpad('Synaptics')
286 if part_id != '': 287 if part_id != '':
287 return part_id 288 return part_id
288 # If the closed-source method above fails to find vendor infomation, 289 # If the closed-source method above fails to find vendor infomation,
289 # try an open-source method. 290 # try an open-source method.
290 else:» 291 else:
291 cmd_grep = 'grep -i Touchpad /proc/bus/input/devices | sed s/.\*=//' 292 cmd_grep = 'grep -i Touchpad /proc/bus/input/devices | sed s/.\*=//'
292 part_id = utils.system_output(cmd_grep).strip('"') 293 part_id = utils.system_output(cmd_grep).strip('"')
293 return part_id 294 return part_id
294 295
295 296
296 def get_vendor_id_webcam(self): 297 def get_vendor_id_webcam(self):
297 cmd = 'cat /sys/class/video4linux/video0/name' 298 cmd = 'cat /sys/class/video4linux/video0/name'
298 part_id = utils.system_output(cmd).strip() 299 part_id = utils.system_output(cmd).strip()
299 return part_id 300 return part_id
300 301
301 302
302 def get_hash_ro_firmware(self): 303 def get_hash_ro_firmware(self):
303 """ 304 """
304 Returns a hash of Read Only firmware parts, 305 Returns a hash of Read Only (BIOS) firmware parts,
305 to confirm we have proper keys / boot code / recovery image installed. 306 to confirm we have proper keys / boot code / recovery image installed.
306 """ 307 """
307 # hash_ro_list: RO section to be hashed 308 # hash_ro_list: RO section to be hashed
308 hash_ro_list = ['FV_BSTUB', 'FV_GBB', 'FVDEV'] 309 hash_ro_list = ['FV_BSTUB', 'FV_GBB', 'FVDEV']
309 flashrom = flashrom_util.flashrom_util() 310 flashrom = flashrom_util.flashrom_util()
310 if not flashrom.select_bios_flashrom(): 311 if not flashrom.select_bios_flashrom():
311 raise error.TestError('Cannot select BIOS flashrom') 312 raise error.TestError('Cannot select BIOS flashrom')
312 base_img = flashrom.read_whole() 313 base_img = flashrom.read_whole()
313 flashrom_size = len(base_img) 314 flashrom_size = len(base_img)
314 # XXX Allowing the FMAP to override our default layout may be an exploit 315 # XXX Allowing the FMAP to override our default layout may be an exploit
(...skipping 11 matching lines...) Expand all
326 for section in hash_ro_list: 327 for section in hash_ro_list:
327 src = flashrom.get_section(base_img, layout, section) 328 src = flashrom.get_section(base_img, layout, section)
328 if not src: 329 if not src:
329 raise error.TestError('Cannot get section [%s] from flashrom' % 330 raise error.TestError('Cannot get section [%s] from flashrom' %
330 section) 331 section)
331 hash_src = hash_src + src 332 hash_src = hash_src + src
332 if not hash_src: 333 if not hash_src:
333 raise error.TestError('Invalid hash source from flashrom.') 334 raise error.TestError('Invalid hash source from flashrom.')
334 return hashlib.sha256(hash_src).hexdigest() 335 return hashlib.sha256(hash_src).hexdigest()
335 336
337 def get_hash_ec_firmware(self):
338 """
339 Returns a hash of Embedded Controller firmware parts,
340 to confirm we have proper updated version of EC firmware.
341 """
342 flashrom = flashrom_util.FlashromUtility()
343 flashrom.initialize(flashrom.TARGET_EC)
344 # to bypass the 'skip verification' sections
345 image = flashrom.get_current_image()
346 hash_src = flashrom.get_verification_image(image)
347 return hashlib.sha256(hash_src).hexdigest()
336 348
337 def get_version_rw_firmware(self): 349 def get_version_rw_firmware(self):
338 """ 350 """
339 Returns the version of Read-Write (writable) firmware from VBOOT 351 Returns the version of Read-Write (writable) firmware from VBOOT
340 section. If A/B has different version, that means this system 352 section. If A/B has different version, that means this system
341 needs a reboot + firmwar update so return value is a "error report" 353 needs a reboot + firmwar update so return value is a "error report"
342 in the form "A=x, B=y". 354 in the form "A=x, B=y".
343 """ 355 """
344 versions = [None, None] 356 versions = [None, None]
345 section_names = ['VBOOTA', 'VBOOTB'] 357 section_names = ['VBOOTA', 'VBOOTB']
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 cids_need_to_be_record = ['part_id_hwqual'] 450 cids_need_to_be_record = ['part_id_hwqual']
439 for cid in cids_need_to_be_record: 451 for cid in cids_need_to_be_record:
440 factory.log_shared_data(cid, self._approved[cid][0]) 452 factory.log_shared_data(cid, self._approved[cid][0])
441 return 453 return
442 454
443 if only_cardreader_failed: 455 if only_cardreader_failed:
444 all_failures = ('You may forget to insert an SD card.\n' + 456 all_failures = ('You may forget to insert an SD card.\n' +
445 all_failures) 457 all_failures)
446 458
447 raise error.TestFail(repr(all_failures)) 459 raise error.TestFail(repr(all_failures))
OLDNEW
« no previous file with comments | « client/site_tests/hardware_Components/approved_components ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698