mirror of
https://github.com/dkam/suo.git
synced 2025-01-29 07:42:43 +00:00
add additional deadlock tests
This commit is contained in:
@@ -3,7 +3,7 @@ require "test_helper"
|
|||||||
TEST_KEY = "suo_test_key".freeze
|
TEST_KEY = "suo_test_key".freeze
|
||||||
|
|
||||||
module ClientTests
|
module ClientTests
|
||||||
def client(options)
|
def client(options = {})
|
||||||
@client.class.new(options.merge(client: @client.client))
|
@client.class.new(options.merge(client: @client.client))
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ module ClientTests
|
|||||||
sleep 0.1
|
sleep 0.1
|
||||||
threads << Thread.new { @client.lock(TEST_KEY, 2) { output << "Three" } }
|
threads << Thread.new { @client.lock(TEST_KEY, 2) { output << "Three" } }
|
||||||
|
|
||||||
threads.map(&:join)
|
threads.each(&:join)
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ module ClientTests
|
|||||||
|
|
||||||
failure_counter << i unless success
|
failure_counter << i unless success
|
||||||
end
|
end
|
||||||
end.map(&:join)
|
end.each(&:join)
|
||||||
|
|
||||||
assert_equal 50, success_counter.size
|
assert_equal 50, success_counter.size
|
||||||
assert_equal 50, failure_counter.size
|
assert_equal 50, failure_counter.size
|
||||||
@@ -149,7 +149,7 @@ module ClientTests
|
|||||||
|
|
||||||
failure_counter << i unless success
|
failure_counter << i unless success
|
||||||
end
|
end
|
||||||
end.map(&:join)
|
end.each(&:join)
|
||||||
|
|
||||||
assert_equal 100, success_counter.size
|
assert_equal 100, success_counter.size
|
||||||
assert_equal 0, failure_counter.size
|
assert_equal 0, failure_counter.size
|
||||||
@@ -169,7 +169,7 @@ module ClientTests
|
|||||||
failure_counter << 1 unless locked
|
failure_counter << 1 unless locked
|
||||||
end
|
end
|
||||||
|
|
||||||
[t1, t2].map(&:join)
|
[t1, t2].each(&:join)
|
||||||
|
|
||||||
assert_equal 1, success_counter.size
|
assert_equal 1, success_counter.size
|
||||||
assert_equal 1, failure_counter.size
|
assert_equal 1, failure_counter.size
|
||||||
@@ -189,7 +189,7 @@ module ClientTests
|
|||||||
failure_counter << 1 unless locked
|
failure_counter << 1 unless locked
|
||||||
end
|
end
|
||||||
|
|
||||||
[t1, t2].map(&:join)
|
[t1, t2].each(&:join)
|
||||||
|
|
||||||
assert_equal 2, success_counter.size
|
assert_equal 2, success_counter.size
|
||||||
assert_equal 0, failure_counter.size
|
assert_equal 0, failure_counter.size
|
||||||
@@ -257,7 +257,7 @@ module ClientTests
|
|||||||
failure_counter << 1 unless locked
|
failure_counter << 1 unless locked
|
||||||
end
|
end
|
||||||
|
|
||||||
[t1, t2].map(&:join)
|
[t1, t2].each(&:join)
|
||||||
|
|
||||||
assert_equal 1, success_counter.size
|
assert_equal 1, success_counter.size
|
||||||
assert_equal 1, failure_counter.size
|
assert_equal 1, failure_counter.size
|
||||||
@@ -295,12 +295,42 @@ module ClientTests
|
|||||||
failure_counter << 1 unless locked
|
failure_counter << 1 unless locked
|
||||||
end
|
end
|
||||||
|
|
||||||
[t1, t2, t3].map(&:join)
|
[t1, t2, t3].each(&:join)
|
||||||
|
|
||||||
assert_equal 2, success_counter.size
|
assert_equal 2, success_counter.size
|
||||||
assert_equal 1, failure_counter.size
|
assert_equal 1, failure_counter.size
|
||||||
assert_equal false, client.locked?(TEST_KEY)
|
assert_equal false, client.locked?(TEST_KEY)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_increment_reused_client
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
threads = 2.times.map do
|
||||||
|
Thread.new do
|
||||||
|
@client.lock(TEST_KEY) { i += 1 }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
threads.each(&:join)
|
||||||
|
|
||||||
|
assert_equal 2, i
|
||||||
|
assert_equal false, client.locked?(TEST_KEY)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_increment_new_client
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
threads = 2.times.map do
|
||||||
|
Thread.new do
|
||||||
|
client.lock(TEST_KEY) { i += 1 }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
threads.each(&:join)
|
||||||
|
|
||||||
|
assert_equal 2, i
|
||||||
|
assert_equal false, client.locked?(TEST_KEY)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class TestBaseClient < Minitest::Test
|
class TestBaseClient < Minitest::Test
|
||||||
|
|||||||
Reference in New Issue
Block a user