refactored message handler spec
This commit is contained in:
parent
ce805c8167
commit
7e7c4c3431
4 changed files with 64 additions and 61 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue