Sha256: 97fcba1fb96fca52f587d3ebed9864f5b6e33d2f7f2bab71056c8ebaaf8e6fd1

Contents?: true

Size: 1.23 KB

Versions: 2

Compression:

Stored size: 1.23 KB

Contents

require 'spec_helper'

describe 'lock' do
  
  it "acquires the lock if it does not exist" do
    
    @redis.lock("test") { }
    
  end
  
  it "waits and acquire lock" do
    
    start_time = Time.now.to_i
    
    Thread.new {
      @redis.lock("test") { 
        Thread.current.join(1)
        sleep(5) 
      }
    }
    
    Thread.current.join(1)
    
    @redis.lock("test") { }
    
    (Time.now.to_i - start_time).should be > 4
    
  end
  
  it "waits and acquire expired lock" do
    
    start_time = Time.now.to_i
    
    Thread.new {
      @redis.send(:acquire_lock, "test", 5, 10).should == true
    }
    
    Thread.current.join(0.1)
    
    @redis.lock("test") { }
    
    (Time.now.to_i - start_time).should be > 4
    
  end
  
  it "fails to acquire lock" do
    
    Thread.new {
      @redis.lock("test") { 
        Thread.current.join(1)
        sleep(5) 
      }
    }
    
    Thread.current.join(1)
    lambda { @redis.lock("test", 10, 2) {  } }.should raise_error
    
  end
  
  it "correctly release the lock when error is raised" do
    
    begin
      @redis.lock("test") { 
        raise 'some error'
      }
    rescue
    end
    
    @redis.get(@redis.send(:ruby_redis_lock_key, "test")).should == nil
    
  end
  
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ruby_redis_lock-0.1.2 spec/lib/lock_spec.rb
ruby_redis_lock-0.1.1 spec/lib/lock_spec.rb