# Copyright (c) 2012 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.

import re
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import pkcs11

class platform_Pkcs11LoadPerf(test.test):
    version = 1

    def run_once(self):
        pkcs11.setup_p11_test_token(True)
        pkcs11.load_p11_test_token()
        # Prepare the token with a key.
        utils.system('p11_replay --inject')
        pkcs11.unload_p11_test_token()
        pkcs11.load_p11_test_token()
        # List the objects and gather timing data.
        output = utils.system_output('p11_replay --list_objects')
        # The output will have multiple lines like 'Elapsed: 25ms'. We are
        # expecting at least three:
        # 1) How long it took to open a session.
        # 2) How long it took to list public objects.
        # 3) How long it took to list private objects.
        # The following extracts the numeric value from each timing statement.
        time_list = [int(match.group(1)) for match in
            re.finditer(r'Elapsed: (\d+)ms', output, flags=re.MULTILINE)]
        if len(time_list) < 3:
            error.TestFail('Expected output not found.')
        self.write_perf_keyval(
            {'cert_ready_ms': time_list[0] + time_list[1],
             'key_ready_ms': time_list[0] + time_list[1] + time_list[2]})
        pkcs11.cleanup_p11_test_token()
