summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorDominic Maraglia <dominic@puppetlabs.com>2011-06-10 14:35:38 -0700
committerDominic Maraglia <dominic@puppetlabs.com>2011-06-10 14:35:38 -0700
commita97c86e7d01384aa06f5d4d69da427fc355aebe7 (patch)
treefcfb00227026d0f7f53a97a70e1ba39602a92134 /spec
parent0b0a9be25f95f7dfd14bbcc9bf7c7f9b21531100 (diff)
parent381fa409207a1b0d26e7e55ea8cbe45a7e132fdf (diff)
downloadpuppet-a97c86e7d01384aa06f5d4d69da427fc355aebe7.tar.gz
puppet-a97c86e7d01384aa06f5d4d69da427fc355aebe7.tar.xz
puppet-a97c86e7d01384aa06f5d4d69da427fc355aebe7.zip
Merge branch 'ticket/2.6.x/6418'
Diffstat (limited to 'spec')
-rwxr-xr-xspec/integration/type_spec.rb11
-rwxr-xr-xspec/unit/type_spec.rb66
2 files changed, 77 insertions, 0 deletions
diff --git a/spec/integration/type_spec.rb b/spec/integration/type_spec.rb
index 4be01d558..9fd10485f 100755
--- a/spec/integration/type_spec.rb
+++ b/spec/integration/type_spec.rb
@@ -18,4 +18,15 @@ describe Puppet::Type do
type.provider(:myprovider).should equal(provider)
end
+
+ it "should not lose its provider parameter when it is reloaded" do
+ type = Puppet::Type.newtype(:reload_test_type)
+
+ provider = type.provide(:test_provider)
+
+ # reload it
+ type = Puppet::Type.newtype(:reload_test_type)
+
+ type.parameters.should include(:provider)
+ end
end
diff --git a/spec/unit/type_spec.rb b/spec/unit/type_spec.rb
index ca291c4fa..bbdaec3bc 100755
--- a/spec/unit/type_spec.rb
+++ b/spec/unit/type_spec.rb
@@ -164,6 +164,72 @@ describe Puppet::Type do
end
end
+ describe "when creating a provider" do
+ before :each do
+ @type = Puppet::Type.newtype(:provider_test_type)
+ end
+
+ after :each do
+ @type.provider_hash.clear
+ end
+
+ it "should create a subclass of Puppet::Provider for the provider" do
+ provider = @type.provide(:test_provider)
+
+ provider.ancestors.should include(Puppet::Provider)
+ end
+
+ it "should use a parent class if specified" do
+ parent_provider = @type.provide(:parent_provider)
+ child_provider = @type.provide(:child_provider, :parent => parent_provider)
+
+ child_provider.ancestors.should include(parent_provider)
+ end
+
+ it "should use a parent class if specified by name" do
+ parent_provider = @type.provide(:parent_provider)
+ child_provider = @type.provide(:child_provider, :parent => :parent_provider)
+
+ child_provider.ancestors.should include(parent_provider)
+ end
+
+ it "should raise an error when the parent class can't be found" do
+ expect {
+ @type.provide(:child_provider, :parent => :parent_provider)
+ }.to raise_error(Puppet::DevError, /Could not find parent provider.+parent_provider/)
+ end
+
+ it "should ensure its type has a 'provider' parameter" do
+ @type.provide(:test_provider)
+
+ @type.parameters.should include(:provider)
+ end
+
+ it "should remove a previously registered provider with the same name" do
+ old_provider = @type.provide(:test_provider)
+ new_provider = @type.provide(:test_provider)
+
+ old_provider.should_not equal(new_provider)
+ end
+
+ it "should register itself as a provider for the type" do
+ provider = @type.provide(:test_provider)
+
+ provider.should == @type.provider(:test_provider)
+ end
+
+ it "should create a provider when a provider with the same name previously failed" do
+ @type.provide(:test_provider) do
+ raise "failed to create this provider"
+ end rescue nil
+
+ provider = @type.provide(:test_provider)
+
+ provider.ancestors.should include(Puppet::Provider)
+ provider.should == @type.provider(:test_provider)
+ end
+ end
+
describe "when choosing a default provider" do
it "should choose the provider with the highest specificity" do
# Make a fake type