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,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
|
+
|