On Mar 1, 2009, at 11:59 AM, Brice Figureau wrote:
>
> Signed-off-by: Brice Figureau <[email protected]>
> ---
> spec/unit/parser/ast/collection.rb | 63 ++++++++++
Do these tests replace test/ tests? This is a new file, so it seems
possible.
>
> spec/unit/parser/collector.rb | 176 ++++++++++++++++++++
> +++------
> test/data/snippets/collection_override.pp | 8 ++
> test/language/snippets.rb | 6 +
> 4 files changed, 216 insertions(+), 37 deletions(-)
> create mode 100755 spec/unit/parser/ast/collection.rb
> create mode 100644 test/data/snippets/collection_override.pp
>
> diff --git a/spec/unit/parser/ast/collection.rb b/spec/unit/parser/
> ast/collection.rb
> new file mode 100755
> index 0000000..c141bd7
> --- /dev/null
> +++ b/spec/unit/parser/ast/collection.rb
> @@ -0,0 +1,63 @@
> +#!/usr/bin/env ruby
> +
> +require File.dirname(__FILE__) + '/../../../spec_helper'
> +
> +describe Puppet::Parser::AST::Collection do
> + before :each do
> + @scope = stub_everything 'scope'
> + @compiler = stub_everything 'compile'
> + @scope.stubs(:compiler).returns(@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
> +
> + query.expects(:safeevaluate).with(@scope)
> +
> + collection.evaluate(@scope)
> + end
> +
> + it "should instantiate a Collector for this type" do
> + collection = Puppet::Parser::AST::Collection.new :form
> => :virtual, :type => "test"
> +
> + Puppet::Parser::Collector.expects(:new).with(@scope,
> "test", nil, nil, :virtual)
> +
> + collection.evaluate(@scope)
> + end
> +
> + it "should tell the compiler about this collector" do
> + collection = Puppet::Parser::AST::Collection.new :form
> => :virtual, :type => "test"
> + Puppet::Parser::Collector.stubs(:new).returns("whatever")
> +
> + @compiler.expects(:add_collection).with("whatever")
> +
> + collection.evaluate(@scope)
> + end
> +
> + it "should evaluate overriden paramaters" do
> + collector = stub_everything 'collector'
> + collection = Puppet::Parser::AST::Collection.new :form
> => :virtual, :type => "test", :override => @overrides
> + Puppet::Parser::Collector.stubs(:new).returns(collector)
> +
> + @overrides.expects(:safeevaluate).with(@scope)
> +
> + collection.evaluate(@scope)
> + end
> +
> + it "should tell the collector about overrides" do
> + collector = mock 'collector'
> + collection = Puppet::Parser::AST::Collection.new :form
> => :virtual, :type => "test", :override => @overrides
> + Puppet::Parser::Collector.stubs(:new).returns(collector)
> +
> + collector.expects(:add_override)
> +
> + collection.evaluate(@scope)
> + end
> +
> +
> +end
> diff --git a/spec/unit/parser/collector.rb b/spec/unit/parser/
> collector.rb
> index f92b881..4756204 100755
> --- a/spec/unit/parser/collector.rb
> +++ b/spec/unit/parser/collector.rb
> @@ -39,6 +39,14 @@ describe Puppet::Parser::Collector, "when
> initializing" do
> @collector = Puppet::Parser::Collector.new(@scope,
> "resource::type", @equery, @vquery, @form)
> @collector.type.should == "Resource::Type"
> end
> +
> + it "should accept an optional resource override" do
> + @collector = Puppet::Parser::Collector.new(@scope,
> "resource::type", @equery, @vquery, @form)
> + override = { :params => "whatever" }
> + @collector.add_override(override)
> + @collector.overrides.should equal(override)
> + end
> +
> end
>
> describe Puppet::Parser::Collector, "when collecting specific
> virtual resources" do
> @@ -59,8 +67,9 @@ describe Puppet::Parser::Collector, "when
> collecting specific virtual resources"
>
> it "should mark matched resources as non-virtual" do
> @collector.resources = ["File[virtual1]", "File[virtual2]"]
> - one = mock 'one'
> + one = stub_everything 'one'
> one.expects(:virtual=).with(false)
> +
>
> @scope.stubs(:findresource).with("File[virtual1]").returns(one)
>
> @scope.stubs(:findresource).with("File[virtual2]").returns(nil)
> @collector.evaluate
> @@ -68,8 +77,7 @@ describe Puppet::Parser::Collector, "when
> collecting specific virtual resources"
>
> it "should return matched resources" do
> @collector.resources = ["File[virtual1]", "File[virtual2]"]
> - one = mock 'one'
> - one.stubs(:virtual=)
> + one = stub_everything 'one'
>
> @scope.stubs(:findresource).with("File[virtual1]").returns(one)
>
> @scope.stubs(:findresource).with("File[virtual2]").returns(nil)
> @collector.evaluate.should == [one]
> @@ -77,8 +85,7 @@ describe Puppet::Parser::Collector, "when
> collecting specific virtual resources"
>
> it "should delete itself from the compile's collection list if
> it has found all of its resources" do
> @collector.resources = ["File[virtual1]"]
> - one = mock 'one'
> - one.stubs(:virtual=)
> + one = stub_everything 'one'
> @compiler.expects(:delete_collection).with(@collector)
> @scope.expects(:compiler).returns(@compiler)
>
> @scope.stubs(:findresource).with("File[virtual1]").returns(one)
> @@ -87,15 +94,14 @@ describe Puppet::Parser::Collector, "when
> collecting specific virtual resources"
>
> it "should not delete itself from the compile's collection list
> if it has unfound resources" do
> @collector.resources = ["File[virtual1]"]
> - one = mock 'one'
> - one.stubs(:virtual=)
> + one = stub_everything 'one'
> @compiler.expects(:delete_collection).never
>
> @scope.stubs(:findresource).with("File[virtual1]").returns(nil)
> @collector.evaluate
> end
> end
>
> -describe Puppet::Parser::Collector, "when collecting virtual
> resources" do
> +describe Puppet::Parser::Collector, "when collecting virtual and
> catalog resources" do
> before do
> @scope = mock 'scope'
> @compiler = mock 'compile'
> @@ -106,12 +112,18 @@ describe Puppet::Parser::Collector, "when
> collecting virtual resources" do
> @collector = Puppet::Parser::Collector.new(@scope,
> @resource_type, nil, @vquery, :virtual)
> end
>
> - it "should find all resources matching the vquery" do
> - one = stub 'one', :type => "Mytype", :virtual? => true
> - two = stub 'two', :type => "Mytype", :virtual? => true
> + it "should find all virtual resources matching the vquery" do
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true
> + two = stub_everything 'two', :type => "Mytype", :virtual?
> => true
>
> - one.stubs(:virtual=)
> - two.stubs(:virtual=)
> + @compiler.expects(:resources).returns([one, two])
> +
> + @collector.evaluate.should == [one, two]
> + end
> +
> + it "should find all non-virtual resources matching the vquery" do
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => false
> + two = stub_everything 'two', :type => "Mytype", :virtual?
> => false
>
> @compiler.expects(:resources).returns([one, two])
>
> @@ -119,7 +131,7 @@ describe Puppet::Parser::Collector, "when
> collecting virtual resources" do
> end
>
> it "should mark all matched resources as non-virtual" do
> - one = stub 'one', :type => "Mytype", :virtual? => true
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true
>
> one.expects(:virtual=).with(false)
>
> @@ -129,11 +141,8 @@ describe Puppet::Parser::Collector, "when
> collecting virtual resources" do
> end
>
> it "should return matched resources" do
> - one = stub 'one', :type => "Mytype", :virtual? => true
> - two = stub 'two', :type => "Mytype", :virtual? => true
> -
> - one.stubs(:virtual=)
> - two.stubs(:virtual=)
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true
> + two = stub_everything 'two', :type => "Mytype", :virtual?
> => true
>
> @compiler.expects(:resources).returns([one, two])
>
> @@ -141,8 +150,8 @@ describe Puppet::Parser::Collector, "when
> collecting virtual resources" do
> end
>
> it "should return all resources of the correct type if there is
> no virtual query" do
> - one = stub 'one', :type => "Mytype", :virtual? => true
> - two = stub 'two', :type => "Mytype", :virtual? => true
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true
> + two = stub_everything 'two', :type => "Mytype", :virtual?
> => true
>
> one.expects(:virtual=).with(false)
> two.expects(:virtual=).with(false)
> @@ -155,8 +164,8 @@ describe Puppet::Parser::Collector, "when
> collecting virtual resources" do
> end
>
> it "should not return or mark resources of a different type" do
> - one = stub 'one', :type => "Mytype", :virtual? => true
> - two = stub 'two', :type => :other, :virtual? => true
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true
> + two = stub_everything 'two', :type => :other, :virtual? =>
> true
>
> one.expects(:virtual=).with(false)
> two.expects(:virtual=).never
> @@ -166,23 +175,84 @@ describe Puppet::Parser::Collector, "when
> collecting virtual resources" do
> @collector.evaluate.should == [one]
> end
>
> - it "should not return or mark non-virtual resources" do
> - one = stub 'one', :type => "Mytype", :virtual? => false
> - two = stub 'two', :type => :other, :virtual? => false
> + it "should create a resource with overriden parameters" do
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true, :title => "test"
> + param = stub 'param'
> + @compiler.stubs(:add_override)
>
> - one.expects(:virtual=).never
> - two.expects(:virtual=).never
> + @compiler.expects(:resources).returns([one])
>
> - @compiler.expects(:resources).returns([one, two])
> + @collector.add_override(:params => param )
> + Puppet::Parser::Resource.expects(:new).with { |h|
> + h[:params] == param
> + }
> +
> + @collector.evaluate
> + end
> +
> + it "should define a new allow all child_of? on overriden
> resource" do
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true, :title => "test"
> + param = stub 'param'
> + source = stub 'source'
> + @compiler.stubs(:add_override)
> +
> + @compiler.expects(:resources).returns([one])
> +
> + @collector.add_override(:params => param, :source => source )
> + Puppet::Parser::Resource.stubs(:new)
> +
> + source.expects(:meta_def).with { |name,block| name
> == :child_of? }
> +
> + @collector.evaluate
> + end
> +
> +
> + it "should not override already overriden resources for this
> same collection in a previous run" do
I see: This is why the @collected exists.
It seems like there should be a cleaner way to do this, but... This is
certainly the easiest. Seems messy, but I don't see a better way.
>
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true, :title => "test"
> + param = stub 'param'
> + @compiler.stubs(:add_override)
> +
> + @compiler.expects(:resources).at_least(2).returns([one])
> +
> + @collector.add_override(:params => param )
> + Puppet::Parser::Resource.expects(:new).once.with { |h|
> + h[:params] == param
> + }
> +
> + @collector.evaluate
> +
> + @collector.evaluate
> + end
> +
> + it "should not return resources that were collected in a
> previous run of this collector" do
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true, :title => "test"
> + @compiler.stubs(:resources).returns([one])
> +
> + @collector.evaluate
>
> @collector.evaluate.should be_false
> end
>
> +
> + it "should tell the compiler about the overriden resources" do
> + one = stub_everything 'one', :type => "Mytype", :virtual?
> => true, :title => "test"
> + param = stub 'param'
> +
> + one.expects(:virtual=).with(false)
> + @compiler.expects(:resources).returns([one])
> + @collector.add_override(:params => param )
> + Puppet::Parser::Resource.stubs(:new).returns("whatever")
> +
> + @compiler.expects(:add_override).with("whatever")
> +
> + @collector.evaluate
> + end
> +
> it "should not return or mark non-matching resources" do
> @collector.vquery = proc { |res| res.name == :one }
>
> - one = stub 'one', :name => :one, :type =>
> "Mytype", :virtual? => true
> - two = stub 'two', :name => :two, :type =>
> "Mytype", :virtual? => true
> + one = stub_everything 'one', :name => :one, :type =>
> "Mytype", :virtual? => true
> + two = stub_everything 'two', :name => :two, :type =>
> "Mytype", :virtual? => true
>
> one.expects(:virtual=).with(false)
> two.expects(:virtual=).never
> @@ -237,8 +307,8 @@ describe Puppet::Parser::Collector, "when
> collecting exported resources" do
> it "should return all matching resources from the current
> compile and mark them non-virtual and non-exported" do
> stub_rails(true)
>
> - one = stub 'one', :type => "Mytype", :virtual? =>
> true, :exported? => true
> - two = stub 'two', :type => "Mytype", :virtual? =>
> true, :exported? => true
> + one = stub 'one', :type => "Mytype", :virtual? =>
> true, :exported? => true, :ref => "one"
> + two = stub 'two', :type => "Mytype", :virtual? =>
> true, :exported? => true, :ref => "two"
>
> one.stubs(:exported=)
> one.stubs(:virtual=)
> @@ -253,7 +323,7 @@ describe Puppet::Parser::Collector, "when
> collecting exported resources" do
> it "should mark all returned resources as not virtual" do
> stub_rails(true)
>
> - one = stub 'one', :type => "Mytype", :virtual? =>
> true, :exported? => true
> + one = stub 'one', :type => "Mytype", :virtual? =>
> true, :exported? => true, :ref => "one"
>
> one.stubs(:exported=)
> one.expects(:virtual=).with(false)
> @@ -267,13 +337,14 @@ describe Puppet::Parser::Collector, "when
> collecting exported resources" do
> stub_rails()
> Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
>
> - one = stub 'one', :restype => "Mytype", :title =>
> "one", :virtual? => true, :exported? => true
> + one = stub 'one', :restype => "Mytype", :title =>
> "one", :virtual? => true, :exported? => true, :ref => "one"
> Puppet::Rails::Resource.stubs(:find).returns([one])
>
> resource = mock 'resource'
> one.expects(:to_resource).with(@scope).returns(resource)
> resource.stubs(:exported=)
> resource.stubs(:virtual=)
> + resource.stubs(:ref)
>
> @compiler.stubs(:resources).returns([])
> @scope.stubs(:findresource).returns(nil)
> @@ -283,17 +354,47 @@ describe Puppet::Parser::Collector, "when
> collecting exported resources" do
> @collector.evaluate.should == [resource]
> end
>
> + it "should override all exported collected resources if
> collector has an override" do
Good catch. This is an interesting problem, because you could have
two overrides across different hosts that conflict. I think we can
leave it in for now and just say 'there be dragons', but it's going to
come up, you can bet. Crazy users. :)
>
> + stub_rails()
> + Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
> +
> + one = stub 'one', :restype => "Mytype", :title =>
> "one", :virtual? => true, :exported? => true, :ref => "one"
> + Puppet::Rails::Resource.stubs(:find).returns([one])
> +
> + resource = mock 'resource'
> + one.expects(:to_resource).with(@scope).returns(resource)
> + resource.stubs(:exported=)
> + resource.stubs(:virtual=)
> + resource.stubs(:ref)
> + resource.stubs(:title)
> +
> + @compiler.stubs(:resources).returns([])
> + @scope.stubs(:findresource).returns(nil)
> +
> + param = stub 'param'
> + @compiler.stubs(:add_override)
> + @compiler.stubs(:add_resource)
> +
> + @collector.add_override(:params => param )
> + Puppet::Parser::Resource.expects(:new).once.with { |h|
> + h[:params] == param
> + }
> +
> + @collector.evaluate
> + end
> +
> it "should store converted resources in the compile's resource
> list" do
> stub_rails()
> Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
>
> - one = stub 'one', :restype => "Mytype", :title =>
> "one", :virtual? => true, :exported? => true
> + one = stub 'one', :restype => "Mytype", :title =>
> "one", :virtual? => true, :exported? => true, :ref => "one"
> Puppet::Rails::Resource.stubs(:find).returns([one])
>
> resource = mock 'resource'
> one.expects(:to_resource).with(@scope).returns(resource)
> resource.stubs(:exported=)
> resource.stubs(:virtual=)
> + resource.stubs(:ref)
>
> @compiler.stubs(:resources).returns([])
> @scope.stubs(:findresource).returns(nil)
> @@ -308,13 +409,14 @@ describe Puppet::Parser::Collector, "when
> collecting exported resources" do
> stub_rails()
> Puppet::Rails::Host.stubs(:find_by_name).returns(nil)
>
> - one = stub 'one', :restype => "Mytype", :title =>
> "one", :virtual? => true, :exported? => true
> + one = stub 'one', :restype => "Mytype", :title =>
> "one", :virtual? => true, :exported? => true, :ref => "one"
> Puppet::Rails::Resource.stubs(:find).returns([one])
>
> resource = mock 'resource'
> one.expects(:to_resource).with(@scope).returns(resource)
> resource.expects(:exported=).with(false)
> resource.stubs(:virtual=)
> + resource.stubs(:ref)
>
> @compiler.stubs(:resources).returns([])
> @scope.stubs(:findresource).returns(nil)
> diff --git a/test/data/snippets/collection_override.pp b/test/data/
> snippets/collection_override.pp
> new file mode 100644
> index 0000000..b1b39ab
> --- /dev/null
> +++ b/test/data/snippets/collection_override.pp
> @@ -0,0 +1,8 @@
> +...@file {
> + "/tmp/collection":
> + content => "whatever"
> +}
> +
> +File<| |> {
> + mode => 0600
> +}
> diff --git a/test/language/snippets.rb b/test/language/snippets.rb
> index a1d0f5d..c52409e 100755
> --- a/test/language/snippets.rb
> +++ b/test/language/snippets.rb
> @@ -475,6 +475,12 @@ class TestSnippets < Test::Unit::TestCase
> assert_not_file("/tmp/multilinecomments","Did create a
> commented resource");
> end
>
> + def snippet_collection_override
> + path = "/tmp/collection"
> + assert_file(path)
> + assert_mode_equal(0600, path)
> + end
> +
> # Iterate across each of the snippets and create a test.
> Dir.entries(snippetdir).sort.each { |file|
> next if file =~ /^\./
> --
> 1.6.0.2
>
>
> >
--
Health nuts are going to feel stupid someday, lying in hospitals dying
of nothing. --Redd Foxx
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---