puppet 0.22.4 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -29,25 +29,25 @@ class TestParsedFile < Test::Unit::TestCase
29
29
 
30
30
  # The target should always be a property, not a parameter.
31
31
  newproperty(:target) do
32
- defaultto { @parent.class.defaultprovider.default_target }
32
+ defaultto { @resource.class.defaultprovider.default_target }
33
33
  end
34
34
  end
35
35
 
36
36
  # A simple block to skip the complexity of a full transaction.
37
- def apply(model)
37
+ def apply(resource)
38
38
  [:one, :two, :ensure].each do |st|
39
39
  Puppet.info "Setting %s: %s => %s" %
40
- [model[:name], st, model.should(st)]
41
- model.provider.send(st.to_s + "=", model.should(st))
40
+ [resource[:name], st, resource.should(st)]
41
+ resource.provider.send(st.to_s + "=", resource.should(st))
42
42
  end
43
43
  end
44
44
 
45
- def mkmodel(name, options = {})
45
+ def mkresource(name, options = {})
46
46
  options[:one] ||= "a"
47
47
  options[:two] ||= "c"
48
48
  options[:name] ||= name
49
49
 
50
- model = @type.create(options)
50
+ resource = @type.create(options)
51
51
  end
52
52
 
53
53
  def mkprovider(name = :parsed)
@@ -76,7 +76,7 @@ class TestParsedFile < Test::Unit::TestCase
76
76
  end
77
77
  end
78
78
 
79
- def test_model_attributes
79
+ def test_resource_attributes
80
80
  prov = nil
81
81
  assert_nothing_raised do
82
82
  prov = mkprovider
@@ -87,11 +87,12 @@ class TestParsedFile < Test::Unit::TestCase
87
87
  end
88
88
 
89
89
  # Now make sure they stay around
90
- fakemodel = fakemodel(:testparsedfiletype, "yay")
90
+ fakeresource = fakeresource(:testparsedfiletype, "yay")
91
91
 
92
- file = prov.new(fakemodel)
92
+ file = prov.new(fakeresource)
93
+ assert(file, "Could not make provider")
93
94
 
94
- assert_nothing_raised do
95
+ assert_nothing_raised("Could not set provider name") do
95
96
  file.name = :yayness
96
97
  end
97
98
 
@@ -202,35 +203,34 @@ class TestParsedFile < Test::Unit::TestCase
202
203
 
203
204
  prov.target_object(:default).write "will b d"
204
205
 
205
- # Create some models for some of those demo files
206
- model = mkmodel "bill", :target => :file1
207
- default = mkmodel "will", :target => :default
206
+ # Create some resources for some of those demo files
207
+ resource = mkresource "bill", :target => :file1
208
+ default = mkresource "will", :target => :default
209
+
210
+ resources = {"bill" => resource, "will" => default}
208
211
 
209
212
  assert_nothing_raised do
210
- prov.prefetch
213
+ prov.prefetch(resources)
211
214
  end
212
215
 
213
- # Make sure we prefetched our models.
214
- assert_equal("b", model.provider.one)
215
- assert_equal("b", default.provider.one)
216
- assert_equal("d", default.provider.two)
216
+ # Make sure we prefetched our resources.
217
+ assert_equal("b", resource.provider.one, "did not prefetch resource from file1")
218
+ assert_equal("b", default.provider.one, "did not prefetch resource from default")
219
+ assert_equal("d", default.provider.two, "did not prefetch resource from default")
217
220
 
218
221
  # Now list all of them and make sure we get everything back
219
- hashes = nil
222
+ providers = nil
220
223
  assert_nothing_raised do
221
- hashes = prov.list
224
+ providers = prov.instances
222
225
  end
223
226
 
224
- names = nil
225
- assert_nothing_raised do
226
- names = prov.list_by_name
227
+ providers.each do |provider|
228
+ assert_instance_of(prov, provider, "'instances' class method did not return providers")
227
229
  end
228
230
 
229
231
  %w{bill jill will}.each do |name|
230
- assert(hashes.find { |r| r[:name] == name},
232
+ assert(providers.find { |provider| provider.name == name},
231
233
  "Did not return %s in list" % name)
232
- assert(names.include?(name),
233
- "Did not return %s in list_by_name" % name)
234
234
  end
235
235
  end
236
236
 
@@ -242,25 +242,27 @@ class TestParsedFile < Test::Unit::TestCase
242
242
  target = :yayness
243
243
  prov.target_object(target).write "yay b d"
244
244
 
245
- model = mkmodel "yay", :target => :yayness
246
-
245
+ records = nil
247
246
  assert_nothing_raised do
248
- prov.prefetch_target(:yayness)
247
+ records = prov.prefetch_target(:yayness)
249
248
  end
250
249
 
251
250
  # Now make sure we correctly got the hash
252
- mprov = model.provider
253
- assert_equal("b", mprov.one)
254
- assert_equal("d", mprov.two)
251
+ record = records.find { |r| r[:name] == "yay" }
252
+ assert(record, "Did not get record in prefetch_target")
253
+ assert_equal("b", record[:one])
254
+ assert_equal("d", record[:two])
255
255
  end
256
256
 
257
257
  def test_prefetch_match
258
258
  prov = mkprovider
259
259
 
260
- prov.meta_def(:match) do |record|
260
+ prov.meta_def(:match) do |record, resources|
261
261
  # Look for matches on :one
262
- self.model.find do |m|
263
- m.should(:one).to_s == record[:one].to_s
262
+ if res = resources.find { |name, resource| resource.should(:one).to_s == record[:one].to_s }
263
+ res[1]
264
+ else
265
+ nil
264
266
  end
265
267
  end
266
268
 
@@ -268,22 +270,22 @@ class TestParsedFile < Test::Unit::TestCase
268
270
  target = :yayness
269
271
  prov.target_object(target).write "foo b d"
270
272
 
271
- model = mkmodel "yay", :target => :yayness, :one => "b"
273
+ resource = mkresource "yay", :target => :yayness, :one => "b"
272
274
 
273
275
  assert_nothing_raised do
274
- prov.prefetch_target(:yayness)
276
+ prov.prefetch("yay" => resource)
275
277
  end
276
278
 
277
279
  # Now make sure we correctly got the hash
278
- mprov = model.provider
279
- assert_equal("yay", model[:name])
280
+ mprov = resource.provider
281
+ assert_equal("yay", resource[:name])
280
282
  assert_equal("b", mprov.one)
281
283
  assert_equal("d", mprov.two)
282
284
  end
283
285
 
284
286
  # We need to test that we're retrieving files from all three locations:
285
287
  # from any existing target_objects, from the default file location, and
286
- # from any existing model instances.
288
+ # from any existing resource instances.
287
289
  def test_targets
288
290
  prov = mkprovider
289
291
 
@@ -299,24 +301,37 @@ class TestParsedFile < Test::Unit::TestCase
299
301
  files[:inmemory] = inmem
300
302
  prov.target_object(inmem).write("inmem yay ness")
301
303
 
302
- # Lastly, create a model with separate is and should values
304
+ # Lastly, create a resource with separate is and should values
303
305
  mtarget = tempfile()
304
- istarget = tempfile()
305
- files[:models] = mtarget
306
- files[:ismodels] = istarget
307
- model = mkmodel "yay", :target => mtarget
308
- model.is = [:target, istarget]
306
+ files[:resources] = mtarget
307
+ resource = mkresource "yay", :target => mtarget
309
308
 
310
- assert(model.should(:target), "Did not get a value for target")
311
- assert(model.is(:target), "Did not get a value for target")
309
+ assert(resource.should(:target), "Did not get a value for target")
312
310
 
313
311
  list = nil
312
+
313
+ # First run it without the resource
314
314
  assert_nothing_raised do
315
315
  list = prov.targets
316
316
  end
317
317
 
318
+ # Make sure it got the first two, but not the resources file
319
+ files.each do |name, file|
320
+ if name == :resources
321
+ assert(! list.include?(file), "Provider somehow found resource target when no resource was passed")
322
+ else
323
+ assert(list.include?(file), "Provider did not find %s file" % name)
324
+ end
325
+ end
326
+
327
+ # Now list with the resource passed
328
+ assert_nothing_raised do
329
+ list = prov.targets("yay" => resource)
330
+ end
331
+
332
+ # And make sure we get all three files
318
333
  files.each do |name, file|
319
- assert(list.include?(file), "Provider did not find %s file" % name)
334
+ assert(list.include?(file), "Provider did not find %s file when resource was passed" % name)
320
335
  end
321
336
  end
322
337
 
@@ -328,22 +343,23 @@ class TestParsedFile < Test::Unit::TestCase
328
343
  prov.filetype = :ram
329
344
  prov.default_target = :yayness
330
345
 
331
- # Create some models.
332
- one = mkmodel "one", :one => "a", :two => "c", :target => :yayness
333
- two = mkmodel "two", :one => "b", :two => "d", :target => :yayness
346
+ # Create some resources.
347
+ one = mkresource "one", :one => "a", :two => "c", :target => :yayness
348
+ two = mkresource "two", :one => "b", :two => "d", :target => :yayness
349
+ resources = {"one" => one, "two" => two}
334
350
 
335
351
  # Write out a file with different data.
336
352
  prov.target_object(:yayness).write "one b d\ntwo a c"
337
353
 
338
- prov.prefetch
354
+ prov.prefetch(resources)
339
355
 
340
- # Apply and flush the first model.
356
+ # Apply and flush the first resource.
341
357
  assert_nothing_raised do
342
358
  apply(one)
343
359
  end
344
360
  assert_nothing_raised { one.flush }
345
361
 
346
- # Make sure it changed our file
362
+ # Make sure it didn't clear out our property hash
347
363
  assert_equal(:a, one.provider.one)
348
364
  assert_equal(:c, one.provider.two)
349
365
 
@@ -351,56 +367,58 @@ class TestParsedFile < Test::Unit::TestCase
351
367
  assert(prov.target_object(:yayness).read.include?("one a c"),
352
368
  "Did not write out correct data")
353
369
 
354
- # Make sure the second model has not been modified
370
+ # Make sure the second resource has not been modified
355
371
  assert_equal("a", two.provider.one, "Two was flushed early")
356
372
  assert_equal("c", two.provider.two, "Two was flushed early")
357
373
 
358
374
  # And on disk
359
375
  assert(prov.target_object(:yayness).read.include?("two a c"),
360
- "Wrote out other model")
376
+ "Wrote out other resource")
361
377
 
362
378
  # Now fetch the data again and make sure we're still right
363
- assert_nothing_raised { prov.prefetch }
379
+ assert_nothing_raised { prov.prefetch(resources) }
364
380
  assert_equal("a", one.provider.one)
365
381
  assert_equal("a", two.provider.one)
366
382
 
367
- # Now flush the second model and make sure it goes well
383
+ # Now flush the second resource and make sure it goes well
368
384
  assert_nothing_raised { apply(two) }
369
385
  assert_nothing_raised { two.flush }
370
386
 
387
+ # And make sure it didn't clear our hash
371
388
  assert_equal(:b, two.provider.one)
372
389
  end
373
390
 
391
+ # Make sure it works even if the file does not currently exist
374
392
  def test_creating_file
375
393
  prov = mkprovider
376
394
  prov.clear
377
395
 
378
396
  prov.default_target = :basic
379
397
 
380
- model = mkmodel "yay", :target => :basic, :one => "a", :two => "c"
398
+ resource = mkresource "yay", :target => :basic, :one => "a", :two => "c"
381
399
 
382
- assert_equal(:present, model.should(:ensure))
400
+ assert_equal(:present, resource.should(:ensure))
383
401
 
384
- apply(model)
402
+ apply(resource)
385
403
 
386
404
  assert_nothing_raised do
387
- model.flush
405
+ resource.flush
388
406
  end
389
407
 
390
- assert(prov.target_object(:basic).read.include?("yay a c"),
408
+ assert_equal("yay a c\n", prov.target_object(:basic).read,
391
409
  "Did not create file")
392
410
 
393
411
  # Make a change
394
- model.provider.one = "b"
412
+ resource.provider.one = "b"
395
413
 
396
414
  # Flush it
397
415
  assert_nothing_raised do
398
- model.flush
416
+ resource.flush
399
417
  end
400
418
 
401
- # And make sure our model doesn't appear twice in the file.
402
- assert_equal("yay b c\n",
403
- prov.target_object(:basic).read)
419
+ # And make sure our resource doesn't appear twice in the file.
420
+ assert_equal("yay b c\n", prov.target_object(:basic).read,
421
+ "Wrote record to file twice")
404
422
  end
405
423
 
406
424
  # Make sure a record can switch targets.
@@ -410,10 +428,10 @@ class TestParsedFile < Test::Unit::TestCase
410
428
  prov.filetype = :ram
411
429
  prov.default_target = :first
412
430
 
413
- # Make three models, one for each target and one to switch
414
- first = mkmodel "first", :target => :first
415
- second = mkmodel "second", :target => :second
416
- mover = mkmodel "mover", :target => :first
431
+ # Make three resources, one for each target and one to switch
432
+ first = mkresource "first", :target => :first
433
+ second = mkresource "second", :target => :second
434
+ mover = mkresource "mover", :target => :first
417
435
 
418
436
  [first, second, mover].each do |m|
419
437
  assert_nothing_raised("Could not apply %s" % m[:name]) do
@@ -467,12 +485,12 @@ class TestParsedFile < Test::Unit::TestCase
467
485
  prov.filetype = :ram
468
486
  prov.default_target = :first
469
487
 
470
- # Make two models, one that starts on disk and one that doesn't
471
- ondisk = mkmodel "ondisk", :target => :first
472
- notdisk = mkmodel "notdisk", :target => :first
488
+ # Make two resources, one that starts on disk and one that doesn't
489
+ ondisk = mkresource "ondisk", :target => :first
490
+ notdisk = mkresource "notdisk", :target => :first
473
491
 
474
492
  prov.target_object(:first).write "ondisk a c\n"
475
- prov.prefetch
493
+ prov.prefetch("ondisk" => ondisk, "notdisk" => notdisk)
476
494
 
477
495
  assert_equal(:present, notdisk.should(:ensure),
478
496
  "Did not get default ensure value")
@@ -496,7 +514,7 @@ class TestParsedFile < Test::Unit::TestCase
496
514
  assert(prov.target_object(:first).read =~ /^ondisk/,
497
515
  "Lost object on disk")
498
516
 
499
- # Make sure our on-disk model behaves appropriately.
517
+ # Make sure our on-disk resource behaves appropriately.
500
518
  assert_equal(:present, ondisk.provider.ensure)
501
519
 
502
520
  # Now destroy the object
@@ -544,7 +562,7 @@ class TestParsedFile < Test::Unit::TestCase
544
562
 
545
563
  prov.target_object(:yayness).write "bill a c\njill b d"
546
564
 
547
- list = @type.list
565
+ list = @type.instances
548
566
 
549
567
  bill = list.find { |r| r[:name] == "bill" }
550
568
  jill = list.find { |r| r[:name] == "jill" }
@@ -559,15 +577,23 @@ class TestParsedFile < Test::Unit::TestCase
559
577
 
560
578
  # First make sure we can retrieve values multiple times from the
561
579
  # provider
562
- assert(bill.is(:one), "Bill does not have a value for 'one'")
563
- assert(bill.is(:one), "Bill does not have a value for 'one' on second try")
580
+ bills_values = nil
581
+ assert_nothing_raised do
582
+ bills_values = bill.retrieve
583
+ end
584
+
585
+ assert(bills_values[bill.property(:one)],
586
+ "Bill does not have a value for 'one'")
587
+ assert(bills_values[bill.property(:one)],
588
+ "Bill does not have a value for 'one' on second try")
564
589
  assert_nothing_raised do
565
590
  bill.retrieve
566
591
  end
567
- assert(bill.is(:one), "bill's value for 'one' disappeared")
592
+ assert(bills_values[bill.property(:one)],
593
+ "bill's value for 'one' disappeared")
568
594
  end
569
595
 
570
- # Make sure that creating a new model finds existing records in memory
596
+ # Make sure that creating a new resource finds existing records in memory
571
597
  def test_initialize_finds_records
572
598
  prov = mkprovider
573
599
  prov.default_target = :yayness
@@ -576,7 +602,7 @@ class TestParsedFile < Test::Unit::TestCase
576
602
 
577
603
  prov.prefetch
578
604
 
579
- # Now make a model
605
+ # Now make a resource
580
606
  bill = nil
581
607
  assert_nothing_raised do
582
608
  bill = @type.create :name => "bill"
@@ -603,11 +629,12 @@ class TestParsedFile < Test::Unit::TestCase
603
629
  assert_apply(bill)
604
630
 
605
631
  prov.prefetch
632
+ current_value = nil
606
633
  assert_nothing_raised do
607
- bill.retrieve
634
+ current_value = bill.retrieve
608
635
  end
609
636
 
610
- assert(bill.insync?,
637
+ assert(bill.insync?(current_value),
611
638
  "An invalid field marked the record out of sync")
612
639
  end
613
640
 
@@ -630,7 +657,6 @@ class TestParsedFile < Test::Unit::TestCase
630
657
  targeted = {:target => "target"}
631
658
  prov.send(:instance_variable_set, "@records", records)
632
659
  prov.expects(:retrieve).with(target).returns([targeted])
633
- prov.expects(:target_records).with(target).returns([targeted])
634
660
 
635
661
  prov.expects(:prefetch_hook).with([targeted]).returns([targeted])
636
662
 
@@ -664,5 +690,5 @@ class TestParsedFile < Test::Unit::TestCase
664
690
  end
665
691
  end
666
692
 
667
- # $Id: parsedfile.rb 2290 2007-03-18 18:00:26Z luke $
693
+ # $Id: parsedfile.rb 2551 2007-06-04 20:37:14Z luke $
668
694
 
@@ -230,4 +230,4 @@ require 'puppettest'
230
230
  # end
231
231
  #end
232
232
 
233
- # $Id: parsedport.rb 2178 2007-02-07 23:56:59Z luke $
233
+ # $Id: parsed.rb 2501 2007-05-09 23:08:42Z luke $
@@ -28,6 +28,15 @@ class TestProvider < Test::Unit::TestCase
28
28
  return provider
29
29
  end
30
30
 
31
+ def setup
32
+ super
33
+ @type = Puppet::Type.newtype(:provider_test) do
34
+ newparam(:name) {}
35
+ ensurable
36
+ end
37
+ cleanup { Puppet::Type.rmtype(:provider_test) }
38
+ end
39
+
31
40
  def test_confine
32
41
  provider = newprovider
33
42
 
@@ -190,14 +199,14 @@ class TestProvider < Test::Unit::TestCase
190
199
  "Did not receive info wrapper on failure")
191
200
  end
192
201
 
193
- def test_mkmodelmethods
202
+ def test_mk_resource_methods
194
203
  prov = newprovider
195
- modeltype = Struct.new(:validproperties, :parameters)
196
- m = modeltype.new([:prop1, :prop2], [:param1, :param2])
197
- prov.model = m
204
+ resourcetype = Struct.new(:validproperties, :parameters)
205
+ m = resourcetype.new([:prop1, :prop2], [:param1, :param2])
206
+ prov.resource_type = m
198
207
 
199
- assert_nothing_raised("could not call mkmodelmethods") do
200
- prov.mkmodelmethods
208
+ assert_nothing_raised("could not call mk_resource_methods") do
209
+ prov.mk_resource_methods
201
210
  end
202
211
 
203
212
  obj = prov.new(nil)
@@ -243,6 +252,75 @@ class TestProvider < Test::Unit::TestCase
243
252
  optional.missing
244
253
  end
245
254
  end
255
+
256
+ # Disabling, since I might not keep this interface
257
+ def disabled_test_read_and_each
258
+ # Create a new provider
259
+ provider = @type.provide(:testing)
260
+
261
+ assert_raise(Puppet::DevError, "Did not fail when :read was not overridden") do
262
+ provider.read
263
+ end
264
+
265
+ children = [:one, :two]
266
+ provider.meta_def(:read) do
267
+ children
268
+ end
269
+
270
+ result = []
271
+ assert_nothing_raised("could not call 'each' on provider class") do
272
+ provider.each { |i| result << i }
273
+ end
274
+
275
+ assert_equal(children, result, "did not get correct list from each")
276
+
277
+ assert_equal(children, provider.collect { |i| i }, "provider does not include enumerable")
278
+ end
279
+
280
+ def test_source
281
+ base = @type.provide(:base)
282
+
283
+ assert_equal(:base, base.source, "source did not default correctly")
284
+ assert_equal(:base, base.source, "source did not default correctly")
285
+
286
+ sub = @type.provide(:sub, :parent => :base)
287
+
288
+ assert_equal(:sub, sub.source, "source did not default correctly for sub class")
289
+ assert_equal(:sub, sub.source, "source did not default correctly for sub class")
290
+
291
+ other = @type.provide(:other, :parent => :base, :source => :base)
292
+
293
+ assert_equal(:base, other.source, "source did not override")
294
+ assert_equal(:base, other.source, "source did not override")
295
+ end
296
+
297
+ # Make sure we can initialize with either a resource or a hash, or none at all.
298
+ def test_initialize
299
+ test = @type.provide(:test)
300
+
301
+ inst = @type.create :name => "boo"
302
+ prov = nil
303
+ assert_nothing_raised("Could not init with a resource") do
304
+ prov = test.new(inst)
305
+ end
306
+ assert_equal(prov.resource, inst, "did not set resource correctly")
307
+ assert_equal(inst.name, prov.name, "did not get resource name")
308
+
309
+ params = {:name => :one, :ensure => :present}
310
+ assert_nothing_raised("Could not init with a hash") do
311
+ prov = test.new(params)
312
+ end
313
+ assert_equal(params, prov.send(:instance_variable_get, "@property_hash"), "did not set resource correctly")
314
+ assert_equal(:one, prov.name, "did not get name from hash")
315
+
316
+ assert_nothing_raised("Could not init with no argument") do
317
+ prov = test.new()
318
+ end
319
+
320
+ assert_raise(Puppet::DevError, "did not fail when no name is present") do
321
+ prov.name
322
+ end
323
+ end
246
324
  end
247
325
 
248
326
  class TestProviderFeatures < Test::Unit::TestCase
@@ -282,7 +360,7 @@ class TestProviderFeatures < Test::Unit::TestCase
282
360
  end
283
361
  end
284
362
 
285
- model = @type.create(:name => "foo")
363
+ resource = @type.create(:name => "foo")
286
364
  {:numbers => [:numeric], :letters => [:alpha], :both => [:numeric, :alpha],
287
365
  :mixed => [], :neither => []}.each do |name, should|
288
366
  should.sort! { |a,b| a.to_s <=> b.to_s }
@@ -291,7 +369,7 @@ class TestProviderFeatures < Test::Unit::TestCase
291
369
  assert_equal(should, provider.features,
292
370
  "Provider %s has incorrect features" % name)
293
371
 
294
- inst = provider.new(model)
372
+ inst = provider.new(resource)
295
373
  # Make sure the boolean methods work on both the provider and
296
374
  # instance.
297
375
  @features.keys.each do |feature|
@@ -346,6 +424,8 @@ class TestProviderFeatures < Test::Unit::TestCase
346
424
 
347
425
  assert(provider.respond_to?(:has_features),
348
426
  "Provider did not get 'has_features' method added")
427
+ assert(provider.respond_to?(:has_feature),
428
+ "Provider did not get the 'has_feature' alias method")
349
429
 
350
430
  # One with the numeric methods and nothing else
351
431
  @type.provide(:numbers) do
@@ -358,17 +438,17 @@ class TestProviderFeatures < Test::Unit::TestCase
358
438
  define_method(:one) {}
359
439
  define_method(:two) {}
360
440
 
361
- has_features :alpha
441
+ has_feature :alpha
362
442
  end
363
443
 
364
444
  # And just the declaration
365
445
  @type.provide(:letters) do
366
- has_features :alpha
446
+ has_feature :alpha
367
447
  end
368
448
 
369
449
  # And a provider that declares it has our methodless feature.
370
450
  @type.provide(:none) do
371
- has_features :nomeths
451
+ has_feature :nomeths
372
452
  end
373
453
 
374
454
  should = {:nothing => [], :both => [:numeric, :alpha],
@@ -392,7 +472,7 @@ class TestProviderFeatures < Test::Unit::TestCase
392
472
 
393
473
  # and appropriate providers
394
474
  nope = @type.provide(:nope) {}
395
- maybe = @type.provide(:maybe) { has_features(:alpha) }
475
+ maybe = @type.provide(:maybe) { has_feature(:alpha) }
396
476
  yep = @type.provide(:yep) { has_features(:alpha, :numeric) }
397
477
 
398
478
  # Now make sure our providers answer correctly.
@@ -420,4 +500,4 @@ class TestProviderFeatures < Test::Unit::TestCase
420
500
  end
421
501
  end
422
502
 
423
- # $Id: provider.rb 2444 2007-05-01 03:14:09Z luke $
503
+ # $Id: provider.rb 2551 2007-06-04 20:37:14Z luke $