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