# 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.

AUTHOR = "achuith@chromium.org"
NAME = "telemetry_UnitTestsServer_perf"
PURPOSE = "Run the Telemetry perf unit tests as a logged-in user."
ATTRIBUTES = "suite:telemetry_unit_server"
TIME = "LONG"
TEST_CATEGORY = "Functional"
TEST_CLASS = "desktopui"
TEST_TYPE = "server"

DOC = """
Verifies that all Telemetry perf unit tests pass when run as a logged-in user.
"""

def run_client(machine):
    host = hosts.create_host(machine)
    host.log_kernel()
    job.run_test('telemetry_UnitTestsServer', host=host,
                 use_packaging=use_packaging,
                 copy_boto_file=True,
                 browser_type='system', tag='perf', unit_tests=[],
                 perf_tests=[''])


job.parallel_simple(run_client, machines)
