| #!/usr/bin/python |
| # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| '''Unittest wrapper for saft_utility.''' |
| |
| import os |
| import subprocess |
| import sys |
| import tempfile |
| import unittest |
| |
| import chromeos_interface |
| import saft_utility |
| |
| ChrosIf = chromeos_interface.ChromeOSInterface(True) |
| base_partition = None |
| |
| |
| def saft_script_present(): |
| '''Check if SAFT shell script is present on the flash stateful partition.''' |
| |
| tmp_dir = None |
| script_found = False |
| for line in ChrosIf.run_shell_command_get_output('blkid'): |
| # Find flash stateful partition device using its label. |
| if not 'LABEL="C-STATE"' in line: |
| continue |
| dev = line.split()[0].strip(':') |
| |
| # Get its mount point, if it is mounted. |
| all_mounts = ChrosIf.run_shell_command_get_output('mount') |
| for mount in all_mounts: |
| if mount.startswith('%s ' % dev): |
| mount_point = mount.split()[2] |
| break |
| else: |
| # It is not mounted, mount it. |
| tmp_dir = tempfile.mkdtemp() |
| ChrosIf.run_shell_command('mount %s %s' % (dev, tmp_dir)) |
| mount_point = tmp_dir |
| |
| conf_file = mount_point + saft_utility.RetriveSaftConfDefinion( |
| 'SAFT_SCRIPT') |
| |
| script_found = os.path.isfile(conf_file) |
| if tmp_dir: |
| ChrosIf.run_shell_command('umount %s' % tmp_dir) |
| os.rmdir(tmp_dir) |
| |
| return script_found |
| |
| |
| class TestUpstartHandler(unittest.TestCase): |
| |
| def setUp(self): |
| self.fst = saft_utility.FirmwareTest() |
| self.fst.init(sys.argv[0], ChrosIf, None) |
| ChrosIf.init_environment() |
| |
| def test_saft_script_handler(self): |
| |
| # The first invocation is supposed to create the saft shell script in |
| # /var on the flash drive. |
| self.fst._handle_saft_script(True) |
| self.assertTrue(saft_script_present()) |
| |
| # This is supposed to delete the script |
| self.fst._handle_saft_script(False) |
| self.assertFalse(saft_script_present()) |
| |
| def test_file_name_retrieval(self): |
| |
| # these two should go smoothly. |
| for name in ('SAFT_LOG', 'SAFT_SCRIPT'): |
| saft_utility.RetriveSaftConfDefinion(name) |
| |
| self.assertRaises(saft_utility.FwError, |
| saft_utility.RetriveSaftConfDefinion, |
| 'dummy_name') |
| |
| def test_cmp_boot_vector(self): |
| '''test _cmp_boot_vector works correctly with '*' wildcards''' |
| self.test_boot_vectors = ( |
| ('1:1:1:0:3', '1:1:1:0:3', True), |
| ('5:0:0:1:3', '5:0:0:1:3', True), |
| ('6:0:0:1:3', '6:0:*:1:3', True), |
| ('8:0:*:1:3', '8:0:0:1:3', True), |
| ('1:2:1:0:3', '*:*:*:*:*', True), |
| ('1:1:1:0:3', '1:1:0:0:3', False), |
| ('5:0:0:1:3', '6:0:0:1:3', False), |
| ('6:0:0:1:3', '8:0:*:1:3', False), |
| ('1:1:1:0:5', '5:1:0:0:5', False), |
| ) |
| for vecs in self.test_boot_vectors: |
| v1, v2, expected_result = vecs |
| result = self.fst._cmp_boot_vector(v1, v2) |
| self.assertEqual(result, expected_result) |
| |
| def tearDown(self): |
| ChrosIf.shut_down() |
| |
| if __name__ == '__main__': |
| unittest.main() |