# Copyright (c) 2015 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 logging, time

from autotest_lib.server import autotest, test


class cellular_ChromeEndToEnd(test.test):
    """Reboots the DUT and runs clients side tests to test cellular UI.

    """
    version = 1


    def _cold_reboot_dut(self, boot_id):
        """Cold reboot the dut.

        @param boot_id: DUT boot_id.

        """
        self._servo.get_power_state_controller().power_off()
        self._servo.get_power_state_controller().power_on()
        time.sleep(self._servo.BOOT_DELAY)
        self._client.wait_for_restart(old_boot_id=boot_id)


    def run_once(self, host, test):
        """Runs the test.

        @param host: A host object representing the DUT.
        @param test: Cellular UI test to execute.

        """

        self._client = host
        self._servo = host.servo

        if not self._servo:
            logging.info('Host %s does not have a servo.', host.hostname)
            return

        boot_id = self._client.get_boot_id()
        self._cold_reboot_dut(boot_id)

        client_at = autotest.Autotest(self._client)
        client_at.run_test('network_ChromeCellularEndToEnd',
                           test=test, check_client_result=True)
