Sha256: 86d077c3c965e2bce88cf3d7f21f2772c7f10873e108dc11c9d8e84ca1c944fe

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

require "test_helper"

class LockWorker
  include Sidekiq::Worker
  include Sidekiq::Lock::Worker
  sidekiq_options lock: { timeout: 1, name: 'lock-worker' }
end

class DynamicLockWorker
  include Sidekiq::Worker
  include Sidekiq::Lock::Worker
  sidekiq_options lock: {
    timeout: proc { |user_id, timeout| timeout*2 },
    name:    proc { |user_id, timeout| "lock:#{user_id}" }
  }
end

class RegularWorker
  include Sidekiq::Worker
  include Sidekiq::Lock::Worker
end


module Sidekiq
  module Lock
    describe Middleware do

      def thread_variable
        Thread.current[Sidekiq::Lock::THREAD_KEY]
      end

      before do
        Sidekiq.redis = REDIS
        Sidekiq.redis { |c| c.flushdb }
        Thread.current[Sidekiq::Lock::THREAD_KEY] = nil
      end

      let(:handler){ Sidekiq::Lock::Middleware.new }

      it 'sets lock variable with provided static lock options' do
        handler.call(LockWorker.new, {'class' => LockWorker, 'args' => []}, 'default') do
          true
        end

        assert_kind_of RedisLock, thread_variable
      end

      it 'sets lock variable with provided dynamic options' do
        handler.call(DynamicLockWorker.new, {'class' => DynamicLockWorker, 'args' => [1234, 1000]}, 'default') do
          true
        end

        assert_equal "lock:1234", thread_variable.name
        assert_equal 2000,   thread_variable.timeout
      end

      it 'sets nothing for workers without lock options' do
        handler.call(RegularWorker.new, {'class' => RegularWorker, 'args' => []}, 'default') do
          true
        end

        assert_nil thread_variable
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sidekiq-lock-0.0.1 test/lib/middleware_test.rb