blob: 2df9fe663fe8357bcbf34fa3bbb5678e3ac2bbe3 [file] [log] [blame]
# 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')