• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/db-4.7.25.NC/perl/BerkeleyDB/t/
1#!./perl -w
2
3use strict ;
4
5
6use lib 't' ;
7
8BEGIN {
9    $ENV{LC_ALL} = 'de_DE@euro';
10}
11
12use BerkeleyDB; 
13use util ;
14
15print "1..53\n";
16
17my $Dfile = "dbhash.tmp";
18
19umask(0);
20
21my $version_major  = 0;
22
23{
24    # db version stuff
25    my ($major, $minor, $patch) = (0, 0, 0) ;
26
27    ok 1, my $VER = BerkeleyDB::DB_VERSION_STRING ;
28    ok 2, my $ver = BerkeleyDB::db_version($version_major, $minor, $patch) ;
29    ok 3, $VER eq $ver ;
30    ok 4, $version_major > 1 ;
31    ok 5, defined $minor ;
32    ok 6, defined $patch ;
33}
34
35{
36    # Check for invalid parameters
37    my $env ;
38    eval ' $env = new BerkeleyDB::Env( -Stupid => 3) ; ' ;
39    ok 7, $@ =~ /unknown key value\(s\) Stupid/  ;
40
41    eval ' $env = new BerkeleyDB::Env( -Bad => 2, -Home => "/tmp", -Stupid => 3) ; ' ;
42    ok 8, $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/  ;
43
44    eval ' $env = new BerkeleyDB::Env (-Config => {"fred" => " "} ) ; ' ;
45    ok 9, !$env ;
46    ok 10, $BerkeleyDB::Error =~ /^(illegal name-value pair|Invalid argument)/ ;
47    #print " $BerkeleyDB::Error\n";
48}
49
50{
51    # create a very simple environment
52    my $home = "./fred" ;
53    ok 11, my $lexD = new LexDir($home) ;
54    chdir "./fred" ;
55    ok 12, my $env = new BerkeleyDB::Env -Flags => DB_CREATE,
56					@StdErrFile;
57    chdir ".." ;
58    undef $env ;
59}
60
61{
62    # create an environment with a Home
63    my $home = "./fred" ;
64    ok 13, my $lexD = new LexDir($home) ;
65    ok 14, my $env = new BerkeleyDB::Env -Home => $home,
66    					 -Flags => DB_CREATE ;
67
68    undef $env ;
69}
70
71{
72    # make new fail.
73    my $home = "./not_there" ;
74    rmtree $home ;
75    ok 15, ! -d $home ;
76    my $env = new BerkeleyDB::Env -Home => $home, @StdErrFile,
77			          -Flags => DB_INIT_LOCK ;
78    ok 16, ! $env ;
79    ok 17,   $! != 0 || $^E != 0 ;
80
81    rmtree $home ;
82}
83
84{
85    # Config
86    use Cwd ;
87    my $cwd = cwd() ;
88    my $home = "$cwd/fred" ;
89    my $data_dir = "$home/data_dir" ;
90    my $log_dir = "$home/log_dir" ;
91    my $data_file = "data.db" ;
92    ok 18, my $lexD = new LexDir($home) ;
93    ok 19, -d $data_dir ? chmod 0777, $data_dir : mkdir($data_dir, 0777) ;
94    ok 20, -d $log_dir ? chmod 0777, $log_dir : mkdir($log_dir, 0777) ;
95    my $env = new BerkeleyDB::Env -Home   => $home, @StdErrFile,
96			      -Config => { DB_DATA_DIR => $data_dir,
97					   DB_LOG_DIR  => $log_dir
98					 },
99			      -Flags  => DB_CREATE|DB_INIT_TXN|DB_INIT_LOG|
100					 DB_INIT_MPOOL|DB_INIT_LOCK ;
101    ok 21, $env ;
102
103    ok 22, my $txn = $env->txn_begin() ;
104
105    my %hash ;
106    ok 23, tie %hash, 'BerkeleyDB::Hash', -Filename => $data_file,
107                                       -Flags     => DB_CREATE ,
108                                       -Env       => $env,
109                                       -Txn       => $txn  ;
110
111    $hash{"abc"} = 123 ;
112    $hash{"def"} = 456 ;
113
114    $txn->txn_commit() ;
115
116    untie %hash ;
117
118    undef $txn ;
119    undef $env ;
120}
121
122sub chkMsg
123{
124    my $prefix = shift || '';
125
126    $prefix = "$prefix: " if $prefix;
127
128    my $ErrMsg = join "|", map { "$prefix$_" }
129                        'illegal flag specified to (db_open|DB->open)',
130                       'DB_AUTO_COMMIT may not be specified in non-transactional environment';
131    
132    return 1 if $BerkeleyDB::Error =~ /^$ErrMsg/ ;
133    warn "# $BerkeleyDB::Error\n" ;
134    return 0;
135}
136
137{
138    # -ErrFile with a filename
139    my $errfile = "./errfile" ;
140    my $home = "./fred" ;
141    ok 24, my $lexD = new LexDir($home) ;
142    my $lex = new LexFile $errfile ;
143    ok 25, my $env = new BerkeleyDB::Env( -ErrFile => $errfile, 
144    					  -Flags => DB_CREATE,
145					  -Home   => $home) ;
146    my $db = new BerkeleyDB::Hash -Filename => $Dfile,
147			     -Env      => $env,
148			     -Flags    => -1;
149    ok 26, !$db ;
150
151    my $ErrMsg = join "'", 'illegal flag specified to (db_open|DB->open)',
152                           'DB_AUTO_COMMIT may not be specified in non-transactional environment';
153    
154    ok 27, chkMsg();
155    ok 28, -e $errfile ;
156    my $contents = docat($errfile) ;
157    chomp $contents ;
158    ok 29, $BerkeleyDB::Error eq $contents ;
159
160    undef $env ;
161}
162
163{
164    # -ErrFile with a filehandle
165    use IO::File ;
166    my $errfile = "./errfile" ;
167    my $home = "./fred" ;
168    ok 30, my $lexD = new LexDir($home) ;
169    my $lex = new LexFile $errfile ;
170    my $fh = new IO::File ">$errfile" ;
171    ok 31, my $env = new BerkeleyDB::Env( -ErrFile => $fh, 
172    					  -Flags => DB_CREATE,
173					  -Home   => $home) ;
174    my $db = new BerkeleyDB::Hash -Filename => $Dfile,
175			     -Env      => $env,
176			     -Flags    => -1;
177    ok 32, !$db ;
178
179    ok 33, chkMsg();
180    ok 34, -e $errfile ;
181    my $contents = docat($errfile) ;
182    chomp $contents ;
183    ok 35, $BerkeleyDB::Error eq $contents ;
184
185    undef $env ;
186}
187
188{
189    # -ErrPrefix
190    my $home = "./fred" ;
191    ok 36, my $lexD = new LexDir($home) ;
192    my $errfile = "./errfile" ;
193    my $lex = new LexFile $errfile ;
194    ok 37, my $env = new BerkeleyDB::Env( -ErrFile => $errfile,
195					-ErrPrefix => "PREFIX",
196    					  -Flags => DB_CREATE,
197					  -Home   => $home) ;
198    my $db = new BerkeleyDB::Hash -Filename => $Dfile,
199			     -Env      => $env,
200			     -Flags    => -1;
201    ok 38, !$db ;
202
203    ok 39, chkMsg('PREFIX');
204    ok 40, -e $errfile ;
205    my $contents = docat($errfile) ;
206    chomp $contents ;
207    ok 41, $BerkeleyDB::Error eq $contents ;
208
209    # change the prefix on the fly
210    my $old = $env->errPrefix("NEW ONE") ;
211    ok 42, $old eq "PREFIX" ;
212
213    $db = new BerkeleyDB::Hash -Filename => $Dfile,
214			     -Env      => $env,
215			     -Flags    => -1;
216    ok 43, !$db ;
217    ok 44, chkMsg('NEW ONE');
218    $contents = docat($errfile) ;
219    chomp $contents ;
220    ok 45, $contents =~ /$BerkeleyDB::Error$/ ;
221    undef $env ;
222}
223
224{
225    # test db_appexit
226    use Cwd ;
227    my $cwd = cwd() ;
228    my $home = "$cwd/fred" ;
229    my $data_dir = "$home/data_dir" ;
230    my $log_dir = "$home/log_dir" ;
231    my $data_file = "data.db" ;
232    ok 46, my $lexD = new LexDir($home);
233    ok 47, -d $data_dir ? chmod 0777, $data_dir : mkdir($data_dir, 0777) ;
234    ok 48, -d $log_dir ? chmod 0777, $log_dir : mkdir($log_dir, 0777) ;
235    my $env = new BerkeleyDB::Env -Home   => $home, @StdErrFile,
236			      -Config => { DB_DATA_DIR => $data_dir,
237					   DB_LOG_DIR  => $log_dir
238					 },
239			      -Flags  => DB_CREATE|DB_INIT_TXN|DB_INIT_LOG|
240					 DB_INIT_MPOOL|DB_INIT_LOCK ;
241    ok 49, $env ;
242
243    ok 50, my $txn_mgr = $env->TxnMgr() ;
244
245    ok 51, $env->db_appexit() == 0 ;
246
247}
248
249{
250    # attempt to open a new environment without DB_CREATE
251    # should fail with Berkeley DB 3.x or better.
252
253    my $home = "./fred" ;
254    ok 52, my $lexD = new LexDir($home) ;
255    chdir "./fred" ;
256    my $env = new BerkeleyDB::Env -Home => $home, -Flags => DB_CREATE ;
257    ok 53, $version_major == 2 ? $env : ! $env ;
258
259    # The test below is not portable -- the error message returned by
260    # $BerkeleyDB::Error is locale dependant.
261
262    #ok 54, $version_major == 2 ? 1 
263    #                           : $BerkeleyDB::Error =~ /No such file or directory/ ;
264    #    or print "# BerkeleyDB::Error is $BerkeleyDB::Error\n";
265    chdir ".." ;
266    undef $env ;
267}
268
269# test -Verbose
270# test -Flags
271# db_value_set
272