1# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import logging
6from autotest_lib.client.bin import test, utils
7from autotest_lib.client.common_lib import error
8
9class hardware_TPMLoadKey(test.test):
10
11    # This test determines the TPM can execute a TPM LoadKey function
12    #
13    # The test sequence follows the steps below:
14    #   1. Create a local file containing a text file to be "sealed"
15    #   2. Execute the TPM Tools command for tpm_sealdata
16    #   3. Parse response of tpm_sealdata for LoadKey function execution
17    #   4. Test passes if LoadKey reports success.
18    #
19
20    version = 1
21
22    # Runs a command, logs the output, and returns the exit status.
23    def __run_cmd(self, cmd):
24        result = utils.system_output(cmd, retain_output=True,
25                                     ignore_status=False)
26        logging.info(result)
27        return result
28
29    def run_once(self):
30        # Create the test input file
31        create_input_file_cmd = "echo 'This is a test' > in.dat"
32        output = self.__run_cmd(create_input_file_cmd)
33
34        # Execute the TPM Tools command for sealdata, causing a LoadKey
35        #    event, and filter for a debug message indicating success
36        seal_data_cmd = \
37            "tpm_sealdata -i in.dat -o out.dat -z -l debug 2>&1 | grep LoadKey"
38        output = self.__run_cmd(seal_data_cmd)
39
40        # Confirm the LoadKey message reports success
41        if (output.find("success") < 0):
42            raise error.TestError("LoadKey execution did not succeed")
43