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

Side by Side Diff: test_chromeos_interface.py

Issue 6881019: Fix SAFT to work on all x86 platforms using crossystem. (Closed) Base URL: ssh://gitrw.chromium.org:9222/saft.git@master
Patch Set: Fix another Mario recovery reason shortcoming. Created 9 years, 8 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 | « saft_utility.py ('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 #!/usr/bin/python 1 #!/usr/bin/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 '''Unittest wrapper for chromeos_interface.py.''' 6 '''Unittest wrapper for chromeos_interface.py.'''
7 7
8 import os 8 import os
9 import subprocess 9 import subprocess
10 import sys
10 import tempfile 11 import tempfile
11 import unittest 12 import unittest
12 13
13 import chromeos_interface 14 import chromeos_interface
14 15
16 def zero_recoverysw_count(vector_map):
17 '''Calculate number of elements where recoverysw is zero in recovery mode'''
18 zero_count = 0
19 for key, values in vector_map.iteritems():
20 if values['mainfw_type'] != 'recovery':
21 continue
22 if 'recoverysw_boot' in values and values['recoverysw_boot'] == '0':
23 zero_count += 1
24 return zero_count
25
15 # A set of crossystem output values pertinent to the tests. 26 # A set of crossystem output values pertinent to the tests.
16 CROSSYSTEM_SAMPLE = { 27 CROSSYSTEM_SAMPLE = {
17 'devsw_boot': '0', 28 'devsw_boot': '0',
18 'recoverysw_boot': '0', 29 'recoverysw_boot': '0',
19 'recovery_reason': '0', 30 'recovery_reason': '0',
20 'tried_fwb': '0', 31 'tried_fwb': '0',
21 'fwid': 'Alex.03.61.0734.0055G1.0020', 32 'fwid': 'Alex.03.61.0734.0055G1.0020',
22 'mainfw_act': 'A', 33 'mainfw_act': 'A',
23 'mainfw_type': 'normal', 34 'mainfw_type': 'normal',
24 'ecfw_act': 'RW', 35 'ecfw_act': 'RW',
(...skipping 23 matching lines...) Expand all
48 '''A wrapper to allow testing of ChromeOSInterface on a host.''' 59 '''A wrapper to allow testing of ChromeOSInterface on a host.'''
49 60
50 def __init__(self): 61 def __init__(self):
51 self.cs_values = CROSSYSTEM_SAMPLE 62 self.cs_values = CROSSYSTEM_SAMPLE
52 super(CrosIfMock, self).__init__(True) 63 super(CrosIfMock, self).__init__(True)
53 self.init() 64 self.init()
54 self.test_write_command = '' 65 self.test_write_command = ''
55 self.write_command_seen = False 66 self.write_command_seen = False
56 67
57 def run_shell_command(self, cmd): 68 def run_shell_command(self, cmd):
69 if cmd.startswith('crossystem') and not '=' in cmd:
70 if ' ' in cmd:
71 param = cmd.split()[1]
72 return StdOut(self.cs_values[param])
73 else:
74 return StdOut('\n'.join('%s=%s' % (x, y) for (
75 x, y) in CROSSYSTEM_SAMPLE.iteritems()))
76
58 if not self.target_hosted(): 77 if not self.target_hosted():
59 if cmd.startswith('crossystem') and not '=' in cmd:
60 if ' ' in cmd:
61 param = cmd.split()[1]
62 return StdOut(self.cs_values[param])
63 else:
64 return StdOut('\n'.join('%s=%s' % (x, y) for (
65 x, y) in CROSSYSTEM_SAMPLE.iteritems()))
66
67 if cmd == 'rootdev -s': 78 if cmd == 'rootdev -s':
68 return StdOut('/dev/sda3') 79 return StdOut('/dev/sda3')
69 80
70 if cmd == self.test_write_command: 81 if cmd == self.test_write_command:
71 self.test_write_command = '' 82 self.test_write_command = ''
72 self.write_command_seen = True 83 self.write_command_seen = True
73 return StdOut('') 84 return StdOut('')
74 85
75 return super(CrosIfMock, self).run_shell_command(cmd) 86 return super(CrosIfMock, self).run_shell_command(cmd)
76 87
(...skipping 30 matching lines...) Expand all
107 CROSSYSTEM_SAMPLE['mainfw_type'] = saved_mainfw_type 118 CROSSYSTEM_SAMPLE['mainfw_type'] = saved_mainfw_type
108 CROSSYSTEM_SAMPLE['mainfw_act'] = 'X' 119 CROSSYSTEM_SAMPLE['mainfw_act'] = 'X'
109 try: 120 try:
110 CHROS_IF.boot_state_vector() 121 CHROS_IF.boot_state_vector()
111 except chromeos_interface.ChromeOSInterfaceError, e: 122 except chromeos_interface.ChromeOSInterfaceError, e:
112 dump = '\n'.join('%s=%s' % (x, y) for ( 123 dump = '\n'.join('%s=%s' % (x, y) for (
113 x, y) in CROSSYSTEM_SAMPLE.iteritems()) 124 x, y) in CROSSYSTEM_SAMPLE.iteritems())
114 self.assertEqual(e[0], dump) 125 self.assertEqual(e[0], dump)
115 126
116 def test_crossystem_set(self): 127 def test_crossystem_set(self):
117 '''Test is appropriate crossystem command is invoked on assignments.''' 128 '''Test if appropriate crossystem command is invoked on assignments.'''
118 CHROS_IF.test_write_command = 'crossystem "xxx=zzz"' 129 CHROS_IF.test_write_command = 'crossystem "xxx=zzz"'
119 CHROS_IF.write_command_seen = False 130 CHROS_IF.write_command_seen = False
120 CHROS_IF.cs.xxx = 'zzz' 131 CHROS_IF.cs.xxx = 'zzz'
121 self.assertTrue(CHROS_IF.write_command_seen) 132 self.assertTrue(CHROS_IF.write_command_seen)
122 133
134 def test_run_bad_shell_command(self):
135 '''Test if run_shell_command() raises exception on errors.'''
136
137 saved = sys.stdout
138 sys.stdout = open('/dev/null', 'w')
139 try:
140 CHROS_IF.run_shell_command('ls .')
141 CHROS_IF.run_shell_command('nonexisting_command')
142 except chromeos_interface.ChromeOSInterfaceError, e:
143 self.assertEqual(e[0], 'command nonexisting_command failed')
144 finally:
145 sys.stdout = saved
146
147 def test_mario_workwaround(self):
148 '''Test if the vector map is adjusted on Mario.'''
149
150 chros_if = CrosIfMock()
151 zero_values_count = zero_recoverysw_count(
152 chros_if.cs.VECTOR_MAPS[0])
153 self.assertNotEqual(zero_values_count, 0)
154
155 CROSSYSTEM_SAMPLE['fwid'] = CROSSYSTEM_SAMPLE['fwid'].replace(
156 'Alex', 'Mario')
157 chros_if = CrosIfMock()
158 zero_values_count = zero_recoverysw_count(
159 chros_if.cs.VECTOR_MAPS[0])
160 self.assertEqual(zero_values_count, 0)
123 161
124 if __name__ == '__main__': 162 if __name__ == '__main__':
125 unittest.main() 163 unittest.main()
OLDNEW
« no previous file with comments | « saft_utility.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698