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