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