chef 10.28.2-x86-mingw32

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 (960) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/README.rdoc +177 -0
  4. data/Rakefile +128 -0
  5. data/bin/chef-client +26 -0
  6. data/bin/chef-solo +25 -0
  7. data/bin/knife +26 -0
  8. data/bin/shef +34 -0
  9. data/distro/README +2 -0
  10. data/distro/arch/etc/conf.d/chef-client.conf +5 -0
  11. data/distro/arch/etc/conf.d/chef-expander.conf +8 -0
  12. data/distro/arch/etc/conf.d/chef-server-webui.conf +10 -0
  13. data/distro/arch/etc/conf.d/chef-server.conf +10 -0
  14. data/distro/arch/etc/conf.d/chef-solr.conf +8 -0
  15. data/distro/arch/etc/rc.d/chef-client +90 -0
  16. data/distro/arch/etc/rc.d/chef-expander +78 -0
  17. data/distro/arch/etc/rc.d/chef-server +78 -0
  18. data/distro/arch/etc/rc.d/chef-server-webui +78 -0
  19. data/distro/arch/etc/rc.d/chef-solr +78 -0
  20. data/distro/common/html/chef-client.8.html +145 -0
  21. data/distro/common/html/chef-expander.8.html +164 -0
  22. data/distro/common/html/chef-expanderctl.8.html +146 -0
  23. data/distro/common/html/chef-server-webui.8.html +185 -0
  24. data/distro/common/html/chef-server.8.html +182 -0
  25. data/distro/common/html/chef-solo.8.html +185 -0
  26. data/distro/common/html/chef-solr.8.html +165 -0
  27. data/distro/common/html/knife-bootstrap.1.html +241 -0
  28. data/distro/common/html/knife-client.1.html +219 -0
  29. data/distro/common/html/knife-configure.1.html +170 -0
  30. data/distro/common/html/knife-cookbook-site.1.html +241 -0
  31. data/distro/common/html/knife-cookbook.1.html +381 -0
  32. data/distro/common/html/knife-data-bag.1.html +235 -0
  33. data/distro/common/html/knife-environment.1.html +265 -0
  34. data/distro/common/html/knife-exec.1.html +134 -0
  35. data/distro/common/html/knife-index.1.html +125 -0
  36. data/distro/common/html/knife-node.1.html +250 -0
  37. data/distro/common/html/knife-recipe.1.html +92 -0
  38. data/distro/common/html/knife-role.1.html +200 -0
  39. data/distro/common/html/knife-search.1.html +288 -0
  40. data/distro/common/html/knife-ssh.1.html +156 -0
  41. data/distro/common/html/knife-status.1.html +128 -0
  42. data/distro/common/html/knife-tag.1.html +137 -0
  43. data/distro/common/html/knife.1.html +320 -0
  44. data/distro/common/html/shef.1.html +283 -0
  45. data/distro/common/man/man1/knife-bootstrap.1 +201 -0
  46. data/distro/common/man/man1/knife-client.1 +99 -0
  47. data/distro/common/man/man1/knife-configure.1 +88 -0
  48. data/distro/common/man/man1/knife-cookbook-site.1 +145 -0
  49. data/distro/common/man/man1/knife-cookbook.1 +332 -0
  50. data/distro/common/man/man1/knife-data-bag.1 +123 -0
  51. data/distro/common/man/man1/knife-environment.1 +168 -0
  52. data/distro/common/man/man1/knife-exec.1 +46 -0
  53. data/distro/common/man/man1/knife-index.1 +29 -0
  54. data/distro/common/man/man1/knife-node.1 +134 -0
  55. data/distro/common/man/man1/knife-role.1 +88 -0
  56. data/distro/common/man/man1/knife-search.1 +280 -0
  57. data/distro/common/man/man1/knife-ssh.1 +79 -0
  58. data/distro/common/man/man1/knife-status.1 +29 -0
  59. data/distro/common/man/man1/knife-tag.1 +43 -0
  60. data/distro/common/man/man1/knife.1 +288 -0
  61. data/distro/common/man/man1/shef.1 +256 -0
  62. data/distro/common/man/man8/chef-client.8 +104 -0
  63. data/distro/common/man/man8/chef-expander.8 +97 -0
  64. data/distro/common/man/man8/chef-expanderctl.8 +62 -0
  65. data/distro/common/man/man8/chef-server-webui.8 +155 -0
  66. data/distro/common/man/man8/chef-server.8 +147 -0
  67. data/distro/common/man/man8/chef-solo.8 +126 -0
  68. data/distro/common/man/man8/chef-solr.8 +122 -0
  69. data/distro/common/markdown/README +3 -0
  70. data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -0
  71. data/distro/common/markdown/man1/knife-client.mkd +103 -0
  72. data/distro/common/markdown/man1/knife-configure.mkd +70 -0
  73. data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -0
  74. data/distro/common/markdown/man1/knife-cookbook.mkd +263 -0
  75. data/distro/common/markdown/man1/knife-data-bag.mkd +121 -0
  76. data/distro/common/markdown/man1/knife-environment.mkd +151 -0
  77. data/distro/common/markdown/man1/knife-exec.mkd +37 -0
  78. data/distro/common/markdown/man1/knife-index.mkd +30 -0
  79. data/distro/common/markdown/man1/knife-node.mkd +130 -0
  80. data/distro/common/markdown/man1/knife-role.mkd +85 -0
  81. data/distro/common/markdown/man1/knife-search.mkd +180 -0
  82. data/distro/common/markdown/man1/knife-ssh.mkd +69 -0
  83. data/distro/common/markdown/man1/knife-status.mkd +36 -0
  84. data/distro/common/markdown/man1/knife-tag.mkd +39 -0
  85. data/distro/common/markdown/man1/knife.mkd +218 -0
  86. data/distro/common/markdown/man1/shef.mkd +189 -0
  87. data/distro/common/markdown/man8/chef-client.mkd +74 -0
  88. data/distro/common/markdown/man8/chef-expander.mkd +82 -0
  89. data/distro/common/markdown/man8/chef-expanderctl.mkd +58 -0
  90. data/distro/common/markdown/man8/chef-server-webui.mkd +121 -0
  91. data/distro/common/markdown/man8/chef-server.mkd +121 -0
  92. data/distro/common/markdown/man8/chef-solo.mkd +107 -0
  93. data/distro/common/markdown/man8/chef-solr.mkd +89 -0
  94. data/distro/debian/etc/default/chef-client +5 -0
  95. data/distro/debian/etc/default/chef-expander +8 -0
  96. data/distro/debian/etc/default/chef-server +9 -0
  97. data/distro/debian/etc/default/chef-server-webui +9 -0
  98. data/distro/debian/etc/default/chef-solr +8 -0
  99. data/distro/debian/etc/init.d/chef-client +210 -0
  100. data/distro/debian/etc/init.d/chef-expander +176 -0
  101. data/distro/debian/etc/init.d/chef-server +122 -0
  102. data/distro/debian/etc/init.d/chef-server-webui +123 -0
  103. data/distro/debian/etc/init.d/chef-solr +176 -0
  104. data/distro/debian/etc/init/chef-client.conf +17 -0
  105. data/distro/debian/etc/init/chef-expander.conf +17 -0
  106. data/distro/debian/etc/init/chef-server-webui.conf +17 -0
  107. data/distro/debian/etc/init/chef-server.conf +17 -0
  108. data/distro/debian/etc/init/chef-solr.conf +17 -0
  109. data/distro/redhat/etc/init.d/chef-client +121 -0
  110. data/distro/redhat/etc/init.d/chef-expander +104 -0
  111. data/distro/redhat/etc/init.d/chef-server +112 -0
  112. data/distro/redhat/etc/init.d/chef-server-webui +112 -0
  113. data/distro/redhat/etc/init.d/chef-solr +104 -0
  114. data/distro/redhat/etc/logrotate.d/chef-client +8 -0
  115. data/distro/redhat/etc/logrotate.d/chef-expander +8 -0
  116. data/distro/redhat/etc/logrotate.d/chef-server +8 -0
  117. data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
  118. data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
  119. data/distro/redhat/etc/sysconfig/chef-client +15 -0
  120. data/distro/redhat/etc/sysconfig/chef-expander +7 -0
  121. data/distro/redhat/etc/sysconfig/chef-server +14 -0
  122. data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
  123. data/distro/redhat/etc/sysconfig/chef-solr +8 -0
  124. data/distro/windows/service_manager.rb +164 -0
  125. data/lib/chef.rb +41 -0
  126. data/lib/chef/api_client.rb +293 -0
  127. data/lib/chef/application.rb +168 -0
  128. data/lib/chef/application/agent.rb +18 -0
  129. data/lib/chef/application/client.rb +322 -0
  130. data/lib/chef/application/knife.rb +183 -0
  131. data/lib/chef/application/solo.rb +248 -0
  132. data/lib/chef/application/windows_service.rb +227 -0
  133. data/lib/chef/applications.rb +4 -0
  134. data/lib/chef/certificate.rb +161 -0
  135. data/lib/chef/checksum.rb +167 -0
  136. data/lib/chef/checksum/storage.rb +18 -0
  137. data/lib/chef/checksum/storage/filesystem.rb +56 -0
  138. data/lib/chef/checksum_cache.rb +190 -0
  139. data/lib/chef/client.rb +499 -0
  140. data/lib/chef/config.rb +330 -0
  141. data/lib/chef/cookbook/chefignore.rb +66 -0
  142. data/lib/chef/cookbook/cookbook_collection.rb +45 -0
  143. data/lib/chef/cookbook/cookbook_version_loader.rb +171 -0
  144. data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
  145. data/lib/chef/cookbook/file_vendor.rb +48 -0
  146. data/lib/chef/cookbook/metadata.rb +629 -0
  147. data/lib/chef/cookbook/remote_file_vendor.rb +84 -0
  148. data/lib/chef/cookbook/synchronizer.rb +218 -0
  149. data/lib/chef/cookbook/syntax_check.rb +136 -0
  150. data/lib/chef/cookbook_loader.rb +121 -0
  151. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  152. data/lib/chef/cookbook_uploader.rb +173 -0
  153. data/lib/chef/cookbook_version.rb +1081 -0
  154. data/lib/chef/cookbook_version_selector.rb +168 -0
  155. data/lib/chef/couchdb.rb +246 -0
  156. data/lib/chef/daemon.rb +187 -0
  157. data/lib/chef/data_bag.rb +239 -0
  158. data/lib/chef/data_bag_item.rb +277 -0
  159. data/lib/chef/encrypted_data_bag_item.rb +268 -0
  160. data/lib/chef/environment.rb +458 -0
  161. data/lib/chef/event_dispatch/base.rb +311 -0
  162. data/lib/chef/event_dispatch/dispatcher.rb +42 -0
  163. data/lib/chef/exceptions.rb +192 -0
  164. data/lib/chef/file_access_control.rb +75 -0
  165. data/lib/chef/file_access_control/unix.rb +216 -0
  166. data/lib/chef/file_access_control/windows.rb +310 -0
  167. data/lib/chef/file_cache.rb +220 -0
  168. data/lib/chef/formatters/base.rb +247 -0
  169. data/lib/chef/formatters/doc.rb +236 -0
  170. data/lib/chef/formatters/error_descriptor.rb +66 -0
  171. data/lib/chef/formatters/error_inspectors.rb +19 -0
  172. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +111 -0
  173. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +106 -0
  174. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +146 -0
  175. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +80 -0
  176. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +125 -0
  177. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +137 -0
  178. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +109 -0
  179. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +118 -0
  180. data/lib/chef/formatters/error_mapper.rb +85 -0
  181. data/lib/chef/formatters/minimal.rb +235 -0
  182. data/lib/chef/handler.rb +235 -0
  183. data/lib/chef/handler/error_report.rb +33 -0
  184. data/lib/chef/handler/json_file.rb +64 -0
  185. data/lib/chef/index_queue.rb +29 -0
  186. data/lib/chef/index_queue/amqp_client.rb +116 -0
  187. data/lib/chef/index_queue/consumer.rb +76 -0
  188. data/lib/chef/index_queue/indexable.rb +109 -0
  189. data/lib/chef/json_compat.rb +149 -0
  190. data/lib/chef/knife.rb +537 -0
  191. data/lib/chef/knife/bootstrap.rb +233 -0
  192. data/lib/chef/knife/bootstrap/archlinux-gems.erb +62 -0
  193. data/lib/chef/knife/bootstrap/centos5-gems.erb +62 -0
  194. data/lib/chef/knife/bootstrap/chef-full.erb +60 -0
  195. data/lib/chef/knife/bootstrap/fedora13-gems.erb +44 -0
  196. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +53 -0
  197. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +48 -0
  198. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +46 -0
  199. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +60 -0
  200. data/lib/chef/knife/client_bulk_delete.rb +65 -0
  201. data/lib/chef/knife/client_create.rb +80 -0
  202. data/lib/chef/knife/client_delete.rb +46 -0
  203. data/lib/chef/knife/client_edit.rb +45 -0
  204. data/lib/chef/knife/client_list.rb +42 -0
  205. data/lib/chef/knife/client_reregister.rb +59 -0
  206. data/lib/chef/knife/client_show.rb +52 -0
  207. data/lib/chef/knife/configure.rb +168 -0
  208. data/lib/chef/knife/configure_client.rb +50 -0
  209. data/lib/chef/knife/cookbook_bulk_delete.rb +72 -0
  210. data/lib/chef/knife/cookbook_create.rb +447 -0
  211. data/lib/chef/knife/cookbook_delete.rb +151 -0
  212. data/lib/chef/knife/cookbook_download.rb +137 -0
  213. data/lib/chef/knife/cookbook_list.rb +47 -0
  214. data/lib/chef/knife/cookbook_metadata.rb +107 -0
  215. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
  216. data/lib/chef/knife/cookbook_show.rb +102 -0
  217. data/lib/chef/knife/cookbook_site_download.rb +109 -0
  218. data/lib/chef/knife/cookbook_site_install.rb +164 -0
  219. data/lib/chef/knife/cookbook_site_list.rb +62 -0
  220. data/lib/chef/knife/cookbook_site_search.rb +51 -0
  221. data/lib/chef/knife/cookbook_site_share.rb +114 -0
  222. data/lib/chef/knife/cookbook_site_show.rb +60 -0
  223. data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
  224. data/lib/chef/knife/cookbook_site_vendor.rb +46 -0
  225. data/lib/chef/knife/cookbook_test.rb +93 -0
  226. data/lib/chef/knife/cookbook_upload.rb +290 -0
  227. data/lib/chef/knife/core/bootstrap_context.rb +106 -0
  228. data/lib/chef/knife/core/cookbook_scm_repo.rb +160 -0
  229. data/lib/chef/knife/core/generic_presenter.rb +191 -0
  230. data/lib/chef/knife/core/node_editor.rb +130 -0
  231. data/lib/chef/knife/core/node_presenter.rb +137 -0
  232. data/lib/chef/knife/core/object_loader.rb +112 -0
  233. data/lib/chef/knife/core/subcommand_loader.rb +112 -0
  234. data/lib/chef/knife/core/text_formatter.rb +100 -0
  235. data/lib/chef/knife/core/ui.rb +217 -0
  236. data/lib/chef/knife/data_bag_create.rb +93 -0
  237. data/lib/chef/knife/data_bag_delete.rb +51 -0
  238. data/lib/chef/knife/data_bag_edit.rb +94 -0
  239. data/lib/chef/knife/data_bag_from_file.rb +136 -0
  240. data/lib/chef/knife/data_bag_list.rb +46 -0
  241. data/lib/chef/knife/data_bag_show.rb +81 -0
  242. data/lib/chef/knife/environment_create.rb +53 -0
  243. data/lib/chef/knife/environment_delete.rb +45 -0
  244. data/lib/chef/knife/environment_edit.rb +45 -0
  245. data/lib/chef/knife/environment_from_file.rb +83 -0
  246. data/lib/chef/knife/environment_list.rb +42 -0
  247. data/lib/chef/knife/environment_show.rb +46 -0
  248. data/lib/chef/knife/exec.rb +86 -0
  249. data/lib/chef/knife/help.rb +103 -0
  250. data/lib/chef/knife/help_topics.rb +4 -0
  251. data/lib/chef/knife/index_rebuild.rb +50 -0
  252. data/lib/chef/knife/node_bulk_delete.rb +80 -0
  253. data/lib/chef/knife/node_create.rb +50 -0
  254. data/lib/chef/knife/node_delete.rb +47 -0
  255. data/lib/chef/knife/node_edit.rb +72 -0
  256. data/lib/chef/knife/node_from_file.rb +50 -0
  257. data/lib/chef/knife/node_list.rb +46 -0
  258. data/lib/chef/knife/node_run_list_add.rb +75 -0
  259. data/lib/chef/knife/node_run_list_remove.rb +48 -0
  260. data/lib/chef/knife/node_show.rb +73 -0
  261. data/lib/chef/knife/recipe_list.rb +32 -0
  262. data/lib/chef/knife/role_bulk_delete.rb +70 -0
  263. data/lib/chef/knife/role_create.rb +55 -0
  264. data/lib/chef/knife/role_delete.rb +47 -0
  265. data/lib/chef/knife/role_edit.rb +48 -0
  266. data/lib/chef/knife/role_from_file.rb +56 -0
  267. data/lib/chef/knife/role_list.rb +43 -0
  268. data/lib/chef/knife/role_show.rb +54 -0
  269. data/lib/chef/knife/search.rb +141 -0
  270. data/lib/chef/knife/ssh.rb +459 -0
  271. data/lib/chef/knife/status.rb +119 -0
  272. data/lib/chef/knife/tag_create.rb +52 -0
  273. data/lib/chef/knife/tag_delete.rb +60 -0
  274. data/lib/chef/knife/tag_list.rb +47 -0
  275. data/lib/chef/log.rb +39 -0
  276. data/lib/chef/mash.rb +225 -0
  277. data/lib/chef/mixin/check_helper.rb +31 -0
  278. data/lib/chef/mixin/checksum.rb +32 -0
  279. data/lib/chef/mixin/command.rb +164 -0
  280. data/lib/chef/mixin/command/unix.rb +220 -0
  281. data/lib/chef/mixin/command/windows.rb +76 -0
  282. data/lib/chef/mixin/convert_to_class_name.rb +65 -0
  283. data/lib/chef/mixin/create_path.rb +57 -0
  284. data/lib/chef/mixin/deep_merge.rb +247 -0
  285. data/lib/chef/mixin/deprecation.rb +65 -0
  286. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -0
  287. data/lib/chef/mixin/file_class.rb +46 -0
  288. data/lib/chef/mixin/from_file.rb +50 -0
  289. data/lib/chef/mixin/get_source_from_package.rb +42 -0
  290. data/lib/chef/mixin/language.rb +249 -0
  291. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  292. data/lib/chef/mixin/language_include_recipe.rb +58 -0
  293. data/lib/chef/mixin/params_validate.rb +238 -0
  294. data/lib/chef/mixin/path_sanity.rb +67 -0
  295. data/lib/chef/mixin/recipe_definition_dsl_core.rb +86 -0
  296. data/lib/chef/mixin/securable.rb +180 -0
  297. data/lib/chef/mixin/shell_out.rb +69 -0
  298. data/lib/chef/mixin/template.rb +100 -0
  299. data/lib/chef/mixin/why_run.rb +332 -0
  300. data/lib/chef/mixin/xml_escape.rb +140 -0
  301. data/lib/chef/mixins.rb +18 -0
  302. data/lib/chef/monkey_patches/dir.rb +36 -0
  303. data/lib/chef/monkey_patches/fileutils.rb +65 -0
  304. data/lib/chef/monkey_patches/moneta.rb +50 -0
  305. data/lib/chef/monkey_patches/net_http.rb +22 -0
  306. data/lib/chef/monkey_patches/numeric.rb +15 -0
  307. data/lib/chef/monkey_patches/object.rb +9 -0
  308. data/lib/chef/monkey_patches/regexp.rb +34 -0
  309. data/lib/chef/monkey_patches/string.rb +49 -0
  310. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  311. data/lib/chef/nil_argument.rb +3 -0
  312. data/lib/chef/node.rb +682 -0
  313. data/lib/chef/node/attribute.rb +504 -0
  314. data/lib/chef/openid_registration.rb +187 -0
  315. data/lib/chef/platform.rb +520 -0
  316. data/lib/chef/provider.rb +223 -0
  317. data/lib/chef/provider/breakpoint.rb +36 -0
  318. data/lib/chef/provider/cookbook_file.rb +105 -0
  319. data/lib/chef/provider/cron.rb +214 -0
  320. data/lib/chef/provider/cron/solaris.rb +56 -0
  321. data/lib/chef/provider/deploy.rb +474 -0
  322. data/lib/chef/provider/deploy/revision.rb +80 -0
  323. data/lib/chef/provider/deploy/timestamped.rb +32 -0
  324. data/lib/chef/provider/directory.rb +128 -0
  325. data/lib/chef/provider/env.rb +152 -0
  326. data/lib/chef/provider/env/windows.rb +75 -0
  327. data/lib/chef/provider/erl_call.rb +106 -0
  328. data/lib/chef/provider/execute.rb +68 -0
  329. data/lib/chef/provider/file.rb +355 -0
  330. data/lib/chef/provider/git.rb +260 -0
  331. data/lib/chef/provider/group.rb +159 -0
  332. data/lib/chef/provider/group/aix.rb +70 -0
  333. data/lib/chef/provider/group/dscl.rb +129 -0
  334. data/lib/chef/provider/group/gpasswd.rb +65 -0
  335. data/lib/chef/provider/group/groupadd.rb +96 -0
  336. data/lib/chef/provider/group/groupmod.rb +120 -0
  337. data/lib/chef/provider/group/pw.rb +93 -0
  338. data/lib/chef/provider/group/suse.rb +60 -0
  339. data/lib/chef/provider/group/usermod.rb +68 -0
  340. data/lib/chef/provider/group/windows.rb +79 -0
  341. data/lib/chef/provider/http_request.rb +136 -0
  342. data/lib/chef/provider/ifconfig.rb +214 -0
  343. data/lib/chef/provider/link.rb +130 -0
  344. data/lib/chef/provider/log.rb +54 -0
  345. data/lib/chef/provider/mdadm.rb +92 -0
  346. data/lib/chef/provider/mount.rb +128 -0
  347. data/lib/chef/provider/mount/mount.rb +252 -0
  348. data/lib/chef/provider/mount/windows.rb +81 -0
  349. data/lib/chef/provider/ohai.rb +47 -0
  350. data/lib/chef/provider/package.rb +229 -0
  351. data/lib/chef/provider/package/apt.rb +147 -0
  352. data/lib/chef/provider/package/dpkg.rb +128 -0
  353. data/lib/chef/provider/package/easy_install.rb +136 -0
  354. data/lib/chef/provider/package/freebsd.rb +149 -0
  355. data/lib/chef/provider/package/ips.rb +101 -0
  356. data/lib/chef/provider/package/macports.rb +105 -0
  357. data/lib/chef/provider/package/pacman.rb +111 -0
  358. data/lib/chef/provider/package/portage.rb +143 -0
  359. data/lib/chef/provider/package/rpm.rb +121 -0
  360. data/lib/chef/provider/package/rubygems.rb +580 -0
  361. data/lib/chef/provider/package/smartos.rb +84 -0
  362. data/lib/chef/provider/package/solaris.rb +139 -0
  363. data/lib/chef/provider/package/yum-dump.py +307 -0
  364. data/lib/chef/provider/package/yum.rb +1261 -0
  365. data/lib/chef/provider/package/zypper.rb +144 -0
  366. data/lib/chef/provider/remote_directory.rb +178 -0
  367. data/lib/chef/provider/remote_file.rb +126 -0
  368. data/lib/chef/provider/resource_update.rb +55 -0
  369. data/lib/chef/provider/route.rb +223 -0
  370. data/lib/chef/provider/ruby_block.rb +39 -0
  371. data/lib/chef/provider/script.rb +57 -0
  372. data/lib/chef/provider/service.rb +158 -0
  373. data/lib/chef/provider/service/arch.rb +113 -0
  374. data/lib/chef/provider/service/debian.rb +152 -0
  375. data/lib/chef/provider/service/freebsd.rb +175 -0
  376. data/lib/chef/provider/service/gentoo.rb +67 -0
  377. data/lib/chef/provider/service/init.rb +87 -0
  378. data/lib/chef/provider/service/insserv.rb +52 -0
  379. data/lib/chef/provider/service/invokercd.rb +35 -0
  380. data/lib/chef/provider/service/macosx.rb +144 -0
  381. data/lib/chef/provider/service/redhat.rb +77 -0
  382. data/lib/chef/provider/service/simple.rb +172 -0
  383. data/lib/chef/provider/service/solaris.rb +86 -0
  384. data/lib/chef/provider/service/systemd.rb +115 -0
  385. data/lib/chef/provider/service/upstart.rb +232 -0
  386. data/lib/chef/provider/service/windows.rb +163 -0
  387. data/lib/chef/provider/subversion.rb +214 -0
  388. data/lib/chef/provider/template.rb +117 -0
  389. data/lib/chef/provider/user.rb +207 -0
  390. data/lib/chef/provider/user/dscl.rb +280 -0
  391. data/lib/chef/provider/user/pw.rb +113 -0
  392. data/lib/chef/provider/user/solaris.rb +90 -0
  393. data/lib/chef/provider/user/useradd.rb +153 -0
  394. data/lib/chef/provider/user/windows.rb +124 -0
  395. data/lib/chef/providers.rb +101 -0
  396. data/lib/chef/recipe.rb +129 -0
  397. data/lib/chef/reserved_names.rb +9 -0
  398. data/lib/chef/resource.rb +912 -0
  399. data/lib/chef/resource/apt_package.rb +43 -0
  400. data/lib/chef/resource/bash.rb +33 -0
  401. data/lib/chef/resource/breakpoint.rb +35 -0
  402. data/lib/chef/resource/chef_gem.rb +53 -0
  403. data/lib/chef/resource/conditional.rb +101 -0
  404. data/lib/chef/resource/cookbook_file.rb +52 -0
  405. data/lib/chef/resource/cron.rb +202 -0
  406. data/lib/chef/resource/csh.rb +33 -0
  407. data/lib/chef/resource/deploy.rb +403 -0
  408. data/lib/chef/resource/deploy_revision.rb +40 -0
  409. data/lib/chef/resource/directory.rb +65 -0
  410. data/lib/chef/resource/dpkg_package.rb +34 -0
  411. data/lib/chef/resource/easy_install_package.rb +57 -0
  412. data/lib/chef/resource/env.rb +63 -0
  413. data/lib/chef/resource/erl_call.rb +86 -0
  414. data/lib/chef/resource/execute.rb +132 -0
  415. data/lib/chef/resource/file.rb +96 -0
  416. data/lib/chef/resource/freebsd_package.rb +35 -0
  417. data/lib/chef/resource/gem_package.rb +53 -0
  418. data/lib/chef/resource/git.rb +46 -0
  419. data/lib/chef/resource/group.rb +83 -0
  420. data/lib/chef/resource/http_request.rb +64 -0
  421. data/lib/chef/resource/ifconfig.rb +149 -0
  422. data/lib/chef/resource/ips_package.rb +42 -0
  423. data/lib/chef/resource/link.rb +92 -0
  424. data/lib/chef/resource/log.rb +74 -0
  425. data/lib/chef/resource/macports_package.rb +29 -0
  426. data/lib/chef/resource/mdadm.rb +105 -0
  427. data/lib/chef/resource/mount.rb +139 -0
  428. data/lib/chef/resource/ohai.rb +54 -0
  429. data/lib/chef/resource/package.rb +84 -0
  430. data/lib/chef/resource/pacman_package.rb +33 -0
  431. data/lib/chef/resource/perl.rb +33 -0
  432. data/lib/chef/resource/portage_package.rb +33 -0
  433. data/lib/chef/resource/python.rb +33 -0
  434. data/lib/chef/resource/remote_directory.rb +125 -0
  435. data/lib/chef/resource/remote_file.rb +90 -0
  436. data/lib/chef/resource/route.rb +140 -0
  437. data/lib/chef/resource/rpm_package.rb +34 -0
  438. data/lib/chef/resource/ruby.rb +33 -0
  439. data/lib/chef/resource/ruby_block.rb +51 -0
  440. data/lib/chef/resource/scm.rb +151 -0
  441. data/lib/chef/resource/script.rb +63 -0
  442. data/lib/chef/resource/service.rb +164 -0
  443. data/lib/chef/resource/smartos_package.rb +36 -0
  444. data/lib/chef/resource/solaris_package.rb +36 -0
  445. data/lib/chef/resource/subversion.rb +37 -0
  446. data/lib/chef/resource/template.rb +76 -0
  447. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  448. data/lib/chef/resource/user.rb +134 -0
  449. data/lib/chef/resource/yum_package.rb +63 -0
  450. data/lib/chef/resource_collection.rb +217 -0
  451. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  452. data/lib/chef/resource_definition.rb +67 -0
  453. data/lib/chef/resource_definition_list.rb +38 -0
  454. data/lib/chef/resource_platform_map.rb +151 -0
  455. data/lib/chef/resource_reporter.rb +281 -0
  456. data/lib/chef/resources.rb +67 -0
  457. data/lib/chef/rest.rb +510 -0
  458. data/lib/chef/rest/auth_credentials.rb +73 -0
  459. data/lib/chef/rest/cookie_jar.rb +31 -0
  460. data/lib/chef/rest/rest_request.rb +229 -0
  461. data/lib/chef/role.rb +349 -0
  462. data/lib/chef/run_context.rb +236 -0
  463. data/lib/chef/run_list.rb +165 -0
  464. data/lib/chef/run_list/run_list_expansion.rb +206 -0
  465. data/lib/chef/run_list/run_list_item.rb +99 -0
  466. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  467. data/lib/chef/run_status.rb +124 -0
  468. data/lib/chef/runner.rb +95 -0
  469. data/lib/chef/sandbox.rb +153 -0
  470. data/lib/chef/scan_access_control.rb +135 -0
  471. data/lib/chef/search/query.rb +65 -0
  472. data/lib/chef/shef.rb +327 -0
  473. data/lib/chef/shef/ext.rb +591 -0
  474. data/lib/chef/shef/model_wrapper.rb +120 -0
  475. data/lib/chef/shef/shef_rest.rb +28 -0
  476. data/lib/chef/shef/shef_session.rb +296 -0
  477. data/lib/chef/shell_out.rb +6 -0
  478. data/lib/chef/solr_query.rb +187 -0
  479. data/lib/chef/solr_query/lucene.treetop +150 -0
  480. data/lib/chef/solr_query/lucene_nodes.rb +285 -0
  481. data/lib/chef/solr_query/query_transform.rb +65 -0
  482. data/lib/chef/solr_query/solr_http_request.rb +132 -0
  483. data/lib/chef/streaming_cookbook_uploader.rb +201 -0
  484. data/lib/chef/tasks/chef_repo.rake +334 -0
  485. data/lib/chef/util/file_edit.rb +132 -0
  486. data/lib/chef/util/windows.rb +56 -0
  487. data/lib/chef/util/windows/net_group.rb +101 -0
  488. data/lib/chef/util/windows/net_use.rb +121 -0
  489. data/lib/chef/util/windows/net_user.rb +198 -0
  490. data/lib/chef/util/windows/volume.rb +59 -0
  491. data/lib/chef/version.rb +23 -0
  492. data/lib/chef/version_class.rb +70 -0
  493. data/lib/chef/version_constraint.rb +116 -0
  494. data/lib/chef/webui_user.rb +231 -0
  495. data/lib/chef/win32/api.rb +364 -0
  496. data/lib/chef/win32/api/error.rb +921 -0
  497. data/lib/chef/win32/api/file.rb +535 -0
  498. data/lib/chef/win32/api/memory.rb +105 -0
  499. data/lib/chef/win32/api/process.rb +41 -0
  500. data/lib/chef/win32/api/psapi.rb +51 -0
  501. data/lib/chef/win32/api/security.rb +341 -0
  502. data/lib/chef/win32/api/system.rb +192 -0
  503. data/lib/chef/win32/api/unicode.rb +178 -0
  504. data/lib/chef/win32/error.rb +73 -0
  505. data/lib/chef/win32/file.rb +167 -0
  506. data/lib/chef/win32/file/info.rb +100 -0
  507. data/lib/chef/win32/handle.rb +55 -0
  508. data/lib/chef/win32/memory.rb +101 -0
  509. data/lib/chef/win32/process.rb +84 -0
  510. data/lib/chef/win32/security.rb +489 -0
  511. data/lib/chef/win32/security/ace.rb +125 -0
  512. data/lib/chef/win32/security/acl.rb +101 -0
  513. data/lib/chef/win32/security/securable_object.rb +109 -0
  514. data/lib/chef/win32/security/security_descriptor.rb +93 -0
  515. data/lib/chef/win32/security/sid.rb +199 -0
  516. data/lib/chef/win32/security/token.rb +64 -0
  517. data/lib/chef/win32/unicode.rb +43 -0
  518. data/lib/chef/win32/version.rb +119 -0
  519. data/spec/data/bad-config.rb +1 -0
  520. data/spec/data/big_json.json +2 -0
  521. data/spec/data/big_json_plus_one.json +2 -0
  522. data/spec/data/bootstrap/test-hints.erb +12 -0
  523. data/spec/data/bootstrap/test.erb +1 -0
  524. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +3 -0
  525. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -0
  526. data/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb +1 -0
  527. data/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz +1 -0
  528. data/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb +1 -0
  529. data/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb +1 -0
  530. data/spec/data/cb_version_cookbooks/tatft/recipes/default.rb +1 -0
  531. data/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb +1 -0
  532. data/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb +0 -0
  533. data/spec/data/checksum/random.txt +1 -0
  534. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -0
  535. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0 +0 -0
  536. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -0
  537. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -0
  538. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -0
  539. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -0
  540. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -0
  541. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -0
  542. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -0
  543. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -0
  544. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -0
  545. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -0
  546. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -0
  547. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -0
  548. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -0
  549. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -0
  550. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -0
  551. data/spec/data/config.rb +6 -0
  552. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -0
  553. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -0
  554. data/spec/data/cookbooks/apache2/recipes/default.rb +3 -0
  555. data/spec/data/cookbooks/borken/recipes/default.rb +2 -0
  556. data/spec/data/cookbooks/borken/templates/default/borken.erb +2 -0
  557. data/spec/data/cookbooks/chefignore +8 -0
  558. data/spec/data/cookbooks/java/files/default/java.response +2 -0
  559. data/spec/data/cookbooks/openldap/attributes/default.rb +15 -0
  560. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -0
  561. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -0
  562. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -0
  563. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
  564. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
  565. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
  566. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +3 -0
  567. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +3 -0
  568. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
  569. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +3 -0
  570. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +3 -0
  571. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -0
  572. data/spec/data/cookbooks/openldap/recipes/default.rb +3 -0
  573. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -0
  574. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -0
  575. data/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb +1 -0
  576. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -0
  577. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -0
  578. data/spec/data/definitions/test.rb +5 -0
  579. data/spec/data/environment-config.rb +5 -0
  580. data/spec/data/fileedit/blank +0 -0
  581. data/spec/data/fileedit/hosts +4 -0
  582. data/spec/data/gems/chef-integration-test-0.1.0.gem +0 -0
  583. data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
  584. data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
  585. data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
  586. data/spec/data/kitchen/chefignore +6 -0
  587. data/spec/data/kitchen/openldap/attributes/default.rb +3 -0
  588. data/spec/data/kitchen/openldap/attributes/robinson.rb +3 -0
  589. data/spec/data/kitchen/openldap/definitions/client.rb +3 -0
  590. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +3 -0
  591. data/spec/data/kitchen/openldap/recipes/gigantor.rb +3 -0
  592. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +3 -0
  593. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -0
  594. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  595. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  596. data/spec/data/knife_subcommand/test_explicit_category.rb +7 -0
  597. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -0
  598. data/spec/data/knife_subcommand/test_yourself.rb +13 -0
  599. data/spec/data/lwrp/providers/buck_passer.rb +3 -0
  600. data/spec/data/lwrp/providers/buck_passer_2.rb +10 -0
  601. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +16 -0
  602. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -0
  603. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -0
  604. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -0
  605. data/spec/data/lwrp/resources/bar.rb +1 -0
  606. data/spec/data/lwrp/resources/foo.rb +3 -0
  607. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -0
  608. data/spec/data/lwrp_const_scoping/resources/conflict.rb +0 -0
  609. data/spec/data/lwrp_override/providers/buck_passer.rb +10 -0
  610. data/spec/data/lwrp_override/resources/foo.rb +4 -0
  611. data/spec/data/metadata/quick_start/metadata.rb +19 -0
  612. data/spec/data/nodes/default.rb +15 -0
  613. data/spec/data/nodes/test.example.com.rb +17 -0
  614. data/spec/data/nodes/test.rb +15 -0
  615. data/spec/data/object_loader/environments/test.json +5 -0
  616. data/spec/data/object_loader/environments/test.rb +2 -0
  617. data/spec/data/object_loader/environments/test_json_class.json +6 -0
  618. data/spec/data/object_loader/nodes/test.json +5 -0
  619. data/spec/data/object_loader/nodes/test.rb +2 -0
  620. data/spec/data/object_loader/nodes/test_json_class.json +6 -0
  621. data/spec/data/object_loader/roles/test.json +5 -0
  622. data/spec/data/object_loader/roles/test.rb +2 -0
  623. data/spec/data/object_loader/roles/test_json_class.json +6 -0
  624. data/spec/data/old_home_dir/my-dot-emacs +0 -0
  625. data/spec/data/old_home_dir/my-dot-vim +0 -0
  626. data/spec/data/recipes/test.rb +7 -0
  627. data/spec/data/remote_directory_data/remote_dir_file.txt +1 -0
  628. data/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt +1 -0
  629. data/spec/data/remote_file/nyan_cat.png +0 -0
  630. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -0
  631. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -0
  632. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -0
  633. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -0
  634. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -0
  635. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -0
  636. data/spec/data/run_context/nodes/run_context.rb +5 -0
  637. data/spec/data/search_queries_to_transform.txt +98 -0
  638. data/spec/data/ssl/5e707473.0 +18 -0
  639. data/spec/data/ssl/chef-rspec.cert +27 -0
  640. data/spec/data/ssl/chef-rspec.key +27 -0
  641. data/spec/data/ssl/key.pem +15 -0
  642. data/spec/data/ssl/private_key.pem +27 -0
  643. data/spec/data/ssl/private_key_with_whitespace.pem +32 -0
  644. data/spec/data/templates/seattle.txt +1 -0
  645. data/spec/functional/knife/cookbook_delete_spec.rb +160 -0
  646. data/spec/functional/knife/exec_spec.rb +60 -0
  647. data/spec/functional/knife/ssh_spec.rb +268 -0
  648. data/spec/functional/resource/cookbook_file_spec.rb +75 -0
  649. data/spec/functional/resource/deploy_revision_spec.rb +515 -0
  650. data/spec/functional/resource/directory_spec.rb +39 -0
  651. data/spec/functional/resource/file_spec.rb +69 -0
  652. data/spec/functional/resource/link_spec.rb +572 -0
  653. data/spec/functional/resource/remote_directory_spec.rb +114 -0
  654. data/spec/functional/resource/remote_file_spec.rb +65 -0
  655. data/spec/functional/resource/template_spec.rb +68 -0
  656. data/spec/functional/tiny_server_spec.rb +78 -0
  657. data/spec/rcov.opts +2 -0
  658. data/spec/spec_helper.rb +82 -0
  659. data/spec/stress/win32/file_spec.rb +37 -0
  660. data/spec/stress/win32/memory_spec.rb +22 -0
  661. data/spec/stress/win32/security_spec.rb +69 -0
  662. data/spec/support/chef_helpers.rb +65 -0
  663. data/spec/support/lib/chef/provider/easy.rb +35 -0
  664. data/spec/support/lib/chef/provider/snakeoil.rb +40 -0
  665. data/spec/support/lib/chef/resource/cat.rb +41 -0
  666. data/spec/support/lib/chef/resource/one_two_three_four.rb +43 -0
  667. data/spec/support/lib/chef/resource/zen_master.rb +46 -0
  668. data/spec/support/matchers/leak.rb +96 -0
  669. data/spec/support/mock/constant.rb +52 -0
  670. data/spec/support/mock/platform.rb +18 -0
  671. data/spec/support/platform_helpers.rb +39 -0
  672. data/spec/support/platforms/prof/gc.rb +54 -0
  673. data/spec/support/platforms/prof/win32.rb +46 -0
  674. data/spec/support/shared/functional/directory_resource.rb +85 -0
  675. data/spec/support/shared/functional/file_resource.rb +202 -0
  676. data/spec/support/shared/functional/knife.rb +37 -0
  677. data/spec/support/shared/functional/securable_resource.rb +402 -0
  678. data/spec/support/shared/unit/api_error_inspector.rb +192 -0
  679. data/spec/tiny_server.rb +202 -0
  680. data/spec/unit/api_client_spec.rb +257 -0
  681. data/spec/unit/application/agent_spec.rb +0 -0
  682. data/spec/unit/application/client_spec.rb +171 -0
  683. data/spec/unit/application/knife_spec.rb +152 -0
  684. data/spec/unit/application/server_spec.rb +0 -0
  685. data/spec/unit/application/solo_spec.rb +167 -0
  686. data/spec/unit/application_spec.rb +239 -0
  687. data/spec/unit/certificate_spec.rb +76 -0
  688. data/spec/unit/checksum/storage/filesystem_spec.rb +69 -0
  689. data/spec/unit/checksum_cache_spec.rb +209 -0
  690. data/spec/unit/checksum_spec.rb +94 -0
  691. data/spec/unit/chef_spec.rb +25 -0
  692. data/spec/unit/client_spec.rb +290 -0
  693. data/spec/unit/config_spec.rb +223 -0
  694. data/spec/unit/cookbook/chefignore_spec.rb +39 -0
  695. data/spec/unit/cookbook/metadata_spec.rb +627 -0
  696. data/spec/unit/cookbook/synchronizer_spec.rb +306 -0
  697. data/spec/unit/cookbook/syntax_check_spec.rb +211 -0
  698. data/spec/unit/cookbook_loader_spec.rb +145 -0
  699. data/spec/unit/cookbook_manifest_spec.rb +554 -0
  700. data/spec/unit/cookbook_spec.rb +101 -0
  701. data/spec/unit/cookbook_version_spec.rb +406 -0
  702. data/spec/unit/couchdb_spec.rb +274 -0
  703. data/spec/unit/daemon_spec.rb +302 -0
  704. data/spec/unit/data_bag_item_spec.rb +280 -0
  705. data/spec/unit/data_bag_spec.rb +169 -0
  706. data/spec/unit/encrypted_data_bag_item_spec.rb +293 -0
  707. data/spec/unit/environment_spec.rb +492 -0
  708. data/spec/unit/exceptions_spec.rb +74 -0
  709. data/spec/unit/file_access_control_spec.rb +282 -0
  710. data/spec/unit/file_cache_spec.rb +114 -0
  711. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +202 -0
  712. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +93 -0
  713. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -0
  714. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +27 -0
  715. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +27 -0
  716. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +182 -0
  717. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +93 -0
  718. data/spec/unit/handler/json_file_spec.rb +64 -0
  719. data/spec/unit/handler_spec.rb +216 -0
  720. data/spec/unit/index_queue_spec.rb +391 -0
  721. data/spec/unit/json_compat_spec.rb +61 -0
  722. data/spec/unit/knife/bootstrap_spec.rb +265 -0
  723. data/spec/unit/knife/client_bulk_delete_spec.rb +78 -0
  724. data/spec/unit/knife/client_create_spec.rb +74 -0
  725. data/spec/unit/knife/client_delete_spec.rb +40 -0
  726. data/spec/unit/knife/client_edit_spec.rb +40 -0
  727. data/spec/unit/knife/client_list_spec.rb +34 -0
  728. data/spec/unit/knife/client_reregister_spec.rb +62 -0
  729. data/spec/unit/knife/client_show_spec.rb +42 -0
  730. data/spec/unit/knife/config_file_selection_spec.rb +118 -0
  731. data/spec/unit/knife/configure_client_spec.rb +83 -0
  732. data/spec/unit/knife/configure_spec.rb +229 -0
  733. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -0
  734. data/spec/unit/knife/cookbook_create_spec.rb +271 -0
  735. data/spec/unit/knife/cookbook_delete_spec.rb +239 -0
  736. data/spec/unit/knife/cookbook_download_spec.rb +217 -0
  737. data/spec/unit/knife/cookbook_list_spec.rb +88 -0
  738. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -0
  739. data/spec/unit/knife/cookbook_metadata_spec.rb +172 -0
  740. data/spec/unit/knife/cookbook_show_spec.rb +223 -0
  741. data/spec/unit/knife/cookbook_site_download_spec.rb +151 -0
  742. data/spec/unit/knife/cookbook_site_install_spec.rb +148 -0
  743. data/spec/unit/knife/cookbook_site_share_spec.rb +146 -0
  744. data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -0
  745. data/spec/unit/knife/cookbook_test_spec.rb +83 -0
  746. data/spec/unit/knife/cookbook_upload_spec.rb +148 -0
  747. data/spec/unit/knife/core/bootstrap_context_spec.rb +135 -0
  748. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -0
  749. data/spec/unit/knife/core/object_loader_spec.rb +81 -0
  750. data/spec/unit/knife/core/subcommand_loader_spec.rb +54 -0
  751. data/spec/unit/knife/core/ui_spec.rb +160 -0
  752. data/spec/unit/knife/data_bag_create_spec.rb +101 -0
  753. data/spec/unit/knife/data_bag_edit_spec.rb +96 -0
  754. data/spec/unit/knife/data_bag_from_file_spec.rb +198 -0
  755. data/spec/unit/knife/data_bag_show_spec.rb +105 -0
  756. data/spec/unit/knife/environment_create_spec.rb +91 -0
  757. data/spec/unit/knife/environment_delete_spec.rb +71 -0
  758. data/spec/unit/knife/environment_edit_spec.rb +79 -0
  759. data/spec/unit/knife/environment_from_file_spec.rb +89 -0
  760. data/spec/unit/knife/environment_list_spec.rb +54 -0
  761. data/spec/unit/knife/environment_show_spec.rb +52 -0
  762. data/spec/unit/knife/index_rebuild_spec.rb +65 -0
  763. data/spec/unit/knife/knife_help.rb +92 -0
  764. data/spec/unit/knife/node_bulk_delete_spec.rb +97 -0
  765. data/spec/unit/knife/node_delete_spec.rb +68 -0
  766. data/spec/unit/knife/node_edit_spec.rb +88 -0
  767. data/spec/unit/knife/node_from_file_spec.rb +59 -0
  768. data/spec/unit/knife/node_list_spec.rb +63 -0
  769. data/spec/unit/knife/node_run_list_add_spec.rb +125 -0
  770. data/spec/unit/knife/node_run_list_remove_spec.rb +73 -0
  771. data/spec/unit/knife/node_show_spec.rb +48 -0
  772. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -0
  773. data/spec/unit/knife/role_create_spec.rb +80 -0
  774. data/spec/unit/knife/role_delete_spec.rb +67 -0
  775. data/spec/unit/knife/role_edit_spec.rb +79 -0
  776. data/spec/unit/knife/role_from_file_spec.rb +69 -0
  777. data/spec/unit/knife/role_list_spec.rb +56 -0
  778. data/spec/unit/knife/ssh_spec.rb +293 -0
  779. data/spec/unit/knife/status_spec.rb +43 -0
  780. data/spec/unit/knife/tag_create_spec.rb +23 -0
  781. data/spec/unit/knife/tag_delete_spec.rb +25 -0
  782. data/spec/unit/knife/tag_list_spec.rb +23 -0
  783. data/spec/unit/knife_spec.rb +295 -0
  784. data/spec/unit/log_spec.rb +24 -0
  785. data/spec/unit/lwrp_spec.rb +256 -0
  786. data/spec/unit/mash_spec.rb +51 -0
  787. data/spec/unit/mixin/checksum_spec.rb +41 -0
  788. data/spec/unit/mixin/command_spec.rb +105 -0
  789. data/spec/unit/mixin/convert_to_class_name_spec.rb +50 -0
  790. data/spec/unit/mixin/deep_merge_spec.rb +786 -0
  791. data/spec/unit/mixin/deprecation_spec.rb +34 -0
  792. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +90 -0
  793. data/spec/unit/mixin/language_spec.rb +305 -0
  794. data/spec/unit/mixin/params_validate_spec.rb +405 -0
  795. data/spec/unit/mixin/path_sanity_spec.rb +80 -0
  796. data/spec/unit/mixin/securable_spec.rb +254 -0
  797. data/spec/unit/mixin/shell_out_spec.rb +109 -0
  798. data/spec/unit/mixin/template_spec.rb +104 -0
  799. data/spec/unit/mixin/xml_escape_spec.rb +54 -0
  800. data/spec/unit/monkey_patches/string_spec.rb +37 -0
  801. data/spec/unit/node/attribute_spec.rb +1033 -0
  802. data/spec/unit/node_spec.rb +744 -0
  803. data/spec/unit/openid_registration_spec.rb +153 -0
  804. data/spec/unit/platform_spec.rb +241 -0
  805. data/spec/unit/provider/breakpoint_spec.rb +54 -0
  806. data/spec/unit/provider/cookbook_file_spec.rb +218 -0
  807. data/spec/unit/provider/cron/solaris_spec.rb +121 -0
  808. data/spec/unit/provider/cron_spec.rb +812 -0
  809. data/spec/unit/provider/deploy/revision_spec.rb +103 -0
  810. data/spec/unit/provider/deploy/timestamped_spec.rb +40 -0
  811. data/spec/unit/provider/deploy_spec.rb +620 -0
  812. data/spec/unit/provider/directory_spec.rb +156 -0
  813. data/spec/unit/provider/env_spec.rb +232 -0
  814. data/spec/unit/provider/erl_call_spec.rb +86 -0
  815. data/spec/unit/provider/execute_spec.rb +63 -0
  816. data/spec/unit/provider/file_spec.rb +505 -0
  817. data/spec/unit/provider/git_spec.rb +342 -0
  818. data/spec/unit/provider/group/dscl_spec.rb +294 -0
  819. data/spec/unit/provider/group/gpasswd_spec.rb +108 -0
  820. data/spec/unit/provider/group/groupadd_spec.rb +161 -0
  821. data/spec/unit/provider/group/groupmod_spec.rb +134 -0
  822. data/spec/unit/provider/group/pw_spec.rb +140 -0
  823. data/spec/unit/provider/group/usermod_spec.rb +95 -0
  824. data/spec/unit/provider/group/windows_spec.rb +94 -0
  825. data/spec/unit/provider/group_spec.rb +259 -0
  826. data/spec/unit/provider/http_request_spec.rb +178 -0
  827. data/spec/unit/provider/ifconfig_spec.rb +213 -0
  828. data/spec/unit/provider/link_spec.rb +252 -0
  829. data/spec/unit/provider/log_spec.rb +81 -0
  830. data/spec/unit/provider/mdadm_spec.rb +128 -0
  831. data/spec/unit/provider/mount/mount_spec.rb +398 -0
  832. data/spec/unit/provider/mount/windows_spec.rb +134 -0
  833. data/spec/unit/provider/mount_spec.rb +160 -0
  834. data/spec/unit/provider/ohai_spec.rb +85 -0
  835. data/spec/unit/provider/package/apt_spec.rb +352 -0
  836. data/spec/unit/provider/package/dpkg_spec.rb +216 -0
  837. data/spec/unit/provider/package/easy_install_spec.rb +112 -0
  838. data/spec/unit/provider/package/freebsd_spec.rb +259 -0
  839. data/spec/unit/provider/package/ips_spec.rb +210 -0
  840. data/spec/unit/provider/package/macports_spec.rb +203 -0
  841. data/spec/unit/provider/package/pacman_spec.rb +206 -0
  842. data/spec/unit/provider/package/portage_spec.rb +320 -0
  843. data/spec/unit/provider/package/rpm_spec.rb +152 -0
  844. data/spec/unit/provider/package/rubygems_spec.rb +639 -0
  845. data/spec/unit/provider/package/smartos_spec.rb +83 -0
  846. data/spec/unit/provider/package/solaris_spec.rb +181 -0
  847. data/spec/unit/provider/package/yum_spec.rb +1856 -0
  848. data/spec/unit/provider/package/zypper_spec.rb +159 -0
  849. data/spec/unit/provider/package_spec.rb +427 -0
  850. data/spec/unit/provider/remote_directory_spec.rb +222 -0
  851. data/spec/unit/provider/remote_file_spec.rb +288 -0
  852. data/spec/unit/provider/route_spec.rb +226 -0
  853. data/spec/unit/provider/ruby_block_spec.rb +38 -0
  854. data/spec/unit/provider/script_spec.rb +96 -0
  855. data/spec/unit/provider/service/arch_service_spec.rb +330 -0
  856. data/spec/unit/provider/service/debian_service_spec.rb +254 -0
  857. data/spec/unit/provider/service/freebsd_service_spec.rb +379 -0
  858. data/spec/unit/provider/service/gentoo_service_spec.rb +144 -0
  859. data/spec/unit/provider/service/init_service_spec.rb +212 -0
  860. data/spec/unit/provider/service/insserv_service_spec.rb +76 -0
  861. data/spec/unit/provider/service/invokercd_service_spec.rb +212 -0
  862. data/spec/unit/provider/service/macosx_spec.rb +229 -0
  863. data/spec/unit/provider/service/redhat_spec.rb +156 -0
  864. data/spec/unit/provider/service/simple_service_spec.rb +171 -0
  865. data/spec/unit/provider/service/solaris_smf_service_spec.rb +140 -0
  866. data/spec/unit/provider/service/systemd_service_spec.rb +239 -0
  867. data/spec/unit/provider/service/upstart_service_spec.rb +314 -0
  868. data/spec/unit/provider/service/windows_spec.rb +235 -0
  869. data/spec/unit/provider/service_spec.rb +169 -0
  870. data/spec/unit/provider/subversion_spec.rb +281 -0
  871. data/spec/unit/provider/template_spec.rb +196 -0
  872. data/spec/unit/provider/user/dscl_spec.rb +454 -0
  873. data/spec/unit/provider/user/pw_spec.rb +235 -0
  874. data/spec/unit/provider/user/solaris_spec.rb +414 -0
  875. data/spec/unit/provider/user/useradd_spec.rb +386 -0
  876. data/spec/unit/provider/user/windows_spec.rb +178 -0
  877. data/spec/unit/provider/user_spec.rb +468 -0
  878. data/spec/unit/provider_spec.rb +169 -0
  879. data/spec/unit/recipe_spec.rb +268 -0
  880. data/spec/unit/resource/apt_package_spec.rb +43 -0
  881. data/spec/unit/resource/bash_spec.rb +40 -0
  882. data/spec/unit/resource/breakpoint_spec.rb +43 -0
  883. data/spec/unit/resource/chef_gem_spec.rb +49 -0
  884. data/spec/unit/resource/conditional_spec.rb +147 -0
  885. data/spec/unit/resource/cookbook_file_spec.rb +89 -0
  886. data/spec/unit/resource/cron_spec.rb +181 -0
  887. data/spec/unit/resource/csh_spec.rb +40 -0
  888. data/spec/unit/resource/deploy_revision_spec.rb +47 -0
  889. data/spec/unit/resource/deploy_spec.rb +259 -0
  890. data/spec/unit/resource/directory_spec.rb +82 -0
  891. data/spec/unit/resource/dpkg_package_spec.rb +38 -0
  892. data/spec/unit/resource/easy_install_package_spec.rb +48 -0
  893. data/spec/unit/resource/env_spec.rb +85 -0
  894. data/spec/unit/resource/erl_call_spec.rb +81 -0
  895. data/spec/unit/resource/execute_spec.rb +124 -0
  896. data/spec/unit/resource/file_spec.rb +121 -0
  897. data/spec/unit/resource/freebsd_package_spec.rb +39 -0
  898. data/spec/unit/resource/gem_package_spec.rb +49 -0
  899. data/spec/unit/resource/git_spec.rb +46 -0
  900. data/spec/unit/resource/group_spec.rb +148 -0
  901. data/spec/unit/resource/http_request_spec.rb +59 -0
  902. data/spec/unit/resource/ifconfig_spec.rb +46 -0
  903. data/spec/unit/resource/ips_package_spec.rb +43 -0
  904. data/spec/unit/resource/link_spec.rb +118 -0
  905. data/spec/unit/resource/log_spec.rb +70 -0
  906. data/spec/unit/resource/macports_package_spec.rb +37 -0
  907. data/spec/unit/resource/mdadm_spec.rb +102 -0
  908. data/spec/unit/resource/mount_spec.rb +158 -0
  909. data/spec/unit/resource/ohai_spec.rb +62 -0
  910. data/spec/unit/resource/package_spec.rb +80 -0
  911. data/spec/unit/resource/pacman_package_spec.rb +38 -0
  912. data/spec/unit/resource/perl_spec.rb +40 -0
  913. data/spec/unit/resource/portage_package_spec.rb +38 -0
  914. data/spec/unit/resource/python_spec.rb +40 -0
  915. data/spec/unit/resource/remote_directory_spec.rb +97 -0
  916. data/spec/unit/resource/remote_file_spec.rb +125 -0
  917. data/spec/unit/resource/route_spec.rb +107 -0
  918. data/spec/unit/resource/rpm_package_spec.rb +38 -0
  919. data/spec/unit/resource/ruby_block_spec.rb +57 -0
  920. data/spec/unit/resource/ruby_spec.rb +40 -0
  921. data/spec/unit/resource/scm_spec.rb +159 -0
  922. data/spec/unit/resource/script_spec.rb +69 -0
  923. data/spec/unit/resource/service_spec.rb +165 -0
  924. data/spec/unit/resource/smartos_package_spec.rb +38 -0
  925. data/spec/unit/resource/subversion_spec.rb +58 -0
  926. data/spec/unit/resource/template_spec.rb +108 -0
  927. data/spec/unit/resource/timestamped_deploy_spec.rb +28 -0
  928. data/spec/unit/resource/user_spec.rb +122 -0
  929. data/spec/unit/resource/yum_package_spec.rb +85 -0
  930. data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -0
  931. data/spec/unit/resource_collection_spec.rb +257 -0
  932. data/spec/unit/resource_definition_spec.rb +119 -0
  933. data/spec/unit/resource_platform_map_spec.rb +164 -0
  934. data/spec/unit/resource_reporter_spec.rb +591 -0
  935. data/spec/unit/resource_spec.rb +721 -0
  936. data/spec/unit/rest/auth_credentials_spec.rb +431 -0
  937. data/spec/unit/rest_spec.rb +644 -0
  938. data/spec/unit/role_spec.rb +275 -0
  939. data/spec/unit/run_context_spec.rb +64 -0
  940. data/spec/unit/run_list/run_list_expansion_spec.rb +129 -0
  941. data/spec/unit/run_list/run_list_item_spec.rb +117 -0
  942. data/spec/unit/run_list/versioned_recipe_list_spec.rb +123 -0
  943. data/spec/unit/run_list_spec.rb +521 -0
  944. data/spec/unit/run_status_spec.rb +145 -0
  945. data/spec/unit/runner_spec.rb +303 -0
  946. data/spec/unit/scan_access_control_spec.rb +182 -0
  947. data/spec/unit/search/query_spec.rb +99 -0
  948. data/spec/unit/shef/model_wrapper_spec.rb +97 -0
  949. data/spec/unit/shef/shef_ext_spec.rb +153 -0
  950. data/spec/unit/shef/shef_session_spec.rb +154 -0
  951. data/spec/unit/shef_spec.rb +161 -0
  952. data/spec/unit/solr_query/query_transform_spec.rb +454 -0
  953. data/spec/unit/solr_query/solr_http_request_spec.rb +244 -0
  954. data/spec/unit/solr_query_spec.rb +203 -0
  955. data/spec/unit/util/file_edit_spec.rb +135 -0
  956. data/spec/unit/version_class_spec.rb +172 -0
  957. data/spec/unit/version_constraint_spec.rb +134 -0
  958. data/spec/unit/webui_user_spec.rb +238 -0
  959. data/tasks/rspec.rb +75 -0
  960. metadata +1548 -0
@@ -0,0 +1,121 @@
1
+ #
2
+ # Author:: Bryan McLellan (btm@loftninjas.org)
3
+ # Author:: Toomas Pelberg (toomasp@gmx.net)
4
+ # Copyright:: Copyright (c) 2009 Bryan McLellan
5
+ # Copyright:: Copyright (c) 2010 Toomas Pelberg
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require 'spec_helper'
22
+
23
+ describe Chef::Provider::Cron::Solaris do
24
+ before do
25
+ @node = Chef::Node.new
26
+ @events = Chef::EventDispatch::Dispatcher.new
27
+ @run_context = Chef::RunContext.new(@node, {}, @events)
28
+ @new_resource = Chef::Resource::Cron.new("cronhole some stuff")
29
+ @new_resource.user "root"
30
+ @new_resource.minute "30"
31
+ @new_resource.command "/bin/true"
32
+
33
+ @provider = Chef::Provider::Cron::Solaris.new(@new_resource, @run_context)
34
+ end
35
+
36
+ it "should inherit from Chef::Provider:Cron" do
37
+ @provider.should be_a(Chef::Provider::Cron)
38
+ end
39
+
40
+ describe "read_crontab" do
41
+ before :each do
42
+ @status = mock("Status", :exitstatus => 0)
43
+ @stdout = StringIO.new(<<-CRONTAB)
44
+ 0 2 * * * /some/other/command
45
+
46
+ # Chef Name: something else
47
+ * 5 * * * /bin/true
48
+
49
+ # Another comment
50
+ CRONTAB
51
+ @provider.stub!(:popen4).and_yield(1234, StringIO.new, @stdout, StringIO.new).and_return(@status)
52
+ end
53
+
54
+ it "should call crontab -l with the user" do
55
+ @provider.should_receive(:popen4).with("crontab -l #{@new_resource.user}").and_return(@status)
56
+ @provider.send(:read_crontab)
57
+ end
58
+
59
+ it "should return the contents of the crontab" do
60
+ crontab = @provider.send(:read_crontab)
61
+ crontab.should == <<-CRONTAB
62
+ 0 2 * * * /some/other/command
63
+
64
+ # Chef Name: something else
65
+ * 5 * * * /bin/true
66
+
67
+ # Another comment
68
+ CRONTAB
69
+ end
70
+
71
+ it "should return nil if the user has no crontab" do
72
+ status = mock("Status", :exitstatus => 1)
73
+ @provider.stub!(:popen4).and_return(status)
74
+ @provider.send(:read_crontab).should == nil
75
+ end
76
+
77
+ it "should raise an exception if another error occurs" do
78
+ status = mock("Status", :exitstatus => 2)
79
+ @provider.stub!(:popen4).and_return(status)
80
+ lambda do
81
+ @provider.send(:read_crontab)
82
+ end.should raise_error(Chef::Exceptions::Cron, "Error determining state of #{@new_resource.name}, exit: 2")
83
+ end
84
+ end
85
+
86
+ describe "write_crontab" do
87
+ before :each do
88
+ @status = mock("Status", :exitstatus => 0)
89
+ @provider.stub!(:run_command).and_return(@status)
90
+ @tempfile = mock("foo", :path => "/tmp/foo", :close => true, :binmode => nil)
91
+ Tempfile.stub!(:new).and_return(@tempfile)
92
+ @tempfile.should_receive(:flush)
93
+ @tempfile.should_receive(:chmod).with(420)
94
+ @tempfile.should_receive(:close!)
95
+ end
96
+
97
+ it "should call crontab for the user" do
98
+ @provider.should_receive(:run_command).with(hash_including(:user => @new_resource.user))
99
+ @tempfile.should_receive(:<<).with("Foo")
100
+ @provider.send(:write_crontab, "Foo")
101
+ end
102
+
103
+ it "should call crontab with a file containing the crontab" do
104
+ @provider.should_receive(:run_command) do |args|
105
+ (args[:command] =~ %r{\A/usr/bin/crontab (/\S+)\z}).should be_true
106
+ $1.should == "/tmp/foo"
107
+ @status
108
+ end
109
+ @tempfile.should_receive(:<<).with("Foo\n# wibble\n wah!!")
110
+ @provider.send(:write_crontab, "Foo\n# wibble\n wah!!")
111
+ end
112
+
113
+ it "should raise an exception if the command returns non-zero" do
114
+ @tempfile.should_receive(:<<).with("Foo")
115
+ @status.stub!(:exitstatus).and_return(1)
116
+ lambda do
117
+ @provider.send(:write_crontab, "Foo")
118
+ end.should raise_error(Chef::Exceptions::Cron, "Error updating state of #{@new_resource.name}, exit: 1")
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,812 @@
1
+ #
2
+ # Author:: Bryan McLellan (btm@loftninjas.org)
3
+ # Copyright:: Copyright (c) 2009 Bryan McLellan
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe Chef::Provider::Cron do
22
+ before do
23
+ @node = Chef::Node.new
24
+ @events = Chef::EventDispatch::Dispatcher.new
25
+ @run_context = Chef::RunContext.new(@node, {}, @events)
26
+ @new_resource = Chef::Resource::Cron.new("cronhole some stuff", @run_context)
27
+ @new_resource.user "root"
28
+ @new_resource.minute "30"
29
+ @new_resource.command "/bin/true"
30
+
31
+ @provider = Chef::Provider::Cron.new(@new_resource, @run_context)
32
+ end
33
+
34
+ describe "when examining the current system state" do
35
+ context "with no crontab for the user" do
36
+ before :each do
37
+ @provider.stub!(:read_crontab).and_return(nil)
38
+ end
39
+
40
+ it "should set cron_empty" do
41
+ @provider.load_current_resource
42
+ @provider.cron_empty.should == true
43
+ @provider.cron_exists.should == false
44
+ end
45
+
46
+ it "should report an empty crontab" do
47
+ Chef::Log.should_receive(:debug).with("Cron empty for '#{@new_resource.user}'")
48
+ @provider.load_current_resource
49
+ end
50
+ end
51
+
52
+ context "with no matching entry in the user's crontab" do
53
+ before :each do
54
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
55
+ 0 2 * * * /some/other/command
56
+
57
+ # Chef Name: something else
58
+ * 5 * * * /bin/true
59
+
60
+ # Another comment
61
+ CRONTAB
62
+ end
63
+
64
+ it "should not set cron_exists or cron_empty" do
65
+ @provider.load_current_resource
66
+ @provider.cron_exists.should == false
67
+ @provider.cron_empty.should == false
68
+ end
69
+
70
+ it "should report no entry found" do
71
+ Chef::Log.should_receive(:debug).with("Cron '#{@new_resource.name}' not found")
72
+ @provider.load_current_resource
73
+ end
74
+
75
+ it "should not fail if there's an existing cron with a numerical argument" do
76
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
77
+ # Chef Name: foo[bar] (baz)
78
+ 21 */4 * * * some_prog 1234567
79
+ CRONTAB
80
+ lambda {
81
+ @provider.load_current_resource
82
+ }.should_not raise_error
83
+ end
84
+ end
85
+
86
+ context "with a matching entry in the user's crontab" do
87
+ before :each do
88
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
89
+ 0 2 * * * /some/other/command
90
+
91
+ # Chef Name: cronhole some stuff
92
+ * 5 * 1 * /bin/true param1 param2
93
+ # Chef Name: something else
94
+ 2 * 1 * * /bin/false
95
+
96
+ # Another comment
97
+ CRONTAB
98
+ end
99
+
100
+ it "should set cron_exists" do
101
+ @provider.load_current_resource
102
+ @provider.cron_exists.should == true
103
+ @provider.cron_empty.should == false
104
+ end
105
+
106
+ it "should pull the details out of the cron line" do
107
+ cron = @provider.load_current_resource
108
+ cron.minute.should == '*'
109
+ cron.hour.should == '5'
110
+ cron.day.should == '*'
111
+ cron.month.should == '1'
112
+ cron.weekday.should == '*'
113
+ cron.command.should == '/bin/true param1 param2'
114
+ end
115
+
116
+ it "should pull env vars out" do
117
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
118
+ 0 2 * * * /some/other/command
119
+
120
+ # Chef Name: cronhole some stuff
121
+ MAILTO=foo@example.com
122
+ SHELL=/bin/foosh
123
+ PATH=/bin:/foo
124
+ HOME=/home/foo
125
+ * 5 * 1 * /bin/true param1 param2
126
+ # Chef Name: something else
127
+ 2 * 1 * * /bin/false
128
+
129
+ # Another comment
130
+ CRONTAB
131
+ cron = @provider.load_current_resource
132
+ cron.mailto.should == 'foo@example.com'
133
+ cron.shell.should == '/bin/foosh'
134
+ cron.path.should == '/bin:/foo'
135
+ cron.home.should == '/home/foo'
136
+ cron.minute.should == '*'
137
+ cron.hour.should == '5'
138
+ cron.day.should == '*'
139
+ cron.month.should == '1'
140
+ cron.weekday.should == '*'
141
+ cron.command.should == '/bin/true param1 param2'
142
+ end
143
+
144
+ it "should parse and load generic and standard environment variables from cron entry" do
145
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
146
+ # Chef Name: cronhole some stuff
147
+ MAILTO=warn@example.com
148
+ TEST=lol
149
+ FLAG=1
150
+ * 5 * * * /bin/true
151
+ CRONTAB
152
+ cron = @provider.load_current_resource
153
+
154
+ cron.mailto.should == "warn@example.com"
155
+ cron.environment.should == {"TEST" => "lol", "FLAG" => "1"}
156
+ end
157
+
158
+ it "should not break with variabels that match the cron resource internals" do
159
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
160
+ # Chef Name: cronhole some stuff
161
+ MINUTE=40
162
+ HOUR=midnight
163
+ TEST=lol
164
+ ENVIRONMENT=production
165
+ * 5 * * * /bin/true
166
+ CRONTAB
167
+ cron = @provider.load_current_resource
168
+
169
+ cron.minute.should == '*'
170
+ cron.hour.should == '5'
171
+ cron.environment.should == {"MINUTE" => "40", "HOUR" => "midnight", "TEST" => "lol", "ENVIRONMENT" => "production"}
172
+ end
173
+
174
+ it "should report the match" do
175
+ Chef::Log.should_receive(:debug).with("Found cron '#{@new_resource.name}'")
176
+ @provider.load_current_resource
177
+ end
178
+ end
179
+
180
+ context "with a matching entry in the user's crontab using month names and weekday names (#CHEF-3178)" do
181
+ before :each do
182
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
183
+ 0 2 * * * /some/other/command
184
+
185
+ # Chef Name: cronhole some stuff
186
+ * 5 * Jan Mon /bin/true param1 param2
187
+ # Chef Name: something else
188
+ 2 * 1 * * /bin/false
189
+
190
+ # Another comment
191
+ CRONTAB
192
+ end
193
+
194
+ it "should set cron_exists" do
195
+ @provider.load_current_resource
196
+ @provider.cron_exists.should == true
197
+ @provider.cron_empty.should == false
198
+ end
199
+
200
+ it "should pull the details out of the cron line" do
201
+ cron = @provider.load_current_resource
202
+ cron.minute.should == '*'
203
+ cron.hour.should == '5'
204
+ cron.day.should == '*'
205
+ cron.month.should == 'Jan'
206
+ cron.weekday.should == 'Mon'
207
+ cron.command.should == '/bin/true param1 param2'
208
+ end
209
+
210
+ it "should report the match" do
211
+ Chef::Log.should_receive(:debug).with("Found cron '#{@new_resource.name}'")
212
+ @provider.load_current_resource
213
+ end
214
+ end
215
+
216
+ context "with a matching entry without a crontab line" do
217
+ it "should set cron_exists and leave current_resource values at defaults" do
218
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
219
+ 0 2 * * * /some/other/command
220
+
221
+ # Chef Name: cronhole some stuff
222
+ CRONTAB
223
+ cron = @provider.load_current_resource
224
+ @provider.cron_exists.should == true
225
+ cron.minute.should == '*'
226
+ cron.hour.should == '*'
227
+ cron.day.should == '*'
228
+ cron.month.should == '*'
229
+ cron.weekday.should == '*'
230
+ cron.command.should == nil
231
+ end
232
+
233
+ it "should not pick up a commented out crontab line" do
234
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
235
+ 0 2 * * * /some/other/command
236
+
237
+ # Chef Name: cronhole some stuff
238
+ #* 5 * 1 * /bin/true param1 param2
239
+ CRONTAB
240
+ cron = @provider.load_current_resource
241
+ @provider.cron_exists.should == true
242
+ cron.minute.should == '*'
243
+ cron.hour.should == '*'
244
+ cron.day.should == '*'
245
+ cron.month.should == '*'
246
+ cron.weekday.should == '*'
247
+ cron.command.should == nil
248
+ end
249
+
250
+ it "should not pick up a later crontab entry" do
251
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
252
+ 0 2 * * * /some/other/command
253
+
254
+ # Chef Name: cronhole some stuff
255
+ #* 5 * 1 * /bin/true param1 param2
256
+ # Chef Name: something else
257
+ 2 * 1 * * /bin/false
258
+
259
+ # Another comment
260
+ CRONTAB
261
+ cron = @provider.load_current_resource
262
+ @provider.cron_exists.should == true
263
+ cron.minute.should == '*'
264
+ cron.hour.should == '*'
265
+ cron.day.should == '*'
266
+ cron.month.should == '*'
267
+ cron.weekday.should == '*'
268
+ cron.command.should == nil
269
+ end
270
+ end
271
+ end
272
+
273
+ describe "cron_different?" do
274
+ before :each do
275
+ @current_resource = Chef::Resource::Cron.new("cronhole some stuff")
276
+ @current_resource.user "root"
277
+ @current_resource.minute "30"
278
+ @current_resource.command "/bin/true"
279
+ @provider.current_resource = @current_resource
280
+ end
281
+
282
+ [:minute, :hour, :day, :month, :weekday, :command, :mailto, :path, :shell, :home].each do |attribute|
283
+ it "should return true if #{attribute} doesn't match" do
284
+ @new_resource.send(attribute, "something_else")
285
+ @provider.cron_different?.should eql(true)
286
+ end
287
+ end
288
+
289
+ it "should return true if environment doesn't match" do
290
+ @new_resource.environment "FOO" => "something_else"
291
+ @provider.cron_different?.should eql(true)
292
+ end
293
+
294
+ it "should return false if the objects are identical" do
295
+ @provider.cron_different?.should == false
296
+ end
297
+ end
298
+
299
+ describe "action_create" do
300
+ before :each do
301
+ @provider.stub!(:write_crontab)
302
+ @provider.stub!(:read_crontab).and_return(nil)
303
+ end
304
+
305
+ context "when there is no existing crontab" do
306
+ before :each do
307
+ @provider.cron_exists = false
308
+ @provider.cron_empty = true
309
+ end
310
+
311
+ it "should create a crontab with the entry" do
312
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
313
+ # Chef Name: cronhole some stuff
314
+ 30 * * * * /bin/true
315
+ ENDCRON
316
+ @provider.run_action(:create)
317
+ end
318
+
319
+ it "should include env variables that are set" do
320
+ @new_resource.mailto 'foo@example.com'
321
+ @new_resource.path '/usr/bin:/my/custom/path'
322
+ @new_resource.shell '/bin/foosh'
323
+ @new_resource.home '/home/foo'
324
+ @new_resource.environment "TEST" => "LOL"
325
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
326
+ # Chef Name: cronhole some stuff
327
+ MAILTO=foo@example.com
328
+ PATH=/usr/bin:/my/custom/path
329
+ SHELL=/bin/foosh
330
+ HOME=/home/foo
331
+ TEST=LOL
332
+ 30 * * * * /bin/true
333
+ ENDCRON
334
+ @provider.run_action(:create)
335
+ end
336
+
337
+ it "should mark the resource as updated" do
338
+ @provider.run_action(:create)
339
+ @new_resource.should be_updated_by_last_action
340
+ end
341
+
342
+ it "should log the action" do
343
+ Chef::Log.should_receive(:info).with("cron[cronhole some stuff] added crontab entry")
344
+ @provider.run_action(:create)
345
+ end
346
+ end
347
+
348
+ context "when there is a crontab with no matching section" do
349
+ before :each do
350
+ @provider.cron_exists = false
351
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
352
+ 0 2 * * * /some/other/command
353
+
354
+ # Chef Name: something else
355
+ 2 * 1 * * /bin/false
356
+
357
+ # Another comment
358
+ CRONTAB
359
+ end
360
+
361
+ it "should add the entry to the crontab" do
362
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
363
+ 0 2 * * * /some/other/command
364
+
365
+ # Chef Name: something else
366
+ 2 * 1 * * /bin/false
367
+
368
+ # Another comment
369
+ # Chef Name: cronhole some stuff
370
+ 30 * * * * /bin/true
371
+ ENDCRON
372
+ @provider.run_action(:create)
373
+ end
374
+
375
+ it "should include env variables that are set" do
376
+ @new_resource.mailto 'foo@example.com'
377
+ @new_resource.path '/usr/bin:/my/custom/path'
378
+ @new_resource.shell '/bin/foosh'
379
+ @new_resource.home '/home/foo'
380
+ @new_resource.environment "TEST" => "LOL"
381
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
382
+ 0 2 * * * /some/other/command
383
+
384
+ # Chef Name: something else
385
+ 2 * 1 * * /bin/false
386
+
387
+ # Another comment
388
+ # Chef Name: cronhole some stuff
389
+ MAILTO=foo@example.com
390
+ PATH=/usr/bin:/my/custom/path
391
+ SHELL=/bin/foosh
392
+ HOME=/home/foo
393
+ TEST=LOL
394
+ 30 * * * * /bin/true
395
+ ENDCRON
396
+ @provider.run_action(:create)
397
+ end
398
+
399
+ it "should mark the resource as updated" do
400
+ @provider.run_action(:create)
401
+ @new_resource.should be_updated_by_last_action
402
+ end
403
+
404
+ it "should log the action" do
405
+ Chef::Log.should_receive(:info).with("cron[cronhole some stuff] added crontab entry")
406
+ @provider.run_action(:create)
407
+ end
408
+ end
409
+
410
+ context "when there is a crontab with a matching but different section" do
411
+ before :each do
412
+ @provider.cron_exists = true
413
+ @provider.stub!(:cron_different?).and_return(true)
414
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
415
+ 0 2 * * * /some/other/command
416
+
417
+ # Chef Name: cronhole some stuff
418
+ 30 * * 3 * /bin/true
419
+ # Chef Name: something else
420
+ 2 * 1 * * /bin/false
421
+
422
+ # Another comment
423
+ CRONTAB
424
+ end
425
+
426
+ it "should update the crontab entry" do
427
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
428
+ 0 2 * * * /some/other/command
429
+
430
+ # Chef Name: cronhole some stuff
431
+ 30 * * * * /bin/true
432
+ # Chef Name: something else
433
+ 2 * 1 * * /bin/false
434
+
435
+ # Another comment
436
+ ENDCRON
437
+ @provider.run_action(:create)
438
+ end
439
+
440
+ it "should include env variables that are set" do
441
+ @new_resource.mailto 'foo@example.com'
442
+ @new_resource.path '/usr/bin:/my/custom/path'
443
+ @new_resource.shell '/bin/foosh'
444
+ @new_resource.home '/home/foo'
445
+ @new_resource.environment "TEST" => "LOL"
446
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
447
+ 0 2 * * * /some/other/command
448
+
449
+ # Chef Name: cronhole some stuff
450
+ MAILTO=foo@example.com
451
+ PATH=/usr/bin:/my/custom/path
452
+ SHELL=/bin/foosh
453
+ HOME=/home/foo
454
+ TEST=LOL
455
+ 30 * * * * /bin/true
456
+ # Chef Name: something else
457
+ 2 * 1 * * /bin/false
458
+
459
+ # Another comment
460
+ ENDCRON
461
+ @provider.run_action(:create)
462
+ end
463
+
464
+ it "should mark the resource as updated" do
465
+ @provider.run_action(:create)
466
+ @new_resource.should be_updated_by_last_action
467
+ end
468
+
469
+ it "should log the action" do
470
+ Chef::Log.should_receive(:info).with("cron[cronhole some stuff] updated crontab entry")
471
+ @provider.run_action(:create)
472
+ end
473
+ end
474
+
475
+ context "when there is a crontab with a matching section with no crontab line in it" do
476
+ before :each do
477
+ @provider.cron_exists = true
478
+ @provider.stub!(:cron_different?).and_return(true)
479
+ end
480
+
481
+ it "should add the crontab to the entry" do
482
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
483
+ 0 2 * * * /some/other/command
484
+
485
+ # Chef Name: cronhole some stuff
486
+ CRONTAB
487
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
488
+ 0 2 * * * /some/other/command
489
+
490
+ # Chef Name: cronhole some stuff
491
+ 30 * * * * /bin/true
492
+ ENDCRON
493
+ @provider.run_action(:create)
494
+ end
495
+
496
+ it "should not blat any following entries" do
497
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
498
+ 0 2 * * * /some/other/command
499
+
500
+ # Chef Name: cronhole some stuff
501
+ #30 * * * * /bin/true
502
+ # Chef Name: something else
503
+ 2 * 1 * * /bin/false
504
+
505
+ # Another comment
506
+ CRONTAB
507
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
508
+ 0 2 * * * /some/other/command
509
+
510
+ # Chef Name: cronhole some stuff
511
+ 30 * * * * /bin/true
512
+ #30 * * * * /bin/true
513
+ # Chef Name: something else
514
+ 2 * 1 * * /bin/false
515
+
516
+ # Another comment
517
+ ENDCRON
518
+ @provider.run_action(:create)
519
+ end
520
+
521
+ it "should handle env vars with no crontab" do
522
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
523
+ 0 2 * * * /some/other/command
524
+
525
+ # Chef Name: cronhole some stuff
526
+ MAILTO=bar@example.com
527
+ PATH=/usr/bin:/my/custom/path
528
+ SHELL=/bin/barsh
529
+ HOME=/home/foo
530
+
531
+ # Chef Name: something else
532
+ 2 * 1 * * /bin/false
533
+
534
+ # Another comment
535
+ CRONTAB
536
+ @new_resource.mailto 'foo@example.com'
537
+ @new_resource.path '/usr/bin:/my/custom/path'
538
+ @new_resource.shell '/bin/foosh'
539
+ @new_resource.home '/home/foo'
540
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
541
+ 0 2 * * * /some/other/command
542
+
543
+ # Chef Name: cronhole some stuff
544
+ MAILTO=foo@example.com
545
+ PATH=/usr/bin:/my/custom/path
546
+ SHELL=/bin/foosh
547
+ HOME=/home/foo
548
+ 30 * * * * /bin/true
549
+
550
+ # Chef Name: something else
551
+ 2 * 1 * * /bin/false
552
+
553
+ # Another comment
554
+ ENDCRON
555
+ @provider.run_action(:create)
556
+ end
557
+ end
558
+
559
+ context "when there is a crontab with a matching and identical section" do
560
+ before :each do
561
+ @provider.cron_exists = true
562
+ @provider.stub!(:cron_different?).and_return(false)
563
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
564
+ 0 2 * * * /some/other/command
565
+
566
+ # Chef Name: something else
567
+ * 5 * * * /bin/true
568
+
569
+ # Another comment
570
+ CRONTAB
571
+ end
572
+
573
+ it "should not update the crontab" do
574
+ @provider.should_not_receive(:write_crontab)
575
+ @provider.run_action(:create)
576
+ end
577
+
578
+ it "should not mark the resource as updated" do
579
+ @provider.run_action(:create)
580
+ @new_resource.should_not be_updated_by_last_action
581
+ end
582
+
583
+ it "should log nothing changed" do
584
+ Chef::Log.should_receive(:debug).with("Skipping existing cron entry '#{@new_resource.name}'")
585
+ @provider.run_action(:create)
586
+ end
587
+ end
588
+ end
589
+
590
+ describe "action_delete" do
591
+ before :each do
592
+ @provider.stub!(:write_crontab)
593
+ @provider.stub!(:read_crontab).and_return(nil)
594
+ end
595
+
596
+ context "when the user's crontab has no matching section" do
597
+ before :each do
598
+ @provider.cron_exists = false
599
+ end
600
+
601
+ it "should do nothing" do
602
+ @provider.should_not_receive(:write_crontab)
603
+ Chef::Log.should_not_receive(:info)
604
+ @provider.run_action(:delete)
605
+ end
606
+
607
+ it "should not mark the resource as updated" do
608
+ @provider.run_action(:delete)
609
+ @new_resource.should_not be_updated_by_last_action
610
+ end
611
+ end
612
+
613
+ context "when the user has a crontab with a matching section" do
614
+ before :each do
615
+ @provider.cron_exists = true
616
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
617
+ 0 2 * * * /some/other/command
618
+
619
+ # Chef Name: cronhole some stuff
620
+ 30 * * 3 * /bin/true
621
+ # Chef Name: something else
622
+ 2 * 1 * * /bin/false
623
+
624
+ # Another comment
625
+ CRONTAB
626
+ end
627
+
628
+ it "should remove the entry" do
629
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
630
+ 0 2 * * * /some/other/command
631
+
632
+ # Chef Name: something else
633
+ 2 * 1 * * /bin/false
634
+
635
+ # Another comment
636
+ ENDCRON
637
+ @provider.run_action(:delete)
638
+ end
639
+
640
+ it "should remove any env vars with the entry" do
641
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
642
+ 0 2 * * * /some/other/command
643
+
644
+ # Chef Name: cronhole some stuff
645
+ MAILTO=foo@example.com
646
+ FOO=test
647
+ 30 * * 3 * /bin/true
648
+ # Chef Name: something else
649
+ 2 * 1 * * /bin/false
650
+
651
+ # Another comment
652
+ CRONTAB
653
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
654
+ 0 2 * * * /some/other/command
655
+
656
+ # Chef Name: something else
657
+ 2 * 1 * * /bin/false
658
+
659
+ # Another comment
660
+ ENDCRON
661
+ @provider.run_action(:delete)
662
+ end
663
+
664
+ it "should mark the resource as updated" do
665
+ @provider.run_action(:delete)
666
+ @new_resource.should be_updated_by_last_action
667
+ end
668
+
669
+ it "should log the action" do
670
+ Chef::Log.should_receive(:info).with("#{@new_resource} deleted crontab entry")
671
+ @provider.run_action(:delete)
672
+ end
673
+ end
674
+
675
+ context "when the crontab has a matching section with no crontab line" do
676
+ before :each do
677
+ @provider.cron_exists = true
678
+ end
679
+
680
+ it "should remove the section" do
681
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
682
+ 0 2 * * * /some/other/command
683
+
684
+ # Chef Name: cronhole some stuff
685
+ CRONTAB
686
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
687
+ 0 2 * * * /some/other/command
688
+
689
+ ENDCRON
690
+ @provider.run_action(:delete)
691
+ end
692
+
693
+ it "should not blat following sections" do
694
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
695
+ 0 2 * * * /some/other/command
696
+
697
+ # Chef Name: cronhole some stuff
698
+ #30 * * 3 * /bin/true
699
+ # Chef Name: something else
700
+ 2 * 1 * * /bin/false
701
+
702
+ # Another comment
703
+ CRONTAB
704
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
705
+ 0 2 * * * /some/other/command
706
+
707
+ #30 * * 3 * /bin/true
708
+ # Chef Name: something else
709
+ 2 * 1 * * /bin/false
710
+
711
+ # Another comment
712
+ ENDCRON
713
+ @provider.run_action(:delete)
714
+ end
715
+
716
+ it "should remove any envvars with the section" do
717
+ @provider.stub!(:read_crontab).and_return(<<-CRONTAB)
718
+ 0 2 * * * /some/other/command
719
+
720
+ # Chef Name: cronhole some stuff
721
+ MAILTO=foo@example.com
722
+ #30 * * 3 * /bin/true
723
+ # Chef Name: something else
724
+ 2 * 1 * * /bin/false
725
+
726
+ # Another comment
727
+ CRONTAB
728
+ @provider.should_receive(:write_crontab).with(<<-ENDCRON)
729
+ 0 2 * * * /some/other/command
730
+
731
+ #30 * * 3 * /bin/true
732
+ # Chef Name: something else
733
+ 2 * 1 * * /bin/false
734
+
735
+ # Another comment
736
+ ENDCRON
737
+ @provider.run_action(:delete)
738
+ end
739
+ end
740
+ end
741
+
742
+ describe "read_crontab" do
743
+ before :each do
744
+ @status = mock("Status", :exitstatus => 0)
745
+ @stdout = StringIO.new(<<-CRONTAB)
746
+ 0 2 * * * /some/other/command
747
+
748
+ # Chef Name: something else
749
+ * 5 * * * /bin/true
750
+
751
+ # Another comment
752
+ CRONTAB
753
+ @provider.stub!(:popen4).and_yield(1234, StringIO.new, @stdout, StringIO.new).and_return(@status)
754
+ end
755
+
756
+ it "should call crontab -l with the user" do
757
+ @provider.should_receive(:popen4).with("crontab -l -u #{@new_resource.user}").and_return(@status)
758
+ @provider.send(:read_crontab)
759
+ end
760
+
761
+ it "should return the contents of the crontab" do
762
+ crontab = @provider.send(:read_crontab)
763
+ crontab.should == <<-CRONTAB
764
+ 0 2 * * * /some/other/command
765
+
766
+ # Chef Name: something else
767
+ * 5 * * * /bin/true
768
+
769
+ # Another comment
770
+ CRONTAB
771
+ end
772
+
773
+ it "should return nil if the user has no crontab" do
774
+ status = mock("Status", :exitstatus => 1)
775
+ @provider.stub!(:popen4).and_return(status)
776
+ @provider.send(:read_crontab).should == nil
777
+ end
778
+
779
+ it "should raise an exception if another error occurs" do
780
+ status = mock("Status", :exitstatus => 2)
781
+ @provider.stub!(:popen4).and_return(status)
782
+ lambda do
783
+ @provider.send(:read_crontab)
784
+ end.should raise_error(Chef::Exceptions::Cron, "Error determining state of #{@new_resource.name}, exit: 2")
785
+ end
786
+ end
787
+
788
+ describe "write_crontab" do
789
+ before :each do
790
+ @status = mock("Status", :exitstatus => 0)
791
+ @stdin = StringIO.new
792
+ @provider.stub!(:popen4).and_yield(1234, @stdin, StringIO.new, StringIO.new).and_return(@status)
793
+ end
794
+
795
+ it "should call crontab for the user" do
796
+ @provider.should_receive(:popen4).with("crontab -u #{@new_resource.user} -", :waitlast => true).and_return(@status)
797
+ @provider.send(:write_crontab, "Foo")
798
+ end
799
+
800
+ it "should write the given string to the crontab command" do
801
+ @provider.send(:write_crontab, "Foo\n# wibble\n wah!!")
802
+ @stdin.string.should == "Foo\n# wibble\n wah!!"
803
+ end
804
+
805
+ it "should raise an exception if the command returns non-zero" do
806
+ @status.stub!(:exitstatus).and_return(1)
807
+ lambda do
808
+ @provider.send(:write_crontab, "Foo")
809
+ end.should raise_error(Chef::Exceptions::Cron, "Error updating state of #{@new_resource.name}, exit: 1")
810
+ end
811
+ end
812
+ end