Index: client/site_tests/factory_ExternalStorage/factory_ExternalStorage.py |
diff --git a/client/site_tests/factory_ExternalStorage/factory_ExternalStorage.py b/client/site_tests/factory_ExternalStorage/factory_ExternalStorage.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..51d1cf365b35e927990f0b4db4d7db401df23d6f |
--- /dev/null |
+++ b/client/site_tests/factory_ExternalStorage/factory_ExternalStorage.py |
@@ -0,0 +1,113 @@ |
+# 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. |
+ |
+ |
+# DESCRIPTION : |
+# |
+# This is an example factory test that does not really do anything -- |
+# it displays a message in the center of the testing area, as |
+# communicated by arguments to run_once(). This test makes use of the |
+# factory_test library to display its UI, and to monitor keyboard |
+# events for test-switching triggers. This test can be terminated by |
+# typing SHIFT-Q. |
+ |
+from autotest_lib.client.bin import test |
+from autotest_lib.client.bin import utils |
+from autotest_lib.client.common_lib import error |
+from autotest_lib.client.common_lib import factory_test |
+ |
+import gobject |
+import gtk |
+import pango |
+import os |
+import sys |
+ |
+ |
+_STATE_WAIT_INSERT = 1 |
+_STATE_WAIT_REMOVE = 2 |
+ |
+ |
+def find_root_dev(): |
+ rootdev = utils.system_output('rootdev') |
+ return os.path.basename(rootdev[:-1]) |
+ |
+ |
+def find_all_storage_dev(): |
+ lssys = utils.run('ls -d /sys/block/sd*') |
+ devices = lssys.stdout.rsplit('\n') |
+ new_devices = set(os.path.basename(d.rstrip()) for d in devices if d) |
+ return new_devices |
+ |
+ |
+class factory_ExternalStorage(test.test): |
+ version = 1 |
+ |
+ def key_release_callback(self, widget, event): |
+ char = event.keyval in range(32,127) and chr(event.keyval) or None |
+ factory_test.XXX_log('key_release_callback %s(%s)' % |
+ (event.keyval, char)) |
+ factory_test.test_switch_on_trigger(event) |
+ return True |
+ |
+ def register_callbacks(self, window): |
+ window.connect('key-release-event', self.key_release_callback) |
+ window.add_events(gtk.gdk.KEY_RELEASE_MASK) |
+ |
+ def rescan_storage(self, test_tag): |
+ if self._state == _STATE_WAIT_INSERT: |
+ new_devices = find_all_storage_dev() |
+ diff = new_devices - self._devices |
+ if diff: |
+ self._devices = new_devices |
+ factory_test.XXX_log('found new devs : %s' % diff) |
+ self._target_device = diff.pop() |
+ devpath = '/dev/%s' % self._target_device |
+ self._prompt.set_test('testing drive %s...', devpath) |
+ gtk.main_iteration() |
+ test._result = self.job.run_test('hardware_StorageFio', |
+ dev=devpath, tag=test_tag) |
+ self._prompt.set_test('remove USB drive...') |
+ self._state = _STATE_WAIT_REMOVE |
+ else: |
+ diff = self._devices - find_all_storage_dev() |
+ if diff: |
+ if diff != set(self._target_device): |
+ raise error.TestFail('too many devs removed (%s vs %s)' % |
+ (diff, self._target_device)) |
+ gtk.main_quit() |
+ return True |
+ |
+ def run_once(self, test_widget_size=None, trigger_set=None, |
+ result_file_path=None, test_tag_prefix=None, test_count=None): |
+ |
+ factory_test.XXX_log('factory_ExternalStorage %s %s' % |
+ (test_tag_prefix, test_count)) |
+ |
+ test_tag = '%s_%s' % (test_tag_prefix, test_count) |
+ |
+ factory_test.init(trigger_set=trigger_set, |
+ result_file_path=result_file_path) |
+ |
+ label = gtk.Label('') |
+ label.modify_font(pango.FontDescription('courier new condensed 20')) |
+ label.set_alignment(0.5, 0.5) |
+ label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse('light green')) |
+ self._prompt = label |
+ |
+ test_widget = gtk.EventBox() |
+ test_widget.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black')) |
+ test_widget.add(label) |
+ |
+ self._prompt.set_text('insert USB drive...') |
+ self._state = _STATE_WAIT_INSERT |
+ self._result = False |
+ self._devices = find_all_storage_dev() |
+ gobject.timeout_add(250, self.rescan_storage, test_tag) |
+ |
+ factory_test.run_test_widget( |
+ test_widget=test_widget, |
+ test_widget_size=test_widget_size, |
+ window_registration_callback=self.register_callbacks) |
+ |
+ factory_test.XXX_log('exiting factory_ExternalStorage') |