a121abae3a7daf19ce3527995b353b9a8fd998d8
[packages/precise/mcollective.git] / spec / unit / rpc / request_spec.rb
1 #!/usr/bin/env rspec
2
3 require 'spec_helper'
4
5 module MCollective
6   module RPC
7     describe Request do
8       before(:each) do
9         @req = {:msgtime        => Time.now,
10                 :senderid        => "spec test",
11                 :requestid       => "12345",
12                 :callerid        => "rip"}
13
14         @req[:body] = {:action => "test",
15                        :data   => {:foo => "bar", :process_results => true},
16                        :agent  => "tester"}
17
18         @ddl = DDL.new("rspec", :agent, false)
19
20         @request = Request.new(@req, @ddl)
21       end
22
23       describe "#validate!" do
24         it "should validate the request using the supplied DDL" do
25           @ddl.expects(:validate_rpc_request).with("test", {:foo => "bar", :process_results => true})
26           @request.validate!
27         end
28       end
29
30       describe "#initialize" do
31         it "should set time" do
32           @request.time.should == @req[:msgtime]
33         end
34
35         it "should set action" do
36           @request.action.should == "test"
37         end
38
39         it "should set data" do
40           @request.data.should == {:foo => "bar", :process_results => true}
41         end
42
43         it "should set sender" do
44           @request.sender.should == "spec test"
45         end
46
47         it "should set agent" do
48           @request.agent.should == "tester"
49         end
50
51         it "should set uniqid" do
52           @request.uniqid.should == "12345"
53         end
54
55         it "should set caller" do
56           @request.caller.should == "rip"
57         end
58
59         it "should set unknown caller if none is supplied" do
60           @req.delete(:callerid)
61           Request.new(@req, @ddl).caller.should == "unknown"
62         end
63       end
64
65       describe "#include?" do
66         it "should correctly report on hash contents" do
67           @request.include?(:foo).should == true
68         end
69
70         it "should return false for non hash data" do
71           @req[:body][:data] = "foo"
72           Request.new(@req, @ddl).include?(:foo).should == false
73         end
74       end
75
76       describe "#should_respond?" do
77         it "should return true if the header is absent" do
78           @req[:body][:data].delete(:process_results)
79           Request.new(@req, @ddl).should_respond?.should == true
80         end
81
82         it "should return correct value" do
83           @req[:body][:data][:process_results] = false
84           Request.new(@req, @ddl).should_respond?.should == false
85         end
86       end
87
88       describe "#[]" do
89         it "should return nil for non hash data" do
90           @req[:body][:data] = "foo"
91           Request.new(@req, @ddl)["foo"].should == nil
92         end
93
94         it "should return correct data" do
95           @request[:foo].should == "bar"
96         end
97
98         it "should return nil for absent data" do
99           @request[:bar].should == nil
100         end
101       end
102
103       describe "#fetch" do
104         it "should return nil for non hash data" do
105           @req[:body][:data] = "foo"
106           Request.new(@req, @ddl)["foo"].should == nil
107         end
108
109         it "should fetch data with the correct default behavior" do
110           @request.fetch(:foo, "default").should == "bar"
111           @request.fetch(:rspec, "default").should == "default"
112         end
113       end
114
115       describe "#to_hash" do
116         it "should have the correct keys" do
117           @request.to_hash.keys.sort.should == [:action, :agent, :data]
118         end
119
120         it "should return the correct agent" do
121           @request.to_hash[:agent].should == "tester"
122         end
123
124         it "should return the correct action" do
125           @request.to_hash[:action].should == "test"
126         end
127
128         it "should return the correct data" do
129           @request.to_hash[:data].should == {:foo => "bar",
130                                              :process_results => true}
131         end
132       end
133     end
134   end
135 end
136