#!/usr/bin/ruby $LOAD_PATH.unshift *%w{../src src tests} require 'bdb' print "\nVERSION of BDB is #{BDB::VERSION}\n" if BDB::VERSION_MAJOR < 3 print "\t\tno test for this version\n" exit end require 'runit_' def clean Dir.foreach('tmp') do |x| if FileTest.file?("tmp/#{x}") File.unlink("tmp/#{x}") end end end $bdb, $env = nil, nil clean Inh = defined?(RUNIT) ? RUNIT : Test::Unit class TestQueue < Inh::TestCase def test_00_error assert_raises(BDB::Fatal, "invalid name") do BDB::Queue.open("tmp/aa", nil, "env" => 1) end assert_raises(BDB::Fatal, "invalid name") do BDB::Queue.open("tmp/aa", nil, "env" => 1) end end def test_01_init assert_kind_of(BDB::Queue, $bdb = BDB::Queue.new("tmp/aa", nil, "a"), "") end def test_02_get_set assert_equal("alpha", $bdb[1] = "alpha", "") assert_equal("alpha", $bdb[1], "") assert_equal(nil, $bdb[2] = nil, "") assert_equal(nil, $bdb[2], "") assert($bdb.key?(1), "") assert_equal(false, $bdb.key?(3), "") assert($bdb.value?("alpha"), "") assert_equal(false, $bdb.value?("unknown"), "") assert_equal(false, $bdb.put(1, "gamma", BDB::NOOVERWRITE), "") assert_equal("alpha", $bdb[1], "") # assert($bdb.both?(1, "alpha"), "") assert(! $bdb.both?(1, "beta"), "") assert(! $bdb.both?(3, "alpha"), "") assert_equal([1, 2, 3], $bdb[4] = [1, 2, 3], "") assert_equal([1, 2, 3].to_s, $bdb[4], "") assert_equal({"a" => "b"}, $bdb[5] = {"a" => "b"}, "") assert_equal({"a" => "b"}.to_s, $bdb[5], "") assert($bdb.sync, "") end def test_03_delete size = $bdb.size i = 0 $bdb.each do |key, value| assert_equal($bdb, $bdb.delete(key), "") i += 1 end assert(size == i, "") assert_equal(0, $bdb.size, "") end def test_04_cursor array = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] i = 1 array.each do |x| assert_equal(x, $bdb[i] = x, "") i += 1 end assert(array.size == $bdb.size, "") arr = [] $bdb.each_value do |x| arr << x end assert_equal(array, arr.sort, "") arr = [] $bdb.reverse_each_value do |x| arr << x end assert_equal(array, arr.sort, "") end def test_05_reopen assert_equal(nil, $bdb.close, "") assert_kind_of(BDB::Queue, $bdb = BDB::Queue.open("tmp/aa", nil, "w", "set_array_base" => 0), "") assert_equal(0, $bdb.size, "") end def test_06_push assert_equal(nil, $bdb.close, "") assert_kind_of(BDB::Queue, $bdb = BDB::Queue.open("tmp/aa", nil, "w", "set_array_base" => 0), "") assert_kind_of(Array, $bdb.push("a"), "") assert_equal($bdb, $bdb << "b", "") assert_equal(2, $bdb.size, "") assert_equal("a", $bdb[0], "<[0]>") assert_equal("b", $bdb[1], "<[1]>") assert_equal([0, "a"], $bdb.shift, "") assert_equal([1, "b"], $bdb.shift, "") assert_equal(0, $bdb.size, "") end def test_07_in_memory assert_equal(nil, $bdb.close, "") assert_kind_of(BDB::Queue, $bdb = BDB::Queue.open(nil, nil), "") assert_equal(0, $bdb.size, "") end def test_08_in_memory_get_set assert_equal("aa", $bdb[1] = "aa", "") assert_equal("cc", $bdb[1] = "cc", "") assert_equal("cc", $bdb[1], "") assert_equal(nil, $bdb.close, "") end def test_09_partial_get assert_kind_of(BDB::Queue, $bdb = BDB::Queue.open("tmp/aa", nil, "w"), "") { 2 => "boat", 6 => "house", 12 => "sea", }.each do |x, y| assert_equal(y, $bdb[x] = y, "") end pon, off, len = $bdb.set_partial(0, 2) assert_equal(false, pon, "") assert_equal(0, off, "") assert_equal(0, len, "") assert_equal("bo", $bdb[2], "") assert_equal("ho", $bdb[6], "") assert_equal("se", $bdb[12], "") pon, off, len = $bdb.set_partial(3, 2) assert(pon, "") assert_equal(0, off, "") assert_equal(2, len, "") assert_equal("t", $bdb[2], "") assert_equal("se", $bdb[6], "") assert_equal(nil, $bdb[12], "") pon, off, len = $bdb.partial_clear assert(pon, "") assert_equal(3, off, "") assert_equal(2, len, "") assert_equal("boat", $bdb[2], "") assert_equal("house", $bdb[6], "") assert_equal("sea", $bdb[12], "") end def test_10_partial_set $bdb.set_partial(0, 2) assert_equal(" ", $bdb[2] = " ", "") assert_equal("AB", $bdb[6] = "AB", "") assert_equal("XY", $bdb[12] = "XY", "") assert_equal("KL", $bdb[10] = "KL", "") pon, off, len = $bdb.clear_partial assert(pon, "") assert_equal(0, off, "") assert_equal(2, len, "") assert_equal(" at", $bdb[2], "") assert_equal("ABuse", $bdb[6], "") assert_equal("XYa", $bdb[12], "") assert_equal("KL", $bdb[10], "") pon, off, len = $bdb.set_partial(3, 2) assert(!pon, "") assert_equal(0, off, "") assert_equal(0, len, "") assert_equal("PP", $bdb[2] = "PP", "") assert_equal("Q ", $bdb[6] = "Q ", "") assert_equal("XY", $bdb[12] = "XY", "") assert_equal("TU", $bdb[10] = "TU", "") pon, off, len = $bdb.clear_partial assert(pon, "") assert_equal(3, off, "") assert_equal(2, len, "") assert_equal(" aPP", $bdb[2], "") assert_equal("ABuQ", $bdb[6], "") assert_equal("XYaXY", $bdb[12], "") assert_equal("KL TU", $bdb[10], "") end def test_11_unknown $bdb.close $bdb = nil assert_kind_of(BDB::Queue, unknown = BDB::Unknown.open("tmp/aa", nil, "r"), "") unknown.close end def test_12_env Dir.foreach('tmp') do |x| if FileTest.file?("tmp/#{x}") File.unlink("tmp/#{x}") end end assert_kind_of(BDB::Env, $env = BDB::Env.open("tmp", BDB::CREATE|BDB::INIT_TRANSACTION)) assert_kind_of(BDB::Queue, $bdb = BDB::Queue.open("aa", nil, "a", "env" => $env), "") end def test_13_txn_commit assert_kind_of(BDB::Txn, txn = $env.begin, "") assert_kind_of(BDB::Queue, db = txn.assoc($bdb), "") assert_equal("aa", db[1] = "aa", "") assert_equal("bb", db[2] = "bb", "") assert_equal("cc", db[3] = "cc", "") assert_equal(3, db.size, "") assert(txn.commit, "") assert_equal(3, $bdb.size, "") end def test_14_txn_abort assert_kind_of(BDB::Txn, txn = $env.begin, "") assert_kind_of(BDB::Queue, db = txn.assoc($bdb), "") assert_equal("aa", db[4] = "aa", "") assert_equal("bb", db[5] = "bb", "") assert_equal("cc", db[6] = "cc", "") assert_equal(6, db.size, "") assert(txn.abort, "") assert_equal(3, $bdb.size, "") end def test_15_txn_abort2 if BDB::VERSION_MAJOR == 2 && BDB::VERSION_MINOR < 7 $stderr.print "skipping test for this version" return "pass" end $env.begin($bdb) do |txn, db| db[4] = "aa" db[5] = "bb" assert_equal(5, db.size, "") txn.begin(db) do |txn1, db1| db1[6] = "cc" assert_equal(6, db1.size, "") txn.abort assert_fail("") end assert_fail("") end assert_equal(3, $bdb.size, "") end def test_16_txn_commit2 if BDB::VERSION_MAJOR == 2 && BDB::VERSION_MINOR < 7 $stderr.print "skipping test for this version" return "pass" end $env.begin($bdb) do |txn, db| db[4] = "aa" db[5] = "bb" assert_equal(5, db.size, "") txn.begin(db) do |txn1, db1| db1[6] = "cc" assert_equal(6, db1.size, "") txn.commit assert_fail("") end assert_fail("") end assert_equal(6, $bdb.size, "") end end if defined?(RUNIT) RUNIT::CUI::TestRunner.run(TestQueue.suite) end