From 7e7c4c34317b7d6e7a29c51dc4a8f41d0afb4216 Mon Sep 17 00:00:00 2001 From: maxwell Date: Fri, 29 Oct 2010 14:26:11 -0700 Subject: [PATCH] refactored message handler spec --- lib/message_handler.rb | 4 + spec/controllers/publics_controller_spec.rb | 4 + spec/lib/message_handler_spec.rb | 116 ++++++++++---------- spec/spec_helper.rb | 1 - 4 files changed, 64 insertions(+), 61 deletions(-) diff --git a/lib/message_handler.rb b/lib/message_handler.rb index 5c32161c9..802981ce9 100644 --- a/lib/message_handler.rb +++ b/lib/message_handler.rb @@ -11,6 +11,10 @@ class MessageHandler @queue = EM::Queue.new end + def clear_queue + @queue = EM::Queue.new + end + def add_get_request(destinations) [*destinations].each{ |dest| @queue.push(Message.new(:get, dest))} end diff --git a/spec/controllers/publics_controller_spec.rb b/spec/controllers/publics_controller_spec.rb index 8f3aa6d68..04a443520 100644 --- a/spec/controllers/publics_controller_spec.rb +++ b/spec/controllers/publics_controller_spec.rb @@ -22,6 +22,10 @@ describe PublicsController do end describe '#receive' do + before do + EventMachine::HttpRequest.stub!(:new).and_return(FakeHttpRequest.new(:success)) + end + context 'success cases' do it 'should 200 on successful receipt of a request' do EM::run { diff --git a/spec/lib/message_handler_spec.rb b/spec/lib/message_handler_spec.rb index ab774b9e4..b0c3bc14e 100644 --- a/spec/lib/message_handler_spec.rb +++ b/spec/lib/message_handler_spec.rb @@ -5,58 +5,53 @@ require 'spec_helper' describe MessageHandler do - before do - unstub_mocha_stubs - end - after do - stub_sockets - MessageHandler.any_instance.stubs(:add_post_request) - end + let(:handler) {MessageHandler.new()} + let(:message_body) {"I want to pump you up"} + let(:message_urls) {["http://www.google.com/", "http://yahoo.com/", "http://foo.com/"]} + let(:success) {FakeHttpRequest.new(:success)} + let(:failure) {FakeHttpRequest.new(:failure)} before do - @handler = MessageHandler.new - @message_body = "I want to pump you up" - @message_urls = ["http://www.google.com/", "http://yahoo.com/", "http://foo.com/"] + handler.clear_queue + end + after(:all) do + handler.clear_queue end describe 'GET messages' do describe 'creating a GET query' do it 'should be able to add a GET query to the queue with required destinations' do EventMachine.run{ - @handler.add_get_request(@message_urls) - @handler.size.should == @message_urls.size + handler.add_get_request(message_urls) + handler.size.should == message_urls.size EventMachine.stop } end - end describe 'processing a GET query' do it 'should remove sucessful http requests from the queue' do - request = FakeHttpRequest.new(:success) - request.should_receive(:get).and_return(request) - EventMachine::HttpRequest.stub!(:new).and_return(request) + EventMachine::HttpRequest.stub!(:new).and_return(success) EventMachine.run { - @handler.add_get_request("http://www.google.com/") - @handler.size.should == 1 - @handler.process - @handler.size.should == 0 + handler.add_get_request("http://www.google.com/") + handler.size.should == 1 + handler.process + handler.size.should == 0 EventMachine.stop } end it 'should only retry a bad request the correct number of times' do - request = FakeHttpRequest.new(:failure) - request.should_receive(:get).exactly(MessageHandler::NUM_TRIES).times.and_return(request) - EventMachine::HttpRequest.stub!(:new).and_return(request) + failure.should_receive(:get).exactly(MessageHandler::NUM_TRIES).times.and_return(failure) + EventMachine::HttpRequest.stub!(:new).and_return(failure) EventMachine.run { - @handler.add_get_request("http://asdfsdajfsdfbasdj.com/") - @handler.size.should == 1 - @handler.process - @handler.size.should == 0 + handler.add_get_request("http://asdfsdajfsdfbasdj.com/") + handler.size.should == 1 + handler.process + handler.size.should == 0 EventMachine.stop } @@ -66,34 +61,37 @@ describe MessageHandler do describe 'POST messages' do it 'should be able to add a post message to the queue' do + EventMachine::HttpRequest.stub!(:new).and_return(success) + EventMachine.run { - @handler.size.should ==0 - @handler.add_post_request(@message_urls.first, @message_body) - @handler.size.should == 1 + handler.size.should ==0 + handler.add_post_request(message_urls.first, message_body) + handler.size.should == 1 EventMachine.stop } end it 'should be able to insert many posts into the queue' do + EventMachine::HttpRequest.stub!(:new).and_return(success) + EventMachine.run { - @handler.size.should == 0 - @handler.add_post_request(@message_urls, @message_body) - @handler.size.should == @message_urls.size + handler.size.should == 0 + handler.add_post_request(message_urls, message_body) + handler.size.should == message_urls.size EventMachine.stop } end it 'should post a single message to a given URL' do - request = FakeHttpRequest.new(:success) - request.should_receive(:post).and_return(request) - EventMachine::HttpRequest.stub!(:new).and_return(request) - EventMachine.run{ + success.should_receive(:post).and_return(success) + EventMachine::HttpRequest.stub!(:new).and_return(success) - @handler.add_post_request(@message_urls.first, @message_body) - @handler.size.should == 1 - @handler.process - @handler.size.should == 0 + EventMachine.run{ + handler.add_post_request(message_urls.first, message_body) + handler.size.should == 1 + handler.process + handler.size.should == 0 EventMachine.stop @@ -110,8 +108,8 @@ describe MessageHandler do feed_location = "http://google.com/" EventMachine.run { - @handler.add_hub_notification(destination, feed_location) - q = @handler.instance_variable_get(:@queue) + handler.add_hub_notification(destination, feed_location) + q = handler.instance_variable_get(:@queue) message = "" q.pop{|m| message = m} @@ -127,35 +125,33 @@ describe MessageHandler do describe "Mixed Queries" do it 'should process both POST and GET requests in the same queue' do - request = FakeHttpRequest.new(:success) - request.should_receive(:get).exactly(3).times.and_return(request) - request.should_receive(:post).exactly(3).times.and_return(request) - EventMachine::HttpRequest.stub!(:new).and_return(request) + success.should_receive(:get).exactly(3).times.and_return(success) + success.should_receive(:post).exactly(3).times.and_return(success) + EventMachine::HttpRequest.stub!(:new).and_return(success) EventMachine.run{ - @handler.add_post_request(@message_urls,@message_body) - @handler.size.should == 3 - @handler.add_get_request(@message_urls) - @handler.size.should == 6 - @handler.process + handler.add_post_request(message_urls, message_body) + handler.size.should == 3 + handler.add_get_request(message_urls) + handler.size.should == 6 + handler.process timer = EventMachine::Timer.new(1) do - @handler.size.should == 0 + handler.size.should == 0 EventMachine.stop end } end it 'should be able to have seperate POST and GET have different callbacks' do - request = FakeHttpRequest.new(:success) - request.should_receive(:get).exactly(1).times.and_return(request) - request.should_receive(:post).exactly(1).times.and_return(request) + success.should_receive(:get).exactly(1).times.and_return(success) + success.should_receive(:post).exactly(1).times.and_return(success) - EventMachine::HttpRequest.stub!(:new).and_return(request) + EventMachine::HttpRequest.stub!(:new).and_return(success) EventMachine.run{ - @handler.add_post_request(@message_urls.first,@message_body) - @handler.add_get_request(@message_urls.first) - @handler.process + handler.add_post_request(message_urls.first, message_body) + handler.add_get_request(message_urls.first) + handler.process EventMachine.stop } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3f6710bdc..e4cf866c0 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -29,7 +29,6 @@ RSpec.configure do |config| config.before(:each) do stub_sockets - MessageHandler.any_instance.stubs(:add_post_request) DatabaseCleaner.clean end end