~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/randgen/gentest.pl

Merged Stewart's kick-ass randgen branch - randgen is in the tree

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
 
 
3
# Copyright (C) 2008-2010 Sun Microsystems, Inc. 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
use lib 'lib';
 
21
use lib "$ENV{RQG_HOME}/lib";
 
22
use strict;
 
23
use Carp;
 
24
use Getopt::Long;
 
25
 
 
26
use GenTest;
 
27
use GenTest::Properties;
 
28
use GenTest::Constants;
 
29
use GenTest::App::GenTest;
 
30
 
 
31
my $DEFAULT_THREADS = 10;
 
32
my $DEFAULT_QUERIES = 1000;
 
33
my $DEFAULT_DURATION = 3600;
 
34
my $DEFAULT_DSN = 'dbi:mysql:host=127.0.0.1:port=9306:user=root:database=test';
 
35
 
 
36
my @ARGV_saved = @ARGV;
 
37
 
 
38
my $options = {};
 
39
my $opt_result = GetOptions($options,
 
40
                            'config=s',
 
41
                            'dsn=s@',
 
42
                            'dsn1=s',
 
43
                            'dsn2=s',
 
44
                            'dsn3=s',
 
45
                            'engine=s',
 
46
                            'generator=s',
 
47
                            'gendata:s',
 
48
                            'grammar=s',
 
49
                            'redefine=s',
 
50
                            'testname=s',
 
51
                            'threads=i',
 
52
                            'queries=s',
 
53
                            'duration=s',
 
54
                            'help',
 
55
                            'debug',
 
56
                            'rpl_mode=s',
 
57
                            'validators:s@',
 
58
                            'reporters:s@',
 
59
                            'transformers:s@',
 
60
                            'report-xml-tt',
 
61
                            'report-xml-tt-type=s',
 
62
                            'report-xml-tt-dest=s',
 
63
                            'seed=s',
 
64
                            'mask=i',
 
65
                            'mask-level=i',
 
66
                            'rows=i',
 
67
                            'varchar-length=i',
 
68
                            'xml-output=s',
 
69
                            'sqltrace',
 
70
                            'no-err-filter',
 
71
                            'views',
 
72
                            'start-dirty',
 
73
                            'filter=s',
 
74
                            'valgrind',
 
75
                            'valgrind-xml',
 
76
                            'notnull',
 
77
                            'debug',
 
78
                            'querytimeout=i');
 
79
backwardCompatability($options);
 
80
my $config = GenTest::Properties->new(
 
81
    options => $options,
 
82
    defaults => {dsn=>[$DEFAULT_DSN],
 
83
                 seed => 1,
 
84
                 queries => $DEFAULT_QUERIES,
 
85
                 duration => $DEFAULT_DURATION,
 
86
                 threads => $DEFAULT_THREADS},
 
87
    legal => ['dsn',
 
88
              'engine',
 
89
              'gendata',
 
90
              'generator',
 
91
              'grammar',
 
92
              'redefine',
 
93
              'testname',
 
94
              'threads',
 
95
              'queries',
 
96
              'duration',
 
97
              'help',
 
98
              'debug',
 
99
              'rpl_mode',
 
100
              'validators',
 
101
              'reporters',
 
102
              'transformers',
 
103
              'report-xml-tt',
 
104
              'report-xml-tt-type',
 
105
              'report-xml-tt-dest',
 
106
              'seed',
 
107
              'mask',
 
108
              'mask-level',
 
109
              'rows',
 
110
              'varchar-length',
 
111
              'xml-output',
 
112
              'views',
 
113
              'sqltrace',
 
114
              'no-err-filter',
 
115
              'start-dirty',
 
116
              'filter',
 
117
              'valgrind',
 
118
              'valgrind-xml',
 
119
              'sqltrace',
 
120
              'notnull',
 
121
              'querytimeout'],
 
122
    help => \&help);
 
123
 
 
124
help() if !$opt_result || $config->help;
 
125
 
 
126
say("Starting: $0 ".join(" ", @ARGV_saved));
 
127
 
 
128
$ENV{RQG_DEBUG} = 1 if defined $config->debug;
 
129
my $gentest = GenTest::App::GenTest->new(config => $config);
 
130
 
 
131
my $status = $gentest->run();
 
132
 
 
133
safe_exit($status);
 
134
 
 
135
sub help {
 
136
 
 
137
    print <<EOF
 
138
$0 - Testing via random query generation. Options:
 
139
 
 
140
        --dsn      : DBI resources to connect to (default $DEFAULT_DSN).
 
141
                      Supported databases are MySQL, Drizzle, PostgreSQL, JavaDB
 
142
                      first --dsn must be to MySQL or Drizzle
 
143
        --gendata   : Execute gendata-old.pl in order to populate tables with simple data (default NO)
 
144
        --gendata=s : Execute gendata.pl in order to populate tables with data 
 
145
                      using the argument as specification file to gendata.pl
 
146
        --engine    : Table engine to use when creating tables with gendata (default: no ENGINE for CREATE TABLE)
 
147
        --threads   : Number of threads to spawn (default $DEFAULT_THREADS)
 
148
        --queries   : Numer of queries to execute per thread (default $DEFAULT_QUERIES);
 
149
        --duration  : Duration of the test in seconds (default $DEFAULT_DURATION seconds);
 
150
        --grammar   : Grammar file to use for generating the queries (REQUIRED);
 
151
        --redefine  : Grammar file to redefine and/or add rules to the given grammar
 
152
        --seed      : PRNG seed (default 1). If --seed=time, the current time will be used.
 
153
        --rpl_mode  : Replication mode
 
154
        --validator : Validator classes to be used. Defaults
 
155
                           ErrorMessageCorruption if one or two MySQL dsns
 
156
                           ResultsetComparator3 if 3 dsns
 
157
                           ResultsetComparartor if 2 dsns
 
158
        --reporter  : ErrorLog, Backtrace if one or two MySQL dsns
 
159
        --mask      : A seed to a random mask used to mask (reduce) the grammar.
 
160
        --mask-level: How many levels deep the mask is applied (default 1)
 
161
        --rows      : Number of rows to generate for each table in gendata.pl, unless specified in the ZZ file
 
162
        --varchar-length: maximum length of strings (deault 1) in gendata.pl
 
163
        --views     : Pass --views to gendata-old.pl or gendata.pl
 
164
        --filter    : ......
 
165
        --sqltrace  : Print all generated SQL statements.
 
166
        --no-err-filter:  Do not suppress error messages.  Output all error messages encountered.
 
167
        --start-dirty: Do not generate data (use existing database(s))
 
168
        --xml-output: Name of a file to which an XML report will be written if this option is set.
 
169
        --report-xml-tt: Report test results in XML-format to the Test Tool (TT) reporting framework.
 
170
        --report-xml-tt-type: Type of TT XML transport to use (e.g. scp)
 
171
        --report-xml-tt-dest: Destination of TT XML report (e.g. user\@host:/path/to/location (for type scp))
 
172
        --testname  : Name of test, used for reporting purposes.
 
173
        --valgrind  : ......
 
174
        --filter    : ......
 
175
        --help      : This help message
 
176
        --debug     : Provide debug output
 
177
EOF
 
178
        ;
 
179
        safe_exit(1);
 
180
}
 
181
 
 
182
sub backwardCompatability {
 
183
    my ($options) = @_;
 
184
    if (defined $options->{dsn}) {
 
185
        croak ("Do not combine --dsn and --dsnX") 
 
186
            if defined $options->{dsn1} or
 
187
            defined $options->{dsn2} or
 
188
            defined $options->{dsn3};
 
189
        
 
190
    } else {
 
191
        my @dsns;
 
192
        foreach my $i (1..3) {
 
193
            if (defined $options->{'dsn'.$i}) {
 
194
                push @dsns, $options->{'dsn'.$i};
 
195
                delete $options->{'dsn'.$i};
 
196
            }
 
197
        }
 
198
        $options->{dsn} = \@dsns;
 
199
    }
 
200
        
 
201
    if (grep (/,/,@{$options->{reporters}})) {
 
202
        my $newreporters = [];
 
203
        map {push(@$newreporters,split(/,/,$_))} @{$options->{reporters}};
 
204
        $options->{reporters}=$newreporters ;
 
205
    }
 
206
 
 
207
    if (grep (/,/,@{$options->{transformers}})) {
 
208
        my $newtransformers = [];
 
209
        map {push(@$newtransformers,split(/,/,$_))} @{$options->{transformers}};
 
210
        $options->{transformers}=$newtransformers ;
 
211
    }
 
212
 
 
213
    if (grep (/,/,@{$options->{validators}})) {
 
214
        my $newvalidators = [];
 
215
        map {push(@$newvalidators,split(/,/,$_))} @{$options->{validators}};
 
216
        $options->{validators}=$newvalidators ;
 
217
    }
 
218
 
 
219
    if (not defined $options->{generator}) {
 
220
        $options->{generator} = 'FromGrammar';
 
221
    }
 
222
}
 
223