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.

Files changed (182) hide show
  1. data/CHANGELOG +0 -0
  2. data/COPYING +340 -0
  3. data/LICENSE +17 -0
  4. data/README +24 -0
  5. data/Rakefile +294 -0
  6. data/TODO +4 -0
  7. data/bin/cf2puppet +186 -0
  8. data/bin/puppet +176 -0
  9. data/bin/puppetca +213 -0
  10. data/bin/puppetd +246 -0
  11. data/bin/puppetdoc +184 -0
  12. data/bin/puppetmasterd +258 -0
  13. data/examples/code/allatonce +13 -0
  14. data/examples/code/assignments +11 -0
  15. data/examples/code/classing +35 -0
  16. data/examples/code/components +73 -0
  17. data/examples/code/execs +16 -0
  18. data/examples/code/failers/badclassnoparam +10 -0
  19. data/examples/code/failers/badclassparam +10 -0
  20. data/examples/code/failers/badcompnoparam +9 -0
  21. data/examples/code/failers/badcompparam +9 -0
  22. data/examples/code/failers/badtypeparam +3 -0
  23. data/examples/code/file.bl +11 -0
  24. data/examples/code/filedefaults +10 -0
  25. data/examples/code/fileparsing +116 -0
  26. data/examples/code/filerecursion +15 -0
  27. data/examples/code/functions +3 -0
  28. data/examples/code/groups +7 -0
  29. data/examples/code/head +30 -0
  30. data/examples/code/importing +8 -0
  31. data/examples/code/nodes +20 -0
  32. data/examples/code/one +8 -0
  33. data/examples/code/relationships +34 -0
  34. data/examples/code/selectors +28 -0
  35. data/examples/code/simpletests +11 -0
  36. data/examples/code/snippets/argumentdefaults +14 -0
  37. data/examples/code/snippets/casestatement +39 -0
  38. data/examples/code/snippets/classheirarchy.pp +15 -0
  39. data/examples/code/snippets/classincludes.pp +17 -0
  40. data/examples/code/snippets/classpathtest +11 -0
  41. data/examples/code/snippets/dirchmod +19 -0
  42. data/examples/code/snippets/failmissingexecpath.pp +13 -0
  43. data/examples/code/snippets/falsevalues.pp +3 -0
  44. data/examples/code/snippets/filecreate +11 -0
  45. data/examples/code/snippets/implicititeration +15 -0
  46. data/examples/code/snippets/multipleinstances +7 -0
  47. data/examples/code/snippets/namevartest +9 -0
  48. data/examples/code/snippets/scopetest +13 -0
  49. data/examples/code/snippets/selectorvalues.pp +22 -0
  50. data/examples/code/snippets/simpledefaults +5 -0
  51. data/examples/code/snippets/simpleselector +38 -0
  52. data/examples/code/svncommit +13 -0
  53. data/examples/root/bin/sleeper +69 -0
  54. data/examples/root/etc/configfile +0 -0
  55. data/examples/root/etc/debian-passwd +29 -0
  56. data/examples/root/etc/debian-syslog.conf +71 -0
  57. data/examples/root/etc/init.d/sleeper +65 -0
  58. data/examples/root/etc/otherfile +0 -0
  59. data/examples/root/etc/puppet/fileserver.conf +3 -0
  60. data/examples/root/etc/puppet/puppetmasterd.conf +10 -0
  61. data/ext/module:puppet +195 -0
  62. data/install.rb +270 -0
  63. data/lib/puppet.rb +249 -0
  64. data/lib/puppet/base64.rb +19 -0
  65. data/lib/puppet/client.rb +519 -0
  66. data/lib/puppet/config.rb +49 -0
  67. data/lib/puppet/daemon.rb +208 -0
  68. data/lib/puppet/element.rb +71 -0
  69. data/lib/puppet/event.rb +259 -0
  70. data/lib/puppet/log.rb +321 -0
  71. data/lib/puppet/metric.rb +250 -0
  72. data/lib/puppet/parsedfile.rb +38 -0
  73. data/lib/puppet/parser/ast.rb +1560 -0
  74. data/lib/puppet/parser/interpreter.rb +150 -0
  75. data/lib/puppet/parser/lexer.rb +226 -0
  76. data/lib/puppet/parser/parser.rb +1354 -0
  77. data/lib/puppet/parser/scope.rb +755 -0
  78. data/lib/puppet/server.rb +170 -0
  79. data/lib/puppet/server/authstore.rb +227 -0
  80. data/lib/puppet/server/ca.rb +140 -0
  81. data/lib/puppet/server/filebucket.rb +147 -0
  82. data/lib/puppet/server/fileserver.rb +477 -0
  83. data/lib/puppet/server/logger.rb +43 -0
  84. data/lib/puppet/server/master.rb +103 -0
  85. data/lib/puppet/server/servlet.rb +247 -0
  86. data/lib/puppet/sslcertificates.rb +737 -0
  87. data/lib/puppet/statechange.rb +150 -0
  88. data/lib/puppet/storage.rb +95 -0
  89. data/lib/puppet/transaction.rb +179 -0
  90. data/lib/puppet/transportable.rb +151 -0
  91. data/lib/puppet/type.rb +1354 -0
  92. data/lib/puppet/type/component.rb +141 -0
  93. data/lib/puppet/type/cron.rb +543 -0
  94. data/lib/puppet/type/exec.rb +316 -0
  95. data/lib/puppet/type/group.rb +152 -0
  96. data/lib/puppet/type/nameservice.rb +3 -0
  97. data/lib/puppet/type/nameservice/netinfo.rb +173 -0
  98. data/lib/puppet/type/nameservice/objectadd.rb +146 -0
  99. data/lib/puppet/type/nameservice/posix.rb +200 -0
  100. data/lib/puppet/type/package.rb +420 -0
  101. data/lib/puppet/type/package/apt.rb +70 -0
  102. data/lib/puppet/type/package/dpkg.rb +108 -0
  103. data/lib/puppet/type/package/rpm.rb +81 -0
  104. data/lib/puppet/type/package/sun.rb +117 -0
  105. data/lib/puppet/type/package/yum.rb +58 -0
  106. data/lib/puppet/type/pfile.rb +569 -0
  107. data/lib/puppet/type/pfile/checksum.rb +219 -0
  108. data/lib/puppet/type/pfile/create.rb +108 -0
  109. data/lib/puppet/type/pfile/group.rb +129 -0
  110. data/lib/puppet/type/pfile/mode.rb +131 -0
  111. data/lib/puppet/type/pfile/source.rb +264 -0
  112. data/lib/puppet/type/pfile/type.rb +31 -0
  113. data/lib/puppet/type/pfile/uid.rb +166 -0
  114. data/lib/puppet/type/pfilebucket.rb +80 -0
  115. data/lib/puppet/type/pprocess.rb +97 -0
  116. data/lib/puppet/type/service.rb +347 -0
  117. data/lib/puppet/type/service/base.rb +17 -0
  118. data/lib/puppet/type/service/debian.rb +50 -0
  119. data/lib/puppet/type/service/init.rb +145 -0
  120. data/lib/puppet/type/service/smf.rb +29 -0
  121. data/lib/puppet/type/state.rb +182 -0
  122. data/lib/puppet/type/symlink.rb +183 -0
  123. data/lib/puppet/type/tidy.rb +183 -0
  124. data/lib/puppet/type/typegen.rb +149 -0
  125. data/lib/puppet/type/typegen/filerecord.rb +243 -0
  126. data/lib/puppet/type/typegen/filetype.rb +316 -0
  127. data/lib/puppet/type/user.rb +290 -0
  128. data/lib/puppet/util.rb +138 -0
  129. data/test/certmgr/certmgr.rb +265 -0
  130. data/test/client/client.rb +203 -0
  131. data/test/executables/puppetbin.rb +53 -0
  132. data/test/executables/puppetca.rb +79 -0
  133. data/test/executables/puppetd.rb +71 -0
  134. data/test/executables/puppetmasterd.rb +153 -0
  135. data/test/executables/puppetmodule.rb +60 -0
  136. data/test/language/ast.rb +412 -0
  137. data/test/language/interpreter.rb +71 -0
  138. data/test/language/scope.rb +412 -0
  139. data/test/language/snippets.rb +445 -0
  140. data/test/other/events.rb +111 -0
  141. data/test/other/log.rb +195 -0
  142. data/test/other/metrics.rb +92 -0
  143. data/test/other/overrides.rb +115 -0
  144. data/test/other/parsedfile.rb +31 -0
  145. data/test/other/relationships.rb +113 -0
  146. data/test/other/state.rb +106 -0
  147. data/test/other/storage.rb +39 -0
  148. data/test/other/transactions.rb +235 -0
  149. data/test/parser/lexer.rb +120 -0
  150. data/test/parser/parser.rb +180 -0
  151. data/test/puppet/conffiles.rb +104 -0
  152. data/test/puppet/defaults.rb +100 -0
  153. data/test/puppet/error.rb +23 -0
  154. data/test/puppet/utiltest.rb +120 -0
  155. data/test/puppettest.rb +774 -0
  156. data/test/server/authstore.rb +209 -0
  157. data/test/server/bucket.rb +227 -0
  158. data/test/server/ca.rb +201 -0
  159. data/test/server/fileserver.rb +710 -0
  160. data/test/server/logger.rb +175 -0
  161. data/test/server/master.rb +150 -0
  162. data/test/server/server.rb +130 -0
  163. data/test/tagging/tagging.rb +80 -0
  164. data/test/test +51 -0
  165. data/test/types/basic.rb +119 -0
  166. data/test/types/component.rb +272 -0
  167. data/test/types/cron.rb +261 -0
  168. data/test/types/exec.rb +273 -0
  169. data/test/types/file.rb +616 -0
  170. data/test/types/filebucket.rb +167 -0
  171. data/test/types/fileignoresource.rb +287 -0
  172. data/test/types/filesources.rb +587 -0
  173. data/test/types/filetype.rb +162 -0
  174. data/test/types/group.rb +271 -0
  175. data/test/types/package.rb +205 -0
  176. data/test/types/query.rb +101 -0
  177. data/test/types/service.rb +100 -0
  178. data/test/types/symlink.rb +93 -0
  179. data/test/types/tidy.rb +124 -0
  180. data/test/types/type.rb +135 -0
  181. data/test/types/user.rb +371 -0
  182. 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