puppet 3.3.2 → 3.4.0.rc1

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 (589) hide show
  1. data/CONTRIBUTING.md +22 -0
  2. data/Gemfile +11 -2
  3. data/README.md +13 -17
  4. data/README_DEVELOPER.md +1 -1
  5. data/Rakefile +1 -1
  6. data/examples/hiera/README.md +4 -4
  7. data/ext/debian/puppetmaster.init +1 -0
  8. data/ext/debian/rules +2 -5
  9. data/ext/nagios/check_puppet.rb +7 -7
  10. data/ext/osx/file_mapping.yaml +1 -1
  11. data/ext/osx/preflight.erb +34 -19
  12. data/ext/rack/{files/config.ru → config.ru} +0 -0
  13. data/ext/rack/{files/apache2.conf → example-passenger-vhost.conf} +6 -0
  14. data/ext/redhat/puppet.spec.erb +20 -2
  15. data/ext/systemd/{puppetagent.service → puppet.service} +0 -0
  16. data/lib/hiera_puppet.rb +2 -2
  17. data/lib/puppet/agent.rb +1 -6
  18. data/lib/puppet/application.rb +15 -2
  19. data/lib/puppet/application/agent.rb +2 -7
  20. data/lib/puppet/application/apply.rb +8 -13
  21. data/lib/puppet/application/cert.rb +47 -7
  22. data/lib/puppet/application/device.rb +1 -6
  23. data/lib/puppet/application/face_base.rb +1 -1
  24. data/lib/puppet/application/filebucket.rb +1 -1
  25. data/lib/puppet/application/inspect.rb +3 -12
  26. data/lib/puppet/application/master.rb +1 -6
  27. data/lib/puppet/application/queue.rb +1 -6
  28. data/lib/puppet/application/resource.rb +2 -6
  29. data/lib/puppet/coercion.rb +11 -0
  30. data/lib/puppet/configurer.rb +5 -3
  31. data/lib/puppet/configurer/downloader.rb +3 -1
  32. data/lib/puppet/configurer/plugin_handler.rb +10 -0
  33. data/lib/puppet/confine.rb +80 -0
  34. data/lib/puppet/{provider/confine → confine}/exists.rb +3 -3
  35. data/lib/puppet/{provider/confine → confine}/false.rb +2 -2
  36. data/lib/puppet/{provider/confine → confine}/feature.rb +2 -2
  37. data/lib/puppet/{provider/confine → confine}/true.rb +2 -2
  38. data/lib/puppet/{provider/confine → confine}/variable.rb +2 -2
  39. data/lib/puppet/{provider/confine_collection.rb → confine_collection.rb} +4 -4
  40. data/lib/puppet/{provider/confiner.rb → confiner.rb} +4 -4
  41. data/lib/puppet/daemon.rb +2 -6
  42. data/lib/puppet/data_binding.rb +2 -30
  43. data/lib/puppet/defaults.rb +283 -174
  44. data/lib/puppet/error.rb +1 -0
  45. data/lib/puppet/external/nagios.rb +0 -2
  46. data/lib/puppet/external/nagios/base.rb +4 -3
  47. data/lib/puppet/external/nagios/grammar.ry +173 -112
  48. data/lib/puppet/external/nagios/parser.rb +233 -184
  49. data/lib/puppet/face/file/store.rb +1 -1
  50. data/lib/puppet/face/module/generate.rb +5 -7
  51. data/lib/puppet/face/parser.rb +12 -2
  52. data/lib/puppet/face/plugin.rb +6 -0
  53. data/lib/puppet/feature/base.rb +16 -0
  54. data/lib/puppet/feature/external_facts.rb +5 -0
  55. data/lib/puppet/feature/libuser.rb +1 -1
  56. data/lib/puppet/feature/msgpack.rb +1 -0
  57. data/lib/puppet/feature/rails.rb +2 -2
  58. data/lib/puppet/file_bucket/dipper.rb +8 -6
  59. data/lib/puppet/file_bucket/file.rb +17 -1
  60. data/lib/puppet/file_serving/base.rb +21 -10
  61. data/lib/puppet/file_serving/configuration.rb +5 -7
  62. data/lib/puppet/file_serving/configuration/parser.rb +1 -1
  63. data/lib/puppet/file_serving/content.rb +1 -1
  64. data/lib/puppet/file_serving/fileset.rb +3 -3
  65. data/lib/puppet/file_serving/metadata.rb +22 -18
  66. data/lib/puppet/file_serving/mount/file.rb +1 -1
  67. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  68. data/lib/puppet/file_system.rb +3 -0
  69. data/lib/puppet/file_system/file.rb +261 -0
  70. data/lib/puppet/file_system/file18.rb +5 -0
  71. data/lib/puppet/file_system/file19.rb +5 -0
  72. data/lib/puppet/file_system/file19windows.rb +113 -0
  73. data/lib/puppet/file_system/memory_file.rb +31 -0
  74. data/lib/puppet/file_system/tempfile.rb +20 -0
  75. data/lib/puppet/indirector/active_record.rb +1 -0
  76. data/lib/puppet/indirector/catalog/compiler.rb +28 -0
  77. data/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  78. data/lib/puppet/indirector/data_binding/hiera.rb +46 -2
  79. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  80. data/lib/puppet/indirector/facts/facter.rb +25 -0
  81. data/lib/puppet/indirector/file_bucket_file/file.rb +60 -74
  82. data/lib/puppet/indirector/indirection.rb +5 -1
  83. data/lib/puppet/indirector/json.rb +1 -1
  84. data/lib/puppet/indirector/key/ca.rb +4 -0
  85. data/lib/puppet/indirector/key/file.rb +7 -3
  86. data/lib/puppet/indirector/key/memory.rb +6 -0
  87. data/lib/puppet/indirector/node/write_only_yaml.rb +2 -2
  88. data/lib/puppet/indirector/request.rb +17 -11
  89. data/lib/puppet/indirector/resource/ral.rb +5 -0
  90. data/lib/puppet/indirector/resource/rest.rb +1 -0
  91. data/lib/puppet/indirector/resource/store_configs.rb +4 -0
  92. data/lib/puppet/indirector/rest.rb +2 -1
  93. data/lib/puppet/indirector/ssl_file.rb +7 -7
  94. data/lib/puppet/indirector/terminus.rb +4 -0
  95. data/lib/puppet/indirector/yaml.rb +3 -3
  96. data/lib/puppet/interface/documentation.rb +4 -11
  97. data/lib/puppet/module.rb +19 -6
  98. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  99. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  100. data/lib/puppet/module_tool/checksums.rb +1 -1
  101. data/lib/puppet/module_tool/dependency.rb +7 -3
  102. data/lib/puppet/module_tool/metadata.rb +6 -2
  103. data/lib/puppet/module_tool/tar.rb +2 -1
  104. data/lib/puppet/module_tool/tar/gnu.rb +6 -2
  105. data/lib/puppet/module_tool/tar/mini.rb +2 -0
  106. data/lib/puppet/module_tool/tar/solaris.rb +2 -5
  107. data/lib/puppet/network/authconfig.rb +0 -2
  108. data/lib/puppet/network/authentication.rb +1 -1
  109. data/lib/puppet/network/authstore.rb +6 -7
  110. data/lib/puppet/network/format.rb +2 -3
  111. data/lib/puppet/network/format_handler.rb +16 -11
  112. data/lib/puppet/network/format_support.rb +14 -0
  113. data/lib/puppet/network/formats.rb +26 -0
  114. data/lib/puppet/network/http/connection.rb +8 -41
  115. data/lib/puppet/network/http/handler.rb +28 -32
  116. data/lib/puppet/network/http/webrick.rb +15 -22
  117. data/lib/puppet/network/http_pool.rb +43 -9
  118. data/lib/puppet/network/rights.rb +0 -0
  119. data/lib/puppet/node.rb +24 -8
  120. data/lib/puppet/node/environment.rb +18 -20
  121. data/lib/puppet/node/facts.rb +23 -6
  122. data/lib/puppet/parameter.rb +15 -2
  123. data/lib/puppet/parameter/boolean.rb +5 -0
  124. data/lib/puppet/parameter/value_collection.rb +6 -4
  125. data/lib/puppet/parser/ast/resourceparam.rb +2 -1
  126. data/lib/puppet/parser/compiler.rb +25 -9
  127. data/lib/puppet/parser/files.rb +1 -1
  128. data/lib/puppet/parser/functions.rb +12 -21
  129. data/lib/puppet/parser/functions/collect.rb +6 -35
  130. data/lib/puppet/parser/functions/contain.rb +26 -0
  131. data/lib/puppet/parser/functions/create_resources.rb +5 -0
  132. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  133. data/lib/puppet/parser/functions/file.rb +1 -1
  134. data/lib/puppet/parser/functions/{reject.rb → filter.rb} +13 -12
  135. data/lib/puppet/parser/functions/fqdn_rand.rb +13 -5
  136. data/lib/puppet/parser/functions/include.rb +18 -1
  137. data/lib/puppet/parser/functions/map.rb +44 -0
  138. data/lib/puppet/parser/functions/select.rb +6 -38
  139. data/lib/puppet/parser/lexer.rb +1 -1
  140. data/lib/puppet/parser/parser_support.rb +1 -1
  141. data/lib/puppet/parser/resource.rb +6 -45
  142. data/lib/puppet/parser/scope.rb +33 -2
  143. data/lib/puppet/parser/type_loader.rb +4 -60
  144. data/lib/puppet/pops/binder/bindings_loader.rb +1 -1
  145. data/lib/puppet/pops/binder/config/binder_config.rb +3 -3
  146. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +1 -1
  148. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +2 -2
  149. data/lib/puppet/pops/issues.rb +4 -0
  150. data/lib/puppet/pops/model/ast_transformer.rb +4 -1
  151. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  152. data/lib/puppet/pops/parser/egrammar.ra +5 -24
  153. data/lib/puppet/pops/parser/eparser.rb +859 -902
  154. data/lib/puppet/pops/parser/lexer.rb +48 -30
  155. data/lib/puppet/pops/parser/parser_support.rb +1 -1
  156. data/lib/puppet/pops/patterns.rb +4 -4
  157. data/lib/puppet/pops/utils.rb +1 -1
  158. data/lib/puppet/pops/validation/checker3_1.rb +25 -20
  159. data/lib/puppet/provider.rb +23 -6
  160. data/lib/puppet/provider/aixobject.rb +0 -0
  161. data/lib/puppet/provider/augeas/augeas.rb +21 -5
  162. data/lib/puppet/provider/confine.rb +5 -79
  163. data/lib/puppet/provider/cron/crontab.rb +0 -0
  164. data/lib/puppet/provider/exec.rb +9 -7
  165. data/lib/puppet/provider/exec/posix.rb +10 -1
  166. data/lib/puppet/provider/exec/windows.rb +1 -1
  167. data/lib/puppet/provider/file/posix.rb +1 -0
  168. data/lib/puppet/provider/file/windows.rb +16 -5
  169. data/lib/puppet/provider/group/aix.rb +0 -0
  170. data/lib/puppet/provider/group/windows_adsi.rb +33 -1
  171. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  172. data/lib/puppet/provider/mailalias/aliases.rb +0 -0
  173. data/lib/puppet/provider/maillist/mailman.rb +0 -0
  174. data/lib/puppet/provider/mount/parsed.rb +0 -0
  175. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  176. data/lib/puppet/provider/package/appdmg.rb +1 -1
  177. data/lib/puppet/provider/package/apple.rb +1 -1
  178. data/lib/puppet/provider/package/apt.rb +1 -1
  179. data/lib/puppet/provider/package/aptitude.rb +0 -0
  180. data/lib/puppet/provider/package/blastwave.rb +1 -1
  181. data/lib/puppet/provider/package/dpkg.rb +1 -1
  182. data/lib/puppet/provider/package/fink.rb +1 -1
  183. data/lib/puppet/provider/package/freebsd.rb +0 -0
  184. data/lib/puppet/provider/package/gem.rb +0 -0
  185. data/lib/puppet/provider/package/macports.rb +0 -0
  186. data/lib/puppet/provider/package/msi.rb +4 -10
  187. data/lib/puppet/provider/package/nim.rb +8 -8
  188. data/lib/puppet/provider/package/openbsd.rb +1 -1
  189. data/lib/puppet/provider/package/opkg.rb +0 -0
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  192. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  193. data/lib/puppet/provider/package/ports.rb +0 -0
  194. data/lib/puppet/provider/package/rpm.rb +39 -3
  195. data/lib/puppet/provider/package/sun.rb +3 -3
  196. data/lib/puppet/provider/package/sunfreeware.rb +0 -0
  197. data/lib/puppet/provider/package/windows.rb +12 -19
  198. data/lib/puppet/provider/package/windows/package.rb +1 -1
  199. data/lib/puppet/provider/package/yum.rb +2 -2
  200. data/lib/puppet/provider/parsedfile.rb +0 -0
  201. data/lib/puppet/provider/port/parsed.rb +0 -0
  202. data/lib/puppet/provider/service/base.rb +0 -0
  203. data/lib/puppet/provider/service/bsd.rb +3 -3
  204. data/lib/puppet/provider/service/daemontools.rb +8 -8
  205. data/lib/puppet/provider/service/debian.rb +0 -0
  206. data/lib/puppet/provider/service/freebsd.rb +3 -3
  207. data/lib/puppet/provider/service/init.rb +5 -4
  208. data/lib/puppet/provider/service/launchd.rb +35 -24
  209. data/lib/puppet/provider/service/openbsd.rb +23 -0
  210. data/lib/puppet/provider/service/redhat.rb +0 -0
  211. data/lib/puppet/provider/service/runit.rb +3 -3
  212. data/lib/puppet/provider/service/smf.rb +0 -0
  213. data/lib/puppet/provider/service/src.rb +0 -0
  214. data/lib/puppet/provider/service/systemd.rb +0 -0
  215. data/lib/puppet/provider/service/upstart.rb +3 -3
  216. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  217. data/lib/puppet/provider/sshkey/parsed.rb +0 -0
  218. data/lib/puppet/provider/user/aix.rb +0 -0
  219. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  220. data/lib/puppet/provider/user/useradd.rb +1 -1
  221. data/lib/puppet/provider/zone/solaris.rb +1 -1
  222. data/lib/puppet/rails/benchmark.rb +1 -1
  223. data/lib/puppet/reference/configuration.rb +1 -2
  224. data/lib/puppet/reference/indirection.rb +12 -14
  225. data/lib/puppet/relationship.rb +7 -4
  226. data/lib/puppet/reports.rb +2 -2
  227. data/lib/puppet/reports/rrdgraph.rb +1 -1
  228. data/lib/puppet/reports/store.rb +3 -3
  229. data/lib/puppet/reports/tagmail.rb +2 -2
  230. data/lib/puppet/resource.rb +66 -8
  231. data/lib/puppet/resource/catalog.rb +18 -25
  232. data/lib/puppet/resource/status.rb +10 -4
  233. data/lib/puppet/run.rb +6 -2
  234. data/lib/puppet/settings.rb +39 -119
  235. data/lib/puppet/settings/base_setting.rb +8 -9
  236. data/lib/puppet/settings/directory_setting.rb +8 -0
  237. data/lib/puppet/settings/file_setting.rb +35 -1
  238. data/lib/puppet/settings/priority_setting.rb +42 -0
  239. data/lib/puppet/ssl.rb +4 -0
  240. data/lib/puppet/ssl/certificate.rb +18 -0
  241. data/lib/puppet/ssl/certificate_authority.rb +101 -72
  242. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +44 -0
  243. data/lib/puppet/ssl/certificate_authority/interface.rb +21 -17
  244. data/lib/puppet/ssl/certificate_factory.rb +38 -12
  245. data/lib/puppet/ssl/certificate_request.rb +201 -47
  246. data/lib/puppet/ssl/certificate_request_attributes.rb +34 -0
  247. data/lib/puppet/ssl/certificate_revocation_list.rb +2 -2
  248. data/lib/puppet/ssl/host.rb +21 -10
  249. data/lib/puppet/ssl/inventory.rb +6 -10
  250. data/lib/puppet/ssl/key.rb +1 -1
  251. data/lib/puppet/ssl/oids.rb +78 -0
  252. data/lib/puppet/ssl/validator.rb +41 -97
  253. data/lib/puppet/ssl/validator/default_validator.rb +153 -0
  254. data/lib/puppet/ssl/validator/no_validator.rb +17 -0
  255. data/lib/puppet/status.rb +4 -0
  256. data/lib/puppet/test/test_helper.rb +5 -0
  257. data/lib/puppet/transaction.rb +13 -0
  258. data/lib/puppet/transaction/event.rb +8 -3
  259. data/lib/puppet/transaction/report.rb +6 -2
  260. data/lib/puppet/transaction/resource_harness.rb +173 -115
  261. data/lib/puppet/type.rb +30 -13
  262. data/lib/puppet/type/augeas.rb +12 -46
  263. data/lib/puppet/type/component.rb +1 -7
  264. data/lib/puppet/type/cron.rb +0 -0
  265. data/lib/puppet/type/exec.rb +13 -1
  266. data/lib/puppet/type/file.rb +19 -10
  267. data/lib/puppet/type/file/checksum.rb +0 -0
  268. data/lib/puppet/type/file/content.rb +3 -0
  269. data/lib/puppet/type/file/ensure.rb +33 -15
  270. data/lib/puppet/type/file/group.rb +0 -0
  271. data/lib/puppet/type/file/mode.rb +6 -2
  272. data/lib/puppet/type/file/owner.rb +0 -0
  273. data/lib/puppet/type/file/source.rb +65 -14
  274. data/lib/puppet/type/file/target.rb +6 -6
  275. data/lib/puppet/type/file/type.rb +0 -0
  276. data/lib/puppet/type/filebucket.rb +0 -0
  277. data/lib/puppet/type/group.rb +18 -0
  278. data/lib/puppet/type/host.rb +0 -0
  279. data/lib/puppet/type/k5login.rb +4 -4
  280. data/lib/puppet/type/mailalias.rb +0 -0
  281. data/lib/puppet/type/maillist.rb +0 -0
  282. data/lib/puppet/type/mount.rb +15 -1
  283. data/lib/puppet/type/package.rb +7 -1
  284. data/lib/puppet/type/port.rb +0 -0
  285. data/lib/puppet/type/schedule.rb +9 -4
  286. data/lib/puppet/type/service.rb +1 -1
  287. data/lib/puppet/type/sshkey.rb +0 -0
  288. data/lib/puppet/type/tidy.rb +1 -1
  289. data/lib/puppet/type/user.rb +3 -0
  290. data/lib/puppet/type/yumrepo.rb +8 -6
  291. data/lib/puppet/type/zpool.rb +0 -0
  292. data/lib/puppet/util.rb +4 -31
  293. data/lib/puppet/util/adsi.rb +73 -17
  294. data/lib/puppet/util/autoload.rb +3 -3
  295. data/lib/puppet/util/backups.rb +4 -4
  296. data/lib/puppet/util/cacher.rb +7 -13
  297. data/lib/puppet/util/checksums.rb +2 -2
  298. data/lib/puppet/util/classgen.rb +3 -1
  299. data/lib/puppet/util/colors.rb +1 -0
  300. data/lib/puppet/util/command_line.rb +5 -0
  301. data/lib/puppet/util/docs.rb +33 -27
  302. data/lib/puppet/util/execution.rb +42 -18
  303. data/lib/puppet/util/filetype.rb +3 -3
  304. data/lib/puppet/util/instance_loader.rb +2 -2
  305. data/lib/puppet/util/instrumentation.rb +23 -42
  306. data/lib/puppet/util/instrumentation/data.rb +11 -4
  307. data/lib/puppet/util/instrumentation/indirection_probe.rb +11 -4
  308. data/lib/puppet/util/instrumentation/instrumentable.rb +7 -14
  309. data/lib/puppet/util/instrumentation/listener.rb +15 -8
  310. data/lib/puppet/util/instrumentation/listeners/log.rb +4 -10
  311. data/lib/puppet/util/instrumentation/listeners/performance.rb +8 -14
  312. data/lib/puppet/util/limits.rb +12 -0
  313. data/lib/puppet/util/lockfile.rb +2 -2
  314. data/lib/puppet/util/log.rb +14 -6
  315. data/lib/puppet/util/log/destinations.rb +23 -1
  316. data/lib/puppet/util/metric.rb +9 -3
  317. data/lib/puppet/util/monkey_patches.rb +7 -2
  318. data/lib/puppet/util/network_device/config.rb +1 -1
  319. data/lib/puppet/util/plugins.rb +1 -1
  320. data/lib/puppet/util/posix.rb +0 -0
  321. data/lib/puppet/util/profiler.rb +7 -2
  322. data/lib/puppet/util/provider_features.rb +2 -2
  323. data/lib/puppet/util/rdoc.rb +28 -30
  324. data/lib/puppet/util/rdoc/code_objects.rb +75 -25
  325. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  326. data/lib/puppet/util/rdoc/parser.rb +12 -487
  327. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +477 -0
  328. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +19 -0
  329. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  330. data/lib/puppet/util/reference.rb +1 -1
  331. data/lib/puppet/util/resource_template.rb +1 -1
  332. data/lib/puppet/util/selinux.rb +1 -1
  333. data/lib/puppet/util/storage.rb +2 -2
  334. data/lib/puppet/util/suidmanager.rb +1 -1
  335. data/lib/puppet/util/tag_set.rb +29 -0
  336. data/lib/puppet/util/tagging.rb +8 -24
  337. data/lib/puppet/util/watched_file.rb +1 -1
  338. data/lib/puppet/util/watcher.rb +1 -1
  339. data/lib/puppet/util/windows.rb +3 -0
  340. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  341. data/lib/puppet/util/windows/access_control_list.rb +106 -0
  342. data/lib/puppet/util/windows/file.rb +213 -0
  343. data/lib/puppet/util/windows/process.rb +199 -0
  344. data/lib/puppet/util/windows/root_certs.rb +52 -37
  345. data/lib/puppet/util/windows/security.rb +270 -245
  346. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  347. data/lib/puppet/util/windows/sid.rb +26 -4
  348. data/lib/puppet/version.rb +2 -2
  349. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  350. data/spec/fixtures/unit/indirector/{hiera → data_binding/hiera}/global.yaml +0 -0
  351. data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
  352. data/spec/fixtures/unit/module/trailing-comma.json +24 -0
  353. data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
  354. data/spec/integration/application/apply_spec.rb +1 -1
  355. data/spec/integration/application/doc_spec.rb +1 -1
  356. data/spec/integration/configurer_spec.rb +4 -2
  357. data/spec/integration/data_binding.rb +100 -0
  358. data/spec/integration/indirector/catalog/compiler_spec.rb +16 -13
  359. data/spec/integration/indirector/direct_file_server_spec.rb +3 -5
  360. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  361. data/spec/integration/node/facts_spec.rb +1 -1
  362. data/spec/integration/node_spec.rb +1 -1
  363. data/spec/integration/parser/compiler_spec.rb +90 -0
  364. data/spec/integration/parser/parser_spec.rb +2 -2
  365. data/spec/integration/provider/cron/crontab_spec.rb +3 -5
  366. data/spec/integration/resource/catalog_spec.rb +1 -1
  367. data/spec/integration/ssl/autosign_spec.rb +90 -0
  368. data/spec/integration/ssl/certificate_authority_spec.rb +62 -69
  369. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  370. data/spec/integration/ssl/host_spec.rb +1 -1
  371. data/spec/integration/transaction_spec.rb +13 -13
  372. data/spec/integration/type/exec_spec.rb +2 -2
  373. data/spec/integration/type/file_spec.rb +287 -45
  374. data/spec/integration/type/tidy_spec.rb +3 -3
  375. data/spec/integration/util/rdoc/parser_spec.rb +236 -35
  376. data/spec/integration/util/settings_spec.rb +1 -1
  377. data/spec/integration/util/windows/process_spec.rb +22 -0
  378. data/spec/integration/util/windows/security_spec.rb +316 -106
  379. data/spec/lib/matchers/containment_matchers.rb +52 -0
  380. data/spec/lib/puppet_spec/compiler.rb +6 -0
  381. data/spec/lib/puppet_spec/files.rb +20 -21
  382. data/spec/shared_behaviours/documentation_on_faces.rb +3 -3
  383. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  384. data/spec/shared_contexts/platform.rb +1 -0
  385. data/spec/spec_helper.rb +13 -1
  386. data/spec/unit/agent_spec.rb +0 -12
  387. data/spec/unit/application/agent_spec.rb +4 -4
  388. data/spec/unit/application/apply_spec.rb +18 -2
  389. data/spec/unit/application/cert_spec.rb +8 -6
  390. data/spec/unit/application/device_spec.rb +1 -1
  391. data/spec/unit/application/filebucket_spec.rb +1 -1
  392. data/spec/unit/application/inspect_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +24 -0
  394. data/spec/unit/configurer/downloader_spec.rb +8 -7
  395. data/spec/unit/configurer/fact_handler_spec.rb +23 -0
  396. data/spec/unit/configurer/plugin_handler_spec.rb +7 -2
  397. data/spec/unit/configurer_spec.rb +15 -5
  398. data/spec/unit/{provider/confine → confine}/exists_spec.rb +12 -12
  399. data/spec/unit/{provider/confine → confine}/false_spec.rb +9 -9
  400. data/spec/unit/{provider/confine → confine}/feature_spec.rb +10 -10
  401. data/spec/unit/{provider/confine → confine}/true_spec.rb +7 -7
  402. data/spec/unit/{provider/confine → confine}/variable_spec.rb +16 -16
  403. data/spec/unit/{provider/confine_collection_spec.rb → confine_collection_spec.rb} +30 -30
  404. data/spec/unit/{provider/confine_spec.rb → confine_spec.rb} +11 -11
  405. data/spec/unit/{provider/confiner_spec.rb → confiner_spec.rb} +4 -4
  406. data/spec/unit/face/parser_spec.rb +54 -0
  407. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  408. data/spec/unit/file_serving/base_spec.rb +32 -9
  409. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  410. data/spec/unit/file_serving/content_spec.rb +12 -7
  411. data/spec/unit/file_serving/fileset_spec.rb +57 -27
  412. data/spec/unit/file_serving/metadata_spec.rb +74 -12
  413. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  414. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +73 -0
  415. data/spec/unit/file_system/file_spec.rb +486 -0
  416. data/spec/unit/file_system/tempfile_spec.rb +48 -0
  417. data/spec/unit/graph/relationship_graph_spec.rb +0 -6
  418. data/spec/unit/hiera_puppet_spec.rb +2 -2
  419. data/spec/unit/indirector/catalog/compiler_spec.rb +15 -19
  420. data/spec/unit/indirector/certificate_status/file_spec.rb +30 -40
  421. data/spec/unit/indirector/data_binding/hiera_spec.rb +95 -2
  422. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  423. data/spec/unit/indirector/facts/facter_spec.rb +33 -0
  424. data/spec/unit/indirector/file_bucket_file/file_spec.rb +61 -52
  425. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  426. data/spec/unit/indirector/file_server_spec.rb +4 -4
  427. data/spec/unit/indirector/json_spec.rb +4 -4
  428. data/spec/unit/indirector/key/file_spec.rb +13 -14
  429. data/spec/unit/indirector/resource/ral_spec.rb +7 -0
  430. data/spec/unit/indirector/resource/store_configs_spec.rb +11 -0
  431. data/spec/unit/indirector/rest_spec.rb +7 -3
  432. data/spec/unit/indirector/ssl_file_spec.rb +14 -17
  433. data/spec/unit/indirector/yaml_spec.rb +4 -4
  434. data/spec/unit/module_spec.rb +43 -15
  435. data/spec/unit/module_tool/tar/gnu_spec.rb +2 -2
  436. data/spec/unit/module_tool/tar/solaris_spec.rb +2 -2
  437. data/spec/unit/module_tool/tar_spec.rb +45 -0
  438. data/spec/unit/network/authconfig_spec.rb +2 -1
  439. data/spec/unit/network/authentication_spec.rb +2 -2
  440. data/spec/unit/network/format_handler_spec.rb +2 -2
  441. data/spec/unit/network/formats_spec.rb +24 -0
  442. data/spec/unit/network/http/connection_spec.rb +76 -199
  443. data/spec/unit/network/http/handler_spec.rb +33 -34
  444. data/spec/unit/network/http_pool_spec.rb +8 -5
  445. data/spec/unit/node/environment_spec.rb +76 -90
  446. data/spec/unit/node/facts_spec.rb +20 -3
  447. data/spec/unit/node_spec.rb +43 -0
  448. data/spec/unit/parameter/boolean_spec.rb +22 -12
  449. data/spec/unit/parser/ast/resourceparam_spec.rb +51 -0
  450. data/spec/unit/parser/compiler_spec.rb +103 -35
  451. data/spec/unit/parser/eparser_adapter_spec.rb +12 -12
  452. data/spec/unit/parser/files_spec.rb +11 -11
  453. data/spec/unit/parser/functions/contain_spec.rb +185 -0
  454. data/spec/unit/parser/functions/create_resources_spec.rb +13 -5
  455. data/spec/unit/parser/functions/generate_spec.rb +1 -1
  456. data/spec/unit/parser/functions_spec.rb +2 -2
  457. data/spec/unit/parser/lexer_spec.rb +1 -1
  458. data/spec/unit/parser/methods/each_spec.rb +1 -1
  459. data/spec/unit/parser/methods/{select_spec.rb → filter_spec.rb} +11 -11
  460. data/spec/unit/parser/methods/map_spec.rb +95 -0
  461. data/spec/unit/parser/methods/reduce_spec.rb +12 -11
  462. data/spec/unit/parser/methods/shared.rb +5 -5
  463. data/spec/unit/parser/methods/slice_spec.rb +13 -13
  464. data/spec/unit/parser/parser_spec.rb +1 -1
  465. data/spec/unit/parser/resource/param_spec.rb +44 -0
  466. data/spec/unit/parser/resource_spec.rb +16 -15
  467. data/spec/unit/pops/model/ast_transformer_spec.rb +18 -4
  468. data/spec/unit/pops/parser/lexer_spec.rb +22 -5
  469. data/spec/unit/pops/parser/parse_calls_spec.rb +5 -5
  470. data/spec/unit/pops/transformer/transform_calls_spec.rb +6 -6
  471. data/spec/unit/pops/transformer/transform_containers_spec.rb +2 -2
  472. data/spec/unit/pops/validator/validator_spec.rb +31 -0
  473. data/spec/unit/provider/augeas/augeas_spec.rb +57 -2
  474. data/spec/unit/provider/exec/posix_spec.rb +8 -3
  475. data/spec/unit/provider/file/posix_spec.rb +2 -2
  476. data/spec/unit/provider/group/windows_adsi_spec.rb +70 -3
  477. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  478. data/spec/unit/provider/package/apt_spec.rb +1 -1
  479. data/spec/unit/provider/package/msi_spec.rb +15 -42
  480. data/spec/unit/provider/package/openbsd_spec.rb +3 -3
  481. data/spec/unit/provider/package/rpm_spec.rb +56 -13
  482. data/spec/unit/provider/package/windows_spec.rb +15 -19
  483. data/spec/unit/provider/service/base_spec.rb +1 -1
  484. data/spec/unit/provider/service/daemontools_spec.rb +18 -8
  485. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  486. data/spec/unit/provider/service/gentoo_spec.rb +5 -2
  487. data/spec/unit/provider/service/init_spec.rb +17 -17
  488. data/spec/unit/provider/service/launchd_spec.rb +76 -23
  489. data/spec/unit/provider/service/openbsd_spec.rb +125 -0
  490. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  491. data/spec/unit/provider/service/runit_spec.rb +12 -5
  492. data/spec/unit/provider/service/upstart_spec.rb +4 -4
  493. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -5
  494. data/spec/unit/provider/user/directoryservice_spec.rb +4 -4
  495. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  496. data/spec/unit/provider_spec.rb +2 -2
  497. data/spec/unit/reports/http_spec.rb +19 -34
  498. data/spec/unit/reports/store_spec.rb +2 -2
  499. data/spec/unit/resource/catalog_spec.rb +81 -11
  500. data/spec/unit/resource/status_spec.rb +11 -1
  501. data/spec/unit/resource/type_spec.rb +30 -1
  502. data/spec/unit/resource_spec.rb +40 -4
  503. data/spec/unit/settings/file_setting_spec.rb +2 -2
  504. data/spec/unit/settings/path_setting_spec.rb +2 -2
  505. data/spec/unit/settings/priority_setting_spec.rb +66 -0
  506. data/spec/unit/settings_spec.rb +16 -31
  507. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +30 -0
  508. data/spec/unit/ssl/certificate_authority_spec.rb +129 -134
  509. data/spec/unit/ssl/certificate_factory_spec.rb +18 -0
  510. data/spec/unit/ssl/certificate_request_attributes_spec.rb +61 -0
  511. data/spec/unit/ssl/certificate_request_spec.rb +103 -0
  512. data/spec/unit/ssl/certificate_spec.rb +31 -18
  513. data/spec/unit/ssl/host_spec.rb +34 -8
  514. data/spec/unit/ssl/inventory_spec.rb +27 -62
  515. data/spec/unit/ssl/key_spec.rb +4 -4
  516. data/spec/unit/ssl/oids_spec.rb +48 -0
  517. data/spec/unit/ssl/validator_spec.rb +49 -6
  518. data/spec/unit/status_spec.rb +9 -0
  519. data/spec/unit/transaction/event_spec.rb +1 -9
  520. data/spec/unit/transaction/report_spec.rb +20 -1
  521. data/spec/unit/transaction/resource_harness_spec.rb +60 -210
  522. data/spec/unit/transaction_spec.rb +54 -8
  523. data/spec/unit/type/component_spec.rb +2 -2
  524. data/spec/unit/type/exec_spec.rb +14 -7
  525. data/spec/unit/type/file/content_spec.rb +13 -2
  526. data/spec/unit/type/file/ctime_spec.rb +1 -1
  527. data/spec/unit/type/file/mode_spec.rb +48 -2
  528. data/spec/unit/type/file/mtime_spec.rb +1 -1
  529. data/spec/unit/type/file/source_spec.rb +177 -7
  530. data/spec/unit/type/file_spec.rb +63 -71
  531. data/spec/unit/type/group_spec.rb +20 -0
  532. data/spec/unit/type/k5login_spec.rb +3 -3
  533. data/spec/unit/type/mount_spec.rb +53 -0
  534. data/spec/unit/type/nagios_spec.rb +216 -0
  535. data/spec/unit/type/package_spec.rb +7 -1
  536. data/spec/unit/type/schedule_spec.rb +6 -0
  537. data/spec/unit/type/service_spec.rb +3 -3
  538. data/spec/unit/type/tidy_spec.rb +14 -14
  539. data/spec/unit/type/user_spec.rb +9 -0
  540. data/spec/unit/type_spec.rb +86 -4
  541. data/spec/unit/util/adsi_spec.rb +120 -12
  542. data/spec/unit/util/autoload_spec.rb +14 -14
  543. data/spec/unit/util/backups_spec.rb +29 -21
  544. data/spec/unit/util/checksums_spec.rb +2 -1
  545. data/spec/unit/util/command_line_spec.rb +41 -0
  546. data/spec/unit/util/docs_spec.rb +91 -0
  547. data/spec/unit/util/execution_spec.rb +26 -2
  548. data/spec/unit/util/filetype_spec.rb +7 -7
  549. data/spec/unit/util/lockfile_spec.rb +2 -2
  550. data/spec/unit/util/log/destinations_spec.rb +32 -0
  551. data/spec/unit/util/monkey_patches_spec.rb +41 -0
  552. data/spec/unit/util/pidlock_spec.rb +6 -6
  553. data/spec/unit/util/rdoc/parser_spec.rb +15 -13
  554. data/spec/unit/util/rdoc_spec.rb +18 -24
  555. data/spec/unit/util/resource_template_spec.rb +3 -3
  556. data/spec/unit/util/selinux_spec.rb +4 -2
  557. data/spec/unit/util/storage_spec.rb +4 -4
  558. data/spec/unit/util/suidmanager_spec.rb +7 -0
  559. data/spec/unit/util/tag_set_spec.rb +46 -0
  560. data/spec/unit/util/tagging_spec.rb +82 -45
  561. data/spec/unit/util/watcher_spec.rb +4 -1
  562. data/spec/unit/util/windows/access_control_entry_spec.rb +67 -0
  563. data/spec/unit/util/windows/access_control_list_spec.rb +133 -0
  564. data/spec/unit/util/windows/root_certs_spec.rb +10 -8
  565. data/spec/unit/util/windows/security_descriptor_spec.rb +117 -0
  566. data/spec/unit/util/windows/sid_spec.rb +69 -0
  567. data/spec/unit/util_spec.rb +7 -7
  568. data/tasks/ci.rake +17 -36
  569. metadata +2811 -2746
  570. checksums.yaml +0 -7
  571. data/examples/mac_automount.pp +0 -16
  572. data/examples/mcx_dock_absent.pp +0 -4
  573. data/examples/mcx_dock_default.pp +0 -118
  574. data/examples/mcx_dock_full.pp +0 -125
  575. data/examples/mcx_dock_invalid.pp +0 -9
  576. data/examples/mcx_nogroup.pp +0 -118
  577. data/examples/mcx_notexists_absent.pp +0 -4
  578. data/ext/rack/README +0 -58
  579. data/ext/rack/manifest.pp +0 -59
  580. data/lib/puppet/external/lock.rb +0 -63
  581. data/lib/puppet/indirector/hiera.rb +0 -39
  582. data/lib/puppet/parser/functions/foreach.rb +0 -95
  583. data/spec/integration/network/server/webrick_spec.rb +0 -76
  584. data/spec/integration/parser/functions_spec.rb +0 -16
  585. data/spec/unit/indirector/hiera_spec.rb +0 -154
  586. data/spec/unit/parser/methods/collect_spec.rb +0 -153
  587. data/spec/unit/parser/methods/foreach_spec.rb +0 -91
  588. data/spec/unit/parser/methods/reject_spec.rb +0 -73
  589. data/spec/unit/resource/resource_type.json +0 -34
@@ -10,7 +10,7 @@ describe provider_class do
10
10
 
11
11
  def expect_read_from_pkgconf(lines)
12
12
  pkgconf = stub(:readlines => lines)
13
- File.expects(:exist?).with('/etc/pkg.conf').returns(true)
13
+ Puppet::FileSystem::File.expects(:exist?).with('/etc/pkg.conf').returns(true)
14
14
  File.expects(:open).with('/etc/pkg.conf', 'rb').returns(pkgconf)
15
15
  end
16
16
 
@@ -76,7 +76,7 @@ describe provider_class do
76
76
 
77
77
  context "#install" do
78
78
  it "should fail if the resource doesn't have a source" do
79
- File.expects(:exist?).with('/etc/pkg.conf').returns(false)
79
+ Puppet::FileSystem::File.expects(:exist?).with('/etc/pkg.conf').returns(false)
80
80
 
81
81
  expect {
82
82
  provider.install
@@ -84,7 +84,7 @@ describe provider_class do
84
84
  end
85
85
 
86
86
  it "should fail if /etc/pkg.conf exists, but is not readable" do
87
- File.expects(:exist?).with('/etc/pkg.conf').returns(true)
87
+ Puppet::FileSystem::File.expects(:exist?).with('/etc/pkg.conf').returns(true)
88
88
  File.expects(:open).with('/etc/pkg.conf', 'rb').raises(Errno::EACCES)
89
89
 
90
90
  expect {
@@ -20,7 +20,8 @@ describe provider_class do
20
20
  let(:resource) do
21
21
  Puppet::Type.type(:package).new(
22
22
  :name => resource_name,
23
- :ensure => :installed
23
+ :ensure => :installed,
24
+ :provider => 'rpm'
24
25
  )
25
26
  end
26
27
 
@@ -138,23 +139,40 @@ describe provider_class do
138
139
 
139
140
  describe "when not already installed" do
140
141
  it "should only include the '-i' flag" do
141
- Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-i", '/path/to/package'], execute_options)
142
+ Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", ["-i"], '/path/to/package'], execute_options)
142
143
  provider.install
143
144
  end
144
- end
145
+ end
145
146
 
146
- describe "when an older version is installed" do
147
- before(:each) do
148
- # Force the provider to think a version of the package is already installed
149
- # This is real hacky. I'm sorry. --jeffweiss 25 Jan 2013
150
- provider.instance_variable_get('@property_hash')[:ensure] = '1.2.3.3'
151
- end
147
+ describe "when installed with options" do
148
+ let(:resource) do
149
+ Puppet::Type.type(:package).new(
150
+ :name => resource_name,
151
+ :ensure => :installed,
152
+ :provider => 'rpm',
153
+ :source => '/path/to/package',
154
+ :install_options => ['-D', {'--test' => 'value'}, '-Q']
155
+ )
156
+ end
152
157
 
153
- it "should include the '-U --oldpackage' flags" do
154
- Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", ["-U", "--oldpackage"], '/path/to/package'], execute_options)
158
+ it "should include the options" do
159
+ Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", ["-i", "-D", "--test=value", "-Q"], '/path/to/package'], execute_options)
155
160
  provider.install
156
- end
157
- end
161
+ end
162
+ end
163
+
164
+ describe "when an older version is installed" do
165
+ before(:each) do
166
+ # Force the provider to think a version of the package is already installed
167
+ # This is real hacky. I'm sorry. --jeffweiss 25 Jan 2013
168
+ provider.instance_variable_get('@property_hash')[:ensure] = '1.2.3.3'
169
+ end
170
+
171
+ it "should include the '-U --oldpackage' flags" do
172
+ Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", ["-U", "--oldpackage"], '/path/to/package'], execute_options)
173
+ provider.install
174
+ end
175
+ end
158
176
  end
159
177
 
160
178
  describe "#latest" do
@@ -268,6 +286,31 @@ describe provider_class do
268
286
  end
269
287
  end
270
288
 
289
+ describe "#install_options" do
290
+ it "should return empty array by default" do
291
+ provider.install_options.should == []
292
+ end
293
+
294
+ it "should return install_options when set" do
295
+ provider.resource[:install_options] = ['-n']
296
+ provider.install_options.should == ['-n']
297
+ end
298
+
299
+ it "should return multiple install_options when set" do
300
+ provider.resource[:install_options] = ['-L', '/opt/puppet']
301
+ provider.install_options.should == ['-L', '/opt/puppet']
302
+ end
303
+
304
+ it 'should return install_options when set as hash' do
305
+ provider.resource[:install_options] = { '-Darch' => 'vax' }
306
+ provider.install_options.should == ['-Darch=vax']
307
+ end
308
+ it 'should return install_options when an array with hashes' do
309
+ provider.resource[:install_options] = [ '-L', { '-Darch' => 'vax' }]
310
+ provider.install_options.should == ['-L', '-Darch=vax']
311
+ end
312
+ end
313
+
271
314
  describe ".nodigest" do
272
315
  { '4.0' => nil,
273
316
  '4.0.1' => nil,
@@ -14,8 +14,7 @@ describe Puppet::Type.type(:package).provider(:windows) do
14
14
  end
15
15
 
16
16
  def expect_execute(command, status)
17
- provider.expects(:execute).with(command, execute_options)
18
- provider.expects(:exit_status).returns(status)
17
+ provider.expects(:execute).with(command, execute_options).returns(Puppet::Util::Execution::ProcessOutput.new('',status))
19
18
  end
20
19
 
21
20
  describe 'provider features' do
@@ -23,6 +22,7 @@ describe Puppet::Type.type(:package).provider(:windows) do
23
22
  it { should be_uninstallable }
24
23
  it { should be_install_options }
25
24
  it { should be_uninstall_options }
25
+ it { should be_versionable }
26
26
  end
27
27
 
28
28
  describe 'on Windows', :if => Puppet.features.microsoft_windows? do
@@ -36,17 +36,19 @@ describe Puppet::Type.type(:package).provider(:windows) do
36
36
  pkg1 = stub('pkg1')
37
37
  pkg2 = stub('pkg2')
38
38
 
39
- prov1 = stub('prov1', :name => 'pkg1', :package => pkg1)
40
- prov2 = stub('prov2', :name => 'pkg2', :package => pkg2)
39
+ prov1 = stub('prov1', :name => 'pkg1', :version => '1.0.0', :package => pkg1)
40
+ prov2 = stub('prov2', :name => 'pkg2', :version => nil, :package => pkg2)
41
41
 
42
42
  Puppet::Provider::Package::Windows::Package.expects(:map).multiple_yields([prov1], [prov2]).returns([prov1, prov2])
43
43
 
44
44
  providers = provider.class.instances
45
45
  providers.count.should == 2
46
46
  providers[0].name.should == 'pkg1'
47
+ providers[0].version.should == '1.0.0'
47
48
  providers[0].package.should == pkg1
48
49
 
49
50
  providers[1].name.should == 'pkg2'
51
+ providers[1].version.should be_nil
50
52
  providers[1].package.should == pkg2
51
53
  end
52
54
 
@@ -59,13 +61,21 @@ describe Puppet::Type.type(:package).provider(:windows) do
59
61
 
60
62
  context '#query' do
61
63
  it 'should return the hash of the matched packaged' do
62
- pkg = mock(:name => 'pkg1')
64
+ pkg = mock(:name => 'pkg1', :version => nil)
63
65
  pkg.expects(:match?).returns(true)
64
66
  Puppet::Provider::Package::Windows::Package.expects(:find).yields(pkg)
65
67
 
66
68
  provider.query.should == { :name => 'pkg1', :ensure => :installed, :provider => :windows }
67
69
  end
68
70
 
71
+ it 'should include the version string when present' do
72
+ pkg = mock(:name => 'pkg1', :version => '1.0.0')
73
+ pkg.expects(:match?).returns(true)
74
+ Puppet::Provider::Package::Windows::Package.expects(:find).yields(pkg)
75
+
76
+ provider.query.should == { :name => 'pkg1', :ensure => '1.0.0', :provider => :windows }
77
+ end
78
+
69
79
  it 'should return nil if no package was found' do
70
80
  Puppet::Provider::Package::Windows::Package.expects(:find)
71
81
 
@@ -102,13 +112,6 @@ describe Puppet::Type.type(:package).provider(:windows) do
102
112
  provider.install
103
113
  end
104
114
 
105
- it 'should warn if the package requests a reboot' do
106
- expect_execute(command, 194)
107
- provider.expects(:warning).with('The package requested a reboot to finish the operation.')
108
-
109
- provider.install
110
- end
111
-
112
115
  it 'should warn if reboot initiated' do
113
116
  expect_execute(command, 1641)
114
117
  provider.expects(:warning).with('The package installed successfully and the system is rebooting now.')
@@ -161,13 +164,6 @@ describe Puppet::Type.type(:package).provider(:windows) do
161
164
  provider.uninstall
162
165
  end
163
166
 
164
- it 'should warn if the package requests a reboot' do
165
- expect_execute(command, 194)
166
- provider.expects(:warning).with('The package requested a reboot to finish the operation.')
167
-
168
- provider.uninstall
169
- end
170
-
171
167
  it 'should warn if reboot initiated' do
172
168
  expect_execute(command, 1641)
173
169
  provider.expects(:warning).with('The package uninstalled successfully and the system is rebooting now.')
@@ -34,7 +34,7 @@ describe "base service provider" do
34
34
  end
35
35
 
36
36
  before :each do
37
- File.unlink(flag) if File.exist?(flag)
37
+ Puppet::FileSystem::File.unlink(flag) if Puppet::FileSystem::File.exist?(flag)
38
38
  end
39
39
 
40
40
  it { should be }
@@ -99,9 +99,14 @@ describe provider_class do
99
99
  end
100
100
 
101
101
  describe "when enabling" do
102
- it "should create a symlink between daemon dir and service dir" do
103
- FileTest.stubs(:symlink?).returns(false)
104
- File.expects(:symlink).with(File.join(@daemondir,"myservice"), File.join(@servicedir,"myservice")).returns(0)
102
+ it "should create a symlink between daemon dir and service dir", :if => Puppet.features.manages_symlinks? do
103
+ daemon_path = File.join(@daemondir, "myservice")
104
+ stub_daemon = stub(daemon_path, :symlink? => false)
105
+ Puppet::FileSystem::File.expects(:new).with(daemon_path).returns(stub_daemon)
106
+ service_path = File.join(@servicedir, "myservice")
107
+ mock_service = mock(service_path, :symlink? => false)
108
+ Puppet::FileSystem::File.expects(:new).with(service_path).returns(mock_service)
109
+ stub_daemon.expects(:symlink).returns(0)
105
110
  @provider.enable
106
111
  end
107
112
  end
@@ -109,16 +114,19 @@ describe provider_class do
109
114
  describe "when disabling" do
110
115
  it "should remove the symlink between daemon dir and service dir" do
111
116
  FileTest.stubs(:directory?).returns(false)
112
- FileTest.stubs(:symlink?).returns(true)
113
- File.expects(:unlink).with(File.join(@servicedir,"myservice"))
117
+ path = File.join(@servicedir,"myservice")
118
+ mocked_file = mock(path, :symlink? => true)
119
+ Puppet::FileSystem::File.expects(:new).with(path).returns(mocked_file)
120
+ Puppet::FileSystem::File.expects(:unlink).with(path)
114
121
  @provider.stubs(:texecute).returns("")
115
122
  @provider.disable
116
123
  end
117
124
 
118
125
  it "should stop the service" do
119
126
  FileTest.stubs(:directory?).returns(false)
120
- FileTest.stubs(:symlink?).returns(true)
121
- File.stubs(:unlink)
127
+ mocked_file = mock('anything', :symlink? => true)
128
+ Puppet::FileSystem::File.expects(:new).returns(mocked_file)
129
+ Puppet::FileSystem::File.stubs(:unlink)
122
130
  @provider.expects(:stop)
123
131
  @provider.disable
124
132
  end
@@ -134,7 +142,9 @@ describe provider_class do
134
142
  [true, false].each do |t|
135
143
  it "should return #{t} if the symlink exists" do
136
144
  @provider.stubs(:status).returns(:stopped)
137
- FileTest.stubs(:symlink?).returns(t)
145
+ path = File.join(@servicedir,"myservice")
146
+ mocked_file = mock(path, :symlink? => t)
147
+ Puppet::FileSystem::File.expects(:new).with(path).returns(mocked_file)
138
148
 
139
149
  @provider.enabled?.should == "#{t}".to_sym
140
150
  end
@@ -62,13 +62,13 @@ OUTPUT
62
62
  end
63
63
 
64
64
  it "should enable only the selected service" do
65
- File.stubs(:exists?).with('/etc/rc.conf').returns(true)
65
+ Puppet::FileSystem::File.stubs(:exist?).with('/etc/rc.conf').returns(true)
66
66
  File.stubs(:read).with('/etc/rc.conf').returns("openntpd_enable=\"NO\"\nntpd_enable=\"NO\"\n")
67
67
  fh = stub 'fh'
68
68
  File.stubs(:open).with('/etc/rc.conf', File::WRONLY).yields(fh)
69
69
  fh.expects(:<<).with("openntpd_enable=\"NO\"\nntpd_enable=\"YES\"\n")
70
- File.stubs(:exists?).with('/etc/rc.conf.local').returns(false)
71
- File.stubs(:exists?).with('/etc/rc.conf.d/ntpd').returns(false)
70
+ Puppet::FileSystem::File.stubs(:exist?).with('/etc/rc.conf.local').returns(false)
71
+ Puppet::FileSystem::File.stubs(:exist?).with('/etc/rc.conf.d/ntpd').returns(false)
72
72
 
73
73
  @provider.rc_replace('ntpd', 'ntpd', 'YES')
74
74
  end
@@ -13,7 +13,9 @@ describe Puppet::Type.type(:service).provider(:gentoo) do
13
13
  # The initprovider (parent of the gentoo provider) does a stat call
14
14
  # before it even tries to execute an initscript. We use sshd in all the
15
15
  # tests so make sure it is considered present.
16
- File.stubs(:stat).with('/etc/init.d/sshd')
16
+ sshd_path = '/etc/init.d/sshd'
17
+ stub_file = stub(sshd_path, :stat => stub('stat'))
18
+ Puppet::FileSystem::File.stubs(:new).with(sshd_path).returns stub_file
17
19
  end
18
20
 
19
21
  let :initscripts do
@@ -48,7 +50,6 @@ describe Puppet::Type.type(:service).provider(:gentoo) do
48
50
 
49
51
  it "should get a list of services from /etc/init.d but exclude helper scripts" do
50
52
  FileTest.expects(:directory?).with('/etc/init.d').returns true
51
- File.stubs(:symlink?).returns(false)
52
53
  Dir.expects(:entries).with('/etc/init.d').returns initscripts
53
54
  (initscripts - helperscripts).each do |script|
54
55
  FileTest.expects(:executable?).with("/etc/init.d/#{script}").returns true
@@ -56,6 +57,8 @@ describe Puppet::Type.type(:service).provider(:gentoo) do
56
57
  helperscripts.each do |script|
57
58
  FileTest.expects(:executable?).with("/etc/init.d/#{script}").never
58
59
  end
60
+
61
+ Puppet::FileSystem::File.stubs(:new).returns stub('file', :symlink? => false)
59
62
  described_class.instances.map(&:name).should == [
60
63
  'alsasound',
61
64
  'bootmisc',
@@ -62,12 +62,12 @@ describe Puppet::Type.type(:service).provider(:init) do
62
62
  described_class.instances.should be_all { |provider| provider.get(:hasstatus) == true }
63
63
  end
64
64
 
65
- it "should discard upstart jobs" do
65
+ it "should discard upstart jobs", :if => Puppet.features.manages_symlinks? do
66
66
  not_init_service, *valid_services = @services
67
- File.stubs(:symlink?).returns false
68
- File.stubs(:symlink?).with("tmp/#{not_init_service}").returns(true)
69
- File.stubs(:readlink).with("tmp/#{not_init_service}").returns("/lib/init/upstart-job")
70
-
67
+ path = "tmp/#{not_init_service}"
68
+ mocked_file = mock(path, :symlink? => true, :readlink => "/lib/init/upstart-job")
69
+ Puppet::FileSystem::File.stubs(:new).returns stub('file', :symlink? => false)
70
+ Puppet::FileSystem::File.expects(:new).with(path).returns(mocked_file)
71
71
  described_class.instances.map(&:name).should == valid_services
72
72
  end
73
73
 
@@ -82,7 +82,7 @@ describe Puppet::Type.type(:service).provider(:init) do
82
82
  describe "when checking valid paths" do
83
83
  it "should discard paths that do not exist" do
84
84
  File.expects(:directory?).with(paths[0]).returns false
85
- File.expects(:exist?).with(paths[0]).returns false
85
+ Puppet::FileSystem::File.expects(:exist?).with(paths[0]).returns false
86
86
  File.expects(:directory?).with(paths[1]).returns true
87
87
 
88
88
  provider.paths.should == [paths[1]]
@@ -90,7 +90,7 @@ describe Puppet::Type.type(:service).provider(:init) do
90
90
 
91
91
  it "should discard paths that are not directories" do
92
92
  paths.each do |path|
93
- File.expects(:exist?).with(path).returns true
93
+ Puppet::FileSystem::File.expects(:exist?).with(path).returns true
94
94
  File.expects(:directory?).with(path).returns false
95
95
  end
96
96
  provider.paths.should be_empty
@@ -103,28 +103,28 @@ describe Puppet::Type.type(:service).provider(:init) do
103
103
  end
104
104
 
105
105
  it "should be able to find the init script in the service path" do
106
- File.expects(:exist?).with("#{paths[0]}/myservice").returns true
107
- File.expects(:exist?).with("#{paths[1]}/myservice").never # first one wins
106
+ Puppet::FileSystem::File.expects(:exist?).with("#{paths[0]}/myservice").returns true
107
+ Puppet::FileSystem::File.expects(:exist?).with("#{paths[1]}/myservice").never # first one wins
108
108
  provider.initscript.should == "/service/path/myservice"
109
109
  end
110
110
 
111
111
  it "should be able to find the init script in an alternate service path" do
112
- File.expects(:exist?).with("#{paths[0]}/myservice").returns false
113
- File.expects(:exist?).with("#{paths[1]}/myservice").returns true
112
+ Puppet::FileSystem::File.expects(:exist?).with("#{paths[0]}/myservice").returns false
113
+ Puppet::FileSystem::File.expects(:exist?).with("#{paths[1]}/myservice").returns true
114
114
  provider.initscript.should == "/alt/service/path/myservice"
115
115
  end
116
116
 
117
117
  it "should be able to find the init script if it ends with .sh" do
118
- File.expects(:exist?).with("#{paths[0]}/myservice").returns false
119
- File.expects(:exist?).with("#{paths[1]}/myservice").returns false
120
- File.expects(:exist?).with("#{paths[0]}/myservice.sh").returns true
118
+ Puppet::FileSystem::File.expects(:exist?).with("#{paths[0]}/myservice").returns false
119
+ Puppet::FileSystem::File.expects(:exist?).with("#{paths[1]}/myservice").returns false
120
+ Puppet::FileSystem::File.expects(:exist?).with("#{paths[0]}/myservice.sh").returns true
121
121
  provider.initscript.should == "/service/path/myservice.sh"
122
122
  end
123
123
 
124
124
  it "should fail if the service isn't there" do
125
125
  paths.each do |path|
126
- File.expects(:exist?).with("#{path}/myservice").returns false
127
- File.expects(:exist?).with("#{path}/myservice.sh").returns false
126
+ Puppet::FileSystem::File.expects(:exist?).with("#{path}/myservice").returns false
127
+ Puppet::FileSystem::File.expects(:exist?).with("#{path}/myservice.sh").returns false
128
128
  end
129
129
  expect { provider.initscript }.to raise_error(Puppet::Error, "Could not find init script for 'myservice'")
130
130
  end
@@ -134,7 +134,7 @@ describe Puppet::Type.type(:service).provider(:init) do
134
134
  before :each do
135
135
  File.stubs(:directory?).with("/service/path").returns true
136
136
  File.stubs(:directory?).with("/alt/service/path").returns true
137
- File.stubs(:exist?).with("/service/path/myservice").returns true
137
+ Puppet::FileSystem::File.stubs(:exist?).with("/service/path/myservice").returns true
138
138
  end
139
139
 
140
140
  [:start, :stop, :status, :restart].each do |method|
@@ -209,29 +209,82 @@ describe Puppet::Type.type(:service).provider(:launchd) do
209
209
  end
210
210
  end
211
211
 
212
- describe "when encountering malformed plists" do
213
- let(:plist_without_label) do
214
- {
215
- 'LimitLoadToSessionType' => 'Aqua'
216
- }
217
- end
218
- let(:busted_plist_path) { '/Library/LaunchAgents/org.busted.plist' }
219
-
220
- it "[17624] should warn that the plist in question is being skipped" do
221
- provider.expects(:launchd_paths).returns(['/Library/LaunchAgents'])
222
- provider.expects(:return_globbed_list_of_file_paths).with('/Library/LaunchAgents').returns([busted_plist_path])
223
- provider.expects(:read_plist).with(busted_plist_path).returns(plist_without_label)
224
- Puppet.expects(:warning).with("The #{busted_plist_path} plist does not contain a 'label' key; Puppet is skipping it")
225
- provider.jobsearch
226
- end
227
-
228
- it "[15929] should skip plists that plutil cannot read" do
229
- provider.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout',
230
- busted_plist_path).raises(Puppet::ExecutionFailure, 'boom')
231
- Puppet.expects(:warning).with("Cannot read file #{busted_plist_path}; " +
232
- "Puppet is skipping it. \n" +
233
- "Details: boom")
234
- provider.read_plist(busted_plist_path)
212
+ describe "make_label_to_path_map" do
213
+ before do
214
+ # clear out this class variable between runs
215
+ if provider.instance_variable_defined? :@label_to_path_map
216
+ provider.send(:remove_instance_variable, :@label_to_path_map)
217
+ end
218
+ end
219
+ describe "when encountering malformed plists" do
220
+ let(:plist_without_label) do
221
+ {
222
+ 'LimitLoadToSessionType' => 'Aqua'
223
+ }
224
+ end
225
+ let(:busted_plist_path) { '/Library/LaunchAgents/org.busted.plist' }
226
+
227
+ it "[17624] should warn that the plist in question is being skipped" do
228
+ provider.expects(:launchd_paths).returns(['/Library/LaunchAgents'])
229
+ provider.expects(:return_globbed_list_of_file_paths).with('/Library/LaunchAgents').returns([busted_plist_path])
230
+ provider.expects(:read_plist).with(busted_plist_path).returns(plist_without_label)
231
+ Puppet.expects(:warning).with("The #{busted_plist_path} plist does not contain a 'label' key; Puppet is skipping it")
232
+ provider.make_label_to_path_map
233
+ end
234
+
235
+ it "[15929] should skip plists that plutil cannot read" do
236
+ provider.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout',
237
+ busted_plist_path).raises(Puppet::ExecutionFailure, 'boom')
238
+ Puppet.expects(:warning).with("Cannot read file #{busted_plist_path}; " +
239
+ "Puppet is skipping it. \n" +
240
+ "Details: boom")
241
+ provider.read_plist(busted_plist_path)
242
+ end
243
+ end
244
+ it "should return the cached value when available" do
245
+ provider.instance_variable_set(:@label_to_path_map, {'xx'=>'yy'})
246
+ provider.make_label_to_path_map.should eq({'xx'=>'yy'})
247
+ end
248
+ describe "when successful" do
249
+ let(:launchd_dir) { '/Library/LaunchAgents' }
250
+ let(:plist) { launchd_dir + '/foo.bar.service.plist' }
251
+ let(:label) { 'foo.bar.service' }
252
+ before do
253
+ provider.instance_variable_set(:@label_to_path_map, nil)
254
+ provider.expects(:launchd_paths).returns([launchd_dir])
255
+ provider.expects(:return_globbed_list_of_file_paths).with(launchd_dir).returns([plist])
256
+ provider.expects(:read_plist).with(plist).returns({'Label'=>'foo.bar.service'})
257
+ end
258
+ it "should read the plists and return their contents" do
259
+ provider.make_label_to_path_map.should eq({label=>plist})
260
+ end
261
+ it "should re-read the plists and return their contents when refreshed" do
262
+ provider.instance_variable_set(:@label_to_path_map, {'xx'=>'yy'})
263
+ provider.make_label_to_path_map(true).should eq({label=>plist})
264
+ end
265
+ end
266
+ end
267
+
268
+ describe "jobsearch" do
269
+ let(:map) { {"org.mozilla.puppet" => "/path/to/puppet.plist",
270
+ "org.mozilla.python" => "/path/to/python.plist"} }
271
+ it "returns the entire map with no args" do
272
+ provider.expects(:make_label_to_path_map).returns(map)
273
+ provider.jobsearch.should == map
274
+ end
275
+ it "returns a singleton hash when given a label" do
276
+ provider.expects(:make_label_to_path_map).returns(map)
277
+ provider.jobsearch("org.mozilla.puppet").should == { "org.mozilla.puppet" => "/path/to/puppet.plist" }
278
+ end
279
+ it "refreshes the label_to_path_map when label is not found" do
280
+ provider.expects(:make_label_to_path_map).with().returns({})
281
+ provider.expects(:make_label_to_path_map).with(true).returns(map)
282
+ provider.jobsearch("org.mozilla.puppet").should == { "org.mozilla.puppet" => "/path/to/puppet.plist" }
283
+ end
284
+ it "raises Puppet::Error when the label is still not found" do
285
+ provider.expects(:make_label_to_path_map).with().returns(map)
286
+ provider.expects(:make_label_to_path_map).with(true).returns(map)
287
+ expect { provider.jobsearch("NOSUCH") }.to raise_error(Puppet::Error)
235
288
  end
236
289
  end
237
290
  end