Adds test suite storagequal.

BUG=chromium:267276
TEST=site_utils/suite_enumerator.py -a . storagequal

Change-Id: I0e7f2a785d6d8f3c7a323b43149b64d8e01d944b
Reviewed-on: https://chromium-review.googlesource.com/64360
Reviewed-by: Dennis Jeffrey <dennisjeffrey@chromium.org>
Reviewed-by: Alex Miller <milleral@chromium.org>
Reviewed-by: Juan Casse <jcasse@chromium.org>
Commit-Queue: Juan Casse <jcasse@chromium.org>
Tested-by: Juan Casse <jcasse@chromium.org>
diff --git a/client/site_tests/hardware_Badblocks/control.storagequal b/client/site_tests/hardware_Badblocks/control.storagequal
new file mode 100644
index 0000000..e5aaf07
--- /dev/null
+++ b/client/site_tests/hardware_Badblocks/control.storagequal
@@ -0,0 +1,17 @@
+# Copyright (c) 2013 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.
+
+NAME = 'hardware_Badblocks'
+AUTHOR = 'jcasse, grundler'
+PURPOSE = 'Check for unusable blocks in unmounted partition in SSD storage.'
+TIME = 'LENGTHY'
+TEST_TYPE = 'client'
+SUITE = 'storagequal'
+
+DOC = """
+This test checks for unusable blocks in an unmounted partition of SSD by
+running the badblocks Linux utility.
+"""
+
+job.run_test('hardware_Badblocks', iters=24, timeout=60 * 60 * 24)
diff --git a/client/site_tests/hardware_StorageFio/control.storagequal b/client/site_tests/hardware_StorageFio/control.storagequal
new file mode 100644
index 0000000..a5a1535
--- /dev/null
+++ b/client/site_tests/hardware_StorageFio/control.storagequal
@@ -0,0 +1,30 @@
+# Copyright (c) 2013 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.
+
+NAME = 'hardware_StorageFio'
+AUTHOR = 'jcasse, grundler'
+PURPOSE = 'Benchmark storage performance using an unmounted root partition.'
+CRITERIA = 'This test is a benchmark.'
+SUITE = 'storagequal'
+TIME = 'LENGTHY'
+TEST_CLASS = 'hardware'
+TEST_CATEGORY = 'Performance'
+TEST_TYPE = 'client'
+
+DOC = """
+This test uses FIO to spawn a number of threads to perform a particular type of
+I/O. This test will use block sizes of 4k, 8k, and 16k. It will also attempt
+to simulate the disk traffic during a boot, login, and web surfing. It tests
+both sequential and random data access.
+
+NOTE: If autoupdate or another program accesses the spare root partition
+while this test is running corruption may occur.
+"""
+
+job.run_test('hardware_StorageFio',
+             constraints=[
+                 'bytes_per_sec_seq_read >= 20 * 1024 * 1024',
+                 'bytes_per_sec_seq_write >= 15 * 1024 * 1024',
+                 'iops_4k_write >= 10',
+             ])
diff --git a/suite_scheduler.ini b/suite_scheduler.ini
index 62a14ed..35a250e 100644
--- a/suite_scheduler.ini
+++ b/suite_scheduler.ini
@@ -32,6 +32,12 @@
 pool: suites
 num: 2
 
+[WeeklyStoraqequal]
+run_on: weekly
+suite: storagequal
+branch_specs: >=R30
+pool: suites
+
 [NightlyGraphics]
 run_on: nightly
 suite: graphics
diff --git a/test_suites/control.storagequal b/test_suites/control.storagequal
new file mode 100644
index 0000000..1fe1ea5
--- /dev/null
+++ b/test_suites/control.storagequal
@@ -0,0 +1,33 @@
+# Copyright (c) 2013 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 = 'jcasse, grundler'
+NAME = 'storagequal'
+TIME = 'LENGTHY'
+TEST_CATEGORY = 'General'
+TEST_CLASS = 'suite'
+TEST_TYPE = 'Server'
+
+DOC = """
+This dynamic suite runs a set of client-side solid-state storage tests.
+These test data integrity, etc.
+
+@param build: The name of the image to test.
+          Ex: x86-mario-release/R17-1412.33.0-a1-b29
+@param board: The board to test on. Ex: x86-mario
+@param pool: The pool of machines to utilize for scheduling. If pool=None
+             board is used.
+@param check_hosts: require appropriate live hosts to exist in the lab.
+@param SKIP_IMAGE: (optional) If present and True, don't re-image devices.
+@param file_bugs: If True your suite will file bugs on failures.
+"""
+
+import common
+from autotest_lib.server.cros.dynamic_suite import dynamic_suite
+
+dynamic_suite.reimage_and_run(
+    build=build, board=board, name=NAME, job=job, pool=pool,
+    check_hosts=check_hosts, add_experimental=True, num=num,
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)