refactored message handler spec

This commit is contained in:
maxwell 2010-10-29 14:26:11 -07:00
parent ce805c8167
commit 7e7c4c3431
4 changed files with 64 additions and 61 deletions

View file

@ -11,6 +11,10 @@ class MessageHandler
@queue = EM::Queue.new @queue = EM::Queue.new
end end
def clear_queue
@queue = EM::Queue.new
end
def add_get_request(destinations) def add_get_request(destinations)
[*destinations].each{ |dest| @queue.push(Message.new(:get, dest))} [*destinations].each{ |dest| @queue.push(Message.new(:get, dest))}
end end

View file

@ -22,6 +22,10 @@ describe PublicsController do
end end
describe '#receive' do describe '#receive' do
before do
EventMachine::HttpRequest.stub!(:new).and_return(FakeHttpRequest.new(:success))
end
context 'success cases' do context 'success cases' do
it 'should 200 on successful receipt of a request' do it 'should 200 on successful receipt of a request' do
EM::run { EM::run {

View file

@ -5,58 +5,53 @@
require 'spec_helper' require 'spec_helper'
describe MessageHandler do describe MessageHandler do
before do let(:handler) {MessageHandler.new()}
unstub_mocha_stubs let(:message_body) {"I want to pump you up"}
end let(:message_urls) {["http://www.google.com/", "http://yahoo.com/", "http://foo.com/"]}
after do let(:success) {FakeHttpRequest.new(:success)}
stub_sockets let(:failure) {FakeHttpRequest.new(:failure)}
MessageHandler.any_instance.stubs(:add_post_request)
end
before do before do
@handler = MessageHandler.new handler.clear_queue
@message_body = "I want to pump you up" end
@message_urls = ["http://www.google.com/", "http://yahoo.com/", "http://foo.com/"]
after(:all) do
handler.clear_queue
end end
describe 'GET messages' do describe 'GET messages' do
describe 'creating a GET query' do describe 'creating a GET query' do
it 'should be able to add a GET query to the queue with required destinations' do it 'should be able to add a GET query to the queue with required destinations' do
EventMachine.run{ EventMachine.run{
@handler.add_get_request(@message_urls) handler.add_get_request(message_urls)
@handler.size.should == @message_urls.size handler.size.should == message_urls.size
EventMachine.stop EventMachine.stop
} }
end end
end end
describe 'processing a GET query' do describe 'processing a GET query' do
it 'should remove sucessful http requests from the queue' do it 'should remove sucessful http requests from the queue' do
request = FakeHttpRequest.new(:success) EventMachine::HttpRequest.stub!(:new).and_return(success)
request.should_receive(:get).and_return(request)
EventMachine::HttpRequest.stub!(:new).and_return(request)
EventMachine.run { EventMachine.run {
@handler.add_get_request("http://www.google.com/") handler.add_get_request("http://www.google.com/")
@handler.size.should == 1 handler.size.should == 1
@handler.process handler.process
@handler.size.should == 0 handler.size.should == 0
EventMachine.stop EventMachine.stop
} }
end end
it 'should only retry a bad request the correct number of times' do it 'should only retry a bad request the correct number of times' do
request = FakeHttpRequest.new(:failure) failure.should_receive(:get).exactly(MessageHandler::NUM_TRIES).times.and_return(failure)
request.should_receive(:get).exactly(MessageHandler::NUM_TRIES).times.and_return(request) EventMachine::HttpRequest.stub!(:new).and_return(failure)
EventMachine::HttpRequest.stub!(:new).and_return(request)
EventMachine.run { EventMachine.run {
@handler.add_get_request("http://asdfsdajfsdfbasdj.com/") handler.add_get_request("http://asdfsdajfsdfbasdj.com/")
@handler.size.should == 1 handler.size.should == 1
@handler.process handler.process
@handler.size.should == 0 handler.size.should == 0
EventMachine.stop EventMachine.stop
} }
@ -66,34 +61,37 @@ describe MessageHandler do
describe 'POST messages' do describe 'POST messages' do
it 'should be able to add a post message to the queue' do it 'should be able to add a post message to the queue' do
EventMachine::HttpRequest.stub!(:new).and_return(success)
EventMachine.run { EventMachine.run {
@handler.size.should ==0 handler.size.should ==0
@handler.add_post_request(@message_urls.first, @message_body) handler.add_post_request(message_urls.first, message_body)
@handler.size.should == 1 handler.size.should == 1
EventMachine.stop EventMachine.stop
} }
end end
it 'should be able to insert many posts into the queue' do it 'should be able to insert many posts into the queue' do
EventMachine::HttpRequest.stub!(:new).and_return(success)
EventMachine.run { EventMachine.run {
@handler.size.should == 0 handler.size.should == 0
@handler.add_post_request(@message_urls, @message_body) handler.add_post_request(message_urls, message_body)
@handler.size.should == @message_urls.size handler.size.should == message_urls.size
EventMachine.stop EventMachine.stop
} }
end end
it 'should post a single message to a given URL' do it 'should post a single message to a given URL' do
request = FakeHttpRequest.new(:success) success.should_receive(:post).and_return(success)
request.should_receive(:post).and_return(request) EventMachine::HttpRequest.stub!(:new).and_return(success)
EventMachine::HttpRequest.stub!(:new).and_return(request)
EventMachine.run{
@handler.add_post_request(@message_urls.first, @message_body) EventMachine.run{
@handler.size.should == 1 handler.add_post_request(message_urls.first, message_body)
@handler.process handler.size.should == 1
@handler.size.should == 0 handler.process
handler.size.should == 0
EventMachine.stop EventMachine.stop
@ -110,8 +108,8 @@ describe MessageHandler do
feed_location = "http://google.com/" feed_location = "http://google.com/"
EventMachine.run { EventMachine.run {
@handler.add_hub_notification(destination, feed_location) handler.add_hub_notification(destination, feed_location)
q = @handler.instance_variable_get(:@queue) q = handler.instance_variable_get(:@queue)
message = "" message = ""
q.pop{|m| message = m} q.pop{|m| message = m}
@ -127,35 +125,33 @@ describe MessageHandler do
describe "Mixed Queries" do describe "Mixed Queries" do
it 'should process both POST and GET requests in the same queue' do it 'should process both POST and GET requests in the same queue' do
request = FakeHttpRequest.new(:success) success.should_receive(:get).exactly(3).times.and_return(success)
request.should_receive(:get).exactly(3).times.and_return(request) success.should_receive(:post).exactly(3).times.and_return(success)
request.should_receive(:post).exactly(3).times.and_return(request) EventMachine::HttpRequest.stub!(:new).and_return(success)
EventMachine::HttpRequest.stub!(:new).and_return(request)
EventMachine.run{ EventMachine.run{
@handler.add_post_request(@message_urls,@message_body) handler.add_post_request(message_urls, message_body)
@handler.size.should == 3 handler.size.should == 3
@handler.add_get_request(@message_urls) handler.add_get_request(message_urls)
@handler.size.should == 6 handler.size.should == 6
@handler.process handler.process
timer = EventMachine::Timer.new(1) do timer = EventMachine::Timer.new(1) do
@handler.size.should == 0 handler.size.should == 0
EventMachine.stop EventMachine.stop
end end
} }
end end
it 'should be able to have seperate POST and GET have different callbacks' do it 'should be able to have seperate POST and GET have different callbacks' do
request = FakeHttpRequest.new(:success) success.should_receive(:get).exactly(1).times.and_return(success)
request.should_receive(:get).exactly(1).times.and_return(request) success.should_receive(:post).exactly(1).times.and_return(success)
request.should_receive(:post).exactly(1).times.and_return(request)
EventMachine::HttpRequest.stub!(:new).and_return(request) EventMachine::HttpRequest.stub!(:new).and_return(success)
EventMachine.run{ EventMachine.run{
@handler.add_post_request(@message_urls.first,@message_body) handler.add_post_request(message_urls.first, message_body)
@handler.add_get_request(@message_urls.first) handler.add_get_request(message_urls.first)
@handler.process handler.process
EventMachine.stop EventMachine.stop
} }

View file

@ -29,7 +29,6 @@ RSpec.configure do |config|
config.before(:each) do config.before(:each) do
stub_sockets stub_sockets
MessageHandler.any_instance.stubs(:add_post_request)
DatabaseCleaner.clean DatabaseCleaner.clean
end end
end end