puppet 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +0 -0
- data/COPYING +340 -0
- data/LICENSE +17 -0
- data/README +24 -0
- data/Rakefile +294 -0
- data/TODO +4 -0
- data/bin/cf2puppet +186 -0
- data/bin/puppet +176 -0
- data/bin/puppetca +213 -0
- data/bin/puppetd +246 -0
- data/bin/puppetdoc +184 -0
- data/bin/puppetmasterd +258 -0
- data/examples/code/allatonce +13 -0
- data/examples/code/assignments +11 -0
- data/examples/code/classing +35 -0
- data/examples/code/components +73 -0
- data/examples/code/execs +16 -0
- data/examples/code/failers/badclassnoparam +10 -0
- data/examples/code/failers/badclassparam +10 -0
- data/examples/code/failers/badcompnoparam +9 -0
- data/examples/code/failers/badcompparam +9 -0
- data/examples/code/failers/badtypeparam +3 -0
- data/examples/code/file.bl +11 -0
- data/examples/code/filedefaults +10 -0
- data/examples/code/fileparsing +116 -0
- data/examples/code/filerecursion +15 -0
- data/examples/code/functions +3 -0
- data/examples/code/groups +7 -0
- data/examples/code/head +30 -0
- data/examples/code/importing +8 -0
- data/examples/code/nodes +20 -0
- data/examples/code/one +8 -0
- data/examples/code/relationships +34 -0
- data/examples/code/selectors +28 -0
- data/examples/code/simpletests +11 -0
- data/examples/code/snippets/argumentdefaults +14 -0
- data/examples/code/snippets/casestatement +39 -0
- data/examples/code/snippets/classheirarchy.pp +15 -0
- data/examples/code/snippets/classincludes.pp +17 -0
- data/examples/code/snippets/classpathtest +11 -0
- data/examples/code/snippets/dirchmod +19 -0
- data/examples/code/snippets/failmissingexecpath.pp +13 -0
- data/examples/code/snippets/falsevalues.pp +3 -0
- data/examples/code/snippets/filecreate +11 -0
- data/examples/code/snippets/implicititeration +15 -0
- data/examples/code/snippets/multipleinstances +7 -0
- data/examples/code/snippets/namevartest +9 -0
- data/examples/code/snippets/scopetest +13 -0
- data/examples/code/snippets/selectorvalues.pp +22 -0
- data/examples/code/snippets/simpledefaults +5 -0
- data/examples/code/snippets/simpleselector +38 -0
- data/examples/code/svncommit +13 -0
- data/examples/root/bin/sleeper +69 -0
- data/examples/root/etc/configfile +0 -0
- data/examples/root/etc/debian-passwd +29 -0
- data/examples/root/etc/debian-syslog.conf +71 -0
- data/examples/root/etc/init.d/sleeper +65 -0
- data/examples/root/etc/otherfile +0 -0
- data/examples/root/etc/puppet/fileserver.conf +3 -0
- data/examples/root/etc/puppet/puppetmasterd.conf +10 -0
- data/ext/module:puppet +195 -0
- data/install.rb +270 -0
- data/lib/puppet.rb +249 -0
- data/lib/puppet/base64.rb +19 -0
- data/lib/puppet/client.rb +519 -0
- data/lib/puppet/config.rb +49 -0
- data/lib/puppet/daemon.rb +208 -0
- data/lib/puppet/element.rb +71 -0
- data/lib/puppet/event.rb +259 -0
- data/lib/puppet/log.rb +321 -0
- data/lib/puppet/metric.rb +250 -0
- data/lib/puppet/parsedfile.rb +38 -0
- data/lib/puppet/parser/ast.rb +1560 -0
- data/lib/puppet/parser/interpreter.rb +150 -0
- data/lib/puppet/parser/lexer.rb +226 -0
- data/lib/puppet/parser/parser.rb +1354 -0
- data/lib/puppet/parser/scope.rb +755 -0
- data/lib/puppet/server.rb +170 -0
- data/lib/puppet/server/authstore.rb +227 -0
- data/lib/puppet/server/ca.rb +140 -0
- data/lib/puppet/server/filebucket.rb +147 -0
- data/lib/puppet/server/fileserver.rb +477 -0
- data/lib/puppet/server/logger.rb +43 -0
- data/lib/puppet/server/master.rb +103 -0
- data/lib/puppet/server/servlet.rb +247 -0
- data/lib/puppet/sslcertificates.rb +737 -0
- data/lib/puppet/statechange.rb +150 -0
- data/lib/puppet/storage.rb +95 -0
- data/lib/puppet/transaction.rb +179 -0
- data/lib/puppet/transportable.rb +151 -0
- data/lib/puppet/type.rb +1354 -0
- data/lib/puppet/type/component.rb +141 -0
- data/lib/puppet/type/cron.rb +543 -0
- data/lib/puppet/type/exec.rb +316 -0
- data/lib/puppet/type/group.rb +152 -0
- data/lib/puppet/type/nameservice.rb +3 -0
- data/lib/puppet/type/nameservice/netinfo.rb +173 -0
- data/lib/puppet/type/nameservice/objectadd.rb +146 -0
- data/lib/puppet/type/nameservice/posix.rb +200 -0
- data/lib/puppet/type/package.rb +420 -0
- data/lib/puppet/type/package/apt.rb +70 -0
- data/lib/puppet/type/package/dpkg.rb +108 -0
- data/lib/puppet/type/package/rpm.rb +81 -0
- data/lib/puppet/type/package/sun.rb +117 -0
- data/lib/puppet/type/package/yum.rb +58 -0
- data/lib/puppet/type/pfile.rb +569 -0
- data/lib/puppet/type/pfile/checksum.rb +219 -0
- data/lib/puppet/type/pfile/create.rb +108 -0
- data/lib/puppet/type/pfile/group.rb +129 -0
- data/lib/puppet/type/pfile/mode.rb +131 -0
- data/lib/puppet/type/pfile/source.rb +264 -0
- data/lib/puppet/type/pfile/type.rb +31 -0
- data/lib/puppet/type/pfile/uid.rb +166 -0
- data/lib/puppet/type/pfilebucket.rb +80 -0
- data/lib/puppet/type/pprocess.rb +97 -0
- data/lib/puppet/type/service.rb +347 -0
- data/lib/puppet/type/service/base.rb +17 -0
- data/lib/puppet/type/service/debian.rb +50 -0
- data/lib/puppet/type/service/init.rb +145 -0
- data/lib/puppet/type/service/smf.rb +29 -0
- data/lib/puppet/type/state.rb +182 -0
- data/lib/puppet/type/symlink.rb +183 -0
- data/lib/puppet/type/tidy.rb +183 -0
- data/lib/puppet/type/typegen.rb +149 -0
- data/lib/puppet/type/typegen/filerecord.rb +243 -0
- data/lib/puppet/type/typegen/filetype.rb +316 -0
- data/lib/puppet/type/user.rb +290 -0
- data/lib/puppet/util.rb +138 -0
- data/test/certmgr/certmgr.rb +265 -0
- data/test/client/client.rb +203 -0
- data/test/executables/puppetbin.rb +53 -0
- data/test/executables/puppetca.rb +79 -0
- data/test/executables/puppetd.rb +71 -0
- data/test/executables/puppetmasterd.rb +153 -0
- data/test/executables/puppetmodule.rb +60 -0
- data/test/language/ast.rb +412 -0
- data/test/language/interpreter.rb +71 -0
- data/test/language/scope.rb +412 -0
- data/test/language/snippets.rb +445 -0
- data/test/other/events.rb +111 -0
- data/test/other/log.rb +195 -0
- data/test/other/metrics.rb +92 -0
- data/test/other/overrides.rb +115 -0
- data/test/other/parsedfile.rb +31 -0
- data/test/other/relationships.rb +113 -0
- data/test/other/state.rb +106 -0
- data/test/other/storage.rb +39 -0
- data/test/other/transactions.rb +235 -0
- data/test/parser/lexer.rb +120 -0
- data/test/parser/parser.rb +180 -0
- data/test/puppet/conffiles.rb +104 -0
- data/test/puppet/defaults.rb +100 -0
- data/test/puppet/error.rb +23 -0
- data/test/puppet/utiltest.rb +120 -0
- data/test/puppettest.rb +774 -0
- data/test/server/authstore.rb +209 -0
- data/test/server/bucket.rb +227 -0
- data/test/server/ca.rb +201 -0
- data/test/server/fileserver.rb +710 -0
- data/test/server/logger.rb +175 -0
- data/test/server/master.rb +150 -0
- data/test/server/server.rb +130 -0
- data/test/tagging/tagging.rb +80 -0
- data/test/test +51 -0
- data/test/types/basic.rb +119 -0
- data/test/types/component.rb +272 -0
- data/test/types/cron.rb +261 -0
- data/test/types/exec.rb +273 -0
- data/test/types/file.rb +616 -0
- data/test/types/filebucket.rb +167 -0
- data/test/types/fileignoresource.rb +287 -0
- data/test/types/filesources.rb +587 -0
- data/test/types/filetype.rb +162 -0
- data/test/types/group.rb +271 -0
- data/test/types/package.rb +205 -0
- data/test/types/query.rb +101 -0
- data/test/types/service.rb +100 -0
- data/test/types/symlink.rb +93 -0
- data/test/types/tidy.rb +124 -0
- data/test/types/type.rb +135 -0
- data/test/types/user.rb +371 -0
- metadata +243 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
if __FILE__ == $0
|
4
|
+
$:.unshift '../../lib'
|
5
|
+
$:.unshift '..'
|
6
|
+
$puppetbase = "../.."
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'puppet'
|
10
|
+
require 'puppet/parser/interpreter'
|
11
|
+
require 'puppet/parser/parser'
|
12
|
+
require 'puppet/client'
|
13
|
+
require 'test/unit'
|
14
|
+
require 'puppettest'
|
15
|
+
|
16
|
+
class TestInterpreter < Test::Unit::TestCase
|
17
|
+
include TestPuppet
|
18
|
+
AST = Puppet::Parser::AST
|
19
|
+
|
20
|
+
# create a simple manifest that uses nodes to create a file
|
21
|
+
def mknodemanifest(node, file)
|
22
|
+
createdfile = tempfile()
|
23
|
+
|
24
|
+
File.open(file, "w") { |f|
|
25
|
+
f.puts "node %s { file { \"%s\": create => true, mode => 755 } }\n" %
|
26
|
+
[node, createdfile]
|
27
|
+
}
|
28
|
+
|
29
|
+
return [file, createdfile]
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_simple
|
33
|
+
file = tempfile()
|
34
|
+
File.open(file, "w") { |f|
|
35
|
+
f.puts "file { \"/etc\": owner => root }"
|
36
|
+
}
|
37
|
+
assert_nothing_raised {
|
38
|
+
Puppet::Parser::Interpreter.new(:Manifest => file)
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_reloadfiles
|
43
|
+
hostname = Facter["hostname"].value
|
44
|
+
|
45
|
+
file = tempfile()
|
46
|
+
|
47
|
+
# Create a first version
|
48
|
+
createdfile = mknodemanifest(hostname, file)
|
49
|
+
|
50
|
+
interp = nil
|
51
|
+
assert_nothing_raised {
|
52
|
+
interp = Puppet::Parser::Interpreter.new(:Manifest => file)
|
53
|
+
}
|
54
|
+
|
55
|
+
config = nil
|
56
|
+
assert_nothing_raised {
|
57
|
+
config = interp.run(hostname, {})
|
58
|
+
}
|
59
|
+
sleep(1)
|
60
|
+
|
61
|
+
# Now create a new file
|
62
|
+
createdfile = mknodemanifest(hostname, file)
|
63
|
+
|
64
|
+
newconfig = nil
|
65
|
+
assert_nothing_raised {
|
66
|
+
newconfig = interp.run(hostname, {})
|
67
|
+
}
|
68
|
+
|
69
|
+
assert(config != newconfig, "Configs are somehow the same")
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,412 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
if __FILE__ == $0
|
4
|
+
$:.unshift '../../lib'
|
5
|
+
$:.unshift '..'
|
6
|
+
$puppetbase = "../.."
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'puppet'
|
10
|
+
require 'puppet/parser/interpreter'
|
11
|
+
require 'puppet/parser/parser'
|
12
|
+
require 'puppet/client'
|
13
|
+
require 'test/unit'
|
14
|
+
require 'puppettest'
|
15
|
+
|
16
|
+
# so, what kind of things do we want to test?
|
17
|
+
|
18
|
+
# we don't need to test function, since we're confident in the
|
19
|
+
# library tests. We do, however, need to test how things are actually
|
20
|
+
# working in the language.
|
21
|
+
|
22
|
+
# so really, we want to do things like test that our ast is correct
|
23
|
+
# and test whether we've got things in the right scopes
|
24
|
+
|
25
|
+
class TestScope < Test::Unit::TestCase
|
26
|
+
include ParserTesting
|
27
|
+
|
28
|
+
def to_ary(hash)
|
29
|
+
hash.collect { |key,value|
|
30
|
+
[key,value]
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_variables
|
35
|
+
scope = nil
|
36
|
+
over = "over"
|
37
|
+
|
38
|
+
scopes = []
|
39
|
+
vars = []
|
40
|
+
values = {}
|
41
|
+
ovalues = []
|
42
|
+
|
43
|
+
10.times { |index|
|
44
|
+
# slap some recursion in there
|
45
|
+
scope = Puppet::Parser::Scope.new(scope)
|
46
|
+
scopes.push scope
|
47
|
+
|
48
|
+
var = "var%s" % index
|
49
|
+
value = rand(1000)
|
50
|
+
ovalue = rand(1000)
|
51
|
+
|
52
|
+
ovalues.push ovalue
|
53
|
+
|
54
|
+
vars.push var
|
55
|
+
values[var] = value
|
56
|
+
|
57
|
+
# set the variable in the current scope
|
58
|
+
assert_nothing_raised {
|
59
|
+
scope.setvar(var,value)
|
60
|
+
}
|
61
|
+
|
62
|
+
# this should override previous values
|
63
|
+
assert_nothing_raised {
|
64
|
+
scope.setvar(over,ovalue)
|
65
|
+
}
|
66
|
+
|
67
|
+
assert_equal(value,scope.lookupvar(var))
|
68
|
+
|
69
|
+
#puts "%s vars, %s scopes" % [vars.length,scopes.length]
|
70
|
+
i = 0
|
71
|
+
vars.zip(scopes) { |v,s|
|
72
|
+
# this recurses all the way up the tree as necessary
|
73
|
+
val = nil
|
74
|
+
oval = nil
|
75
|
+
|
76
|
+
# look up the values using the bottom scope
|
77
|
+
assert_nothing_raised {
|
78
|
+
val = scope.lookupvar(v)
|
79
|
+
oval = scope.lookupvar(over)
|
80
|
+
}
|
81
|
+
|
82
|
+
# verify they're correct
|
83
|
+
assert_equal(values[v],val)
|
84
|
+
assert_equal(ovalue,oval)
|
85
|
+
|
86
|
+
# verify that we get the most recent value
|
87
|
+
assert_equal(ovalue,scope.lookupvar(over))
|
88
|
+
|
89
|
+
# verify that they aren't available in upper scopes
|
90
|
+
if parent = s.parent
|
91
|
+
assert_raise(Puppet::ParseError) {
|
92
|
+
parent.lookupvar(v)
|
93
|
+
}
|
94
|
+
|
95
|
+
# and verify that the parent sees its correct value
|
96
|
+
assert_equal(ovalues[i - 1],parent.lookupvar(over))
|
97
|
+
end
|
98
|
+
i += 1
|
99
|
+
}
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_declarative
|
104
|
+
# set to declarative
|
105
|
+
top = Puppet::Parser::Scope.new(nil,true)
|
106
|
+
sub = Puppet::Parser::Scope.new(top)
|
107
|
+
|
108
|
+
assert_nothing_raised {
|
109
|
+
top.setvar("test","value")
|
110
|
+
}
|
111
|
+
assert_raise(Puppet::ParseError) {
|
112
|
+
top.setvar("test","other")
|
113
|
+
}
|
114
|
+
assert_nothing_raised {
|
115
|
+
sub.setvar("test","later")
|
116
|
+
}
|
117
|
+
assert_raise(Puppet::ParseError) {
|
118
|
+
top.setvar("test","yeehaw")
|
119
|
+
}
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_notdeclarative
|
123
|
+
# set to not declarative
|
124
|
+
top = Puppet::Parser::Scope.new(nil,false)
|
125
|
+
sub = Puppet::Parser::Scope.new(top)
|
126
|
+
|
127
|
+
assert_nothing_raised {
|
128
|
+
top.setvar("test","value")
|
129
|
+
}
|
130
|
+
assert_nothing_raised {
|
131
|
+
top.setvar("test","other")
|
132
|
+
}
|
133
|
+
assert_nothing_raised {
|
134
|
+
sub.setvar("test","later")
|
135
|
+
}
|
136
|
+
assert_nothing_raised {
|
137
|
+
sub.setvar("test","yayness")
|
138
|
+
}
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_defaults
|
142
|
+
scope = nil
|
143
|
+
over = "over"
|
144
|
+
|
145
|
+
scopes = []
|
146
|
+
vars = []
|
147
|
+
values = {}
|
148
|
+
ovalues = []
|
149
|
+
|
150
|
+
defs = Hash.new { |hash,key|
|
151
|
+
hash[key] = Hash.new(nil)
|
152
|
+
}
|
153
|
+
|
154
|
+
prevdefs = Hash.new { |hash,key|
|
155
|
+
hash[key] = Hash.new(nil)
|
156
|
+
}
|
157
|
+
|
158
|
+
params = %w{a list of parameters that could be used for defaults}
|
159
|
+
|
160
|
+
types = %w{a set of types that could be used to set defaults}
|
161
|
+
|
162
|
+
10.times { |index|
|
163
|
+
scope = Puppet::Parser::Scope.new(scope)
|
164
|
+
scopes.push scope
|
165
|
+
|
166
|
+
tmptypes = []
|
167
|
+
|
168
|
+
# randomly create defaults for a random set of types
|
169
|
+
tnum = rand(5)
|
170
|
+
tnum.times { |t|
|
171
|
+
# pick a type
|
172
|
+
#Puppet.debug "Type length is %s" % types.length
|
173
|
+
#s = rand(types.length)
|
174
|
+
#Puppet.debug "Type num is %s" % s
|
175
|
+
#type = types[s]
|
176
|
+
#Puppet.debug "Type is %s" % s
|
177
|
+
type = types[rand(types.length)]
|
178
|
+
if tmptypes.include?(type)
|
179
|
+
Puppet.debug "Duplicate type %s" % type
|
180
|
+
redo
|
181
|
+
else
|
182
|
+
tmptypes.push type
|
183
|
+
end
|
184
|
+
|
185
|
+
Puppet.debug "type is %s" % type
|
186
|
+
|
187
|
+
d = {}
|
188
|
+
|
189
|
+
# randomly assign some parameters
|
190
|
+
num = rand(4)
|
191
|
+
num.times { |n|
|
192
|
+
param = params[rand(params.length)]
|
193
|
+
if d.include?(param)
|
194
|
+
Puppet.debug "Duplicate param %s" % param
|
195
|
+
redo
|
196
|
+
else
|
197
|
+
d[param] = rand(1000)
|
198
|
+
end
|
199
|
+
}
|
200
|
+
|
201
|
+
# and then add a consistent type
|
202
|
+
d["always"] = rand(1000)
|
203
|
+
|
204
|
+
d.each { |var,val|
|
205
|
+
defs[type][var] = val
|
206
|
+
}
|
207
|
+
|
208
|
+
assert_nothing_raised {
|
209
|
+
scope.setdefaults(type,to_ary(d))
|
210
|
+
}
|
211
|
+
fdefs = nil
|
212
|
+
assert_nothing_raised {
|
213
|
+
fdefs = scope.lookupdefaults(type)
|
214
|
+
}
|
215
|
+
|
216
|
+
# now, make sure that reassignment fails if we're
|
217
|
+
# in declarative mode
|
218
|
+
assert_raise(Puppet::ParseError) {
|
219
|
+
scope.setdefaults(type,[%w{always funtest}])
|
220
|
+
}
|
221
|
+
|
222
|
+
# assert that we have collected the same values
|
223
|
+
assert_equal(defs[type],fdefs)
|
224
|
+
|
225
|
+
# now assert that our parent still finds the same defaults
|
226
|
+
# it got last time
|
227
|
+
if parent = scope.parent
|
228
|
+
unless prevdefs[type].nil?
|
229
|
+
assert_equal(prevdefs[type],parent.lookupdefaults(type))
|
230
|
+
end
|
231
|
+
end
|
232
|
+
d.each { |var,val|
|
233
|
+
prevdefs[type][var] = val
|
234
|
+
}
|
235
|
+
}
|
236
|
+
}
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_strinterp
|
240
|
+
scope = Puppet::Parser::Scope.new(nil)
|
241
|
+
|
242
|
+
assert_nothing_raised {
|
243
|
+
scope.setvar("test","value")
|
244
|
+
}
|
245
|
+
val = nil
|
246
|
+
assert_nothing_raised {
|
247
|
+
val = scope.strinterp("string ${test}")
|
248
|
+
}
|
249
|
+
assert_equal("string value", val)
|
250
|
+
|
251
|
+
assert_nothing_raised {
|
252
|
+
val = scope.strinterp("string ${test} ${test} ${test}")
|
253
|
+
}
|
254
|
+
assert_equal("string value value value", val)
|
255
|
+
|
256
|
+
assert_nothing_raised {
|
257
|
+
val = scope.strinterp("string $test ${test} $test")
|
258
|
+
}
|
259
|
+
assert_equal("string value value value", val)
|
260
|
+
end
|
261
|
+
|
262
|
+
# Test some of the host manipulations
|
263
|
+
def test_hostlookup
|
264
|
+
top = Puppet::Parser::Scope.new(nil)
|
265
|
+
|
266
|
+
# Create a deep scope tree, so that we know we're doing a deeply recursive
|
267
|
+
# search.
|
268
|
+
mid1 = Puppet::Parser::Scope.new(top)
|
269
|
+
mid2 = Puppet::Parser::Scope.new(mid1)
|
270
|
+
mid3 = Puppet::Parser::Scope.new(mid2)
|
271
|
+
child1 = Puppet::Parser::Scope.new(mid3)
|
272
|
+
mida = Puppet::Parser::Scope.new(top)
|
273
|
+
midb = Puppet::Parser::Scope.new(mida)
|
274
|
+
midc = Puppet::Parser::Scope.new(midb)
|
275
|
+
child2 = Puppet::Parser::Scope.new(midc)
|
276
|
+
|
277
|
+
# verify we can set a host
|
278
|
+
assert_nothing_raised("Could not create host") {
|
279
|
+
child1.setnode("testing", AST::Node.new(
|
280
|
+
:name => "testing",
|
281
|
+
:code => :notused
|
282
|
+
)
|
283
|
+
)
|
284
|
+
}
|
285
|
+
|
286
|
+
# Verify we cannot redefine it
|
287
|
+
assert_raise(Puppet::ParseError, "Duplicate host creation succeeded") {
|
288
|
+
child2.setnode("testing", AST::Node.new(
|
289
|
+
:name => "testing",
|
290
|
+
:code => :notused
|
291
|
+
)
|
292
|
+
)
|
293
|
+
}
|
294
|
+
|
295
|
+
# Now verify we can find the host again
|
296
|
+
host = nil
|
297
|
+
assert_nothing_raised("Host lookup failed") {
|
298
|
+
hash = top.node("testing")
|
299
|
+
host = hash[:node]
|
300
|
+
}
|
301
|
+
|
302
|
+
assert(host, "Could not find host")
|
303
|
+
assert(host.code == :notused, "Host is not what we stored")
|
304
|
+
end
|
305
|
+
|
306
|
+
# Verify that two statements about a file within the same scope tree
|
307
|
+
# will cause a conflict.
|
308
|
+
def test_znoconflicts
|
309
|
+
filename = tempfile()
|
310
|
+
children = []
|
311
|
+
|
312
|
+
# create the parent class
|
313
|
+
children << classobj("one", :code => AST::ASTArray.new(
|
314
|
+
:children => [
|
315
|
+
fileobj(filename, "owner" => "root")
|
316
|
+
]
|
317
|
+
))
|
318
|
+
|
319
|
+
# now create a child class with differ values
|
320
|
+
children << classobj("two",
|
321
|
+
:code => AST::ASTArray.new(
|
322
|
+
:children => [
|
323
|
+
fileobj(filename, "owner" => "bin")
|
324
|
+
]
|
325
|
+
))
|
326
|
+
|
327
|
+
# Now call the child class
|
328
|
+
assert_nothing_raised("Could not add AST nodes for calling") {
|
329
|
+
children << AST::ObjectDef.new(
|
330
|
+
:type => nameobj("two"),
|
331
|
+
:name => nameobj("yayness"),
|
332
|
+
:params => astarray()
|
333
|
+
) << AST::ObjectDef.new(
|
334
|
+
:type => nameobj("one"),
|
335
|
+
:name => nameobj("yayness"),
|
336
|
+
:params => astarray()
|
337
|
+
)
|
338
|
+
}
|
339
|
+
|
340
|
+
top = nil
|
341
|
+
assert_nothing_raised("Could not create top object") {
|
342
|
+
top = AST::ASTArray.new(
|
343
|
+
:children => children
|
344
|
+
)
|
345
|
+
}
|
346
|
+
|
347
|
+
objects = nil
|
348
|
+
scope = nil
|
349
|
+
|
350
|
+
# Here's where we should encounter the failure. It should find that
|
351
|
+
# it has already created an object with that name, and this should result
|
352
|
+
# in some pukey-pukeyness.
|
353
|
+
assert_raise(Puppet::ParseError) {
|
354
|
+
scope = Puppet::Parser::Scope.new()
|
355
|
+
objects = scope.evaluate(top)
|
356
|
+
}
|
357
|
+
end
|
358
|
+
|
359
|
+
# Verify that we override statements that we find within our scope
|
360
|
+
def test_suboverrides
|
361
|
+
filename = tempfile()
|
362
|
+
children = []
|
363
|
+
|
364
|
+
# create the parent class
|
365
|
+
children << classobj("parent", :code => AST::ASTArray.new(
|
366
|
+
:children => [
|
367
|
+
fileobj(filename, "owner" => "root")
|
368
|
+
]
|
369
|
+
))
|
370
|
+
|
371
|
+
# now create a child class with differ values
|
372
|
+
children << classobj("child", :parentclass => nameobj("parent"),
|
373
|
+
:code => AST::ASTArray.new(
|
374
|
+
:children => [
|
375
|
+
fileobj(filename, "owner" => "bin")
|
376
|
+
]
|
377
|
+
))
|
378
|
+
|
379
|
+
# Now call the child class
|
380
|
+
assert_nothing_raised("Could not add AST nodes for calling") {
|
381
|
+
children << AST::ObjectDef.new(
|
382
|
+
:type => nameobj("child"),
|
383
|
+
:name => nameobj("yayness"),
|
384
|
+
:params => astarray()
|
385
|
+
)
|
386
|
+
}
|
387
|
+
|
388
|
+
top = nil
|
389
|
+
assert_nothing_raised("Could not create top object") {
|
390
|
+
top = AST::ASTArray.new(
|
391
|
+
:children => children
|
392
|
+
)
|
393
|
+
}
|
394
|
+
|
395
|
+
objects = nil
|
396
|
+
scope = nil
|
397
|
+
assert_nothing_raised("Could not evaluate") {
|
398
|
+
scope = Puppet::Parser::Scope.new()
|
399
|
+
objects = scope.evaluate(top)
|
400
|
+
}
|
401
|
+
|
402
|
+
assert_equal(1, objects.length, "Returned too many objects: %s" %
|
403
|
+
objects.inspect)
|
404
|
+
assert_equal(1, objects[0].length, "Returned too many objects: %s" %
|
405
|
+
objects[0].inspect)
|
406
|
+
assert_nothing_raised {
|
407
|
+
file = objects[0][0]
|
408
|
+
|
409
|
+
assert_equal("bin", file["owner"], "Value did not override correctly")
|
410
|
+
}
|
411
|
+
end
|
412
|
+
end
|