~ubuntu-branches/ubuntu/oneiric/puppet/oneiric-security

« back to all changes in this revision

Viewing changes to spec/unit/parser/ast/hostclass.rb

  • Committer: Bazaar Package Importer
  • Author(s): Micah Anderson
  • Date: 2008-07-26 15:43:45 UTC
  • mto: (3.1.1 lenny) (1.3.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 16.
  • Revision ID: james.westby@ubuntu.com-20080726154345-1fmgo76b4l72ulvc
ImportĀ upstreamĀ versionĀ 0.24.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env ruby
 
2
 
 
3
require File.dirname(__FILE__) + '/../../../spec_helper'
 
4
 
 
5
describe Puppet::Parser::AST::HostClass do
 
6
    before :each do
 
7
        @node = Puppet::Node.new "testnode"
 
8
        @parser = Puppet::Parser::Parser.new :environment => "development"
 
9
        @scope_resource = stub 'scope_resource', :builtin? => true
 
10
        @compiler = Puppet::Parser::Compiler.new(@node, @parser)
 
11
 
 
12
        @scope = @compiler.topscope
 
13
    end
 
14
 
 
15
    describe Puppet::Parser::AST::HostClass, "when evaluating" do
 
16
 
 
17
        before do
 
18
            @top = @parser.newclass "top"
 
19
            @middle = @parser.newclass "middle", :parent => "top"
 
20
        end
 
21
 
 
22
        it "should create a resource that references itself" do
 
23
            @top.evaluate(@scope)
 
24
 
 
25
            @compiler.catalog.resource(:class, "top").should be_instance_of(Puppet::Parser::Resource)
 
26
        end
 
27
 
 
28
        it "should evaluate the parent class if one exists" do
 
29
            @middle.evaluate(@scope)
 
30
 
 
31
            @compiler.catalog.resource(:class, "top").should be_instance_of(Puppet::Parser::Resource)
 
32
        end
 
33
 
 
34
        it "should fail to evaluate if a parent class is defined but cannot be found" do
 
35
            othertop = @parser.newclass "something", :parent => "yay"
 
36
            lambda { othertop.evaluate(@scope) }.should raise_error(Puppet::ParseError)
 
37
        end
 
38
 
 
39
        it "should not create a new resource if one already exists" do
 
40
            @compiler.catalog.expects(:resource).with(:class, "top").returns("something")
 
41
            @compiler.catalog.expects(:add_resource).never
 
42
            @top.evaluate(@scope)
 
43
        end
 
44
 
 
45
        it "should return the existing resource when not creating a new one" do
 
46
            @compiler.catalog.expects(:resource).with(:class, "top").returns("something")
 
47
            @compiler.catalog.expects(:add_resource).never
 
48
            @top.evaluate(@scope).should == "something"
 
49
        end
 
50
 
 
51
        it "should not create a new parent resource if one already exists and it has a parent class" do
 
52
            @top.evaluate(@scope)
 
53
 
 
54
            top_resource = @compiler.catalog.resource(:class, "top")
 
55
 
 
56
            @middle.evaluate(@scope)
 
57
 
 
58
            @compiler.catalog.resource(:class, "top").should equal(top_resource)
 
59
        end
 
60
 
 
61
        # #795 - tag before evaluation.
 
62
        it "should tag the catalog with the resource tags when it is evaluated" do
 
63
            @middle.evaluate(@scope)
 
64
 
 
65
            @compiler.catalog.should be_tagged("middle")
 
66
        end
 
67
 
 
68
        it "should tag the catalog with the parent class tags when it is evaluated" do
 
69
            @middle.evaluate(@scope)
 
70
 
 
71
            @compiler.catalog.should be_tagged("top")
 
72
        end
 
73
    end
 
74
 
 
75
    describe Puppet::Parser::AST::HostClass, "when evaluating code" do
 
76
 
 
77
        before do
 
78
            @top_resource = stub "top_resource"
 
79
            @top = @parser.newclass "top", :code => @top_resource
 
80
 
 
81
            @middle_resource = stub "middle_resource"
 
82
            @middle = @parser.newclass "top::middle", :parent => "top", :code => @middle_resource
 
83
        end
 
84
 
 
85
        it "should set its namespace to its fully qualified name" do
 
86
            @middle.namespace.should == "top::middle"
 
87
        end
 
88
 
 
89
        it "should evaluate the code referred to by the class" do
 
90
            @top_resource.expects(:safeevaluate)
 
91
 
 
92
            resource = @top.evaluate(@scope)
 
93
 
 
94
            @top.evaluate_code(resource)
 
95
        end
 
96
 
 
97
        it "should evaluate the parent class's code if it has a parent" do
 
98
            @top_resource.expects(:safeevaluate)
 
99
            @middle_resource.expects(:safeevaluate)
 
100
 
 
101
            resource = @middle.evaluate(@scope)
 
102
 
 
103
            @middle.evaluate_code(resource)
 
104
        end
 
105
 
 
106
        it "should not evaluate the parent class's code if the parent has already been evaluated" do
 
107
            @top_resource.stubs(:safeevaluate)
 
108
            resource = @top.evaluate(@scope)
 
109
            @top.evaluate_code(resource)
 
110
 
 
111
            @top_resource.expects(:safeevaluate).never
 
112
            @middle_resource.stubs(:safeevaluate)
 
113
            resource = @middle.evaluate(@scope)
 
114
            @middle.evaluate_code(resource)
 
115
        end
 
116
 
 
117
        it "should use the parent class's scope as its parent scope" do
 
118
            @top_resource.stubs(:safeevaluate)
 
119
            @middle_resource.stubs(:safeevaluate)
 
120
            resource = @middle.evaluate(@scope)
 
121
            @middle.evaluate_code(resource)
 
122
 
 
123
            @compiler.class_scope(@middle).parent.should equal(@compiler.class_scope(@top))
 
124
        end
 
125
 
 
126
        it "should add the parent class's namespace to its namespace search path" do
 
127
            @top_resource.stubs(:safeevaluate)
 
128
            @middle_resource.stubs(:safeevaluate)
 
129
            resource = @middle.evaluate(@scope)
 
130
            @middle.evaluate_code(resource)
 
131
 
 
132
            @compiler.class_scope(@middle).namespaces.should be_include(@top.namespace)
 
133
        end
 
134
    end
 
135
end