Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Unified Diff: client/bin/factory.py

Issue 3151032: Add unique_name test attr, fix UI active test selection, clean up test_list. (Closed) Base URL: http://src.chromium.org/git/autotest.git
Patch Set: sequences get unique_name too Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | client/bin/factory_ui » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/bin/factory.py
diff --git a/client/bin/factory.py b/client/bin/factory.py
index 962d7cdec7b9a7ef1124b40b41e50b9e5fa9ce0c..3d0d4a7995d81ae7eab6855dba2ca1522f065edf 100644
--- a/client/bin/factory.py
+++ b/client/bin/factory.py
@@ -51,7 +51,8 @@ class FactoryAutotestTest(FactoryTest):
class OperatorTest(FactoryAutotestTest):
def __init__(self, label_en='', label_zw='', autotest_name=None,
- kbd_shortcut=None, dargs={}, drop_caches=False):
+ kbd_shortcut=None, dargs={}, drop_caches=False,
+ unique_name=None):
self.__dict__.update(vars())
class InformationScreen(OperatorTest):
@@ -60,18 +61,18 @@ class InformationScreen(OperatorTest):
class AutomatedSequence(FactoryTest):
def __init__(self, label_en='', label_zw='', subtest_tag_prefix=None,
- kbd_shortcut=None, subtest_list=[]):
+ kbd_shortcut=None, subtest_list=[], unique_name=None):
self.__dict__.update(vars())
class AutomatedSubTest(FactoryAutotestTest):
def __init__(self, label_en='', label_zw='', autotest_name=None,
- dargs={}, drop_caches=False):
+ dargs={}, drop_caches=False, unique_name=None):
self.__dict__.update(vars())
class AutomatedRebootSubTest(FactoryAutotestTest):
def __init__(self, label_en='', label_zw='', iterations=None,
autotest_name='factory_RebootStub', dargs={},
- drop_caches=False):
+ drop_caches=False, unique_name=None):
self.__dict__.update(vars())
@@ -100,8 +101,12 @@ class TestDatabase:
self.seq_test_set], []))
self._subtest_map = dict((self._tag_prefix_map[st], st)
for st in self.subtest_set)
- self._unique_name_map = dict((self.get_unique_name(t), t)
- for t in self._tag_prefix_map)
+ self.all_tests = set(test_list) | self.subtest_set
+ self._unique_name_map = dict((t.unique_name, t) for t in self.all_tests
+ if isinstance(t, FactoryAutotestTest)
+ and t.unique_name is not None)
+ self._unique_details_map = dict((self.get_unique_details(t), t)
+ for t in self.all_tests)
self._kbd_shortcut_map = dict((test.kbd_shortcut, test)
for test in test_list)
self.kbd_shortcut_set = set(self._kbd_shortcut_map)
@@ -115,23 +120,23 @@ class TestDatabase:
(test.label_en, collision.label_en, test.kbd_shortcut))
assert not delta
- def get_test_by_details(self, autotest_name, tag_prefix):
- unique_name = '%s.%s' % (autotest_name, tag_prefix)
- return self._unique_name_map.get(unique_name)
-
- def get_test_by_kbd_shortcut(self, kbd_shortcut):
- return self._kbd_shortcut_map.get(kbd_shortcut)
+ def get_tag_prefix(self, test):
+ return self._tag_prefix_map[test]
- def get_unique_name(self, test):
+ def get_unique_details(self, test):
if isinstance(test, AutomatedSequence):
return test.subtest_tag_prefix
- return '%s.%s' % (test.autotest_name, self._tag_prefix_map[test])
+ return '%s.%s' % (test.autotest_name, self.get_tag_prefix(test))
- def get_tag_prefix(self, test):
- return self._tag_prefix_map[test]
+ def get_test_by_unique_details(self, autotest_name, tag_prefix):
+ unique_details = '%s.%s' % (autotest_name, tag_prefix)
+ return self._unique_details_map.get(unique_details)
+
+ def get_test_by_kbd_shortcut(self, kbd_shortcut):
+ return self._kbd_shortcut_map.get(kbd_shortcut)
- def get_all_tests(self):
- return set(self.test_queue) | self.subtest_set
+ def get_test_by_unique_name(self, unique_name):
+ return self._unique_name_map.get(unique_name)
def get_subtest_parent(self, test):
return self._subtest_parent_map.get(test)
@@ -152,7 +157,7 @@ class StatusMap:
def __init__(self, test_list, status_file_path):
self.test_db = TestDatabase(test_list)
- all_tests = self.test_db.get_all_tests()
+ all_tests = self.test_db.all_tests
self._status_map = dict((t, StatusMap.Entry()) for t in all_tests)
self._status_file_path = status_file_path
self._status_file_pos = 0
@@ -187,8 +192,8 @@ class StatusMap:
def next_untested(self):
remaining = self.filter(UNTESTED)
- unique_names = [self.test_db.get_unique_name(t) for t in remaining]
- log('remaining untested = [%s]' % ', '.join(unique_names))
+ unique_details = [self.test_db.get_unique_details(t) for t in remaining]
+ log('remaining untested = [%s]' % ', '.join(unique_details))
return remaining is not [] and remaining.pop() or None
def read_new_data(self):
@@ -206,7 +211,7 @@ class StatusMap:
% (code, test_id, error_msg))
autotest_name, _, tag = test_id.rpartition('.')
tag_prefix, _, count = tag.rpartition('_')
- test = self.test_db.get_test_by_details(
+ test = self.test_db.get_test_by_unique_details(
autotest_name, tag_prefix)
if test is None:
log('ignoring update (%s) for test "%s" "%s"' %
@@ -231,23 +236,23 @@ class StatusMap:
parent_seq_test = self.test_db.get_subtest_parent(test)
active_tests -= set([parent_seq_test])
for bad_test in active_tests:
- unique_name = self.test_db.get_unique_name(bad_test)
+ unique_details = self.test_db.get_unique_details(bad_test)
log('WARNING: assuming test %s FAILED (status log has no data)' %
- unique_name)
+ unique_details)
self.update(bad_test, FAILED, self.lookup_count(bad_test),
'assumed FAILED (status log has no data)')
def update(self, test, status, count, error_msg):
entry = self._status_map[test]
- unique_name = self.test_db.get_unique_name(test)
+ unique_details = self.test_db.get_unique_details(test)
if count < entry.count:
log('ERROR: count regression for %s (%d -> %d)' %
- (unique_name, entry.count, count))
+ (unique_details, entry.count, count))
if isinstance(test, InformationScreen) and status in [PASSED, FAILED]:
status = UNTESTED
if status != entry.status:
log('status change for %s : %s/%s -> %s/%s' %
- (unique_name, entry.status, entry.count, status, count))
+ (unique_details, entry.status, entry.count, status, count))
if entry.label_box is not None:
entry.label_box.update(status)
if status == ACTIVE:
@@ -255,15 +260,18 @@ class StatusMap:
entry.status = status
entry.count = count
entry.error_msg = error_msg
- log('%s new status = %s' % (unique_name, self._status_map[test].status))
+ log('%s new status = %s' %
+ (unique_details, self._status_map[test].status))
def update_seq_test(self, test):
subtest_status_set = set(map(self.lookup_status, test.subtest_list))
max_count = max(map(self.lookup_count, test.subtest_list))
if len(subtest_status_set) == 1:
status = subtest_status_set.pop()
+ elif subtest_status_set == set([PASSED, FAILED]):
+ status = FAILED
else:
- status = ACTIVE in subtest_status_set and ACTIVE or FAILED
+ status = ACTIVE
self.update(test, status, max_count, None)
def set_label_box(self, test, label_box):
« no previous file with comments | « no previous file | client/bin/factory_ui » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698