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

MySQL数据库

开发平台:

Visual C++

  1. #!./perl -w
  2. # ID: %I%, %G%   
  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..41n";
  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 writeFile
  36. {
  37.     my $name = shift ;
  38.     open(FH, ">$name") or return 0 ;
  39.     print FH @_ ;
  40.     close FH ;
  41.     return 1 ;
  42. }
  43. my $Dfile = "dbhash.tmp";
  44. unlink $Dfile;
  45. umask(0) ;
  46. # Check for invalid parameters
  47. {
  48.     # Check for invalid parameters
  49.     my $db ;
  50.     eval ' $db = new BerkeleyDB::Unknown  -Stupid => 3 ; ' ;
  51.     ok 1, $@ =~ /unknown key value(s) Stupid/  ;
  52.     eval ' $db = new BerkeleyDB::Unknown -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
  53.     ok 2, $@ =~ /unknown key value(s) (Bad |Stupid ){2}/  ;
  54.     eval ' $db = new BerkeleyDB::Unknown -Env => 2 ' ;
  55.     ok 3, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
  56.     eval ' $db = new BerkeleyDB::Unknown -Txn => "fred" ' ;
  57.     ok 4, $@ =~ /^Txn not of type BerkeleyDB::Txn/ ;
  58.     my $obj = bless [], "main" ;
  59.     eval ' $db = new BerkeleyDB::Unknown -Env => $obj ' ;
  60.     ok 5, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
  61. }
  62. # check the interface to a rubbish database
  63. {
  64.     # first an empty file
  65.     my $lex = new LexFile $Dfile ;
  66.     ok 6, writeFile($Dfile, "") ;
  67.     ok 7, ! (new BerkeleyDB::Unknown -Filename => $Dfile); 
  68.     # now a non-database file
  69.     writeFile($Dfile, "x2af6") ;
  70.     ok 8, ! (new BerkeleyDB::Unknown -Filename => $Dfile); 
  71. }
  72. # check the interface to a Hash database
  73. {
  74.     my $lex = new LexFile $Dfile ;
  75.     # create a hash database
  76.     ok 9, my $db = new BerkeleyDB::Hash -Filename => $Dfile, 
  77.     -Flags    => DB_CREATE ;
  78.     # Add a few k/v pairs
  79.     my $value ;
  80.     my $status ;
  81.     ok 10, $db->db_put("some key", "some value") == 0  ;
  82.     ok 11, $db->db_put("key", "value") == 0  ;
  83.     # close the database
  84.     undef $db ;
  85.     # now open it with Unknown
  86.     ok 12, $db = new BerkeleyDB::Unknown -Filename => $Dfile; 
  87.     ok 13, $db->type() == DB_HASH ;
  88.     ok 14, $db->db_get("some key", $value) == 0 ;
  89.     ok 15, $value eq "some value" ;
  90.     ok 16, $db->db_get("key", $value) == 0 ;
  91.     ok 17, $value eq "value" ;
  92.     my @array ;
  93.     eval { $db->Tie(@array)} ;
  94.     ok 18, $@ =~ /^Tie needs a reference to a hash/ ;
  95.     my %hash ;
  96.     $db->Tie(%hash) ;
  97.     ok 19, $hash{"some key"} eq "some value" ;
  98. }
  99. # check the interface to a Btree database
  100. {
  101.     my $lex = new LexFile $Dfile ;
  102.     # create a hash database
  103.     ok 20, my $db = new BerkeleyDB::Btree -Filename => $Dfile, 
  104.     -Flags    => DB_CREATE ;
  105.     # Add a few k/v pairs
  106.     my $value ;
  107.     my $status ;
  108.     ok 21, $db->db_put("some key", "some value") == 0  ;
  109.     ok 22, $db->db_put("key", "value") == 0  ;
  110.     # close the database
  111.     undef $db ;
  112.     # now open it with Unknown
  113.     # create a hash database
  114.     ok 23, $db = new BerkeleyDB::Unknown -Filename => $Dfile; 
  115.     ok 24, $db->type() == DB_BTREE ;
  116.     ok 25, $db->db_get("some key", $value) == 0 ;
  117.     ok 26, $value eq "some value" ;
  118.     ok 27, $db->db_get("key", $value) == 0 ;
  119.     ok 28, $value eq "value" ;
  120.     my @array ;
  121.     eval { $db->Tie(@array)} ;
  122.     ok 29, $@ =~ /^Tie needs a reference to a hash/ ;
  123.     my %hash ;
  124.     $db->Tie(%hash) ;
  125.     ok 30, $hash{"some key"} eq "some value" ;
  126. }
  127. # check the interface to a Recno database
  128. {
  129.     my $lex = new LexFile $Dfile ;
  130.     # create a recno database
  131.     ok 31, my $db = new BerkeleyDB::Recno -Filename => $Dfile, 
  132.     -Flags    => DB_CREATE ;
  133.     # Add a few k/v pairs
  134.     my $value ;
  135.     my $status ;
  136.     ok 32, $db->db_put(0, "some value") == 0  ;
  137.     ok 33, $db->db_put(1, "value") == 0  ;
  138.     # close the database
  139.     undef $db ;
  140.     # now open it with Unknown
  141.     # create a hash database
  142.     ok 34, $db = new BerkeleyDB::Unknown -Filename => $Dfile; 
  143.     ok 35, $db->type() == DB_RECNO ;
  144.     ok 36, $db->db_get(0, $value) == 0 ;
  145.     ok 37, $value eq "some value" ;
  146.     ok 38, $db->db_get(1, $value) == 0 ;
  147.     ok 39, $value eq "value" ;
  148.     my %hash ;
  149.     eval { $db->Tie(%hash)} ;
  150.     ok 40, $@ =~ /^Tie needs a reference to an array/ ;
  151.     my @array ;
  152.     $db->Tie(@array) ;
  153.     ok 41, $array[1] eq "value" ;
  154. }
  155. # check i/f to text