bdb 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,101 @@
1
+ require 'test_helper'
2
+
3
+ class EnvTest < Test::Unit::TestCase
4
+
5
+ def test_cachesize
6
+ env = Bdb::Env.new(0)
7
+ env.cachesize = 1024*1024*500
8
+ assert_equal 1024*1024*500, env.cachesize
9
+
10
+ env.cachesize = 1024*1024*1024*3
11
+ assert_equal 1024*1024*1024*3, env.cachesize
12
+
13
+ env.cachesize = 1024*1024*1024*3+1
14
+ assert_equal 1024*1024*1024*3+1, env.cachesize
15
+ end
16
+
17
+ def test_flags
18
+ env = Bdb::Env.new(0)
19
+
20
+ env.flags_on = Bdb::DB_AUTO_COMMIT | Bdb::DB_DSYNC_DB
21
+ assert_equal Bdb::DB_AUTO_COMMIT | Bdb::DB_DSYNC_DB, env.flags
22
+
23
+ env.flags_off = Bdb::DB_AUTO_COMMIT | Bdb::DB_DSYNC_DB
24
+ assert_equal 0, env.flags
25
+ end
26
+
27
+ def test_list_dbs
28
+ env = Bdb::Env.new(0)
29
+ assert env.list_dbs.empty?
30
+
31
+ db = env.db
32
+ assert_equal db, env.list_dbs.first
33
+ db.close(0)
34
+ end
35
+
36
+ def test_set_and_get_timeout
37
+ env = Bdb::Env.new(0)
38
+ env.set_timeout(10, Bdb::DB_SET_LOCK_TIMEOUT)
39
+ assert_equal 10, env.get_timeout(Bdb::DB_SET_LOCK_TIMEOUT)
40
+ end
41
+
42
+ def test_set_and_get_tx_max
43
+ env = Bdb::Env.new(0)
44
+ env.set_tx_max(100)
45
+ assert_equal 100, env.get_tx_max
46
+ end
47
+
48
+ def test_set_and_get_lk_detect
49
+ env = Bdb::Env.new(0)
50
+ env.set_lk_detect(Bdb::DB_LOCK_MAXWRITE)
51
+ assert_equal Bdb::DB_LOCK_MAXWRITE, env.get_lk_detect
52
+ end
53
+
54
+ def test_set_and_get_lk_max_locks
55
+ env = Bdb::Env.new(0)
56
+ env.set_lk_max_locks(10_000)
57
+ assert_equal 10_000, env.get_lk_max_locks
58
+ end
59
+
60
+ def test_set_and_get_lk_max_objects
61
+ env = Bdb::Env.new(0)
62
+ env.set_lk_max_objects(10_000)
63
+ assert_equal 10_000, env.get_lk_max_objects
64
+ end
65
+
66
+ def test_set_and_get_shm_key
67
+ env = Bdb::Env.new(0)
68
+ env.set_shm_key(2506400)
69
+ assert_equal 2506400, env.get_shm_key
70
+ end
71
+
72
+ def test_set_and_get_data_dir
73
+ env = Bdb::Env.new(0)
74
+ env.set_data_dir('/tmp')
75
+ assert_equal ['/tmp'], env.get_data_dirs
76
+ end
77
+
78
+ def test_set_lg_dir
79
+ env = Bdb::Env.new(0)
80
+ env.set_lg_dir('/tmp')
81
+ assert_equal '/tmp', env.get_lg_dir
82
+ end
83
+
84
+ def test_set_tmp_dir
85
+ env = Bdb::Env.new(0)
86
+ env.set_tmp_dir('/tmp')
87
+ assert_equal '/tmp', env.get_tmp_dir
88
+ end
89
+
90
+ def test_get_home
91
+ env = Bdb::Env.new(0)
92
+ tmp_dir = File.expand_path(File.join(File.dirname(__FILE__), 'tmp'))
93
+ mkdir_p tmp_dir
94
+ env.open(tmp_dir, Bdb::DB_CREATE, 0);
95
+ assert_equal tmp_dir, env.get_home
96
+ env.close
97
+ ensure
98
+ rm_rf tmp_dir
99
+ end
100
+
101
+ end
@@ -0,0 +1,93 @@
1
+ require 'test_helper'
2
+ require File.dirname(__FILE__) + '/../lib/bdb/simple'
3
+
4
+ class SimpleTest < Test::Unit::TestCase
5
+ def setup
6
+ @path = File.join(File.dirname(__FILE__), 'tmp')
7
+ rm_rf @path
8
+ mkdir @path
9
+ open
10
+ end
11
+
12
+ def teardown
13
+ close
14
+ rm_rf @path
15
+ end
16
+
17
+ def open
18
+ @db = Bdb::Simple.new(@path)
19
+ @dbd = Bdb::Simple.new(@path, :name => 'dup', :dup => true)
20
+ end
21
+
22
+ def close
23
+ @db.close
24
+ @dbd.close
25
+ end
26
+
27
+ def test_put_and_get
28
+ @db['key'] = 'data'
29
+ assert_equal 'data', @db['key']
30
+
31
+ @dbd['key'] = 'data1'
32
+ @dbd['key'] = 'data2'
33
+ assert_equal ['data1', 'data2'], @dbd['key'].to_a
34
+ end
35
+
36
+ def test_update
37
+ @db[:key] = 0
38
+ close
39
+
40
+ pids = []
41
+ 5.times do
42
+ pids << Process.fork do
43
+ db = Bdb::Simple.new(@path)
44
+ 10.times do
45
+ db.update(:key) do |v|
46
+ sleep(0.1)
47
+ v + 1
48
+ end
49
+ end
50
+ db.close
51
+ end
52
+ end
53
+ pids.each {|pid| Process.wait(pid)}
54
+
55
+ open
56
+ assert_equal 50, @db[:key]
57
+ end
58
+
59
+
60
+ def test_delete
61
+ @db['key'] = 'data'
62
+ assert_equal 'data', @db['key']
63
+
64
+ @db.delete('key')
65
+ assert_nil @db['key']
66
+ end
67
+
68
+ def test_range
69
+ (1..10).each {|i| @db[i] = "data#{i}"}
70
+
71
+ assert_equal (3..7).collect {|i| "data#{i}"}, @db[3..7].to_a
72
+ end
73
+
74
+ def test_compare_absolute
75
+ list = [5, 6, "foo", :bar, "bar", :foo, [1,2,4], true, [1,2,3], false, [1], [2], nil, {}, {:b => 1, :a => 1}, {:b => 2, :a => 1}]
76
+
77
+ expected = [nil, false, true, 5, 6, :bar, :foo, "bar", "foo", [1], [1, 2, 3], [1, 2, 4], [2], {}, {:a=>1, :b=>1}, {:a=>1, :b=>2}]
78
+ assert_equal expected, list.sort {|a,b| Bdb::Simple.compare_absolute(a,b)}
79
+ 100.times do
80
+ assert_equal expected, list.shuffle.sort {|a,b| Bdb::Simple.compare_absolute(a,b)}
81
+ end
82
+ end
83
+
84
+ def parallel(n)
85
+ threads = []
86
+ n.times do |i|
87
+ threads << Thread.new do
88
+ yield(i)
89
+ end
90
+ end
91
+ threads.each { |thread| thread.join }
92
+ end
93
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ class DbStat < Test::Unit::TestCase
4
+
5
+ def setup
6
+ mkdir File.join(File.dirname(__FILE__), 'tmp')
7
+ end
8
+
9
+ def teardown
10
+ rm_rf File.join(File.dirname(__FILE__), 'tmp')
11
+ end
12
+
13
+ def test_stat
14
+ @db = Bdb::Db.new
15
+ @db.open(nil, File.join(File.dirname(__FILE__), 'tmp', 'test.db'), nil, Bdb::Db::BTREE, Bdb::DB_CREATE, 0)
16
+ @db.put(nil, 'key', 'data', 0)
17
+ stats = @db.stat(nil, 0)
18
+ assert_equal 1, stats['bt_nkeys']
19
+ @db.close(0)
20
+ end
21
+
22
+ end
@@ -0,0 +1,7 @@
1
+ require 'test/unit'
2
+ require 'fileutils'
3
+ require File.dirname(__FILE__) + '/../ext/bdb'
4
+
5
+ class Test::Unit::TestCase
6
+ include FileUtils
7
+ end
@@ -0,0 +1,74 @@
1
+ require 'test_helper'
2
+
3
+ class TxnTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ mkdir File.join(File.dirname(__FILE__), 'tmp')
7
+ @env = Bdb::Env.new(0)
8
+ env_flags = Bdb::DB_CREATE | # Create the environment if it does not already exist.
9
+ Bdb::DB_INIT_TXN | # Initialize transactions
10
+ Bdb::DB_INIT_LOCK | # Initialize locking.
11
+ Bdb::DB_INIT_LOG | # Initialize logging
12
+ Bdb::DB_INIT_MPOOL # Initialize the in-memory cache.
13
+ @env.open(File.join(File.dirname(__FILE__), 'tmp'), env_flags, 0);
14
+
15
+ @db = @env.db
16
+ @db.open(nil, 'db1.db', nil, Bdb::Db::BTREE, Bdb::DB_CREATE | Bdb::DB_AUTO_COMMIT, 0)
17
+ end
18
+
19
+ def teardown
20
+ @db.close(0)
21
+ @env.close
22
+ rm_rf File.join(File.dirname(__FILE__), 'tmp')
23
+ end
24
+
25
+ def test_commit
26
+ txn = @env.txn_begin(nil, 0)
27
+ @db.put(txn, 'key', 'value', 0)
28
+ txn.commit(0)
29
+ assert_equal 'value', @db.get(nil, 'key', nil, 0)
30
+ end
31
+
32
+ def test_abort
33
+ txn = @env.txn_begin(nil, 0)
34
+ @db.put(txn, 'key', 'value', 0)
35
+ txn.abort
36
+ assert_nil @db.get(nil, 'key', nil, 0)
37
+ end
38
+
39
+ def test_id
40
+ txn = @env.txn_begin(nil, 0)
41
+ @db.put(txn, 'key', 'value', 0)
42
+ assert txn.tid
43
+ txn.commit(0)
44
+ assert_equal 'value', @db.get(nil, 'key', nil, 0)
45
+ end
46
+
47
+ def test_timeout
48
+ txn = @env.txn_begin(nil, 0)
49
+ txn.set_timeout(10, Bdb::DB_SET_TXN_TIMEOUT)
50
+ @db.put(txn, 'key', 'value', 0)
51
+ txn.commit(0)
52
+ assert_equal 'value', @db.get(nil, 'key', nil, 0)
53
+ end
54
+
55
+ def test_stat
56
+ txn = @env.txn_begin(nil, 0)
57
+ @db.put(txn, 'key', 'value', 0)
58
+ txn.commit(0)
59
+ txn_stat = @env.txn_stat(0)
60
+ assert txn_stat
61
+ assert txn_stat['st_ncommits'] > 0
62
+ assert_equal 'value', @db.get(nil, 'key', nil, 0)
63
+ end
64
+
65
+ def test_stat_active
66
+ txn = @env.txn_begin(nil, 0)
67
+ @db.put(txn, 'key', 'value', 0)
68
+ txn_stat = @env.txn_stat(0)
69
+ txn.commit(0)
70
+ assert_equal 1, txn_stat['st_txnarray'].length
71
+ assert_equal 'value', @db.get(nil, 'key', nil, 0)
72
+ end
73
+
74
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bdb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Justin Balthrop
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-20 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Advanced Ruby Berkeley DB library.
17
+ email: code@justinbalthrop.com
18
+ executables: []
19
+
20
+ extensions:
21
+ - ext/extconf.rb
22
+ extra_rdoc_files:
23
+ - LICENSE
24
+ - README.textile
25
+ files:
26
+ - VERSION
27
+ - ext/bdb.c
28
+ - ext/bdb.h
29
+ - ext/extconf.rb
30
+ - lib/bdb/base.rb
31
+ - lib/bdb/database.rb
32
+ - lib/bdb/environment.rb
33
+ - lib/bdb/partitioned_database.rb
34
+ - lib/bdb/result_set.rb
35
+ - test/benchmark.rb
36
+ - test/cursor_test.rb
37
+ - test/db_test.rb
38
+ - test/env_test.rb
39
+ - test/simple_test.rb
40
+ - test/stat_test.rb
41
+ - test/test_helper.rb
42
+ - test/txn_test.rb
43
+ - LICENSE
44
+ - README.textile
45
+ has_rdoc: true
46
+ homepage: http://github.com/ninjudd/bdb
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options:
51
+ - --charset=UTF-8
52
+ require_paths:
53
+ - ext
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ version:
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ version:
67
+ requirements: []
68
+
69
+ rubyforge_project:
70
+ rubygems_version: 1.3.5
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: Ruby Berkeley DB
74
+ test_files:
75
+ - test/benchmark.rb
76
+ - test/cursor_test.rb
77
+ - test/db_test.rb
78
+ - test/env_test.rb
79
+ - test/simple_test.rb
80
+ - test/stat_test.rb
81
+ - test/test_helper.rb
82
+ - test/txn_test.rb