diff options
author | Sean Griffin <sean@seantheprogrammer.com> | 2015-10-30 11:05:40 -0600 |
---|---|---|
committer | Sean Griffin <sean@seantheprogrammer.com> | 2015-10-30 11:05:40 -0600 |
commit | 61205422bad5f57111d7e9dc4cfb252908878b95 (patch) | |
tree | 791e9969a95904db40550a9a7e5a1726a7b7f9b6 /activerecord/test/cases/adapters/mysql | |
parent | 3cd49570c55334b25e37401176a17b0824512db2 (diff) | |
parent | 2c2a8755460ec3d32ece91c9766dbd0304ece028 (diff) | |
download | rails-61205422bad5f57111d7e9dc4cfb252908878b95.tar.gz rails-61205422bad5f57111d7e9dc4cfb252908878b95.tar.bz2 rails-61205422bad5f57111d7e9dc4cfb252908878b95.zip |
Merge pull request #22122 from samphilipd/sam/manual_locking_on_schema_migrations
Make migrations concurrent safe (using advisory locks)
Diffstat (limited to 'activerecord/test/cases/adapters/mysql')
-rw-r--r-- | activerecord/test/cases/adapters/mysql/connection_test.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/activerecord/test/cases/adapters/mysql/connection_test.rb b/activerecord/test/cases/adapters/mysql/connection_test.rb index decac9e83b..75653ee9af 100644 --- a/activerecord/test/cases/adapters/mysql/connection_test.rb +++ b/activerecord/test/cases/adapters/mysql/connection_test.rb @@ -170,6 +170,34 @@ class MysqlConnectionTest < ActiveRecord::MysqlTestCase end end + def test_get_and_release_advisory_lock + key = "test_key" + + got_lock = @connection.get_advisory_lock(key) + assert got_lock, "get_advisory_lock should have returned true but it didn't" + + assert_equal test_lock_free(key), false, + "expected the test advisory lock to be held but it wasn't" + + released_lock = @connection.release_advisory_lock(key) + assert released_lock, "expected release_advisory_lock to return true but it didn't" + + assert test_lock_free(key), 'expected the test key to be available after releasing' + end + + def test_release_non_existent_advisory_lock + fake_key = "fake_key" + released_non_existent_lock = @connection.release_advisory_lock(fake_key) + assert_equal released_non_existent_lock, false, + 'expected release_advisory_lock to return false when there was no lock to release' + end + + protected + + def test_lock_free(key) + @connection.select_value("SELECT IS_FREE_LOCK('#{key}');") == '1' + end + private def with_example_table(&block) |