puppet 0.22.4 → 0.23.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 (266) hide show
  1. data/CHANGELOG +156 -0
  2. data/README +2 -2
  3. data/Rakefile +6 -6
  4. data/bin/filebucket +212 -0
  5. data/bin/puppet +2 -0
  6. data/bin/puppetca +2 -4
  7. data/bin/puppetd +16 -15
  8. data/bin/puppetdoc +46 -496
  9. data/bin/puppetmasterd +3 -5
  10. data/bin/puppetrun +8 -3
  11. data/bin/ralsh +271 -0
  12. data/conf/redhat/client.init +1 -1
  13. data/conf/redhat/puppet.spec +13 -2
  14. data/conf/solaris/pkginfo +1 -1
  15. data/ext/puppet-test +374 -0
  16. data/install.rb +40 -31
  17. data/lib/puppet.rb +39 -4
  18. data/lib/puppet/config_stores/rest.rb +60 -0
  19. data/lib/puppet/configuration.rb +312 -17
  20. data/lib/puppet/external/event-loop/event-loop.rb +4 -0
  21. data/lib/puppet/external/gratr/rdot.rb +1 -1
  22. data/lib/puppet/fact_stores/yaml.rb +42 -0
  23. data/lib/puppet/feature/base.rb +4 -1
  24. data/lib/puppet/metatype/attributes.rb +20 -43
  25. data/lib/puppet/metatype/container.rb +1 -36
  26. data/lib/puppet/metatype/evaluation.rb +48 -19
  27. data/lib/puppet/metatype/instances.rb +35 -1
  28. data/lib/puppet/metatype/metaparams.rb +23 -19
  29. data/lib/puppet/metatype/providers.rb +25 -38
  30. data/lib/puppet/network/client/ca.rb +8 -5
  31. data/lib/puppet/network/client/master.rb +59 -17
  32. data/lib/puppet/network/handler.rb +18 -1
  33. data/lib/puppet/network/handler/ca.rb +9 -3
  34. data/lib/puppet/network/handler/facts.rb +70 -0
  35. data/lib/puppet/network/handler/filebucket.rb +4 -1
  36. data/lib/puppet/network/handler/fileserver.rb +65 -21
  37. data/lib/puppet/network/handler/master.rb +6 -3
  38. data/lib/puppet/network/handler/report.rb +12 -26
  39. data/lib/puppet/network/handler/resource.rb +14 -2
  40. data/lib/puppet/network/handler/runner.rb +5 -1
  41. data/lib/puppet/network/handler/status.rb +5 -1
  42. data/lib/puppet/network/server/mongrel.rb +4 -4
  43. data/lib/puppet/network/server/webrick.rb +14 -3
  44. data/lib/puppet/parameter.rb +30 -25
  45. data/lib/puppet/parser/ast.rb +1 -6
  46. data/lib/puppet/parser/ast/component.rb +23 -20
  47. data/lib/puppet/parser/ast/hostclass.rb +7 -11
  48. data/lib/puppet/parser/ast/leaf.rb +4 -1
  49. data/lib/puppet/parser/ast/node.rb +6 -8
  50. data/lib/puppet/parser/functions.rb +7 -4
  51. data/lib/puppet/parser/interpreter.rb +155 -205
  52. data/lib/puppet/parser/lexer.rb +35 -2
  53. data/lib/puppet/parser/parser.rb +705 -612
  54. data/lib/puppet/parser/resource.rb +91 -48
  55. data/lib/puppet/parser/resource/param.rb +52 -29
  56. data/lib/puppet/parser/scope.rb +28 -23
  57. data/lib/puppet/pgraph.rb +26 -21
  58. data/lib/puppet/propertychange.rb +12 -12
  59. data/lib/puppet/provider.rb +102 -31
  60. data/lib/puppet/provider/cron/crontab.rb +7 -8
  61. data/lib/puppet/provider/group/groupadd.rb +4 -4
  62. data/lib/puppet/provider/group/pw.rb +3 -3
  63. data/lib/puppet/provider/mount.rb +8 -8
  64. data/lib/puppet/provider/mount/netinfo.rb +5 -5
  65. data/lib/puppet/provider/mount/parsed.rb +2 -2
  66. data/lib/puppet/provider/nameservice.rb +19 -31
  67. data/lib/puppet/provider/nameservice/netinfo.rb +14 -14
  68. data/lib/puppet/provider/nameservice/objectadd.rb +4 -4
  69. data/lib/puppet/provider/nameservice/pw.rb +4 -4
  70. data/lib/puppet/provider/package.rb +31 -0
  71. data/lib/puppet/provider/package/appdmg.rb +118 -0
  72. data/lib/puppet/provider/package/apple.rb +18 -16
  73. data/lib/puppet/provider/package/apt.rb +13 -15
  74. data/lib/puppet/provider/package/aptitude.rb +5 -3
  75. data/lib/puppet/provider/package/aptrpm.rb +9 -11
  76. data/lib/puppet/provider/package/blastwave.rb +9 -9
  77. data/lib/puppet/provider/package/darwinport.rb +12 -11
  78. data/lib/puppet/provider/package/dpkg.rb +20 -12
  79. data/lib/puppet/provider/package/fink.rb +87 -0
  80. data/lib/puppet/provider/package/freebsd.rb +10 -11
  81. data/lib/puppet/provider/package/gem.rb +15 -15
  82. data/lib/puppet/provider/package/openbsd.rb +12 -17
  83. data/lib/puppet/provider/package/pkgdmg.rb +90 -16
  84. data/lib/puppet/provider/package/portage.rb +20 -14
  85. data/lib/puppet/provider/package/ports.rb +15 -13
  86. data/lib/puppet/provider/package/rpm.rb +20 -23
  87. data/lib/puppet/provider/package/rug.rb +6 -8
  88. data/lib/puppet/provider/package/sun.rb +20 -18
  89. data/lib/puppet/provider/package/sunfreeware.rb +2 -2
  90. data/lib/puppet/provider/package/up2date.rb +6 -10
  91. data/lib/puppet/provider/package/urpmi.rb +51 -0
  92. data/lib/puppet/provider/package/yum.rb +15 -13
  93. data/lib/puppet/provider/parsedfile.rb +53 -63
  94. data/lib/puppet/provider/service/base.rb +13 -15
  95. data/lib/puppet/provider/service/debian.rb +4 -4
  96. data/lib/puppet/provider/service/gentoo.rb +4 -4
  97. data/lib/puppet/provider/service/init.rb +22 -15
  98. data/lib/puppet/provider/service/redhat.rb +6 -6
  99. data/lib/puppet/provider/service/smf.rb +6 -6
  100. data/lib/puppet/provider/user/netinfo.rb +5 -5
  101. data/lib/puppet/provider/user/pw.rb +10 -5
  102. data/lib/puppet/provider/user/useradd.rb +9 -14
  103. data/lib/puppet/provider/zone/solaris.rb +80 -45
  104. data/lib/puppet/rails.rb +3 -34
  105. data/lib/puppet/rails/database/schema.rb +45 -24
  106. data/lib/puppet/rails/fact_value.rb +1 -0
  107. data/lib/puppet/rails/host.rb +69 -40
  108. data/lib/puppet/rails/param_name.rb +3 -8
  109. data/lib/puppet/rails/param_value.rb +2 -1
  110. data/lib/puppet/rails/puppet_class.rb +0 -2
  111. data/lib/puppet/rails/puppet_tag.rb +5 -0
  112. data/lib/puppet/rails/resource.rb +41 -17
  113. data/lib/puppet/rails/resource_tag.rb +4 -0
  114. data/lib/puppet/reference/configuration.rb +149 -0
  115. data/lib/puppet/reference/function.rb +13 -0
  116. data/lib/puppet/reference/network.rb +37 -0
  117. data/lib/puppet/reference/providers.rb +118 -0
  118. data/lib/puppet/reference/report.rb +21 -0
  119. data/lib/puppet/reference/type.rb +152 -0
  120. data/lib/puppet/reports/rrdgraph.rb +21 -7
  121. data/lib/puppet/reports/tagmail.rb +4 -1
  122. data/lib/puppet/sslcertificates.rb +1 -49
  123. data/lib/puppet/sslcertificates/ca.rb +2 -79
  124. data/lib/puppet/sslcertificates/inventory.rb +0 -10
  125. data/lib/puppet/transaction.rb +24 -41
  126. data/lib/puppet/transaction/report.rb +27 -1
  127. data/lib/puppet/type.rb +7 -43
  128. data/lib/puppet/type/component.rb +198 -124
  129. data/lib/puppet/type/cron.rb +51 -42
  130. data/lib/puppet/type/exec.rb +20 -19
  131. data/lib/puppet/type/group.rb +6 -55
  132. data/lib/puppet/type/host.rb +16 -37
  133. data/lib/puppet/type/mount.rb +30 -17
  134. data/lib/puppet/type/notify.rb +7 -8
  135. data/lib/puppet/type/package.rb +44 -80
  136. data/lib/puppet/type/pfile.rb +50 -41
  137. data/lib/puppet/type/pfile/checksum.rb +82 -95
  138. data/lib/puppet/type/pfile/content.rb +21 -25
  139. data/lib/puppet/type/pfile/ensure.rb +32 -30
  140. data/lib/puppet/type/pfile/group.rb +21 -26
  141. data/lib/puppet/type/pfile/mode.rb +25 -32
  142. data/lib/puppet/type/pfile/owner.rb +23 -27
  143. data/lib/puppet/type/pfile/source.rb +42 -33
  144. data/lib/puppet/type/pfile/target.rb +20 -18
  145. data/lib/puppet/type/pfile/type.rb +6 -7
  146. data/lib/puppet/type/pfilebucket.rb +3 -3
  147. data/lib/puppet/type/port.rb +5 -7
  148. data/lib/puppet/type/property.rb +58 -61
  149. data/lib/puppet/type/resources.rb +12 -8
  150. data/lib/puppet/type/schedule.rb +8 -8
  151. data/lib/puppet/type/service.rb +26 -33
  152. data/lib/puppet/type/sshkey.rb +6 -7
  153. data/lib/puppet/type/tidy.rb +41 -35
  154. data/lib/puppet/type/user.rb +34 -67
  155. data/lib/puppet/type/yumrepo.rb +27 -12
  156. data/lib/puppet/type/zone.rb +71 -110
  157. data/lib/puppet/util.rb +46 -61
  158. data/lib/puppet/util/autoload.rb +59 -47
  159. data/lib/puppet/util/config.rb +160 -18
  160. data/lib/puppet/util/config_store.rb +61 -0
  161. data/lib/puppet/util/fact_store.rb +60 -0
  162. data/lib/puppet/util/instance_loader.rb +74 -0
  163. data/lib/puppet/util/loadedfile.rb +5 -8
  164. data/lib/puppet/util/metric.rb +17 -25
  165. data/lib/puppet/util/posix.rb +39 -7
  166. data/lib/puppet/util/provider_features.rb +9 -1
  167. data/lib/puppet/util/rails/collection_merger.rb +16 -1
  168. data/lib/puppet/util/reference.rb +189 -0
  169. data/lib/puppet/util/storage.rb +2 -2
  170. data/lib/puppet/util/subclass_loader.rb +9 -2
  171. data/test/language/ast.rb +4 -148
  172. data/test/language/ast/component.rb +10 -1
  173. data/test/language/collector.rb +1 -191
  174. data/test/language/interpreter.rb +284 -327
  175. data/test/language/lexer.rb +13 -1
  176. data/test/language/node.rb +1 -1
  177. data/test/language/parser.rb +17 -4
  178. data/test/language/resource.rb +67 -101
  179. data/test/language/scope.rb +18 -3
  180. data/test/language/snippets.rb +114 -151
  181. data/test/lib/puppettest.rb +13 -0
  182. data/test/lib/puppettest/exetest.rb +7 -0
  183. data/test/lib/puppettest/fakes.rb +39 -28
  184. data/test/lib/puppettest/railstesting.rb +1 -1
  185. data/test/lib/puppettest/support/assertions.rb +2 -2
  186. data/test/lib/puppettest/support/collection.rb +30 -0
  187. data/test/network/client/ca.rb +27 -1
  188. data/test/network/client/client.rb +3 -3
  189. data/test/network/client/master.rb +102 -1
  190. data/test/network/handler/ca.rb +35 -1
  191. data/test/network/handler/facts.rb +112 -0
  192. data/test/network/handler/fileserver.rb +25 -1
  193. data/test/network/handler/handler.rb +2 -2
  194. data/test/network/handler/master.rb +2 -49
  195. data/test/network/handler/resource.rb +5 -6
  196. data/test/network/server/mongrel_test.rb +65 -0
  197. data/test/network/server/webrick.rb +2 -2
  198. data/test/network/xmlrpc/client.rb +2 -1
  199. data/test/network/xmlrpc/processor.rb +2 -1
  200. data/test/other/pgraph.rb +6 -5
  201. data/test/other/propertychange.rb +11 -12
  202. data/test/other/report.rb +44 -27
  203. data/test/other/transactions.rb +17 -16
  204. data/test/puppet/tc_suidmanager.rb +2 -2
  205. data/test/rails/ast.rb +74 -0
  206. data/test/rails/collection.rb +214 -0
  207. data/test/rails/host.rb +49 -24
  208. data/test/rails/interpreter.rb +91 -0
  209. data/test/rails/railsparameter.rb +22 -11
  210. data/test/rails/railsresource.rb +140 -7
  211. data/test/ral/manager/attributes.rb +37 -13
  212. data/test/ral/manager/instances.rb +82 -0
  213. data/test/ral/manager/provider.rb +60 -22
  214. data/test/ral/manager/type.rb +9 -6
  215. data/test/ral/providers/cron/crontab.rb +59 -7
  216. data/test/ral/providers/group.rb +7 -7
  217. data/test/ral/providers/host/netinfo.rb +5 -6
  218. data/test/ral/providers/host/parsed.rb +4 -4
  219. data/test/ral/providers/mount/parsed.rb +11 -6
  220. data/test/ral/providers/nameservice.rb +2 -2
  221. data/test/ral/providers/package.rb +39 -14
  222. data/test/ral/providers/package/apt.rb +72 -3
  223. data/test/ral/providers/package/aptitude.rb +15 -12
  224. data/test/ral/providers/package/aptrpm.rb +3 -3
  225. data/test/ral/providers/package/dpkg.rb +2 -2
  226. data/test/ral/providers/parsedfile.rb +114 -88
  227. data/test/ral/providers/{parsedport.rb → port/parsed.rb} +1 -1
  228. data/test/ral/providers/provider.rb +93 -13
  229. data/test/ral/providers/service.rb +52 -26
  230. data/test/ral/providers/sshkey/parsed.rb +3 -3
  231. data/test/ral/providers/user.rb +19 -20
  232. data/test/ral/providers/user/useradd.rb +1 -5
  233. data/test/ral/types/cron.rb +49 -36
  234. data/test/ral/types/file.rb +38 -35
  235. data/test/ral/types/file/target.rb +4 -4
  236. data/test/ral/types/filesources.rb +24 -22
  237. data/test/ral/types/group.rb +4 -2
  238. data/test/ral/types/host.rb +17 -10
  239. data/test/ral/types/mount.rb +40 -23
  240. data/test/ral/types/package.rb +62 -5
  241. data/test/ral/types/parameter.rb +2 -2
  242. data/test/ral/types/property.rb +27 -20
  243. data/test/ral/types/resources.rb +4 -16
  244. data/test/ral/types/schedule.rb +2 -2
  245. data/test/ral/types/service.rb +2 -3
  246. data/test/ral/types/sshkey.rb +3 -3
  247. data/test/ral/types/tidy.rb +6 -15
  248. data/test/ral/types/user.rb +17 -17
  249. data/test/ral/types/yumrepo.rb +2 -2
  250. data/test/ral/types/zone.rb +71 -87
  251. data/test/util/autoload.rb +6 -21
  252. data/test/util/config.rb +201 -101
  253. data/test/util/fact_store.rb +67 -0
  254. data/test/util/features.rb +9 -6
  255. data/test/util/instance_loader.rb +53 -0
  256. data/test/util/loadedfile.rb +17 -1
  257. data/test/util/metrics.rb +54 -57
  258. data/test/util/posixtest.rb +8 -11
  259. data/test/util/utiltest.rb +31 -2
  260. metadata +520 -492
  261. data/TODO +0 -4
  262. data/lib/puppet/network/client/logger.rb +0 -6
  263. data/lib/puppet/network/handler/logger.rb +0 -52
  264. data/lib/puppet/rails/database/001_add_indexes.rb +0 -38
  265. data/lib/puppet/type/parsedtype.rb +0 -219
  266. data/test/network/handler/logger.rb +0 -183
@@ -11,6 +11,35 @@ class TestReports < Test::Unit::TestCase
11
11
  include PuppetTest
12
12
  include PuppetTest::Reporttesting
13
13
 
14
+ def mkreport
15
+ # First do some work
16
+ objects = []
17
+ 6.times do |i|
18
+ file = tempfile()
19
+
20
+ # Make every third file
21
+ File.open(file, "w") { |f| f.puts "" } if i % 3 == 0
22
+
23
+ objects << Puppet::Type.newfile(
24
+ :path => file,
25
+ :ensure => "file"
26
+ )
27
+ end
28
+
29
+ comp = newcomp(*objects)
30
+
31
+ trans = nil
32
+ assert_nothing_raised("Failed to create transaction") {
33
+ trans = comp.evaluate
34
+ }
35
+
36
+ assert_nothing_raised("Failed to evaluate transaction") {
37
+ trans.evaluate
38
+ }
39
+
40
+ return trans.generate_report
41
+ end
42
+
14
43
  # Make sure we can use reports as log destinations.
15
44
  def test_reports_as_log_destinations
16
45
  report = fakereport
@@ -91,32 +120,7 @@ class TestReports < Test::Unit::TestCase
91
120
  if Puppet.features.rrd?
92
121
  def test_rrdgraph_report
93
122
  Puppet.config.use(:metrics)
94
- # First do some work
95
- objects = []
96
- 6.times do |i|
97
- file = tempfile()
98
-
99
- # Make every third file
100
- File.open(file, "w") { |f| f.puts "" } if i % 3 == 0
101
-
102
- objects << Puppet::Type.newfile(
103
- :path => file,
104
- :ensure => "file"
105
- )
106
- end
107
-
108
- comp = newcomp(*objects)
109
-
110
- trans = nil
111
- assert_nothing_raised("Failed to create transaction") {
112
- trans = comp.evaluate
113
- }
114
-
115
- assert_nothing_raised("Failed to evaluate transaction") {
116
- trans.evaluate
117
- }
118
-
119
- report = trans.generate_report
123
+ report = mkreport
120
124
 
121
125
  assert(! report.metrics.empty?, "Did not receive any metrics")
122
126
 
@@ -230,6 +234,19 @@ class TestReports < Test::Unit::TestCase
230
234
  end
231
235
  end
232
236
  end
237
+
238
+ def test_summary
239
+ report = mkreport
240
+
241
+ summary = nil
242
+ assert_nothing_raised("Could not create report summary") do
243
+ summary = report.summary
244
+ end
245
+
246
+ %w{Changes Total Resources}.each do |main|
247
+ assert(summary.include?(main), "Summary did not include info for %s" % main)
248
+ end
249
+ end
233
250
  end
234
251
 
235
- # $Id: report.rb 2438 2007-04-30 18:15:01Z luke $
252
+ # $Id: report.rb 2459 2007-05-04 05:04:29Z luke $
@@ -7,7 +7,7 @@ require 'puppettest'
7
7
  require 'mocha'
8
8
  require 'puppettest/support/resources'
9
9
 
10
- # $Id: transactions.rb 2372 2007-03-30 00:47:03Z luke $
10
+ # $Id: transactions.rb 2551 2007-06-04 20:37:14Z luke $
11
11
 
12
12
  class TestTransactions < Test::Unit::TestCase
13
13
  include PuppetTest::FileTesting
@@ -17,7 +17,7 @@ class TestTransactions < Test::Unit::TestCase
17
17
  def should_to_s
18
18
  @should.to_s
19
19
  end
20
- def insync?
20
+ def insync?(foo)
21
21
  true
22
22
  end
23
23
  def info(*args)
@@ -124,8 +124,8 @@ class TestTransactions < Test::Unit::TestCase
124
124
 
125
125
  # Now create a provider
126
126
  type.provide(:prefetch) do
127
- def self.prefetch
128
- $prefetched = true
127
+ def self.prefetch(resources)
128
+ $prefetched = resources
129
129
  end
130
130
  end
131
131
 
@@ -140,7 +140,7 @@ class TestTransactions < Test::Unit::TestCase
140
140
  trans.prefetch
141
141
  end
142
142
 
143
- assert_equal(true, $prefetched, "type prefetch was not called")
143
+ assert_equal({inst.title => inst}, $prefetched, "type prefetch was not called")
144
144
 
145
145
  # Now make sure it gets called from within evaluate()
146
146
  $prefetched = false
@@ -148,7 +148,7 @@ class TestTransactions < Test::Unit::TestCase
148
148
  trans.evaluate
149
149
  end
150
150
 
151
- assert_equal(true, $prefetched, "evaluate did not call prefetch")
151
+ assert_equal({inst.title => inst}, $prefetched, "evaluate did not call prefetch")
152
152
  end
153
153
 
154
154
  def test_refreshes_generate_events
@@ -248,8 +248,9 @@ class TestTransactions < Test::Unit::TestCase
248
248
 
249
249
  assert_nothing_raised() {
250
250
  check.each { |property|
251
- assert(file[property])
252
- properties[property] = file[property]
251
+ value = file.value(property)
252
+ assert(value)
253
+ properties[property] = value
253
254
  }
254
255
  }
255
256
 
@@ -277,7 +278,7 @@ class TestTransactions < Test::Unit::TestCase
277
278
  }
278
279
  properties.each { |property,value|
279
280
  assert_equal(
280
- value,file.is(property), "File %s remained %s" % [property, file.is(property)]
281
+ value, file.value(property), "File %s remained %s" % [property, file.value(property)]
281
282
  )
282
283
  }
283
284
  end
@@ -310,7 +311,7 @@ class TestTransactions < Test::Unit::TestCase
310
311
  }
311
312
 
312
313
  check.each { |property|
313
- properties[property] = file[property]
314
+ properties[property] = file.value(property)
314
315
  }
315
316
  assert_nothing_raised() {
316
317
  file[:mode] = "755"
@@ -466,7 +467,7 @@ class TestTransactions < Test::Unit::TestCase
466
467
 
467
468
  file[:content] = "totally different content"
468
469
 
469
- assert(! file.insync?, "Uh, file is in sync?")
470
+ assert(! file.insync?(file.retrieve), "Uh, file is in sync?")
470
471
 
471
472
  assert_events([:file_changed, :triggered], comp)
472
473
  assert(FileTest.exists?(fname), "File did not get recreated")
@@ -766,7 +767,7 @@ class TestTransactions < Test::Unit::TestCase
766
767
  type = mkreducer do
767
768
  def evaluate
768
769
  return Puppet::PropertyChange.new(Fakeprop.new(
769
- :path => :path, :is => :is, :should => :should, :name => self.name, :parent => "a parent"))
770
+ :path => :path, :is => :is, :should => :should, :name => self.name, :resource => "a parent"), :is)
770
771
  end
771
772
  end
772
773
 
@@ -778,7 +779,7 @@ class TestTransactions < Test::Unit::TestCase
778
779
  assert_nothing_raised do
779
780
  trans.eval_resource(resource)
780
781
  end
781
-
782
+
782
783
  changes = trans.instance_variable_get("@changes")
783
784
 
784
785
  assert(changes.length > 0, "did not get any changes")
@@ -884,7 +885,7 @@ class TestTransactions < Test::Unit::TestCase
884
885
  end
885
886
 
886
887
  def test_graph
887
- Puppet.config.use(:puppet)
888
+ Puppet.config.use(:main)
888
889
  # Make a graph
889
890
  graph = Puppet::PGraph.new
890
891
  graph.add_edge!("a", "b")
@@ -1015,7 +1016,7 @@ class TestTransactions < Test::Unit::TestCase
1015
1016
 
1016
1017
  obj = type.create(:name => "yay", :testing => "cool")
1017
1018
 
1018
- assert(! obj.insync?, "fake object is already in sync")
1019
+ assert(! obj.insync?(obj.retrieve), "fake object is already in sync")
1019
1020
 
1020
1021
  # Now make sure it gets refreshed when the change happens
1021
1022
  assert_apply(obj)
@@ -1149,4 +1150,4 @@ class TestTransactions < Test::Unit::TestCase
1149
1150
  end
1150
1151
  end
1151
1152
 
1152
- # $Id: transactions.rb 2372 2007-03-30 00:47:03Z luke $
1153
+ # $Id: transactions.rb 2551 2007-06-04 20:37:14Z luke $
@@ -76,7 +76,7 @@ class TestSUIDManager < Test::Unit::TestCase
76
76
  if @run
77
77
  user = nonrootuser
78
78
  status = Puppet::Util::SUIDManager.system("exit $EUID", user.uid, user.gid)
79
- assert_equal(user.uid, status.exitstatus)
79
+ assert_equal(user.uid, status.exitstatus, "EUID does not seem to be inherited. This test consistently fails on RedHat-like machines.")
80
80
  end
81
81
  end
82
82
 
@@ -104,4 +104,4 @@ class TestSUIDManager < Test::Unit::TestCase
104
104
  end
105
105
  end
106
106
 
107
- # $Id: tc_suidmanager.rb 2178 2007-02-07 23:56:59Z luke $
107
+ # $Id: tc_suidmanager.rb 2625 2007-06-19 01:51:48Z luke $
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ require 'puppet/rails'
7
+ require 'puppet/parser/parser'
8
+ require 'puppettest/resourcetesting'
9
+ require 'puppettest/parsertesting'
10
+ require 'puppettest/railstesting'
11
+ require 'puppettest/support/collection'
12
+
13
+ class TestRailsAST < PuppetTest::TestCase
14
+ confine "Missing rails" => Puppet.features.rails?
15
+ include PuppetTest::RailsTesting
16
+ include PuppetTest::ParserTesting
17
+ include PuppetTest::ResourceTesting
18
+ include PuppetTest::Support::Collection
19
+
20
+ def test_exported_collexp
21
+ railsinit
22
+ Puppet[:storeconfigs] = true
23
+ @interp, @scope, @source = mkclassframing
24
+
25
+ # make a rails resource
26
+ railsresource "file", "/tmp/testing", :owner => "root", :group => "bin",
27
+ :mode => "644"
28
+
29
+ run_collection_queries(:exported) do |string, result, query|
30
+ code = nil
31
+ str = nil
32
+
33
+ # We don't support anything but the title in rails right now
34
+ retval = nil
35
+ bad = false
36
+ # Figure out if the search is for anything rails will ignore
37
+ string.scan(/(\w+) [!=]= \w+/) do |s|
38
+ unless s[0] == "title"
39
+ bad = true
40
+ break
41
+ end
42
+ end
43
+
44
+ # And if it is, make sure we throw an error.
45
+ if bad
46
+ assert_raise(Puppet::ParseError, "Evaluated '#{string}'") do
47
+ str, code = query.evaluate :scope => @scope
48
+ end
49
+ next
50
+ else
51
+ assert_nothing_raised("Could not evaluate '#{string}'") do
52
+ str, code = query.evaluate :scope => @scope
53
+ end
54
+ end
55
+ assert_nothing_raised("Could not find resource") do
56
+ retval = Puppet::Rails::Resource.find(:all,
57
+ :include => :param_values,
58
+ :conditions => str)
59
+ end
60
+
61
+ if result
62
+ assert_equal(1, retval.length, "Did not find resource with '#{string}'")
63
+ res = retval.shift
64
+
65
+ assert_equal("file", res.restype)
66
+ assert_equal("/tmp/testing", res.title)
67
+ else
68
+ assert_equal(0, retval.length, "found a resource with '#{string}'")
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ # $Id: ast.rb 2597 2007-06-17 21:41:50Z luke $
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppet'
6
+ require 'puppet/rails'
7
+ require 'puppettest'
8
+ require 'puppettest/railstesting'
9
+ require 'puppettest/resourcetesting'
10
+
11
+
12
+ # A separate class for testing rails integration
13
+ class TestRailsCollection < PuppetTest::TestCase
14
+ confine "Missing rails support" => Puppet.features.rails?
15
+ include PuppetTest
16
+ include PuppetTest::ParserTesting
17
+ include PuppetTest::ResourceTesting
18
+ include PuppetTest::RailsTesting
19
+ Parser = Puppet::Parser
20
+ AST = Parser::AST
21
+
22
+ def setup
23
+ super
24
+ Puppet[:trace] = false
25
+ @interp, @scope, @source = mkclassframing
26
+ end
27
+
28
+ def test_collect_exported
29
+ railsinit
30
+
31
+ # Set a hostname
32
+ @scope.host = Facter.value(:hostname)
33
+
34
+ # make an exported resource
35
+ exported = mkresource(:type => "file", :title => "/tmp/exported",
36
+ :exported => true, :params => {:owner => "root"})
37
+ @scope.setresource exported
38
+
39
+ assert(exported.exported?, "Object was not marked exported")
40
+ assert(exported.virtual?, "Object was not marked virtual")
41
+
42
+ # And a non-exported
43
+ real = mkresource(:type => "file", :title => "/tmp/real",
44
+ :params => {:owner => "root"})
45
+ @scope.setresource real
46
+
47
+ # Now make a collector
48
+ coll = nil
49
+ assert_nothing_raised do
50
+ coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :exported)
51
+ end
52
+
53
+ # Set it in our scope
54
+ @scope.newcollection(coll)
55
+
56
+ # Make sure it's in the collections
57
+ assert_equal([coll], @scope.collections)
58
+
59
+ # And try to collect the virtual resources.
60
+ ret = nil
61
+ assert_nothing_raised do
62
+ ret = coll.collect_exported
63
+ end
64
+
65
+ assert_equal([exported], ret)
66
+
67
+ # Now make sure evaluate does the right thing.
68
+ assert_nothing_raised do
69
+ ret = coll.evaluate
70
+ end
71
+
72
+ # Make sure that the collection does not find the resource on the
73
+ # next run.
74
+ ret = nil
75
+ assert_nothing_raised do
76
+ ret = coll.collect_exported
77
+ end
78
+
79
+ assert(ret.empty?, "Exported resource was collected on the second run")
80
+
81
+
82
+ # And make sure our exported object is no longer exported
83
+ assert(! exported.virtual?, "Virtual object did not get realized")
84
+
85
+ # But it should still be marked exported.
86
+ assert(exported.exported?, "Resource got un-exported")
87
+
88
+ # Now make a new collector of a different type and make sure it
89
+ # finds nothing.
90
+ assert_nothing_raised do
91
+ coll = Puppet::Parser::Collector.new(@scope, "exec", nil, nil, :exported)
92
+ end
93
+
94
+ # Remark this as virtual
95
+ exported.virtual = true
96
+
97
+ assert_nothing_raised do
98
+ ret = coll.evaluate
99
+ end
100
+
101
+ assert(! ret, "got resources back")
102
+
103
+ # Now create a whole new scope and make sure we can actually retrieve
104
+ # the resource from the database, not just from the scope.
105
+ # First create a host object and store our resource in it.
106
+
107
+ # Now collect our facts
108
+ facts = {}
109
+ Facter.each do |fact, value| facts[fact] = value end
110
+
111
+ # Now try storing our crap
112
+ # Remark this as exported
113
+ exported.exported = true
114
+ host = Puppet::Rails::Host.store(
115
+ :resources => [exported],
116
+ :facts => facts,
117
+ :name => facts["hostname"]
118
+ )
119
+ assert(host, "did not get rails host")
120
+ host.save
121
+
122
+ # And make sure it's in there
123
+ newres = host.resources.find_by_restype_and_title_and_exported("file", "/tmp/exported", true)
124
+ assert(newres, "Did not find resource in db")
125
+ interp, scope, source = mkclassframing
126
+ scope.host = "two"
127
+
128
+ # Now make a collector
129
+ coll = nil
130
+ assert_nothing_raised do
131
+ coll = Puppet::Parser::Collector.new(scope, "file", nil, nil, :exported)
132
+ end
133
+
134
+ # Set it in our scope
135
+ scope.newcollection(coll)
136
+
137
+ # Make sure it's in the collections
138
+ assert_equal([coll], scope.collections)
139
+
140
+ # And try to collect the virtual resources.
141
+ ret = nil
142
+ assert_nothing_raised do
143
+ ret = coll.collect_exported
144
+ end
145
+
146
+ assert_equal(["/tmp/exported"], ret.collect { |f| f.title })
147
+
148
+ # Make sure we can evaluate the same collection multiple times and
149
+ # that later collections do nothing
150
+ assert_nothing_raised("Collection found same resource twice") do
151
+ ret = coll.evaluate
152
+ end
153
+ end
154
+
155
+ def test_collection_conflicts
156
+ railsinit
157
+
158
+ # First make a railshost we can conflict with
159
+ host = Puppet::Rails::Host.new(:name => "myhost")
160
+
161
+ host.resources.build(:title => "/tmp/conflicttest", :restype => "file",
162
+ :exported => true)
163
+
164
+ host.save
165
+
166
+ # Now make a normal resource
167
+ normal = mkresource(:type => "file", :title => "/tmp/conflicttest",
168
+ :params => {:owner => "root"})
169
+ @scope.setresource normal
170
+ @scope.host = "otherhost"
171
+
172
+ # Now make a collector
173
+ coll = nil
174
+ assert_nothing_raised do
175
+ coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :exported)
176
+ end
177
+
178
+ # And try to collect the virtual resources.
179
+ assert_raise(Puppet::ParseError) do
180
+ ret = coll.collect_exported
181
+ end
182
+ end
183
+
184
+ # Make sure we do not collect resources from the host we're on
185
+ def test_no_resources_from_me
186
+ railsinit
187
+
188
+ # Make our configuration
189
+ host = Puppet::Rails::Host.new(:name => "myhost")
190
+
191
+ host.resources.build(:title => "/tmp/hosttest", :type => "file",
192
+ :exported => true)
193
+
194
+ host.save
195
+
196
+ @scope.host = "myhost"
197
+
198
+ # Now make a collector
199
+ coll = nil
200
+ assert_nothing_raised do
201
+ coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :exported)
202
+ end
203
+
204
+ # And make sure we get nada back
205
+ ret = nil
206
+ assert_nothing_raised do
207
+ ret = coll.collect_exported
208
+ end
209
+
210
+ assert(ret.empty?, "Found exports from our own host")
211
+ end
212
+ end
213
+
214
+ # $Id: collection.rb 2596 2007-06-17 01:02:31Z luke $