# Copyright 2019 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 = "Chrome OS Team"
NAME = "servo_LabstationVerification"
PURPOSE = "Ensure labstation images can provide basic lab functionality."
ATTRIBUTES = "suite:labstation_verification"
TIME = "MEDIUM"
TEST_CATEGORY = "Benchmark"
TEST_CLASS = "platform"
TEST_TYPE = "server"

DOC = """
This test is a wrapper around servo_Verification

This test makes the following assumptions:
1. There is a servo device attached to the labstation being tested.
1.1 There is a usb stick in the imaging slot on the servo device.

2. There is a DUT attached to the servo mentioned in 1.

3. The DUT is connected to the internet via ethernet through the servo.
3.1 The DUT is connected to the same subnet as the labstation.

4. The shared network supports IPv6 with IEEE EUI-64 (from EUI-48/mac) node
addresses

4.1: There is also a way for local testing to specify dut_ip=${IP} in the args
to skip IP inferring and use a known IP.

Sample usage:
test_that <labstation ip> servo_LabstationVerification

test_that <labstation ip> servo_LabstationVerification --args="dut_ip=${DUT_IP}"
// To skip DUT ip inferring and use a known DUT ip

A fun note:
If the labstation being tested is running an image that has already been
qualified, this test can also be used to see whether a (new) DUT is likely
to have lab deployment issues that are specific to the DUT as the test goes
through a lot of the flow that deployment goes through, and also tests some
basic features like console access and powerstate, which could trip up many
tests or repairs.
"""
# Workaround to make it compatible with moblab autotest UI.
global args_dict
try:
    args_dict
except NameError:
    args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test("servo_LabstationVerification", host=host, config=args_dict,
                 disable_sysinfo=True)

parallel_simple(run, machines)
