# Copyright 2015 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. import logging import os import re import common from autotest_lib.client.common_lib import error from autotest_lib.server import test _DEFAULT_BLOCK_SIZE = 4096 _DEFAULT_NUM_BLOCKS = 20000 _DEFAULT_MIN_SPEED = 30 * 1024 * 1024 class brillo_StorageWriteSpeedTest(test.test): """Verify that writing to a Brillo device data storage is fast enough.""" version = 1 def run_once(self, host=None, block_size=_DEFAULT_BLOCK_SIZE, num_blocks=_DEFAULT_NUM_BLOCKS, min_speed=_DEFAULT_MIN_SPEED): """Runs the test. @param host: A host object representing the DUT. @param block_size: The size of blocks to write in bytes. @param num_blocks: The number of blocks to write. @param min_speed: Minimum required write speed in bytes/sec. @raise TestError: Something went wrong while trying to execute the test. @raise TestFail: The test failed. """ try: tmp_file = os.path.join(host.get_tmp_dir(), 'testfile') result = host.run_output( 'dd if=/dev/zero of=%s bs=%s count=%s 2>&1' % (tmp_file, block_size, num_blocks)) actual_speed = None for line in result.splitlines(): match = re.match('.*\(([0-9]+) bytes/sec\)$', line) if match: actual_speed = int(match.group(1)) break if actual_speed is None: raise error.TestError('Error finding storage write speed') logging.info('Actual write speed is %d bytes/sec', actual_speed) if actual_speed < int(min_speed): logging.error('Write speed (%s bytes/sec) is lower than ' 'required (%s bytes/sec)', actual_speed, min_speed) raise error.TestFail( 'Storage write speed is lower than required') except error.GenericHostRunError: raise error.TestFail('Error writing to device data partition')