| #!/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 tpm_handler.py.''' |
| |
| import os |
| import shutil |
| import subprocess |
| import tempfile |
| import unittest |
| |
| import tpm_handler |
| |
| CONF_FILE_TEMPLATE = ''' |
| # Trousers daemon, which talks to the TPM (or the TPM emulator). |
| |
| stop on starting halt or starting reboot |
| |
| pre-start script |
| tpmc clear || logger "tpmc clear: status $?" |
| tpmc enable || logger "tpmc enable: status $?" |
| tpmc act || logger "tpmc act: status $?" |
| %s tpmc block || logger "tpmc block: status $?" |
| %s tpmc pplock || logger "tpmc pplock: status $?" |
| |
| fi |
| end script |
| |
| exec /usr/sbin/tcsd |
| ''' |
| |
| class CrosIfMock(object): |
| MOCKED_COMMANDS = { |
| 'initctl status tcsd': 'tcsd start/running, process 3757', |
| 'tpmc read 0x1007 0xa': '1 0 1 1 1 0 0 0 0 0', |
| 'tpmc read 0x1008 0xd': '1 4c 57 52 47 1 2 1 0 0 0 0 0', |
| 'stop tcsd': 'tcsd stop/waiting', |
| 'tpmc write 0x1008 0x01 0x4c 0x57 0x52 0x47 0x01 0x00 ' + |
| '0x01 0x00 0x00 0x00 0x00 0x00' : '', |
| } |
| |
| def __init__(self): |
| self.last_cmd = None |
| self.state_dir = tempfile.mkdtemp() |
| |
| def run_shell_command_get_output(self, cmd): |
| self.last_cmd = cmd |
| return (self.MOCKED_COMMANDS[cmd],) |
| |
| def run_shell_command(self, cmd): |
| self.last_cmd = cmd |
| assert(cmd in self.MOCKED_COMMANDS) |
| |
| def state_dir_file(self, file_name): |
| return os.path.join(self.state_dir, file_name) |
| |
| def __del__(self): |
| shutil.rmtree(self.state_dir) |
| |
| class TestTpmHandler(unittest.TestCase): |
| def setUp(self): |
| self.tpmh = tpm_handler.TpmHandler() |
| self.tpmh.init(CrosIfMock()) |
| |
| def test_boot_version(self): |
| self.assertEqual(self.tpmh.get_fw_version(), 257) |
| |
| def test_read_kernel_version(self): |
| self.assertEqual(self.tpmh.get_kernel_version(), 513) |
| |
| def test_write_kernel_version(self): |
| self.tpmh.set_kernel_version(1) |
| |
| def test_config_file_handling(self): |
| '''Verify that config file gets modified/restored properly.''' |
| conf_file, conf_file_name = tempfile.mkstemp() |
| os.write(conf_file, CONF_FILE_TEMPLATE % ('', '')) |
| os.close(conf_file) |
| self.tpmh.enable_write_access(conf_file_name) |
| self.assertEqual(open(conf_file_name).read(), CONF_FILE_TEMPLATE % ( |
| tpm_handler.COMMENT_PATTERN, tpm_handler.COMMENT_PATTERN)) |
| self.tpmh.disable_write_access(conf_file_name) |
| self.assertEqual(open(conf_file_name).read(), |
| CONF_FILE_TEMPLATE % ('', '')) |
| os.remove(conf_file_name) |
| |
| if __name__ == '__main__': |
| unittest.main() |