puppet 0.13.6 → 0.16.0
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 +57 -0
- data/Rakefile +38 -410
- data/bin/puppet +14 -12
- data/bin/puppetca +1 -3
- data/bin/puppetd +25 -7
- data/bin/puppetdoc +161 -104
- data/bin/puppetmasterd +4 -4
- data/conf/epm.list +8 -0
- data/conf/redhat/client.init +6 -1
- data/conf/redhat/no-chuser-0.15.1.patch +38 -0
- data/conf/redhat/puppet.spec +20 -5
- data/conf/redhat/puppetd.conf +1 -1
- data/conf/redhat/puppetmasterd.conf +1 -1
- data/conf/redhat/server.init +2 -4
- data/examples/code/snippets/{casestatement → casestatement.pp} +12 -1
- data/examples/code/snippets/selectorvalues.pp +15 -0
- data/examples/code/snippets/singleselector.pp +22 -0
- data/examples/code/snippets/tag.pp +9 -0
- data/ext/module_puppet +1 -1
- data/install.rb +303 -303
- data/lib/puppet.rb +7 -9
- data/lib/puppet/client.rb +18 -5
- data/lib/puppet/client/dipper.rb +12 -10
- data/lib/puppet/client/master.rb +113 -41
- data/lib/puppet/client/pelement.rb +20 -0
- data/lib/puppet/config.rb +113 -6
- data/lib/puppet/element.rb +1 -3
- data/lib/puppet/event.rb +12 -23
- data/lib/puppet/filetype.rb +93 -5
- data/lib/puppet/inifile.rb +201 -0
- data/lib/puppet/log.rb +18 -6
- data/lib/puppet/parameter.rb +80 -29
- data/lib/puppet/parser/ast.rb +6 -4
- data/lib/puppet/parser/ast/caseopt.rb +13 -4
- data/lib/puppet/parser/ast/casestatement.rb +2 -2
- data/lib/puppet/parser/ast/component.rb +4 -14
- data/lib/puppet/parser/ast/hostclass.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +12 -0
- data/lib/puppet/parser/ast/node.rb +4 -4
- data/lib/puppet/parser/ast/objectdef.rb +5 -51
- data/lib/puppet/parser/ast/selector.rb +2 -0
- data/lib/puppet/parser/ast/tag.rb +26 -0
- data/lib/puppet/parser/interpreter.rb +89 -74
- data/lib/puppet/parser/lexer.rb +4 -3
- data/lib/puppet/parser/parser.rb +440 -378
- data/lib/puppet/parser/scope.rb +844 -887
- data/lib/puppet/server.rb +12 -1
- data/lib/puppet/server/authconfig.rb +166 -0
- data/lib/puppet/server/authstore.rb +8 -6
- data/lib/puppet/server/ca.rb +23 -26
- data/lib/puppet/server/filebucket.rb +24 -23
- data/lib/puppet/server/fileserver.rb +116 -47
- data/lib/puppet/server/master.rb +58 -19
- data/lib/puppet/server/pelement.rb +176 -0
- data/lib/puppet/server/rights.rb +78 -0
- data/lib/puppet/server/servlet.rb +19 -6
- data/lib/puppet/sslcertificates.rb +4 -2
- data/lib/puppet/sslcertificates/ca.rb +66 -34
- data/lib/puppet/storage.rb +20 -26
- data/lib/puppet/transaction.rb +49 -92
- data/lib/puppet/type.rb +142 -35
- data/lib/puppet/type/cron.rb +29 -14
- data/lib/puppet/type/exec.rb +92 -35
- data/lib/puppet/type/group.rb +29 -11
- data/lib/puppet/type/nameservice.rb +50 -1
- data/lib/puppet/type/nameservice/netinfo.rb +68 -1
- data/lib/puppet/type/nameservice/objectadd.rb +1 -0
- data/lib/puppet/type/package.rb +150 -109
- data/lib/puppet/type/package/apple.rb +27 -0
- data/lib/puppet/type/package/apt.rb +1 -0
- data/lib/puppet/type/package/darwinport.rb +97 -0
- data/lib/puppet/type/package/dpkg.rb +10 -2
- data/lib/puppet/type/package/freebsd.rb +19 -0
- data/lib/puppet/type/package/{bsd.rb → openbsd.rb} +36 -7
- data/lib/puppet/type/package/ports.rb +98 -0
- data/lib/puppet/type/package/rpm.rb +43 -7
- data/lib/puppet/type/package/sun.rb +53 -36
- data/lib/puppet/type/package/yum.rb +5 -16
- data/lib/puppet/type/parsedtype.rb +41 -29
- data/lib/puppet/type/parsedtype/host.rb +13 -5
- data/lib/puppet/type/parsedtype/mount.rb +250 -0
- data/lib/puppet/type/parsedtype/port.rb +8 -6
- data/lib/puppet/type/pfile.rb +284 -30
- data/lib/puppet/type/pfile/checksum.rb +96 -68
- data/lib/puppet/type/pfile/content.rb +16 -13
- data/lib/puppet/type/pfile/ensure.rb +64 -126
- data/lib/puppet/type/pfile/group.rb +12 -5
- data/lib/puppet/type/pfile/mode.rb +16 -4
- data/lib/puppet/type/pfile/source.rb +47 -73
- data/lib/puppet/type/pfile/target.rb +81 -0
- data/lib/puppet/type/pfile/uid.rb +10 -3
- data/lib/puppet/type/pfilebucket.rb +12 -3
- data/lib/puppet/type/schedule.rb +5 -1
- data/lib/puppet/type/service.rb +138 -66
- data/lib/puppet/type/service/debian.rb +9 -3
- data/lib/puppet/type/service/init.rb +51 -56
- data/lib/puppet/type/service/smf.rb +16 -6
- data/lib/puppet/type/state.rb +71 -32
- data/lib/puppet/type/symlink.rb +12 -7
- data/lib/puppet/type/tidy.rb +5 -1
- data/lib/puppet/type/user.rb +116 -20
- data/lib/puppet/type/yumrepo.rb +314 -0
- data/lib/puppet/util.rb +84 -14
- data/test/client/client.rb +41 -18
- data/test/client/master.rb +50 -4
- data/test/executables/puppetbin.rb +31 -4
- data/test/executables/puppetca.rb +18 -2
- data/test/language/ast.rb +201 -31
- data/test/language/interpreter.rb +8 -2
- data/test/{parser → language}/lexer.rb +1 -1
- data/test/language/node.rb +84 -0
- data/test/{parser → language}/parser.rb +1 -1
- data/test/language/scope.rb +101 -2
- data/test/language/snippets.rb +23 -2
- data/test/other/config.rb +99 -1
- data/test/other/filetype.rb +95 -0
- data/test/other/inifile.rb +114 -0
- data/test/other/log.rb +3 -2
- data/test/other/transactions.rb +55 -10
- data/test/puppet/utiltest.rb +25 -1
- data/test/puppettest.rb +140 -46
- data/test/server/authconfig.rb +56 -0
- data/test/server/bucket.rb +32 -18
- data/test/server/fileserver.rb +75 -30
- data/test/server/master.rb +27 -4
- data/test/server/pelement.rb +298 -0
- data/test/server/rights.rb +41 -0
- data/test/server/server.rb +2 -2
- data/test/tagging/tagging.rb +100 -1
- data/test/types/basic.rb +3 -3
- data/test/types/cron.rb +24 -1
- data/test/types/exec.rb +99 -1
- data/test/types/file.rb +298 -2
- data/test/types/filebucket.rb +4 -15
- data/test/types/filesources.rb +43 -14
- data/test/types/group.rb +1 -13
- data/test/types/mount.rb +277 -0
- data/test/types/package.rb +164 -33
- data/test/types/parameter.rb +107 -0
- data/test/types/port.rb +2 -1
- data/test/types/service.rb +37 -2
- data/test/types/state.rb +92 -0
- data/test/types/symlink.rb +30 -2
- data/test/types/tidy.rb +2 -14
- data/test/types/type.rb +35 -1
- data/test/types/user.rb +110 -1
- data/test/types/yumrepo.rb +95 -0
- metadata +316 -290
- data/test/types/filetype.rb +0 -160
@@ -0,0 +1,114 @@
|
|
1
|
+
if __FILE__ == $0
|
2
|
+
$:.unshift '..'
|
3
|
+
$:.unshift '../../lib'
|
4
|
+
$puppetbase = "../.."
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'puppet'
|
8
|
+
require 'puppet/inifile'
|
9
|
+
require 'puppettest'
|
10
|
+
require 'test/unit'
|
11
|
+
|
12
|
+
class TestFileType < Test::Unit::TestCase
|
13
|
+
include TestPuppet
|
14
|
+
|
15
|
+
def setup
|
16
|
+
super
|
17
|
+
@file = Puppet::IniConfig::File.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
@file = nil
|
22
|
+
super
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_simple
|
26
|
+
fname = mkfile("[main]\nkey1=value1\n# Comment\nkey2=value2")
|
27
|
+
assert_nothing_raised {
|
28
|
+
@file.read(fname)
|
29
|
+
}
|
30
|
+
s = get_section('main')
|
31
|
+
assert_entries(s, { 'key1' => 'value1', 'key2' => 'value2' })
|
32
|
+
@file['main']['key2'] = 'newvalue2'
|
33
|
+
@file['main']['key3'] = 'newvalue3'
|
34
|
+
text = s.format
|
35
|
+
assert_equal("[main]\nkey1=value1\n# Comment\nkey2=newvalue2\nkey3=newvalue3\n",
|
36
|
+
s.format)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_multi
|
40
|
+
fmain = mkfile("[main]\nkey1=main.value1\n# Comment\nkey2=main.value2")
|
41
|
+
fsub = mkfile("[sub1]\nkey1=sub1 value1\n\n" +
|
42
|
+
"[sub2]\nkey1=sub2.value1")
|
43
|
+
main_mtime = File::stat(fmain).mtime
|
44
|
+
assert_nothing_raised {
|
45
|
+
@file.read(fmain)
|
46
|
+
@file.read(fsub)
|
47
|
+
}
|
48
|
+
main = get_section('main')
|
49
|
+
assert_entries(main,
|
50
|
+
{ 'key1' => 'main.value1', 'key2' => 'main.value2' })
|
51
|
+
sub1 = get_section('sub1')
|
52
|
+
assert_entries(sub1, { 'key1' => 'sub1 value1' })
|
53
|
+
sub2 = get_section('sub2')
|
54
|
+
assert_entries(sub2, { 'key1' => 'sub2.value1' })
|
55
|
+
[main, sub1, sub2].each { |s| assert( !s.dirty? ) }
|
56
|
+
sub1['key1'] = 'sub1 newvalue1'
|
57
|
+
sub2['key2'] = 'sub2 newvalue2'
|
58
|
+
assert(! main.dirty?)
|
59
|
+
[sub1, sub2].each { |s| assert( s.dirty? ) }
|
60
|
+
@file.store
|
61
|
+
[main, sub1, sub2].each { |s| assert( !s.dirty? ) }
|
62
|
+
assert( File.exists?(fmain) )
|
63
|
+
assert( File.exists?(fsub) )
|
64
|
+
assert_equal(main_mtime, File::stat(fmain).mtime)
|
65
|
+
subtext = File.read(fsub)
|
66
|
+
assert_equal("[sub1]\nkey1=sub1 newvalue1\n\n" +
|
67
|
+
"[sub2]\nkey1=sub2.value1\nkey2=sub2 newvalue2\n",
|
68
|
+
subtext)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_format_nil
|
72
|
+
fname = mkfile("[main]\nkey1=value1\n# Comment\nkey2=value2\n" +
|
73
|
+
"# Comment2\n")
|
74
|
+
assert_nothing_raised {
|
75
|
+
@file.read(fname)
|
76
|
+
}
|
77
|
+
s = get_section('main')
|
78
|
+
s['key2'] = nil
|
79
|
+
s['key3'] = nil
|
80
|
+
text = s.format
|
81
|
+
assert_equal("[main]\nkey1=value1\n# Comment\n# Comment2\n",
|
82
|
+
s.format)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_whitespace
|
86
|
+
fname = mkfile("[main]\n key1=v1\nkey2 =v2\n")
|
87
|
+
assert_nothing_raised {
|
88
|
+
@file.read(fname)
|
89
|
+
}
|
90
|
+
s = get_section('main')
|
91
|
+
assert_equal('v1', s['key1'])
|
92
|
+
assert_equal('v2', s['key2'])
|
93
|
+
end
|
94
|
+
|
95
|
+
def assert_entries(section, hash)
|
96
|
+
hash.each do |k, v|
|
97
|
+
assert_equal(v, section[k],
|
98
|
+
"Expected <#{v}> for #{section.name}[#{k}] " +
|
99
|
+
"but got <#{section[k]}>")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def get_section(name)
|
104
|
+
result = @file[name]
|
105
|
+
assert_not_nil(result)
|
106
|
+
return result
|
107
|
+
end
|
108
|
+
|
109
|
+
def mkfile(content)
|
110
|
+
file = tempfile()
|
111
|
+
File.open(file, "w") { |f| f.print(content) }
|
112
|
+
return file
|
113
|
+
end
|
114
|
+
end
|
data/test/other/log.rb
CHANGED
@@ -9,7 +9,7 @@ require 'puppet'
|
|
9
9
|
require 'puppettest'
|
10
10
|
require 'test/unit'
|
11
11
|
|
12
|
-
# $Id: log.rb
|
12
|
+
# $Id: log.rb 1120 2006-04-19 23:38:25Z luke $
|
13
13
|
|
14
14
|
class TestLog < Test::Unit::TestCase
|
15
15
|
include TestPuppet
|
@@ -37,6 +37,7 @@ class TestLog < Test::Unit::TestCase
|
|
37
37
|
|
38
38
|
def mkmsgs(levels)
|
39
39
|
levels.collect { |level|
|
40
|
+
next if level == :alert
|
40
41
|
assert_nothing_raised() {
|
41
42
|
Puppet::Log.new(
|
42
43
|
:level => level,
|
@@ -66,7 +67,7 @@ class TestLog < Test::Unit::TestCase
|
|
66
67
|
count = of.readlines.length
|
67
68
|
}
|
68
69
|
}
|
69
|
-
assert(count == levels.length)
|
70
|
+
assert(count == levels.length - 1) # skip alert
|
70
71
|
end
|
71
72
|
|
72
73
|
def test_syslog
|
data/test/other/transactions.rb
CHANGED
@@ -8,7 +8,7 @@ require 'puppet'
|
|
8
8
|
require 'puppettest'
|
9
9
|
require 'test/unit'
|
10
10
|
|
11
|
-
# $Id: transactions.rb
|
11
|
+
# $Id: transactions.rb 1113 2006-04-17 16:15:33Z luke $
|
12
12
|
|
13
13
|
class TestTransactions < Test::Unit::TestCase
|
14
14
|
include FileTesting
|
@@ -33,12 +33,6 @@ class TestTransactions < Test::Unit::TestCase
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
def teardown
|
37
|
-
stopservices
|
38
|
-
#print "\n\n" if Puppet[:debug]
|
39
|
-
super
|
40
|
-
end
|
41
|
-
|
42
36
|
def newfile(hash = {})
|
43
37
|
tmpfile = tempfile()
|
44
38
|
File.open(tmpfile, "w") { |f| f.puts rand(100) }
|
@@ -60,7 +54,6 @@ class TestTransactions < Test::Unit::TestCase
|
|
60
54
|
File.chown(nil, firstgr, tmpfile)
|
61
55
|
end
|
62
56
|
|
63
|
-
@@tmpfiles.push tmpfile
|
64
57
|
hash[:name] = tmpfile
|
65
58
|
assert_nothing_raised() {
|
66
59
|
return Puppet.type(:file).create(hash)
|
@@ -74,7 +67,7 @@ class TestTransactions < Test::Unit::TestCase
|
|
74
67
|
:type => "init",
|
75
68
|
:path => File.join($puppetbase,"examples/root/etc/init.d"),
|
76
69
|
:hasstatus => true,
|
77
|
-
:check => [:
|
70
|
+
:check => [:ensure]
|
78
71
|
)
|
79
72
|
}
|
80
73
|
end
|
@@ -147,7 +140,7 @@ class TestTransactions < Test::Unit::TestCase
|
|
147
140
|
component = newcomp("service",service)
|
148
141
|
|
149
142
|
assert_nothing_raised() {
|
150
|
-
service[:
|
143
|
+
service[:ensure] = 1
|
151
144
|
}
|
152
145
|
service.retrieve
|
153
146
|
assert(service.insync?, "Service did not start")
|
@@ -232,4 +225,56 @@ class TestTransactions < Test::Unit::TestCase
|
|
232
225
|
|
233
226
|
end
|
234
227
|
|
228
|
+
# Make sure that multiple subscriptions get triggered.
|
229
|
+
def test_multisubs
|
230
|
+
path = tempfile()
|
231
|
+
file1 = tempfile()
|
232
|
+
file2 = tempfile()
|
233
|
+
file = Puppet.type(:file).create(
|
234
|
+
:path => path,
|
235
|
+
:ensure => "file"
|
236
|
+
)
|
237
|
+
exec1 = Puppet.type(:exec).create(
|
238
|
+
:path => ENV["PATH"],
|
239
|
+
:command => "touch %s" % file1,
|
240
|
+
:refreshonly => true,
|
241
|
+
:subscribe => [:file, path]
|
242
|
+
)
|
243
|
+
exec2 = Puppet.type(:exec).create(
|
244
|
+
:path => ENV["PATH"],
|
245
|
+
:command => "touch %s" % file2,
|
246
|
+
:refreshonly => true,
|
247
|
+
:subscribe => [:file, path]
|
248
|
+
)
|
249
|
+
|
250
|
+
assert_apply(file, exec1, exec2)
|
251
|
+
assert(FileTest.exists?(file1), "File 1 did not get created")
|
252
|
+
assert(FileTest.exists?(file2), "File 2 did not get created")
|
253
|
+
end
|
254
|
+
|
255
|
+
# Make sure that a failed trigger doesn't result in other events not
|
256
|
+
# getting triggered.
|
257
|
+
def test_failedrefreshes
|
258
|
+
path = tempfile()
|
259
|
+
newfile = tempfile()
|
260
|
+
file = Puppet.type(:file).create(
|
261
|
+
:path => path,
|
262
|
+
:ensure => "file"
|
263
|
+
)
|
264
|
+
svc = Puppet.type(:service).create(
|
265
|
+
:name => "thisservicedoesnotexist",
|
266
|
+
:subscribe => [:file, path]
|
267
|
+
)
|
268
|
+
exec = Puppet.type(:exec).create(
|
269
|
+
:path => ENV["PATH"],
|
270
|
+
:command => "touch %s" % newfile,
|
271
|
+
:logoutput => true,
|
272
|
+
:refreshonly => true,
|
273
|
+
:subscribe => [:file, path]
|
274
|
+
)
|
275
|
+
|
276
|
+
assert_apply(file, svc, exec)
|
277
|
+
assert(FileTest.exists?(path), "File did not get created")
|
278
|
+
assert(FileTest.exists?(newfile), "Refresh file did not get created")
|
279
|
+
end
|
235
280
|
end
|
data/test/puppet/utiltest.rb
CHANGED
@@ -157,6 +157,30 @@ class TestPuppetUtil < Test::Unit::TestCase
|
|
157
157
|
assert_equal(oldmask, File.umask, "Umask was not reset")
|
158
158
|
end
|
159
159
|
|
160
|
+
def test_benchmark
|
161
|
+
path = tempfile()
|
162
|
+
str = "yayness"
|
163
|
+
File.open(path, "w") do |f| f.print "yayness" end
|
164
|
+
|
165
|
+
# First test it with the normal args
|
166
|
+
assert_nothing_raised do
|
167
|
+
val = Puppet::Util.benchmark(:notice, "Read file") do
|
168
|
+
File.read(path)
|
169
|
+
end
|
170
|
+
|
171
|
+
assert_equal(str, val)
|
172
|
+
end
|
173
|
+
|
174
|
+
# Now test it with a passed object
|
175
|
+
assert_nothing_raised do
|
176
|
+
val = Puppet::Util.benchmark(Puppet, :notice, "Read file") do
|
177
|
+
File.read(path)
|
178
|
+
end
|
179
|
+
|
180
|
+
assert_equal(str, val)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
160
184
|
unless Process.uid == 0
|
161
185
|
$stderr.puts "Run as root to perform Utility tests"
|
162
186
|
def test_nothing
|
@@ -267,4 +291,4 @@ class TestPuppetUtil < Test::Unit::TestCase
|
|
267
291
|
end
|
268
292
|
end
|
269
293
|
|
270
|
-
# $Id: utiltest.rb
|
294
|
+
# $Id: utiltest.rb 1098 2006-04-10 22:13:10Z luke $
|
data/test/puppettest.rb
CHANGED
@@ -24,6 +24,7 @@ module TestPuppet
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def setup
|
27
|
+
@memoryatstart = Puppet::Util.memory
|
27
28
|
if defined? @@testcount
|
28
29
|
@@testcount += 1
|
29
30
|
else
|
@@ -34,6 +35,13 @@ module TestPuppet
|
|
34
35
|
self.class.to_s + "configdir" + @@testcount.to_s + "/"
|
35
36
|
)
|
36
37
|
|
38
|
+
unless defined? $user and $group
|
39
|
+
$user = nonrootuser().uid.to_s
|
40
|
+
$group = nonrootgroup().gid.to_s
|
41
|
+
end
|
42
|
+
Puppet[:user] = $user
|
43
|
+
Puppet[:group] = $group
|
44
|
+
|
37
45
|
Puppet[:confdir] = @configpath
|
38
46
|
Puppet[:vardir] = @configpath
|
39
47
|
|
@@ -44,6 +52,8 @@ module TestPuppet
|
|
44
52
|
@@tmpfiles = [@configpath, tmpdir()]
|
45
53
|
@@tmppids = []
|
46
54
|
|
55
|
+
@@cleaners = []
|
56
|
+
|
47
57
|
if $0 =~ /.+\.rb/ or Puppet[:debug]
|
48
58
|
Puppet::Log.newdestination :console
|
49
59
|
Puppet::Log.level = :debug
|
@@ -90,14 +100,21 @@ module TestPuppet
|
|
90
100
|
def stopservices
|
91
101
|
if stype = Puppet::Type.type(:service)
|
92
102
|
stype.each { |service|
|
93
|
-
service[:
|
103
|
+
service[:ensure] = :stopped
|
94
104
|
service.evaluate
|
95
105
|
}
|
96
106
|
end
|
97
107
|
end
|
98
108
|
|
109
|
+
def cleanup(&block)
|
110
|
+
@@cleaners << block
|
111
|
+
end
|
112
|
+
|
99
113
|
def teardown
|
100
114
|
stopservices
|
115
|
+
|
116
|
+
@@cleaners.each { |cleaner| cleaner.call() }
|
117
|
+
|
101
118
|
@@tmpfiles.each { |file|
|
102
119
|
if FileTest.exists?(file)
|
103
120
|
system("chmod -R 755 %s" % file)
|
@@ -115,6 +132,14 @@ module TestPuppet
|
|
115
132
|
Puppet::Storage.clear
|
116
133
|
Puppet.clear
|
117
134
|
|
135
|
+
@memoryatend = Puppet::Util.memory
|
136
|
+
diff = @memoryatend - @memoryatstart
|
137
|
+
|
138
|
+
if diff > 1000
|
139
|
+
Puppet.info "%s#%s memory growth (%s to %s): %s" %
|
140
|
+
[self.class, @method_name, @memoryatstart, @memoryatend, diff]
|
141
|
+
end
|
142
|
+
|
118
143
|
# reset all of the logs
|
119
144
|
Puppet::Log.close
|
120
145
|
|
@@ -129,23 +154,24 @@ module TestPuppet
|
|
129
154
|
end
|
130
155
|
|
131
156
|
def tempfile
|
132
|
-
if defined?
|
133
|
-
|
157
|
+
if defined? @@tmpfilenum
|
158
|
+
@@tmpfilenum += 1
|
134
159
|
else
|
135
|
-
|
160
|
+
@@tmpfilenum = 1
|
136
161
|
end
|
137
|
-
|
162
|
+
|
163
|
+
f = File.join(self.tmpdir(), self.class.to_s + "testfile" + @@tmpfilenum.to_s)
|
138
164
|
@@tmpfiles << f
|
139
165
|
return f
|
140
166
|
end
|
141
167
|
|
142
168
|
def tstdir
|
143
|
-
if defined?
|
144
|
-
|
169
|
+
if defined? @@testdirnum
|
170
|
+
@@testdirnum += 1
|
145
171
|
else
|
146
|
-
|
172
|
+
@@testdirnum = 1
|
147
173
|
end
|
148
|
-
d = File.join(self.tmpdir(), self.class.to_s + "testdir" +
|
174
|
+
d = File.join(self.tmpdir(), self.class.to_s + "testdir" + @@testdirnum.to_s)
|
149
175
|
@@tmpfiles << d
|
150
176
|
return d
|
151
177
|
end
|
@@ -285,6 +311,15 @@ module TestPuppet
|
|
285
311
|
|
286
312
|
return files
|
287
313
|
end
|
314
|
+
|
315
|
+
# wrap how to retrieve the masked mode
|
316
|
+
def filemode(file)
|
317
|
+
File.stat(file).mode & 007777
|
318
|
+
end
|
319
|
+
|
320
|
+
def memory
|
321
|
+
Puppet::Util.memory
|
322
|
+
end
|
288
323
|
end
|
289
324
|
|
290
325
|
|
@@ -322,7 +357,7 @@ module ServerTest
|
|
322
357
|
handlers = {
|
323
358
|
:CA => {}, # so that certs autogenerate
|
324
359
|
:Master => {
|
325
|
-
:
|
360
|
+
:Manifest => mktestmanifest(),
|
326
361
|
:UseNodes => false
|
327
362
|
},
|
328
363
|
}
|
@@ -433,6 +468,7 @@ module ExeTest
|
|
433
468
|
File.unlink(pidfile)
|
434
469
|
end
|
435
470
|
|
471
|
+
return unless running
|
436
472
|
if running or pid
|
437
473
|
runningpid = nil
|
438
474
|
%x{#{ps}}.chomp.split(/\n/).each { |line|
|
@@ -443,12 +479,6 @@ module ExeTest
|
|
443
479
|
end
|
444
480
|
}
|
445
481
|
|
446
|
-
if running
|
447
|
-
assert(runningpid, "Process is not running")
|
448
|
-
assert_equal(pid, runningpid, "PIDs are not equal")
|
449
|
-
else
|
450
|
-
return
|
451
|
-
end
|
452
482
|
end
|
453
483
|
|
454
484
|
# we default to mandating that it's running, but teardown
|
@@ -708,28 +738,44 @@ module ParserTesting
|
|
708
738
|
end
|
709
739
|
|
710
740
|
def classobj(name, args = {})
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
fileobj("/%s" % name)
|
721
|
-
]
|
722
|
-
)
|
723
|
-
end
|
741
|
+
args[:type] ||= nameobj(name)
|
742
|
+
args[:code] ||= AST::ASTArray.new(
|
743
|
+
:file => __FILE__,
|
744
|
+
:line => __LINE__,
|
745
|
+
:children => [
|
746
|
+
varobj("%svar" % name, "%svalue" % name),
|
747
|
+
fileobj("/%s" % name)
|
748
|
+
]
|
749
|
+
)
|
724
750
|
assert_nothing_raised("Could not create class %s" % name) {
|
725
751
|
return AST::ClassDef.new(args)
|
726
752
|
}
|
727
753
|
end
|
728
754
|
|
755
|
+
def tagobj(*names)
|
756
|
+
args = {}
|
757
|
+
newnames = names.collect do |name|
|
758
|
+
if name.is_a? AST
|
759
|
+
name
|
760
|
+
else
|
761
|
+
nameobj(name)
|
762
|
+
end
|
763
|
+
end
|
764
|
+
args[:type] = astarray(*newnames)
|
765
|
+
assert_nothing_raised("Could not create tag %s" % names.inspect) {
|
766
|
+
return AST::Tag.new(args)
|
767
|
+
}
|
768
|
+
end
|
769
|
+
|
729
770
|
def compobj(name, args = {})
|
730
771
|
args[:file] ||= tempfile()
|
731
772
|
args[:line] ||= rand(100)
|
732
773
|
args[:type] ||= nameobj(name)
|
774
|
+
args[:args] ||= AST::ASTArray.new(
|
775
|
+
:file => tempfile(),
|
776
|
+
:line => rand(100),
|
777
|
+
:children => []
|
778
|
+
)
|
733
779
|
args[:code] ||= AST::ASTArray.new(
|
734
780
|
:file => tempfile(),
|
735
781
|
:line => rand(100),
|
@@ -765,7 +811,17 @@ module ParserTesting
|
|
765
811
|
}
|
766
812
|
end
|
767
813
|
|
768
|
-
def
|
814
|
+
def typeobj(name)
|
815
|
+
assert_nothing_raised("Could not create type %s" % name) {
|
816
|
+
return AST::Type.new(
|
817
|
+
:file => tempfile(),
|
818
|
+
:line => rand(100),
|
819
|
+
:value => name
|
820
|
+
)
|
821
|
+
}
|
822
|
+
end
|
823
|
+
|
824
|
+
def nodedef(name)
|
769
825
|
assert_nothing_raised("Could not create node %s" % name) {
|
770
826
|
return AST::NodeDef.new(
|
771
827
|
:file => tempfile(),
|
@@ -824,6 +880,16 @@ module ParserTesting
|
|
824
880
|
}
|
825
881
|
end
|
826
882
|
|
883
|
+
def varref(name)
|
884
|
+
assert_nothing_raised("Could not create %s variable" % name) {
|
885
|
+
return AST::Variable.new(
|
886
|
+
:file => __FILE__,
|
887
|
+
:line => __LINE__,
|
888
|
+
:value => name
|
889
|
+
)
|
890
|
+
}
|
891
|
+
end
|
892
|
+
|
827
893
|
def argobj(name, value)
|
828
894
|
assert_nothing_raised("Could not create %s compargument" % name) {
|
829
895
|
return AST::CompArgument.new(
|
@@ -831,6 +897,32 @@ module ParserTesting
|
|
831
897
|
)
|
832
898
|
}
|
833
899
|
end
|
900
|
+
|
901
|
+
def defaultobj(type, params)
|
902
|
+
pary = []
|
903
|
+
params.each { |p,v|
|
904
|
+
pary << AST::ObjectParam.new(
|
905
|
+
:file => __FILE__,
|
906
|
+
:line => __LINE__,
|
907
|
+
:param => nameobj(p),
|
908
|
+
:value => stringobj(v)
|
909
|
+
)
|
910
|
+
}
|
911
|
+
past = AST::ASTArray.new(
|
912
|
+
:file => __FILE__,
|
913
|
+
:line => __LINE__,
|
914
|
+
:children => pary
|
915
|
+
)
|
916
|
+
|
917
|
+
assert_nothing_raised("Could not create defaults for %s" % type) {
|
918
|
+
return AST::TypeDefaults.new(
|
919
|
+
:file => __FILE__,
|
920
|
+
:line => __LINE__,
|
921
|
+
:type => typeobj(type),
|
922
|
+
:params => past
|
923
|
+
)
|
924
|
+
}
|
925
|
+
end
|
834
926
|
end
|
835
927
|
|
836
928
|
class PuppetTestSuite
|
@@ -853,24 +945,26 @@ class PuppetTestSuite
|
|
853
945
|
|
854
946
|
def initialize(name)
|
855
947
|
path = File.join(self.class.basedir, name)
|
856
|
-
|
857
|
-
|
948
|
+
if FileTest.directory?(path)
|
949
|
+
# load each of the files
|
950
|
+
Dir.entries(path).collect { |file|
|
951
|
+
File.join(path,file)
|
952
|
+
}.find_all { |file|
|
953
|
+
FileTest.file?(file) and file =~ /\.rb$/
|
954
|
+
}.sort { |a,b|
|
955
|
+
# in the order they were modified, so the last modified files
|
956
|
+
# are loaded and thus displayed last
|
957
|
+
File.stat(b) <=> File.stat(a)
|
958
|
+
}.each { |file|
|
959
|
+
require file
|
960
|
+
}
|
961
|
+
elsif FileTest.file?(path) && path =~ /\.rb$/
|
962
|
+
require path
|
963
|
+
else
|
964
|
+
puts "TestSuites are directories or files containing test cases"
|
858
965
|
puts "no such directory: %s" % path
|
859
966
|
exit(65)
|
860
967
|
end
|
861
|
-
|
862
|
-
# load each of the files
|
863
|
-
Dir.entries(path).collect { |file|
|
864
|
-
File.join(path,file)
|
865
|
-
}.find_all { |file|
|
866
|
-
FileTest.file?(file) and file =~ /\.rb$/
|
867
|
-
}.sort { |a,b|
|
868
|
-
# in the order they were modified, so the last modified files
|
869
|
-
# are loaded and thus displayed last
|
870
|
-
File.stat(b) <=> File.stat(a)
|
871
|
-
}.each { |file|
|
872
|
-
require file
|
873
|
-
}
|
874
968
|
end
|
875
969
|
end
|
876
970
|
|
@@ -901,4 +995,4 @@ def failers
|
|
901
995
|
}
|
902
996
|
end
|
903
997
|
|
904
|
-
# $Id: puppettest.rb
|
998
|
+
# $Id: puppettest.rb 1113 2006-04-17 16:15:33Z luke $
|