[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. 2.6.5-303-gfcfa26a

Matt Robinson matt at puppetlabs.com
Thu Mar 17 10:49:17 UTC 2011


The following commit has been merged in the upstream branch:
commit 285c4cc4b056b9c4990738c3d479d1a8993cf959
Author: Matt Robinson <matt at puppetlabs.com>
Date:   Wed Mar 9 16:17:17 2011 -0800

    (#5392) Give a better error when realizing a non-existant resource
    
    You can reproduce the error with a simple manifest
    
        Bogus_type <| title == 'foo' |>
    
    We used to fail because find_resource_type returned nil and we never
    checked if it was nil before calling methods on it.
    
    Reviewed-by: Max Martin <max at puppetlabs.com>

diff --git a/lib/puppet/parser/ast/collection.rb b/lib/puppet/parser/ast/collection.rb
index ef36b71..565b831 100644
--- a/lib/puppet/parser/ast/collection.rb
+++ b/lib/puppet/parser/ast/collection.rb
@@ -16,6 +16,7 @@ class Puppet::Parser::AST
       str, code = query && query.safeevaluate(scope)
 
       resource_type = scope.find_resource_type(@type)
+      fail "Resource type #{@type} doesn't exist" unless resource_type
       newcoll = Puppet::Parser::Collector.new(scope, resource_type.name, str, code, self.form)
 
       scope.compiler.add_collection(newcoll)
@@ -26,10 +27,10 @@ class Puppet::Parser::AST
         params = @override.collect { |param| param.safeevaluate(scope) }
         newcoll.add_override(
           :parameters => params,
-          :file => @file,
-          :line => @line,
-          :source => scope.source,        
-          :scope => scope
+          :file       => @file,
+          :line       => @line,
+          :source     => scope.source,
+          :scope      => scope
         )
       end
 
diff --git a/spec/unit/parser/ast/collection_spec.rb b/spec/unit/parser/ast/collection_spec.rb
index 392a2c0..cc33075 100755
--- a/spec/unit/parser/ast/collection_spec.rb
+++ b/spec/unit/parser/ast/collection_spec.rb
@@ -4,20 +4,21 @@ require File.dirname(__FILE__) + '/../../../spec_helper'
 
 describe Puppet::Parser::AST::Collection do
   before :each do
-    @scope = stub_everything 'scope'
-    @mytype = stub_everything('mytype')
-    @scope.stubs(:find_resource_type).returns @mytype
-    @compiler = stub_everything 'compile'
-    @scope.stubs(:compiler).returns(@compiler)
+    @mytype = Puppet::Resource::Type.new(:definition, "mytype")
+    @environment = Puppet::Node::Environment.new
+    @environment.known_resource_types.add @mytype
+
+    @compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("foonode", :environment => @environment))
+    @scope = Puppet::Parser::Scope.new(:compiler => @compiler)
 
     @overrides = stub_everything 'overrides'
     @overrides.stubs(:is_a?).with(Puppet::Parser::AST).returns(true)
-
   end
 
   it "should evaluate its query" do
     query = mock 'query'
     collection = Puppet::Parser::AST::Collection.new :query => query, :form => :virtual
+    collection.type = 'mytype'
 
     query.expects(:safeevaluate).with(@scope)
 
@@ -26,8 +27,8 @@ describe Puppet::Parser::AST::Collection do
 
   it "should instantiate a Collector for this type" do
     collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "test"
-    @test_type = stub 'type', :name => 'test'
-    @scope.expects(:find_resource_type).with('test').returns @test_type
+    @test_type = Puppet::Resource::Type.new(:definition, "test")
+    @environment.known_resource_types.add @test_type
 
     Puppet::Parser::Collector.expects(:new).with(@scope, "test", nil, nil, :virtual)
 
@@ -35,7 +36,7 @@ describe Puppet::Parser::AST::Collection do
   end
 
   it "should tell the compiler about this collector" do
-    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "test"
+    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "mytype"
     Puppet::Parser::Collector.stubs(:new).returns("whatever")
 
     @compiler.expects(:add_collection).with("whatever")
@@ -45,7 +46,7 @@ describe Puppet::Parser::AST::Collection do
 
   it "should evaluate overriden paramaters" do
     collector = stub_everything 'collector'
-    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "test", :override => @overrides
+    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "mytype", :override => @overrides
     Puppet::Parser::Collector.stubs(:new).returns(collector)
 
     @overrides.expects(:safeevaluate).with(@scope)
@@ -55,7 +56,7 @@ describe Puppet::Parser::AST::Collection do
 
   it "should tell the collector about overrides" do
     collector = mock 'collector'
-    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "test", :override => @overrides
+    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "mytype", :override => @overrides
     Puppet::Parser::Collector.stubs(:new).returns(collector)
 
     collector.expects(:add_override)
@@ -63,5 +64,8 @@ describe Puppet::Parser::AST::Collection do
     collection.evaluate(@scope)
   end
 
-
+  it "should fail when evaluating undefined resource types" do
+    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "bogus"
+    lambda { collection.evaluate(@scope) }.should raise_error "Resource type bogus doesn't exist"
+  end
 end

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list