# 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.server import utils

AUTHOR = "mzhuo@chromium.org"
NAME = "enterprise_CFM_MimoSanity.meet_app"
TIME = "LONG"
TEST_CATEGORY = "Functional"
TEST_CLASS = "enterprise"
TEST_TYPE = "server"
ATTRIBUTES = "suite:bluestreak"
DEPENDENCIES = "mimo, meet_app"
JOB_RETRIES = 3

DOC = """
This test consistens of 3 steps to that verify the MIMO is always availble to
the CFM. It verifies:
  1.) that the MIMO is available after a CFM reboot
  2.) that the MIMO is available after joining and leaving a meeting
  3.) that the MIMO is available after being power cycled from the USB level

 "Available" means that the MIMO is visible on the system/USB level.
"""

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

def run_test(machine):
    repetitions = int(args_dict.get('repetitions', 3))
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test('enterprise_CFM_MimoSanity', host=host,
                 repetitions=repetitions, is_meeting=True, tag='meet_app')

parallel_simple(run_test, machines)
