distributed memoizer added to ensure absolute duplicate posts don't get through

in case of an absolute dupe just return the memoized post

This works around issues with wordpress being crazy
This commit is contained in:
Sam
2013-07-29 12:25:19 +10:00
parent 1e107fd68a
commit 4a20d09523
4 changed files with 162 additions and 11 deletions

View File

@ -0,0 +1,55 @@
require 'spec_helper'
require_dependency 'distributed_memoizer'
describe DistributedMemoizer do
before do
$redis.del(DistributedMemoizer.redis_key("hello"))
$redis.del(DistributedMemoizer.redis_lock_key("hello"))
$redis.unwatch
end
# NOTE we could use a mock redis here, but I think it makes sense to test the real thing
# let(:mock_redis) { MockRedis.new }
def memoize(&block)
DistributedMemoizer.memoize("hello", duration = 120, &block)
end
it "returns the value of a block" do
memoize do
"abc"
end.should == "abc"
end
it "return the old value once memoized" do
memoize do
"abc"
end
memoize do
"world"
end.should == "abc"
end
it "memoizes correctly when used concurrently" do
results = []
threads = []
5.times do
threads << Thread.new do
results << memoize do
sleep 0.001
SecureRandom.hex
end
end
end
threads.each(&:join)
results.uniq.length.should == 1
results.count.should == 5
end
end