# Copyright (c) 2012 Collabora Ltd. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

NAME = "hardware_MultiReaderPowerConsumption"
AUTHOR = "Vivia Nikolaidou <vivia.nikolaidou@collabora.co.uk>"
PURPOSE = """Test card reader CPU power consumption to be within acceptable
range while performing random r/w"""
CRITERIA = """Fails if power consumption readings during heavy-duty random r/w
fall outside predefined ranges"""
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "hardware"
TEST_TYPE = "client"

DOC = """
This test runs a heavy-duty random read/write test, which is defined as
running a `dd if=/dev/urandom` in parallel with a `tail -f`. The test is
run three times: once on a ramdisk with the SD card mounted, once on the
SD card with the ramdisk unmounted, and once on the ramdisk with the SD
card unmounted. Power consumption is measured after each test and then
reported. Preconditions:

1) User must not be logged on to the GUI
2) An empty SD card must be inserted and formatted with a single mountable
   partition
3) No other usb storage devices must be inserted.

@param ramdisk_size: size of the ramdisk (integer in MiB).
@param file_size: test file size (integer in MiB).
@param ramdisk_path: path to the ramdisk mount point.
@param fs_uuid: the UUID for the attached card. Use this parameter is
       autodetection does not work as expected.
@param drain_limit: maximum ratio between the card reader energy consumption
       and each of the two ramdisk read/write test energy consumption values.
       1.00 means the card reader test may not consume more energy than either
       ramdisk test, 0.9 means it may consume no more than 90% of the ramdisk
       value, and so forth. default is 1.05.
"""

from autotest_lib.client.cros import storage as storage_mod

volume_filter, args_dict = storage_mod.args_to_storage_dict(args)
ramdisk_size = int(args_dict.get("ramdisk_size", 513)) # MiB
file_size = int(args_dict.get("file_size", 512)) # MiB
drain_limit = float(args_dict.get("drain_limit", 1.05))
if not volume_filter:
    volume_filter = {"bus": "usb"}

job.run_test("hardware_MultiReaderPowerConsumption",
             ramdisk_size=ramdisk_size,
             file_size=file_size,
             drain_limit=drain_limit,
             volume_filter=volume_filter)
