From c2cda84957fab177afca0ce03446cfa6edb757b4 Mon Sep 17 00:00:00 2001 From: mattbauer Date: Tue, 30 Dec 2008 16:30:03 -0600 Subject: [PATCH] Txn tests --- ext/bdb.c | 3 +- test/env_test.rb | 1 + test/txn_test.rb | 82 +++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 70 insertions(+), 16 deletions(-) diff --git a/ext/bdb.c b/ext/bdb.c index 5b0a596..f927c7d 100644 --- a/ext/bdb.c +++ b/ext/bdb.c @@ -512,7 +512,8 @@ VALUE db_close(VALUE obj, VALUE vflags) dbh->db=NULL; dbh->aproc=Qnil; if ( dbh->env ) { - rb_warning("%s/%d %s 0x%x",__FILE__,__LINE__,"db_close! removing",obj); + if ( RTEST(ruby_debug) ) + rb_warning("%s/%d %s 0x%x",__FILE__,__LINE__,"db_close! removing",obj); rb_ary_delete(dbh->env->adb,obj); dbh->env = NULL; } diff --git a/test/env_test.rb b/test/env_test.rb index 92e9fe9..1423e34 100644 --- a/test/env_test.rb +++ b/test/env_test.rb @@ -30,6 +30,7 @@ class EnvTest < Test::Unit::TestCase db = env.db assert_equal db, env.list_dbs.first + db.close(0) end def test_set_and_get_timeout diff --git a/test/txn_test.rb b/test/txn_test.rb index ee49c55..b9b22f9 100644 --- a/test/txn_test.rb +++ b/test/txn_test.rb @@ -2,21 +2,73 @@ 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 + def setup + mkdir File.join(File.dirname(__FILE__), 'tmp') + @env = Bdb::Env.new(0) + env_flags = Bdb::DB_CREATE | # Create the environment if it does not already exist. + Bdb::DB_INIT_TXN | # Initialize transactions + Bdb::DB_INIT_LOCK | # Initialize locking. + Bdb::DB_INIT_LOG | # Initialize logging + Bdb::DB_INIT_MPOOL # Initialize the in-memory cache. + @env.open(File.join(File.dirname(__FILE__), 'tmp'), env_flags, 0); + @db = @env.db + @db.open(nil, 'db1.db', nil, Bdb::Db::BTREE, Bdb::DB_CREATE | Bdb::DB_AUTO_COMMIT, 0) end + + def teardown + @db.close(0) + @env.close + rm_rf File.join(File.dirname(__FILE__), 'tmp') + end + + def test_commit + txn = @env.txn_begin(nil, 0) + @db.put(txn, 'key', 'value', 0) + txn.commit(0) + assert_equal 'value', @db.get(nil, 'key', nil, 0) + end + + def test_abort + txn = @env.txn_begin(nil, 0) + @db.put(txn, 'key', 'value', 0) + txn.abort + assert_nil @db.get(nil, 'key', nil, 0) + end + + def test_id + txn = @env.txn_begin(nil, 0) + @db.put(txn, 'key', 'value', 0) + assert txn.tid + txn.commit(0) + assert_equal 'value', @db.get(nil, 'key', nil, 0) + end + + def test_timeout + txn = @env.txn_begin(nil, 0) + txn.set_timeout(10, Bdb::DB_SET_TXN_TIMEOUT) + @db.put(txn, 'key', 'value', 0) + txn.commit(0) + assert_equal 'value', @db.get(nil, 'key', nil, 0) + end + + def test_stat + txn = @env.txn_begin(nil, 0) + @db.put(txn, 'key', 'value', 0) + txn.commit(0) + txn_stat = @env.txn_stat(0) + assert txn_stat + assert txn_stat['st_ncommits'] > 0 + assert_equal 'value', @db.get(nil, 'key', nil, 0) + end + + def test_stat_active + txn = @env.txn_begin(nil, 0) + @db.put(txn, 'key', 'value', 0) + txn_stat = @env.txn_stat(0) + txn.commit(0) + assert_equal 1, txn_stat['st_txnarray'].length + assert_equal 'value', @db.get(nil, 'key', nil, 0) + end + end