xref: /sqlite-3.40.0/test/permutations.test (revision b39187ae)
1# 2008 June 21
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11#
12# $Id: permutations.test,v 1.41 2008/12/30 13:21:51 danielk1977 Exp $
13
14set testdir [file dirname $argv0]
15source $testdir/tester.tcl
16
17# Argument processing.
18#
19#puts "PERM-DEBUG: argv=$argv"
20namespace eval ::perm {
21  variable testmode [lindex $::argv 0]
22  variable testfile [lindex $::argv 1]
23}
24set argv [lrange $argv 2 end]
25#puts "PERM-DEBUG: testmode=$::perm::testmode tstfile=$::perm::testfile"
26
27set ::permutations_presql ""
28set ::permutations_test_prefix ""
29
30if {$::perm::testmode eq "veryquick"} {
31  set ::perm::testmode [list persistent_journal no_journal]
32  set ISQUICK 1
33}
34if {$::perm::testmode eq "quick"} {
35  set ::perm::testmode [list persistent_journal no_journal autovacuum_ioerr]
36  set ISQUICK 1
37}
38if {$::perm::testmode eq "all" || $::perm::testmode eq ""} {
39  set ::perm::testmode {
40    memsubsys1 memsubsys2 singlethread multithread onefile utf16 exclusive
41    persistent_journal persistent_journal_error no_journal no_journal_error
42    autovacuum_ioerr no_mutex_try fullmutex journaltest
43  }
44}
45if {$::perm::testmode eq "targets"} {
46  puts ""
47  puts -nonewline "veryquick            "
48  puts "Same as persistent_journal and no_journal"
49  puts -nonewline "quick                "
50  puts "Same as persistent_journal, no_journal and autovacuum_ioerr"
51  puts -nonewline "all                  "
52  puts "Everything except autovacuum_crash"
53}
54#puts "PERM-DEBUG: testmode=$::perm::testmode"
55
56set EXCLUDE {
57  all.test                  in2.test                  onefile.test
58  async2.test               incrvacuum_ioerr.test     permutations.test
59  async.test                jrnlmode2.test            quick.test
60  autovacuum_crash.test     jrnlmode3.test            shared_err.test
61  autovacuum_ioerr.test     jrnlmode4.test            soak.test
62  btree8.test               loadext.test              speed1p.test
63  corrupt.test              malloc2.test              speed1.test
64  crash2.test               malloc3.test              speed2.test
65  crash3.test               malloc4.test              speed3.test
66  crash4.test               mallocAll.test            speed4p.test
67  crash6.test               malloc.test               speed4.test
68  crash7.test               memleak.test              sqllimits1.test
69  crash.test                memsubsys1.test           thread001.test
70  exclusive3.test           memsubsys2.test           thread002.test
71  fts3.test                 misc7.test                utf16.test
72  fuzz_malloc.test          misuse.test               veryquick.test
73  fuzz.test                 mutex2.test               vtab_err.test
74  lookaside.test            fuzz3.test                savepoint4.test
75}
76set ALLTESTS [list]
77foreach filename [glob $testdir/*.test] {
78  set filename [file tail $filename]
79  if {[lsearch $EXCLUDE $filename] < 0} { lappend ALLTESTS $filename }
80}
81set ALLTESTS [lsort $ALLTESTS]
82
83rename finish_test really_finish_test2
84proc finish_test {} {}
85
86rename do_test really_do_test
87
88proc do_test {name args} {
89  eval really_do_test [list "perm-$::permutations_test_prefix.$name"] $args
90}
91
92# Overload the [sqlite3] command
93rename sqlite3 really_sqlite3
94proc sqlite3 {args} {
95  set r [eval really_sqlite3 $args]
96  if { [llength $args] == 2 && $::permutations_presql ne "" } {
97    [lindex $args 0] eval $::permutations_presql
98  }
99  set r
100}
101
102# run_tests OPTIONS
103#
104# where available options are:
105#
106#       -initialize  SCRIPT                 (default "")
107#       -shutdown    SCRIPT                 (default "")
108#       -include     LIST-OF-FILES          (default $::ALLTESTS)
109#       -exclude     LIST-OF-FILES          (default "")
110#       -presql      SQL                    (default "")
111#       -description TITLE                  (default "")
112#
113proc run_tests {name args} {
114  set ::permutations_test_prefix $name
115  set options(-shutdown) ""
116  set options(-initialize) ""
117  set options(-exclude) ""
118  set options(-include) $::ALLTESTS
119  set options(-presql) ""
120  set options(-description) "no description supplied (fixme)"
121  array set options $args
122  #puts "PERM-DEBUG: name=$name testfile=$::perm::testfile"
123  #puts "PERM-DEBUG: [array get options]"
124
125  if {$::perm::testmode eq "targets"} {
126    puts [format "% -20s %s" $name [string trim $options(-description)]]
127    return
128  }
129  if {$::perm::testmode ne "" && [lsearch $::perm::testmode $name]<0} {
130    puts "skipping permutation test $name..."
131    return
132  }
133
134  uplevel $options(-initialize)
135  set ::permutations_presql $options(-presql)
136
137  foreach file [lsort $options(-include)] {
138    if {[lsearch $options(-exclude) $file] < 0 &&
139       ( $::perm::testfile eq "" ||
140         $::perm::testfile eq $file ||
141        "$::perm::testfile.test" eq $file )
142    } {
143      set ::perm::shared_cache_setting [shared_cache_setting]
144      uplevel source $::testdir/$file
145      if {$::perm::shared_cache_setting ne [shared_cache_setting]} {
146        error "File $::testdir/$file changed the shared cache setting from $::perm::shared_cache_setting to [shared_cache_setting]"
147      }
148    } else {
149      # puts "skipping file $file"
150    }
151  }
152
153  uplevel $options(-shutdown)
154  set ::permutations_test_prefix ""
155}
156
157proc shared_cache_setting {} {
158  set ret 0
159  catch {
160    set ret [sqlite3_enable_shared_cache]
161  }
162  return $ret
163}
164
165#############################################################################
166# Start of tests
167
168# Run some tests using pre-allocated page and scratch blocks.
169#
170run_tests "memsubsys1" -description {
171  Tests using pre-allocated page and scratch blocks
172} -exclude {
173  ioerr5.test
174  malloc5.test
175} -initialize {
176  catch {db close}
177  sqlite3_shutdown
178  sqlite3_config_pagecache 4096 24
179  sqlite3_config_scratch 25000 1
180  sqlite3_initialize
181} -shutdown {
182  catch {db close}
183  sqlite3_shutdown
184  sqlite3_config_pagecache 0 0
185  sqlite3_config_scratch 0 0
186  sqlite3_initialize
187}
188
189# Run some tests using pre-allocated page and scratch blocks. This time
190# the allocations are too small to use in most cases.
191#
192# Both ioerr5.test and malloc5.test are excluded because they test the
193# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
194# This functionality is disabled if a pre-allocated page block is provided.
195#
196run_tests "memsubsys2" -description {
197  Tests using small pre-allocated page and scratch blocks
198} -exclude {
199  ioerr5.test
200  malloc5.test
201} -initialize {
202  catch {db close}
203  sqlite3_shutdown
204  sqlite3_config_pagecache 512 5
205  sqlite3_config_scratch 1000 1
206  sqlite3_initialize
207} -shutdown {
208  catch {db close}
209  sqlite3_shutdown
210  sqlite3_config_pagecache 0 0
211  sqlite3_config_scratch 0 0
212  sqlite3_initialize
213}
214
215# Run all tests with the lookaside allocator disabled.
216#
217run_tests "nolookaside" -description {
218  OOM tests with lookaside disabled
219} -initialize {
220  catch {db close}
221  sqlite3_shutdown
222  sqlite3_config_lookaside 0 0
223  sqlite3_initialize
224} -shutdown {
225  catch {db close}
226  sqlite3_shutdown
227  sqlite3_config_lookaside 100 500
228  sqlite3_initialize
229}
230
231# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
232#
233run_tests "singlethread" -description {
234  Tests run in SQLITE_CONFIG_SINGLETHREAD mode
235} -initialize {
236  do_test mutex2-singlethread.0 {
237    catch {db close}
238    sqlite3_shutdown
239    sqlite3_config singlethread
240  } SQLITE_OK
241} -include {
242  delete.test   delete2.test  insert.test  rollback.test  select1.test
243  select2.test  trans.test    update.test  vacuum.test    types.test
244  types2.test   types3.test
245} -shutdown {
246  do_test mutex2-X {
247    catch {db close}
248    sqlite3_shutdown
249    sqlite3_config serialized
250  } SQLITE_OK
251}
252
253run_tests "nomutex" -description {
254  Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
255} -initialize {
256  rename sqlite3 sqlite3_nomutex
257  proc sqlite3 {args} {
258    if {[string range [lindex $args 0] 0 0] ne "-"} {
259      lappend args -fullmutex 0 -nomutex 1
260    }
261    uplevel [concat sqlite3_nomutex $args]
262  }
263} -include {
264  delete.test   delete2.test  insert.test  rollback.test  select1.test
265  select2.test  trans.test    update.test  vacuum.test    types.test
266  types2.test   types3.test
267} -shutdown {
268  rename sqlite3 {}
269  rename sqlite3_nomutex sqlite3
270}
271
272# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
273#
274run_tests "multithread" -description {
275  Tests run in SQLITE_CONFIG_MULTITHREAD mode
276} -initialize {
277  do_test mutex2-multithread.0 {
278    catch {db close}
279    sqlite3_shutdown
280    sqlite3_config multithread
281  } SQLITE_OK
282} -include {
283  delete.test   delete2.test  insert.test  rollback.test  select1.test
284  select2.test  trans.test    update.test  vacuum.test    types.test
285  types2.test   types3.test
286} -shutdown {
287  do_test mutex2-X {
288    catch {db close}
289    sqlite3_shutdown
290    sqlite3_config serialized
291  } SQLITE_OK
292}
293
294# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
295#
296run_tests "fullmutex" -description {
297  Tests run in SQLITE_OPEN_FULLMUTEX mode
298} -initialize {
299  rename sqlite3 sqlite3_fullmutex
300  proc sqlite3 {args} {
301    if {[string range [lindex $args 0] 0 0] ne "-"} {
302      lappend args -nomutex 0 -fullmutex 1
303    }
304    uplevel [concat sqlite3_fullmutex $args]
305  }
306} -include {
307  delete.test   delete2.test  insert.test  rollback.test  select1.test
308  select2.test  trans.test    update.test  vacuum.test    types.test
309  types2.test   types3.test
310} -shutdown {
311  rename sqlite3 {}
312  rename sqlite3_fullmutex sqlite3
313}
314
315# Run some tests using the "onefile" demo.
316#
317run_tests "onefile" -description {
318  Run some tests using the "test_onefile.c" demo
319} -initialize {
320  rename sqlite3 sqlite3_onefile
321  proc sqlite3 {args} {
322    if {[string range [lindex $args 0] 0 0] ne "-"} {
323      lappend args -vfs fs
324    }
325    uplevel [concat sqlite3_onefile $args]
326  }
327} -include {
328  conflict.test  insert.test   insert2.test  insert3.test
329  rollback.test  select1.test  select2.test  select3.test
330} -shutdown {
331  rename sqlite3 {}
332  rename sqlite3_onefile sqlite3
333}
334
335# Run some tests using UTF-16 databases.
336#
337run_tests "utf16" -description {
338  Run tests using UTF-16 databases
339} -presql {
340  pragma encoding = 'UTF-16'
341} -include {
342    alter.test alter3.test
343    auth.test bind.test blob.test capi2.test capi3.test collate1.test
344    collate2.test collate3.test collate4.test collate5.test collate6.test
345    conflict.test date.test delete.test expr.test fkey1.test func.test
346    hook.test index.test insert2.test insert.test interrupt.test in.test
347    intpkey.test ioerr.test join2.test join.test lastinsert.test
348    laststmtchanges.test limit.test lock2.test lock.test main.test
349    memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
350    null.test progress.test quote.test rowid.test select1.test select2.test
351    select3.test select4.test select5.test select6.test sort.test
352    subselect.test tableapi.test table.test temptable.test
353    trace.test trigger1.test trigger2.test trigger3.test
354    trigger4.test types2.test types.test unique.test update.test
355    vacuum.test view.test where.test
356}
357
358# Run some tests in exclusive locking mode.
359#
360run_tests "exclusive" -description {
361  Run tests in exclusive locking mode.
362} -presql {
363  pragma locking_mode = 'exclusive'
364} -include {
365  rollback.test select1.test select2.test
366  malloc.test ioerr.test
367}
368
369# Run some tests in exclusive locking mode with truncated journals.
370#
371run_tests "exclusive-truncate" -description {
372  Run tests in exclusive locking mode and truncate journal mode.
373} -presql {
374  pragma locking_mode = 'exclusive';
375  pragma journal_mode = TRUNCATE;
376} -include {
377  delete.test delete2.test insert.test rollback.test select1.test
378  select2.test update.test malloc.test ioerr.test
379}
380
381# Run some tests in persistent journal mode.
382#
383run_tests "persistent_journal" -description {
384  Run tests in persistent-journal mode.
385} -presql {
386  pragma journal_mode = persist
387} -include {
388  delete.test delete2.test insert.test rollback.test select1.test
389  select2.test trans.test update.test vacuum.test
390}
391
392# Run some tests in truncating journal mode.
393#
394run_tests "truncate_journal" -description {
395  Run tests in persistent-journal mode.
396} -presql {
397  pragma journal_mode = truncate
398} -include {
399  delete.test delete2.test insert.test rollback.test select1.test
400  select2.test trans.test update.test vacuum.test
401  malloc.test ioerr.test
402}
403
404# Run some error tests in persistent journal mode.
405#
406run_tests "persistent_journal_error" -description {
407  Run malloc.test and ioerr.test in persistent-journal mode.
408} -presql {
409  pragma journal_mode = persist
410} -include {
411  malloc.test ioerr.test
412}
413
414# Run some tests in no journal mode.
415#
416run_tests "no_journal" -description {
417  Run tests in no-journal mode.
418} -presql {
419  pragma journal_mode = persist
420} -include {
421  delete.test delete2.test insert.test rollback.test select1.test
422  select2.test trans.test update.test vacuum.test
423}
424
425# Run some error tests in no journal mode.
426#
427run_tests "no_journal_error" -description {
428  Run malloc.test and ioerr.test in no-journal mode.
429} -presql {
430  pragma journal_mode = persist
431} -include {
432  malloc.test ioerr.test
433}
434
435# Run some crash-tests in autovacuum mode.
436#
437run_tests "autovacuum_crash" -description {
438  Run crash.test in autovacuum mode.
439} -presql {
440  pragma auto_vacuum = 1
441} -include crash.test
442
443# Run some ioerr-tests in autovacuum mode.
444#
445run_tests "autovacuum_ioerr" -description {
446  Run ioerr.test in autovacuum mode.
447} -presql {
448  pragma auto_vacuum = 1
449} -include ioerr.test
450
451# Run tests with an in-memory journal.
452#
453run_tests "inmemory_journal" -description {
454  Run tests with an in-memory journal file.
455} -presql {
456  pragma journal_mode = 'memory'
457} -exclude {
458  # Exclude all tests that simulate IO errors.
459  autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test
460  ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
461  vacuum3.test incrblob_err.test diskfull.test
462
463  # Exclude test scripts that use tcl IO to access journal files or count
464  # the number of fsync() calls.
465  pager.test exclusive.test jrnlmode.test sync.test misc1.test
466  journal1.test conflict.test
467}
468
469ifcapable mem3 {
470  run_tests "memsys3" -description {
471    Run tests using the allocator in mem3.c.
472  } -exclude {
473    autovacuum.test           delete3.test              manydb.test
474    bigrow.test               incrblob2.test            memdb.test
475    bitvec.test               index2.test               memsubsys1.test
476    capi3c.test               ioerr.test                memsubsys2.test
477    capi3.test                join3.test                pagesize.test
478    collate5.test             limit.test
479  } -initialize {
480    catch {db close}
481    sqlite3_reset_auto_extension
482    sqlite3_shutdown
483    sqlite3_config_heap 25000000 0
484    sqlite3_config_lookaside 0 0
485    install_malloc_faultsim 1
486    sqlite3_initialize
487    autoinstall_test_functions
488  } -shutdown {
489    catch {db close}
490    sqlite3_reset_auto_extension
491    sqlite3_shutdown
492    sqlite3_config_heap 0 0
493    sqlite3_config_lookaside 100 500
494    install_malloc_faultsim 1
495    sqlite3_initialize
496  }
497}
498
499ifcapable mem5 {
500  run_tests "memsys5" -description {
501    Run tests using the allocator in mem5.c.
502  } -exclude {
503    autovacuum.test           delete3.test              manydb.test
504    bigrow.test               incrblob2.test            memdb.test
505    bitvec.test               index2.test               memsubsys1.test
506    capi3c.test               ioerr.test                memsubsys2.test
507    capi3.test                join3.test                pagesize.test
508    collate5.test             limit.test                zeroblob.test
509  } -initialize {
510    catch {db close}
511    sqlite3_reset_auto_extension
512    sqlite3_shutdown
513    sqlite3_config_heap 25000000 64
514    sqlite3_config_lookaside 0 0
515    install_malloc_faultsim 1
516    sqlite3_initialize
517    autoinstall_test_functions
518  } -shutdown {
519    catch {db close}
520    sqlite3_reset_auto_extension
521    sqlite3_shutdown
522    sqlite3_config_heap 0 0
523    sqlite3_config_lookaside 100 500
524    install_malloc_faultsim 1
525    sqlite3_initialize
526  }
527
528  run_tests "memsys5-2" -description {
529    Run tests using the allocator in mem5.c in a different configuration.
530  } -include {
531    select1.test
532  } -initialize {
533    catch {db close}
534    sqlite3_reset_auto_extension
535    sqlite3_shutdown
536    sqlite3_config_heap 40000000 16
537    sqlite3_config_lookaside 0 0
538    install_malloc_faultsim 1
539    sqlite3_initialize
540    autoinstall_test_functions
541  } -shutdown {
542    catch {db close}
543    sqlite3_reset_auto_extension
544    sqlite3_shutdown
545    sqlite3_config_heap 0 0
546    sqlite3_config_lookaside 100 500
547    install_malloc_faultsim 1
548    sqlite3_initialize
549  }
550}
551
552ifcapable threadsafe {
553  run_tests "no_mutex_try" -description {
554     The sqlite3_mutex_try() interface always fails
555  } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \
556  -initialize {
557    catch {db close}
558    sqlite3_shutdown
559    install_mutex_counters 1
560    set ::disable_mutex_try 1
561  } -shutdown {
562    catch {db close}
563    sqlite3_shutdown
564    install_mutex_counters 0
565  }
566}
567
568# run_tests "crash_safe_append" -description {
569#   Run crash.test with persistent journals on a SAFE_APPEND file-system.
570# } -initialize {
571#   rename crashsql sa_crashsql
572#   proc crashsql {args} {
573#     set options [lrange $args 0 [expr {[llength $args]-2}]]
574#     lappend options -char safe_append
575#     set sql [lindex $args end]
576#     lappend options "
577#       PRAGMA journal_mode=persistent;
578#       $sql
579#     "
580#     set fd [open test.db-journal w]
581#     puts $fd [string repeat 1234567890 100000]
582#     close $fd
583#     eval sa_crashsql $options
584#   }
585# } -shutdown {
586#   rename crashsql {}
587#   rename sa_crashsql crashsql
588# } -include crash.test
589
590run_tests "safe_append" -description {
591  Run some tests on a SAFE_APPEND file-system.
592} -initialize {
593  rename sqlite3 sqlite3_safeappend
594  proc sqlite3 {args} {
595    if {[string range [lindex $args 0] 0 0] ne "-"} {
596      lappend args -vfs devsym
597    }
598    uplevel [concat sqlite3_safeappend $args]
599  }
600  sqlite3_simulate_device -char safe_append
601} -shutdown {
602  rename sqlite3 {}
603  rename sqlite3_shutdown sqlite3
604} -include [lsort [concat shared_err.test $ALLTESTS]] \
605  -exclude async3.test
606
607# The set of tests to run on the alternative-pcache
608set perm-alt-pcache-testset {
609  async.test
610  attach.test
611  delete.test delete2.test
612  index.test
613  insert.test insert2.test
614  join.test join2.test
615  rollback.test
616  select1.test select2.test
617  trans.test
618  update.test
619}
620
621run_tests "pcache0" -description {
622  Alternative pcache implementation without random discard
623} -initialize {
624  catch {db close}
625  sqlite3_reset_auto_extension
626  sqlite3_shutdown
627  sqlite3_config_alt_pcache 1 0 1
628  sqlite3_initialize
629  autoinstall_test_functions
630} -shutdown {
631  catch {db close}
632  sqlite3_reset_auto_extension
633  sqlite3_shutdown
634  sqlite3_config_alt_pcache 0 0 0
635  sqlite3_config_lookaside 100 500
636  install_malloc_faultsim 1
637  sqlite3_initialize
638} -include ${perm-alt-pcache-testset}
639
640run_tests "pcache10" -description {
641  Alternative pcache implementation without 10% random discard
642} -initialize {
643  catch {db close}
644  sqlite3_reset_auto_extension
645  sqlite3_shutdown
646  sqlite3_config_alt_pcache 1 50 1
647  sqlite3_initialize
648  autoinstall_test_functions
649} -shutdown {
650  catch {db close}
651  sqlite3_reset_auto_extension
652  sqlite3_shutdown
653  sqlite3_config_alt_pcache 0 0 0
654  sqlite3_initialize
655} -include ${perm-alt-pcache-testset}
656
657run_tests "pcache50" -description {
658  Alternative pcache implementation without 50% random discard
659} -initialize {
660  catch {db close}
661  sqlite3_reset_auto_extension
662  sqlite3_shutdown
663  sqlite3_config_alt_pcache 1 50 1
664  sqlite3_initialize
665  autoinstall_test_functions
666} -shutdown {
667  catch {db close}
668  sqlite3_reset_auto_extension
669  sqlite3_shutdown
670  sqlite3_config_alt_pcache 0 0 0
671  sqlite3_initialize
672} -include ${perm-alt-pcache-testset}
673
674run_tests "pcache90" -description {
675  Alternative pcache implementation without 90% random discard
676} -initialize {
677  catch {db close}
678  sqlite3_reset_auto_extension
679  sqlite3_shutdown
680  sqlite3_config_alt_pcache 1 50 1
681  sqlite3_initialize
682  autoinstall_test_functions
683} -shutdown {
684  catch {db close}
685  sqlite3_reset_auto_extension
686  sqlite3_shutdown
687  sqlite3_config_alt_pcache 0 0 0
688  sqlite3_initialize
689} -include ${perm-alt-pcache-testset}
690
691run_tests "pcache100" -description {
692  Alternative pcache implementation that always discards when unpinning
693} -initialize {
694  catch {db close}
695  sqlite3_reset_auto_extension
696  sqlite3_shutdown
697  sqlite3_config_alt_pcache 1 100 1
698  sqlite3_initialize
699  autoinstall_test_functions
700} -shutdown {
701  catch {db close}
702  sqlite3_reset_auto_extension
703  sqlite3_shutdown
704  sqlite3_config_alt_pcache 0 0 0
705  sqlite3_initialize
706} -include ${perm-alt-pcache-testset}
707
708run_tests "journaltest" -description {
709  Check that pages are synced before being written (test_journal.c).
710} -initialize {
711  set ISQUICK 1
712  catch {db close}
713  register_jt_vfs -default ""
714} -shutdown {
715  unregister_jt_vfs
716} -exclude [concat $EXCLUDE {
717  incrvacuum.test
718  ioerr.test
719  corrupt4.test
720  io.test
721}]
722
723# End of tests
724#############################################################################
725
726if {$::perm::testmode eq "targets"} { puts "" ; exit }
727
728# Restore the [sqlite3] command.
729#
730rename sqlite3 {}
731rename really_sqlite3 sqlite3
732
733# Restore the [finish_test] command.
734#
735rename finish_test ""
736rename really_finish_test2 finish_test
737
738# Restore the [do_test] command.
739#
740rename do_test ""
741rename really_do_test do_test
742
743finish_test
744