X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=spec%2Funit%2Frpc%2Frequest_spec.rb;fp=spec%2Funit%2Frpc%2Frequest_spec.rb;h=a121abae3a7daf19ce3527995b353b9a8fd998d8;hb=b87d2f4e68281062df1913440ca5753ae63314a9;hp=0000000000000000000000000000000000000000;hpb=ab0ea530b8ac956091f17b104ab2311336cfc250;p=packages%2Fprecise%2Fmcollective.git diff --git a/spec/unit/rpc/request_spec.rb b/spec/unit/rpc/request_spec.rb new file mode 100755 index 0000000..a121aba --- /dev/null +++ b/spec/unit/rpc/request_spec.rb @@ -0,0 +1,136 @@ +#!/usr/bin/env rspec + +require 'spec_helper' + +module MCollective + module RPC + describe Request do + before(:each) do + @req = {:msgtime => Time.now, + :senderid => "spec test", + :requestid => "12345", + :callerid => "rip"} + + @req[:body] = {:action => "test", + :data => {:foo => "bar", :process_results => true}, + :agent => "tester"} + + @ddl = DDL.new("rspec", :agent, false) + + @request = Request.new(@req, @ddl) + end + + describe "#validate!" do + it "should validate the request using the supplied DDL" do + @ddl.expects(:validate_rpc_request).with("test", {:foo => "bar", :process_results => true}) + @request.validate! + end + end + + describe "#initialize" do + it "should set time" do + @request.time.should == @req[:msgtime] + end + + it "should set action" do + @request.action.should == "test" + end + + it "should set data" do + @request.data.should == {:foo => "bar", :process_results => true} + end + + it "should set sender" do + @request.sender.should == "spec test" + end + + it "should set agent" do + @request.agent.should == "tester" + end + + it "should set uniqid" do + @request.uniqid.should == "12345" + end + + it "should set caller" do + @request.caller.should == "rip" + end + + it "should set unknown caller if none is supplied" do + @req.delete(:callerid) + Request.new(@req, @ddl).caller.should == "unknown" + end + end + + describe "#include?" do + it "should correctly report on hash contents" do + @request.include?(:foo).should == true + end + + it "should return false for non hash data" do + @req[:body][:data] = "foo" + Request.new(@req, @ddl).include?(:foo).should == false + end + end + + describe "#should_respond?" do + it "should return true if the header is absent" do + @req[:body][:data].delete(:process_results) + Request.new(@req, @ddl).should_respond?.should == true + end + + it "should return correct value" do + @req[:body][:data][:process_results] = false + Request.new(@req, @ddl).should_respond?.should == false + end + end + + describe "#[]" do + it "should return nil for non hash data" do + @req[:body][:data] = "foo" + Request.new(@req, @ddl)["foo"].should == nil + end + + it "should return correct data" do + @request[:foo].should == "bar" + end + + it "should return nil for absent data" do + @request[:bar].should == nil + end + end + + describe "#fetch" do + it "should return nil for non hash data" do + @req[:body][:data] = "foo" + Request.new(@req, @ddl)["foo"].should == nil + end + + it "should fetch data with the correct default behavior" do + @request.fetch(:foo, "default").should == "bar" + @request.fetch(:rspec, "default").should == "default" + end + end + + describe "#to_hash" do + it "should have the correct keys" do + @request.to_hash.keys.sort.should == [:action, :agent, :data] + end + + it "should return the correct agent" do + @request.to_hash[:agent].should == "tester" + end + + it "should return the correct action" do + @request.to_hash[:action].should == "test" + end + + it "should return the correct data" do + @request.to_hash[:data].should == {:foo => "bar", + :process_results => true} + end + end + end + end +end +