strict.t
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!./perl -w
  2. use strict ;
  3. BEGIN {
  4.     unless(grep /blib/, @INC) {
  5.         chdir 't' if -d 't';
  6.         @INC = '../lib' if -d '../lib';
  7.     }
  8. }
  9. use BerkeleyDB; 
  10. use File::Path qw(rmtree);
  11. print "1..44n";
  12. {
  13.     package LexFile ;
  14.     sub new
  15.     {
  16.         my $self = shift ;
  17.         unlink @_ ;
  18.         bless [ @_ ], $self ;
  19.     }
  20.     sub DESTROY
  21.     {
  22.         my $self = shift ;
  23.         unlink @{ $self } ;
  24.     }
  25. }
  26. sub ok
  27. {
  28.     my $no = shift ;
  29.     my $result = shift ;
  30.  
  31.     print "not " unless $result ;
  32.     print "ok $non" ;
  33. }
  34. sub docat
  35. {
  36.     my $file = shift;
  37.     local $/ = undef;
  38.     open(CAT,$file) || die "Cannot open $file:$!";
  39.     my $result = <CAT>;
  40.     close(CAT);
  41.     return $result;
  42. }
  43. my $Dfile = "dbhash.tmp";
  44. my $home = "./fred" ;
  45. umask(0);
  46. {
  47.     # closing a database & an environment in the correct order.
  48.     my $lex = new LexFile $Dfile ;
  49.     my %hash ;
  50.     my $status ;
  51.     rmtree $home if -e $home ;
  52.     ok 1, mkdir($home, 0777) ;
  53.     ok 2, my $env = new BerkeleyDB::Env -Home => $home,
  54.                                      -Flags => DB_CREATE|DB_INIT_TXN|
  55.                                                 DB_INIT_MPOOL|DB_INIT_LOCK ;
  56.   
  57.     ok 3, my $db1 = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
  58.                                                -Flags     => DB_CREATE ,
  59.         -Env     => $env;
  60.     ok 4, $db1->db_close() == 0 ; 
  61.     eval { $status = $env->db_appexit() ; } ;
  62.     ok 5, $status == 0 ;
  63.     ok 6, $@ eq "" ;
  64.     #print "[$@]n" ;
  65.     rmtree $home if -e $home ;
  66. }
  67. {
  68.     # closing an environment with an open database
  69.     my $lex = new LexFile $Dfile ;
  70.     my %hash ;
  71.     rmtree $home if -e $home ;
  72.     ok 7, mkdir($home, 0777) ;
  73.     ok 8, my $env = new BerkeleyDB::Env -Home => $home,
  74.                                      -Flags => DB_CREATE|DB_INIT_TXN|
  75.                                                 DB_INIT_MPOOL|DB_INIT_LOCK ;
  76.   
  77.     ok 9, my $db1 = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
  78.                                                -Flags     => DB_CREATE ,
  79.         -Env     => $env;
  80.     eval { $env->db_appexit() ; } ;
  81.     ok 10, $@ =~ /BerkeleyDB Aborting: attempted to close an environment with 1 open database/ ;
  82.     #print "[$@]n" ;
  83.     undef $db1 ;
  84.     untie %hash ;
  85.     undef $env ;
  86.     rmtree $home if -e $home ;
  87. }
  88. {
  89.     # closing a transaction & a database 
  90.     my $lex = new LexFile $Dfile ;
  91.     my %hash ;
  92.     my $status ;
  93.     rmtree $home if -e $home ;
  94.     ok 11, mkdir($home, 0777) ;
  95.     ok 12, my $env = new BerkeleyDB::Env -Home => $home,
  96.                                      -Flags => DB_CREATE|DB_INIT_TXN|
  97.                                                 DB_INIT_MPOOL|DB_INIT_LOCK ;
  98.     ok 13, my $txn = $env->txn_begin() ;
  99.     ok 14, my $db = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
  100.                                                 -Flags     => DB_CREATE ,
  101.         -Env     => $env,
  102.                                                 -Txn       => $txn  ;
  103.     ok 15, $txn->txn_commit()  == 0 ;
  104.     eval { $status = $db->db_close() ; } ;
  105.     ok 16, $status == 0 ;
  106.     ok 17, $@ eq "" ;
  107.     eval { $status = $env->db_appexit() ; } ;
  108.     ok 18, $status == 0 ;
  109.     ok 19, $@ eq "" ;
  110.     #print "[$@]n" ;
  111. }
  112. {
  113.     # closing a database with an open transaction
  114.     my $lex = new LexFile $Dfile ;
  115.     my %hash ;
  116.     rmtree $home if -e $home ;
  117.     ok 20, mkdir($home, 0777) ;
  118.     ok 21, my $env = new BerkeleyDB::Env -Home => $home,
  119.                                      -Flags => DB_CREATE|DB_INIT_TXN|
  120.                                                 DB_INIT_MPOOL|DB_INIT_LOCK ;
  121.     ok 22, my $txn = $env->txn_begin() ;
  122.     ok 23, my $db = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
  123.                                                 -Flags     => DB_CREATE ,
  124.         -Env     => $env,
  125.                                                 -Txn       => $txn  ;
  126.     eval { $db->db_close() ; } ;
  127.     ok 24, $@ =~ /BerkeleyDB Aborting: attempted to close a database while a transaction was still open at/ ;
  128.     #print "[$@]n" ;
  129. }
  130. {
  131.     # closing a cursor & a database 
  132.     my $lex = new LexFile $Dfile ;
  133.     my %hash ;
  134.     my $status ;
  135.     ok 25, my $db = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
  136.                                                 -Flags     => DB_CREATE ;
  137.     ok 26, my $cursor = $db->db_cursor() ;
  138.     ok 27, $cursor->c_close() == 0 ;
  139.     eval { $status = $db->db_close() ; } ;
  140.     ok 28, $status == 0 ;
  141.     ok 29, $@ eq "" ;
  142.     #print "[$@]n" ;
  143.     rmtree $home if -e $home ;
  144. }
  145. {
  146.     # closing a database with an open cursor
  147.     my $lex = new LexFile $Dfile ;
  148.     my %hash ;
  149.     ok 30, my $db = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
  150.                                                 -Flags     => DB_CREATE ;
  151.     ok 31, my $cursor = $db->db_cursor() ;
  152.     eval { $db->db_close() ; } ;
  153.     ok 32, $@ =~ /QBerkeleyDB Aborting: attempted to close a database with 1 open cursor(s) at/;
  154.     #print "[$@]n" ;
  155.     rmtree $home if -e $home ;
  156. }
  157. {
  158.     # closing a transaction & a cursor 
  159.     my $lex = new LexFile $Dfile ;
  160.     my %hash ;
  161.     my $status ;
  162.     rmtree $home if -e $home ;
  163.     ok 33, mkdir($home, 0777) ;
  164.     ok 34, my $env = new BerkeleyDB::Env -Home => $home,
  165.                                      -Flags => DB_CREATE|DB_INIT_TXN|
  166.                                                 DB_INIT_MPOOL|DB_INIT_LOCK ;
  167.     ok 35, my $txn = $env->txn_begin() ;
  168.     ok 36, my $db = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
  169.                                                 -Flags     => DB_CREATE ,
  170.         -Env     => $env,
  171.                                                 -Txn       => $txn  ;
  172.     ok 37, my $cursor = $db->db_cursor() ;
  173.     eval { $status = $cursor->c_close() ; } ;
  174.     ok 38, $status == 0 ;
  175.     ok 39, ($status = $txn->txn_commit())  == 0 ;
  176.     ok 40, $@ eq "" ;
  177.     eval { $status = $db->db_close() ; } ;
  178.     ok 41, $status == 0 ;
  179.     ok 42, $@ eq "" ;
  180.     eval { $status = $env->db_appexit() ; } ;
  181.     ok 43, $status == 0 ;
  182.     ok 44, $@ eq "" ;
  183.     #print "[$@]n" ;
  184.     rmtree $home if -e $home ;
  185. }