diff options
author | Matt Wilde <matt@zenpayroll.com> | 2015-03-11 14:08:19 -0700 |
---|---|---|
committer | Matt Wilde <matt@zenpayroll.com> | 2015-03-11 15:14:10 -0700 |
commit | 23767c0c41fa51ebef1dfb11bc166c07e93897ac (patch) | |
tree | a7896c4cda73bb5e048ff47b245e71fc112952b9 /activesupport/test | |
parent | 1b7ae86f262df7d15b57be3b4a4f38680ce37c64 (diff) | |
download | rails-23767c0c41fa51ebef1dfb11bc166c07e93897ac.tar.gz rails-23767c0c41fa51ebef1dfb11bc166c07e93897ac.tar.bz2 rails-23767c0c41fa51ebef1dfb11bc166c07e93897ac.zip |
Skip the `:race_condition_ttl` branch if the option is 0 or nil. This fixes an issue with the redis cache, where this code will sometimes throw an error out of SETEX when passing 0 as the `expires_at`.
Diffstat (limited to 'activesupport/test')
-rw-r--r-- | activesupport/test/caching_test.rb | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/activesupport/test/caching_test.rb b/activesupport/test/caching_test.rb index 7f5f8feb0d..4953550c45 100644 --- a/activesupport/test/caching_test.rb +++ b/activesupport/test/caching_test.rb @@ -399,15 +399,16 @@ module CacheStoreBehavior assert_nil @cache.read('foo') end - def test_race_condition_protection - time = Time.now - @cache.write('foo', 'bar', :expires_in => 60) - Time.stubs(:now).returns(time + 61) - result = @cache.fetch('foo', :race_condition_ttl => 10) do - assert_equal 'bar', @cache.read('foo') - "baz" + def test_race_condition_protection_skipped_if_not_defined + @cache.write('foo', 'bar') + time = @cache.send(:read_entry, 'foo', {}).expires_at + Time.stubs(:now).returns(Time.at(time)) + + result = @cache.fetch('foo') do + assert_equal nil, @cache.read('foo') + 'baz' end - assert_equal "baz", result + assert_equal 'baz', result end def test_race_condition_protection_is_limited @@ -437,6 +438,17 @@ module CacheStoreBehavior assert_nil @cache.read('foo') end + def test_race_condition_protection + time = Time.now + @cache.write('foo', 'bar', :expires_in => 60) + Time.stubs(:now).returns(time + 61) + result = @cache.fetch('foo', :race_condition_ttl => 10) do + assert_equal 'bar', @cache.read('foo') + "baz" + end + assert_equal "baz", result + end + def test_crazy_key_characters crazy_key = "#/:*(<+=> )&$%@?;'\"\'`~-" assert @cache.write(crazy_key, "1", :raw => true) |