Sha256: 60688d7c3466e7a43db5ef5333ad0dabb957a0096eee1dbd0015442448b0a764

Contents?: true

Size: 991 Bytes

Versions: 1

Compression:

Stored size: 991 Bytes

Contents

require 'spec_helper'

RSpec.describe SidekiqUniqueJobs::Lock::WhileExecuting do
  it 'allows only one mutex object to have the lock at a time' do
    mutexes = (1..10).map do
      described_class.new('test_mutex_key')
    end

    x = 0
    mutexes.map do |m|
      Thread.new do
        m.synchronize do
          y = x
          sleep 0.001
          x = y + 1
        end
      end
    end.map(&:join)

    expect(x).to eq(10)
  end

  it 'handles auto cleanup correctly' do
    m = described_class.new('test_mutex_key')

    SidekiqUniqueJobs.connection do |conn|
      conn.set 'test_mutex_key', Time.now.to_i - 1, nx: true
    end

    start = Time.now.to_i
    m.synchronize do
      'nop'
    end

    # no longer than a second
    expect(Time.now.to_i).to be <= start + 1
  end

  it 'maintains mutex semantics' do
    m = described_class.new('test_mutex_key')

    expect do
      m.synchronize do
        m.synchronize {}
      end
    end.to raise_error(ThreadError)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sidekiq-unique-jobs-4.0.0 spec/lib/sidekiq_unique_jobs/lock/while_executing_spec.rb