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,710 @@
1
+ if __FILE__ == $0
2
+ if Dir.getwd =~ /test\/server$/
3
+ Dir.chdir("..")
4
+ end
5
+
6
+ $:.unshift '../lib'
7
+ $puppetbase = ".."
8
+
9
+ end
10
+
11
+ require 'puppet'
12
+ require 'puppet/server/fileserver'
13
+ require 'test/unit'
14
+ require 'puppettest.rb'
15
+
16
+ class TestFileServer < Test::Unit::TestCase
17
+ include TestPuppet
18
+ # make a simple file source
19
+ def mktestdir
20
+ testdir = File.join(tmpdir(), "remotefilecopytesting")
21
+ @@tmpfiles << testdir
22
+
23
+ # create a tmpfile
24
+ pattern = "tmpfile"
25
+ tmpfile = File.join(testdir, pattern)
26
+ assert_nothing_raised {
27
+ Dir.mkdir(testdir)
28
+ File.open(tmpfile, "w") { |f|
29
+ 3.times { f.puts rand(100) }
30
+ }
31
+ }
32
+
33
+ return [testdir, %r{#{pattern}}, tmpfile]
34
+ end
35
+
36
+ # make a bunch of random test files
37
+ def mktestfiles(testdir)
38
+ @@tmpfiles << testdir
39
+ assert_nothing_raised {
40
+ Dir.mkdir(testdir)
41
+ @@tmpfiles << testdir
42
+ files = %w{a b c d e}.collect { |l|
43
+ name = File.join(testdir, "file%s" % l)
44
+ File.open(name, "w") { |f|
45
+ f.puts rand(100)
46
+ }
47
+
48
+ name
49
+ }
50
+
51
+ return files
52
+ }
53
+ end
54
+
55
+ def assert_describe(base, file, server)
56
+ file = File.basename(file)
57
+ assert_nothing_raised {
58
+ desc = server.describe(base + file)
59
+ assert(desc, "Got no description for %s" % file)
60
+ assert(desc != "", "Got no description for %s" % file)
61
+ assert_match(/^\d+/, desc, "Got invalid description %s" % desc)
62
+ }
63
+ end
64
+
65
+ # test for invalid names
66
+ def test_namefailures
67
+ server = nil
68
+ assert_nothing_raised {
69
+ server = Puppet::Server::FileServer.new(
70
+ :Local => true,
71
+ :Config => false
72
+ )
73
+ }
74
+
75
+ assert_raise(Puppet::Server::FileServerError) {
76
+ server.mount("/tmp", "invalid+name")
77
+ }
78
+
79
+ assert_raise(Puppet::Server::FileServerError) {
80
+ server.mount("/tmp", "invalid-name")
81
+ }
82
+
83
+ assert_raise(Puppet::Server::FileServerError) {
84
+ server.mount("/tmp", "invalid name")
85
+ }
86
+
87
+ assert_raise(Puppet::Server::FileServerError) {
88
+ server.mount("/tmp", "")
89
+ }
90
+ end
91
+
92
+ # verify that listing the root behaves as expected
93
+ def test_listroot
94
+ server = nil
95
+ testdir, pattern, tmpfile = mktestdir()
96
+
97
+ file = nil
98
+ checks = Puppet::Server::FileServer::CHECKPARAMS
99
+
100
+ # and make our fileserver
101
+ assert_nothing_raised {
102
+ server = Puppet::Server::FileServer.new(
103
+ :Local => true,
104
+ :Config => false
105
+ )
106
+ }
107
+
108
+ # mount the testdir
109
+ assert_nothing_raised {
110
+ server.mount(testdir, "test")
111
+ }
112
+
113
+ # and verify different iterations of 'root' return the same value
114
+ list = nil
115
+ assert_nothing_raised {
116
+ list = server.list("/test/", true, false)
117
+ }
118
+
119
+ assert(list =~ pattern)
120
+
121
+ assert_nothing_raised {
122
+ list = server.list("/test", true, false)
123
+ }
124
+ assert(list =~ pattern)
125
+
126
+ end
127
+
128
+ # test listing individual files
129
+ def test_getfilelist
130
+ server = nil
131
+ testdir, pattern, tmpfile = mktestdir()
132
+
133
+ file = nil
134
+
135
+ assert_nothing_raised {
136
+ server = Puppet::Server::FileServer.new(
137
+ :Local => true,
138
+ :Config => false
139
+ )
140
+ }
141
+
142
+ assert_nothing_raised {
143
+ server.mount(testdir, "test")
144
+ }
145
+
146
+ # get our listing
147
+ list = nil
148
+ sfile = "/test/tmpfile"
149
+ assert_nothing_raised {
150
+ list = server.list(sfile, true, false)
151
+ }
152
+
153
+ assert_nothing_raised {
154
+ file = Puppet::Type::PFile[tmpfile]
155
+ }
156
+
157
+ output = "/\tfile"
158
+
159
+ # verify it got listed as a file
160
+ assert_equal(output, list)
161
+
162
+ # verify we got all fields
163
+ assert(list !~ /\t\t/)
164
+
165
+ # verify that we didn't get the directory itself
166
+ list.split("\n").each { |line|
167
+ assert(line !~ %r{remotefile})
168
+ }
169
+
170
+ # and then verify that the contents match
171
+ contents = File.read(tmpfile)
172
+
173
+ ret = nil
174
+ assert_nothing_raised {
175
+ ret = server.retrieve(sfile)
176
+ }
177
+
178
+ assert_equal(contents, ret)
179
+ end
180
+
181
+ # check that the fileserver is seeing newly created files
182
+ def test_seenewfiles
183
+ server = nil
184
+ testdir, pattern, tmpfile = mktestdir()
185
+
186
+
187
+ newfile = File.join(testdir, "newfile")
188
+
189
+ # go through the whole schtick again...
190
+ file = nil
191
+ checks = Puppet::Server::FileServer::CHECKPARAMS
192
+
193
+ assert_nothing_raised {
194
+ server = Puppet::Server::FileServer.new(
195
+ :Local => true,
196
+ :Config => false
197
+ )
198
+ }
199
+
200
+ assert_nothing_raised {
201
+ server.mount(testdir, "test")
202
+ }
203
+
204
+ list = nil
205
+ sfile = "/test/"
206
+ assert_nothing_raised {
207
+ list = server.list(sfile, true, false)
208
+ }
209
+
210
+ # create the new file
211
+ File.open(newfile, "w") { |f|
212
+ 3.times { f.puts rand(100) }
213
+ }
214
+
215
+ newlist = nil
216
+ assert_nothing_raised {
217
+ newlist = server.list(sfile, true, false)
218
+ }
219
+
220
+ # verify the list has changed
221
+ assert(list != newlist)
222
+
223
+ # and verify that we are specifically seeing the new file
224
+ assert(newlist =~ /newfile/)
225
+ end
226
+
227
+ # verify we can mount /, which is what local file servers will
228
+ # normally do
229
+ def test_zmountroot
230
+ server = nil
231
+ assert_nothing_raised {
232
+ server = Puppet::Server::FileServer.new(
233
+ :Local => true,
234
+ :Config => false
235
+ )
236
+ }
237
+
238
+ assert_nothing_raised {
239
+ server.mount("/", "root")
240
+ }
241
+
242
+ testdir, pattern, tmpfile = mktestdir()
243
+
244
+ list = nil
245
+ assert_nothing_raised {
246
+ list = server.list("/root/" + testdir, true, false)
247
+ }
248
+
249
+ assert(list =~ pattern)
250
+ assert_nothing_raised {
251
+ list = server.list("/root" + testdir, true, false)
252
+ }
253
+
254
+ assert(list =~ pattern)
255
+ end
256
+
257
+ # verify that we're correctly recursing the right number of levels
258
+ def test_recursionlevels
259
+ server = nil
260
+ assert_nothing_raised {
261
+ server = Puppet::Server::FileServer.new(
262
+ :Local => true,
263
+ :Config => false
264
+ )
265
+ }
266
+
267
+ # make our deep recursion
268
+ basedir = File.join(tmpdir(), "recurseremotetesting")
269
+ testdir = "%s/with/some/sub/directories/for/the/purposes/of/testing" % basedir
270
+ oldfile = File.join(testdir, "oldfile")
271
+ assert_nothing_raised {
272
+ system("mkdir -p %s" % testdir)
273
+ File.open(oldfile, "w") { |f|
274
+ 3.times { f.puts rand(100) }
275
+ }
276
+ @@tmpfiles << basedir
277
+ }
278
+
279
+ assert_nothing_raised {
280
+ server.mount(basedir, "test")
281
+ }
282
+
283
+ # get our list
284
+ list = nil
285
+ assert_nothing_raised {
286
+ list = server.list("/test/with", false, false)
287
+ }
288
+
289
+ # make sure we only got one line, since we're not recursing
290
+ assert(list !~ /\n/)
291
+
292
+ # for each level of recursion, make sure we get the right list
293
+ [0, 1, 2].each { |num|
294
+ assert_nothing_raised {
295
+ list = server.list("/test/with", num, false)
296
+ }
297
+
298
+ count = 0
299
+ while list =~ /\n/
300
+ list.sub!(/\n/, '')
301
+ count += 1
302
+ end
303
+ assert_equal(num, count)
304
+ }
305
+ end
306
+
307
+ # verify that we're not seeing the dir we ask for; i.e., that our
308
+ # list is relative to that dir, not it's parent dir
309
+ def test_listedpath
310
+ server = nil
311
+ assert_nothing_raised {
312
+ server = Puppet::Server::FileServer.new(
313
+ :Local => true,
314
+ :Config => false
315
+ )
316
+ }
317
+
318
+
319
+ # create a deep dir
320
+ basedir = "/tmp/remotefilecopying"
321
+ testdir = "%s/with/some/sub/directories/for/testing" % basedir
322
+ oldfile = File.join(testdir, "oldfile")
323
+ assert_nothing_raised {
324
+ system("mkdir -p %s" % testdir)
325
+ File.open(oldfile, "w") { |f|
326
+ 3.times { f.puts rand(100) }
327
+ }
328
+ @@tmpfiles << basedir
329
+ }
330
+
331
+ # mounty mounty
332
+ assert_nothing_raised {
333
+ server.mount(basedir, "localhost")
334
+ }
335
+
336
+ list = nil
337
+ # and then check a few dirs
338
+ assert_nothing_raised {
339
+ list = server.list("/localhost/with", false, false)
340
+ }
341
+
342
+ assert(list !~ /with/)
343
+
344
+ assert_nothing_raised {
345
+ list = server.list("/localhost/with/some/sub", true, false)
346
+ }
347
+
348
+ assert(list !~ /sub/)
349
+ end
350
+
351
+ # test many dirs, not necessarily very deep
352
+ def test_widelists
353
+ server = nil
354
+ assert_nothing_raised {
355
+ server = Puppet::Server::FileServer.new(
356
+ :Local => true,
357
+ :Config => false
358
+ )
359
+ }
360
+
361
+ basedir = "/tmp/remotefilecopying"
362
+ dirs = %w{a set of directories}
363
+ assert_nothing_raised {
364
+ Dir.mkdir(basedir)
365
+ dirs.each { |dir|
366
+ Dir.mkdir(File.join(basedir, dir))
367
+ }
368
+ @@tmpfiles << basedir
369
+ }
370
+
371
+ assert_nothing_raised {
372
+ server.mount(basedir, "localhost")
373
+ }
374
+
375
+ list = nil
376
+ assert_nothing_raised {
377
+ list = server.list("/localhost/", 1, false)
378
+ }
379
+ assert_instance_of(String, list, "Server returned %s instead of string")
380
+ list = list.split("\n")
381
+
382
+ assert_equal(dirs.length + 1, list.length)
383
+ end
384
+
385
+ # verify that 'describe' works as advertised
386
+ def test_describe
387
+ server = nil
388
+ testdir = "/tmp/remotefilecopying"
389
+ files = mktestfiles(testdir)
390
+
391
+ file = nil
392
+ checks = Puppet::Server::FileServer::CHECKPARAMS
393
+
394
+ assert_nothing_raised {
395
+ server = Puppet::Server::FileServer.new(
396
+ :Local => true,
397
+ :Config => false
398
+ )
399
+ }
400
+
401
+ assert_nothing_raised {
402
+ server.mount(testdir, "test")
403
+ }
404
+
405
+ # get our list
406
+ list = nil
407
+ sfile = "/test/"
408
+ assert_nothing_raised {
409
+ list = server.list(sfile, true, false)
410
+ }
411
+
412
+ # and describe each file in the list
413
+ assert_nothing_raised {
414
+ list.split("\n").each { |line|
415
+ file, type = line.split("\t")
416
+
417
+ desc = server.describe(sfile + file)
418
+ }
419
+ }
420
+
421
+ # and then make sure we can describe everything that we know is there
422
+ files.each { |file|
423
+ assert_describe(sfile, file, server)
424
+ }
425
+
426
+ # And then describe some files that we know aren't there
427
+ retval = nil
428
+ assert_nothing_raised("Describing non-existent files raised an error") {
429
+ retval = server.describe(sfile + "noexisties")
430
+ }
431
+
432
+ assert_equal("", retval, "Description of non-existent files returned a value")
433
+
434
+ # Now try to describe some sources that don't even exist
435
+ retval = nil
436
+ assert_raise(Puppet::Server::FileServerError,
437
+ "Describing non-existent mount did not raise an error") {
438
+ retval = server.describe("/notmounted/" + "noexisties")
439
+ }
440
+
441
+ assert_nil(retval, "Description of non-existent mounts returned a value")
442
+ end
443
+
444
+ # test that our config file is parsing and working as planned
445
+ def test_configfile
446
+ server = nil
447
+ basedir = File.join(tmpdir, "fileserverconfigfiletesting")
448
+ @@tmpfiles << basedir
449
+
450
+ # make some dirs for mounting
451
+ Dir.mkdir(basedir)
452
+ mounts = {}
453
+ %w{thing thus these those}.each { |dir|
454
+ path = File.join(basedir, dir)
455
+ mounts[dir] = mktestfiles(path)
456
+
457
+ }
458
+
459
+ # create an example file with each of them
460
+ conffile = tempfile
461
+ @@tmpfiles << conffile
462
+
463
+ File.open(conffile, "w") { |f|
464
+ f.print "# a test config file
465
+
466
+ [thing]
467
+ path #{basedir}/thing
468
+ allow 192.168.0.*
469
+
470
+ [thus]
471
+ path #{basedir}/thus
472
+ allow *.madstop.com, *.kanies.com
473
+ deny *.sub.madstop.com
474
+
475
+ [these]
476
+ path #{basedir}/these
477
+
478
+ [those]
479
+ path #{basedir}/those
480
+
481
+ "
482
+ }
483
+
484
+
485
+ # create a server with the file
486
+ assert_nothing_raised {
487
+ server = Puppet::Server::FileServer.new(
488
+ :Local => true,
489
+ :Config => conffile
490
+ )
491
+ }
492
+
493
+ list = nil
494
+ # run through once with no host/ip info, to verify everything is working
495
+ mounts.each { |mount, files|
496
+ mount = "/#{mount}/"
497
+ assert_nothing_raised {
498
+ list = server.list(mount, true, false)
499
+ }
500
+
501
+ assert_nothing_raised {
502
+ list.split("\n").each { |line|
503
+ file, type = line.split("\t")
504
+
505
+ desc = server.describe(mount + file)
506
+ }
507
+ }
508
+
509
+ files.each { |f|
510
+ assert_describe(mount, f, server)
511
+ }
512
+ }
513
+
514
+ # now let's check that things are being correctly forbidden
515
+ # this is just a map of names and expected results
516
+ {
517
+ "thing" => {
518
+ :deny => [
519
+ ["hostname.com", "192.168.1.0"],
520
+ ["hostname.com", "192.158.0.0"]
521
+ ],
522
+ :allow => [
523
+ ["hostname.com", "192.168.0.0"],
524
+ ["hostname.com", "192.168.0.245"],
525
+ ]
526
+ },
527
+ "thus" => {
528
+ :deny => [
529
+ ["hostname.com", "192.168.1.0"],
530
+ ["name.sub.madstop.com", "192.158.0.0"]
531
+ ],
532
+ :allow => [
533
+ ["luke.kanies.com", "192.168.0.0"],
534
+ ["luke.madstop.com", "192.168.0.245"],
535
+ ]
536
+ }
537
+ }.each { |mount, hash|
538
+ mount = "/#{mount}/"
539
+
540
+ # run through the map
541
+ hash.each { |type, ary|
542
+ ary.each { |sub|
543
+ host, ip = sub
544
+
545
+ case type
546
+ when :deny:
547
+ assert_raise(Puppet::Server::AuthorizationError,
548
+ "Host %s, ip %s, allowed %s" %
549
+ [host, ip, mount]) {
550
+ list = server.list(mount, true, false, host, ip)
551
+ }
552
+ when :allow:
553
+ assert_nothing_raised("Host %s, ip %s, denied %s" %
554
+ [host, ip, mount]) {
555
+ list = server.list(mount, true, false, host, ip)
556
+ }
557
+ end
558
+ }
559
+ }
560
+ }
561
+
562
+ end
563
+
564
+ # Test that we smoothly handle invalid config files
565
+ def test_configfailures
566
+ # create an example file with each of them
567
+ conffile = tempfile()
568
+
569
+ invalidmounts = {
570
+ "noexist" => "[noexist]
571
+ path /this/path/does/not/exist
572
+ allow 192.168.0.*
573
+ "
574
+ }
575
+
576
+ invalidconfigs = [
577
+ "[not valid]
578
+ path /this/path/does/not/exist
579
+ allow 192.168.0.*
580
+ ",
581
+ "[valid]
582
+ invalidstatement
583
+ path /etc
584
+ allow 192.168.0.*
585
+ ",
586
+ "[valid]
587
+ allow 192.168.0.*
588
+ "
589
+ ]
590
+
591
+ invalidmounts.each { |mount, text|
592
+ File.open(conffile, "w") { |f|
593
+ f.print text
594
+ }
595
+
596
+
597
+ # create a server with the file
598
+ server = nil
599
+ assert_nothing_raised {
600
+ server = Puppet::Server::FileServer.new(
601
+ :Local => true,
602
+ :Config => conffile
603
+ )
604
+ }
605
+
606
+ assert_raise(Puppet::Server::FileServerError,
607
+ "Invalid mount was mounted") {
608
+ server.list(mount)
609
+ }
610
+ }
611
+
612
+ invalidconfigs.each_with_index { |text, i|
613
+ File.open(conffile, "w") { |f|
614
+ f.print text
615
+ }
616
+
617
+
618
+ # create a server with the file
619
+ server = nil
620
+ assert_raise(Puppet::Server::FileServerError,
621
+ "Invalid config %s did not raise error" % i) {
622
+ server = Puppet::Server::FileServer.new(
623
+ :Local => true,
624
+ :Config => conffile
625
+ )
626
+ }
627
+ }
628
+ end
629
+
630
+ # verify we reread the config file when it changes
631
+ def test_filereread
632
+ server = nil
633
+
634
+ dir = testdir()
635
+
636
+ files = mktestfiles(dir)
637
+
638
+ conffile = tempfile()
639
+
640
+ File.open(conffile, "w") { |f|
641
+ f.print "# a test config file
642
+
643
+ [thing]
644
+ path #{dir}
645
+ allow test1.domain.com
646
+ "
647
+ }
648
+
649
+
650
+ # start our server with a fast timeout
651
+ assert_nothing_raised {
652
+ server = Puppet::Server::FileServer.new(
653
+ :Local => true,
654
+ :ConfigTimeout => 0.5,
655
+ :Config => conffile
656
+ )
657
+ }
658
+
659
+ list = nil
660
+ assert_nothing_raised {
661
+ list = server.list("/thing/", false, false,
662
+ "test1.domain.com", "127.0.0.1")
663
+ }
664
+ assert(list != "", "List returned nothing in rereard test")
665
+
666
+ assert_raise(Puppet::Server::AuthorizationError, "List allowed invalid host") {
667
+ list = server.list("/thing/", false, false,
668
+ "test2.domain.com", "127.0.0.1")
669
+ }
670
+
671
+ sleep 1
672
+ File.open(conffile, "w") { |f|
673
+ f.print "# a test config file
674
+
675
+ [thing]
676
+ path #{dir}
677
+ allow test2.domain.com
678
+ "
679
+ }
680
+
681
+ assert_raise(Puppet::Server::AuthorizationError, "List allowed invalid host") {
682
+ list = server.list("/thing/", false, false,
683
+ "test1.domain.com", "127.0.0.1")
684
+ }
685
+
686
+ assert_nothing_raised {
687
+ list = server.list("/thing/", false, false,
688
+ "test2.domain.com", "127.0.0.1")
689
+ }
690
+
691
+ assert(list != "", "List returned nothing in rereard test")
692
+
693
+ list = nil
694
+ end
695
+
696
+ # Verify that we get converted to the right kind of string
697
+ def test_mountstring
698
+ mount = nil
699
+ name = "yaytest"
700
+ path = tmpdir()
701
+ assert_nothing_raised {
702
+ mount = Puppet::Server::FileServer::Mount.new(name, path)
703
+ }
704
+
705
+ assert_equal(name + ":" + path, mount.to_s)
706
+ end
707
+ end
708
+
709
+ # $Id: fileserver.rb 742 2005-11-16 17:12:11Z luke $
710
+