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,616 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '..'
3
+ $:.unshift '../../lib'
4
+ $puppetbase = "../.."
5
+ end
6
+
7
+ require 'puppet'
8
+ require 'test/unit'
9
+ require 'fileutils'
10
+ require 'puppettest'
11
+
12
+ class TestFile < Test::Unit::TestCase
13
+ include FileTesting
14
+ # hmmm
15
+ # this is complicated, because we store references to the created
16
+ # objects in a central store
17
+ def mkfile(hash)
18
+ file = nil
19
+ assert_nothing_raised {
20
+ file = Puppet::Type::PFile.create(hash)
21
+ }
22
+ return file
23
+ end
24
+
25
+ def mktestfile
26
+ # because luke's home directory is on nfs, it can't be used for testing
27
+ # as root
28
+ tmpfile = tempfile()
29
+ File.open(tmpfile, "w") { |f| f.puts rand(100) }
30
+ @@tmpfiles.push tmpfile
31
+ mkfile(:name => tmpfile)
32
+ end
33
+
34
+ def setup
35
+ super
36
+ begin
37
+ initstorage
38
+ rescue
39
+ system("rm -rf %s" % Puppet[:checksumfile])
40
+ end
41
+ end
42
+
43
+ def teardown
44
+ clearstorage
45
+ Puppet::Storage.clear
46
+ super
47
+ end
48
+
49
+ def initstorage
50
+ Puppet::Storage.init
51
+ Puppet::Storage.load
52
+ end
53
+
54
+ def clearstorage
55
+ Puppet::Storage.store
56
+ Puppet::Storage.clear
57
+ end
58
+
59
+ def test_owner
60
+ file = mktestfile()
61
+
62
+ users = {}
63
+ count = 0
64
+
65
+ # collect five users
66
+ Etc.passwd { |passwd|
67
+ if count > 5
68
+ break
69
+ else
70
+ count += 1
71
+ end
72
+ users[passwd.uid] = passwd.name
73
+ }
74
+
75
+ fake = {}
76
+ # find a fake user
77
+ while true
78
+ a = rand(1000)
79
+ begin
80
+ Etc.getpwuid(a)
81
+ rescue
82
+ fake[a] = "fakeuser"
83
+ break
84
+ end
85
+ end
86
+
87
+ uid, name = users.shift
88
+ us = {}
89
+ us[uid] = name
90
+ users.each { |uid, name|
91
+ # just make sure we don't try to manage users
92
+ assert_nothing_raised() {
93
+ file.sync
94
+ }
95
+ assert_nothing_raised() {
96
+ file[:owner] = name
97
+ }
98
+ assert_nothing_raised() {
99
+ file.retrieve
100
+ }
101
+ assert_nothing_raised() {
102
+ file.sync
103
+ }
104
+ }
105
+ end
106
+
107
+ def test_group
108
+ file = mktestfile()
109
+ [%x{groups}.chomp.split(/ /), Process.groups].flatten.each { |group|
110
+ assert_nothing_raised() {
111
+ file[:group] = group
112
+ }
113
+ assert(file.state(:group))
114
+ assert(file.state(:group).should)
115
+ }
116
+ end
117
+
118
+ if Process.uid == 0
119
+ def test_createasuser
120
+ dir = tmpdir()
121
+
122
+ user = nonrootuser()
123
+ path = File.join(tmpdir, "createusertesting")
124
+ @@tmpfiles << path
125
+
126
+ file = nil
127
+ assert_nothing_raised {
128
+ file = Puppet::Type::PFile.create(
129
+ :path => path,
130
+ :owner => user.name,
131
+ :create => true,
132
+ :mode => "755"
133
+ )
134
+ }
135
+
136
+ comp = newcomp("createusertest", file)
137
+
138
+ assert_events(comp, [:file_created])
139
+ end
140
+
141
+ def test_ownerasroot
142
+ file = mktestfile()
143
+
144
+ users = {}
145
+ count = 0
146
+
147
+ # collect five users
148
+ Etc.passwd { |passwd|
149
+ if count > 5
150
+ break
151
+ else
152
+ count += 1
153
+ end
154
+ users[passwd.uid] = passwd.name
155
+ }
156
+
157
+ fake = {}
158
+ # find a fake user
159
+ while true
160
+ a = rand(1000)
161
+ begin
162
+ Etc.getpwuid(a)
163
+ rescue
164
+ fake[a] = "fakeuser"
165
+ break
166
+ end
167
+ end
168
+
169
+ users.each { |uid, name|
170
+ assert_nothing_raised() {
171
+ file[:owner] = name
172
+ }
173
+ changes = []
174
+ assert_nothing_raised() {
175
+ changes << file.evaluate
176
+ }
177
+ assert(changes.length > 0)
178
+ assert_nothing_raised() {
179
+ file.sync
180
+ }
181
+ assert_nothing_raised() {
182
+ file.evaluate
183
+ }
184
+ assert(file.insync?())
185
+ assert_nothing_raised() {
186
+ file[:owner] = uid
187
+ }
188
+ assert_nothing_raised() {
189
+ file.evaluate
190
+ }
191
+ # make sure changing to number doesn't cause a sync
192
+ assert(file.insync?())
193
+ }
194
+
195
+ # We no longer raise an error here, because we check at run time
196
+ #fake.each { |uid, name|
197
+ # assert_raise(Puppet::Error) {
198
+ # file[:owner] = name
199
+ # }
200
+ # assert_raise(Puppet::Error) {
201
+ # file[:owner] = uid
202
+ # }
203
+ #}
204
+ end
205
+
206
+ def test_groupasroot
207
+ file = mktestfile()
208
+ [%x{groups}.chomp.split(/ /), Process.groups].flatten.each { |group|
209
+ assert_nothing_raised() {
210
+ file[:group] = group
211
+ }
212
+ assert(file.state(:group))
213
+ assert(file.state(:group).should)
214
+ assert_nothing_raised() {
215
+ file.evaluate
216
+ }
217
+ assert_nothing_raised() {
218
+ file.sync
219
+ }
220
+ assert_nothing_raised() {
221
+ file.evaluate
222
+ }
223
+ assert(file.insync?())
224
+ assert_nothing_raised() {
225
+ file.delete(:group)
226
+ }
227
+ }
228
+ end
229
+ else
230
+ $stderr.puts "Run as root for complete owner and group testing"
231
+ end
232
+
233
+ def test_create
234
+ %w{a b c d}.collect { |name| "/tmp/createst%s" % name }.each { |path|
235
+ file =nil
236
+ assert_nothing_raised() {
237
+ file = Puppet::Type::PFile.create(
238
+ :name => path,
239
+ :create => true
240
+ )
241
+ }
242
+ assert_nothing_raised() {
243
+ file.evaluate
244
+ }
245
+ assert_nothing_raised() {
246
+ file.sync
247
+ }
248
+ assert_nothing_raised() {
249
+ file.evaluate
250
+ }
251
+ assert(file.insync?())
252
+ assert(FileTest.file?(path))
253
+ @@tmpfiles.push path
254
+ }
255
+ end
256
+
257
+ def test_create_dir
258
+ %w{a b c d}.collect { |name| "/tmp/createst%s" % name }.each { |path|
259
+ file = nil
260
+ assert_nothing_raised() {
261
+ file = Puppet::Type::PFile.create(
262
+ :name => path,
263
+ :create => "directory"
264
+ )
265
+ }
266
+ assert_nothing_raised() {
267
+ file.evaluate
268
+ }
269
+ assert_nothing_raised() {
270
+ file.sync
271
+ }
272
+ assert_nothing_raised() {
273
+ file.evaluate
274
+ }
275
+ assert(file.insync?())
276
+ assert(FileTest.directory?(path))
277
+ @@tmpfiles.push path
278
+ }
279
+ end
280
+
281
+ def test_modes
282
+ file = mktestfile
283
+ [0644,0755,0777,0641].each { |mode|
284
+ assert_nothing_raised() {
285
+ file[:mode] = mode
286
+ }
287
+ assert_nothing_raised() {
288
+ file.evaluate
289
+ }
290
+ assert_nothing_raised() {
291
+ file.sync
292
+ }
293
+ assert_nothing_raised() {
294
+ file.evaluate
295
+ }
296
+ assert(file.insync?())
297
+ assert_nothing_raised() {
298
+ file.delete(:mode)
299
+ }
300
+ }
301
+ end
302
+
303
+ def test_checksums
304
+ types = %w{md5 md5lite timestamp time}
305
+ exists = "/tmp/sumtest-exists"
306
+ nonexists = "/tmp/sumtest-nonexists"
307
+
308
+ @@tmpfiles << exists
309
+ @@tmpfiles << nonexists
310
+
311
+ # try it both with files that exist and ones that don't
312
+ files = [exists, nonexists]
313
+ initstorage
314
+ File.open(exists,"w") { |of|
315
+ 10.times {
316
+ of.puts rand(100)
317
+ }
318
+ }
319
+ types.each { |type|
320
+ files.each { |path|
321
+ if Puppet[:debug]
322
+ Puppet.info "Testing %s on %s" % [type,path]
323
+ end
324
+ file = nil
325
+ events = nil
326
+ # okay, we now know that we have a file...
327
+ assert_nothing_raised() {
328
+ file = Puppet::Type::PFile.create(
329
+ :name => path,
330
+ :create => true,
331
+ :checksum => type
332
+ )
333
+ }
334
+ comp = Puppet::Type::Component.create(
335
+ :name => "componentfile"
336
+ )
337
+ comp.push file
338
+ trans = nil
339
+ assert_nothing_raised() {
340
+ trans = comp.evaluate
341
+ }
342
+
343
+ if file.name !~ /nonexists/
344
+ sum = file.state(:checksum)
345
+ assert_equal(sum.is, sum.should)
346
+ assert(sum.insync?)
347
+ end
348
+
349
+ assert_nothing_raised() {
350
+ events = trans.evaluate.collect { |e| e.event }
351
+ }
352
+ # we don't want to kick off an event the first time we
353
+ # come across a file
354
+ assert(
355
+ ! events.include?(:file_modified)
356
+ )
357
+ assert_nothing_raised() {
358
+ File.open(path,"w") { |of|
359
+ of.puts rand(100)
360
+ }
361
+ }
362
+ Puppet::Type::PFile.clear
363
+ Puppet::Type::Component.clear
364
+ sleep 1
365
+
366
+ # now recreate the file
367
+ assert_nothing_raised() {
368
+ file = Puppet::Type::PFile.create(
369
+ :name => path,
370
+ :checksum => type
371
+ )
372
+ }
373
+ comp = Puppet::Type::Component.create(
374
+ :name => "componentfile"
375
+ )
376
+ comp.push file
377
+ trans = nil
378
+ assert_nothing_raised() {
379
+ trans = comp.evaluate
380
+ }
381
+ assert_nothing_raised() {
382
+ events = trans.evaluate.collect { |e| e.event }
383
+ }
384
+
385
+ sum = file.state(:checksum)
386
+
387
+ # verify that we're actually getting notified when a file changes
388
+ assert(
389
+ events.include?(:file_modified)
390
+ )
391
+ assert_nothing_raised() {
392
+ Puppet::Type::PFile.clear
393
+ Puppet::Type::Component.clear
394
+ }
395
+ }
396
+ }
397
+ end
398
+
399
+ def cyclefile(path)
400
+ # i had problems with using :name instead of :path
401
+ [:name,:path].each { |param|
402
+ file = nil
403
+ changes = nil
404
+ comp = nil
405
+ trans = nil
406
+
407
+ initstorage
408
+ assert_nothing_raised {
409
+ file = Puppet::Type::PFile.create(
410
+ param => path,
411
+ :recurse => true,
412
+ :checksum => "md5"
413
+ )
414
+ }
415
+ comp = Puppet::Type::Component.create(
416
+ :name => "component"
417
+ )
418
+ comp.push file
419
+ assert_nothing_raised {
420
+ trans = comp.evaluate
421
+ }
422
+ assert_nothing_raised {
423
+ trans.evaluate
424
+ }
425
+ #assert_nothing_raised {
426
+ # file.sync
427
+ #}
428
+ clearstorage
429
+ Puppet::Type.allclear
430
+ }
431
+ end
432
+
433
+ def test_recursion
434
+ basedir = tempfile()
435
+ subdir = File.join(basedir, "this", "is", "sub", "dir")
436
+ tmpfile = File.join(subdir,"testing")
437
+ FileUtils.mkdir_p(subdir)
438
+
439
+ dir = nil
440
+ assert_nothing_raised {
441
+ dir = Puppet::Type::PFile.create(
442
+ :path => basedir,
443
+ :recurse => true,
444
+ :check => %w{owner mode group}
445
+ )
446
+ }
447
+
448
+ assert_nothing_raised {
449
+ dir.retrieve
450
+ }
451
+
452
+ subobj = nil
453
+ assert_nothing_raised {
454
+ subobj = Puppet::Type::PFile[subdir]
455
+ }
456
+
457
+ assert(subobj, "Could not retrieve subdir object")
458
+
459
+ File.open(tmpfile, "w") { |f| f.puts "yayness" }
460
+
461
+ dir.retrieve
462
+
463
+ file = nil
464
+ assert_nothing_raised {
465
+ file = Puppet::Type::PFile[tmpfile]
466
+ }
467
+
468
+ assert(file, "Could not retrieve file object")
469
+
470
+ end
471
+
472
+ =begin
473
+ def test_ignore
474
+
475
+ end
476
+ =end
477
+
478
+ # XXX disabled until i change how dependencies work
479
+ def disabled_test_recursionwithcreation
480
+ path = "/tmp/this/directory/structure/does/not/exist"
481
+ @@tmpfiles.push "/tmp/this"
482
+
483
+ file = nil
484
+ assert_nothing_raised {
485
+ file = mkfile(
486
+ :name => path,
487
+ :recurse => true,
488
+ :create => true
489
+ )
490
+ }
491
+
492
+ trans = nil
493
+ comp = newcomp("recursewithfiles", file)
494
+ assert_nothing_raised {
495
+ trans = comp.evaluate
496
+ }
497
+
498
+ events = nil
499
+ assert_nothing_raised {
500
+ events = trans.evaluate.collect { |e| e.event.to_s }
501
+ }
502
+
503
+ puts "events are %s" % events.join(", ")
504
+ end
505
+
506
+ def test_filetype_retrieval
507
+ file = nil
508
+
509
+ assert_nothing_raised {
510
+ file = Puppet::Type::PFile.create(
511
+ :name => tmpdir(),
512
+ :check => :type
513
+ )
514
+ }
515
+
516
+ assert_nothing_raised {
517
+ file.evaluate
518
+ }
519
+
520
+ assert_equal("directory", file.state(:type).is)
521
+
522
+ assert_nothing_raised {
523
+ file = Puppet::Type::PFile.create(
524
+ :name => "/etc/passwd",
525
+ :check => :type
526
+ )
527
+ }
528
+
529
+ assert_nothing_raised {
530
+ file.evaluate
531
+ }
532
+
533
+ assert_equal("file", file.state(:type).is)
534
+
535
+ assert_raise(Puppet::Error) {
536
+ file[:type] = "directory"
537
+ }
538
+
539
+ assert(file.insync?)
540
+
541
+ assert_raise(Puppet::Error) {
542
+ file.sync
543
+ }
544
+ end
545
+
546
+ def test_remove
547
+ basedir = tempfile()
548
+ subdir = File.join(basedir, "this")
549
+ FileUtils.mkdir_p(subdir)
550
+
551
+ dir = nil
552
+ assert_nothing_raised {
553
+ dir = Puppet::Type::PFile.create(
554
+ :path => basedir,
555
+ :recurse => true,
556
+ :check => %w{owner mode group}
557
+ )
558
+ }
559
+
560
+ assert_nothing_raised {
561
+ dir.retrieve
562
+ }
563
+
564
+ obj = nil
565
+ assert_nothing_raised {
566
+ obj = Puppet::Type::PFile[subdir]
567
+ }
568
+
569
+ assert(obj, "Could not retrieve subdir object")
570
+
571
+ assert_nothing_raised {
572
+ obj.remove(true)
573
+ }
574
+
575
+ assert_nothing_raised {
576
+ obj = Puppet::Type::PFile[subdir]
577
+ }
578
+
579
+ assert_nil(obj, "Retrieved removed object")
580
+ end
581
+
582
+ def test_zpath
583
+ dir = tempfile()
584
+
585
+ path = File.join(dir, "and", "a", "sub", "dir")
586
+
587
+ assert_nothing_raised("Could not make file") {
588
+ FileUtils.mkdir_p(File.dirname(path))
589
+ File.open(path, "w") { |f| f.puts "yayness" }
590
+ }
591
+
592
+ file = nil
593
+ dirobj = nil
594
+ assert_nothing_raised("Could not make file object") {
595
+ dirobj = Puppet::Type::PFile.create(
596
+ :path => dir,
597
+ :recurse => true,
598
+ :check => %w{mode owner group}
599
+ )
600
+ }
601
+
602
+ assert_nothing_raised {
603
+ dirobj.retrieve
604
+ }
605
+
606
+ assert_nothing_raised {
607
+ file = dirobj.class[path]
608
+ }
609
+
610
+ assert(file, "Could not retrieve file object")
611
+
612
+ assert_equal("file=%s" % file.name, file.path)
613
+ end
614
+ end
615
+
616
+ # $Id: file.rb 740 2005-11-01 20:22:19Z luke $