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,587 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '..'
3
+ $:.unshift '../../lib'
4
+ $:.unshift "../../../../language/trunk/lib"
5
+ $puppetbase = "../../../../language/trunk"
6
+ end
7
+
8
+ require 'puppet'
9
+ require 'cgi'
10
+ require 'test/unit'
11
+ require 'fileutils'
12
+ require 'puppettest'
13
+
14
+ class TestFileSources < Test::Unit::TestCase
15
+ include FileTesting
16
+ def setup
17
+ super
18
+ begin
19
+ initstorage
20
+ rescue
21
+ system("rm -rf %s" % Puppet[:checksumfile])
22
+ end
23
+ if defined? @port
24
+ @port += 1
25
+ else
26
+ @port = 8800
27
+ end
28
+ end
29
+
30
+ def teardown
31
+ super
32
+ clearstorage
33
+ end
34
+
35
+ def initstorage
36
+ Puppet::Storage.init
37
+ Puppet::Storage.load
38
+ end
39
+
40
+ def clearstorage
41
+ Puppet::Storage.store
42
+ Puppet::Storage.clear
43
+ end
44
+
45
+ def test_newchild
46
+ path = "/tmp/newchilddir"
47
+ @@tmpfiles.push path
48
+
49
+ FileUtils.mkdir_p path
50
+ File.open(File.join(path,"childtest"), "w") { |of|
51
+ of.puts "yayness"
52
+ }
53
+ file = nil
54
+ comp = nil
55
+ trans = nil
56
+ assert_nothing_raised {
57
+ file = Puppet::Type::PFile.create(
58
+ :name => path
59
+ )
60
+ }
61
+ child = nil
62
+ assert_nothing_raised {
63
+ child = file.newchild("childtest")
64
+ }
65
+ assert(child)
66
+ assert_raise(Puppet::DevError) {
67
+ file.newchild(File.join(path,"childtest"))
68
+ }
69
+ end
70
+
71
+ def test_simplelocalsource
72
+ path = "/tmp/Filesourcetest"
73
+ @@tmpfiles.push path
74
+ FileUtils.mkdir_p path
75
+ frompath = File.join(path,"source")
76
+ topath = File.join(path,"dest")
77
+ fromfile = nil
78
+ tofile = nil
79
+ trans = nil
80
+
81
+ File.open(frompath, File::WRONLY|File::CREAT|File::APPEND) { |of|
82
+ of.puts "yayness"
83
+ }
84
+ assert_nothing_raised {
85
+ tofile = Puppet::Type::PFile.create(
86
+ :name => topath,
87
+ :source => frompath
88
+ )
89
+ }
90
+ comp = Puppet::Type::Component.create(
91
+ :name => "component"
92
+ )
93
+ comp.push tofile
94
+ assert_nothing_raised {
95
+ trans = comp.evaluate
96
+ }
97
+ assert_nothing_raised {
98
+ trans.evaluate
99
+ }
100
+ # assert_nothing_raised {
101
+ # comp.sync
102
+ # }
103
+
104
+ assert(FileTest.exists?(topath))
105
+ from = File.open(frompath) { |o| o.read }
106
+ to = File.open(topath) { |o| o.read }
107
+ assert_equal(from,to)
108
+ @@tmpfiles.push path
109
+ end
110
+
111
+ def recursive_source_test(fromdir, todir)
112
+ Puppet::Type.allclear
113
+ initstorage
114
+ tofile = nil
115
+ trans = nil
116
+
117
+ assert_nothing_raised {
118
+ tofile = Puppet::Type::PFile.create(
119
+ :name => todir,
120
+ "recurse" => true,
121
+ "backup" => false,
122
+ "source" => fromdir
123
+ )
124
+ }
125
+ comp = Puppet::Type::Component.create(
126
+ :name => "component"
127
+ )
128
+ comp.push tofile
129
+ assert_nothing_raised {
130
+ trans = comp.evaluate
131
+ }
132
+ assert_nothing_raised {
133
+ trans.evaluate
134
+ }
135
+
136
+ assert(FileTest.exists?(todir))
137
+ Puppet::Type.allclear
138
+ end
139
+
140
+ def run_complex_sources(networked = false)
141
+ path = "/tmp/ComplexSourcesTest"
142
+ @@tmpfiles.push path
143
+
144
+ # first create the source directory
145
+ FileUtils.mkdir_p path
146
+
147
+
148
+ # okay, let's create a directory structure
149
+ fromdir = File.join(path,"fromdir")
150
+ Dir.mkdir(fromdir)
151
+ FileUtils.cd(fromdir) {
152
+ mkranddirsandfiles()
153
+ }
154
+
155
+ todir = File.join(path, "todir")
156
+ source = fromdir
157
+ if networked
158
+ source = "puppet://localhost/%s%s" % [networked, fromdir]
159
+ end
160
+ recursive_source_test(source, todir)
161
+
162
+ return [fromdir,todir]
163
+ end
164
+
165
+ def test_complex_sources_twice
166
+ fromdir, todir = run_complex_sources
167
+ assert_trees_equal(fromdir,todir)
168
+ recursive_source_test(fromdir, todir)
169
+ assert_trees_equal(fromdir,todir)
170
+ end
171
+
172
+ def test_sources_with_deleted_destfiles
173
+ fromdir, todir = run_complex_sources
174
+ # then delete some files
175
+ assert(FileTest.exists?(todir))
176
+ missing_files = delete_random_files(todir)
177
+
178
+ # and run
179
+ recursive_source_test(fromdir, todir)
180
+
181
+ missing_files.each { |file|
182
+ assert(FileTest.exists?(file), "Deleted file %s is still missing" % file)
183
+ }
184
+
185
+ # and make sure they're still equal
186
+ assert_trees_equal(fromdir,todir)
187
+ end
188
+
189
+ def test_sources_with_readonly_destfiles
190
+ fromdir, todir = run_complex_sources
191
+ assert(FileTest.exists?(todir))
192
+ readonly_random_files(todir)
193
+ recursive_source_test(fromdir, todir)
194
+
195
+ # and make sure they're still equal
196
+ assert_trees_equal(fromdir,todir)
197
+ end
198
+
199
+ def test_sources_with_modified_dest_files
200
+ fromdir, todir = run_complex_sources
201
+
202
+ assert(FileTest.exists?(todir))
203
+ # then modify some files
204
+ modify_random_files(todir)
205
+
206
+ recursive_source_test(fromdir, todir)
207
+
208
+ # and make sure they're still equal
209
+ assert_trees_equal(fromdir,todir)
210
+ end
211
+
212
+ def test_sources_with_added_destfiles
213
+ fromdir, todir = run_complex_sources
214
+ assert(FileTest.exists?(todir))
215
+ # and finally, add some new files
216
+ add_random_files(todir)
217
+
218
+ recursive_source_test(fromdir, todir)
219
+
220
+ fromtree = file_list(fromdir)
221
+ totree = file_list(todir)
222
+
223
+ assert(fromtree != totree)
224
+
225
+ # then remove our new files
226
+ FileUtils.cd(todir) {
227
+ %x{find . 2>/dev/null}.chomp.split(/\n/).each { |file|
228
+ if file =~ /file[0-9]+/
229
+ File.unlink(file)
230
+ end
231
+ }
232
+ }
233
+
234
+ # and make sure they're still equal
235
+ assert_trees_equal(fromdir,todir)
236
+ end
237
+
238
+ def test_RecursionWithAddedFiles
239
+ basedir = "/tmp/recursionplussaddedfiles"
240
+ Dir.mkdir(basedir)
241
+ @@tmpfiles << basedir
242
+ file1 = File.join(basedir, "file1")
243
+ file2 = File.join(basedir, "file2")
244
+ subdir1 = File.join(basedir, "subdir1")
245
+ file3 = File.join(subdir1, "file")
246
+ File.open(file1, "w") { |f| 3.times { f.print rand(100) } }
247
+ rootobj = nil
248
+ assert_nothing_raised {
249
+ rootobj = Puppet::Type::PFile.create(
250
+ :name => basedir,
251
+ :recurse => true,
252
+ :check => %w{type owner}
253
+ )
254
+
255
+ rootobj.evaluate
256
+ }
257
+
258
+ klass = Puppet::Type::PFile
259
+ assert(klass[basedir])
260
+ assert(klass[file1])
261
+ assert_nil(klass[file2])
262
+
263
+ File.open(file2, "w") { |f| 3.times { f.print rand(100) } }
264
+
265
+ assert_nothing_raised {
266
+ rootobj.evaluate
267
+ }
268
+ assert(klass[file2])
269
+
270
+ Dir.mkdir(subdir1)
271
+ File.open(file3, "w") { |f| 3.times { f.print rand(100) } }
272
+
273
+ assert_nothing_raised {
274
+ rootobj.evaluate
275
+ }
276
+ assert(klass[file3])
277
+ end
278
+
279
+ def mkfileserverconf(mounts)
280
+ file = "/tmp/fileserverconftestingfile%s" % rand(100)
281
+ File.open(file, "w") { |f|
282
+ mounts.each { |path, name|
283
+ f.puts "[#{name}]\n\tpath #{path}\n\tallow *\n"
284
+ }
285
+ }
286
+
287
+ @@tmpfiles << file
288
+ return file
289
+ end
290
+
291
+ # test raw xmlrpc calls
292
+ # this test is disabled because it requires way too much setup to get
293
+ # the certificates correct
294
+ def disabled_test_SimpleNetworkSources
295
+ server = nil
296
+ basedir = "/tmp/simplenetworksourcetesting"
297
+ @@tmpfiles << basedir
298
+
299
+ mounts = {
300
+ "/" => "root"
301
+ }
302
+
303
+ fileserverconf = mkfileserverconf(mounts)
304
+
305
+ if File.exists?(basedir)
306
+ system("rm -rf %s" % basedir)
307
+ end
308
+ Dir.mkdir(basedir)
309
+
310
+ Puppet[:puppetconf] = basedir
311
+ Puppet[:puppetvar] = basedir
312
+ Puppet[:autosign] = true
313
+
314
+ tmpname = "yaytesting"
315
+ tmpfile = File.join(basedir, tmpname)
316
+ File.open(tmpfile, "w") { |f| f.print rand(100) }
317
+
318
+ port = 8765
319
+ serverpid = nil
320
+ assert_nothing_raised() {
321
+ server = Puppet::Server.new(
322
+ :Port => port,
323
+ :Handlers => {
324
+ :CA => {}, # so that certs autogenerate
325
+ :FileServer => {
326
+ :Config => fileserverconf
327
+ }
328
+ }
329
+ )
330
+
331
+ }
332
+ serverpid = fork {
333
+ assert_nothing_raised() {
334
+ #trap(:INT) { server.shutdown; Kernel.exit! }
335
+ trap(:INT) { server.shutdown }
336
+ server.start
337
+ }
338
+ }
339
+ @@tmppids << serverpid
340
+
341
+ client = nil
342
+ assert_nothing_raised() {
343
+ client = XMLRPC::Client.new("localhost", "/RPC2", port, nil, nil,
344
+ nil, nil, true, 3)
345
+ }
346
+ retval = nil
347
+
348
+ sleep(1)
349
+
350
+ list = nil
351
+ rpath = "/root%s" % tmpfile
352
+ assert_nothing_raised {
353
+ list = client.call("fileserver.list", rpath, false, false)
354
+ }
355
+
356
+ assert_equal("/\tfile", list)
357
+
358
+ assert_nothing_raised {
359
+ list = client.call("fileserver.describe", rpath)
360
+ }
361
+
362
+ assert_match(/^\d+\tfile\t\d+\t\d+\t.+$/, list)
363
+
364
+ assert_nothing_raised {
365
+ list = client.call("fileserver.retrieve", rpath)
366
+ }
367
+
368
+ contents = File.read(tmpfile)
369
+ assert_equal(contents, CGI.unescape(list))
370
+
371
+ assert_nothing_raised {
372
+ system("kill -INT %s" % serverpid)
373
+ }
374
+ end
375
+
376
+ def test_NetworkSources
377
+ server = nil
378
+ basedir = "/tmp/networksourcetesting"
379
+ @@tmpfiles << basedir
380
+ if File.exists?(basedir)
381
+ system("rm -rf %s" % basedir)
382
+ end
383
+ Dir.mkdir(basedir)
384
+
385
+ mounts = {
386
+ "/" => "root"
387
+ }
388
+
389
+ fileserverconf = mkfileserverconf(mounts)
390
+
391
+ Puppet[:puppetconf] = basedir
392
+ Puppet[:puppetvar] = basedir
393
+ Puppet[:autosign] = true
394
+
395
+ Puppet[:masterport] = 8762
396
+
397
+ serverpid = nil
398
+ assert_nothing_raised() {
399
+ server = Puppet::Server.new(
400
+ :Handlers => {
401
+ :CA => {}, # so that certs autogenerate
402
+ :FileServer => {
403
+ :Config => fileserverconf
404
+ }
405
+ }
406
+ )
407
+
408
+ }
409
+ serverpid = fork {
410
+ assert_nothing_raised() {
411
+ #trap(:INT) { server.shutdown; Kernel.exit! }
412
+ trap(:INT) { server.shutdown }
413
+ server.start
414
+ }
415
+ }
416
+ @@tmppids << serverpid
417
+
418
+ sleep(1)
419
+
420
+ fromdir, todir = run_complex_sources("root")
421
+ assert_trees_equal(fromdir,todir)
422
+ recursive_source_test(fromdir, todir)
423
+ assert_trees_equal(fromdir,todir)
424
+
425
+ assert_nothing_raised {
426
+ system("kill -INT %s" % serverpid)
427
+ }
428
+ end
429
+
430
+ def test_networkSourcesWithoutService
431
+ server = nil
432
+
433
+ Puppet[:autosign] = true
434
+ Puppet[:masterport] = 8765
435
+
436
+ serverpid = nil
437
+ assert_nothing_raised() {
438
+ server = Puppet::Server.new(
439
+ :Handlers => {
440
+ :CA => {}, # so that certs autogenerate
441
+ }
442
+ )
443
+
444
+ }
445
+ serverpid = fork {
446
+ assert_nothing_raised() {
447
+ #trap(:INT) { server.shutdown; Kernel.exit! }
448
+ trap(:INT) { server.shutdown }
449
+ server.start
450
+ }
451
+ }
452
+ @@tmppids << serverpid
453
+
454
+ sleep(1)
455
+
456
+ name = File.join(tmpdir(), "nosourcefile")
457
+ file = Puppet::Type::PFile.create(
458
+ :source => "puppet://localhost/dist/file",
459
+ :name => name
460
+ )
461
+
462
+ assert_nothing_raised {
463
+ file.retrieve
464
+ }
465
+
466
+ comp = newcomp("nosource", file)
467
+
468
+ assert_nothing_raised {
469
+ comp.evaluate
470
+ }
471
+
472
+ assert(!FileTest.exists?(name), "File with no source exists anyway")
473
+ end
474
+
475
+ def test_unmountedNetworkSources
476
+ server = nil
477
+ mounts = {
478
+ "/" => "root",
479
+ "/noexistokay" => "noexist"
480
+ }
481
+
482
+ fileserverconf = mkfileserverconf(mounts)
483
+
484
+ Puppet[:autosign] = true
485
+ Puppet[:masterport] = @port
486
+
487
+ serverpid = nil
488
+ assert_nothing_raised() {
489
+ server = Puppet::Server.new(
490
+ :Port => @port,
491
+ :Handlers => {
492
+ :CA => {}, # so that certs autogenerate
493
+ :FileServer => {
494
+ :Config => fileserverconf
495
+ }
496
+ }
497
+ )
498
+
499
+ }
500
+
501
+ serverpid = fork {
502
+ assert_nothing_raised() {
503
+ #trap(:INT) { server.shutdown; Kernel.exit! }
504
+ trap(:INT) { server.shutdown }
505
+ server.start
506
+ }
507
+ }
508
+ @@tmppids << serverpid
509
+
510
+ sleep(1)
511
+
512
+ name = File.join(tmpdir(), "nosourcefile")
513
+ file = Puppet::Type::PFile.create(
514
+ :source => "puppet://localhost/noexist/file",
515
+ :name => name
516
+ )
517
+
518
+ assert_nothing_raised {
519
+ file.retrieve
520
+ }
521
+
522
+ comp = newcomp("nosource", file)
523
+
524
+ assert_nothing_raised {
525
+ comp.evaluate
526
+ }
527
+
528
+ assert(!FileTest.exists?(name), "File with no source exists anyway")
529
+ end
530
+
531
+ def test_alwayschecksum
532
+ from = tempfile()
533
+ to = tempfile()
534
+
535
+ File.open(from, "w") { |f| f.puts "yayness" }
536
+ File.open(to, "w") { |f| f.puts "yayness" }
537
+
538
+ file = nil
539
+
540
+ # Now the files should be exactly the same, so we should not see attempts
541
+ # at copying
542
+ assert_nothing_raised {
543
+ file = Puppet::Type::PFile.create(
544
+ :path => to,
545
+ :source => from
546
+ )
547
+ }
548
+
549
+ file.retrieve
550
+
551
+ assert(file.is(:checksum), "File does not have a checksum state")
552
+
553
+ assert_equal(0, file.evaluate.length, "File produced changes")
554
+
555
+ end
556
+
557
+ def test_sourcepaths
558
+ files = []
559
+ 3.times {
560
+ files << tempfile()
561
+ }
562
+
563
+ to = tempfile()
564
+
565
+ File.open(files[-1], "w") { |f| f.puts "yee-haw" }
566
+
567
+ file = nil
568
+ assert_nothing_raised {
569
+ file = Puppet::Type::PFile.create(
570
+ :name => to,
571
+ :source => files
572
+ )
573
+ }
574
+
575
+ comp = newcomp(file)
576
+ assert_events(comp, [:file_changed])
577
+
578
+ assert(File.exists?(to), "File does not exist")
579
+
580
+ txt = nil
581
+ File.open(to) { |f| txt = f.read.chomp }
582
+
583
+ assert_equal("yee-haw", txt, "Contents do not match")
584
+ end
585
+ end
586
+
587
+ # $Id: filesources.rb 745 2005-11-16 22:17:29Z luke $