Skip to content

Commit

Permalink
Add integration spec for Sidekiq Adapter
Browse files Browse the repository at this point in the history
Use fakeredis to remove redis-server dependency when running suite
Add pry for convenient debugging
Add focus/fit rspec configuration for easy focused testing
Add .ruby-version and .ruby-gemset set to 2.1.5
  • Loading branch information
jonathangreenberg committed Feb 2, 2015
1 parent db99b2a commit 80e014f
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 4 deletions.
2 changes: 2 additions & 0 deletions .ruby-gemset
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
sidekiq-bus

1 change: 1 addition & 0 deletions .ruby-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2.1.5
4 changes: 0 additions & 4 deletions lib/sidekiq-bus.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
require "sidekiq_bus/adapter"
require "sidekiq_bus/version"

module ResqueBus

end

QueueBus.adapter = QueueBus::Adapters::Sidekiq.new
3 changes: 3 additions & 0 deletions sidekiq-bus.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ Gem::Specification.new do |s|
s.add_dependency('sidekiq', ['>= 3.0.0', '< 4.0'])

s.add_development_dependency("rspec")
s.add_development_dependency("fakeredis")
s.add_development_dependency("redis-namespace")
s.add_development_dependency("pry")
s.add_development_dependency("timecop")
s.add_development_dependency("json_pure")
end
113 changes: 113 additions & 0 deletions spec/adapter/integration_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
require 'spec_helper'
require 'celluloid'
require 'sidekiq/scheduled'

describe "Resque Integration" do
describe "Happy Path" do
before(:each) do
Sidekiq::Testing.fake!
QueueBus.dispatch("r1") do
subscribe "event_name" do |attributes|
QueueBus::Runner1.run(attributes)
end
end

QueueBus::TaskManager.new(false).subscribe!
end

it "should publish and receive" do
Sidekiq::Testing.fake!
QueueBus::Runner1.value.should == 0

QueueBus.publish("event_name", "ok" => true)
QueueBus::Runner1.value.should == 0

QueueBus::Worker.perform_one

QueueBus::Runner1.value.should == 0

QueueBus::Worker.perform_one

QueueBus::Runner1.value.should == 1
end

it "should publish and receive" do
Sidekiq::Testing.inline!
QueueBus::Runner1.value.should == 0

QueueBus.publish("event_name", "ok" => true)
QueueBus::Runner1.value.should == 1
end

end

describe "Delayed Publishing" do
before(:each) do
Timecop.freeze(now)
QueueBus.stub(:generate_uuid).and_return("idfhlkj")
end
after(:each) do
Timecop.return
end
let(:delayed_attrs) { {"bus_delayed_until" => future.to_i,
"bus_id" => "#{now.to_i}-idfhlkj",
"bus_app_hostname" => `hostname 2>&1`.strip.sub(/.local/,'')} }

let(:bus_attrs) { delayed_attrs.merge({"bus_published_at" => worktime.to_i})}
let(:now) { Time.parse("01/01/2013 5:00")}
let(:future) { Time.at(now.to_i + 60) }
let(:worktime) {Time.at(future.to_i + 1)}

it "should add it to Redis" do
hash = {:one => 1, "two" => "here", "id" => 12 }
event_name = "event_name"
QueueBus.publish_at(future, event_name, hash)

val = QueueBus.redis { |redis| redis.zrange("schedule", 0, 1) }.first

hash = JSON.parse(val)

hash["class"].should == "QueueBus::Worker"
hash["args"].size.should == 1
JSON.parse(hash["args"].first).should == {"bus_class_proxy" => "QueueBus::Publisher", "bus_event_type"=>"event_name", "two"=>"here", "one"=>1, "id" => 12}.merge(delayed_attrs)
hash["queue"].should == "bus_incoming"
end

it "should move it to the real queue when processing" do
hash = {:one => 1, "two" => "here", "id" => 12 }
event_name = "event_name"

val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
val.should == nil

QueueBus.publish_at(future, event_name, hash)

val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
val.should == nil # nothing really added

Sidekiq::Scheduled::Poller.new.poll

val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
val.should == nil # nothing added yet

# process scheduler in future
Timecop.freeze(worktime) do
Sidekiq::Scheduled::Poller.new.poll
val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
hash = JSON.parse(val)
hash["class"].should == "QueueBus::Worker"
hash["args"].size.should == 1
JSON.parse(hash["args"].first).should == {"bus_class_proxy" => "QueueBus::Publisher", "bus_event_type"=>"event_name", "two"=>"here", "one"=>1, "id" => 12}.merge(delayed_attrs)

QueueBus::Publisher.perform(JSON.parse(hash["args"].first))

val = QueueBus.redis { |redis| redis.lpop("queue:bus_incoming") }
hash = JSON.parse(val)
hash["class"].should == "QueueBus::Worker"
hash["args"].size.should == 1
JSON.parse(hash["args"].first).should == {"bus_class_proxy" => "QueueBus::Driver", "bus_event_type"=>"event_name", "two"=>"here", "one"=>1, "id" => 12}.merge(bus_attrs)
end
end

end
end
12 changes: 12 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
require 'timecop'
require 'queue-bus'
require 'adapter/support'
require 'pry'

reset_test_adapter

require 'fakeredis'
Sidekiq.redis = ConnectionPool.new { Redis.new(driver: Redis::Connection::Memory) }

require 'sidekiq/testing'

module QueueBus
class Runner
def self.value
Expand Down Expand Up @@ -47,6 +53,11 @@ def test_list(*args)
end

RSpec.configure do |config|

config.run_all_when_everything_filtered = true
config.filter_run focus: true
config.alias_example_to :fit, focus: true

config.mock_with :rspec do |c|
c.syntax = :should
end
Expand All @@ -56,6 +67,7 @@ def test_list(*args)

config.before(:each) do
reset_test_adapter
Sidekiq::Testing.disable!
end
config.after(:each) do
begin
Expand Down

0 comments on commit 80e014f

Please sign in to comment.