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.

Files changed (149) hide show
  1. data/CHANGELOG +57 -0
  2. data/Rakefile +38 -410
  3. data/bin/puppet +14 -12
  4. data/bin/puppetca +1 -3
  5. data/bin/puppetd +25 -7
  6. data/bin/puppetdoc +161 -104
  7. data/bin/puppetmasterd +4 -4
  8. data/conf/epm.list +8 -0
  9. data/conf/redhat/client.init +6 -1
  10. data/conf/redhat/no-chuser-0.15.1.patch +38 -0
  11. data/conf/redhat/puppet.spec +20 -5
  12. data/conf/redhat/puppetd.conf +1 -1
  13. data/conf/redhat/puppetmasterd.conf +1 -1
  14. data/conf/redhat/server.init +2 -4
  15. data/examples/code/snippets/{casestatement → casestatement.pp} +12 -1
  16. data/examples/code/snippets/selectorvalues.pp +15 -0
  17. data/examples/code/snippets/singleselector.pp +22 -0
  18. data/examples/code/snippets/tag.pp +9 -0
  19. data/ext/module_puppet +1 -1
  20. data/install.rb +303 -303
  21. data/lib/puppet.rb +7 -9
  22. data/lib/puppet/client.rb +18 -5
  23. data/lib/puppet/client/dipper.rb +12 -10
  24. data/lib/puppet/client/master.rb +113 -41
  25. data/lib/puppet/client/pelement.rb +20 -0
  26. data/lib/puppet/config.rb +113 -6
  27. data/lib/puppet/element.rb +1 -3
  28. data/lib/puppet/event.rb +12 -23
  29. data/lib/puppet/filetype.rb +93 -5
  30. data/lib/puppet/inifile.rb +201 -0
  31. data/lib/puppet/log.rb +18 -6
  32. data/lib/puppet/parameter.rb +80 -29
  33. data/lib/puppet/parser/ast.rb +6 -4
  34. data/lib/puppet/parser/ast/caseopt.rb +13 -4
  35. data/lib/puppet/parser/ast/casestatement.rb +2 -2
  36. data/lib/puppet/parser/ast/component.rb +4 -14
  37. data/lib/puppet/parser/ast/hostclass.rb +1 -1
  38. data/lib/puppet/parser/ast/leaf.rb +12 -0
  39. data/lib/puppet/parser/ast/node.rb +4 -4
  40. data/lib/puppet/parser/ast/objectdef.rb +5 -51
  41. data/lib/puppet/parser/ast/selector.rb +2 -0
  42. data/lib/puppet/parser/ast/tag.rb +26 -0
  43. data/lib/puppet/parser/interpreter.rb +89 -74
  44. data/lib/puppet/parser/lexer.rb +4 -3
  45. data/lib/puppet/parser/parser.rb +440 -378
  46. data/lib/puppet/parser/scope.rb +844 -887
  47. data/lib/puppet/server.rb +12 -1
  48. data/lib/puppet/server/authconfig.rb +166 -0
  49. data/lib/puppet/server/authstore.rb +8 -6
  50. data/lib/puppet/server/ca.rb +23 -26
  51. data/lib/puppet/server/filebucket.rb +24 -23
  52. data/lib/puppet/server/fileserver.rb +116 -47
  53. data/lib/puppet/server/master.rb +58 -19
  54. data/lib/puppet/server/pelement.rb +176 -0
  55. data/lib/puppet/server/rights.rb +78 -0
  56. data/lib/puppet/server/servlet.rb +19 -6
  57. data/lib/puppet/sslcertificates.rb +4 -2
  58. data/lib/puppet/sslcertificates/ca.rb +66 -34
  59. data/lib/puppet/storage.rb +20 -26
  60. data/lib/puppet/transaction.rb +49 -92
  61. data/lib/puppet/type.rb +142 -35
  62. data/lib/puppet/type/cron.rb +29 -14
  63. data/lib/puppet/type/exec.rb +92 -35
  64. data/lib/puppet/type/group.rb +29 -11
  65. data/lib/puppet/type/nameservice.rb +50 -1
  66. data/lib/puppet/type/nameservice/netinfo.rb +68 -1
  67. data/lib/puppet/type/nameservice/objectadd.rb +1 -0
  68. data/lib/puppet/type/package.rb +150 -109
  69. data/lib/puppet/type/package/apple.rb +27 -0
  70. data/lib/puppet/type/package/apt.rb +1 -0
  71. data/lib/puppet/type/package/darwinport.rb +97 -0
  72. data/lib/puppet/type/package/dpkg.rb +10 -2
  73. data/lib/puppet/type/package/freebsd.rb +19 -0
  74. data/lib/puppet/type/package/{bsd.rb → openbsd.rb} +36 -7
  75. data/lib/puppet/type/package/ports.rb +98 -0
  76. data/lib/puppet/type/package/rpm.rb +43 -7
  77. data/lib/puppet/type/package/sun.rb +53 -36
  78. data/lib/puppet/type/package/yum.rb +5 -16
  79. data/lib/puppet/type/parsedtype.rb +41 -29
  80. data/lib/puppet/type/parsedtype/host.rb +13 -5
  81. data/lib/puppet/type/parsedtype/mount.rb +250 -0
  82. data/lib/puppet/type/parsedtype/port.rb +8 -6
  83. data/lib/puppet/type/pfile.rb +284 -30
  84. data/lib/puppet/type/pfile/checksum.rb +96 -68
  85. data/lib/puppet/type/pfile/content.rb +16 -13
  86. data/lib/puppet/type/pfile/ensure.rb +64 -126
  87. data/lib/puppet/type/pfile/group.rb +12 -5
  88. data/lib/puppet/type/pfile/mode.rb +16 -4
  89. data/lib/puppet/type/pfile/source.rb +47 -73
  90. data/lib/puppet/type/pfile/target.rb +81 -0
  91. data/lib/puppet/type/pfile/uid.rb +10 -3
  92. data/lib/puppet/type/pfilebucket.rb +12 -3
  93. data/lib/puppet/type/schedule.rb +5 -1
  94. data/lib/puppet/type/service.rb +138 -66
  95. data/lib/puppet/type/service/debian.rb +9 -3
  96. data/lib/puppet/type/service/init.rb +51 -56
  97. data/lib/puppet/type/service/smf.rb +16 -6
  98. data/lib/puppet/type/state.rb +71 -32
  99. data/lib/puppet/type/symlink.rb +12 -7
  100. data/lib/puppet/type/tidy.rb +5 -1
  101. data/lib/puppet/type/user.rb +116 -20
  102. data/lib/puppet/type/yumrepo.rb +314 -0
  103. data/lib/puppet/util.rb +84 -14
  104. data/test/client/client.rb +41 -18
  105. data/test/client/master.rb +50 -4
  106. data/test/executables/puppetbin.rb +31 -4
  107. data/test/executables/puppetca.rb +18 -2
  108. data/test/language/ast.rb +201 -31
  109. data/test/language/interpreter.rb +8 -2
  110. data/test/{parser → language}/lexer.rb +1 -1
  111. data/test/language/node.rb +84 -0
  112. data/test/{parser → language}/parser.rb +1 -1
  113. data/test/language/scope.rb +101 -2
  114. data/test/language/snippets.rb +23 -2
  115. data/test/other/config.rb +99 -1
  116. data/test/other/filetype.rb +95 -0
  117. data/test/other/inifile.rb +114 -0
  118. data/test/other/log.rb +3 -2
  119. data/test/other/transactions.rb +55 -10
  120. data/test/puppet/utiltest.rb +25 -1
  121. data/test/puppettest.rb +140 -46
  122. data/test/server/authconfig.rb +56 -0
  123. data/test/server/bucket.rb +32 -18
  124. data/test/server/fileserver.rb +75 -30
  125. data/test/server/master.rb +27 -4
  126. data/test/server/pelement.rb +298 -0
  127. data/test/server/rights.rb +41 -0
  128. data/test/server/server.rb +2 -2
  129. data/test/tagging/tagging.rb +100 -1
  130. data/test/types/basic.rb +3 -3
  131. data/test/types/cron.rb +24 -1
  132. data/test/types/exec.rb +99 -1
  133. data/test/types/file.rb +298 -2
  134. data/test/types/filebucket.rb +4 -15
  135. data/test/types/filesources.rb +43 -14
  136. data/test/types/group.rb +1 -13
  137. data/test/types/mount.rb +277 -0
  138. data/test/types/package.rb +164 -33
  139. data/test/types/parameter.rb +107 -0
  140. data/test/types/port.rb +2 -1
  141. data/test/types/service.rb +37 -2
  142. data/test/types/state.rb +92 -0
  143. data/test/types/symlink.rb +30 -2
  144. data/test/types/tidy.rb +2 -14
  145. data/test/types/type.rb +35 -1
  146. data/test/types/user.rb +110 -1
  147. data/test/types/yumrepo.rb +95 -0
  148. metadata +316 -290
  149. 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
@@ -125,4 +125,4 @@ class TestLexer < Test::Unit::TestCase
125
125
  end
126
126
  end
127
127
 
128
- # $Id: lexer.rb 923 2006-02-16 20:15:41Z luke $
128
+ # $Id: lexer.rb 1070 2006-04-04 23:30:56Z luke $
@@ -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
@@ -209,4 +209,4 @@ class TestParser < Test::Unit::TestCase
209
209
  end
210
210
  end
211
211
 
212
- # $Id: parser.rb 957 2006-02-28 03:32:51Z luke $
212
+ # $Id: parser.rb 1070 2006-04-04 23:30:56Z luke $
@@ -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
- assert_raise(Puppet::ParseError) {
92
- parent.lookupvar(v)
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
@@ -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
- :File => File.join($snippetbase, file),
471
+ :Manifest => File.join($snippetbase, file),
451
472
  :Local => true
452
473
  )
453
474
  client = Puppet::Client::MasterClient.new(
@@ -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 967 2006-03-02 20:28:45Z luke $
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 $