aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/adapters
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2016-08-03 07:05:22 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2016-08-03 07:05:22 -0300
commitfac9938b917f3417a19775d1c6905123fc402256 (patch)
treed8efc9958372769cde477dc70f613c044cdb11fc /activerecord/test/cases/adapters
parent8ada07b2b8d63c3379facb5d81485b5fdeafaceb (diff)
parentf5c0c7ffa09c3e29a6ba361d927f6c45f49d6425 (diff)
downloadrails-fac9938b917f3417a19775d1c6905123fc402256.tar.gz
rails-fac9938b917f3417a19775d1c6905123fc402256.tar.bz2
rails-fac9938b917f3417a19775d1c6905123fc402256.zip
Merge pull request #25107 from Erol/introduce-new-ar-transaction-error-classes
Introduce new ActiveRecord transaction error classes Closes #26018
Diffstat (limited to 'activerecord/test/cases/adapters')
-rw-r--r--activerecord/test/cases/adapters/mysql2/transaction_test.rb33
-rw-r--r--activerecord/test/cases/adapters/postgresql/transaction_test.rb29
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