add tests for refresh and slight refactor

This commit is contained in:
Nick Elser
2015-04-13 19:37:49 -07:00
parent 49a9757d44
commit 6e2afdf80a

View File

@@ -3,6 +3,10 @@ require "test_helper"
TEST_KEY = "suo_test_key".freeze TEST_KEY = "suo_test_key".freeze
module ClientTests module ClientTests
def client(options)
@client.class.new(options.merge(client: @client.client))
end
def test_throws_failed_error_on_bad_client def test_throws_failed_error_on_bad_client
assert_raises(Suo::LockClientError) do assert_raises(Suo::LockClientError) do
client = @client.class.new(client: {}) client = @client.class.new(client: {})
@@ -88,13 +92,14 @@ module ClientTests
assert_equal 0, output.size assert_equal 0, output.size
assert_equal %w(One Two), ret assert_equal %w(One Two), ret
assert_equal false, @client.locked?(TEST_KEY)
end end
def test_block_multiple_resource_locking def test_block_multiple_resource_locking
success_counter = Queue.new success_counter = Queue.new
failure_counter = Queue.new failure_counter = Queue.new
client = @client.class.new(acquisition_timeout: 0.9, client: @client.client) client = client(acquisition_timeout: 0.9)
100.times.map do |i| 100.times.map do |i|
Thread.new do Thread.new do
@@ -109,13 +114,14 @@ module ClientTests
assert_equal 50, success_counter.size assert_equal 50, success_counter.size
assert_equal 50, failure_counter.size assert_equal 50, failure_counter.size
assert_equal false, client.locked?(TEST_KEY)
end end
def test_block_multiple_resource_locking_longer_timeout def test_block_multiple_resource_locking_longer_timeout
success_counter = Queue.new success_counter = Queue.new
failure_counter = Queue.new failure_counter = Queue.new
client = @client.class.new(acquisition_timeout: 3, client: @client.client) client = client(acquisition_timeout: 3)
100.times.map do |i| 100.times.map do |i|
Thread.new do Thread.new do
@@ -130,6 +136,51 @@ module ClientTests
assert_equal 100, success_counter.size assert_equal 100, success_counter.size
assert_equal 0, failure_counter.size assert_equal 0, failure_counter.size
assert_equal false, client.locked?(TEST_KEY)
end
def test_stale_lock_acquisition
success_counter = Queue.new
client = client(stale_lock_expiration: 0.5)
t1 = Thread.new { client.lock(TEST_KEY) { sleep 0.6; success_counter << 1 } }
sleep 0.55
t2 = Thread.new { client.lock(TEST_KEY) { success_counter << 1 } }
[t1, t2].map(&:join)
assert_equal 2, success_counter.size
assert_equal false, client.locked?(TEST_KEY)
end
def test_refresh
success_counter = Queue.new
failure_counter = Queue.new
client = client(stale_lock_expiration: 0.5)
t1 = Thread.new do
client.lock(TEST_KEY) do |token|
sleep 0.4
client.refresh(TEST_KEY, token)
sleep 0.4
success_counter << 1
end
end
sleep 0.55
t2 = Thread.new do
locked = client.lock(TEST_KEY) { success_counter << 1 }
failure_counter << 1 unless locked
end
[t1, t2].map(&:join)
assert_equal 1, success_counter.size
assert_equal 1, failure_counter.size
assert_equal false, client.locked?(TEST_KEY)
end end
end end
@@ -142,6 +193,18 @@ class TestBaseClient < Minitest::Test
assert_raises(NotImplementedError) do assert_raises(NotImplementedError) do
@client.send(:get, TEST_KEY) @client.send(:get, TEST_KEY)
end end
assert_raises(NotImplementedError) do
@client.send(:set, TEST_KEY, "", "")
end
assert_raises(NotImplementedError) do
@client.send(:initial_set, TEST_KEY)
end
assert_raises(NotImplementedError) do
@client.send(:clear, TEST_KEY)
end
end end
end end