summaryrefslogtreecommitdiffstats
path: root/spec/unit/parser/compiler_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/parser/compiler_spec.rb')
-rwxr-xr-xspec/unit/parser/compiler_spec.rb86
1 files changed, 53 insertions, 33 deletions
diff --git a/spec/unit/parser/compiler_spec.rb b/spec/unit/parser/compiler_spec.rb
index fcce9f6f4..e6f481114 100755
--- a/spec/unit/parser/compiler_spec.rb
+++ b/spec/unit/parser/compiler_spec.rb
@@ -177,8 +177,8 @@ describe Puppet::Parser::Compiler do
@node.stubs(:parameters).returns(params)
compile_stub(:set_node_parameters)
@compiler.compile
- @compiler.topscope.lookupvar("a").should == "b"
- @compiler.topscope.lookupvar("c").should == "d"
+ @compiler.topscope['a'].should == "b"
+ @compiler.topscope['c'].should == "d"
end
it "should set the client and server versions on the catalog" do
@@ -571,42 +571,62 @@ describe Puppet::Parser::Compiler do
@compiler.evaluate_classes(%w{myclass}, @scope)
end
- it "should ensure each node class hash is in catalog and have appropriate parameters", :'fails_on_ruby_1.9.2' => true do
- klasses = {'foo'=>{'1'=>'one'}, 'bar::foo'=>{'2'=>'two'}, 'bar'=>{'1'=> [1,2,3], '2'=>{'foo'=>'bar'}}}
- @node.classes = klasses
- ast_obj = Puppet::Parser::AST::String.new(:value => 'foo')
- klasses.each do |name, params|
- klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'1' => ast_obj, '2' => ast_obj})
+ describe "and the classes are specified as a hash with parameters" do
+ before do
+ @node.classes = {}
+ @ast_obj = Puppet::Parser::AST::String.new(:value => 'foo')
+ end
+
+ # Define the given class with default parameters
+ def define_class(name, parameters)
+ @node.classes[name] = parameters
+ klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'1' => @ast_obj, '2' => @ast_obj})
@compiler.topscope.known_resource_types.add klass
end
- catalog = @compiler.compile
- catalog.classes.should =~ ['foo', 'bar::foo', 'settings', 'bar']
- r1 = catalog.resources.detect {|r| r.title == 'Foo' }
- r1.to_hash.should == {:'1' => 'one', :'2' => 'foo'}
- r1.tags. should =~ ['class', 'foo']
+ def compile
+ @catalog = @compiler.compile
+ end
- r2 = catalog.resources.detect {|r| r.title == 'Bar::Foo' }
- r2.to_hash.should == {:'1' => 'foo', :'2' => 'two'}
- r2.tags.should =~ ['bar::foo', 'class', 'bar', 'foo']
+ it "should record which classes are evaluated" do
+ classes = {'foo'=>{}, 'bar::foo'=>{}, 'bar'=>{}}
+ classes.each { |c, params| define_class(c, params) }
+ compile()
+ classes.each { |name, p| @catalog.classes.should include(name) }
+ end
- r2 = catalog.resources.detect {|r| r.title == 'Bar' }
- r2.to_hash.should == {:'1' => [1,2,3], :'2' => {'foo'=>'bar'}}
- r2.tags.should =~ ['class', 'bar']
- end
+ it "should provide default values for parameters that have no values specified" do
+ define_class('foo', {})
+ compile()
+ @catalog.resource(:class, 'foo')['1'].should == "foo"
+ end
- it "should ensure each node class is in catalog and has appropriate tags", :'fails_on_ruby_1.9.2' => true do
- klasses = ['bar::foo']
- @node.classes = klasses
- ast_obj = Puppet::Parser::AST::String.new(:value => 'foo')
- klasses.each do |name|
- klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'1' => ast_obj, '2' => ast_obj})
- @compiler.topscope.known_resource_types.add klass
+ it "should use any provided values" do
+ define_class('foo', {'1' => 'real_value'})
+ compile()
+ @catalog.resource(:class, 'foo')['1'].should == "real_value"
+ end
+
+ it "should support providing some but not all values" do
+ define_class('foo', {'1' => 'real_value'})
+ compile()
+ @catalog.resource(:class, 'Foo')['1'].should == "real_value"
+ @catalog.resource(:class, 'Foo')['2'].should == "foo"
end
- catalog = @compiler.compile
- r2 = catalog.resources.detect {|r| r.title == 'Bar::Foo' }
- r2.tags.should =~ ['bar::foo', 'class', 'bar', 'foo']
+ it "should ensure each node class is in catalog and has appropriate tags", :'fails_on_ruby_1.9.2' => true do
+ klasses = ['bar::foo']
+ @node.classes = klasses
+ ast_obj = Puppet::Parser::AST::String.new(:value => 'foo')
+ klasses.each do |name|
+ klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'1' => ast_obj, '2' => ast_obj})
+ @compiler.topscope.known_resource_types.add klass
+ end
+ catalog = @compiler.compile
+
+ r2 = catalog.resources.detect {|r| r.title == 'Bar::Foo' }
+ r2.tags.should =~ ['bar::foo', 'class', 'bar', 'foo']
+ end
end
it "should fail if required parameters are missing" do
@@ -614,15 +634,15 @@ describe Puppet::Parser::Compiler do
@node.classes = klass
klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {'1' => nil, '2' => nil})
@compiler.topscope.known_resource_types.add klass
- lambda { @compiler.compile }.should raise_error Puppet::ParseError, "Must pass 2 to Class[Foo]"
+ lambda { @compiler.compile }.should raise_error(Puppet::ParseError, "Must pass 2 to Class[Foo]")
end
it "should fail if invalid parameters are passed" do
klass = {'foo'=>{'3'=>'one'}}
@node.classes = klass
- klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {'1' => nil, '2' => nil})
+ klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {})
@compiler.topscope.known_resource_types.add klass
- lambda { @compiler.compile }.should raise_error Puppet::ParseError, "Invalid parameter 3"
+ lambda { @compiler.compile }.should raise_error(Puppet::ParseError, "Invalid parameter 3")
end
it "should ensure class is in catalog without params" do