[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. 0.25.5-639-g8f94f35
test branch
puppet-dev at googlegroups.com
Wed Jul 14 10:32:00 UTC 2010
The following commit has been merged in the upstream branch:
commit 5401a7ca8550ade0443188b505a104ca5726ec80
Author: Luke Kanies <luke at reductivelabs.com>
Date: Sat Jan 30 23:51:59 2010 -0600
Adding strictness checking to resources
This is used for AST resources (and fixed the last
of the tests I broke in spec/).
Signed-off-by: Luke Kanies <luke at reductivelabs.com>
diff --git a/lib/puppet/parser/ast/resource.rb b/lib/puppet/parser/ast/resource.rb
index 5da40b3..c82e0b5 100644
--- a/lib/puppet/parser/ast/resource.rb
+++ b/lib/puppet/parser/ast/resource.rb
@@ -44,7 +44,8 @@ class Resource < AST::ResourceReference
:exported => self.exported,
:virtual => virt,
:source => scope.source,
- :scope => scope
+ :scope => scope,
+ :strict => true
)
# And then store the resource in the compiler.
diff --git a/lib/puppet/parser/resource.rb b/lib/puppet/parser/resource.rb
index 3f6d73d..2d71079 100644
--- a/lib/puppet/parser/resource.rb
+++ b/lib/puppet/parser/resource.rb
@@ -110,9 +110,6 @@ class Puppet::Parser::Resource < Puppet::Resource
def initialize(type, title, options)
@scope = options[:scope]
- self.relative_type = type
- self.title = title
-
@params = {}
# Define all of the parameters
if params = options[:params]
@@ -136,6 +133,13 @@ class Puppet::Parser::Resource < Puppet::Resource
@source ||= scope.source
+ self.relative_type = type
+ self.title = title
+
+ if strict? and ! resource_type
+ raise ArgumentError, "Invalid resource type #{type}"
+ end
+
tag(self.type)
tag(self.title) if valid_tag?(self.title.to_s)
end
diff --git a/lib/puppet/resource.rb b/lib/puppet/resource.rb
index 630e8a8..e29fecf 100644
--- a/lib/puppet/resource.rb
+++ b/lib/puppet/resource.rb
@@ -12,7 +12,7 @@ class Puppet::Resource
extend Puppet::Util::Pson
include Enumerable
- attr_accessor :file, :line, :catalog, :exported, :virtual, :validate_parameters
+ attr_accessor :file, :line, :catalog, :exported, :virtual, :validate_parameters, :strict
attr_reader :title, :namespaces
attr_writer :relative_type
@@ -138,7 +138,7 @@ class Puppet::Resource
end
end
- %w{exported virtual}.each do |m|
+ %w{exported virtual strict}.each do |m|
define_method(m+"?") do
self.send(m)
end
@@ -149,10 +149,7 @@ class Puppet::Resource
@parameters = {}
@namespaces = [""]
- (attributes[:parameters] || {}).each do |param, value|
- self[param] = value
- end
-
+ # Set things like namespaces and strictness first.
attributes.each do |attr, value|
next if attr == :parameters
send(attr.to_s + "=", value)
@@ -165,8 +162,17 @@ class Puppet::Resource
self.type = tmp_type
self.title = tmp_title
+ (attributes[:parameters] || {}).each do |param, value|
+ validate_parameter(param) if strict?
+ self[param] = value
+ end
+
tag(self.type)
tag(self.title) if valid_tag?(self.title)
+
+ if strict? and ! resource_type
+ raise ArgumentError, "Invalid resource type #{type}"
+ end
end
def ref
diff --git a/spec/unit/parser/ast/resource.rb b/spec/unit/parser/ast/resource.rb
index ef65f4c..40074c7 100755
--- a/spec/unit/parser/ast/resource.rb
+++ b/spec/unit/parser/ast/resource.rb
@@ -6,11 +6,11 @@ describe Puppet::Parser::AST::Resource do
ast = Puppet::Parser::AST
before :each do
- @title = stub_everything 'title'
- @compiler = stub_everything 'compiler', :environment => Puppet::Node::Environment.new
+ @title = Puppet::Parser::AST::String.new(:value => "mytitle")
+ @compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("mynode"))
@scope = Puppet::Parser::Scope.new(:compiler => @compiler)
@scope.stubs(:resource).returns(stub_everything)
- @resource = ast::Resource.new(:title => @title, :type => "Resource", :params => ast::ASTArray.new(:children => []) )
+ @resource = ast::Resource.new(:title => @title, :type => "file", :params => ast::ASTArray.new(:children => []) )
@resource.stubs(:qualified_type).returns("Resource")
end
@@ -23,73 +23,57 @@ describe Puppet::Parser::AST::Resource do
end
it "should evaluate its title" do
-
- @title.expects(:safeevaluate).with(@scope)
-
- @resource.evaluate(@scope)
+ @resource.evaluate(@scope)[0].title.should == "mytitle"
end
it "should flatten the titles array" do
- titles = stub 'titles'
- title_array = stub 'title_array', :is_a? => true
-
- titles.stubs(:safeevaluate).with(@scope).returns(title_array)
+ titles = []
+ %w{one two}.each do |title|
+ titles << Puppet::Parser::AST::String.new(:value => title)
+ end
- title_array.expects(:flatten).returns([])
+ array = Puppet::Parser::AST::ASTArray.new(:children => titles)
- @resource.title = titles
- @resource.evaluate(@scope)
+ @resource.title = array
+ result = @resource.evaluate(@scope).collect { |r| r.title }
+ result.should be_include("one")
+ result.should be_include("two")
end
- it "should create one resource objects per title" do
- titles = stub 'titles'
- title_array = stub 'title_array', :is_a? => true
+ it "should create and return one resource objects per title" do
+ titles = []
+ %w{one two}.each do |title|
+ titles << Puppet::Parser::AST::String.new(:value => title)
+ end
- title_array.stubs(:flatten).returns([@title])
- titles.stubs(:safeevaluate).with(@scope).returns(title_array)
+ array = Puppet::Parser::AST::ASTArray.new(:children => titles)
- @resource.title = titles
- result = @resource.evaluate(@scope)
- result[0].should be_instance_of(Puppet::Parser::Resource)
- result[0].title.should == @title
+ @resource.title = array
+ result = @resource.evaluate(@scope).collect { |r| r.title }
+ result.should be_include("one")
+ result.should be_include("two")
end
it "should handover resources to the compiler" do
- resource = stub 'resource'
- titles = stub 'titles'
- title_array = stub 'title_array', :is_a? => true
-
- title_array.stubs(:flatten).returns([@title])
- titles.stubs(:safeevaluate).with(@scope).returns(title_array)
- Puppet::Parser::Resource.stubs(:new).returns(resource)
-
- @compiler.expects(:add_resource).with(@scope, resource)
-
- @resource.title = titles
- @resource.evaluate(@scope)
- end
-
- it "should return the newly created resources" do
- resource = stub 'resource'
- titles = stub 'titles'
- title_array = stub 'title_array', :is_a? => true
+ titles = []
+ %w{one two}.each do |title|
+ titles << Puppet::Parser::AST::String.new(:value => title)
+ end
- title_array.stubs(:flatten).returns([@title])
- titles.stubs(:safeevaluate).with(@scope).returns(title_array)
+ array = Puppet::Parser::AST::ASTArray.new(:children => titles)
- @compiler.stubs(:add_resource)
+ @resource.title = array
+ result = @resource.evaluate(@scope)
- @resource.title = titles
- @resource.evaluate(@scope)[0].should be_instance_of(Puppet::Parser::Resource)
+ result.each do |res|
+ @compiler.catalog.resource(res.ref).should be_instance_of(Puppet::Parser::Resource)
+ end
end
-
it "should generate virtual resources if it is virtual" do
@resource.virtual = true
result = @resource.evaluate(@scope)
result[0].should be_virtual
-
- @resource.evaluate(@scope)
end
it "should generate virtual and exported resources if it is exported" do
diff --git a/spec/unit/resource.rb b/spec/unit/resource.rb
index 834a5b0..5b82c29 100755
--- a/spec/unit/resource.rb
+++ b/spec/unit/resource.rb
@@ -250,6 +250,20 @@ describe Puppet::Resource do
end
end
+ describe "when running in strict mode" do
+ it "should be strict" do
+ Puppet::Resource.new("file", "/path", :strict => true).should be_strict
+ end
+
+ it "should fail if invalid parameters are used" do
+ lambda { Puppet::Resource.new("file", "/path", :strict => true, :parameters => {:nosuchparam => "bar"}) }.should raise_error
+ end
+
+ it "should fail if the resource type cannot be resolved" do
+ lambda { Puppet::Resource.new("nosuchtype", "/path", :strict => true) }.should raise_error
+ end
+ end
+
describe "when managing parameters" do
before do
@resource = Puppet::Resource.new("file", "/my/file")
--
Puppet packaging for Debian
More information about the Pkg-puppet-devel
mailing list