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

AUTHOR = "Harpreet Grewal <harpreet@chromium.org>"
NAME = "cellular_StaleModemReboot"
PURPOSE = "Verify modem is available for testing."
CRITERIA = """
This test will fail if either there is no response to modem status command or
modem is in a non testable state after two or more tries.
"""
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "network"
TEST_TYPE = "server"
ATTRIBUTES = "suite:cellular_modem_repair"
DEPENDENCIES = "servo_state:WORKING"

DOC = """
  Tests that a cellular modem is available for testing.

  The test attempts to detect the modem state by running the modem status
  command on the DUT and strips the state from its output. The test saves the
  original modem state and reboots the DUT regardless of what state the modem
  is in. After the reboot, it tries to get the modem state again and if the
  modem does not respond or the state is one of the following as listed below,
  it tries to reboot the DUT for a maximum of two tries by default. User can
  override the number of tries by passing a tries flag with a desired value.

  REBOOT STATES (If modem is in any of these states, DUT is cold rebooted using
  the servo.):
  MODEM STATE FAILED = -1
  MODEM STATE UNKNOWN = 0
  MODEM STATE DISABLED = 3
  MODEM STATE DISABLING = 4
  MODEM STATE DISCONNECTING = 9
  GOBI MODEM STATE UNKNOWN = 0
  GOBI MODEM STATE DISABLED = 10
  GOBI MODEM STATE DISABLING = 20
  GOBI MODEM STATE DISCONNECTING = 70

  WAIT DELAY STATES (Waits for a maximum of 120 seconds for the modem to get
  into a testable state. If the modem is still not in a stable state after the
  first try, DUT will be rebooted.):
  MODEM STATE INITIALIZING = 1
  MODEM STATE ENABLING = 5
  MODEM STATE ENABLED = 6
  MODEM STATE SEARCHING = 7
  GOBI MODEM STATE ENABLING = 30
  GOBI MODEM STATE ENABLED = 40
  GOBI MODEM STATE SEARCHING = 50

  STABLE STATES (Test does nothing.):
  MODEM STATE REGISTERED = 8
  MODEM STATE CONNECTING = 10
  MODEM STATE CONNECTED = 11
  GOBI MODEM STATE REGISTERED = 60
  GOBI MODEM STATE CONNECTING = 80
  GOBI MODEM STATE CONNECTED = 90

  LOCKED STATE (Test fails, the device should never be in this state unless
  the SIM is locked):
  MODEM STATE LOCKED = 2

"""

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run_StaleModemReboot(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    tries = int(args_dict.get('tries', 2))
    job.run_test('cellular_StaleModemReboot', host=host, tries=tries)

parallel_simple(run_StaleModemReboot, machines)
