puppet 0.9.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (182) hide show
  1. data/CHANGELOG +0 -0
  2. data/COPYING +340 -0
  3. data/LICENSE +17 -0
  4. data/README +24 -0
  5. data/Rakefile +294 -0
  6. data/TODO +4 -0
  7. data/bin/cf2puppet +186 -0
  8. data/bin/puppet +176 -0
  9. data/bin/puppetca +213 -0
  10. data/bin/puppetd +246 -0
  11. data/bin/puppetdoc +184 -0
  12. data/bin/puppetmasterd +258 -0
  13. data/examples/code/allatonce +13 -0
  14. data/examples/code/assignments +11 -0
  15. data/examples/code/classing +35 -0
  16. data/examples/code/components +73 -0
  17. data/examples/code/execs +16 -0
  18. data/examples/code/failers/badclassnoparam +10 -0
  19. data/examples/code/failers/badclassparam +10 -0
  20. data/examples/code/failers/badcompnoparam +9 -0
  21. data/examples/code/failers/badcompparam +9 -0
  22. data/examples/code/failers/badtypeparam +3 -0
  23. data/examples/code/file.bl +11 -0
  24. data/examples/code/filedefaults +10 -0
  25. data/examples/code/fileparsing +116 -0
  26. data/examples/code/filerecursion +15 -0
  27. data/examples/code/functions +3 -0
  28. data/examples/code/groups +7 -0
  29. data/examples/code/head +30 -0
  30. data/examples/code/importing +8 -0
  31. data/examples/code/nodes +20 -0
  32. data/examples/code/one +8 -0
  33. data/examples/code/relationships +34 -0
  34. data/examples/code/selectors +28 -0
  35. data/examples/code/simpletests +11 -0
  36. data/examples/code/snippets/argumentdefaults +14 -0
  37. data/examples/code/snippets/casestatement +39 -0
  38. data/examples/code/snippets/classheirarchy.pp +15 -0
  39. data/examples/code/snippets/classincludes.pp +17 -0
  40. data/examples/code/snippets/classpathtest +11 -0
  41. data/examples/code/snippets/dirchmod +19 -0
  42. data/examples/code/snippets/failmissingexecpath.pp +13 -0
  43. data/examples/code/snippets/falsevalues.pp +3 -0
  44. data/examples/code/snippets/filecreate +11 -0
  45. data/examples/code/snippets/implicititeration +15 -0
  46. data/examples/code/snippets/multipleinstances +7 -0
  47. data/examples/code/snippets/namevartest +9 -0
  48. data/examples/code/snippets/scopetest +13 -0
  49. data/examples/code/snippets/selectorvalues.pp +22 -0
  50. data/examples/code/snippets/simpledefaults +5 -0
  51. data/examples/code/snippets/simpleselector +38 -0
  52. data/examples/code/svncommit +13 -0
  53. data/examples/root/bin/sleeper +69 -0
  54. data/examples/root/etc/configfile +0 -0
  55. data/examples/root/etc/debian-passwd +29 -0
  56. data/examples/root/etc/debian-syslog.conf +71 -0
  57. data/examples/root/etc/init.d/sleeper +65 -0
  58. data/examples/root/etc/otherfile +0 -0
  59. data/examples/root/etc/puppet/fileserver.conf +3 -0
  60. data/examples/root/etc/puppet/puppetmasterd.conf +10 -0
  61. data/ext/module:puppet +195 -0
  62. data/install.rb +270 -0
  63. data/lib/puppet.rb +249 -0
  64. data/lib/puppet/base64.rb +19 -0
  65. data/lib/puppet/client.rb +519 -0
  66. data/lib/puppet/config.rb +49 -0
  67. data/lib/puppet/daemon.rb +208 -0
  68. data/lib/puppet/element.rb +71 -0
  69. data/lib/puppet/event.rb +259 -0
  70. data/lib/puppet/log.rb +321 -0
  71. data/lib/puppet/metric.rb +250 -0
  72. data/lib/puppet/parsedfile.rb +38 -0
  73. data/lib/puppet/parser/ast.rb +1560 -0
  74. data/lib/puppet/parser/interpreter.rb +150 -0
  75. data/lib/puppet/parser/lexer.rb +226 -0
  76. data/lib/puppet/parser/parser.rb +1354 -0
  77. data/lib/puppet/parser/scope.rb +755 -0
  78. data/lib/puppet/server.rb +170 -0
  79. data/lib/puppet/server/authstore.rb +227 -0
  80. data/lib/puppet/server/ca.rb +140 -0
  81. data/lib/puppet/server/filebucket.rb +147 -0
  82. data/lib/puppet/server/fileserver.rb +477 -0
  83. data/lib/puppet/server/logger.rb +43 -0
  84. data/lib/puppet/server/master.rb +103 -0
  85. data/lib/puppet/server/servlet.rb +247 -0
  86. data/lib/puppet/sslcertificates.rb +737 -0
  87. data/lib/puppet/statechange.rb +150 -0
  88. data/lib/puppet/storage.rb +95 -0
  89. data/lib/puppet/transaction.rb +179 -0
  90. data/lib/puppet/transportable.rb +151 -0
  91. data/lib/puppet/type.rb +1354 -0
  92. data/lib/puppet/type/component.rb +141 -0
  93. data/lib/puppet/type/cron.rb +543 -0
  94. data/lib/puppet/type/exec.rb +316 -0
  95. data/lib/puppet/type/group.rb +152 -0
  96. data/lib/puppet/type/nameservice.rb +3 -0
  97. data/lib/puppet/type/nameservice/netinfo.rb +173 -0
  98. data/lib/puppet/type/nameservice/objectadd.rb +146 -0
  99. data/lib/puppet/type/nameservice/posix.rb +200 -0
  100. data/lib/puppet/type/package.rb +420 -0
  101. data/lib/puppet/type/package/apt.rb +70 -0
  102. data/lib/puppet/type/package/dpkg.rb +108 -0
  103. data/lib/puppet/type/package/rpm.rb +81 -0
  104. data/lib/puppet/type/package/sun.rb +117 -0
  105. data/lib/puppet/type/package/yum.rb +58 -0
  106. data/lib/puppet/type/pfile.rb +569 -0
  107. data/lib/puppet/type/pfile/checksum.rb +219 -0
  108. data/lib/puppet/type/pfile/create.rb +108 -0
  109. data/lib/puppet/type/pfile/group.rb +129 -0
  110. data/lib/puppet/type/pfile/mode.rb +131 -0
  111. data/lib/puppet/type/pfile/source.rb +264 -0
  112. data/lib/puppet/type/pfile/type.rb +31 -0
  113. data/lib/puppet/type/pfile/uid.rb +166 -0
  114. data/lib/puppet/type/pfilebucket.rb +80 -0
  115. data/lib/puppet/type/pprocess.rb +97 -0
  116. data/lib/puppet/type/service.rb +347 -0
  117. data/lib/puppet/type/service/base.rb +17 -0
  118. data/lib/puppet/type/service/debian.rb +50 -0
  119. data/lib/puppet/type/service/init.rb +145 -0
  120. data/lib/puppet/type/service/smf.rb +29 -0
  121. data/lib/puppet/type/state.rb +182 -0
  122. data/lib/puppet/type/symlink.rb +183 -0
  123. data/lib/puppet/type/tidy.rb +183 -0
  124. data/lib/puppet/type/typegen.rb +149 -0
  125. data/lib/puppet/type/typegen/filerecord.rb +243 -0
  126. data/lib/puppet/type/typegen/filetype.rb +316 -0
  127. data/lib/puppet/type/user.rb +290 -0
  128. data/lib/puppet/util.rb +138 -0
  129. data/test/certmgr/certmgr.rb +265 -0
  130. data/test/client/client.rb +203 -0
  131. data/test/executables/puppetbin.rb +53 -0
  132. data/test/executables/puppetca.rb +79 -0
  133. data/test/executables/puppetd.rb +71 -0
  134. data/test/executables/puppetmasterd.rb +153 -0
  135. data/test/executables/puppetmodule.rb +60 -0
  136. data/test/language/ast.rb +412 -0
  137. data/test/language/interpreter.rb +71 -0
  138. data/test/language/scope.rb +412 -0
  139. data/test/language/snippets.rb +445 -0
  140. data/test/other/events.rb +111 -0
  141. data/test/other/log.rb +195 -0
  142. data/test/other/metrics.rb +92 -0
  143. data/test/other/overrides.rb +115 -0
  144. data/test/other/parsedfile.rb +31 -0
  145. data/test/other/relationships.rb +113 -0
  146. data/test/other/state.rb +106 -0
  147. data/test/other/storage.rb +39 -0
  148. data/test/other/transactions.rb +235 -0
  149. data/test/parser/lexer.rb +120 -0
  150. data/test/parser/parser.rb +180 -0
  151. data/test/puppet/conffiles.rb +104 -0
  152. data/test/puppet/defaults.rb +100 -0
  153. data/test/puppet/error.rb +23 -0
  154. data/test/puppet/utiltest.rb +120 -0
  155. data/test/puppettest.rb +774 -0
  156. data/test/server/authstore.rb +209 -0
  157. data/test/server/bucket.rb +227 -0
  158. data/test/server/ca.rb +201 -0
  159. data/test/server/fileserver.rb +710 -0
  160. data/test/server/logger.rb +175 -0
  161. data/test/server/master.rb +150 -0
  162. data/test/server/server.rb +130 -0
  163. data/test/tagging/tagging.rb +80 -0
  164. data/test/test +51 -0
  165. data/test/types/basic.rb +119 -0
  166. data/test/types/component.rb +272 -0
  167. data/test/types/cron.rb +261 -0
  168. data/test/types/exec.rb +273 -0
  169. data/test/types/file.rb +616 -0
  170. data/test/types/filebucket.rb +167 -0
  171. data/test/types/fileignoresource.rb +287 -0
  172. data/test/types/filesources.rb +587 -0
  173. data/test/types/filetype.rb +162 -0
  174. data/test/types/group.rb +271 -0
  175. data/test/types/package.rb +205 -0
  176. data/test/types/query.rb +101 -0
  177. data/test/types/service.rb +100 -0
  178. data/test/types/symlink.rb +93 -0
  179. data/test/types/tidy.rb +124 -0
  180. data/test/types/type.rb +135 -0
  181. data/test/types/user.rb +371 -0
  182. metadata +243 -0
@@ -0,0 +1,80 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '..'
3
+ $:.unshift '../../lib'
4
+ $puppetbase = "../.."
5
+ end
6
+
7
+ require 'puppet'
8
+ require 'puppettest'
9
+ require 'test/unit'
10
+
11
+ class TestTagging < Test::Unit::TestCase
12
+ include TestPuppet
13
+
14
+ # Make sure the scopes are getting the right tags
15
+ def test_scopetags
16
+ scope = nil
17
+ assert_nothing_raised {
18
+ scope = Puppet::Parser::Scope.new()
19
+ scope.name = "yayness"
20
+ scope.type = "solaris"
21
+ }
22
+
23
+ assert_nothing_raised {
24
+ assert_equal(%w{solaris}, scope.tags, "Incorrect scope tags")
25
+ }
26
+ end
27
+
28
+ # Test deeper tags, where a scope gets all of its parent scopes' tags
29
+ def test_deepscopetags
30
+ scope = nil
31
+ assert_nothing_raised {
32
+ scope = Puppet::Parser::Scope.new()
33
+ scope.name = "yayness"
34
+ scope.type = "solaris"
35
+ scope = scope.newscope
36
+ scope.name = "booness"
37
+ scope.type = "apache"
38
+ }
39
+
40
+ assert_nothing_raised {
41
+ # Scopes put their own tags first
42
+ assert_equal(%w{apache solaris}, scope.tags, "Incorrect scope tags")
43
+ }
44
+ end
45
+
46
+ # Verify that the tags make their way to the objects
47
+ def test_objecttags
48
+ scope = nil
49
+ assert_nothing_raised {
50
+ scope = Puppet::Parser::Scope.new()
51
+ scope.name = "yayness"
52
+ scope.type = "solaris"
53
+ }
54
+
55
+ assert_nothing_raised {
56
+ scope.setobject(
57
+ "file",
58
+ "/etc/passwd",
59
+ {"owner" => "root"},
60
+ "/yay",
61
+ 1
62
+ )
63
+ }
64
+
65
+ objects = nil
66
+ assert_nothing_raised {
67
+ objects = scope.to_trans
68
+ }
69
+
70
+ # There's only one object, so shift it out
71
+ object = objects.shift
72
+
73
+ assert_nothing_raised {
74
+ assert_equal(%w{solaris}, object.tags,
75
+ "Incorrect tags")
76
+ }
77
+ end
78
+ end
79
+
80
+ # $Id: tagging.rb 737 2005-10-30 04:07:52Z luke $
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #------------------------------------------------------------
4
+ # run any or all test suites
5
+
6
+ basedir = File.dirname(__FILE__)
7
+ $puppetbase = File.expand_path(File.join(basedir, ".."))
8
+
9
+ $:.unshift basedir
10
+ $:.unshift "#{$puppetbase}/lib"
11
+
12
+
13
+ require 'puppettest.rb'
14
+ require 'getoptlong'
15
+
16
+ #[ "--size", "-s", GetoptLong::REQUIRED_ARGUMENT ],
17
+ result = GetoptLong.new(
18
+ [ "--debug", "-d", GetoptLong::NO_ARGUMENT ],
19
+ [ "--help", "-h", GetoptLong::NO_ARGUMENT ]
20
+ )
21
+
22
+ usage = "USAGE: %s [--help] <testsuite> <testsuite> .." % $0
23
+
24
+ result.each { |opt,arg|
25
+ case opt
26
+ when "--debug"
27
+ Puppet[:debug] = true
28
+ when "--help"
29
+ puts usage
30
+ exit
31
+ else
32
+ raise "Invalid option '#{opt}'"
33
+ end
34
+ }
35
+
36
+ suites = nil
37
+
38
+ if ARGV.length != 0
39
+ suites = ARGV
40
+ else
41
+ suites = PuppetTestSuite.list
42
+ end
43
+
44
+ suites.each { |suite|
45
+ PuppetTestSuite.new(suite)
46
+ }
47
+
48
+ # This damn problem just doesn't seem to want to go away
49
+ system("%s/etc/init.d/sleeper stop 2>/dev/null 1>/dev/null" % $puppetbase)
50
+
51
+ # $Id: test 750 2005-11-22 05:34:43Z luke $
@@ -0,0 +1,119 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '..'
3
+ $:.unshift '../../lib'
4
+ $puppetbase = "../.."
5
+ end
6
+
7
+ require 'puppet'
8
+ require 'puppettest'
9
+ require 'test/unit'
10
+
11
+ class TestBasic < Test::Unit::TestCase
12
+ include TestPuppet
13
+ # hmmm
14
+ # this is complicated, because we store references to the created
15
+ # objects in a central store
16
+ def setup
17
+ super
18
+ @component = nil
19
+ @configfile = nil
20
+ @sleeper = nil
21
+
22
+ Puppet[:loglevel] = :debug if __FILE__ == $0
23
+
24
+ assert_nothing_raised() {
25
+ @component = Puppet::Type::Component.create(
26
+ :name => "yaytest",
27
+ :type => "testing"
28
+ )
29
+ }
30
+
31
+ assert_nothing_raised() {
32
+ @filepath = tempfile()
33
+ @@tmpfiles << @filepath
34
+ @configfile = Puppet::Type::PFile.create(
35
+ :path => @filepath,
36
+ :create => true,
37
+ :checksum => "md5"
38
+ )
39
+ }
40
+ assert_nothing_raised() {
41
+ @sleeper = Puppet::Type::Service.create(
42
+ :name => "sleeper",
43
+ :type => "init",
44
+ :path => File.join($puppetbase,"examples/root/etc/init.d"),
45
+ :hasstatus => true,
46
+ :running => 1
47
+ )
48
+ }
49
+ assert_nothing_raised() {
50
+ @component.push(
51
+ @configfile,
52
+ @sleeper
53
+ )
54
+ }
55
+
56
+ #puts "Component is %s, id %s" % [@component, @component.object_id]
57
+ #puts "ConfigFile is %s, id %s" % [@configfile, @configfile.object_id]
58
+ end
59
+
60
+ def test_name_calls
61
+ [@sleeper,@configfile].each { |obj|
62
+ Puppet.debug "obj is %s" % obj
63
+ assert_nothing_raised(){
64
+ obj.name
65
+ }
66
+ }
67
+ end
68
+
69
+ def test_name_equality
70
+ #puts "Component is %s, id %s" % [@component, @component.object_id]
71
+ assert_equal(
72
+ @filepath,
73
+ @configfile.name
74
+ )
75
+
76
+ assert_equal(
77
+ "sleeper",
78
+ @sleeper.name
79
+ )
80
+ end
81
+
82
+ def test_object_retrieval
83
+ [@sleeper,@configfile].each { |obj|
84
+ assert_equal(
85
+ obj.class[obj.name].object_id,
86
+ obj.object_id
87
+ )
88
+ }
89
+ end
90
+
91
+ def test_transaction
92
+ transaction = nil
93
+ assert_nothing_raised() {
94
+ transaction = @component.evaluate
95
+ }
96
+ assert_nothing_raised() {
97
+ transaction.evaluate
98
+ }
99
+ assert_nothing_raised() {
100
+ @sleeper[:running] = 0
101
+ }
102
+ assert_nothing_raised() {
103
+ transaction = @component.evaluate
104
+ }
105
+ assert_nothing_raised() {
106
+ transaction.evaluate
107
+ }
108
+ end
109
+
110
+ def test_paths
111
+ [@configfile,@sleeper,@component].each { |obj|
112
+ assert_nothing_raised {
113
+ assert_instance_of(String, obj.path)
114
+ }
115
+ }
116
+ end
117
+ end
118
+
119
+ # $Id: basic.rb 737 2005-10-30 04:07:52Z luke $
@@ -0,0 +1,272 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '..'
3
+ $:.unshift '../../lib'
4
+ $puppetbase = "../../../../language/trunk"
5
+ end
6
+
7
+ require 'puppet'
8
+ require 'puppettest'
9
+ require 'test/unit'
10
+
11
+ # $Id: component.rb 742 2005-11-16 17:12:11Z luke $
12
+
13
+ class TestComponent < Test::Unit::TestCase
14
+ include TestPuppet
15
+ def setup
16
+ super
17
+ @@used = {}
18
+ end
19
+
20
+ def randnum(limit)
21
+ num = nil
22
+ looped = 0
23
+ loop do
24
+ looped += 1
25
+ if looped > 1000
26
+ raise "Reached limit of looping"
27
+ break
28
+ end
29
+ num = rand(limit)
30
+ unless @@used.include?(num)
31
+ @@used[num] = true
32
+ break
33
+ end
34
+ end
35
+
36
+ num
37
+ end
38
+
39
+ def mkfile(num = nil)
40
+ unless num
41
+ num = randnum(1000)
42
+ end
43
+ name = "/tmp/componentrandfile" + num.to_s
44
+
45
+ file = Puppet::Type::PFile.create(
46
+ :path => name,
47
+ :checksum => "md5"
48
+ )
49
+ @@tmpfiles << name
50
+ file
51
+ end
52
+
53
+ def mkcomp
54
+ Puppet::Type::Component.create(:name => "component_" + randnum(1000).to_s)
55
+ end
56
+
57
+ def mkrandcomp(numfiles, numdivs)
58
+ comp = mkcomp
59
+ hash = {}
60
+ found = 0
61
+
62
+ divs = {}
63
+
64
+ numdivs.times { |i|
65
+ num = i + 2
66
+ divs[num] = nil
67
+ }
68
+ while found < numfiles
69
+ num = randnum(numfiles)
70
+ found += 1
71
+ f = mkfile(num)
72
+ hash[f.name] = f
73
+ reqd = []
74
+ divs.each { |n,obj|
75
+ if rand(50) % n == 0
76
+ if obj
77
+ unless reqd.include?(obj.object_id)
78
+ f[:require] = [[obj.class.name, obj.name]]
79
+ reqd << obj.object_id
80
+ end
81
+ end
82
+ end
83
+
84
+ divs[n] = f
85
+ }
86
+ end
87
+
88
+ hash.each { |name, obj|
89
+ comp.push obj
90
+ }
91
+
92
+ comp
93
+ end
94
+
95
+ def test_ordering
96
+ list = nil
97
+ comp = mkrandcomp(30,5)
98
+ assert_nothing_raised {
99
+ list = comp.flatten
100
+ }
101
+
102
+ list.each_with_index { |obj, index|
103
+ obj.eachdependency { |dep|
104
+ assert(list.index(dep) < index)
105
+ }
106
+ }
107
+ end
108
+
109
+ def test_correctsorting
110
+ tmpfile = "/tmp/comptesting"
111
+ @@tmpfiles.push tmpfile
112
+ trans = nil
113
+ cmd = nil
114
+ File.open(tmpfile, File::WRONLY|File::CREAT|File::TRUNC) { |of|
115
+ of.puts rand(100)
116
+ }
117
+ file = Puppet::Type::PFile.create(
118
+ :path => tmpfile,
119
+ :checksum => "md5"
120
+ )
121
+ assert_nothing_raised {
122
+ cmd = Puppet::Type::Exec.create(
123
+ :command => "pwd",
124
+ :path => "/usr/bin:/bin:/usr/sbin:/sbin",
125
+ :subscribe => [[file.class.name,file.name]],
126
+ :refreshonly => true
127
+ )
128
+ }
129
+
130
+ order = nil
131
+ assert_nothing_raised {
132
+ order = Puppet::Type::Component.sort([file, cmd])
133
+ }
134
+
135
+ [cmd, file].each { |obj|
136
+ assert_equal(1, order.find_all { |o| o.name == obj.name }.length)
137
+ }
138
+ end
139
+
140
+ def test_correctflattening
141
+ tmpfile = "/tmp/comptesting"
142
+ @@tmpfiles.push tmpfile
143
+ trans = nil
144
+ cmd = nil
145
+ File.open(tmpfile, File::WRONLY|File::CREAT|File::TRUNC) { |of|
146
+ of.puts rand(100)
147
+ }
148
+ file = Puppet::Type::PFile.create(
149
+ :path => tmpfile,
150
+ :checksum => "md5"
151
+ )
152
+ assert_nothing_raised {
153
+ cmd = Puppet::Type::Exec.create(
154
+ :command => "pwd",
155
+ :path => "/usr/bin:/bin:/usr/sbin:/sbin",
156
+ :subscribe => [[file.class.name,file.name]],
157
+ :refreshonly => true
158
+ )
159
+ }
160
+
161
+ comp = Puppet::Type::Component.create(:name => "RefreshTest")
162
+ [cmd, file].each { |obj|
163
+ comp.push obj
164
+ }
165
+ objects = nil
166
+ assert_nothing_raised {
167
+ objects = comp.flatten
168
+ }
169
+
170
+ [cmd, file].each { |obj|
171
+ assert_equal(1, objects.find_all { |o| o.name == obj.name }.length)
172
+ }
173
+
174
+ assert(objects[0] == file, "File was not first object")
175
+ assert(objects[1] == cmd, "Exec was not second object")
176
+ end
177
+
178
+ def test_deepflatten
179
+ tmpfile = tempfile()
180
+ @@tmpfiles.push tmpfile
181
+ trans = nil
182
+ cmd = nil
183
+ File.open(tmpfile, File::WRONLY|File::CREAT|File::TRUNC) { |of|
184
+ of.puts rand(100)
185
+ }
186
+ file = Puppet::Type::PFile.create(
187
+ :path => tmpfile,
188
+ :checksum => "md5"
189
+ )
190
+ assert_nothing_raised {
191
+ cmd = Puppet::Type::Exec.create(
192
+ :command => "pwd",
193
+ :path => "/usr/bin:/bin:/usr/sbin:/sbin",
194
+ :refreshonly => true
195
+ )
196
+ }
197
+
198
+ fcomp = newcomp("fflatten", file)
199
+ ecomp = newcomp("eflatten", cmd)
200
+
201
+ # this subscription can screw up the sorting
202
+ ecomp[:subscribe] = [[fcomp.class.name,fcomp.name]]
203
+
204
+ comp = newcomp("bflatten", ecomp, fcomp)
205
+ objects = nil
206
+ assert_nothing_raised {
207
+ objects = comp.flatten
208
+ }
209
+
210
+ assert_equal(objects.length, 2, "Did not get two sorted objects")
211
+ objects.each { |o|
212
+ assert(o.is_a?(Puppet::Type), "Object %s is not a Type" % o.class)
213
+ }
214
+
215
+ assert(objects[0] == file, "File was not first object")
216
+ assert(objects[1] == cmd, "Exec was not second object")
217
+ end
218
+
219
+ def test_deepflatten2
220
+ tmpfile = tempfile()
221
+ @@tmpfiles.push tmpfile
222
+ trans = nil
223
+ cmd = nil
224
+ File.open(tmpfile, File::WRONLY|File::CREAT|File::TRUNC) { |of|
225
+ of.puts rand(100)
226
+ }
227
+ file = Puppet::Type::PFile.create(
228
+ :path => tmpfile,
229
+ :checksum => "md5"
230
+ )
231
+ assert_nothing_raised {
232
+ cmd = Puppet::Type::Exec.create(
233
+ :command => "pwd",
234
+ :path => "/usr/bin:/bin:/usr/sbin:/sbin",
235
+ :refreshonly => true
236
+ )
237
+ }
238
+
239
+ ocmd = nil
240
+ assert_nothing_raised {
241
+ ocmd = Puppet::Type::Exec.create(
242
+ :command => "echo true",
243
+ :path => "/usr/bin:/bin:/usr/sbin:/sbin",
244
+ :refreshonly => true
245
+ )
246
+ }
247
+
248
+ fcomp = newcomp("fflatten", file)
249
+ ecomp = newcomp("eflatten", cmd)
250
+ ocomp = newcomp("oflatten", ocmd)
251
+
252
+ # this subscription can screw up the sorting
253
+ cmd[:subscribe] = [[fcomp.class.name,fcomp.name]]
254
+ ocmd[:subscribe] = [[cmd.class.name,cmd.name]]
255
+
256
+ comp = newcomp("bflatten", ocomp, ecomp, fcomp)
257
+ objects = nil
258
+ assert_nothing_raised {
259
+ objects = comp.flatten
260
+ }
261
+
262
+ assert_equal(objects.length, 3, "Did not get three sorted objects")
263
+
264
+ objects.each { |o|
265
+ assert(o.is_a?(Puppet::Type), "Object %s is not a Type" % o.class)
266
+ }
267
+
268
+ assert(objects[0] == file, "File was not first object")
269
+ assert(objects[1] == cmd, "Exec was not second object")
270
+ assert(objects[2] == ocmd, "Other exec was not second object")
271
+ end
272
+ end