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
@@ -6,6 +6,8 @@ if __FILE__ == $0
|
|
6
6
|
$puppetbase = "../.."
|
7
7
|
end
|
8
8
|
|
9
|
+
require 'facter'
|
10
|
+
|
9
11
|
require 'puppet'
|
10
12
|
require 'puppet/parser/interpreter'
|
11
13
|
require 'puppet/parser/parser'
|
@@ -69,8 +71,6 @@ class TestInterpreter < Test::Unit::TestCase
|
|
69
71
|
assert(config != newconfig, "Configs are somehow the same")
|
70
72
|
end
|
71
73
|
|
72
|
-
# Only test ldap stuff on luke's network, since that's the only place we
|
73
|
-
# have data for.
|
74
74
|
if Facter["domain"].value == "madstop.com"
|
75
75
|
begin
|
76
76
|
require 'ldap'
|
@@ -79,6 +79,9 @@ class TestInterpreter < Test::Unit::TestCase
|
|
79
79
|
$stderr.puts "Missing ldap; skipping ldap source tests"
|
80
80
|
$haveldap = false
|
81
81
|
end
|
82
|
+
|
83
|
+
# Only test ldap stuff on luke's network, since that's the only place we
|
84
|
+
# have data for.
|
82
85
|
if $haveldap
|
83
86
|
def ldapconnect
|
84
87
|
|
@@ -112,6 +115,7 @@ class TestInterpreter < Test::Unit::TestCase
|
|
112
115
|
files << parentfile
|
113
116
|
hostname = Facter["hostname"].value
|
114
117
|
lparent, lclasses = ldaphost(Facter["hostname"].value)
|
118
|
+
assert(lclasses, "Did not retrieve info from ldap")
|
115
119
|
File.open(file, "w") { |f|
|
116
120
|
f.puts "node #{lparent} {
|
117
121
|
file { \"#{parentfile}\": ensure => file }
|
@@ -161,5 +165,7 @@ class TestInterpreter < Test::Unit::TestCase
|
|
161
165
|
}
|
162
166
|
end
|
163
167
|
end
|
168
|
+
else
|
169
|
+
$stderr.puts "Not in madstop.com; skipping ldap tests"
|
164
170
|
end
|
165
171
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
if __FILE__ == $0
|
2
|
+
$:.unshift '../../lib'
|
3
|
+
$:.unshift '..'
|
4
|
+
$puppetbase = "../.."
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'puppet'
|
8
|
+
require 'puppet/parser/parser'
|
9
|
+
require 'test/unit'
|
10
|
+
require 'puppettest'
|
11
|
+
|
12
|
+
class TestParser < Test::Unit::TestCase
|
13
|
+
include ParserTesting
|
14
|
+
|
15
|
+
def setup
|
16
|
+
super
|
17
|
+
Puppet[:parseonly] = true
|
18
|
+
@parser = Puppet::Parser::Parser.new()
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_simple_hostname
|
22
|
+
check_parseable "host1"
|
23
|
+
check_parseable "'host2'"
|
24
|
+
check_parseable [ "'host1'", "host2" ]
|
25
|
+
check_parseable [ "'host1'", "'host2'" ]
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_qualified_hostname
|
29
|
+
check_parseable "'host.example.com'"
|
30
|
+
check_parseable [ "'host.example.com'", "host1" ]
|
31
|
+
check_parseable "'host-1.37examples.example.com'"
|
32
|
+
check_parseable "'svn.23.nu'"
|
33
|
+
check_parseable "'HOST'"
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_reject_hostname
|
37
|
+
check_nonparseable "host.example.com"
|
38
|
+
check_nonparseable "host@example.com"
|
39
|
+
check_nonparseable "\"host\""
|
40
|
+
check_nonparseable "'$foo.example.com'"
|
41
|
+
check_nonparseable "'host1 host2'"
|
42
|
+
check_nonparseable "HOST"
|
43
|
+
end
|
44
|
+
|
45
|
+
AST = Puppet::Parser::AST
|
46
|
+
|
47
|
+
def check_parseable(hostnames)
|
48
|
+
unless hostnames.is_a?(Array)
|
49
|
+
hostnames = [ hostnames ]
|
50
|
+
end
|
51
|
+
assert_nothing_raised {
|
52
|
+
@parser.string = "node #{hostnames.join(" ")} { }"
|
53
|
+
}
|
54
|
+
# Strip quotes
|
55
|
+
hostnames.map! { |s| s.sub(/^'(.*)'$/, "\\1") }
|
56
|
+
ast = nil
|
57
|
+
assert_nothing_raised {
|
58
|
+
ast = @parser.parse
|
59
|
+
}
|
60
|
+
# Verify that the AST has the expected structure
|
61
|
+
# and that the leaves have the right hostnames in them
|
62
|
+
assert_kind_of(AST::ASTArray, ast)
|
63
|
+
assert_equal(1, ast.children.size)
|
64
|
+
nodedef = ast.children[0]
|
65
|
+
assert_kind_of(AST::NodeDef, nodedef)
|
66
|
+
assert_kind_of(AST::ASTArray, nodedef.names)
|
67
|
+
assert_equal(hostnames.size, nodedef.names.children.size)
|
68
|
+
hostnames.size.times do |i|
|
69
|
+
hostnode = nodedef.names.children[i]
|
70
|
+
assert_kind_of(AST::HostName, hostnode)
|
71
|
+
assert_equal(hostnames[i], hostnode.value)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def check_nonparseable(hostname)
|
76
|
+
assert_nothing_raised {
|
77
|
+
@parser.string = "node #{hostname} { }"
|
78
|
+
}
|
79
|
+
|
80
|
+
assert_raise(Puppet::DevError, Puppet::ParseError) {
|
81
|
+
@parser.parse
|
82
|
+
}
|
83
|
+
end
|
84
|
+
end
|
data/test/language/scope.rb
CHANGED
@@ -88,9 +88,11 @@ class TestScope < Test::Unit::TestCase
|
|
88
88
|
|
89
89
|
# verify that they aren't available in upper scopes
|
90
90
|
if parent = s.parent
|
91
|
-
|
92
|
-
|
91
|
+
val = nil
|
92
|
+
assert_nothing_raised {
|
93
|
+
val = parent.lookupvar(v)
|
93
94
|
}
|
95
|
+
assert_equal("", val, "Did not get empty string on missing var")
|
94
96
|
|
95
97
|
# and verify that the parent sees its correct value
|
96
98
|
assert_equal(ovalues[i - 1],parent.lookupvar(over))
|
@@ -464,4 +466,101 @@ class TestScope < Test::Unit::TestCase
|
|
464
466
|
objects = top.evaluate(:scope => scope)
|
465
467
|
}
|
466
468
|
end
|
469
|
+
|
470
|
+
# Verify that definitions have a different context than classes.
|
471
|
+
def test_newsubcontext
|
472
|
+
filename = tempfile()
|
473
|
+
children = []
|
474
|
+
|
475
|
+
# Create a component
|
476
|
+
children << compobj("comp", :code => AST::ASTArray.new(
|
477
|
+
:children => [
|
478
|
+
fileobj(filename, "owner" => "root" )
|
479
|
+
]
|
480
|
+
))
|
481
|
+
|
482
|
+
# Now create a class that modifies the same file and also
|
483
|
+
# calls the component
|
484
|
+
children << classobj("klass", :code => AST::ASTArray.new(
|
485
|
+
:children => [
|
486
|
+
fileobj(filename, "owner" => "bin" ),
|
487
|
+
AST::ObjectDef.new(
|
488
|
+
:type => nameobj("comp"),
|
489
|
+
:params => astarray()
|
490
|
+
)
|
491
|
+
]
|
492
|
+
))
|
493
|
+
|
494
|
+
# Now call the class
|
495
|
+
children << AST::ObjectDef.new(
|
496
|
+
:type => nameobj("klass"),
|
497
|
+
:params => astarray()
|
498
|
+
)
|
499
|
+
|
500
|
+
top = nil
|
501
|
+
assert_nothing_raised("Could not create top object") {
|
502
|
+
top = AST::ASTArray.new(
|
503
|
+
:children => children
|
504
|
+
)
|
505
|
+
}
|
506
|
+
|
507
|
+
trans = nil
|
508
|
+
scope = nil
|
509
|
+
#assert_nothing_raised {
|
510
|
+
assert_raise(Puppet::ParseError, "A conflict was allowed") {
|
511
|
+
scope = Puppet::Parser::Scope.new()
|
512
|
+
trans = scope.evaluate(:ast => top)
|
513
|
+
}
|
514
|
+
# scope = Puppet::Parser::Scope.new()
|
515
|
+
# trans = scope.evaluate(:ast => top)
|
516
|
+
#}
|
517
|
+
end
|
518
|
+
|
519
|
+
def test_defaultswithmultiplestatements
|
520
|
+
path = tempfile()
|
521
|
+
|
522
|
+
stats = []
|
523
|
+
stats << defaultobj("file", "group" => "root")
|
524
|
+
stats << fileobj(path, "owner" => "root")
|
525
|
+
stats << fileobj(path, "mode" => "755")
|
526
|
+
|
527
|
+
top = AST::ASTArray.new(
|
528
|
+
:file => __FILE__,
|
529
|
+
:line => __LINE__,
|
530
|
+
:children => stats
|
531
|
+
)
|
532
|
+
scope = Puppet::Parser::Scope.new()
|
533
|
+
assert_nothing_raised {
|
534
|
+
scope.evaluate(:ast => top)
|
535
|
+
}
|
536
|
+
|
537
|
+
trans = nil
|
538
|
+
assert_nothing_raised {
|
539
|
+
trans = scope.to_trans
|
540
|
+
}
|
541
|
+
|
542
|
+
obj = trans.find do |obj| obj.is_a? Puppet::TransObject end
|
543
|
+
|
544
|
+
assert(obj, "Could not retrieve file obj")
|
545
|
+
assert_equal("root", obj["group"], "Default did not take")
|
546
|
+
assert_equal("root", obj["owner"], "Owner did not take")
|
547
|
+
assert_equal("755", obj["mode"], "Mode did not take")
|
548
|
+
end
|
549
|
+
|
550
|
+
def test_validclassnames
|
551
|
+
scope = Puppet::Parser::Scope.new()
|
552
|
+
|
553
|
+
["a-class", "a class", "Class", "a.class"].each do |bad|
|
554
|
+
assert_raise(Puppet::ParseError, "Incorrectly allowed %s" % bad.inspect) do
|
555
|
+
scope.setclass(object_id, bad)
|
556
|
+
end
|
557
|
+
end
|
558
|
+
|
559
|
+
["a_class", "class", "yayNess"].each do |good|
|
560
|
+
assert_nothing_raised("Incorrectly banned %s" % good.inspect) do
|
561
|
+
scope.setclass(object_id, good)
|
562
|
+
end
|
563
|
+
end
|
564
|
+
|
565
|
+
end
|
467
566
|
end
|
data/test/language/snippets.rb
CHANGED
@@ -253,6 +253,7 @@ class TestSnippets < Test::Unit::TestCase
|
|
253
253
|
/tmp/existsfile2
|
254
254
|
/tmp/existsfile3
|
255
255
|
/tmp/existsfile4
|
256
|
+
/tmp/existsfile5
|
256
257
|
}
|
257
258
|
|
258
259
|
files.each { |file|
|
@@ -331,7 +332,7 @@ class TestSnippets < Test::Unit::TestCase
|
|
331
332
|
end
|
332
333
|
|
333
334
|
def snippet_selectorvalues(trans)
|
334
|
-
nums = %w{1 2 3}
|
335
|
+
nums = %w{1 2 3 4 5}
|
335
336
|
files = nums.collect { |n|
|
336
337
|
"/tmp/selectorvalues%s" % n
|
337
338
|
}
|
@@ -344,6 +345,20 @@ class TestSnippets < Test::Unit::TestCase
|
|
344
345
|
}
|
345
346
|
end
|
346
347
|
|
348
|
+
def snippet_singleselector(trans)
|
349
|
+
nums = %w{1 2 3}
|
350
|
+
files = nums.collect { |n|
|
351
|
+
"/tmp/singleselector%s" % n
|
352
|
+
}
|
353
|
+
|
354
|
+
files.each { |f|
|
355
|
+
@@tmpfiles << f
|
356
|
+
assert(FileTest.exists?(f), "File %s does not exist" % f)
|
357
|
+
assert(File.stat(f).mode & 007777 == 0755,
|
358
|
+
"File %s is not 755" % f)
|
359
|
+
}
|
360
|
+
end
|
361
|
+
|
347
362
|
def snippet_falsevalues(trans)
|
348
363
|
file = "/tmp/falsevaluesfalse"
|
349
364
|
@@tmpfiles << file
|
@@ -412,6 +427,12 @@ class TestSnippets < Test::Unit::TestCase
|
|
412
427
|
}
|
413
428
|
end
|
414
429
|
|
430
|
+
# There's no way to actually retrieve the list of classes from the
|
431
|
+
# transaction.
|
432
|
+
def snippet_tag(trans)
|
433
|
+
@@tmpfiles << "/tmp/settestingness"
|
434
|
+
end
|
435
|
+
|
415
436
|
def snippet_emptyclass(trans)
|
416
437
|
# There's nothing to check other than that it works
|
417
438
|
end
|
@@ -447,7 +468,7 @@ class TestSnippets < Test::Unit::TestCase
|
|
447
468
|
self.send(:define_method, testname) {
|
448
469
|
# first parse the file
|
449
470
|
server = Puppet::Server::Master.new(
|
450
|
-
:
|
471
|
+
:Manifest => File.join($snippetbase, file),
|
451
472
|
:Local => true
|
452
473
|
)
|
453
474
|
client = Puppet::Client::MasterClient.new(
|
data/test/other/config.rb
CHANGED
@@ -496,6 +496,104 @@ yay = /a/path
|
|
496
496
|
|
497
497
|
assert(! Puppet.type(:file)["/dev/testing"], "Created dev file")
|
498
498
|
end
|
499
|
+
|
500
|
+
def test_groupsetting
|
501
|
+
cfile = tempfile()
|
502
|
+
|
503
|
+
group = "yayness"
|
504
|
+
|
505
|
+
File.open(cfile, "w") do |f|
|
506
|
+
f.puts "[#{Puppet.name}]
|
507
|
+
group = #{group}
|
508
|
+
"
|
509
|
+
end
|
510
|
+
|
511
|
+
config = mkconfig
|
512
|
+
config.setdefaults(Puppet.name, :group => ["puppet", "a group"])
|
513
|
+
|
514
|
+
assert_nothing_raised {
|
515
|
+
config.parse(cfile)
|
516
|
+
}
|
517
|
+
|
518
|
+
assert_equal(group, config[:group], "Group did not take")
|
519
|
+
end
|
520
|
+
|
521
|
+
# provide a method to modify and create files w/out specifying the info
|
522
|
+
# already stored in a config
|
523
|
+
def test_writingfiles
|
524
|
+
path = tempfile()
|
525
|
+
mode = 0644
|
526
|
+
|
527
|
+
config = mkconfig
|
528
|
+
|
529
|
+
args = { :default => path, :mode => mode }
|
530
|
+
|
531
|
+
user = nonrootuser()
|
532
|
+
group = nonrootgroup()
|
533
|
+
|
534
|
+
if Process.uid == 0
|
535
|
+
args[:owner] = user.name
|
536
|
+
args[:group] = group.name
|
537
|
+
end
|
538
|
+
|
539
|
+
config.setdefaults(:testing, :myfile => args)
|
540
|
+
|
541
|
+
assert_nothing_raised {
|
542
|
+
config.write(:myfile) do |file|
|
543
|
+
file.puts "yay"
|
544
|
+
end
|
545
|
+
}
|
546
|
+
|
547
|
+
assert_equal(mode, filemode(path), "Modes are not equal")
|
548
|
+
|
549
|
+
# OS X is broken in how it chgrps files
|
550
|
+
if Process.uid == 0
|
551
|
+
assert_equal(user.uid, File.stat(path).uid, "UIDS are not equal")
|
552
|
+
|
553
|
+
case Facter["operatingsystem"].value
|
554
|
+
when /BSD/, "Darwin": # nothing
|
555
|
+
else
|
556
|
+
assert_equal(group.gid, File.stat(path).gid, "GIDS are not equal")
|
557
|
+
end
|
558
|
+
end
|
559
|
+
end
|
560
|
+
|
561
|
+
def test_mkdir
|
562
|
+
path = tempfile()
|
563
|
+
mode = 0755
|
564
|
+
|
565
|
+
config = mkconfig
|
566
|
+
|
567
|
+
args = { :default => path, :mode => mode }
|
568
|
+
|
569
|
+
user = nonrootuser()
|
570
|
+
group = nonrootgroup()
|
571
|
+
|
572
|
+
if Process.uid == 0
|
573
|
+
args[:owner] = user.name
|
574
|
+
args[:group] = group.name
|
575
|
+
end
|
576
|
+
|
577
|
+
config.setdefaults(:testing, :mydir => args)
|
578
|
+
|
579
|
+
assert_nothing_raised {
|
580
|
+
config.mkdir(:mydir)
|
581
|
+
}
|
582
|
+
|
583
|
+
assert_equal(mode, filemode(path), "Modes are not equal")
|
584
|
+
|
585
|
+
|
586
|
+
# OS X and *BSD is broken in how it chgrps files
|
587
|
+
if Process.uid == 0
|
588
|
+
assert_equal(user.uid, File.stat(path).uid, "UIDS are not equal")
|
589
|
+
|
590
|
+
case Facter["operatingsystem"].value
|
591
|
+
when /BSD/, "Darwin": # nothing
|
592
|
+
else
|
593
|
+
assert_equal(group.gid, File.stat(path).gid, "GIDS are not equal")
|
594
|
+
end
|
595
|
+
end
|
596
|
+
end
|
499
597
|
end
|
500
598
|
|
501
|
-
# $Id: config.rb
|
599
|
+
# $Id: config.rb 1077 2006-04-05 06:53:12Z luke $
|
@@ -0,0 +1,95 @@
|
|
1
|
+
if __FILE__ == $0
|
2
|
+
$:.unshift '..'
|
3
|
+
$:.unshift '../../lib'
|
4
|
+
$puppetbase = "../.."
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'puppet'
|
8
|
+
require 'puppet/filetype'
|
9
|
+
require 'puppettest'
|
10
|
+
require 'test/unit'
|
11
|
+
|
12
|
+
class TestFileType < Test::Unit::TestCase
|
13
|
+
include TestPuppet
|
14
|
+
|
15
|
+
def test_flat
|
16
|
+
obj = nil
|
17
|
+
path = tempfile()
|
18
|
+
type = nil
|
19
|
+
|
20
|
+
assert_nothing_raised {
|
21
|
+
type = Puppet::FileType.filetype(:flat)
|
22
|
+
}
|
23
|
+
|
24
|
+
assert(type, "Could not retrieve flat filetype")
|
25
|
+
|
26
|
+
assert_nothing_raised {
|
27
|
+
obj = type.new(path)
|
28
|
+
}
|
29
|
+
|
30
|
+
text = "This is some text\n"
|
31
|
+
|
32
|
+
newtext = nil
|
33
|
+
assert_nothing_raised {
|
34
|
+
newtext = obj.read
|
35
|
+
}
|
36
|
+
|
37
|
+
# The base class doesn't allow a return of nil
|
38
|
+
assert_equal("", newtext, "Somehow got some text")
|
39
|
+
|
40
|
+
assert_nothing_raised {
|
41
|
+
obj.write(text)
|
42
|
+
}
|
43
|
+
assert_nothing_raised {
|
44
|
+
newtext = obj.read
|
45
|
+
}
|
46
|
+
|
47
|
+
assert_equal(text, newtext, "Text was changed somehow")
|
48
|
+
|
49
|
+
File.open(path, "w") { |f| f.puts "someyayness" }
|
50
|
+
|
51
|
+
text = File.read(path)
|
52
|
+
assert_nothing_raised {
|
53
|
+
newtext = obj.read
|
54
|
+
}
|
55
|
+
|
56
|
+
assert_equal(text, newtext, "Text was changed somehow")
|
57
|
+
end
|
58
|
+
|
59
|
+
if Facter["operatingsystem"].value == "Darwin"
|
60
|
+
def test_ninfotoarray
|
61
|
+
obj = nil
|
62
|
+
type = nil
|
63
|
+
|
64
|
+
assert_nothing_raised {
|
65
|
+
type = Puppet::FileType.filetype(:netinfo)
|
66
|
+
}
|
67
|
+
|
68
|
+
assert(type, "Could not retrieve netinfo filetype")
|
69
|
+
%w{users groups aliases}.each do |map|
|
70
|
+
assert_nothing_raised {
|
71
|
+
obj = type.new(map)
|
72
|
+
}
|
73
|
+
|
74
|
+
assert_nothing_raised("could not read map %s" % map) {
|
75
|
+
obj.read
|
76
|
+
}
|
77
|
+
|
78
|
+
array = nil
|
79
|
+
|
80
|
+
assert_nothing_raised {
|
81
|
+
array = obj.to_array
|
82
|
+
}
|
83
|
+
|
84
|
+
assert_instance_of(Array, array)
|
85
|
+
|
86
|
+
array.each do |record|
|
87
|
+
assert_instance_of(Hash, record)
|
88
|
+
assert(record.length != 0)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# $Id: filetype.rb 1068 2006-04-04 23:13:55Z luke $
|