# Copyright (c) 2010 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 = "Chrome OS Team"
NAME = "HWQualAuto"
TIME = "LONG"
TEST_CATEGORY = "Functional"
TEST_CLASS = "suite"
TEST_TYPE = "client"

DOC = """
This test suite runs fully automated client-side hardware qualification tests.
"""

job.run_test('power_Resume',
             constraints=['seconds_system_resume <= 1.0'])

# Kernel Support
job.run_test('platform_HighResTimers')
job.run_test('platform_KernelVersion')

# CPU
job.run_test('platform_AesThroughput')

# Firmware
job.run_test('firmware_RomSize',
             constraints=['kb_system_rom_size >= 4096',
                          'kb_ec_rom_size >= 128'])
# TODO(gauravsh): firmware_VbootCrypto is disabled until there is a way of
# running the auto test in 64-bit mode.
#
# This is tracked at http://crosbug.com/3792
#
# job.run_test('firmware_VbootCrypto', suite='benchmarks', tag='benchmarks')

# System Memory
job.run_test('hardware_MemoryTotalSize')
job.run_test('hardware_MemoryThroughput', num_iteration=2500, test_list='21')

# Storage
job.run_test('hardware_StorageFio',
             requirements = [
                 ('surfing', []),
		 ('boot', []),
		 ('seq_read', []),
		 ('seq_write', []),
		 ('4k_read', []),
		 ('4k_write', [])
             ],
             constraints=[
                 '_seq_read_read_bw >= 50 * 1024',
                 '_seq_write_write_bw >= 15 * 1024',
                 '_4k_write_write_iops >= 10',
             ])
job.run_test('hardware_DiskSize',
             constraints=['gb_main_disk_size >= 8'])
job.run_test('hardware_SsdDetection')

# Display
job.run_test('hardware_Backlight')
job.run_test('hardware_LightSensor')
job.run_test('hardware_Resolution')

# Graphics
job.run_test('graphics_GLAPICheck')
job.run_test('graphics_GLBench',
             constraints=[
                 'mpixels_sec_fill_solid >= 190',
                 'mpixels_sec_fill_tex_nearest >= 190',
                 'mpixels_sec_fill_tex_bilinear >= 190',
             ])
job.run_test('graphics_SanAngeles', creds='$backdoor')

# Video
job.run_test('camera_V4L2')

# Communications
job.run_test('network_DisableInterface',
             iface_name='wlan0', tag='wlan0')  # WiFi
job.run_test('network_DisableInterface',
             iface_name='eth0', tag='eth0')  # Ethernet
job.run_test('network_DisableInterface',
             iface_name='hci0', tag='hci0')  # Bluetooth
job.run_test('network_WiFiCaps')

# Extra Requirements
job.run_test('compilebench')
job.run_test('disktest')
job.run_test('hardware_SAT', seconds=600)
job.run_test('power_CPUFreq')
job.run_test('power_CPUIdle')
job.run_test('unixbench')

###  Local Variables:
###  mode: python
###  End:
