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

Side by Side Diff: client/common_lib/flashrom_util.py

Issue 3296001: Get size using --get-size in flashrom_util.py instead of reading whole flash. (Closed) Base URL: http://git.chromium.org/git/autotest.git
Patch Set: Add mock implementation of system_output Created 10 years, 3 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 | « no previous file | client/site_tests/firmware_RomSize/firmware_RomSize.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """ 6 """
7 This module provides convenience routines to access Flash ROM (EEPROM). 7 This module provides convenience routines to access Flash ROM (EEPROM).
8 - flashrom_util is a low level wrapper of flashrom(8) program. 8 - flashrom_util is a low level wrapper of flashrom(8) program.
9 - FlashromUtility is a high level object which provides more advanced 9 - FlashromUtility is a high level object which provides more advanced
10 features like journaling-alike (log-based) changing. 10 features like journaling-alike (log-based) changing.
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 assert section_name in layout_map, "Invalid section: " + section_name 318 assert section_name in layout_map, "Invalid section: " + section_name
319 pos = layout_map[section_name] 319 pos = layout_map[section_name]
320 if pos[0] >= pos[1] or pos[1] >= len(base_image): 320 if pos[0] >= pos[1] or pos[1] >= len(base_image):
321 raise TestError('INTERNAL ERROR: invalid layout map.') 321 raise TestError('INTERNAL ERROR: invalid layout map.')
322 if len(data) != pos[1] - pos[0] + 1: 322 if len(data) != pos[1] - pos[0] + 1:
323 raise TestError('INTERNAL ERROR: unmatched data size.') 323 raise TestError('INTERNAL ERROR: unmatched data size.')
324 return base_image[0 : pos[0]] + data + base_image[pos[1] + 1 :] 324 return base_image[0 : pos[0]] + data + base_image[pos[1] + 1 :]
325 325
326 def get_size(self): 326 def get_size(self):
327 """ Gets size of current flash ROM """ 327 """ Gets size of current flash ROM """
328 # TODO(hungte) Newer version of tool (flashrom) may support --get-size 328 cmd = '%s"%s" --get-size' % (self.cmd_prefix, self.tool_path)
329 # command which is faster in future. Right now we use back-compatible 329 if self.verbose:
330 # method: read whole and then get length. 330 print 'flashrom_util.get_size(): ', cmd
331 image = self.read_whole() 331 output = utils.system_output(cmd, ignore_status=True)
332 return len(image) 332 last_line = output.rpartition('\n')[2]
333 try:
334 size = long(last_line)
335 except ValueError:
336 raise TestError('INTERNAL ERROR: unable to get the flash size.')
337 return size
333 338
334 def detect_target_map(self): 339 def detect_target_map(self):
335 """ 340 """
336 Detects the target selection map. 341 Detects the target selection map.
337 Use machine architecture in current implementation. 342 Use machine architecture in current implementation.
338 """ 343 """
339 arch = utils.get_arch() 344 arch = utils.get_arch()
340 for regex, target_map in DEFAULT_ARCH_TARGET_MAP.items(): 345 for regex, target_map in DEFAULT_ARCH_TARGET_MAP.items():
341 if re.match(regex, arch): 346 if re.match(regex, arch):
342 return target_map 347 return target_map
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 sys.exit(1) 755 sys.exit(1)
751 756
752 757
753 class mock_utils(object): 758 class mock_utils(object):
754 """ a mock for autotest_li.client.bin.utils """ 759 """ a mock for autotest_li.client.bin.utils """
755 def get_arch(self): 760 def get_arch(self):
756 arch = os.popen('uname -m').read().rstrip() 761 arch = os.popen('uname -m').read().rstrip()
757 arch = re.sub(r"i\d86", r"i386", arch, 1) 762 arch = re.sub(r"i\d86", r"i386", arch, 1)
758 return arch 763 return arch
759 764
760 def system(self, cmd, ignore_status=False): 765 def run_command(self, cmd, ignore_status=False):
761 p = subprocess.Popen(cmd, shell=True, 766 p = subprocess.Popen(cmd, shell=True,
762 stdout=subprocess.PIPE, 767 stdout=subprocess.PIPE,
763 stderr=subprocess.PIPE) 768 stderr=subprocess.PIPE)
764 p.wait() 769 p.wait()
765 if p.returncode: 770 if p.returncode and not ignore_status:
Hung-Te 2010/09/02 02:10:22 oops, please keep the print stdout.read() and err_
Tom Wai-Hong Tam 2010/09/02 02:55:24 OK. Will change it in other CL: http://codereview.
766 err_msg = p.stderr.read() 771 raise TestError("failed to execute: %s\nError messages: %s" % (
767 print p.stdout.read() 772 cmd, p.stderr.read()))
768 print err_msg 773 return (p.returncode, p.stdout.read())
769 if not ignore_status: 774
770 raise TestError("failed to execute: %s\nError messages: %s" % ( 775 def system(self, cmd, ignore_status=False):
771 cmd, err_msg())) 776 (returncode, output) = self.run_command(cmd, ignore_status)
772 return p.returncode 777 return returncode
778
779 def system_output(self, cmd, ignore_status=False):
780 (returncode, output) = self.run_command(cmd, ignore_status)
781 return output
773 782
774 783
775 # import autotest or mock utilities 784 # import autotest or mock utilities
776 try: 785 try:
777 # print 'using autotest' 786 # print 'using autotest'
778 from autotest_lib.client.bin import test, utils 787 from autotest_lib.client.bin import test, utils
779 from autotest_lib.client.common_lib.error import TestError 788 from autotest_lib.client.common_lib.error import TestError
780 except ImportError: 789 except ImportError:
781 # print 'using mocks' 790 # print 'using mocks'
782 utils = mock_utils() 791 utils = mock_utils()
783 TestError = mock_TestError 792 TestError = mock_TestError
784 793
785 794
786 # main stub 795 # main stub
787 if __name__ == "__main__": 796 if __name__ == "__main__":
788 # TODO(hungte) provide unit tests or command line usage 797 # TODO(hungte) provide unit tests or command line usage
789 pass 798 pass
OLDNEW
« no previous file with comments | « no previous file | client/site_tests/firmware_RomSize/firmware_RomSize.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698