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

Unified Diff: test_chromeos_interface.py

Issue 6849042: Introduce crossystem wrapper in SAFT. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/saft.git@master
Patch Set: Do not cache crossystem output. 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 side-by-side diff with in-line comments
Download patch
« chromeos_interface.py ('K') | « runtests.sh ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test_chromeos_interface.py
diff --git a/test_chromeos_interface.py b/test_chromeos_interface.py
index 731c689078e41fbb89ade8cb7d51adbc7c75c8ad..6538412c37e7c498757f65530867491a268edb81 100755
--- a/test_chromeos_interface.py
+++ b/test_chromeos_interface.py
@@ -5,12 +5,77 @@
'''Unittest wrapper for chromeos_interface.py.'''
+import os
import subprocess
+import tempfile
import unittest
import chromeos_interface
-CHROS_IF = chromeos_interface.ChromeOSInterface(True)
+# A set of crossystem output values pertinent to the tests.
+CROSSYSTEM_SAMPLE = {
+ 'devsw_boot': '0',
+ 'recoverysw_boot': '0',
+ 'recovery_reason': '0',
+ 'tried_fwb': '0',
+ 'fwid': 'Alex.03.61.0734.0055G1.0020',
+ 'mainfw_act': 'A',
+ 'mainfw_type': 'normal',
+ 'ecfw_act': 'RW',
+ 'fwb_tries': '0',
+}
+
+class StdOut(object):
+ '''
+ An object to simulate the stdout file returned by subprocess.Popen().
+
+ @text - a potentially multiline string to represent the expected output of
+ the command.
+ '''
+
+ def __init__(self, text):
+ (fd, self.tmp_file) = tempfile.mkstemp()
+ os.write(fd, text)
+ os.close(fd)
+ self.stdout = open(self.tmp_file, 'r')
+
+ def __del__(self):
+ self.stdout.close()
+ os.remove(self.tmp_file)
+
+
+class CrosIfMock(chromeos_interface.ChromeOSInterface):
+ '''A wrapper to allow testing of ChromeOSInterface on a host.'''
+
+ def __init__(self):
+ self.cs_values = CROSSYSTEM_SAMPLE
+ super(CrosIfMock, self).__init__(True)
+ self.init()
+ self.test_write_command = ''
+ 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 == 'rootdev -s':
+ return StdOut('/dev/sda3')
+
+ if cmd == self.test_write_command:
+ self.test_write_command = ''
+ self.write_command_seen = True
+ return StdOut('')
+
+ return super(CrosIfMock, self).run_shell_command(cmd)
+
+
+CHROS_IF = CrosIfMock()
class TestShellCommands(unittest.TestCase):
@@ -35,8 +100,25 @@ class TestShellCommands(unittest.TestCase):
def test_boot_state_vector(self):
'''Verify the format (not the contents) of the boot vector.'''
bv = CHROS_IF.boot_state_vector()
- self.assertEqual(bv.count(':'), 4)
- self.assertEqual(len(bv), 9)
+ self.assertEqual(bv, '1:1:1:0:3')
+ saved_mainfw_type = CROSSYSTEM_SAMPLE['mainfw_type']
+ del(CROSSYSTEM_SAMPLE['mainfw_type'])
+ self.assertRaises(KeyError, CHROS_IF.boot_state_vector)
+ CROSSYSTEM_SAMPLE['mainfw_type'] = saved_mainfw_type
+ CROSSYSTEM_SAMPLE['mainfw_act'] = 'X'
+ try:
+ CHROS_IF.boot_state_vector()
+ except chromeos_interface.ChromeOSInterfaceError, e:
+ dump = '\n'.join('%s=%s' % (x, y) for (
+ x, y) in CROSSYSTEM_SAMPLE.iteritems())
+ self.assertEqual(e[0], dump)
+
+ def test_crossystem_set(self):
+ '''Test is 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)
if __name__ == '__main__':
« chromeos_interface.py ('K') | « runtests.sh ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698