env.t
Upload User: tsgydb
Upload Date: 2007-04-14
Package Size: 10674k
Code Size: 7k
Category:

MySQL

Development Platform:

Visual C++

  1. #!./perl -w
  2. # ID: 1.2, 7/17/97
  3. use strict ;
  4. BEGIN {
  5.     unless(grep /blib/, @INC) {
  6.         chdir 't' if -d 't';
  7.         @INC = '../lib' if -d '../lib';
  8.     }
  9. }
  10. use BerkeleyDB; 
  11. use File::Path qw(rmtree);
  12. print "1..52n";
  13. {
  14.     package LexFile ;
  15.     sub new
  16.     {
  17.         my $self = shift ;
  18.         unlink @_ ;
  19.         bless [ @_ ], $self ;
  20.     }
  21.     sub DESTROY
  22.     {
  23.         my $self = shift ;
  24.         unlink @{ $self } ;
  25.     }
  26. }
  27. sub ok
  28. {
  29.     my $no = shift ;
  30.     my $result = shift ;
  31.  
  32.     print "not " unless $result ;
  33.     print "ok $non" ;
  34. }
  35. sub docat
  36. {
  37.     my $file = shift;
  38.     local $/ = undef;
  39.     open(CAT,$file) || die "Cannot open $file:$!";
  40.     my $result = <CAT>;
  41.     close(CAT);
  42.     return $result;
  43. }
  44. my $Dfile = "dbhash.tmp";
  45. umask(0);
  46. {
  47.     # db version stuff
  48.     my ($major, $minor, $patch) = (0, 0, 0) ;
  49.     ok 1, my $VER = BerkeleyDB::DB_VERSION_STRING ;
  50.     ok 2, my $ver = BerkeleyDB::db_version($major, $minor, $patch) ;
  51.     ok 3, $VER eq $ver ;
  52.     ok 4, $major > 1 ;
  53.     ok 5, defined $minor ;
  54.     ok 6, defined $patch ;
  55. }
  56. {
  57.     # Check for invalid parameters
  58.     my $env ;
  59.     eval ' $env = new BerkeleyDB::Env( -Stupid => 3) ; ' ;
  60.     ok 7, $@ =~ /unknown key value(s) Stupid/  ;
  61.     eval ' $env = new BerkeleyDB::Env( -Bad => 2, -Home => "/tmp", -Stupid => 3) ; ' ;
  62.     ok 8, $@ =~ /unknown key value(s) (Bad |Stupid ){2}/  ;
  63.     eval ' $env = new BerkeleyDB::Env (-Config => {"fred" => " "} ) ; ' ;
  64.     ok 9, !$env ;
  65.     ok 10, $BerkeleyDB::Error =~ /^illegal name-value pair/ ;
  66. }
  67. {
  68.     # create a very simple environment
  69.     my $home = "./fred" ;
  70.     ok 11, -d $home ? chmod 0777, $home : mkdir($home, 0777) ;
  71.     mkdir "./fred", 0777 ;
  72.     chdir "./fred" ;
  73.     ok 12, my $env = new BerkeleyDB::Env -Flags => DB_CREATE ;
  74.     chdir ".." ;
  75.     undef $env ;
  76.     rmtree $home ;
  77. }
  78. {
  79.     # create an environment with a Home
  80.     my $home = "./fred" ;
  81.     ok 13, -d $home ? chmod 0777, $home : mkdir($home, 0777) ;
  82.     ok 14, my $env = new BerkeleyDB::Env -Home => $home,
  83.       -Flags => DB_CREATE ;
  84.     undef $env ;
  85.     rmtree $home ;
  86. }
  87. {
  88.     # make new fail.
  89.     my $home = "./not_there" ;
  90.     rmtree $home ;
  91.     ok 15, ! -d $home ;
  92.     my $env = new BerkeleyDB::Env -Home => $home,
  93.           -Flags => DB_INIT_LOCK ;
  94.     ok 16, ! $env ;
  95.     ok 17,   $! != 0 ;
  96.     rmtree $home ;
  97. }
  98. {
  99.     # Config
  100.     use Cwd ;
  101.     my $cwd = cwd() ;
  102.     my $home = "$cwd/fred" ;
  103.     my $data_dir = "$home/data_dir" ;
  104.     my $log_dir = "$home/log_dir" ;
  105.     my $data_file = "data.db" ;
  106.     ok 18, -d $home ? chmod 0777, $home : mkdir($home, 0777) ;
  107.     ok 19, -d $data_dir ? chmod 0777, $data_dir : mkdir($data_dir, 0777) ;
  108.     ok 20, -d $log_dir ? chmod 0777, $log_dir : mkdir($log_dir, 0777) ;
  109.     my $env = new BerkeleyDB::Env -Home   => $home,
  110.       -Config => { DB_DATA_DIR => $data_dir,
  111.    DB_LOG_DIR  => $log_dir
  112.  },
  113.       -Flags  => DB_CREATE|DB_INIT_TXN|DB_INIT_LOG|
  114.  DB_INIT_MPOOL|DB_INIT_LOCK ;
  115.     ok 21, $env ;
  116.     ok 22, my $txn = $env->txn_begin() ;
  117.     my %hash ;
  118.     ok 23, tie %hash, 'BerkeleyDB::Hash', -Filename => $data_file,
  119.                                        -Flags     => DB_CREATE ,
  120.                                        -Env       => $env,
  121.                                        -Txn       => $txn  ;
  122.     $hash{"abc"} = 123 ;
  123.     $hash{"def"} = 456 ;
  124.     $txn->txn_commit() ;
  125.     untie %hash ;
  126.     undef $txn ;
  127.     undef $env ;
  128.     rmtree $home ;
  129. }
  130. {
  131.     # -ErrFile with a filename
  132.     my $errfile = "./errfile" ;
  133.     my $home = "./fred" ;
  134.     ok 24, -d $home ? chmod 0777, $home : mkdir($home, 0777) ;
  135.     my $lex = new LexFile $errfile ;
  136.     ok 25, my $env = new BerkeleyDB::Env( -ErrFile => $errfile, 
  137.        -Flags => DB_CREATE,
  138.   -Home   => $home) ;
  139.     my $db = new BerkeleyDB::Hash -Filename => $Dfile,
  140.      -Env      => $env,
  141.      -Flags    => -1;
  142.     ok 26, !$db ;
  143.     ok 27, $BerkeleyDB::Error =~ /^illegal flag specified to (db_open|DB->open)/;
  144.     ok 28, -e $errfile ;
  145.     my $contents = docat($errfile) ;
  146.     chomp $contents ;
  147.     ok 29, $BerkeleyDB::Error eq $contents ;
  148.     undef $env ;
  149.     rmtree $home ;
  150. }
  151. {
  152.     # -ErrFile with a filehandle
  153.     use IO ;
  154.     my $home = "./fred" ;
  155.     ok 30, -d $home ? chmod 0777, $home : mkdir($home, 0777) ;
  156.     my $errfile = "./errfile" ;
  157.     my $lex = new LexFile $errfile ;
  158.     ok 31, my $ef  = new IO::File ">$errfile" ;
  159.     ok 32, my $env = new BerkeleyDB::Env( -ErrFile => $ef ,
  160.        -Flags => DB_CREATE,
  161.   -Home   => $home) ;
  162.     my $db = new BerkeleyDB::Hash -Filename => $Dfile,
  163.      -Env      => $env,
  164.      -Flags    => -1;
  165.     ok 33, !$db ;
  166.     ok 34, $BerkeleyDB::Error =~ /^illegal flag specified to (db_open|DB->open)/;
  167.     $ef->close() ;
  168.     ok 35, -e $errfile ;
  169.     my $contents = "" ;
  170.     $contents = docat($errfile) ;
  171.     chomp $contents ;
  172.     ok 36, $BerkeleyDB::Error eq $contents ;
  173.     undef $env ;
  174.     rmtree $home ;
  175. }
  176. {
  177.     # -ErrPrefix
  178.     use IO ;
  179.     my $home = "./fred" ;
  180.     ok 37, -d $home ? chmod 0777, $home : mkdir($home, 0777) ;
  181.     my $errfile = "./errfile" ;
  182.     my $lex = new LexFile $errfile ;
  183.     ok 38, my $env = new BerkeleyDB::Env( -ErrFile => $errfile,
  184. -ErrPrefix => "PREFIX",
  185.        -Flags => DB_CREATE,
  186.   -Home   => $home) ;
  187.     my $db = new BerkeleyDB::Hash -Filename => $Dfile,
  188.      -Env      => $env,
  189.      -Flags    => -1;
  190.     ok 39, !$db ;
  191.     ok 40, $BerkeleyDB::Error =~ /^PREFIX: illegal flag specified to (db_open|DB->open)/;
  192.     ok 41, -e $errfile ;
  193.     my $contents = docat($errfile) ;
  194.     chomp $contents ;
  195.     ok 42, $BerkeleyDB::Error eq $contents ;
  196.     # change the prefix on the fly
  197.     my $old = $env->errPrefix("NEW ONE") ;
  198.     ok 43, $old eq "PREFIX" ;
  199.     $db = new BerkeleyDB::Hash -Filename => $Dfile,
  200.      -Env      => $env,
  201.      -Flags    => -1;
  202.     ok 44, !$db ;
  203.     ok 45, $BerkeleyDB::Error =~ /^NEW ONE: illegal flag specified to (db_open|DB->open)/;
  204.     $contents = docat($errfile) ;
  205.     chomp $contents ;
  206.     ok 46, $contents =~ /$BerkeleyDB::Error$/ ;
  207.     undef $env ;
  208.     rmtree $home ;
  209. }
  210. {
  211.     # test db_appexit
  212.     use Cwd ;
  213.     my $cwd = cwd() ;
  214.     my $home = "$cwd/fred" ;
  215.     my $data_dir = "$home/data_dir" ;
  216.     my $log_dir = "$home/log_dir" ;
  217.     my $data_file = "data.db" ;
  218.     ok 47, -d $home ? chmod 0777, $home : mkdir($home, 0777) ;
  219.     ok 48, -d $data_dir ? chmod 0777, $data_dir : mkdir($data_dir, 0777) ;
  220.     ok 49, -d $log_dir ? chmod 0777, $log_dir : mkdir($log_dir, 0777) ;
  221.     my $env = new BerkeleyDB::Env -Home   => $home,
  222.       -Config => { DB_DATA_DIR => $data_dir,
  223.    DB_LOG_DIR  => $log_dir
  224.  },
  225.       -Flags  => DB_CREATE|DB_INIT_TXN|DB_INIT_LOG|
  226.  DB_INIT_MPOOL|DB_INIT_LOCK ;
  227.     ok 50, $env ;
  228.     ok 51, my $txn_mgr = $env->TxnMgr() ;
  229.     ok 52, $env->db_appexit() == 0 ;
  230.     #rmtree $home ;
  231. }
  232. # test -Verbose
  233. # test -Flags
  234. # db_value_set