# Copyright 2014 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.

from autotest_lib.server import autotest
from autotest_lib.server import test

class platform_CryptohomeMigrateChapsToken(test.test):
    """ This test checks to see if Chaps generated keys are
        available after a ChromeOS autoupdate.
    """
    version = 1

    CLIENT_TEST = 'platform_CryptohomeMigrateChapsTokenClient'


    def run_once(self, host, baseline_version=None):
        # Save the build on the DUT, because we want to provision it after
        # the test.
        info = host.host_info_store.get()
        final_version = info.build
        if baseline_version:
            version = baseline_version
        else:
            board_name = host.get_board().split(':')[1]
            version = "%s-release/R37-3773.0.0" % board_name

        # Downgrade to baseline version and run client side test.
        self.job.run_test('provision_AutoUpdate', host=host,
                          value=version)
        client_at = autotest.Autotest(host)
        client_at.run_test(self.CLIENT_TEST, generate_key=True)
        # Upgrade back to latest version and see if the key migration
        # succeeded.
        self.job.run_test('provision_AutoUpdate', host=host,
                          value=final_version)
        client_at.run_test(self.CLIENT_TEST, generate_key=False)
