summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorLuke Kanies <luke@puppetlabs.com>2011-04-12 21:08:57 -0700
committerLuke Kanies <luke@puppetlabs.com>2011-07-15 11:15:52 -0700
commit1cbe2ad70eddbf00ef2d3127a9ffcc9f220ee277 (patch)
treead8927ebc495f8f7536f41722c852d7289a483d3 /spec
parentb1526216d1e47726bae78a884a0db2666101e34a (diff)
downloadpuppet-1cbe2ad70eddbf00ef2d3127a9ffcc9f220ee277.tar.gz
puppet-1cbe2ad70eddbf00ef2d3127a9ffcc9f220ee277.tar.xz
puppet-1cbe2ad70eddbf00ef2d3127a9ffcc9f220ee277.zip
(7080) Adding json support to Indirector Request
We'll be using this to do RPC over mcollective. Reviewed-by: Daniel Pittman <daniel@puppetlabs.com> Reviewed-by: Nick Lewis <nick@puppetlabs.com> Signed-off-by: Luke Kanies <luke@puppetlabs.com>
Diffstat (limited to 'spec')
-rwxr-xr-xspec/unit/indirector/request_spec.rb99
1 files changed, 99 insertions, 0 deletions
diff --git a/spec/unit/indirector/request_spec.rb b/spec/unit/indirector/request_spec.rb
index 87b9af438..152fe5871 100755
--- a/spec/unit/indirector/request_spec.rb
+++ b/spec/unit/indirector/request_spec.rb
@@ -301,4 +301,103 @@ describe Puppet::Indirector::Request do
lambda { @request.query_string }.should raise_error(ArgumentError)
end
end
+
+ describe "when converting to json" do
+ before do
+ @request = Puppet::Indirector::Request.new(:facts, :find, "foo")
+ end
+
+ it "should produce a hash with the document_type set to 'request'" do
+ PSON.parse(@request.to_pson)["document_type"].should == "Puppet::Indirector::Request"
+ end
+
+ it "should add its data under the 'data' attribute in the hash" do
+ PSON.parse(@request.to_pson)["data"].should be_instance_of(Hash)
+ end
+
+ it "should set the 'key'" do
+ PSON.parse(@request.to_pson)["data"]['key'].should == "foo"
+ end
+
+ it "should include an attribute for its indirection name" do
+ PSON.parse(@request.to_pson)["data"]['type'].should == "facts"
+ end
+
+ it "should include a 'method' attribute set to its method" do
+ PSON.parse(@request.to_pson)["data"]['method'].should == "find"
+ end
+
+ it "should add all attributes under the 'attributes' attribute" do
+ @request.ip = "127.0.0.1"
+ PSON.parse(@request.to_pson)["data"]['attributes']['ip'].should == "127.0.0.1"
+ end
+
+ it "should add all options under the 'attributes' attribute" do
+ @request.options["opt"] = "value"
+ PSON.parse(@request.to_pson)["data"]['attributes']['opt'].should == "value"
+ end
+
+ it "should include the instance if provided" do
+ facts = Puppet::Node::Facts.new("foo")
+ @request.instance = facts
+ PSON.parse(@request.to_pson)["data"]['instance'].should be_instance_of(Puppet::Node::Facts)
+ end
+ end
+
+ describe "when converting from json" do
+ before do
+ @request = Puppet::Indirector::Request.new(:facts, :find, "foo")
+ @klass = Puppet::Indirector::Request
+ @format = Puppet::Network::FormatHandler.format('pson')
+ end
+
+ def from_json(json)
+ @format.intern(Puppet::Indirector::Request, json)
+ end
+
+ it "should set the 'key'" do
+ from_json(@request.to_pson).key.should == "foo"
+ end
+
+ it "should fail if no key is provided" do
+ json = PSON.parse(@request.to_pson)
+ json['data'].delete("key")
+ lambda { from_json(json.to_pson) }.should raise_error(ArgumentError)
+ end
+
+ it "should set its indirector name" do
+ from_json(@request.to_pson).indirection_name.should == :facts
+ end
+
+ it "should fail if no type is provided" do
+ json = PSON.parse(@request.to_pson)
+ json['data'].delete("type")
+ lambda { from_json(json.to_pson) }.should raise_error(ArgumentError)
+ end
+
+ it "should set its method" do
+ from_json(@request.to_pson).method.should == "find"
+ end
+
+ it "should fail if no method is provided" do
+ json = PSON.parse(@request.to_pson)
+ json['data'].delete("method")
+ lambda { from_json(json.to_pson) }.should raise_error(ArgumentError)
+ end
+
+ it "should initialize with all attributes and options" do
+ @request.ip = "127.0.0.1"
+ @request.options["opt"] = "value"
+ result = from_json(@request.to_pson)
+ result.options[:opt].should == "value"
+ result.ip.should == "127.0.0.1"
+ end
+
+ it "should set its instance as an instance if one is provided" do
+ facts = Puppet::Node::Facts.new("foo")
+ @request.instance = facts
+ result = from_json(@request.to_pson)
+ result.instance.should be_instance_of(Puppet::Node::Facts)
+ end
+ end
end