Test structure change and db test updates
This commit is contained in:
parent
e505f13f17
commit
93716e1ead
11 changed files with 321 additions and 178 deletions
8
Rakefile
8
Rakefile
|
@ -14,11 +14,9 @@ task :default => "test"
|
|||
desc "Clean"
|
||||
task :clean do
|
||||
include FileUtils
|
||||
rm_rf File.join('ext', 'bdb_aux._c')
|
||||
rm_rf File.join('ext', 'Makefile')
|
||||
rm_rf File.join('ext', 'mkmf.log')
|
||||
rm_rf File.join('ext', 'conftest.c')
|
||||
rm_rf File.join('ext', '*.o')
|
||||
Dir.chdir('ext') do
|
||||
rm(Dir.glob('*') - ['bdb.c', 'bdb.h', 'extconf.rb'])
|
||||
end
|
||||
rm_rf 'pkg'
|
||||
end
|
||||
|
||||
|
|
47
ext/bdb.c
47
ext/bdb.c
|
@ -94,9 +94,10 @@ static void db_free(t_dbh *dbh)
|
|||
fprintf(stderr,"%s/%d %s 0x%x\n",__FILE__,__LINE__,"db_free cleanup!",dbh);
|
||||
#endif
|
||||
|
||||
if ( dbh ) {
|
||||
if (dbh) {
|
||||
if (dbh->db) {
|
||||
dbh->db->close(dbh->db,NOFLAGS);
|
||||
if (dbh->db_opened == 1)
|
||||
dbh->db->close(dbh->db,NOFLAGS);
|
||||
if ( RTEST(ruby_debug) && dbh->filename[0] != '\0')
|
||||
fprintf(stderr,"%s/%d %s %p %s\n",__FILE__,__LINE__,
|
||||
"db_free database was still open!",dbh->db,dbh->filename);
|
||||
|
@ -272,7 +273,7 @@ VALUE db_open(VALUE obj, VALUE vtxn, VALUE vdisk_file,
|
|||
}
|
||||
filename_copy(dbh->filename,vdisk_file)
|
||||
dbh->adbc=rb_ary_new();
|
||||
|
||||
dbh->db_opened = 1;
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
@ -302,6 +303,31 @@ VALUE db_flags_set(VALUE obj, VALUE vflags)
|
|||
return vflags;
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* db.flags -> value
|
||||
*
|
||||
* get database flags.
|
||||
* see http://www.sleepycat.com/docs/api_c/db_get_flags.html
|
||||
*
|
||||
*/
|
||||
VALUE db_flags_get(VALUE obj)
|
||||
{
|
||||
t_dbh *dbh;
|
||||
int rv;
|
||||
u_int32_t flags;
|
||||
|
||||
Data_Get_Struct(obj,t_dbh,dbh);
|
||||
if (!dbh->db)
|
||||
raise_error(0,"db is closed");
|
||||
|
||||
rv = dbh->db->get_flags(dbh->db,&flags);
|
||||
if ( rv != 0 ) {
|
||||
raise_error(rv, "db_flag_get failure: %s",db_strerror(rv));
|
||||
}
|
||||
return INT2NUM(flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* db.pagesize=value
|
||||
|
@ -493,7 +519,7 @@ VALUE db_close(VALUE obj, VALUE vflags)
|
|||
if ( rv != 0 ) {
|
||||
raise_error(rv, "db_close failure: %s",db_strerror(rv));
|
||||
}
|
||||
|
||||
dbh->db_opened = 0;
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
@ -577,9 +603,8 @@ VALUE db_get(VALUE obj, VALUE vtxn, VALUE vkey, VALUE vdata, VALUE vflags)
|
|||
}
|
||||
|
||||
if ( ! NIL_P(vflags) ) {
|
||||
rb_warning("flags nil");
|
||||
flags=NUM2UINT(vflags);
|
||||
}
|
||||
flags=NUM2UINT(vflags);
|
||||
}
|
||||
|
||||
Data_Get_Struct(obj,t_dbh,dbh);
|
||||
if (!dbh->db)
|
||||
|
@ -637,7 +662,6 @@ VALUE db_pget(VALUE obj, VALUE vtxn, VALUE vkey, VALUE vdata, VALUE vflags)
|
|||
}
|
||||
|
||||
if ( ! NIL_P(vflags) ) {
|
||||
rb_warning("flags nil");
|
||||
flags=NUM2UINT(vflags);
|
||||
}
|
||||
|
||||
|
@ -909,8 +933,9 @@ VALUE db_rename(VALUE obj, VALUE vdisk_file,
|
|||
StringValueCStr(newname),
|
||||
flags);
|
||||
|
||||
if (rv)
|
||||
if (rv) {
|
||||
raise_error(rv,"db_rename failed: %s",db_strerror(rv));
|
||||
}
|
||||
return Qtrue;
|
||||
}
|
||||
|
||||
|
@ -2559,6 +2584,7 @@ void Init_bdb() {
|
|||
rb_define_method(cDb,"cursor",db_cursor,2);
|
||||
rb_define_method(cDb,"associate",db_associate,4);
|
||||
rb_define_method(cDb,"flags=",db_flags_set,1);
|
||||
rb_define_method(cDb,"flags",db_flags_get,0);
|
||||
rb_define_method(cDb,"open",db_open,6);
|
||||
rb_define_method(cDb,"close",db_close,1);
|
||||
rb_define_method(cDb,"[]",db_aget,1);
|
||||
|
@ -2636,6 +2662,3 @@ void Init_bdb() {
|
|||
rb_define_method(cTxn,"tid",txn_id,0);
|
||||
rb_define_method(cTxn,"set_timeout",txn_set_timeout,2);
|
||||
}
|
||||
void Init_bdb2a() {
|
||||
Init_bdb2();
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ typedef struct s_envh {
|
|||
typedef struct s_dbh {
|
||||
VALUE self;
|
||||
DB *db;
|
||||
int db_opened;
|
||||
VALUE aproc;
|
||||
t_envh *env; /* Parent environment, NULL if not opened from one */
|
||||
VALUE adbc; /* Ruby array holding opened cursor */
|
||||
|
|
161
test/all_test.rb
161
test/all_test.rb
|
@ -1,161 +0,0 @@
|
|||
#!/usr/bin/env ruby
|
||||
require 'test_helper'
|
||||
|
||||
50.times {|n|
|
||||
db=Bdb::Db.new
|
||||
db.open(nil,"dbtest.db",nil,Bdb::Db::BTREE,Bdb::DB_CREATE,0)
|
||||
db.put(nil,n.to_s,"ploppy #{n} #{Time.now}",0)
|
||||
db.close(0)
|
||||
}
|
||||
db=Bdb::Db.new
|
||||
db.open(nil,"dbtest.db",nil,nil,nil,0)
|
||||
500.times {|n|
|
||||
db.put(nil,n.to_s,"ploppy #{n}",0)
|
||||
}
|
||||
db.close(0)
|
||||
|
||||
db=Bdb::Db.new
|
||||
db.open(nil,"dbtest.db",nil,nil,nil,0)
|
||||
dbc=db.cursor(nil,0)
|
||||
puts("cursor is: "+dbc.inspect.to_s)
|
||||
kv=dbc.get(nil,nil,Bdb::DB_FIRST);
|
||||
puts("first data is: " + kv.inspect.to_s)
|
||||
kv=dbc.get(nil,nil,Bdb::DB_LAST);
|
||||
puts("last data is: " + kv.inspect.to_s)
|
||||
kv=dbc.get(nil,nil,Bdb::DB_PREV);
|
||||
puts("prior data is: " + kv.inspect.to_s)
|
||||
dbc.del;
|
||||
begin
|
||||
kv=dbc.get(nil,nil,Bdb::DB_CURRENT);
|
||||
rescue Bdb::DbError => m
|
||||
puts("deleted record is gone from current position:" + m.to_s)
|
||||
puts("code is #{m.code}")
|
||||
end
|
||||
puts("current data is: " +kv.inspect.to_s)
|
||||
dbc.put("elephant","gorilla",Bdb::DB_KEYFIRST)
|
||||
kv=dbc.get(nil,nil,Bdb::DB_CURRENT);
|
||||
puts("current data after put: " +kv.inspect.to_s)
|
||||
kv=dbc.get(nil,nil,Bdb::DB_LAST);
|
||||
puts("last data is: " + kv.inspect.to_s)
|
||||
kv=dbc.get(nil,nil,Bdb::DB_PREV);
|
||||
puts("prior data is: " + kv.inspect.to_s)
|
||||
puts("duplicates here is: " + dbc.count.to_s)
|
||||
dbc.close
|
||||
db.close(0)
|
||||
|
||||
db=Bdb::Db.new
|
||||
db.open(nil,"dbtest.db",nil,nil,nil,0)
|
||||
5.times {|n|
|
||||
$stdout.puts(db.get(nil,n.to_s,nil,0))
|
||||
begin
|
||||
db.del(n.to_s,0)
|
||||
rescue
|
||||
end
|
||||
}
|
||||
5.times {|n|
|
||||
v=db.get(nil,n.to_s,nil,0)
|
||||
if v
|
||||
$stdout.puts("For #{n}:" + v)
|
||||
else
|
||||
$stdout.puts("-- not in database #{n}")
|
||||
end
|
||||
}
|
||||
db.close(0)
|
||||
$stderr.puts("All OK!")
|
||||
|
||||
|
||||
File.delete('db1.db') if File.exist?('db1.db')
|
||||
File.delete('db2.db') if File.exist?('db2.db')
|
||||
|
||||
if File.exist?('skus')
|
||||
db=Bdb::Db.new
|
||||
db.open(nil,"db1.db",nil,Bdb::Db::HASH,Bdb::DB_CREATE,0)
|
||||
|
||||
db2=Bdb::Db.new
|
||||
db2.flags=Bdb::DB_DUPSORT
|
||||
db2.open(nil,"db2.db",nil,Bdb::Db::HASH,Bdb::DB_CREATE,0)
|
||||
|
||||
db.associate(nil,db2,0,
|
||||
proc {|sdb,key,data|
|
||||
key.split('-')[0]
|
||||
})
|
||||
|
||||
c=0
|
||||
File.open("skus") {|fd|
|
||||
tlen=fd.stat.size
|
||||
pf=tlen/10
|
||||
pl=0
|
||||
fd.each do |line|
|
||||
c+=1
|
||||
if c%1000==0
|
||||
$stderr.print('.')
|
||||
cp=fd.pos
|
||||
if ( cp/pf > pl )
|
||||
pl=cp/pf
|
||||
$stderr.print(" #{pl*10}% ")
|
||||
end
|
||||
end
|
||||
line.chomp!
|
||||
n=line*50
|
||||
isbn,item=line.split('|')[0..1]
|
||||
sku="%s-%03d"%[isbn,item]
|
||||
db.put(sku,line,0)
|
||||
end
|
||||
}
|
||||
$stderr.print("\ntotal count: #{c}\n")
|
||||
|
||||
db2.close(0)
|
||||
db.close(0)
|
||||
end
|
||||
|
||||
$stderr.puts("test environment")
|
||||
|
||||
if File.exist?('skus')
|
||||
env=Bdb::Env.new(0)
|
||||
env.cachesize=25*1024*1024;
|
||||
env.open(".",Bdb::DB_INIT_CDB|Bdb::DB_INIT_MPOOL|Bdb::DB_CREATE,0)
|
||||
|
||||
db=env.db
|
||||
db.open(nil,"db1.db",nil,Bdb::Db::HASH,Bdb::DB_CREATE,0)
|
||||
|
||||
db2=env.db
|
||||
db2.flags=Bdb::DB_DUPSORT
|
||||
db2.open(nil,"db2.db",nil,Bdb::Db::HASH,Bdb::DB_CREATE,0)
|
||||
|
||||
db.associate(nil,db2,0,
|
||||
proc {|sdb,key,data|
|
||||
key.split('-')[0]
|
||||
})
|
||||
c=0
|
||||
File.open("skus") {|fd|
|
||||
tlen=fd.stat.size
|
||||
pf=tlen/10
|
||||
pl=0
|
||||
fd.each do |line|
|
||||
c+=1
|
||||
if c%1000==0
|
||||
$stderr.print('.')
|
||||
cp=fd.pos
|
||||
if ( cp/pf > pl )
|
||||
pl=cp/pf
|
||||
$stderr.print(" #{pl*10}% ")
|
||||
end
|
||||
end
|
||||
line.chomp!
|
||||
n=line*50
|
||||
isbn,item=line.split('|')[0..1]
|
||||
sku="%s-%03d"%[isbn,item]
|
||||
db.put(sku,line,0)
|
||||
end
|
||||
}
|
||||
$stderr.print("\ntotal count: #{c}\n")
|
||||
|
||||
db2.close(0)
|
||||
db.close(0)
|
||||
env.close
|
||||
end
|
||||
|
||||
exit
|
||||
|
||||
$stderr.puts(Rusage.get.inspect)
|
||||
$stderr.puts(`ps -up #{$$}`)
|
23
test/cursor_test.rb
Normal file
23
test/cursor_test.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
require 'test_helper'
|
||||
|
||||
class CursorTest < Test::Unit::TestCase
|
||||
|
||||
def test_get
|
||||
end
|
||||
|
||||
def test_pget
|
||||
end
|
||||
|
||||
def test_put
|
||||
end
|
||||
|
||||
def test_close
|
||||
end
|
||||
|
||||
def test_del
|
||||
end
|
||||
|
||||
def test_count
|
||||
end
|
||||
|
||||
end
|
117
test/db_test.rb
Normal file
117
test/db_test.rb
Normal file
|
@ -0,0 +1,117 @@
|
|||
require 'fileutils'
|
||||
require 'test_helper'
|
||||
|
||||
class DbTest < Test::Unit::TestCase
|
||||
|
||||
def setup
|
||||
FileUtils::mkdir File.join(File.dirname(__FILE__), 'tmp')
|
||||
@db = Bdb::Db.new
|
||||
@db.open(nil, File.join(File.dirname(__FILE__), 'tmp', 'test.db'), nil, Bdb::Db::BTREE, Bdb::DB_CREATE, 0)
|
||||
end
|
||||
|
||||
def teardown
|
||||
assert(@db.close(0)) if @db
|
||||
FileUtils::rm_rf File.join('test', 'tmp')
|
||||
end
|
||||
|
||||
def test_put_and_get
|
||||
@db.put(nil, 'key', 'data', 0)
|
||||
result = @db.get(nil, 'key', nil, 0)
|
||||
assert_equal 'data', result
|
||||
end
|
||||
|
||||
def test_pget
|
||||
end
|
||||
|
||||
def test_del
|
||||
@db.put(nil, 'key', 'data', 0)
|
||||
result = @db.get(nil, 'key', nil, 0)
|
||||
assert_equal 'data', result
|
||||
@db.del(nil, 'key', 0)
|
||||
result = @db.get(nil, 'key', nil, 0)
|
||||
assert_nil result
|
||||
end
|
||||
|
||||
def test_associate
|
||||
end
|
||||
|
||||
def test_flags_set_and_get
|
||||
@db1 = Bdb::Db.new
|
||||
@db1.flags = Bdb::DB_DUPSORT
|
||||
assert Bdb::DB_DUPSORT, @db1.flags
|
||||
end
|
||||
|
||||
def test_aget
|
||||
end
|
||||
|
||||
def test_aset
|
||||
end
|
||||
|
||||
def test_join
|
||||
end
|
||||
|
||||
def test_get_byteswapped
|
||||
@db.get_byteswapped
|
||||
end
|
||||
|
||||
def test_get_type
|
||||
assert_equal Bdb::Db::BTREE, @db.get_type
|
||||
end
|
||||
|
||||
def test_remove
|
||||
@db1 = Bdb::Db.new
|
||||
@db1.open(nil, File.join(File.dirname(__FILE__), 'tmp', 'other_test.db'), nil, Bdb::Db::BTREE, Bdb::DB_CREATE, 0)
|
||||
@db1.close(0)
|
||||
Bdb::Db.new.remove(File.join(File.dirname(__FILE__), 'tmp', 'other_test.db'), nil, 0)
|
||||
assert !File.exists?(File.join(File.dirname(__FILE__), 'tmp', 'other_test.db'))
|
||||
end
|
||||
|
||||
def test_key_range
|
||||
10.times { |i| @db.put(nil, i.to_s, 'data', 0) }
|
||||
@db.key_range(nil, '2', 0)
|
||||
end
|
||||
|
||||
def test_rename
|
||||
@db1 = Bdb::Db.new
|
||||
@db1.open(nil, File.join(File.dirname(__FILE__), 'tmp', 'other_test.db'), nil, Bdb::Db::BTREE, Bdb::DB_CREATE, 0)
|
||||
@db1.close(0)
|
||||
assert Bdb::Db.new.rename(File.join(File.dirname(__FILE__), 'tmp', 'other_test.db'), nil, File.join(File.dirname(__FILE__), 'tmp', 'other2_test.db'), 0)
|
||||
assert File.exists?(File.join(File.dirname(__FILE__), 'tmp', 'other2_test.db'))
|
||||
end
|
||||
|
||||
def test_pagesize_get_and_set
|
||||
@db1 = Bdb::Db.new
|
||||
@db1.pagesize = 1024
|
||||
assert_equal 1024, @db1.pagesize
|
||||
end
|
||||
|
||||
def test_h_ffactor_get_and_set
|
||||
@db1 = Bdb::Db.new
|
||||
@db1.h_ffactor = 5
|
||||
assert_equal 5, @db1.h_ffactor
|
||||
end
|
||||
|
||||
def test_h_nelem_get_and_set
|
||||
@db1 = Bdb::Db.new
|
||||
@db1.h_nelem = 10_000
|
||||
assert_equal 10_000, @db1.h_nelem
|
||||
end
|
||||
|
||||
def test_sync
|
||||
assert @db.sync
|
||||
end
|
||||
|
||||
def test_truncate
|
||||
@db.put(nil, 'key', 'data', 0)
|
||||
result = @db.get(nil, 'key', nil, 0)
|
||||
assert_equal 'data', result
|
||||
@db.truncate(nil)
|
||||
result = @db.get(nil, 'key', nil, 0)
|
||||
assert_nil result
|
||||
end
|
||||
|
||||
def test_compact
|
||||
assert @db.compact(nil, nil, nil, nil, 0)
|
||||
end
|
||||
|
||||
end
|
105
test/env_test.rb
Normal file
105
test/env_test.rb
Normal file
|
@ -0,0 +1,105 @@
|
|||
require 'test_helper'
|
||||
|
||||
class EnvTest < Test::Unit::TestCase
|
||||
|
||||
def test_new
|
||||
|
||||
end
|
||||
|
||||
def test_open
|
||||
|
||||
end
|
||||
|
||||
def test_close
|
||||
|
||||
end
|
||||
|
||||
def test_db
|
||||
|
||||
end
|
||||
|
||||
def test_cachesize
|
||||
|
||||
end
|
||||
|
||||
def test_flags_on
|
||||
|
||||
end
|
||||
|
||||
def test_flags_off
|
||||
|
||||
end
|
||||
|
||||
def test_list_dbs
|
||||
|
||||
end
|
||||
|
||||
def test_txn_begin
|
||||
|
||||
end
|
||||
|
||||
def test_txn_checkpoint
|
||||
|
||||
end
|
||||
|
||||
def test_txn_stat
|
||||
|
||||
end
|
||||
|
||||
def test_set_timeout
|
||||
|
||||
end
|
||||
|
||||
def test_get_timeout
|
||||
|
||||
end
|
||||
|
||||
def test_set_tx_max
|
||||
|
||||
end
|
||||
|
||||
def test_get_tx_max
|
||||
|
||||
end
|
||||
|
||||
def test_report_stderr
|
||||
|
||||
end
|
||||
|
||||
def test_set_lk_detect
|
||||
|
||||
end
|
||||
|
||||
def test_get_lk_detect
|
||||
|
||||
end
|
||||
|
||||
def test_set_lk_max_locks
|
||||
|
||||
end
|
||||
|
||||
def test_set_lk_max_objects
|
||||
|
||||
end
|
||||
|
||||
def test_set_shm_key
|
||||
|
||||
end
|
||||
|
||||
def test_get_shm_key
|
||||
|
||||
end
|
||||
|
||||
def test_set_data_dir
|
||||
|
||||
end
|
||||
|
||||
def test_set_lg_dir
|
||||
|
||||
end
|
||||
|
||||
def test_set_tmp_dir
|
||||
|
||||
end
|
||||
|
||||
end
|
BIN
test/skus.gz
BIN
test/skus.gz
Binary file not shown.
10
test/stat_test.rb
Normal file
10
test/stat_test.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
require 'test_helper'
|
||||
|
||||
class DbTest < Test::Unit::TestCase
|
||||
|
||||
# rb_define_method(cDbStat,"[]",stat_aref,1);
|
||||
def test_stat
|
||||
|
||||
end
|
||||
|
||||
end
|
|
@ -1 +1,6 @@
|
|||
require "test/unit"
|
||||
require "bdb"
|
||||
|
||||
class Test::Unit::TestCase
|
||||
|
||||
end
|
||||
|
|
22
test/txn_test.rb
Normal file
22
test/txn_test.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
require 'test_helper'
|
||||
|
||||
class TxnTest < Test::Unit::TestCase
|
||||
|
||||
# cTxnStat = rb_define_class_under(mBdb,"TxnStat",rb_cObject);
|
||||
# rb_define_method(cTxnStat,"[]",stat_aref,1);
|
||||
#
|
||||
# cTxnStatActive =
|
||||
# rb_define_class_under(cTxnStat,"Active",rb_cObject);
|
||||
# rb_define_method(cTxnStatActive,"[]",stat_aref,1);
|
||||
#
|
||||
# cTxn = rb_define_class_under(mBdb,"Txn",rb_cObject);
|
||||
# rb_define_method(cTxn,"commit",txn_commit,1);
|
||||
# rb_define_method(cTxn,"abort",txn_abort,0);
|
||||
# rb_define_method(cTxn,"discard",txn_discard,0);
|
||||
# rb_define_method(cTxn,"tid",txn_id,0);
|
||||
# rb_define_method(cTxn,"set_timeout",txn_set_timeout,2);
|
||||
|
||||
def test_x
|
||||
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue