# Copyright 2017 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.client.common_lib.cros import cr50_utils
from autotest_lib.server.cros.faft.cr50_test import Cr50Test


class firmware_Cr50UpdateScriptStress(Cr50Test):
    """
    Stress the Cr50 Update Script.

    Clear the update state to force the device to retry the cr50 update. This
    will not update cr50. It will just force the cr50-update script to get
    the version and verify an update is not needed. If there are any reboots
    caused by the update verification, then we know something failed.

    This test is intended to be run with many iterations to ensure that the
    update process is not flaky.
    """
    version = 1

    def run_once(self, host):
        """Run the cr50 update script and make sure there aren't errors"""
        # Find the last cr50 update message already in /var/log/messages
        last_message = cr50_utils.CheckForFailures(host, '')

        # Clears the state and reboots the system to get the cr50-update to run
        cr50_utils.ClearUpdateStateAndReboot(host)

        cr50_utils.CheckForFailures(host, last_message)
