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
@@ -12,7 +12,8 @@ require 'puppettest/parsertesting'
12
12
  require 'puppettest/resourcetesting'
13
13
  require 'puppettest/railstesting'
14
14
 
15
- class TestRailsHost < Test::Unit::TestCase
15
+ class TestRailsHost < PuppetTest::TestCase
16
+ confine "Missing ActiveRecord" => Puppet.features.rails?
16
17
  include PuppetTest::ParserTesting
17
18
  include PuppetTest::ResourceTesting
18
19
  include PuppetTest::RailsTesting
@@ -33,8 +34,6 @@ class TestRailsHost < Test::Unit::TestCase
33
34
  }
34
35
  end
35
36
 
36
- # Don't do any tests w/out this class
37
- if Puppet.features.rails?
38
37
  def test_store
39
38
  @interp, @scope, @source = mkclassframing
40
39
  # First make some objects
@@ -77,7 +76,7 @@ class TestRailsHost < Test::Unit::TestCase
77
76
  assert(host.resources, "No objects on host")
78
77
 
79
78
  facts.each do |fact, value|
80
- assert_equal(value, host.fact(fact), "fact %s is wrong" % fact)
79
+ assert_equal(value, host.fact(fact)[0].value, "fact %s is wrong" % fact)
81
80
  end
82
81
  assert_equal(facts["ipaddress"], host.ip, "IP did not get set")
83
82
 
@@ -122,7 +121,8 @@ class TestRailsHost < Test::Unit::TestCase
122
121
  # And change some facts
123
122
  facts["test2"] = "yaytest"
124
123
  facts["test3"] = "funtest"
125
- facts.delete("test1")
124
+ facts["test1"] = "changedfact"
125
+ facts.delete("ipaddress")
126
126
  host = nil
127
127
  assert_nothing_raised {
128
128
  host = Puppet::Rails::Host.store(
@@ -138,9 +138,9 @@ class TestRailsHost < Test::Unit::TestCase
138
138
  assert_instance_of(Time, host.last_compile, "did not set last_compile")
139
139
  end
140
140
 
141
- assert_nil(host.fact('test1'), "removed fact was not deleted")
141
+ assert_equal(0, host.fact('ipaddress').size, "removed fact was not deleted")
142
142
  facts.each do |fact, value|
143
- assert_equal(value, host.fact(fact), "fact %s is wrong" % fact)
143
+ assert_equal(value, host.fact(fact)[0].value, "fact %s is wrong" % fact)
144
144
  end
145
145
 
146
146
  # And check the changes we made.
@@ -151,27 +151,52 @@ class TestRailsHost < Test::Unit::TestCase
151
151
  assert(res, "New resource was not added")
152
152
  assert_equal("user_added", res.parameter("owner"), "user info was not stored")
153
153
 
154
- # This actually works in real life, but I can't get it to work in testing.
155
- # I expect it's a caching problem.
156
- count = 0
157
- host.resources.find(:all).find_all { |r| r.title =~ /file2/ }.each do |r|
158
- r.save
159
- puts "%s => %s" % [r.ref, r.parameters.inspect]
154
+ host.resources.find(:all, :conditions => [ "title like ?", "%file2%"]).each do |r|
160
155
  assert_equal("notice", r.parameter("loglevel"),
161
156
  "loglevel was not added")
162
- case r.restype
163
- when "file":
164
- assert_equal("fake", r.parameter("owner"), "owner was not modified")
165
- when "exec":
166
- assert_equal("fake", r.parameter("user"), "user was not modified")
167
- else
168
- raise "invalid resource type %s" % r.restype
169
- end
170
157
  end
171
158
  end
172
- else
173
- $stderr.puts "Install Rails for Rails and Caching tests"
159
+
160
+ def test_freshness_connect_update
161
+ Puppet::Rails.init
162
+ Puppet[:storeconfigs] = true
163
+
164
+ # this is the default server setup
165
+ master = Puppet::Network::Handler.master.new(
166
+ :Code => "",
167
+ :UseNodes => true,
168
+ :Local => true
169
+ )
170
+
171
+ # Create a host
172
+ Puppet::Rails::Host.new(:name => "test", :ip => "192.168.0.3").save
173
+
174
+ assert_nothing_raised("Failed to update last_connect for unknown host") do
175
+ master.freshness("created",'192.168.0.1')
176
+ end
177
+
178
+ # Make sure it created the host
179
+ created = Puppet::Rails::Host.find_by_name("created")
180
+ assert(created, "Freshness did not create host")
181
+ assert(created.last_freshcheck,
182
+ "Did not set last_freshcheck on created host")
183
+ assert_equal("192.168.0.1", created.ip,
184
+ "Did not set IP address on created host")
185
+
186
+ # Now check on the existing host
187
+ assert_nothing_raised("Failed to update last_connect for unknown host") do
188
+ master.freshness("test",'192.168.0.2')
189
+ end
190
+
191
+ # Recreate it, so we're not using the cached object.
192
+ host = Puppet::Rails::Host.find_by_name("test")
193
+
194
+ # Make sure it created the host
195
+ assert(host.last_freshcheck,
196
+ "Did not set last_freshcheck on existing host")
197
+ assert_equal("192.168.0.3", host.ip,
198
+ "Overrode IP on found host")
174
199
  end
175
200
  end
176
201
 
177
- # $Id: host.rb 2296 2007-03-18 22:48:57Z luke $
202
+ # $Id: host.rb 2616 2007-06-18 21:03:18Z luke $
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ require 'puppet/parser/interpreter'
7
+ require 'puppet/parser/parser'
8
+ require 'puppet/network/client'
9
+ require 'puppet/rails'
10
+ require 'puppettest/resourcetesting'
11
+ require 'puppettest/parsertesting'
12
+ require 'puppettest/servertest'
13
+ require 'puppettest/railstesting'
14
+
15
+
16
+ class InterpreterRailsTests < PuppetTest::TestCase
17
+ include PuppetTest
18
+ include PuppetTest::ServerTest
19
+ include PuppetTest::ParserTesting
20
+ include PuppetTest::ResourceTesting
21
+ include PuppetTest::RailsTesting
22
+ AST = Puppet::Parser::AST
23
+ NodeDef = Puppet::Parser::Interpreter::NodeDef
24
+ confine "No rails support" => Puppet.features.rails?
25
+
26
+ # We need to make sure finished objects are stored in the db.
27
+ def test_finish_before_store
28
+ railsinit
29
+ interp = mkinterp
30
+
31
+ node = interp.newnode ["myhost"], :code => AST::ASTArray.new(:children => [
32
+ resourcedef("file", "/tmp/yay", :group => "root"),
33
+ defaultobj("file", :owner => "root")
34
+ ])
35
+
36
+ interp.newclass "myclass", :code => AST::ASTArray.new(:children => [
37
+ ])
38
+
39
+ interp.newclass "sub", :parent => "myclass",
40
+ :code => AST::ASTArray.new(:children => [
41
+ resourceoverride("file", "/tmp/yay", :owner => "root")
42
+ ]
43
+ )
44
+
45
+ # Now do the rails crap
46
+ Puppet[:storeconfigs] = true
47
+
48
+ interp.evaluate("myhost", {})
49
+
50
+ # And then retrieve the object from rails
51
+ #res = Puppet::Rails::Resource.find_by_restype_and_title("file", "/tmp/yay", :include => {:param_values => :param_names})
52
+ res = Puppet::Rails::Resource.find_by_restype_and_title("file", "/tmp/yay")
53
+
54
+ assert(res, "Did not get resource from rails")
55
+
56
+ params = res.parameters
57
+
58
+ assert_equal(["root"], params["owner"], "Did not get correct value for owner param")
59
+ end
60
+
61
+ def test_hoststorage
62
+ assert_nothing_raised {
63
+ Puppet[:storeconfigs] = true
64
+ }
65
+
66
+ file = tempfile()
67
+ File.open(file, "w") { |f|
68
+ f.puts "file { \"/etc\": owner => root }"
69
+ }
70
+
71
+ interp = nil
72
+ assert_nothing_raised {
73
+ interp = Puppet::Parser::Interpreter.new(
74
+ :Manifest => file,
75
+ :UseNodes => false,
76
+ :ForkSave => false
77
+ )
78
+ }
79
+
80
+ facts = {}
81
+ Facter.each { |fact, val| facts[fact] = val }
82
+
83
+ objects = nil
84
+ assert_nothing_raised {
85
+ objects = interp.run(facts["hostname"], facts)
86
+ }
87
+
88
+ obj = Puppet::Rails::Host.find_by_name(facts["hostname"])
89
+ assert(obj, "Could not find host object")
90
+ end
91
+ end
@@ -12,6 +12,10 @@ if defined? ActiveRecord::Base
12
12
  class TestRailsParameter < Test::Unit::TestCase
13
13
  include PuppetTest::RailsTesting
14
14
 
15
+ def params
16
+ {"myname" => "myval", "multiple" => %w{one two three}}
17
+ end
18
+
15
19
  # Create a resource param from a rails parameter
16
20
  def test_to_resourceparam
17
21
  railsinit
@@ -19,34 +23,41 @@ class TestRailsParameter < Test::Unit::TestCase
19
23
  # Now create a source
20
24
  interp = mkinterp
21
25
  source = interp.newclass "myclass"
26
+
27
+ host = Puppet::Rails::Host.new(:name => "myhost")
22
28
 
23
- #FIXME Need to re-add file/line support
29
+ resource = host.resources.create(
30
+ :title => "/tmp/to_resource",
31
+ :restype => "file",
32
+ :exported => true)
24
33
 
25
34
  # Use array and non-array values, to make sure we get things back in
26
35
  # the same form.
27
- {"myname" => "myval", "multiple" => %w{one two three}}.each do |name, value|
28
- param = Puppet::Rails::ParamName.new(:name => name)
36
+ params.each do |name, value|
37
+ param = Puppet::Rails::ParamName.find_or_create_by_name(name)
29
38
  if value.is_a? Array
30
39
  values = value
31
40
  else
32
41
  values = [value]
33
42
  end
34
43
  valueobjects = values.collect do |v|
35
- obj = Puppet::Rails::ParamValue.new(:value => v)
36
- assert_nothing_raised do
37
- param.param_values << obj
38
- end
44
+ resource.param_values.create(:value => v,
45
+ :param_name => param)
39
46
  end
40
47
 
41
48
  assert(param, "Did not create rails parameter")
42
49
 
43
50
  # The id doesn't get assigned until we save
44
- param.save
51
+ end
52
+
53
+ resource.save
45
54
 
46
- # And try to convert our parameter
55
+ # And try to convert our parameter
56
+ params.each do |name, value|
57
+ param = Puppet::Rails::ParamName.find_by_name(name)
47
58
  pp = nil
48
59
  assert_nothing_raised do
49
- pp = param.to_resourceparam(source)
60
+ pp = param.to_resourceparam(resource, source)
50
61
  end
51
62
 
52
63
  assert_instance_of(Puppet::Parser::Resource::Param, pp)
@@ -59,4 +70,4 @@ else
59
70
  $stderr.puts "Install Rails for Rails and Caching tests"
60
71
  end
61
72
 
62
- # $Id: railsparameter.rb 2206 2007-02-17 01:52:59Z shadoi $
73
+ # $Id: railsparameter.rb 2565 2007-06-12 00:31:16Z ballman $
@@ -36,9 +36,9 @@ class TestRailsResource < Test::Unit::TestCase
36
36
 
37
37
  # Now add some params
38
38
  params.each do |param, value|
39
- pn = resource.param_names.find_or_create_by_name(param)
40
- pv = pn.param_values.find_or_create_by_value(value)
41
- resource.param_names << pn
39
+ pn = Puppet::Rails::ParamName.find_or_create_by_name(param)
40
+ pv = resource.param_values.create(:value => value,
41
+ :param_name => pn)
42
42
  end
43
43
 
44
44
  host.save
@@ -58,7 +58,7 @@ class TestRailsResource < Test::Unit::TestCase
58
58
  interp, scope, source = mkclassframing
59
59
 
60
60
  # Find the new resource and include all it's parameters.
61
- resource = Puppet::Rails::Resource.find_by_id(resource.id, :include => [ :param_names, :param_values ])
61
+ resource = Puppet::Rails::Resource.find_by_id(resource.id)
62
62
 
63
63
  # Now, try to convert our resource to a real resource
64
64
  res = nil
@@ -74,10 +74,12 @@ class TestRailsResource < Test::Unit::TestCase
74
74
 
75
75
  def test_parameters
76
76
  resource = mktest_resource
77
-
78
77
  setparams = nil
79
78
  assert_nothing_raised do
80
- setparams = resource.parameters
79
+ setparams = resource.parameters.inject({}) { |h, a|
80
+ h[a[0]] = a[1][0]
81
+ h
82
+ }
81
83
  end
82
84
  assert_equal(params, setparams,
83
85
  "Did not get the right answer from #parameters")
@@ -96,5 +98,136 @@ else
96
98
  $stderr.puts "Install Rails for Rails and Caching tests"
97
99
  end
98
100
 
99
- # $Id: railsresource.rb 2206 2007-02-17 01:52:59Z shadoi $
101
+ # A separate class for testing rails integration
102
+ class TestExportedResources < PuppetTest::TestCase
103
+ include PuppetTest
104
+ include PuppetTest::ParserTesting
105
+ include PuppetTest::ResourceTesting
106
+ include PuppetTest::RailsTesting
107
+ Parser = Puppet::Parser
108
+ AST = Parser::AST
109
+ Reference = Puppet::Parser::Resource::Reference
110
+
111
+ def setup
112
+ super
113
+ Puppet[:trace] = false
114
+ @interp, @scope, @source = mkclassframing
115
+ end
116
+
117
+ confine "Missing rails support" => Puppet.features.rails?
118
+
119
+ # Compare a parser resource to a rails resource.
120
+ def compare_resources(host, res, updating, options = {})
121
+ newobj = nil
122
+
123
+ # If the resource is in the db, then use modify_rails, else use to_rails
124
+ if newobj = Puppet::Rails::Resource.find_by_restype_and_title(res.type, res.title)
125
+ assert_nothing_raised("Call to modify_rails failed") do
126
+ res.modify_rails(newobj)
127
+ end
128
+ else
129
+ assert_nothing_raised("Call to to_rails failed") do
130
+ newobj = res.to_rails(host)
131
+ end
132
+ end
133
+
134
+ assert_instance_of(Puppet::Rails::Resource, newobj)
135
+ newobj.save
136
+
137
+ if updating
138
+ tail = "on update"
139
+ else
140
+ tail = ""
141
+ end
142
+
143
+ # Make sure we find our object and only our object
144
+ count = 0
145
+ obj = nil
146
+ Puppet::Rails::Resource.find(:all).each do |obj|
147
+ assert_equal(newobj.id, obj.id, "A new resource was created instead of modifying an existing resource")
148
+ count += 1
149
+ [:title, :restype, :line, :exported].each do |param|
150
+ if param == :restype
151
+ method = :type
152
+ else
153
+ method = param
154
+ end
155
+ assert_equal(res.send(method), obj[param],
156
+ "attribute %s was not set correctly in rails %s" % [param, tail])
157
+ end
158
+ end
159
+ assert_equal(1, count, "Got too many resources %s" % tail)
160
+ # Now make sure we can find it again
161
+ assert_nothing_raised do
162
+ obj = Puppet::Rails::Resource.find_by_restype_and_title(
163
+ res.type, res.title, :include => :param_names
164
+ )
165
+ end
166
+ assert_instance_of(Puppet::Rails::Resource, obj)
167
+
168
+ # Make sure we get the parameters back
169
+ params = options[:params] || [obj.param_names.collect { |p| p.name },
170
+ res.to_hash.keys].flatten.collect { |n| n.to_s }.uniq
171
+
172
+ params.each do |name|
173
+ param = obj.param_names.find_by_name(name)
174
+ if res[name]
175
+ assert(param, "resource did not keep %s %s" % [name, tail])
176
+ else
177
+ assert(! param, "resource did not delete %s %s" % [name, tail])
178
+ end
179
+ if param
180
+ values = param.param_values.collect { |pv| pv.value }
181
+ should = res[param.name]
182
+ should = [should] unless should.is_a?(Array)
183
+ assert_equal(should, values,
184
+ "%s was different %s" % [param.name, tail])
185
+ end
186
+ end
187
+ end
188
+
189
+ def test_to_rails
190
+ railsteardown
191
+ railsinit
192
+ ref1 = Reference.new :type => "exec", :title => "one"
193
+ ref2 = Reference.new :type => "exec", :title => "two"
194
+ res = mkresource :type => "file", :title => "/tmp/testing",
195
+ :source => @source, :scope => @scope,
196
+ :params => {:owner => "root", :source => ["/tmp/A", "/tmp/B"],
197
+ :mode => "755", :require => [ref1, ref2]}
198
+
199
+ res.line = 50
200
+
201
+ # We also need a Rails Host to store under
202
+ host = Puppet::Rails::Host.new(:name => Facter.hostname)
203
+
204
+ compare_resources(host, res, false, :params => %w{owner source mode})
205
+
206
+ # Now make sure our parameters did not change
207
+ assert_instance_of(Array, res[:require], "Parameter array changed")
208
+ res[:require].each do |ref|
209
+ assert_instance_of(Reference, ref, "Resource reference changed")
210
+ end
211
+
212
+ # Now make some changes to our resource. We're removing the mode,
213
+ # changing the source, and adding 'check'.
214
+ res = mkresource :type => "file", :title => "/tmp/testing",
215
+ :source => @source, :scope => @scope,
216
+ :params => {:owner => "bin", :source => ["/tmp/A", "/tmp/C"],
217
+ :check => "checksum", :require => [ref1, ref2]}
218
+
219
+ res.line = 75
220
+ res.exported = true
221
+
222
+ compare_resources(host, res, true, :params => %w{owner source mode check})
223
+
224
+ # Again make sure our parameters did not change
225
+ assert_instance_of(Array, res[:require], "Parameter array changed")
226
+ res[:require].each do |ref|
227
+ assert_instance_of(Reference, ref, "Resource reference changed")
228
+ end
229
+ end
230
+ end
231
+
232
+ # $Id: railsresource.rb 2597 2007-06-17 21:41:50Z luke $
100
233