bdb 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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