Signed-off-by: Mo Morsi <[email protected]>
---
Local-branch: feature/master/7474
spec/unit/provider/web/curl_spec.rb | 104 +++++++++++++++++++++++++++++++++++
spec/unit/type/web_spec.rb | 44 +++++++++++++++
2 files changed, 148 insertions(+), 0 deletions(-)
create mode 100644 spec/unit/provider/web/curl_spec.rb
create mode 100644 spec/unit/type/web_spec.rb
diff --git a/spec/unit/provider/web/curl_spec.rb
b/spec/unit/provider/web/curl_spec.rb
new file mode 100644
index 0000000..1bb6f6c
--- /dev/null
+++ b/spec/unit/provider/web/curl_spec.rb
@@ -0,0 +1,104 @@
+#!/usr/bin/env rspec
+require 'spec_helper'
+
+provider_class = Puppet::Type.type(:web).provider(:curl)
+
+describe provider_class do
+ before :each do
+ @resource = Puppet::Resource.new(:web, 'foo')
+ @provider = provider_class.new(@resource)
+ end
+
+ def http_request(http_method, url)
+ @provider.method("#{http_method}=".to_sym).call url
+ end
+
+ ['get', 'post'].each do |http_method|
+ describe "##{http_method}" do
+ it "should issue #{http_method} request to uri" do
+ proc {
+ http_request http_method, "http://www.puppetlabs.com"
+ }.should_not raise_error(Puppet::Error)
+ end
+
+ it "should accept parameters for #{http_method} request to uri" do
+ proc {
+ @resource.stubs(:[]).returns(nil)
+ @resource.stubs(:[]).with(:parameters).returns({:q => 'puppet' })
+ @resource.stubs(:[]).with(:follow).returns(true)
+ http_request http_method, "http://www.google.com"
+ }.should_not raise_error(Puppet::Error)
+ end
+
+ it "should verify default success return http status code for
#{http_method} request to uri" do
+ proc {
+ http_request http_method, "http://foobar"
+ }.should raise_error(Puppet::Error)
+ end
+
+ it "should verify return http status code for #{http_method} request to
uri" do
+ proc {
+ expected_return_code = http_method == "get" ? '301' : '405'
+ @resource.stubs(:[]).returns(nil)
+ @resource.stubs(:[]).with(:follow).returns(false)
+ @resource.stubs(:[]).with(:returns).returns([expected_return_code])
+ http_request http_method, "http://google.com"
+ }.should_not raise_error(Puppet::Error)
+ end
+
+ it "should verify body contents for #{http_method} request to uri" do
+ proc {
+ @resource.stubs(:[]).returns(nil)
+
@resource.stubs(:[]).with(:verify).returns('.*http://docs.puppetlabs.com.*')
+ @resource.stubs(:[]).with(:follow).returns(true)
+ http_request http_method, "http://www.puppetlabs.com"
+ }.should_not raise_error(Puppet::Error)
+ end
+
+ # TODO figure out a good way to verify login/logout
+
+ it "should only issue #{http_method} request to uri if 'if' request is
true" do
+ query_result = Curl::Easy.new
+ Curl::Easy.expects(:web_request).times(2).returns(query_result)
+ query_result.expects(:valid_status_code?).returns(true)
+ @resource.stubs(:[]).returns(nil)
+ @resource.stubs(:[]).with(:if).returns({ 'http_method' => 'get',
+ 'uri' => 'http://google.com', 'follow' => true, 'returns' =>
['500'] })
+
+ http_request http_method, "http://www.puppetlabs.com"
+ end
+
+ it "should not issue #{http_method} request to uri if 'if' request is
false" do
+ query_result = Curl::Easy.new
+ Curl::Easy.expects(:web_request).times(1).returns(query_result)
+ query_result.expects(:valid_status_code?).returns(false)
+ @resource.stubs(:[]).returns(nil)
+ @resource.stubs(:[]).with(:if).returns({ 'http_method' => 'get',
+ 'uri' => 'http://google.com', 'follow' => true, 'returns' =>
['400'] })
+ http_request http_method, "http://www.puppetlabs.com"
+ end
+
+ it "should only issue #{http_method} request to uri if 'unless' request
is false" do
+ query_result = Curl::Easy.new
+ Curl::Easy.expects(:web_request).times(2).returns(query_result)
+ query_result.expects(:valid_status_code?).returns(false)
+ @resource.stubs(:[]).returns(nil)
+ @resource.stubs(:[]).with(:unless).returns({ 'http_method' => 'get',
+ 'uri' => 'http://google.com', 'follow' => true, 'returns' =>
['500'] })
+
+ http_request http_method, "http://www.puppetlabs.com"
+ end
+
+ it "should not issue #{http_method} request to uri if 'unless' request
is true" do
+ query_result = Curl::Easy.new
+ Curl::Easy.expects(:web_request).times(1).returns(query_result)
+ query_result.expects(:valid_status_code?).returns(true)
+ @resource.stubs(:[]).returns(nil)
+ @resource.stubs(:[]).with(:unless).returns({ 'http_method' => 'get',
+ 'uri' => 'http://google.com', 'follow' => true, 'returns' =>
['400'] })
+ http_request http_method, "http://www.puppetlabs.com"
+ end
+
+ end
+ end
+end
diff --git a/spec/unit/type/web_spec.rb b/spec/unit/type/web_spec.rb
new file mode 100644
index 0000000..c78ab83
--- /dev/null
+++ b/spec/unit/type/web_spec.rb
@@ -0,0 +1,44 @@
+#!/usr/bin/env rspec
+require 'spec_helper'
+
+host = Puppet::Type.type(:web)
+
+describe Puppet::Type.type(:web) do
+ before do
+ @class = host
+ end
+
+ it "should have :name be its namevar" do
+ @class.key_attributes.should == [:name]
+ end
+
+ describe "when validating attributes" do
+ [:parameters, :returns, :follow, :verify, :login, :logout, :unless].each
do |param|
+ it "should have a #{param} parameter" do
+ @class.attrtype(param).should == :param
+ end
+ end
+
+ [:get, :post ].each do |property|
+ it "should have a #{property} property" do
+ @class.attrtype(property).should == :property
+ end
+ end
+ end
+
+ describe "when validating values" do
+ [:get, :post ].each do |property|
+ it "should require a valid uri for #{property} requests" do
+ proc { @class.new(:name => "#{property}_uri", property.to_sym => "")
}.should raise_error(Puppet::Error,"Parameter #{property} failed: Specified uri
is not valid")
+ end
+
+ it "should require a valid returns for #{property} requests if
specified" do
+ proc { @class.new(:name => "#{property}_uri", property.to_sym =>
"http://www.puppetlabs.com", :returns => "invalid" ) }.should
raise_error(Puppet::Error,"Parameter returns failed: Invalid http status code
invalid specified")
+ end
+
+ it "should require a valid follow value for #{property} requests" do
+ proc { @class.new(:name => "#{property}_uri", property.to_sym =>
"http://www.puppetlabs.com", :follow => "invalid" ) }.should
raise_error(Puppet::Error,'Parameter follow failed: Invalid value "invalid".
Valid values are true, false. ')
+ end
+ end
+ end
+end
--
1.7.2.3
--
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en.