164
162
ld_lib_paths = [ os.path.join(self.basedir,"lib")]
165
163
return ld_lib_paths
165
class mysqlTree(codeTree):
166
""" What a MySQL code tree should look like to the test-runner
170
def __init__(self, variables,system_manager):
171
self.system_manager = system_manager
172
self.logging = self.system_manager.logging
173
self.skip_keys = ['ld_lib_paths']
174
self.debug = variables['debug']
175
self.verbose = variables['verbose']
176
self.basedir = self.system_manager.find_path([os.path.abspath(variables['basedir'][0])])
177
self.source_dist = os.path.isdir(os.path.join(self.basedir, 'mysqld'))
178
self.builddir = self.system_manager.find_path([os.path.abspath(self.basedir)])
179
self.top_builddir = variables['topbuilddir']
180
self.testdir = self.system_manager.find_path([os.path.abspath(variables['testdir'])])
181
self.clientbindir = self.system_manager.find_path([os.path.join(self.basedir, 'client_release')
182
, os.path.join(self.basedir, 'client_debug')
183
, os.path.join(self.basedir, 'client')
184
, os.path.join(self.basedir, 'bin')])
185
self.charsetdir = self.system_manager.find_path([os.path.join(self.basedir, 'mysql/charsets')
186
, os.path.join(self.basedir, 'sql/share/charsets')
187
, os.path.join(self.basedir, 'share/charsets')])
188
self.langdir = self.system_manager.find_path([os.path.join(self.basedir, 'share/mysql')
189
, os.path.join(self.basedir, 'sql/share')
190
, os.path.join(self.basedir, 'share')])
193
self.srcdir = self.system_manager.find_path([self.basedir])
194
self.suite_paths = variables['suitepaths']
196
self.mysql_client = self.system_manager.find_path([os.path.join(self.clientbindir,
199
self.mysqldump = self.system_manager.find_path([os.path.join(self.clientbindir,
202
self.mysqlimport = self.system_manager.find_path([os.path.join(self.clientbindir,
205
self.mysqladmin = self.system_manager.find_path([os.path.join(self.clientbindir,
208
self.mysql_server = self.system_manager.find_path([ os.path.join(self.basedir, '/sql/mysqld-debug')
209
, os.path.join(self.basedir, '/libexec/mysqld-debug')
210
, os.path.join(self.basedir, '/sbin/mysqld-debug')
211
, os.path.join(self.basedir, '/bin/mysqld-debug')
212
, os.path.join(self.basedir, '/sql/mysqld')
213
, os.path.join(self.basedir, '/libexec/mysqld')
214
, os.path.join(self.basedir, '/sbin/mysqld')
215
, os.path.join(self.basedir, '/bin/mysqld')
216
, os.path.join(self.basedir, '/sql/mysqld-max-nt')
217
, os.path.join(self.basedir, '/libexec/mysqld-max-nt')
218
, os.path.join(self.basedir, '/sbin/mysqld-max-nt')
219
, os.path.join(self.basedir, '/bin/mysqld-max-nt')
220
, os.path.join(self.basedir, '/sql/mysqld-max')
221
, os.path.join(self.basedir, '/libexec/mysqld-max')
222
, os.path.join(self.basedir, '/sbin/mysqld-max')
223
, os.path.join(self.basedir, '/bin/mysqld-max')
224
, os.path.join(self.basedir, '/sql/mysqld-nt')
225
, os.path.join(self.basedir, '/libexec/mysqld-nt')
226
, os.path.join(self.basedir, '/sbin/mysqld-nt')
227
, os.path.join(self.basedir, '/bin/mysqld-nt')
232
self.mysqlslap = self.system_manager.find_path([os.path.join(self.clientbindir,
235
self.mysqltest = self.system_manager.find_path([os.path.join(self.clientbindir,
237
self.server_version_string = None
238
self.server_executable = None
239
self.server_version = None
240
self.server_compile_os = None
241
self.server_platform = None
242
self.server_compile_comment = None
244
self.process_server_version()
245
self.ld_lib_paths = self.get_ld_lib_paths()
246
self.bootstrap_path = os.path.join( self.system_manager.workdir
247
, 'mysql_bootstrap.sql' )
248
self.generate_bootstrap()
252
self.logging.debug_class(self)
255
self.logging.info("Using mysql source tree:")
256
report_keys = ['basedir'
263
for key in report_keys:
264
self.logging.info("%s: %s" %(key, vars(self)[key]))
266
def process_server_version(self):
267
""" Get the server version number from the found server executable """
268
(retcode, self.server_version_string) = self.system_manager.execute_cmd(("%s --no-defaults --version" %(self.mysql_server)))
269
# This is a bit bobo, but we're doing it, so nyah
271
self.server_executable, data_string = [data_item.strip() for data_item in self.server_version_string.split('Ver ')]
272
self.server_version, data_string = [data_item.strip() for data_item in data_string.split('for ')]
273
self.server_compile_os, data_string = [data_item.strip() for data_item in data_string.split(' on')]
274
self.server_platform = data_string.split(' ')[0].strip()
275
self.server_comment = data_string.replace(self.server_platform,'').strip()
277
def get_ld_lib_paths(self):
278
""" Return a list of paths we want added to LD_LIB variables
280
These are processed later at the server_manager level, but we want to
281
specify them here (for a mysql source tree) and now
286
ld_lib_paths = [ os.path.join(self.basedir,"libmysql/.libs/")
287
, os.path.join(self.basedir,"libmysql_r/.libs")
288
, os.path.join(self.basedir,"zlib/.libs")
291
ld_lib_paths = [ os.path.join(self.basedir,"lib")
292
, os.path.join(self.basedir,"lib/mysql")]
295
def generate_bootstrap(self):
296
""" We do the voodoo that we need to in order to create the bootstrap
300
found_new_sql = False
301
# determine if we have a proper area for our sql or if we
302
# use the rigged method from 5.0 / 5.1
303
# first we search various possible locations
304
test_file = "mysql_system_tables.sql"
305
for candidate_dir in [ "mysql"
310
candidate_path = os.path.join(self.basedir, candidate_dir, test_file)
311
if os.path.exists(candidate_path):
312
bootstrap_file = open(self.bootstrap_path,'w')
313
bootstrap_file.write("use mysql\n")
314
for sql_file in [ 'mysql_system_tables.sql' #official mysql system tables
315
, 'mysql_system_tables_data.sql' #initial data for sys tables
316
, 'mysql_test_data_timezone.sql' # subset of full tz table data for testing
317
, 'fill_help_tables.sql' # fill help tables populated only w/ src dist(?)
319
sql_file_path = os.path.join(self.basedir,candidate_dir,sql_file)
320
sql_file_handle = open(sql_file_path,'r')
321
bootstrap_file.write(sql_file_handle.readlines())
322
sql_file_handle.close()
325
if not found_new_sql:
326
# Install the system db's from init_db.sql
327
# that is in early 5.1 and 5.0 versions of MySQL
328
sql_file_path = os.path.join(self.basedir,'mysql-test/lib/init_db.sql')
329
self.logging.info("Attempting to use bootstrap file - %s" %(sql_file_path))
331
in_file = open(sql_file_path,'r')
332
bootstrap_file = open(self.bootstrap_path,'w')
333
bootstrap_file.write(in_file.readlines())
336
self.logging.error("Cannot find data for generating bootstrap file")
337
self.logging.error("Cannot proceed without this, system exiting...")
339
# Remove anonymous users
340
bootstrap_file.write("DELETE FROM mysql.user where user= '';\n")
341
# Create mtr database
342
bootstrap_file.write("CREATE DATABASE mtr;\n")
343
for sql_file in [ 'mtr_warnings.sql' # help tables + data for warning detection / suppression
344
, 'mtr_check.sql' # Procs for checking proper restore post-testcase
346
sql_file_path = os.path.join(self.basedir,'mysql-test/include',sql_file)
347
sql_file_handle = open(sql_file_path,'r')
348
bootstrap_file.write(sql_file_handle.readlines())
349
sql_file_handle.close()
350
bootstrap_file.close()