diff options
author | Erol Fornoles <erol.fornoles@gmail.com> | 2016-05-22 14:11:06 +0800 |
---|---|---|
committer | Erol Fornoles <erol.fornoles@gmail.com> | 2016-05-24 19:04:38 +0800 |
commit | f5c0c7ffa09c3e29a6ba361d927f6c45f49d6425 (patch) | |
tree | 268f424de894fb899ab4b428b9757c4fbc0c90d6 /activerecord/test | |
parent | 61483b18bcbfaa054113a67f40515c7bf3e892b2 (diff) | |
download | rails-f5c0c7ffa09c3e29a6ba361d927f6c45f49d6425.tar.gz rails-f5c0c7ffa09c3e29a6ba361d927f6c45f49d6425.tar.bz2 rails-f5c0c7ffa09c3e29a6ba361d927f6c45f49d6425.zip |
Introduce new ActiveRecord transaction error classes
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/adapters/mysql2/transaction_test.rb | 33 | ||||
-rw-r--r-- | activerecord/test/cases/adapters/postgresql/transaction_test.rb | 29 |
2 files changed, 40 insertions, 22 deletions
diff --git a/activerecord/test/cases/adapters/mysql2/transaction_test.rb b/activerecord/test/cases/adapters/mysql2/transaction_test.rb index 0e37c70e5c..1a88b9cbca 100644 --- a/activerecord/test/cases/adapters/mysql2/transaction_test.rb +++ b/activerecord/test/cases/adapters/mysql2/transaction_test.rb @@ -27,32 +27,25 @@ module ActiveRecord @connection.drop_table 'samples', if_exists: true end - test "raises error when a serialization failure occurs" do - assert_raises(ActiveRecord::TransactionSerializationError) do - thread = Thread.new do - Sample.transaction isolation: :serializable do - Sample.delete_all - - 10.times do |i| - sleep 0.1 + test "raises DeadlockDetected when a deadlock is encountered" do + assert_raises(ActiveRecord::DeadlockDetected) do + s1 = Sample.create value: 1 + s2 = Sample.create value: 2 - Sample.create value: i - end + thread = Thread.new do + Sample.transaction do + s1.lock! + sleep 1 + s2.update_attributes value: 1 end end - sleep 0.1 - - Sample.transaction isolation: :serializable do - Sample.delete_all - - 10.times do |i| - sleep 0.1 - - Sample.create value: i - end + sleep 0.5 + Sample.transaction do + s2.lock! sleep 1 + s1.update_attributes value: 2 end thread.join diff --git a/activerecord/test/cases/adapters/postgresql/transaction_test.rb b/activerecord/test/cases/adapters/postgresql/transaction_test.rb index e76705a802..87d1fffe19 100644 --- a/activerecord/test/cases/adapters/postgresql/transaction_test.rb +++ b/activerecord/test/cases/adapters/postgresql/transaction_test.rb @@ -26,9 +26,9 @@ module ActiveRecord @connection.drop_table 'samples', if_exists: true end - test "raises error when a serialization failure occurs" do + test "raises SerializationFailure when a serialization failure occurs" do with_warning_suppression do - assert_raises(ActiveRecord::TransactionSerializationError) do + assert_raises(ActiveRecord::SerializationFailure) do thread = Thread.new do Sample.transaction isolation: :serializable do Sample.delete_all @@ -51,8 +51,33 @@ module ActiveRecord Sample.create value: i end + end + + thread.join + end + end + end + + test "raises DeadlockDetected when a deadlock is encountered" do + with_warning_suppression do + assert_raises(ActiveRecord::DeadlockDetected) do + s1 = Sample.create value: 1 + s2 = Sample.create value: 2 + + thread = Thread.new do + Sample.transaction do + s1.lock! + sleep 1 + s2.update_attributes value: 1 + end + end + + sleep 0.5 + Sample.transaction do + s2.lock! sleep 1 + s1.update_attributes value: 2 end thread.join |