| OLD | NEW |
| 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 | 5 |
| 6 # DESCRIPTION : | 6 # DESCRIPTION : |
| 7 # | 7 # |
| 8 # This is an example factory test that does not really do anything -- | 8 # This is an example factory test that does not really do anything -- |
| 9 # it displays a message in the center of the testing area, as | 9 # it displays a message in the center of the testing area, as |
| 10 # communicated by arguments to run_once(). This test makes use of the | 10 # communicated by arguments to run_once(). This test makes use of the |
| 11 # factory_test library to display its UI, and to monitor keyboard | 11 # factory_test library to display its UI, and to monitor keyboard |
| 12 # events for test-switching triggers. This test can be terminated by | 12 # events for test-switching triggers. This test can be terminated by |
| 13 # typing SHIFT-Q. | 13 # typing SHIFT-Q. |
| 14 | 14 |
| 15 from autotest_lib.client.bin import test | |
| 16 from autotest_lib.client.bin import utils | |
| 17 from autotest_lib.client.common_lib import error | |
| 18 from autotest_lib.client.common_lib import factory_test | |
| 19 | 15 |
| 20 import gobject | 16 import gobject |
| 21 import gtk | 17 import gtk |
| 22 import pango | 18 import pango |
| 23 import os | 19 import os |
| 24 import sys | 20 import sys |
| 25 | 21 |
| 22 from autotest_lib.client.bin import factory |
| 23 from autotest_lib.client.bin import factory_test |
| 24 from autotest_lib.client.bin import test |
| 25 from autotest_lib.client.bin import utils |
| 26 from autotest_lib.client.common_lib import error |
| 27 |
| 26 | 28 |
| 27 _STATE_WAIT_INSERT = 1 | 29 _STATE_WAIT_INSERT = 1 |
| 28 _STATE_WAIT_REMOVE = 2 | 30 _STATE_WAIT_REMOVE = 2 |
| 29 | 31 |
| 30 | 32 |
| 31 def find_root_dev(): | 33 def find_root_dev(): |
| 32 rootdev = utils.system_output('rootdev') | 34 rootdev = utils.system_output('rootdev') |
| 33 return os.path.basename(rootdev[:-1]) | 35 return os.path.basename(rootdev[:-1]) |
| 34 | 36 |
| 35 | 37 |
| 36 def find_all_storage_dev(): | 38 def find_all_storage_dev(): |
| 37 lssys = utils.run('ls -d /sys/block/sd*') | 39 lssys = utils.run('ls -d /sys/block/sd*') |
| 38 devices = lssys.stdout.rsplit('\n') | 40 devices = lssys.stdout.rsplit('\n') |
| 39 new_devices = set(os.path.basename(d.rstrip()) for d in devices if d) | 41 new_devices = set(os.path.basename(d.rstrip()) for d in devices if d) |
| 40 return new_devices | 42 return new_devices |
| 41 | 43 |
| 42 | 44 |
| 43 class factory_ExternalStorage(test.test): | 45 class factory_ExternalStorage(test.test): |
| 44 version = 1 | 46 version = 1 |
| 45 | 47 |
| 46 def key_release_callback(self, widget, event): | 48 def key_release_callback(self, widget, event): |
| 47 char = event.keyval in range(32,127) and chr(event.keyval) or None | 49 char = event.keyval in range(32,127) and chr(event.keyval) or None |
| 48 factory_test.XXX_log('key_release_callback %s(%s)' % | 50 factory.log('key_release_callback %s(%s)' % |
| 49 (event.keyval, char)) | 51 (event.keyval, char)) |
| 50 factory_test.test_switch_on_trigger(event) | 52 self._ft_state.exit_on_trigger(event) |
| 51 return True | 53 return True |
| 52 | 54 |
| 53 def register_callbacks(self, window): | 55 def register_callbacks(self, window): |
| 54 window.connect('key-release-event', self.key_release_callback) | 56 window.connect('key-release-event', self.key_release_callback) |
| 55 window.add_events(gtk.gdk.KEY_RELEASE_MASK) | 57 window.add_events(gtk.gdk.KEY_RELEASE_MASK) |
| 56 | 58 |
| 57 def rescan_storage(self, test_tag): | 59 def rescan_storage(self, test_tag): |
| 58 if self._state == _STATE_WAIT_INSERT: | 60 if self._state == _STATE_WAIT_INSERT: |
| 59 new_devices = find_all_storage_dev() | 61 new_devices = find_all_storage_dev() |
| 60 diff = new_devices - self._devices | 62 diff = new_devices - self._devices |
| 61 if diff: | 63 if diff: |
| 62 self._devices = new_devices | 64 self._devices = new_devices |
| 63 factory_test.XXX_log('found new devs : %s' % diff) | 65 factory.log('found new devs : %s' % diff) |
| 64 self._target_device = diff.pop() | 66 self._target_device = diff.pop() |
| 65 devpath = '/dev/%s' % self._target_device | 67 devpath = '/dev/%s' % self._target_device |
| 66 self._prompt.set_test('testing drive %s...', devpath) | 68 self._prompt.set_test('testing drive %s...', devpath) |
| 67 gtk.main_iteration() | 69 gtk.main_iteration() |
| 68 test._result = self.job.run_test('hardware_StorageFio', | 70 test._result = self.job.run_test('hardware_StorageFio', |
| 69 dev=devpath, tag=test_tag) | 71 dev=devpath, tag=test_tag) |
| 70 self._prompt.set_test('remove USB drive...') | 72 self._prompt.set_test('remove USB drive...') |
| 71 self._state = _STATE_WAIT_REMOVE | 73 self._state = _STATE_WAIT_REMOVE |
| 72 else: | 74 else: |
| 73 diff = self._devices - find_all_storage_dev() | 75 diff = self._devices - find_all_storage_dev() |
| 74 if diff: | 76 if diff: |
| 75 if diff != set(self._target_device): | 77 if diff != set(self._target_device): |
| 76 raise error.TestFail('too many devs removed (%s vs %s)' % | 78 raise error.TestFail('too many devs removed (%s vs %s)' % |
| 77 (diff, self._target_device)) | 79 (diff, self._target_device)) |
| 78 gtk.main_quit() | 80 gtk.main_quit() |
| 79 return True | 81 return True |
| 80 | 82 |
| 81 def run_once(self, test_widget_size=None, trigger_set=None, | 83 def run_once(self, test_widget_size=None, trigger_set=None, |
| 82 result_file_path=None, test_tag_prefix=None, test_count=None): | 84 result_file_path=None, test_tag_prefix=None, test_count=None): |
| 83 | 85 |
| 84 factory_test.XXX_log('factory_ExternalStorage %s %s' % | 86 factory.log('%s run_once' % self.__class__) |
| 85 (test_tag_prefix, test_count)) | |
| 86 | 87 |
| 87 test_tag = '%s_%s' % (test_tag_prefix, test_count) | 88 test_tag = '%s_%s' % (test_tag_prefix, test_count) |
| 89 factory.log('test_tag = %s' % test_tag) |
| 88 | 90 |
| 89 factory_test.init(trigger_set=trigger_set, | 91 self._ft_state = factory_test.State( |
| 90 result_file_path=result_file_path) | 92 trigger_set=trigger_set, |
| 93 result_file_path=result_file_path) |
| 91 | 94 |
| 92 label = gtk.Label('') | 95 label = gtk.Label('') |
| 93 label.modify_font(pango.FontDescription('courier new condensed 20')) | 96 label.modify_font(pango.FontDescription('courier new condensed 20')) |
| 94 label.set_alignment(0.5, 0.5) | 97 label.set_alignment(0.5, 0.5) |
| 95 label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse('light green')) | 98 label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse('light green')) |
| 96 self._prompt = label | 99 self._prompt = label |
| 97 | 100 |
| 98 test_widget = gtk.EventBox() | 101 test_widget = gtk.EventBox() |
| 99 test_widget.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black')) | 102 test_widget.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black')) |
| 100 test_widget.add(label) | 103 test_widget.add(label) |
| 101 | 104 |
| 102 self._prompt.set_text('insert USB drive...') | 105 self._prompt.set_text('insert USB drive...') |
| 103 self._state = _STATE_WAIT_INSERT | 106 self._state = _STATE_WAIT_INSERT |
| 104 self._result = False | 107 self._result = False |
| 105 self._devices = find_all_storage_dev() | 108 self._devices = find_all_storage_dev() |
| 106 gobject.timeout_add(250, self.rescan_storage, test_tag) | 109 gobject.timeout_add(250, self.rescan_storage, test_tag) |
| 107 | 110 |
| 108 factory_test.run_test_widget( | 111 self._ft_state.run_test_widget( |
| 109 test_widget=test_widget, | 112 test_widget=test_widget, |
| 110 test_widget_size=test_widget_size, | 113 test_widget_size=test_widget_size, |
| 111 window_registration_callback=self.register_callbacks) | 114 window_registration_callback=self.register_callbacks) |
| 112 | 115 |
| 113 factory_test.XXX_log('exiting factory_ExternalStorage') | 116 factory.log('%s run_once finished' % self.__class__) |
| OLD | NEW |