--- /dev/null
+#!/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
+