libdb/lang/perl/BerkeleyDB/t/unknown.t
2011-09-13 13:44:24 -04:00

211 lines
4.7 KiB
Perl

#!./perl -w
# ID: %I%, %G%
use strict ;
use lib 't' ;
use BerkeleyDB;
use util ;
use Test::More;
plan tests => 50;
my $Dfile = "dbhash.tmp";
unlink $Dfile;
umask(0) ;
# Check for invalid parameters
{
# Check for invalid parameters
my $db ;
eval ' $db = new BerkeleyDB::Unknown -Stupid => 3 ; ' ;
ok $@ =~ /unknown key value\(s\) Stupid/ ;
eval ' $db = new BerkeleyDB::Unknown -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
ok $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/ ;
eval ' $db = new BerkeleyDB::Unknown -Env => 2 ' ;
ok $@ =~ /^Env not of type BerkeleyDB::Env/ ;
eval ' $db = new BerkeleyDB::Unknown -Txn => "fred" ' ;
ok $@ =~ /^Txn not of type BerkeleyDB::Txn/ ;
my $obj = bless [], "main" ;
eval ' $db = new BerkeleyDB::Unknown -Env => $obj ' ;
ok $@ =~ /^Env not of type BerkeleyDB::Env/ ;
}
# check the interface to a rubbish database
{
# first an empty file
my $lex = new LexFile $Dfile ;
ok writeFile($Dfile, "") ;
ok ! (new BerkeleyDB::Unknown -Filename => $Dfile);
# now a non-database file
writeFile($Dfile, "\x2af6") ;
ok ! (new BerkeleyDB::Unknown -Filename => $Dfile);
}
# check the interface to a Hash database
{
my $lex = new LexFile $Dfile ;
# create a hash database
ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
-Flags => DB_CREATE ;
# Add a few k/v pairs
my $value ;
my $status ;
ok $db->db_put("some key", "some value") == 0
or diag "Cannot db_put: [$!][$BerkeleyDB::Error]\n" ;
ok $db->db_put("key", "value") == 0 ;
# close the database
undef $db ;
# now open it with Unknown
ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
ok $db->type() == DB_HASH ;
ok $db->db_get("some key", $value) == 0 ;
ok $value eq "some value" ;
ok $db->db_get("key", $value) == 0 ;
ok $value eq "value" ;
my @array ;
eval { $db->Tie(\@array)} ;
ok $@ =~ /^Tie needs a reference to a hash/ ;
my %hash ;
$db->Tie(\%hash) ;
ok $hash{"some key"} eq "some value" ;
}
# check the interface to a Btree database
{
my $lex = new LexFile $Dfile ;
# create a hash database
ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
-Flags => DB_CREATE ;
# Add a few k/v pairs
my $value ;
my $status ;
ok $db->db_put("some key", "some value") == 0 ;
ok $db->db_put("key", "value") == 0 ;
# close the database
undef $db ;
# now open it with Unknown
# create a hash database
ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
ok $db->type() == DB_BTREE ;
ok $db->db_get("some key", $value) == 0 ;
ok $value eq "some value" ;
ok $db->db_get("key", $value) == 0 ;
ok $value eq "value" ;
my @array ;
eval { $db->Tie(\@array)} ;
ok $@ =~ /^Tie needs a reference to a hash/ ;
my %hash ;
$db->Tie(\%hash) ;
ok $hash{"some key"} eq "some value" ;
}
# check the interface to a Recno database
if(1)
{
my $lex = new LexFile $Dfile ;
# create a recno database
ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
-Flags => DB_CREATE ;
# Add a few k/v pairs
my $value ;
my $status ;
ok $db->db_put(0, "some value") == 0 ;
ok $db->db_put(1, "value") == 0 ;
# close the database
undef $db ;
# now open it with Unknown
# create a hash database
ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
ok $db->type() == DB_RECNO ;
ok $db->db_get(0, $value) == 0 ;
ok $value eq "some value" ;
ok $db->db_get(1, $value) == 0 ;
ok $value eq "value" ;
my %hash ;
eval { $db->Tie(\%hash)} ;
ok $@ =~ /^Tie needs a reference to an array/ ;
my @array ;
$db->Tie(\@array) ;
ok $array[1] eq "value" ;
}
# check the interface to a Heap database
SKIP:
{
skip "Heap support not available", 9
unless BerkeleyDB::has_heap() ;
my $lex = new LexFile $Dfile ;
# create a hash database
ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
-Flags => DB_CREATE ;
# Add a few k/v pairs
my $key1 = "" ;
my $key2 ;
my $value ;
my $status ;
ok $db->db_put($key1, "some value", DB_APPEND) == 0 ;
ok $db->db_put($key2, "value", DB_APPEND) == 0 ;
# close the database
undef $db ;
# now open it with Unknown
# create a hash database
ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
ok $db->type() == DB_HEAP ;
ok $db->db_get($key1, $value) == 0
or diag "Cannot db_get: [$!][$BerkeleyDB::Error]\n" ;
ok $value eq "some value" ;
ok $db->db_get($key2, $value) == 0 ;
ok $value eq "value" ;
}
# check i/f to text