~ubuntu-branches/ubuntu/trusty/drizzle/trusty-updates

« back to all changes in this revision

Viewing changes to tests/kewpie/randgen/runall-new.pl

  • Committer: Package Import Robot
  • Author(s): Tobias Frost
  • Date: 2012-04-04 15:12:07 UTC
  • mfrom: (1.1.4)
  • Revision ID: package-import@ubuntu.com-20120404151207-xwsgn1xegslle4p0
Tags: 1:7.1.32-rc-1
* New upstream release.
* Plugin-filtered-replicator upstream removed and will no longer be built.
* Updating d/*install files to accommodate upstream changes from drizzle7
  to drizzle
* Added symlink in libdrizzledmessage-dev to library
* libdrizzle: soname-bump
* Rename package drizzle-plugin-performance-dictionary to shorten package name
  (due to linitan warning package-has-long-file-name)
* Debian/control: removed unused substitution variable ${shlibs:Depends} for
  -dbg and -dev packages

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
 
 
3
# Copyright (c) 2010,2011 Oracle and/or its affiliates. All rights reserved.
 
4
# Use is subject to license terms.
 
5
#
 
6
# This program is free software; you can redistribute it and/or modify
 
7
# it under the terms of the GNU General Public License as published by
 
8
# the Free Software Foundation; version 2 of the License.
 
9
#
 
10
# This program is distributed in the hope that it will be useful, but
 
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 
13
# General Public License for more details.
 
14
#
 
15
# You should have received a copy of the GNU General Public License
 
16
# along with this program; if not, write to the Free Software
 
17
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
 
18
# USA
 
19
 
 
20
#################### FOR THE MOMENT THIS SCRIPT IS FOR TESTING PURPOSES
 
21
 
 
22
use lib 'lib';
 
23
use lib "$ENV{RQG_HOME}/lib";
 
24
use Carp;
 
25
use strict;
 
26
use GenTest;
 
27
use GenTest::BzrInfo;
 
28
use GenTest::Constants;
 
29
use GenTest::Properties;
 
30
use GenTest::App::GenTest;
 
31
use DBServer::DBServer;
 
32
use DBServer::MySQL::MySQLd;
 
33
use DBServer::MySQL::ReplMySQLd;
 
34
 
 
35
my $logger;
 
36
eval
 
37
{
 
38
    require Log::Log4perl;
 
39
    Log::Log4perl->import();
 
40
    $logger = Log::Log4perl->get_logger('randgen.gentest');
 
41
};
 
42
 
 
43
$| = 1;
 
44
if (osWindows()) {
 
45
        $SIG{CHLD} = "IGNORE";
 
46
}
 
47
 
 
48
if (defined $ENV{RQG_HOME}) {
 
49
    if (osWindows()) {
 
50
        $ENV{RQG_HOME} = $ENV{RQG_HOME}.'\\';
 
51
    } else {
 
52
        $ENV{RQG_HOME} = $ENV{RQG_HOME}.'/';
 
53
    }
 
54
}
 
55
 
 
56
use Getopt::Long;
 
57
use GenTest::Constants;
 
58
use DBI;
 
59
use Cwd;
 
60
 
 
61
my $database = 'test';
 
62
my @dsns;
 
63
 
 
64
my ($gendata, @basedirs, @mysqld_options, @vardirs, $rpl_mode,
 
65
    $engine, $help, $debug, @validators, @reporters, @transformers, 
 
66
    $grammar_file, $skip_recursive_rules,
 
67
    $redefine_file, $seed, $mask, $mask_level, $mem, $rows,
 
68
    $varchar_len, $xml_output, $valgrind, @valgrind_options, $views,
 
69
    $start_dirty, $filter, $build_thread, $sqltrace, $testname,
 
70
    $report_xml_tt, $report_xml_tt_type, $report_xml_tt_dest,
 
71
    $notnull, $logfile, $logconf, $report_tt_logdir, $querytimeout, $no_mask,
 
72
    $short_column_names, $strict_fields, $freeze_time);
 
73
 
 
74
my $gendata=''; ## default simple gendata
 
75
 
 
76
my $threads = my $default_threads = 10;
 
77
my $queries = my $default_queries = 1000;
 
78
my $duration = my $default_duration = 3600;
 
79
 
 
80
my @ARGV_saved = @ARGV;
 
81
 
 
82
my $opt_result = GetOptions(
 
83
        'mysqld=s@' => \$mysqld_options[0],
 
84
        'mysqld1=s@' => \$mysqld_options[0],
 
85
        'mysqld2=s@' => \$mysqld_options[1],
 
86
    'basedir=s' => \$basedirs[0],
 
87
    'basedir1=s' => \$basedirs[0],
 
88
    'basedir2=s' => \$basedirs[1],
 
89
        #'basedir=s@' => \@basedirs,
 
90
        'vardir=s' => \$vardirs[0],
 
91
        'vardir1=s' => \$vardirs[0],
 
92
        'vardir2=s' => \$vardirs[1],
 
93
        #'vardir=s@' => \@vardirs,
 
94
        'rpl_mode=s' => \$rpl_mode,
 
95
        'engine=s' => \$engine,
 
96
        'grammar=s' => \$grammar_file,
 
97
        'skip-recursive-rules' > \$skip_recursive_rules,
 
98
        'redefine=s' => \$redefine_file,
 
99
        'threads=i' => \$threads,
 
100
        'queries=s' => \$queries,
 
101
        'duration=i' => \$duration,
 
102
        'help' => \$help,
 
103
        'debug' => \$debug,
 
104
        'validators=s@' => \@validators,
 
105
        'reporters=s@' => \@reporters,
 
106
        'transformers=s@' => \@transformers,
 
107
        'gendata:s' => \$gendata,
 
108
        'notnull' => \$notnull,
 
109
        'short_column_names' => \$short_column_names,
 
110
    'freeze_time' => \$freeze_time,
 
111
        'strict_fields' => \$strict_fields,
 
112
        'seed=s' => \$seed,
 
113
        'mask=i' => \$mask,
 
114
    'mask-level=i' => \$mask_level,
 
115
        'mem' => \$mem,
 
116
        'rows=i' => \$rows,
 
117
        'varchar-length=i' => \$varchar_len,
 
118
        'xml-output=s'  => \$xml_output,
 
119
        'report-xml-tt' => \$report_xml_tt,
 
120
        'report-xml-tt-type=s' => \$report_xml_tt_type,
 
121
        'report-xml-tt-dest=s' => \$report_xml_tt_dest,
 
122
        'testname=s'            => \$testname,
 
123
        'valgrind!'     => \$valgrind,
 
124
        'valgrind_options=s@'   => \@valgrind_options,
 
125
        'views:s'               => \$views,
 
126
        'start-dirty'   => \$start_dirty,
 
127
        'filter=s'      => \$filter,
 
128
    'mtr-build-thread=i' => \$build_thread,
 
129
    'sqltrace:s' => \$sqltrace,
 
130
    'logfile=s' => \$logfile,
 
131
    'logconf=s' => \$logconf,
 
132
    'report-tt-logdir=s' => \$report_tt_logdir,
 
133
    'querytimeout=i' => \$querytimeout,
 
134
    'no-mask' => \$no_mask
 
135
    );
 
136
 
 
137
if (defined $logfile && defined $logger) {
 
138
    setLoggingToFile($logfile);
 
139
} else {
 
140
    if (defined $logconf && defined $logger) {
 
141
        setLogConf($logconf);
 
142
    }
 
143
}
 
144
 
 
145
if (!$opt_result || $help || $basedirs[0] eq '' || not defined $grammar_file) {
 
146
        help();
 
147
        exit($help ? 0 : 1);
 
148
}
 
149
 
 
150
if (defined $sqltrace) {
 
151
    # --sqltrace may have a string value (optional). 
 
152
    # Allowed values for --sqltrace:
 
153
    my %sqltrace_legal_values = (
 
154
        'MarkErrors'    => 1  # Prefixes invalid SQL statements for easier post-processing
 
155
    );
 
156
    
 
157
    if (length($sqltrace) > 0) {
 
158
        # A value is given, check if it is legal.
 
159
        if (not exists $sqltrace_legal_values{$sqltrace}) {
 
160
            say("Invalid value for --sqltrace option: '$sqltrace'");
 
161
            say("Valid values are: ".join(', ', keys(%sqltrace_legal_values)));
 
162
            say("No value means that default/plain sqltrace will be used.");
 
163
            exit(STATUS_ENVIRONMENT_FAILURE);
 
164
        }
 
165
    } else {
 
166
        # If no value is given, GetOpt will assign the value '' (empty string).
 
167
        # We interpret this as plain tracing (no marking of errors, prefixing etc.).
 
168
        # Better to use 1 instead of empty string for comparisons later.
 
169
        $sqltrace = 1;
 
170
    }
 
171
}
 
172
 
 
173
say("Copyright (c) 2010,2011 Oracle and/or its affiliates. All rights reserved. Use is subject to license terms.");
 
174
say("Please see http://forge.mysql.com/wiki/Category:RandomQueryGenerator for more information on this test framework.");
 
175
say("Starting \n# $0 \\ \n# ".join(" \\ \n# ", @ARGV_saved));
 
176
 
 
177
#
 
178
# Calculate master and slave ports based on MTR_BUILD_THREAD (MTR
 
179
# Version 1 behaviour)
 
180
#
 
181
 
 
182
if (not defined $build_thread) {
 
183
    if (defined $ENV{MTR_BUILD_THREAD}) {
 
184
        $build_thread = $ENV{MTR_BUILD_THREAD}
 
185
    } else {
 
186
        $build_thread = DEFAULT_MTR_BUILD_THREAD;
 
187
    }
 
188
}
 
189
 
 
190
if ( $build_thread eq 'auto' ) {
 
191
    say ("Please set the environment variable MTR_BUILD_THREAD to a value <> 'auto' (recommended) or unset it (will take the value ".DEFAULT_MTR_BUILD_THREAD.") ");
 
192
    exit (STATUS_ENVIRONMENT_FAILURE);
 
193
}
 
194
 
 
195
my @ports = (10000 + 10 * $build_thread, 10000 + 10 * $build_thread + 2);
 
196
 
 
197
say("master_port : $ports[0] slave_port : $ports[1] ports : @ports MTR_BUILD_THREAD : $build_thread ");
 
198
 
 
199
#
 
200
# If the user has provided two vardirs and one basedir, start second
 
201
# server using the same basedir
 
202
#
 
203
 
 
204
if (
 
205
        ($vardirs[1] ne '') && 
 
206
        ($basedirs[1] eq '')
 
207
    ) {
 
208
        $basedirs[1] = $basedirs[0];    
 
209
}
 
210
 
 
211
 
 
212
foreach my $dir (cwd(), @basedirs) {
 
213
# calling bzr usually takes a few seconds...
 
214
    if (defined $dir) {
 
215
        my $bzrinfo = GenTest::BzrInfo->new(
 
216
            dir => $dir
 
217
            ); 
 
218
        my $revno = $bzrinfo->bzrRevno();
 
219
        my $revid = $bzrinfo->bzrRevisionId();
 
220
        
 
221
        if ((defined $revno) && (defined $revid)) {
 
222
            say("$dir Revno: $revno");
 
223
            say("$dir Revision-Id: $revid");
 
224
        } else {
 
225
            say($dir.' does not look like a bzr branch, cannot get revision info.');
 
226
        } 
 
227
    }
 
228
}
 
229
 
 
230
 
 
231
if (
 
232
        ($mysqld_options[1] ne '') && 
 
233
        ($basedirs[1] eq '')
 
234
    ) {
 
235
        $basedirs[1] = $basedirs[0];    
 
236
}
 
237
 
 
238
#
 
239
# If the user has provided identical basedirs and vardirs, warn of a
 
240
# potential overlap.
 
241
#
 
242
 
 
243
if (
 
244
        ($basedirs[0] eq $basedirs[1]) &&
 
245
        ($vardirs[0] eq $vardirs[1]) &&
 
246
        ($rpl_mode eq '')
 
247
    ) {
 
248
        croak("Please specify either different --basedir[12] or different --vardir[12] in order to start two MySQL servers");
 
249
}
 
250
 
 
251
my $client_basedir;
 
252
 
 
253
foreach my $path ("$basedirs[0]/client/RelWithDebInfo", "$basedirs[0]/client/Debug", "$basedirs[0]/client", "$basedirs[0]/bin") {
 
254
        if (-e $path) {
 
255
                $client_basedir = $path;
 
256
                last;
 
257
        }
 
258
}
 
259
 
 
260
#
 
261
# Start servers. Use rpl_alter if replication is needed.
 
262
#
 
263
 
 
264
my @server;
 
265
my $rplsrv;
 
266
 
 
267
if ($rpl_mode ne '') {
 
268
    my @options;
 
269
    push @options, lc("--$engine") if defined $engine && lc($engine) ne lc('myisam');
 
270
    
 
271
    push @options, "--sql-mode=no_engine_substitution" if join(' ', @ARGV_saved) !~ m{sql-mode}io;
 
272
    
 
273
    if (defined $mysqld_options[0]) {
 
274
        push @options, @{$mysqld_options[0]};
 
275
    }
 
276
    $rplsrv = DBServer::MySQL::ReplMySQLd->new(basedir => $basedirs[0],
 
277
                                               master_vardir => $vardirs[0],
 
278
                                               master_port => $ports[0],
 
279
                                               slave_vardir => $vardirs[1],
 
280
                                               slave_port => $ports[1],
 
281
                                               mode => $rpl_mode,
 
282
                                               server_options => \@options,
 
283
                                               valgrind => $valgrind,
 
284
                                               valgrind_options => \@valgrind_options,
 
285
                                               general_log => 1,
 
286
                                               start_dirty => $start_dirty);
 
287
    
 
288
    my $status = $rplsrv->startServer();
 
289
    
 
290
    if ($status > DBSTATUS_OK) {
 
291
        stopServers();
 
292
        if (osWindows()) {
 
293
            say(system("dir ".unix2winPath($rplsrv->master->datadir)));
 
294
            say(system("dir ".unix2winPath($rplsrv->slave->datadir)));
 
295
        } else {
 
296
            say(system("ls -l ".$rplsrv->master->datadir));
 
297
            say(system("ls -l ".$rplsrv->slave->datadir));
 
298
        }
 
299
        croak("Could not start replicating server pair");
 
300
    }
 
301
    
 
302
    $dsns[0] = $rplsrv->master->dsn($database);
 
303
    $dsns[1] = undef; ## passed to gentest. No dsn for slave!
 
304
    $server[0] = $rplsrv->master;
 
305
    $server[1] = $rplsrv->slave;
 
306
    
 
307
} else {
 
308
    if ($#basedirs != $#vardirs) {
 
309
        croak ("The number of basedirs and vardirs must match $#basedirs != $#vardirs")
 
310
    }
 
311
    foreach my $server_id (0..1) {
 
312
        next if $basedirs[$server_id] eq '';
 
313
        
 
314
        my @options;
 
315
        push @options, lc("--$engine") if defined $engine && lc($engine) ne lc('myisam');
 
316
        
 
317
        push @options, "--sql-mode=no_engine_substitution" if join(' ', @ARGV_saved) !~ m{sql-mode}io;
 
318
        
 
319
        if (defined $mysqld_options[$server_id]) {
 
320
            push @options, @{$mysqld_options[$server_id]};
 
321
        }
 
322
        $server[$server_id] = DBServer::MySQL::MySQLd->new(basedir => $basedirs[$server_id],
 
323
                                                           vardir => $vardirs[$server_id],
 
324
                                                           port => $ports[$server_id],
 
325
                                                           start_dirty => $start_dirty,
 
326
                                                           valgrind => $valgrind,
 
327
                                                           valgrind_options => \@valgrind_options,
 
328
                                                           server_options => \@options,
 
329
                                                           general_log => 1);
 
330
        
 
331
        my $status = $server[$server_id]->startServer;
 
332
        
 
333
        if ($status > DBSTATUS_OK) {
 
334
            stopServers();
 
335
            if (osWindows()) {
 
336
                say(system("dir ".unix2winPath($server[$server_id]->datadir)));
 
337
            } else {
 
338
                say(system("ls -l ".$server[$server_id]->datadir));
 
339
            }
 
340
            croak("Could not start all servers");
 
341
        }
 
342
        
 
343
        if (
 
344
            ($server_id == 0) ||
 
345
            ($rpl_mode eq '') 
 
346
            ) {
 
347
            $dsns[$server_id] = $server[$server_id]->dsn($database);
 
348
        }
 
349
    
 
350
        if ((defined $dsns[$server_id]) && (defined $engine)) {
 
351
            my $dbh = DBI->connect($dsns[$server_id], undef, undef, { RaiseError => 1 } );
 
352
            $dbh->do("SET GLOBAL storage_engine = '$engine'");
 
353
        }
 
354
    }
 
355
}
 
356
 
 
357
#
 
358
# Run actual queries
 
359
#
 
360
 
 
361
my $gentestProps = GenTest::Properties->new(
 
362
    legal => ['grammar',
 
363
              'skip-recursive-rules',
 
364
              'dsn',
 
365
              'engine',
 
366
              'gendata',
 
367
              'generator',
 
368
              'redefine',
 
369
              'threads',
 
370
              'queries',
 
371
              'duration',
 
372
              'help',
 
373
              'debug',
 
374
              'rpl_mode',
 
375
              'validators',
 
376
              'reporters',
 
377
              'reporters',
 
378
              'transformers',
 
379
              'seed',
 
380
              'mask',
 
381
              'mask-level',
 
382
              'rows',
 
383
              'varchar-length',
 
384
              'xml-output',
 
385
              'views',
 
386
              'start-dirty',
 
387
              'filter',
 
388
              'notnull',
 
389
              'short_column_names',
 
390
              'strict_fields',
 
391
              'freeze_time',
 
392
              'valgrind',
 
393
              'valgrind-xml',
 
394
              'testname',
 
395
              'sqltrace',
 
396
              'querytimeout',
 
397
              'report-xml-tt',
 
398
              'report-xml-tt-type',
 
399
              'report-xml-tt-dest',
 
400
              'logfile',
 
401
              'logconf',
 
402
              'report-tt-logdir']
 
403
    );
 
404
 
 
405
my @gentest_options;
 
406
 
 
407
## For backward compatability
 
408
if ($#validators == 0 and $validators[0] =~ m/,/) {
 
409
    @validators = split(/,/,$validators[0]);
 
410
}
 
411
 
 
412
## For backward compatability
 
413
if ($#reporters == 0 and $reporters[0] =~ m/,/) {
 
414
    @reporters = split(/,/,$reporters[0]);
 
415
}
 
416
 
 
417
## For backward compatability
 
418
if ($#transformers == 0 and $transformers[0] =~ m/,/) {
 
419
    @transformers = split(/,/,$transformers[0]);
 
420
}
 
421
 
 
422
$gentestProps->property('generator','FromGrammar') if not defined $gentestProps->property('generator');
 
423
 
 
424
$gentestProps->property('start-dirty',1) if defined $start_dirty;
 
425
$gentestProps->gendata($gendata);
 
426
$gentestProps->engine($engine) if defined $engine;
 
427
$gentestProps->rpl_mode($rpl_mode) if defined $rpl_mode;
 
428
$gentestProps->validators(\@validators) if @validators;
 
429
$gentestProps->reporters(\@reporters) if @reporters;
 
430
$gentestProps->transformers(\@transformers) if @transformers;
 
431
$gentestProps->threads($threads) if defined $threads;
 
432
$gentestProps->queries($queries) if defined $queries;
 
433
$gentestProps->duration($duration) if defined $duration;
 
434
$gentestProps->dsn(\@dsns) if @dsns;
 
435
$gentestProps->grammar($grammar_file);
 
436
$gentestProps->property('skip-recursive-rules', $skip_recursive_rules);
 
437
$gentestProps->redefine($redefine_file) if defined $redefine_file;
 
438
$gentestProps->seed($seed) if defined $seed;
 
439
$gentestProps->mask($mask) if (defined $mask) && (not defined $no_mask);
 
440
$gentestProps->property('mask-level',$mask_level) if defined $mask_level;
 
441
$gentestProps->rows($rows) if defined $rows;
 
442
if (defined $views) {
 
443
        if ($views eq '1') {
 
444
                $gentestProps->property('views', 'UNDEFINED');
 
445
        } else {
 
446
                $gentestProps->property('views', $views);
 
447
        }
 
448
}
 
449
$gentestProps->property('varchar-length',$varchar_len) if defined $varchar_len;
 
450
$gentestProps->property('xml-output',$xml_output) if defined $xml_output;
 
451
$gentestProps->debug(1) if defined $debug;
 
452
$gentestProps->filter($filter) if defined $filter;
 
453
$gentestProps->notnull($notnull) if defined $notnull;
 
454
$gentestProps->short_coulmn_names($short_column_names) if defined $short_column_names;
 
455
$gentestProps->strict_fields($strict_fields) if defined $strict_fields;
 
456
$gentestProps->freeze_time($freeze_time) if defined $freeze_time;
 
457
$gentestProps->valgrind(1) if $valgrind;
 
458
$gentestProps->sqltrace($sqltrace) if $sqltrace;
 
459
$gentestProps->querytimeout($querytimeout) if defined $querytimeout;
 
460
$gentestProps->testname($testname) if $testname;
 
461
$gentestProps->logfile($logfile) if defined $logfile;
 
462
$gentestProps->logconf($logconf) if defined $logconf;
 
463
$gentestProps->property('report-tt-logdir',$report_tt_logdir) if defined $report_tt_logdir;
 
464
$gentestProps->property('report-xml-tt', 1) if defined $report_xml_tt;
 
465
$gentestProps->property('report-xml-tt-type', $report_xml_tt_type) if defined $report_xml_tt_type;
 
466
$gentestProps->property('report-xml-tt-dest', $report_xml_tt_dest) if defined $report_xml_tt_dest;
 
467
 
 
468
# Push the number of "worker" threads into the environment.
 
469
# lib/GenTest/Generator/FromGrammar.pm will generate a corresponding grammar element.
 
470
$ENV{RQG_THREADS}= $threads;
 
471
 
 
472
my $gentest = GenTest::App::GenTest->new(config => $gentestProps);
 
473
my $gentest_result = $gentest->run();
 
474
say("GenTest exited with exit status ".status2text($gentest_result)." ($gentest_result)");
 
475
exit_test($gentest_result) if $gentest_result > 0;
 
476
 
 
477
#
 
478
# Compare master and slave, or two masters
 
479
#
 
480
 
 
481
if ($rpl_mode || (defined $basedirs[1])) {
 
482
    if ($rpl_mode ne '') {
 
483
        $rplsrv->waitForSlaveSync;
 
484
    }
 
485
 
 
486
    my @dump_files;
 
487
    
 
488
        foreach my $i (0..$#server) {
 
489
                $dump_files[$i] = tmpdir()."server_".$$."_".$i.".dump";
 
490
        
 
491
                my $dump_result = $server[$i]->dumpdb($database,$dump_files[$i]);
 
492
                exit_test($dump_result >> 8) if $dump_result > 0;
 
493
        }
 
494
    
 
495
        say("Comparing SQL dumps...");
 
496
        my $diff_result = system("diff -u $dump_files[0] $dump_files[1]");
 
497
        $diff_result = $diff_result >> 8;
 
498
    
 
499
        if ($diff_result == 0) {
 
500
                say("No differences were found between servers.");
 
501
        }
 
502
    
 
503
        foreach my $dump_file (@dump_files) {
 
504
                unlink($dump_file);
 
505
        }
 
506
    
 
507
        exit_test($diff_result);
 
508
}
 
509
 
 
510
 
 
511
stopServers();
 
512
 
 
513
sub stopServers {
 
514
    if ($rpl_mode ne '') {
 
515
        $rplsrv->stopServer();
 
516
    } else {
 
517
        foreach my $srv (@server) {
 
518
            if ($srv) {
 
519
                $srv->stopServer;
 
520
            }
 
521
        }
 
522
    }
 
523
}
 
524
 
 
525
 
 
526
sub help {
 
527
    
 
528
        print <<EOF
 
529
Copyright (c) 2010,2011 Oracle and/or its affiliates. All rights reserved. Use is subject to license terms.
 
530
 
 
531
$0 - Run a complete random query generation test, including server start with replication and master/slave verification
 
532
    
 
533
    Options related to one standalone MySQL server:
 
534
 
 
535
    --basedir   : Specifies the base directory of the stand-alone MySQL installation;
 
536
    --mysqld    : Options passed to the MySQL server
 
537
    --vardir    : Optional. (default \$basedir/mysql-test/var);
 
538
 
 
539
    Options related to two MySQL servers
 
540
 
 
541
    --basedir1  : Specifies the base directory of the first MySQL installation;
 
542
    --basedir2  : Specifies the base directory of the second MySQL installation;
 
543
    --mysqld1   : Options passed to the first MySQL server
 
544
    --mysqld2   : Options passed to the second MySQL server
 
545
    --vardir1   : Optional. (default \$basedir1/mysql-test/var);
 
546
    --vardir2   : Optional. (default \$basedir2/mysql-test/var);
 
547
 
 
548
    General options
 
549
 
 
550
    --grammar   : Grammar file to use when generating queries (REQUIRED);
 
551
    --redefine  : Grammar file to redefine and/or add rules to the given grammar
 
552
    --rpl_mode  : Replication type to use (statement|row|mixed) (default: no replication);
 
553
    --vardir1   : Optional.
 
554
    --vardir2   : Optional. 
 
555
    --engine    : Table engine to use when creating tables with gendata (default no ENGINE in CREATE TABLE);
 
556
    --threads   : Number of threads to spawn (default $default_threads);
 
557
    --queries   : Number of queries to execute per thread (default $default_queries);
 
558
    --duration  : Duration of the test in seconds (default $default_duration seconds);
 
559
    --validator : The validators to use
 
560
    --reporter  : The reporters to use
 
561
    --transformer: The transformers to use (turns on --validator=transformer). Accepts comma separated list
 
562
    --querytimeout: The timeout to use for the QueryTimeout reporter 
 
563
    --gendata   : Generate data option. Passed to gentest.pl
 
564
    --seed      : PRNG seed. Passed to gentest.pl
 
565
    --mask      : Grammar mask. Passed to gentest.pl
 
566
    --mask-level: Grammar mask level. Passed to gentest.pl
 
567
    --notnull   : Generate all fields with NOT NULL
 
568
    --rows      : No of rows. Passed to gentest.pl
 
569
    --sqltrace  : Print all generated SQL statements. 
 
570
                  Optional: Specify --sqltrace=MarkErrors to mark invalid statements.
 
571
    --varchar-length: length of strings. passed to gentest.pl
 
572
    --xml-outputs: Passed to gentest.pl
 
573
    --views     : Generate views. Optionally specify view type (algorithm) as option value. Passed to gentest.pl
 
574
    --valgrind  : Passed to gentest.pl
 
575
    --filter    : Passed to gentest.pl
 
576
    --mem       : Passed to mtr
 
577
    --mtr-build-thread:  Value used for MTR_BUILD_THREAD when servers are started and accessed
 
578
    --debug     : Debug mode
 
579
    --short_column_names: use short column names in gendata (c<number>)
 
580
    --strict_fields: Disable all AI applied to columns defined in \$fields in the gendata file. Allows for very specific column definitions
 
581
    --freeze_time: Freeze time for each query so that CURRENT_TIMESTAMP gives the same result for all transformers/validators
 
582
    --help      : This help message
 
583
 
 
584
    If you specify --basedir1 and --basedir2 or --vardir1 and --vardir2, two servers will be started and the results from the queries
 
585
    will be compared between them.
 
586
EOF
 
587
        ;
 
588
        print "$0 arguments were: ".join(' ', @ARGV_saved)."\n";
 
589
        exit_test(STATUS_UNKNOWN_ERROR);
 
590
}
 
591
 
 
592
sub exit_test {
 
593
        my $status = shift;
 
594
    stopServers();
 
595
        say("[$$] $0 will exit with exit status ".status2text($status). " ($status)");
 
596
        safe_exit($status);
 
597
}