| Index: test_chromeos_interface.py
 | 
| diff --git a/test_chromeos_interface.py b/test_chromeos_interface.py
 | 
| index 6538412c37e7c498757f65530867491a268edb81..b38b4bea939c04818effbf2ede18296366065a0b 100755
 | 
| --- a/test_chromeos_interface.py
 | 
| +++ b/test_chromeos_interface.py
 | 
| @@ -7,11 +7,22 @@
 | 
|  
 | 
|  import os
 | 
|  import subprocess
 | 
| +import sys
 | 
|  import tempfile
 | 
|  import unittest
 | 
|  
 | 
|  import chromeos_interface
 | 
|  
 | 
| +def zero_recoverysw_count(vector_map):
 | 
| +    '''Calculate number of elements where recoverysw is zero in recovery mode'''
 | 
| +    zero_count = 0
 | 
| +    for key, values in vector_map.iteritems():
 | 
| +        if values['mainfw_type'] != 'recovery':
 | 
| +            continue
 | 
| +        if 'recoverysw_boot' in values and values['recoverysw_boot'] == '0':
 | 
| +            zero_count += 1
 | 
| +    return zero_count
 | 
| +
 | 
|  # A set of crossystem output values pertinent to the tests.
 | 
|  CROSSYSTEM_SAMPLE = {
 | 
|      'devsw_boot': '0',
 | 
| @@ -55,15 +66,15 @@ class CrosIfMock(chromeos_interface.ChromeOSInterface):
 | 
|          self.write_command_seen = False
 | 
|  
 | 
|      def run_shell_command(self, cmd):
 | 
| -        if not self.target_hosted():
 | 
| -            if cmd.startswith('crossystem') and not '=' in cmd:
 | 
| -                if ' ' in cmd:
 | 
| -                    param = cmd.split()[1]
 | 
| -                    return StdOut(self.cs_values[param])
 | 
| -                else:
 | 
| -                    return StdOut('\n'.join('%s=%s' % (x, y) for (
 | 
| -                                x, y) in CROSSYSTEM_SAMPLE.iteritems()))
 | 
| +        if cmd.startswith('crossystem') and not '=' in cmd:
 | 
| +            if ' ' in cmd:
 | 
| +                param = cmd.split()[1]
 | 
| +                return StdOut(self.cs_values[param])
 | 
| +            else:
 | 
| +                return StdOut('\n'.join('%s=%s' % (x, y) for (
 | 
| +                            x, y) in CROSSYSTEM_SAMPLE.iteritems()))
 | 
|  
 | 
| +        if not self.target_hosted():
 | 
|              if cmd == 'rootdev -s':
 | 
|                  return StdOut('/dev/sda3')
 | 
|  
 | 
| @@ -114,12 +125,39 @@ class TestShellCommands(unittest.TestCase):
 | 
|              self.assertEqual(e[0], dump)
 | 
|  
 | 
|      def test_crossystem_set(self):
 | 
| -        '''Test is appropriate crossystem command is invoked on assignments.'''
 | 
| +        '''Test if appropriate crossystem command is invoked on assignments.'''
 | 
|          CHROS_IF.test_write_command = 'crossystem "xxx=zzz"'
 | 
|          CHROS_IF.write_command_seen = False
 | 
|          CHROS_IF.cs.xxx = 'zzz'
 | 
|          self.assertTrue(CHROS_IF.write_command_seen)
 | 
|  
 | 
| +    def test_run_bad_shell_command(self):
 | 
| +        '''Test if run_shell_command() raises exception on errors.'''
 | 
| +
 | 
| +        saved = sys.stdout
 | 
| +        sys.stdout = open('/dev/null', 'w')
 | 
| +        try:
 | 
| +            CHROS_IF.run_shell_command('ls .')
 | 
| +            CHROS_IF.run_shell_command('nonexisting_command')
 | 
| +        except chromeos_interface.ChromeOSInterfaceError, e:
 | 
| +            self.assertEqual(e[0], 'command nonexisting_command failed')
 | 
| +        finally:
 | 
| +            sys.stdout = saved
 | 
| +
 | 
| +    def test_mario_workwaround(self):
 | 
| +        '''Test if the vector map is adjusted on Mario.'''
 | 
| +
 | 
| +        chros_if = CrosIfMock()
 | 
| +        zero_values_count = zero_recoverysw_count(
 | 
| +            chros_if.cs.VECTOR_MAPS[0])
 | 
| +        self.assertNotEqual(zero_values_count, 0)
 | 
| +
 | 
| +        CROSSYSTEM_SAMPLE['fwid'] = CROSSYSTEM_SAMPLE['fwid'].replace(
 | 
| +            'Alex', 'Mario')
 | 
| +        chros_if = CrosIfMock()
 | 
| +        zero_values_count = zero_recoverysw_count(
 | 
| +            chros_if.cs.VECTOR_MAPS[0])
 | 
| +        self.assertEqual(zero_values_count, 0)
 | 
|  
 | 
|  if __name__ == '__main__':
 | 
|      unittest.main()
 | 
| 
 |