~ubuntu-branches/ubuntu/edgy/rpm/edgy

« back to all changes in this revision

Viewing changes to db/perl.BerkeleyDB/t/subdb.t

  • Committer: Bazaar Package Importer
  • Author(s): Joey Hess
  • Date: 2002-01-22 20:56:57 UTC
  • Revision ID: james.westby@ubuntu.com-20020122205657-l74j50mr9z8ofcl5
Tags: upstream-4.0.3
ImportĀ upstreamĀ versionĀ 4.0.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!./perl -w
 
2
 
 
3
use strict ;
 
4
 
 
5
BEGIN {
 
6
    unless(grep /blib/, @INC) {
 
7
        chdir 't' if -d 't';
 
8
        @INC = '../lib' if -d '../lib';
 
9
    }
 
10
}
 
11
 
 
12
use BerkeleyDB; 
 
13
use File::Path qw(rmtree);
 
14
 
 
15
BEGIN 
 
16
{
 
17
    if ($BerkeleyDB::db_version < 3) {
 
18
        print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
 
19
        exit 0 ;
 
20
    }
 
21
}
 
22
 
 
23
print "1..43\n";
 
24
 
 
25
my %DB_errors = (
 
26
        'DB_INCOMPLETE' => "DB_INCOMPLETE: Sync was unable to complete",
 
27
        'DB_KEYEMPTY'   => "DB_KEYEMPTY: Non-existent key/data pair",
 
28
        'DB_KEYEXIST'   => "DB_KEYEXIST: Key/data pair already exists",
 
29
        'DB_LOCK_DEADLOCK' => "DB_LOCK_DEADLOCK: Locker killed to resolve a deadlock",
 
30
        'DB_LOCK_NOTGRANTED' => "DB_LOCK_NOTGRANTED: Lock not granted",
 
31
        'DB_NOTFOUND'   => "DB_NOTFOUND: No matching key/data pair found",
 
32
        'DB_OLD_VERSION'        => "DB_OLDVERSION: Database requires a version upgrade",
 
33
        'DB_RUNRECOVERY'        => "DB_RUNRECOVERY: Fatal error, run database recovery",
 
34
        ) ;
 
35
 
 
36
{
 
37
    package LexFile ;
 
38
 
 
39
    sub new
 
40
    {
 
41
        my $self = shift ;
 
42
        unlink @_ ;
 
43
        bless [ @_ ], $self ;
 
44
    }
 
45
 
 
46
    sub DESTROY
 
47
    {
 
48
        my $self = shift ;
 
49
        unlink @{ $self } ;
 
50
    }
 
51
}
 
52
 
 
53
 
 
54
sub ok
 
55
{
 
56
    my $no = shift ;
 
57
    my $result = shift ;
 
58
 
 
59
    print "not " unless $result ;
 
60
    print "ok $no\n" ;
 
61
}
 
62
 
 
63
sub addData
 
64
{
 
65
    my $db = shift ;
 
66
    my @data = @_ ;
 
67
    die "addData odd data\n" unless @data /2 != 0 ;
 
68
    my ($k, $v) ;
 
69
    my $ret = 0 ;
 
70
    while (@data) {
 
71
        $k = shift @data ;
 
72
        $v = shift @data ;
 
73
        $ret += $db->db_put($k, $v) ;
 
74
    }
 
75
 
 
76
    return ($ret == 0) ;
 
77
}
 
78
 
 
79
my $Dfile = "dbhash.tmp";
 
80
my $Dfile2 = "dbhash2.tmp";
 
81
my $Dfile3 = "dbhash3.tmp";
 
82
unlink $Dfile;
 
83
 
 
84
umask(0) ;
 
85
 
 
86
# Berkeley DB 3.x specific functionality
 
87
 
 
88
# Check for invalid parameters
 
89
{
 
90
    # Check for invalid parameters
 
91
    my $db ;
 
92
    eval ' BerkeleyDB::db_remove  -Stupid => 3 ; ' ;
 
93
    ok 1, $@ =~ /unknown key value\(s\) Stupid/  ;
 
94
 
 
95
    eval ' BerkeleyDB::db_remove -Bad => 2, -Filename => "fred", -Stupid => 3; ' ;
 
96
    ok 2, $@ =~ /unknown key value\(s\) (Bad |Stupid ){2}/  ;
 
97
 
 
98
    eval ' BerkeleyDB::db_remove -Filename => "a", -Env => 2 ' ;
 
99
    ok 3, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
 
100
 
 
101
    eval ' BerkeleyDB::db_remove -Subname => "a"' ;
 
102
    ok 4, $@ =~ /^Must specify a filename/ ;
 
103
 
 
104
    my $obj = bless [], "main" ;
 
105
    eval ' BerkeleyDB::db_remove -Filename => "x", -Env => $obj ' ;
 
106
    ok 5, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
 
107
}
 
108
 
 
109
{
 
110
    # subdatabases
 
111
 
 
112
    # opening a subdatabse in an exsiting database that doesn't have
 
113
    # subdatabases at all should fail
 
114
 
 
115
    my $lex = new LexFile $Dfile ;
 
116
 
 
117
    ok 6, my $db = new BerkeleyDB::Hash -Filename => $Dfile, 
 
118
                                        -Flags    => DB_CREATE ;
 
119
 
 
120
    # Add a k/v pair
 
121
    my %data = qw(
 
122
                        red     sky
 
123
                        blue    sea
 
124
                        black   heart
 
125
                        yellow  belley
 
126
                        green   grass
 
127
                ) ;
 
128
 
 
129
    ok 7, addData($db, %data) ;
 
130
 
 
131
    undef $db ;
 
132
 
 
133
    $db = new BerkeleyDB::Hash -Filename => $Dfile, 
 
134
                               -Subname  => "fred" ;
 
135
    ok 8, ! $db ;                                   
 
136
 
 
137
    ok 9, -e $Dfile ;
 
138
    ok 10, ! BerkeleyDB::db_remove(-Filename => $Dfile)  ;
 
139
}
 
140
 
 
141
{
 
142
    # subdatabases
 
143
 
 
144
    # opening a subdatabse in an exsiting database that does have
 
145
    # subdatabases at all, but not this one
 
146
 
 
147
    my $lex = new LexFile $Dfile ;
 
148
 
 
149
    ok 11, my $db = new BerkeleyDB::Hash -Filename => $Dfile, 
 
150
                                         -Subname  => "fred" ,
 
151
                                         -Flags    => DB_CREATE ;
 
152
 
 
153
    # Add a k/v pair
 
154
    my %data = qw(
 
155
                        red     sky
 
156
                        blue    sea
 
157
                        black   heart
 
158
                        yellow  belley
 
159
                        green   grass
 
160
                ) ;
 
161
 
 
162
    ok 12, addData($db, %data) ;
 
163
 
 
164
    undef $db ;
 
165
 
 
166
    $db = new BerkeleyDB::Hash -Filename => $Dfile, 
 
167
                                    -Subname  => "joe" ;
 
168
 
 
169
    ok 13, !$db ;                                   
 
170
 
 
171
}
 
172
 
 
173
{
 
174
    # subdatabases
 
175
 
 
176
    my $lex = new LexFile $Dfile ;
 
177
 
 
178
    ok 14, my $db = new BerkeleyDB::Hash -Filename => $Dfile, 
 
179
                                        -Subname  => "fred" ,
 
180
                                        -Flags    => DB_CREATE ;
 
181
 
 
182
    # Add a k/v pair
 
183
    my %data = qw(
 
184
                        red     sky
 
185
                        blue    sea
 
186
                        black   heart
 
187
                        yellow  belley
 
188
                        green   grass
 
189
                ) ;
 
190
 
 
191
    ok 15, addData($db, %data) ;
 
192
 
 
193
    undef $db ;
 
194
 
 
195
    ok 16, $db = new BerkeleyDB::Hash -Filename => $Dfile, 
 
196
                                    -Subname  => "fred" ;
 
197
 
 
198
    ok 17, my $cursor = $db->db_cursor() ;
 
199
    my ($k, $v) = ("", "") ;
 
200
    my $status ;
 
201
    while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
 
202
        if ($data{$k} eq $v) {
 
203
            delete $data{$k} ;
 
204
        }
 
205
    }
 
206
    ok 18, $status == DB_NOTFOUND ;
 
207
    ok 19, keys %data == 0 ;
 
208
}
 
209
 
 
210
{
 
211
    # subdatabases
 
212
 
 
213
    # opening a database with multiple subdatabases - handle should be a list
 
214
    # of the subdatabase names
 
215
 
 
216
    my $lex = new LexFile $Dfile ;
 
217
  
 
218
    ok 20, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile, 
 
219
                                        -Subname  => "fred" ,
 
220
                                        -Flags    => DB_CREATE ;
 
221
 
 
222
    ok 21, my $db2 = new BerkeleyDB::Btree -Filename => $Dfile, 
 
223
                                        -Subname  => "joe" ,
 
224
                                        -Flags    => DB_CREATE ;
 
225
 
 
226
    # Add a k/v pair
 
227
    my %data = qw(
 
228
                        red     sky
 
229
                        blue    sea
 
230
                        black   heart
 
231
                        yellow  belley
 
232
                        green   grass
 
233
                ) ;
 
234
 
 
235
    ok 22, addData($db1, %data) ;
 
236
    ok 23, addData($db2, %data) ;
 
237
 
 
238
    undef $db1 ;
 
239
    undef $db2 ;
 
240
  
 
241
    ok 24, my $db = new BerkeleyDB::Unknown -Filename => $Dfile ,
 
242
                                         -Flags    => DB_RDONLY ;
 
243
 
 
244
    #my $type = $db->type() ; print "type $type\n" ;
 
245
    ok 25, my $cursor = $db->db_cursor() ;
 
246
    my ($k, $v) = ("", "") ;
 
247
    my $status ;
 
248
    my @dbnames = () ;
 
249
    while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
 
250
        push @dbnames, $k ;
 
251
    }
 
252
    ok 26, $status == DB_NOTFOUND ;
 
253
    ok 27, join(",", sort @dbnames) eq "fred,joe" ;
 
254
    undef $db ;
 
255
 
 
256
    ok 28, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "harry") != 0;
 
257
    ok 29, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") == 0 ;
 
258
    
 
259
    # should only be one subdatabase
 
260
    ok 30, $db = new BerkeleyDB::Unknown -Filename => $Dfile ,
 
261
                                         -Flags    => DB_RDONLY ;
 
262
 
 
263
    ok 31, $cursor = $db->db_cursor() ;
 
264
    @dbnames = () ;
 
265
    while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
 
266
        push @dbnames, $k ;
 
267
    }
 
268
    ok 32, $status == DB_NOTFOUND ;
 
269
    ok 33, join(",", sort @dbnames) eq "joe" ;
 
270
    undef $db ;
 
271
 
 
272
    # can't delete an already deleted subdatabase
 
273
    ok 34, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") != 0;
 
274
    
 
275
    ok 35, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "joe") == 0 ;
 
276
    
 
277
    # should only be one subdatabase
 
278
    ok 36, $db = new BerkeleyDB::Unknown -Filename => $Dfile ,
 
279
                                         -Flags    => DB_RDONLY ;
 
280
 
 
281
    ok 37, $cursor = $db->db_cursor() ;
 
282
    @dbnames = () ;
 
283
    while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
 
284
        push @dbnames, $k ;
 
285
    }
 
286
    ok 38, $status == DB_NOTFOUND ;
 
287
    ok 39, @dbnames == 0 ;
 
288
    undef $db ;
 
289
 
 
290
    ok 40, -e $Dfile ;
 
291
    ok 41, BerkeleyDB::db_remove(-Filename => $Dfile)  == 0 ;
 
292
    ok 42, ! -e $Dfile ;
 
293
    ok 43, BerkeleyDB::db_remove(-Filename => $Dfile) != 0 ;
 
294
}
 
295
 
 
296
# db_remove with env