summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Holland <rob@inversepath.com>2008-05-11 22:53:33 +0100
committerRob Holland <rob@inversepath.com>2008-05-11 22:53:33 +0100
commit0a7d337f1bafc5033074802543bd73bc2b831cd8 (patch)
tree0c6fc1ff90d25e1cbd2874990c32bb093ab07c36
parent3222a34cfb4d56c7dfce9a2f7daf50e65b4fd0a9 (diff)
downloadthird_party-sqlite3-ruby-0a7d337f1bafc5033074802543bd73bc2b831cd8.tar.gz
third_party-sqlite3-ruby-0a7d337f1bafc5033074802543bd73bc2b831cd8.tar.xz
third_party-sqlite3-ruby-0a7d337f1bafc5033074802543bd73bc2b831cd8.zip
Adjust test cases such that there is no possibility of using the same database handle from more than one thread, as per the SQLite usage API requirements.
-rw-r--r--test/tc_integration.rb138
1 files changed, 74 insertions, 64 deletions
diff --git a/test/tc_integration.rb b/test/tc_integration.rb
index 6f1c139..a9a569a 100644
--- a/test/tc_integration.rb
+++ b/test/tc_integration.rb
@@ -27,8 +27,8 @@ module Integration
# == TC_OpenClose =========================================================
- test_case = Class.new( Test::Unit::TestCase ) do
- define_method( "test_create_close" ) do
+ test_case = Class.new( Test::Unit::TestCase ) do
+ define_method( "test_create_close" ) do
begin
db = SQLite3::Database.new( "test-create.db",
:driver => driver )
@@ -39,7 +39,7 @@ module Integration
end
end
- define_method( "test_open_close" ) do
+ define_method( "test_open_close" ) do
begin
File.open( "test-open.db", "w" ) { |f| }
assert File.exist?( "test-open.db" )
@@ -51,7 +51,7 @@ module Integration
end
end
- define_method( "test_bad_open" ) do
+ define_method( "test_bad_open" ) do
assert_raise( SQLite3::CantOpenException ) do
SQLite3::Database.new( ".", :driver => driver )
end
@@ -61,7 +61,7 @@ module Integration
# == TC_Database ==========================================================
- test_case = Class.new( Test::Unit::TestCase ) do
+ test_case = Class.new( Test::Unit::TestCase ) do
define_method( "setup" ) do
@db = SQLite3::Database.new( "test.db", :driver=>driver )
@db.transaction do
@@ -244,7 +244,7 @@ module Integration
assert [ "a", "b" ], row unless called == 0
called += 1
end
- assert_equal 1, called
+ assert_equal 1, called
end
define_method( "test_execute2_no_block_with_bind_no_match" ) do
@@ -519,83 +519,93 @@ module Integration
end
define_method( "test_busy_handler_outwait" ) do
- begin
- db2 = SQLite3::Database.open( "test.db", :driver=>driver )
- handler_call_count = 0
- db2.busy_handler do |data,count|
- handler_call_count += 1
- sleep 0.5
- 1
- end
-
- t = Thread.new do
- @db.transaction( :exclusive ) do
- sleep 0.3
+ busy = Mutex.new
+ busy.lock
+ handler_call_count = 0
+
+ t = Thread.new do
+ begin
+ db2 = SQLite3::Database.open( "test.db", :driver=>driver )
+ db2.transaction( :exclusive ) do
+ busy.lock
end
+ ensure
+ db2.close if db2
end
+ end
- assert_nothing_raised do
- db2.execute "insert into foo (b) values ( 'from 2' )"
- end
-
- assert_equal 1, handler_call_count
+ @db.busy_handler do |data,count|
+ handler_call_count += 1
+ busy.unlock
+ 1
+ end
- t.join
- ensure
- db2.close if db2
+ assert_nothing_raised do
+ @db.execute "insert into foo (b) values ( 'from 2' )"
end
+
+ t.join
+
+ assert_equal 1, handler_call_count
end
define_method( "test_busy_handler_impatient" ) do
- begin
- db2 = SQLite3::Database.open( "test.db", :driver=>driver )
- handler_call_count = 0
- db2.busy_handler do |data,count|
- handler_call_count += 1
- sleep 0.1
- 0
- end
-
- t = Thread.new do
- @db.transaction( :exclusive ) do
- sleep 0.2
+ busy = Mutex.new
+ busy.lock
+ handler_call_count = 0
+
+ t = Thread.new do
+ begin
+ db2 = SQLite3::Database.open( "test.db", :driver=>driver )
+ db2.transaction( :exclusive ) do
+ busy.lock
end
+ ensure
+ db2.close if db2
end
+ end
- assert_raise( SQLite3::BusyException ) do
- db2.execute "insert into foo (b) values ( 'from 2' )"
- end
-
- assert_equal 1, handler_call_count
+ @db.busy_handler do |data, count|
+ handler_call_count += 1
+ 0
+ end
- t.join
- ensure
- db2.close if db2
+ assert_raise( SQLite3::BusyException ) do
+ @db.execute "insert into foo (b) values ( 'from 2' )"
end
+
+ busy.unlock
+ t.join
+
+ assert_equal 1, handler_call_count
end
define_method( "test_busy_timeout" ) do
- begin
- db2 = SQLite3::Database.open( "test.db", :driver=>driver )
- db2.busy_timeout 300
-
- t = Thread.new do
- @db.transaction( :exclusive ) do
- sleep 0.1
+ @db.busy_timeout 300
+ busy = Mutex.new
+ busy.lock
+
+ t = Thread.new do
+ begin
+ db2 = SQLite3::Database.open( "test.db", :driver=>driver )
+ db2.transaction( :exclusive ) do
+ busy.lock
end
+ ensure
+ db2.close if db2
end
+ end
- time = Benchmark.measure do
- assert_raise( SQLite3::BusyException ) do
- db2.execute "insert into foo (b) values ( 'from 2' )"
- end
+ time = Benchmark.measure do
+ assert_raise( SQLite3::BusyException ) do
+ @db.execute "insert into foo (b) values ( 'from 2' )"
end
- assert time.real*1000 >= 300
-
- t.join
- ensure
- db2.close if db2
end
+
+ busy.unlock
+ t.join
+
+ assert time.real*1000 >= 300
end
define_method( "test_create_function" ) do
@@ -679,7 +689,7 @@ module Integration
# == TC_Statement =========================================================
- test_case = Class.new( Test::Unit::TestCase ) do
+ test_case = Class.new( Test::Unit::TestCase ) do
define_method( "setup" ) do
@db = SQLite3::Database.new( "test.db", :driver=>driver )
@db.transaction do
@@ -876,7 +886,7 @@ module Integration
# == TC_ResultSet =========================================================
- test_case = Class.new( Test::Unit::TestCase ) do
+ test_case = Class.new( Test::Unit::TestCase ) do
define_method( "setup" ) do
@db = SQLite3::Database.new( "test.db", :driver=>driver )
@db.transaction do