56
56
self.server_manager = self.execution_manager.server_manager
57
57
self.time_manager = self.system_manager.time_manager
59
self.master_server = None
59
self.working_environment = {} # we pass env dict to define what we need
60
self.dirset = { self.name : { 'log': None } }
61
self.workdir = self.system_manager.create_dirset( self.system_manager.workdir
63
self.logdir = os.path.join(self.workdir,'log')
64
self.master_server = self.server_manager.allocate_server( self.name
60
68
self.record_flag=self.execution_manager.record_flag
61
69
self.environment_vars = {}
62
self.current_servers = []
70
self.current_servers = [self.master_server]
63
71
self.current_testcase = None
64
72
self.current_test_status = None
65
73
self.current_test_retcode = None
66
74
self.current_test_output = None
67
self.current_test_exec_time = 0
68
self.dirset = { self.name : { 'log': None } }
69
self.workdir = self.system_manager.create_dirset( self.system_manager.workdir
71
self.logdir = os.path.join(self.workdir,'log')
75
self.current_test_exec_time = 0
74
78
self.logging.debug_class(self)
83
87
self.logging.debug("Executor: %s, assigned test: %s" %(self.name
84
88
, self.current_testcase.fullname))
86
def handle_server_reqs(self):
87
""" Get the servers required to execute the testCase """
90
def handle_server_reqs(self, start_and_exit):
91
""" Get the servers required to execute the testCase
92
and ensure that we have servers and they were started
93
as expected. We take necessary steps if not
94
We also handle --start-and-exit here
89
98
master_count, slave_count, server_options = self.process_server_reqs()
90
99
(self.current_servers,bad_start) = self.server_manager.request_servers( self.name
104
, self.working_environment)
95
105
if self.current_servers == 0 or bad_start:
96
106
# error allocating servers, test is a failure
107
self.logging.warning("Problem starting server(s) for test...failing test case")
108
self.current_test_status = 'fail'
109
self.set_server_status(self.current_test_status)
113
# TODO: Report out all started servers via server_manager/server objects?
114
self.logging.info("User specified --start-and-exit. dbqp.py exiting and leaving servers running...")
98
116
if self.initial_run:
99
117
self.initial_run = 0
100
118
self.current_servers[0].report()
101
119
self.master_server = self.current_servers[0]
104
122
def process_server_reqs(self):
105
123
""" Check out our current_testcase to see what kinds of servers
123
141
while self.test_manager.has_tests() and keep_running == 1:
124
142
self.get_testCase()
125
143
self.handle_system_reqs()
126
bad_start = self.handle_server_reqs()
128
# Our servers didn't start, we mark it a failure
129
self.logging.warning("Problem starting server(s) for test...failing test case")
130
self.current_test_status = 'fail'
131
self.set_server_status(self.current_test_status)
134
# TODO: Report out all started servers via server_manager/server objects?
135
self.logging.info("User specified --start-and-exit. dbqp.py exiting and leaving servers running...")
138
self.execute_testCase()
139
self.test_manager.record_test_result( self.current_testcase
140
, self.current_test_status
141
, self.current_test_output
142
, self.current_test_exec_time )
144
self.handle_server_reqs(start_and_exit)
145
self.execute_testCase()
146
self.record_test_result()
143
147
if self.current_test_status == 'fail' and not self.execution_manager.force:
144
148
self.logging.error("Failed test. Use --force to execute beyond the first test failure")
151
155
self.logging.verbose("Executor: %s executing test: %s" %(self.name, self.current_testcase.fullname))
157
def record_test_result(self):
158
""" We get the test_manager to record the result """
160
self.test_manager.record_test_result( self.current_testcase
161
, self.current_test_status
162
, self.current_test_output
163
, self.current_test_exec_time )
155
166
def set_server_status(self, test_status):
156
167
""" We update our servers to indicate if a test passed or failed """
157
168
for server in self.current_servers:
162
173
def handle_system_reqs(self):
163
174
""" We check our test case and see what we need to do
164
system-wise to get ready
175
system-wise to get ready. This is likely to be
176
mode-dependent and this is just a placeholder
168
if self.current_testcase.master_sh:
169
self.system_manager.execute_cmd("/bin/sh %s" %(self.current_testcase.master_sh))