~drizzle-trunk/drizzle/development

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
.. _test-run-label:

**********************************
test-run.pl - Drizzle testing tool
**********************************

Synopsis
========

**./test-run** [ *OPTIONS* ] [ TESTCASE ]

Description
===========

:program:`test-run.pl` (aka test-run, dtr, mtr) is used to execute tests
from the Drizzle test suite.  These tests are included with Drizzle 
distributions and provide a way for users to verify that the system will
operate according to expectations.

The tests use a diff-based paradigm, meaning that the test runner executes
a test and then compares the results received with pre-recorded expected 
results.  In the event of a test failure, the program will provide output
highlighting the differences found between expected and actual results; this
can be useful for troubleshooting and in bug reports.

While most users are concerned with ensuring general functionality, the 
program also allows a user to quickly spin up a server for ad-hoc testing
and to run the test-suite against an already running Drizzle server.

Running tests
=========================

There are several different ways to run tests using :program:`test-run.pl`.

It should be noted that unless :option:`--force` is used, the program will
stop execution upon encountering the first failing test. 
:option:`--force` is recommended if you are running several tests - it will
allow you to view all successes and failures in one run.

Running individual tests
------------------------
If one only wants to run a few, specific tests, they may do so this way::

    ./test-run [OPTIONS] test1 [test2 ... testN]

Running all tests within a suite
--------------------------------
Many of the tests supplied with Drizzle are organized into suites.  

The tests within drizzle/tests/t are considered the 'main' suite.  
Other suites are located in either drizzle/tests/suite or within the various
directories in drizzle/plugin.  Tests for a specific plugin should live in 
the plugin's directory - drizzle/plugin/example_plugin/tests

To run the tests in a specific suite::

    ./test-run [OPTIONS] --suite=SUITENAME

Running specific tests within a suite
--------------------------------------
To run a specific set of tests within a suite::

    ./test-run [OPTIONS] --suite=SUITENAME TEST1 [TEST2..TESTN]

Calling tests using <suitename>.<testname> currently does not work.
One must specify the test suite via the :option:`--suite` option.


Running all available tests
---------------------------
Currently, the quickest way to execute all tests in all suites is
to use 'make test' from the drizzle root.

Otherwise, one should simply name all suites::

    ./test-run [OPTIONS] --suite=SUITE1, SUITE2, ...SUITEN

Interpreting test results
=========================
The output of the test runner is quite simple.  Every test should pass.
In the event of a test failure, please take the time to file a bug here:
*https://bugs.launchpad.net/drizzle*

During a run, the program will provide the user with:
  * test name (suite + name)
  * test status (pass/fail/skipped)
  * time spent executing each test

At the end of a run, the program will provide the user with a listing of:
  * how many tests were run
  * how many tests failed
  * percentage of passing tests
  * a listing of failing tests
  * total time spent executing the tests

Example output::

    <snip>
    main.snowman                                                 [ pass ]       9
    main.statement_boundaries                                    [ pass ]      17
    main.status                                                  [ pass ]      12
    main.strict                                                  [ pass ]      50
    main.subselect                                               [ pass ]    6778
    main.subselect2                                              [ pass ]      51
    main.subselect3                                              [ fail ]
    drizzletest: At line 621: query 'select a, (select max(b) from t1) into outfile
    <snip>
    --------------------------------------------------------------------------------
    Stopping All Servers
    Failed 10/231 tests, 95.67% were successful.

    The log files in var/log may give you some hint
    of what went wrong.
    If you want to report this error, go to:
	http://bugs.launchpad.net/drizzle
    The servers were restarted 16 times
    Spent 64.364 of 115 seconds executing testcases

    drizzle-test-run in default mode: *** Failing the test(s): main.exp1 
    main.func_str main.loaddata main.null main.outfile main.subselect3 
    main.warnings jp.like_utf8 jp.select_utf8 jp.where_utf8
    
Additional uses
===============
Starting a server for manual testing
------------------------------------

:program:`test-run.pl` allows a user to get a Drizzle server up and running
quickly.  This can be useful for fast ad-hoc testing.

To do so call::

    ./test-run --start-and-exit [*OPTIONS*]

This will start a Drizzle server that you can connect to and query

Starting a server against a pre-populated DATADIR
--------------------------------------------------

Using :option:`--start-dirty` prevents :program:`test-run.pl` from attempting
to initialize (clean) the datadir.  This can be useful if you want to use
an already-populated datadir for testing.

Program architecture
====================

:program:`test-run.pl` uses a simple diff-based mechanism for testing.  
It will execute the statements contained in a test and compare the results 
to pre-recorded expected results.  In the event of a test failure, you
will be presented with a diff::

    main.exp1                                                    [ fail ]
    --- drizzle/tests/r/exp1.result	2010-11-02 02:10:25.107013998 +0300
    +++ drizzle/tests/r/exp1.reject	2010-11-02 02:10:32.017013999 +0300
    @@ -5,4 +5,5 @@
    a
    1
    2
    +3
    DROP TABLE t1;

A test case consists of a .test and a .result file.  The .test file includes
the various statements to be executed for a test.  The .result file lists
the expected results for a given test file.  These files live in tests/t 
and tests/r, respectively.  This structure is the same for all test suites.

test-run.pl options
===================

The :program:`test-run.pl` tool has several available options:

./test-run [ OPTIONS ] [ TESTCASE ]

Options to control what engine/variation to run
-----------------------------------------------

.. program:: test-run

.. option:: --compress
   
   Use the compressed protocol between client and server

.. option:: --bench
   
   Run the benchmark suite

.. option:: --small-bench

   Run the benchmarks with --small-tests --small-tables

Options to control directories to use
-------------------------------------

.. program:: test-run

.. option:: --benchdir=DIR          

   The directory where the benchmark suite is stored
   (default: ../../mysql-bench)
  
.. option:: --tmpdir=DIR

   The directory where temporary files are stored
   (default: ./var/tmp).

.. option:: --vardir=DIR  
         
   The directory where files generated from the test run
   is stored (default: ./var). Specifying a ramdisk or
   tmpfs will speed up tests.

.. option:: --mem 
   
   Run testsuite in "memory" using tmpfs or ramdisk
   Attempts to find a suitable location
   using a builtin list of standard locations
   for tmpfs (/dev/shm)
   The option can also be set using environment
   variable :envvar:`DTR_MEM` =[DIR]

Options to control what test suites or cases to run
---------------------------------------------------

.. program:: test-run

.. option:: --force                 
   
   Continue to run the suite after failure

.. option:: --do-test=PREFIX or REGEX
                        
   Run test cases which name are prefixed with PREFIX
   or fulfills REGEX

.. option:: --skip-test=PREFIX or REGEX
                        
   Skip test cases which name are prefixed with PREFIX
   or fulfills REGEX

.. option:: --start-from=PREFIX     

   Run test cases starting from test prefixed with PREFIX
   suite[s]=NAME1,..,NAMEN Collect tests in suites from the comma separated
   list of suite names.
   The default is: "main,jp"

.. option:: --skip-rpl              

   Skip the replication test cases.
   combination="ARG1 .. ARG2" Specify a set of "drizzled" arguments for one
   combination.

.. option:: --skip-combination      

   Skip any combination options and combinations files

.. option:: --repeat-test=n         
  
   How many times to repeat each test (default: 1)

Options that specify ports
--------------------------

.. program:: test-run

.. option:: --master_port=PORT      

   Specify the port number used by the first master

.. option:: --slave_port=PORT      

   Specify the port number used by the first slave

.. option:: --dtr-build-thread=#    

   Specify unique collection of ports. Can also be set by
   setting the environment variable :envvar:`DTR_BUILD_THREAD`.

Options for test case authoring
-------------------------------

.. program:: test-run

.. option:: --record TESTNAME       

   (Re)genereate the result file for TESTNAME

.. option:: --check-testcases       

   Check testcases for sideeffects

.. option:: --mark-progress         

   Log line number and elapsed time to <testname>.progress

Options that pass on options
----------------------------

.. program:: test-run

.. option:: --drizzled=ARGS           
 
   Specify additional arguments to "drizzled"

Options to run test on running server
-------------------------------------

.. program:: test-run

.. option:: --extern                

   Use running server for tests

.. option:: --user=USER             

   User for connection to extern server

Options for debugging the product
---------------------------------

.. program:: test-run

.. option:: --client-ddd            

   Start drizzletest client in ddd

.. option:: --client-debugger=NAME  

   Start drizzletest in the selected debugger

.. option:: --client-gdb            

   Start drizzletest client in gdb

.. option:: --ddd                   

   Start drizzled in ddd

.. option:: --debug                 

   Dump trace output for all servers and client programs

.. option:: --debugger=NAME         

   Start drizzled in the selected debugger

.. option:: --gdb                   

   Start the drizzled(s) in gdb

.. option:: --manual-debug          

   Let user manually start drizzled in debugger, before running test(s)

.. option:: --manual-gdb            

   Let user manually start drizzled in gdb, before running test(s)

.. option:: --manual-ddd            

   Let user manually start drizzled in ddd, before running test(s)

.. option:: --master-binary=PATH    
   
   Specify the master "drizzled" to use

.. option:: --slave-binary=PATH     

   Specify the slave "drizzled" to use

.. option:: --strace-client         

   Create strace output for drizzletest client

.. option:: --max-save-core         

   Limit the number of core files saved (to avoid filling up disks for 
   heavily crashing server). Defaults to 5, set to 0 for no limit.

Options for coverage, profiling etc
-----------------------------------

.. todo::
   
   .. option:: --gcov                  

.. program:: test-run

.. option:: --gprof                 

   See online documentation on how to use it.

.. option:: --valgrind              

   Run the *drizzletest* and *drizzled* executables using valgrind with 
   default options

.. option:: --valgrind-all          
   
   Synonym for :option:`--valgrind`

.. option:: --valgrind-drizzleslap  

   Run "drizzleslap" with valgrind.

.. option:: --valgrind-drizzletest  

   Run the *drizzletest* and *drizzle_client_test* executable with valgrind

.. option:: --valgrind-drizzled       

   Run the "drizzled" executable with valgrind

.. option:: --valgrind-options=ARGS 

   Deprecated, use :option:`--valgrind-option`

.. option:: --valgrind-option=ARGS  

   Option to give valgrind, replaces default option(s), 
   can be specified more then once

.. option:: --valgrind-path=[EXE]   

   Path to the valgrind executable

.. option:: --callgrind             

   Instruct valgrind to use callgrind

.. option:: --massif                

   Instruct valgrind to use massif

Misc options
------------

.. program:: test-run

.. option:: --comment=STR           

   Write STR to the output

.. option:: --notimer               

   Don't show test case execution time

.. option:: --script-debug          

   Debug this script itself

.. option:: --verbose               

   More verbose output

.. option:: --start-and-exit        

   Only initialize and start the servers, using the
   startup settings for the specified test case (if any)

.. option:: --start-dirty           

   Only start the servers (without initialization) for
   the specified test case (if any)

.. option:: --fast                  

   Don't try to clean up from earlier runs

.. option:: --reorder               

   Reorder tests to get fewer server restarts

.. option:: --help                  

   Get this help text

.. option:: --testcase-timeout=MINUTES 

   Max test case run time (default 15)

.. option:: --suite-timeout=MINUTES 

   Max test suite run time (default 180)

.. option:: --warnings | log-warnings 

   Pass --log-warnings to drizzled

.. option:: --sleep=SECONDS         

   Passed to drizzletest, will be used as fixed sleep time