From c6d1c29adaac202c41ba5ac4676e28976e9a6007 Mon Sep 17 00:00:00 2001 From: Nick Elser Date: Mon, 13 Apr 2015 22:13:15 -0700 Subject: [PATCH] add additional deadlock tests --- test/client_test.rb | 46 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/test/client_test.rb b/test/client_test.rb index 5ae8b25..45f0ad7 100644 --- a/test/client_test.rb +++ b/test/client_test.rb @@ -3,7 +3,7 @@ require "test_helper" TEST_KEY = "suo_test_key".freeze module ClientTests - def client(options) + def client(options = {}) @client.class.new(options.merge(client: @client.client)) end @@ -98,7 +98,7 @@ module ClientTests sleep 0.1 threads << Thread.new { @client.lock(TEST_KEY, 2) { output << "Three" } } - threads.map(&:join) + threads.each(&:join) ret = [] @@ -127,7 +127,7 @@ module ClientTests failure_counter << i unless success end - end.map(&:join) + end.each(&:join) assert_equal 50, success_counter.size assert_equal 50, failure_counter.size @@ -149,7 +149,7 @@ module ClientTests failure_counter << i unless success end - end.map(&:join) + end.each(&:join) assert_equal 100, success_counter.size assert_equal 0, failure_counter.size @@ -169,7 +169,7 @@ module ClientTests failure_counter << 1 unless locked end - [t1, t2].map(&:join) + [t1, t2].each(&:join) assert_equal 1, success_counter.size assert_equal 1, failure_counter.size @@ -189,7 +189,7 @@ module ClientTests failure_counter << 1 unless locked end - [t1, t2].map(&:join) + [t1, t2].each(&:join) assert_equal 2, success_counter.size assert_equal 0, failure_counter.size @@ -257,7 +257,7 @@ module ClientTests failure_counter << 1 unless locked end - [t1, t2].map(&:join) + [t1, t2].each(&:join) assert_equal 1, success_counter.size assert_equal 1, failure_counter.size @@ -295,12 +295,42 @@ module ClientTests failure_counter << 1 unless locked end - [t1, t2, t3].map(&:join) + [t1, t2, t3].each(&:join) assert_equal 2, success_counter.size assert_equal 1, failure_counter.size assert_equal false, client.locked?(TEST_KEY) 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 class TestBaseClient < Minitest::Test