test/test_database.rb in extralite-1.22 vs test/test_database.rb in extralite-1.23
- old
+ new
@@ -267,10 +267,72 @@
end
def test_database_status
assert_operator 0, :<, @db.status(Extralite::SQLITE_DBSTATUS_SCHEMA_USED).first
end
+
+ def test_database_limit
+ result = @db.limit(Extralite::SQLITE_LIMIT_ATTACHED)
+ assert_equal 10, result
+
+ result = @db.limit(Extralite::SQLITE_LIMIT_ATTACHED, 5)
+ assert_equal 10, result
+
+ result = @db.limit(Extralite::SQLITE_LIMIT_ATTACHED)
+ assert_equal 5, result
+
+ assert_raises(Extralite::Error) { @db.limit(-999) }
+ end
+
+ def test_database_busy_timeout
+ fn = "/tmp/extralite-#{rand(10000)}.db"
+ db1 = Extralite::Database.new(fn)
+ db2 = Extralite::Database.new(fn)
+
+ db1.query('begin exclusive')
+ assert_raises(Extralite::BusyError) { db2.query('begin exclusive') }
+
+ db2.busy_timeout = 0.3
+ t0 = Time.now
+ t = Thread.new { sleep 0.1; db1.query('rollback') }
+ result = db2.query('begin exclusive')
+ t1 = Time.now
+
+ assert_equal [], result
+ assert t1 - t0 >= 0.1
+ db2.query('rollback')
+
+ # try to provoke a timeout
+ db1.query('begin exclusive')
+ db2.busy_timeout = 0.1
+ t0 = Time.now
+ t = Thread.new do
+ sleep 0.5
+ ensure
+ db1.query('rollback')
+ end
+ assert_raises(Extralite::BusyError) { db2.query('begin exclusive') }
+ t1 = Time.now
+ assert t1 - t0 >= 0.1
+ t.kill
+ t.join
+
+ db1.query('begin exclusive')
+ db2.busy_timeout = 0
+ assert_raises(Extralite::BusyError) { db2.query('begin exclusive') }
+
+ db2.busy_timeout = nil
+ assert_raises(Extralite::BusyError) { db2.query('begin exclusive') }
+ end
+
+ def test_database_total_changes
+ assert_equal 2, @db.total_changes
+
+ @db.query('insert into t values (7, 8, 9)')
+
+ assert_equal 3, @db.total_changes
+ end
end
class ScenarioTest < MiniTest::Test
def setup
@db = Extralite::Database.new('/tmp/extralite.db')
@@ -333,9 +395,33 @@
@db.query('insert into t values (7, 8, 9)')
@db.query('commit')
result = @db.query_single_column('select x from t')
assert_equal [1, 4, 7], result
+ end
+
+ def test_database_trace
+ sqls = []
+ @db.trace { |sql| sqls << sql }
+
+ @db.query('select 1')
+ assert_equal ['select 1'], sqls
+
+ @db.query('select 2')
+ assert_equal ['select 1', 'select 2'], sqls
+
+ stmt = @db.prepare('select 3')
+
+ stmt.query
+ assert_equal ['select 1', 'select 2', 'select 3'], sqls
+
+ # turn off
+ @db.trace
+
+ stmt.query
+
+ @db.query('select 4')
+ assert_equal ['select 1', 'select 2', 'select 3'], sqls
end
end
class BackupTest < MiniTest::Test
def setup