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

Side by Side Diff: client/site_tests/suite_Factory/control

Issue 3340013: Fix status reporting and auto-seq logic. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git
Patch Set: address comment, and patch factory_Verify Created 10 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « client/site_tests/factory_Verify/factory_Verify.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 # 2 #
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 AUTHOR = "Chrome OS Team" 7 AUTHOR = "Chrome OS Team"
8 NAME = "Factory" 8 NAME = "Factory"
9 TIME = "LONG" 9 TIME = "LONG"
10 TEST_CATEGORY = "Functional" 10 TEST_CATEGORY = "Functional"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 65
66 66
67 # Hack to work around autotest's obsession with GRUB. 67 # Hack to work around autotest's obsession with GRUB.
68 job.bootloader.set_default = lambda x: None 68 job.bootloader.set_default = lambda x: None
69 job.bootloader.boot_once = lambda x: None 69 job.bootloader.boot_once = lambda x: None
70 70
71 71
72 def start_ui(): 72 def start_ui():
73 ui_proc_args = [FACTORY_UI_PATH, TEST_LIST_PATH, 73 ui_proc_args = [FACTORY_UI_PATH, TEST_LIST_PATH,
74 STATUS_FILE_PATH, str(os.getpid())] 74 STATUS_FILE_PATH, str(os.getpid())]
75 factory.log('starting ui -- %s' % repr(ui_proc_args)) 75 factory.log('starting ui %s' % repr(ui_proc_args))
76 sp = subprocess.Popen(ui_proc_args, stdout=subprocess.PIPE) 76 sp = subprocess.Popen(ui_proc_args, stdout=subprocess.PIPE)
77 factory.log('waiting for ui to come up...') 77 factory.log('waiting for ui to come up...')
78 factory.log('got message from UI : %s' % repr(sp.stdout.readline().strip())) 78 factory.log('got message from ui : %s' % repr(sp.stdout.readline().strip()))
79 79
80 80
81 def step_reboot_seq(tag_prefix, total_iterations, i=0): 81 def step_reboot_seq(next_subtest_info, total_iterations, i=0):
82 if i < total_iterations: 82 if i < total_iterations:
83 job.next_step_prepend([step_reboot_seq, tag_prefix, 83 job.next_step_prepend([step_reboot_seq, next_subtest_info,
84 total_iterations, i + 1]) 84 total_iterations, i + 1])
85 factory.log('rebooting (iteration %d of %d)' % (i, total_iterations)) 85 factory.log('rebooting (iteration %d of %d)' % (i, total_iterations))
86 job.reboot() 86 job.reboot()
87 else: 87 else:
88 step_init(intentional_reboot_subtest_tag_prefix=tag_prefix) 88 step_init(next_subtest_info)
89 89
90 90
91 def step_init(intentional_reboot_subtest_tag_prefix=None): 91 def step_init(next_subtest_info=None):
92 job.next_step([step_init]) 92 job.next_step([step_init])
93 93
94 start_ui() 94 start_ui()
95 95
96 test_db = factory.TestDatabase(TEST_LIST)
96 status_map = factory.StatusMap(TEST_LIST, STATUS_FILE_PATH) 97 status_map = factory.StatusMap(TEST_LIST, STATUS_FILE_PATH)
97 control_state = factory.ControlState( 98 control_state = factory.ControlState(
98 job, TEST_LIST, status_map, STATUS_FILE_PATH, 99 job, TEST_LIST, test_db, status_map, STATUS_FILE_PATH,
99 parallel.fork_nuke_subprocess) 100 parallel.fork_nuke_subprocess)
100 101
101 if intentional_reboot_subtest_tag_prefix: 102 def run_automated_sequence(test, count, start_index=0):
102 reboot_subtest = status_map.test_db.get_subtest_by_tag_prefix( 103 for subtest in test.subtest_list[start_index:]:
103 intentional_reboot_subtest_tag_prefix) 104 if isinstance(subtest, factory.AutomatedRebootSubTest):
104 control_state.run_test(reboot_subtest) 105 next_subtest_info = (test_db.get_tag_prefix(subtest), count)
106 step_reboot_seq(next_subtest_info, subtest.iterations)
107 else:
108 shortcut_target = control_state.run_test(subtest, count)
109 status_map.read_new_data()
110 if shortcut_target:
111 return shortcut_target
112 if status_map.lookup_status(test) == factory.FAILED:
113 return None
114
115 if next_subtest_info:
116 tag_prefix, count = next_subtest_info
117 reboot_subtest = test_db.get_subtest_by_tag_prefix(tag_prefix)
118 control_state.run_test(reboot_subtest, count)
105 status_map.read_new_data() 119 status_map.read_new_data()
120 automated_seq = test_db.get_subtest_parent(reboot_subtest)
121 rst_index = automated_seq.subtest_list.index(reboot_subtest)
122 run_automated_sequence(automated_seq, count, start_index=rst_index + 1)
106 123
107 test = status_map.next_untested() 124 test = status_map.next_untested()
108 while test is not None: 125 while test is not None:
109 factory.log('next test = %s' % 126 unique_id_str = test_db.get_unique_id_str(test)
110 status_map.test_db.get_unique_details(test)) 127 count = status_map.lookup_count(test) + 1
128 factory.log('control running test %s/%s' % (unique_id_str, count))
111 if isinstance(test, factory.AutomatedSequence): 129 if isinstance(test, factory.AutomatedSequence):
112 for subtest in test.subtest_list: 130 shortcut_target = run_automated_sequence(test, count)
113 if isinstance(subtest, factory.AutomatedRebootSubTest):
114 tag_prefix = status_map.test_db.get_tag_prefix(subtest)
115 step_reboot_seq(tag_prefix, subtest.iterations)
116 else:
117 control_state.run_test(subtest)
118 if control_state.activated_kbd_shortcut_test:
119 break
120 else: 131 else:
121 control_state.run_test(test) 132 shortcut_target = control_state.run_test(test, count)
122 status_map.read_new_data() 133 status_map.read_new_data()
123 test = (control_state.activated_kbd_shortcut_test or 134 test = shortcut_target or status_map.next_untested()
124 status_map.next_untested())
OLDNEW
« no previous file with comments | « client/site_tests/factory_Verify/factory_Verify.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698