chef 10.34.6-x86-mingw32 → 11.6.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 (777) hide show
  1. checksums.yaml +5 -13
  2. data/CONTRIBUTING.md +155 -0
  3. data/README.md +89 -0
  4. data/Rakefile +18 -1
  5. data/bin/chef-apply +25 -0
  6. data/bin/chef-service-manager +37 -0
  7. data/bin/chef-shell +34 -0
  8. data/bin/shef +6 -5
  9. data/distro/common/html/chef-client.8.html +4 -4
  10. data/distro/common/html/chef-expander.8.html +4 -4
  11. data/distro/common/html/chef-expanderctl.8.html +4 -4
  12. data/distro/common/html/chef-server-webui.8.html +4 -4
  13. data/distro/common/html/chef-server.8.html +4 -4
  14. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  15. data/distro/common/html/chef-solo.8.html +4 -4
  16. data/distro/common/html/chef-solr.8.html +5 -5
  17. data/distro/common/html/knife-bootstrap.1.html +4 -4
  18. data/distro/common/html/knife-client.1.html +4 -4
  19. data/distro/common/html/knife-configure.1.html +4 -4
  20. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  21. data/distro/common/html/knife-cookbook.1.html +4 -4
  22. data/distro/common/html/knife-data-bag.1.html +4 -4
  23. data/distro/common/html/knife-environment.1.html +4 -4
  24. data/distro/common/html/knife-exec.1.html +9 -9
  25. data/distro/common/html/knife-index.1.html +4 -4
  26. data/distro/common/html/knife-node.1.html +4 -4
  27. data/distro/common/html/knife-role.1.html +4 -4
  28. data/distro/common/html/knife-search.1.html +4 -4
  29. data/distro/common/html/knife-ssh.1.html +4 -4
  30. data/distro/common/html/knife-status.1.html +4 -4
  31. data/distro/common/html/knife-tag.1.html +4 -4
  32. data/distro/common/html/knife.1.html +8 -13
  33. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  34. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  35. data/distro/common/man/man1/knife-client.1 +0 -99
  36. data/distro/common/man/man1/knife-configure.1 +1 -1
  37. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  38. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  39. data/distro/common/man/man1/knife-data-bag.1 +1 -1
  40. data/distro/common/man/man1/knife-environment.1 +0 -168
  41. data/distro/common/man/man1/knife-exec.1 +4 -7
  42. data/distro/common/man/man1/knife-index.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +1 -1
  44. data/distro/common/man/man1/knife-role.1 +1 -1
  45. data/distro/common/man/man1/knife-search.1 +1 -1
  46. data/distro/common/man/man1/knife-ssh.1 +1 -1
  47. data/distro/common/man/man1/knife-status.1 +1 -1
  48. data/distro/common/man/man1/knife-tag.1 +1 -1
  49. data/distro/common/man/man1/knife.1 +3 -6
  50. data/distro/common/man/man8/chef-client.8 +1 -1
  51. data/distro/common/man/man8/chef-expander.8 +1 -1
  52. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  53. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  54. data/distro/common/man/man8/chef-server.8 +1 -1
  55. data/distro/common/man/man8/chef-solo.8 +1 -1
  56. data/distro/common/man/man8/chef-solr.8 +1 -1
  57. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  58. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  59. data/distro/common/markdown/man1/knife.mkd +4 -9
  60. data/distro/debian/etc/default/chef-client +0 -1
  61. data/distro/debian/etc/init.d/chef-client +6 -4
  62. data/distro/windows/service_manager.rb +2 -146
  63. data/lib/chef.rb +3 -6
  64. data/lib/chef/api_client.rb +20 -130
  65. data/lib/chef/api_client/registration.rb +126 -0
  66. data/lib/chef/application.rb +68 -18
  67. data/lib/chef/application/apply.rb +162 -0
  68. data/lib/chef/application/client.rb +37 -22
  69. data/lib/chef/application/knife.rb +2 -4
  70. data/lib/chef/application/solo.rb +27 -13
  71. data/lib/chef/application/windows_service.rb +114 -54
  72. data/lib/chef/application/windows_service_manager.rb +179 -0
  73. data/lib/chef/applications.rb +1 -0
  74. data/lib/chef/chef_fs.rb +9 -0
  75. data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
  76. data/lib/chef/chef_fs/command_line.rb +284 -0
  77. data/lib/chef/chef_fs/config.rb +205 -0
  78. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  79. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
  80. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  81. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  82. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  83. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
  84. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  85. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
  86. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  87. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  88. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
  89. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  90. data/lib/chef/chef_fs/file_system.rb +426 -0
  91. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  92. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  93. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  94. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  95. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  96. data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
  97. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
  98. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
  99. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
  100. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  101. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +60 -0
  102. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
  103. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
  104. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
  105. data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
  106. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  107. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  108. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  109. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
  110. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
  111. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
  112. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  113. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  114. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  115. data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
  116. data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
  117. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  118. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  119. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  120. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
  121. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  122. data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
  123. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
  124. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  125. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
  126. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  127. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +113 -0
  128. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
  129. data/lib/chef/chef_fs/knife.rb +116 -0
  130. data/lib/chef/chef_fs/parallelizer.rb +129 -0
  131. data/lib/chef/chef_fs/path_utils.rb +90 -0
  132. data/lib/chef/chef_fs/raw_request.rb +79 -0
  133. data/lib/chef/client.rb +111 -34
  134. data/lib/chef/config.rb +111 -102
  135. data/lib/chef/cookbook/chefignore.rb +2 -1
  136. data/lib/chef/cookbook/metadata.rb +0 -2
  137. data/lib/chef/cookbook/syntax_check.rb +76 -14
  138. data/lib/chef/cookbook_loader.rb +39 -26
  139. data/lib/chef/cookbook_uploader.rb +16 -9
  140. data/lib/chef/cookbook_version.rb +2 -410
  141. data/lib/chef/daemon.rb +24 -19
  142. data/lib/chef/data_bag.rb +20 -104
  143. data/lib/chef/data_bag_item.rb +2 -65
  144. data/lib/chef/deprecation/mixin/template.rb +49 -0
  145. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  146. data/lib/chef/deprecation/provider/file.rb +197 -0
  147. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  148. data/lib/chef/deprecation/provider/template.rb +63 -0
  149. data/lib/chef/deprecation/warnings.rb +38 -0
  150. data/lib/chef/digester.rb +73 -0
  151. data/lib/chef/dsl.rb +6 -0
  152. data/lib/chef/dsl/data_query.rb +71 -0
  153. data/lib/chef/dsl/include_attribute.rb +63 -0
  154. data/lib/chef/dsl/include_recipe.rb +45 -0
  155. data/lib/chef/dsl/platform_introspection.rb +218 -0
  156. data/lib/chef/dsl/recipe.rb +87 -0
  157. data/lib/chef/dsl/registry_helper.rb +59 -0
  158. data/lib/chef/encrypted_data_bag_item.rb +171 -24
  159. data/lib/chef/environment.rb +39 -179
  160. data/lib/chef/event_dispatch/base.rb +3 -0
  161. data/lib/chef/exceptions.rb +107 -8
  162. data/lib/chef/file_access_control/unix.rb +64 -7
  163. data/lib/chef/file_access_control/windows.rb +22 -11
  164. data/lib/chef/file_content_management/content_base.rb +56 -0
  165. data/lib/chef/file_content_management/deploy.rb +38 -0
  166. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  167. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  168. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  169. data/lib/chef/file_content_management/tempfile.rb +61 -0
  170. data/lib/chef/formatters/base.rb +4 -1
  171. data/lib/chef/formatters/doc.rb +1 -1
  172. data/lib/chef/formatters/error_descriptor.rb +5 -4
  173. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
  174. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -0
  175. data/lib/chef/json_compat.rb +15 -14
  176. data/lib/chef/knife.rb +99 -41
  177. data/lib/chef/knife/bootstrap.rb +46 -2
  178. data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
  179. data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
  180. data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
  181. data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
  182. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
  183. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
  184. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
  185. data/lib/chef/knife/client_show.rb +2 -5
  186. data/lib/chef/knife/configure.rb +19 -17
  187. data/lib/chef/knife/cookbook_create.rb +6 -5
  188. data/lib/chef/knife/cookbook_download.rb +13 -5
  189. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  190. data/lib/chef/knife/cookbook_site_share.rb +1 -0
  191. data/lib/chef/knife/cookbook_test.rb +4 -2
  192. data/lib/chef/knife/cookbook_upload.rb +4 -4
  193. data/lib/chef/knife/core/bootstrap_context.rb +11 -5
  194. data/lib/chef/knife/core/generic_presenter.rb +42 -13
  195. data/lib/chef/knife/core/node_editor.rb +36 -16
  196. data/lib/chef/knife/core/node_presenter.rb +1 -1
  197. data/lib/chef/knife/core/subcommand_loader.rb +43 -12
  198. data/lib/chef/knife/core/text_formatter.rb +23 -37
  199. data/lib/chef/knife/core/ui.rb +34 -13
  200. data/lib/chef/knife/delete.rb +106 -0
  201. data/lib/chef/knife/deps.rb +139 -0
  202. data/lib/chef/knife/diff.rb +63 -0
  203. data/lib/chef/knife/download.rb +63 -0
  204. data/lib/chef/knife/edit.rb +76 -0
  205. data/lib/chef/knife/environment_show.rb +2 -0
  206. data/lib/chef/knife/exec.rb +5 -5
  207. data/lib/chef/knife/help_topics.rb +1 -1
  208. data/lib/chef/knife/index_rebuild.rb +91 -7
  209. data/lib/chef/knife/list.rb +153 -0
  210. data/lib/chef/knife/node_run_list_set.rb +66 -0
  211. data/lib/chef/knife/node_show.rb +1 -7
  212. data/lib/chef/knife/raw.rb +64 -0
  213. data/lib/chef/knife/role_show.rb +2 -4
  214. data/lib/chef/knife/search.rb +45 -28
  215. data/lib/chef/knife/show.rb +55 -0
  216. data/lib/chef/knife/ssh.rb +14 -2
  217. data/lib/chef/knife/upload.rb +69 -0
  218. data/lib/chef/knife/user_create.rb +93 -0
  219. data/lib/chef/knife/user_delete.rb +46 -0
  220. data/lib/chef/knife/user_edit.rb +53 -0
  221. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
  222. data/lib/chef/knife/user_reregister.rb +59 -0
  223. data/lib/chef/knife/user_show.rb +49 -0
  224. data/lib/chef/knife/xargs.rb +265 -0
  225. data/lib/chef/log.rb +2 -2
  226. data/lib/chef/mixin/checksum.rb +3 -3
  227. data/lib/chef/mixin/deep_merge.rb +78 -194
  228. data/lib/chef/mixin/deprecation.rb +35 -0
  229. data/lib/chef/mixin/file_class.rb +0 -9
  230. data/lib/chef/mixin/language.rb +22 -223
  231. data/lib/chef/mixin/language_include_attribute.rb +10 -36
  232. data/lib/chef/mixin/language_include_recipe.rb +7 -33
  233. data/lib/chef/mixin/params_validate.rb +0 -3
  234. data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
  235. data/lib/chef/mixin/securable.rb +32 -7
  236. data/lib/chef/mixin/template.rb +156 -26
  237. data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
  238. data/lib/chef/mixins.rb +1 -5
  239. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
  240. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  241. data/lib/chef/monkey_patches/net_http.rb +0 -34
  242. data/lib/chef/monkey_patches/securerandom.rb +44 -0
  243. data/lib/chef/monologger.rb +93 -0
  244. data/lib/chef/node.rb +139 -308
  245. data/lib/chef/node/attribute.rb +367 -473
  246. data/lib/chef/node/attribute_collections.rb +206 -0
  247. data/lib/chef/node/immutable_collections.rb +186 -0
  248. data/lib/chef/platform.rb +4 -496
  249. data/lib/chef/platform/provider_mapping.rb +529 -0
  250. data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
  251. data/lib/chef/provider.rb +14 -58
  252. data/lib/chef/provider/batch.rb +35 -0
  253. data/lib/chef/provider/breakpoint.rb +6 -6
  254. data/lib/chef/provider/cookbook_file.rb +11 -80
  255. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  256. data/lib/chef/provider/deploy.rb +26 -21
  257. data/lib/chef/provider/deploy/revision.rb +27 -0
  258. data/lib/chef/provider/directory.rb +12 -18
  259. data/lib/chef/provider/execute.rb +22 -5
  260. data/lib/chef/provider/file.rb +297 -248
  261. data/lib/chef/provider/file/content.rb +39 -0
  262. data/lib/chef/provider/git.rb +76 -43
  263. data/lib/chef/provider/group.rb +31 -51
  264. data/lib/chef/provider/group/dscl.rb +13 -53
  265. data/lib/chef/provider/group/gpasswd.rb +19 -14
  266. data/lib/chef/provider/group/groupadd.rb +1 -41
  267. data/lib/chef/provider/group/groupmod.rb +36 -46
  268. data/lib/chef/provider/group/pw.rb +16 -59
  269. data/lib/chef/provider/group/suse.rb +13 -16
  270. data/lib/chef/provider/group/usermod.rb +18 -40
  271. data/lib/chef/provider/group/windows.rb +6 -13
  272. data/lib/chef/provider/http_request.rb +25 -42
  273. data/lib/chef/provider/ifconfig.rb +25 -35
  274. data/lib/chef/provider/ifconfig/debian.rb +71 -0
  275. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  276. data/lib/chef/provider/link.rb +12 -3
  277. data/lib/chef/provider/lwrp_base.rb +150 -0
  278. data/lib/chef/provider/mount.rb +1 -1
  279. data/lib/chef/provider/mount/mount.rb +8 -3
  280. data/lib/chef/provider/mount/windows.rb +4 -1
  281. data/lib/chef/provider/package/rpm.rb +2 -2
  282. data/lib/chef/provider/package/rubygems.rb +4 -1
  283. data/lib/chef/provider/package/smartos.rb +47 -36
  284. data/lib/chef/provider/package/zypper.rb +45 -55
  285. data/lib/chef/provider/powershell_script.rb +77 -0
  286. data/lib/chef/provider/registry_key.rb +156 -0
  287. data/lib/chef/provider/remote_directory.rb +6 -5
  288. data/lib/chef/provider/remote_file.rb +13 -100
  289. data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
  290. data/lib/chef/provider/remote_file/content.rb +75 -0
  291. data/lib/chef/provider/remote_file/fetcher.rb +43 -0
  292. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  293. data/lib/chef/provider/remote_file/http.rb +124 -0
  294. data/lib/chef/provider/remote_file/local_file.rb +47 -0
  295. data/lib/chef/provider/route.rb +6 -2
  296. data/lib/chef/provider/ruby_block.rb +5 -2
  297. data/lib/chef/provider/script.rb +14 -2
  298. data/lib/chef/provider/service.rb +15 -0
  299. data/lib/chef/provider/service/init.rb +9 -7
  300. data/lib/chef/provider/service/macosx.rb +29 -81
  301. data/lib/chef/provider/service/simple.rb +1 -1
  302. data/lib/chef/provider/service/solaris.rb +6 -5
  303. data/lib/chef/provider/template.rb +16 -81
  304. data/lib/chef/provider/template/content.rb +61 -0
  305. data/lib/chef/provider/template_finder.rb +61 -0
  306. data/lib/chef/provider/user.rb +0 -1
  307. data/lib/chef/provider/user/dscl.rb +175 -568
  308. data/lib/chef/provider/user/useradd.rb +50 -54
  309. data/lib/chef/provider/windows_script.rb +73 -0
  310. data/lib/chef/providers.rb +18 -1
  311. data/lib/chef/recipe.rb +14 -8
  312. data/lib/chef/resource.rb +52 -146
  313. data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
  314. data/lib/chef/resource/conditional.rb +4 -0
  315. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  316. data/lib/chef/resource/file.rb +31 -3
  317. data/lib/chef/resource/group.rb +1 -11
  318. data/lib/chef/resource/http_request.rb +2 -1
  319. data/lib/chef/resource/link.rb +17 -0
  320. data/lib/chef/resource/lwrp_base.rb +132 -0
  321. data/lib/chef/resource/mount.rb +39 -13
  322. data/lib/chef/resource/powershell_script.rb +31 -0
  323. data/lib/chef/resource/registry_key.rb +86 -0
  324. data/lib/chef/resource/remote_directory.rb +6 -5
  325. data/lib/chef/resource/remote_file.rb +62 -25
  326. data/lib/chef/resource/route.rb +1 -1
  327. data/lib/chef/resource/ruby_block.rb +2 -2
  328. data/lib/chef/resource/service.rb +14 -0
  329. data/lib/chef/resource/template.rb +145 -0
  330. data/lib/chef/resource/user.rb +0 -18
  331. data/lib/chef/resource/windows_script.rb +62 -0
  332. data/lib/chef/resource_collection.rb +69 -31
  333. data/lib/chef/resource_reporter.rb +81 -52
  334. data/lib/chef/resources.rb +4 -1
  335. data/lib/chef/rest.rb +55 -127
  336. data/lib/chef/rest/auth_credentials.rb +4 -20
  337. data/lib/chef/rest/rest_request.rb +7 -8
  338. data/lib/chef/role.rb +1 -97
  339. data/lib/chef/run_context.rb +108 -130
  340. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  341. data/lib/chef/run_list.rb +0 -2
  342. data/lib/chef/run_list/run_list_expansion.rb +1 -16
  343. data/lib/chef/run_lock.rb +96 -0
  344. data/lib/chef/runner.rb +28 -6
  345. data/lib/chef/sandbox.rb +15 -148
  346. data/lib/chef/scan_access_control.rb +8 -5
  347. data/lib/chef/search/query.rb +2 -2
  348. data/lib/chef/shef/ext.rb +3 -575
  349. data/lib/chef/{shef.rb → shell.rb} +35 -40
  350. data/lib/chef/shell/ext.rb +593 -0
  351. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  352. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  353. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +15 -13
  354. data/lib/chef/shell_out.rb +7 -0
  355. data/lib/chef/user.rb +182 -0
  356. data/lib/chef/util/backup.rb +84 -0
  357. data/lib/chef/util/diff.rb +145 -0
  358. data/lib/chef/util/file_edit.rb +1 -1
  359. data/lib/chef/util/selinux.rb +100 -0
  360. data/lib/chef/util/windows/net_group.rb +1 -5
  361. data/lib/chef/util/windows/net_user.rb +14 -1
  362. data/lib/chef/util/windows/volume.rb +2 -2
  363. data/lib/chef/version.rb +1 -1
  364. data/lib/chef/version/platform.rb +42 -0
  365. data/lib/chef/version_class.rb +1 -1
  366. data/lib/chef/version_constraint.rb +6 -5
  367. data/lib/chef/{index_queue.rb → version_constraint/platform.rb} +11 -14
  368. data/lib/chef/win32/api/file.rb +8 -2
  369. data/lib/chef/win32/api/security.rb +45 -1
  370. data/lib/chef/win32/registry.rb +382 -0
  371. data/lib/chef/win32/security.rb +19 -0
  372. data/lib/chef/win32/version.rb +25 -8
  373. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  374. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  375. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  376. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  377. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  378. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  379. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  380. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  381. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  382. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  383. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  384. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  385. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  386. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  387. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  388. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  389. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  390. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  391. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  392. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  393. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  394. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  395. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  396. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  397. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  398. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  399. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  400. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  401. data/spec/data/apt/var/www/apt/db/version +4 -0
  402. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  403. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  404. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  405. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  406. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  407. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  408. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  409. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  410. data/spec/data/bootstrap/secret.erb +9 -0
  411. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  412. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  413. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  414. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  415. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  416. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  417. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  418. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  419. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  420. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  421. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  422. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  423. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  424. data/spec/data/knife_subcommand/test_yourself.rb +8 -0
  425. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  426. data/spec/data/nodes/default.rb +3 -3
  427. data/spec/data/nodes/test.example.com.rb +3 -3
  428. data/spec/data/nodes/test.rb +3 -3
  429. data/spec/data/null_config.rb +1 -0
  430. data/spec/data/partial_one.erb +1 -0
  431. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  432. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  433. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  434. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  435. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  436. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  437. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  438. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  439. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  440. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  441. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  442. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  443. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  444. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  445. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  446. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  447. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  448. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  449. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  450. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  451. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  452. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  453. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  454. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  455. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  456. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  457. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  458. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  459. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  460. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  461. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  462. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  463. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  464. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  465. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  466. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  467. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  468. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  469. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  470. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  471. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  472. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  473. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  474. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  475. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  476. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  477. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  478. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  479. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  480. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  481. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  482. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  483. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  484. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  485. data/spec/data/shef-config.rb +10 -0
  486. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  487. data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
  488. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  489. data/spec/functional/knife/exec_spec.rb +3 -3
  490. data/spec/functional/knife/smoke_test.rb +34 -0
  491. data/spec/functional/knife/ssh_spec.rb +5 -1
  492. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  493. data/spec/functional/resource/batch_spec.rb +64 -0
  494. data/spec/functional/resource/cookbook_file_spec.rb +15 -9
  495. data/spec/functional/resource/deploy_revision_spec.rb +180 -0
  496. data/spec/functional/resource/directory_spec.rb +5 -1
  497. data/spec/functional/resource/file_spec.rb +71 -21
  498. data/spec/functional/resource/git_spec.rb +259 -0
  499. data/spec/functional/resource/link_spec.rb +424 -388
  500. data/spec/functional/resource/package_spec.rb +297 -0
  501. data/spec/functional/resource/powershell_spec.rb +188 -0
  502. data/spec/functional/resource/registry_spec.rb +576 -0
  503. data/spec/functional/resource/remote_directory_spec.rb +143 -37
  504. data/spec/functional/resource/remote_file_spec.rb +99 -13
  505. data/spec/functional/resource/template_spec.rb +180 -3
  506. data/spec/functional/resource/user_spec.rb +547 -0
  507. data/spec/functional/run_lock_spec.rb +243 -0
  508. data/spec/functional/shell_spec.rb +102 -0
  509. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  510. data/spec/functional/win32/security_spec.rb +37 -0
  511. data/spec/functional/win32/service_manager_spec.rb +269 -0
  512. data/spec/functional/win32/versions_spec.rb +78 -0
  513. data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
  514. data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
  515. data/spec/integration/knife/chefignore_spec.rb +271 -0
  516. data/spec/integration/knife/delete_spec.rb +944 -0
  517. data/spec/integration/knife/deps_spec.rb +648 -0
  518. data/spec/integration/knife/diff_spec.rb +536 -0
  519. data/spec/integration/knife/download_spec.rb +962 -0
  520. data/spec/integration/knife/list_spec.rb +633 -0
  521. data/spec/integration/knife/raw_spec.rb +166 -0
  522. data/spec/integration/knife/redirection_spec.rb +57 -0
  523. data/spec/integration/knife/show_spec.rb +158 -0
  524. data/spec/integration/knife/upload_spec.rb +1060 -0
  525. data/spec/integration/solo/solo_spec.rb +41 -0
  526. data/spec/spec_helper.rb +49 -13
  527. data/spec/stress/win32/security_spec.rb +1 -1
  528. data/spec/support/chef_helpers.rb +33 -3
  529. data/spec/support/lib/chef/resource/cat.rb +3 -5
  530. data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
  531. data/spec/support/lib/chef/resource/zen_master.rb +8 -10
  532. data/spec/support/platform_helpers.rb +46 -13
  533. data/spec/support/platforms/win32/spec_service.rb +59 -0
  534. data/spec/support/shared/functional/diff_disabled.rb +10 -0
  535. data/spec/support/shared/functional/directory_resource.rb +129 -38
  536. data/spec/support/shared/functional/file_resource.rb +837 -71
  537. data/spec/support/shared/functional/securable_resource.rb +189 -58
  538. data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
  539. data/spec/support/shared/integration/integration_helper.rb +166 -0
  540. data/spec/support/shared/integration/knife_support.rb +171 -0
  541. data/spec/support/shared/unit/execute_resource.rb +125 -0
  542. data/spec/support/shared/unit/file_system_support.rb +70 -0
  543. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  544. data/spec/support/shared/unit/provider/file.rb +609 -0
  545. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
  546. data/spec/support/shared/unit/script_resource.rb +52 -0
  547. data/spec/support/shared/unit/windows_script_resource.rb +48 -0
  548. data/spec/tiny_server.rb +13 -11
  549. data/spec/unit/api_client/registration_spec.rb +172 -0
  550. data/spec/unit/api_client_spec.rb +78 -156
  551. data/spec/unit/application/apply.rb +84 -0
  552. data/spec/unit/application/client_spec.rb +16 -14
  553. data/spec/unit/application/knife_spec.rb +17 -0
  554. data/spec/unit/application/solo_spec.rb +1 -1
  555. data/spec/unit/application_spec.rb +113 -3
  556. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  557. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  558. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  559. data/spec/unit/chef_fs/file_system_spec.rb +135 -0
  560. data/spec/unit/client_spec.rb +195 -23
  561. data/spec/unit/config_spec.rb +102 -51
  562. data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
  563. data/spec/unit/cookbook_loader_spec.rb +154 -91
  564. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  565. data/spec/unit/cookbook_spec.rb +3 -20
  566. data/spec/unit/cookbook_version_spec.rb +23 -122
  567. data/spec/unit/daemon_spec.rb +24 -19
  568. data/spec/unit/data_bag_spec.rb +13 -4
  569. data/spec/unit/deprecation_spec.rb +86 -0
  570. data/spec/unit/digester_spec.rb +50 -0
  571. data/spec/unit/dsl/data_query_spec.rb +66 -0
  572. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  573. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  574. data/spec/unit/encrypted_data_bag_item_spec.rb +197 -157
  575. data/spec/unit/environment_spec.rb +94 -126
  576. data/spec/unit/exceptions_spec.rb +8 -4
  577. data/spec/unit/file_access_control_spec.rb +21 -1
  578. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  579. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  580. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  581. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
  582. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +6 -5
  583. data/spec/unit/json_compat_spec.rb +8 -0
  584. data/spec/unit/knife/bootstrap_spec.rb +130 -29
  585. data/spec/unit/knife/configure_spec.rb +64 -45
  586. data/spec/unit/knife/cookbook_download_spec.rb +24 -3
  587. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  588. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  589. data/spec/unit/knife/cookbook_upload_spec.rb +39 -0
  590. data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
  591. data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
  592. data/spec/unit/knife/core/ui_spec.rb +196 -124
  593. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  594. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  595. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  596. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  597. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  598. data/spec/unit/knife/knife_help.rb +7 -7
  599. data/spec/unit/knife/node_edit_spec.rb +6 -33
  600. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  601. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  602. data/spec/unit/knife/ssh_spec.rb +12 -15
  603. data/spec/unit/knife/status_spec.rb +2 -2
  604. data/spec/unit/knife/user_create_spec.rb +86 -0
  605. data/spec/unit/knife/user_delete_spec.rb +39 -0
  606. data/spec/unit/knife/user_edit_spec.rb +42 -0
  607. data/spec/unit/knife/user_list_spec.rb +32 -0
  608. data/spec/unit/knife/user_reregister_spec.rb +53 -0
  609. data/spec/unit/knife/user_show_spec.rb +41 -0
  610. data/spec/unit/knife_spec.rb +74 -0
  611. data/spec/unit/lwrp_spec.rb +102 -60
  612. data/spec/unit/mixin/checksum_spec.rb +2 -2
  613. data/spec/unit/mixin/deep_merge_spec.rb +130 -791
  614. data/spec/unit/mixin/deprecation_spec.rb +23 -0
  615. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
  616. data/spec/unit/mixin/params_validate_spec.rb +4 -2
  617. data/spec/unit/mixin/securable_spec.rb +5 -3
  618. data/spec/unit/mixin/template_spec.rb +145 -14
  619. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  620. data/spec/unit/node/attribute_spec.rb +273 -173
  621. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  622. data/spec/unit/node_spec.rb +418 -370
  623. data/spec/unit/platform_spec.rb +21 -8
  624. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  625. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  626. data/spec/unit/provider/cookbook_file_spec.rb +26 -187
  627. data/spec/unit/provider/cron/solaris_spec.rb +1 -1
  628. data/spec/unit/provider/deploy/revision_spec.rb +19 -11
  629. data/spec/unit/provider/deploy_spec.rb +2 -2
  630. data/spec/unit/provider/directory_spec.rb +99 -67
  631. data/spec/unit/provider/env_spec.rb +2 -2
  632. data/spec/unit/provider/execute_spec.rb +27 -1
  633. data/spec/unit/provider/file/content_spec.rb +101 -0
  634. data/spec/unit/provider/file_spec.rb +25 -475
  635. data/spec/unit/provider/git_spec.rb +224 -28
  636. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  637. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  638. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  639. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  640. data/spec/unit/provider/group/pw_spec.rb +15 -12
  641. data/spec/unit/provider/group/usermod_spec.rb +9 -22
  642. data/spec/unit/provider/group/windows_spec.rb +8 -0
  643. data/spec/unit/provider/group_spec.rb +6 -28
  644. data/spec/unit/provider/http_request_spec.rb +28 -69
  645. data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
  646. data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
  647. data/spec/unit/provider/ifconfig_spec.rb +0 -33
  648. data/spec/unit/provider/mount/mount_spec.rb +33 -2
  649. data/spec/unit/provider/mount/windows_spec.rb +4 -1
  650. data/spec/unit/provider/mount_spec.rb +16 -6
  651. data/spec/unit/provider/ohai_spec.rb +4 -4
  652. data/spec/unit/provider/package/apt_spec.rb +0 -1
  653. data/spec/unit/provider/package/ips_spec.rb +0 -1
  654. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  655. data/spec/unit/provider/package/rubygems_spec.rb +1 -1
  656. data/spec/unit/provider/package/smartos_spec.rb +3 -2
  657. data/spec/unit/provider/package/zypper_spec.rb +84 -22
  658. data/spec/unit/provider/package_spec.rb +7 -9
  659. data/spec/unit/provider/powershell_spec.rb +38 -0
  660. data/spec/unit/provider/registry_key_spec.rb +269 -0
  661. data/spec/unit/provider/remote_directory_spec.rb +7 -7
  662. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
  663. data/spec/unit/provider/remote_file/content_spec.rb +230 -0
  664. data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
  665. data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
  666. data/spec/unit/provider/remote_file/http_spec.rb +319 -0
  667. data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
  668. data/spec/unit/provider/remote_file_spec.rb +33 -259
  669. data/spec/unit/provider/route_spec.rb +29 -12
  670. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  671. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  672. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  673. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  674. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  675. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  676. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  677. data/spec/unit/provider/service/macosx_spec.rb +176 -207
  678. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  679. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  680. data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
  681. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  682. data/spec/unit/provider/service/upstart_service_spec.rb +11 -11
  683. data/spec/unit/provider/service_spec.rb +3 -3
  684. data/spec/unit/provider/subversion_spec.rb +1 -1
  685. data/spec/unit/provider/template/content_spec.rb +78 -0
  686. data/spec/unit/provider/template_spec.rb +52 -160
  687. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  688. data/spec/unit/provider/user/solaris_spec.rb +39 -373
  689. data/spec/unit/provider/user/useradd_spec.rb +12 -379
  690. data/spec/unit/provider/user_spec.rb +1 -1
  691. data/spec/unit/recipe_spec.rb +10 -8
  692. data/spec/unit/registry_helper_spec.rb +376 -0
  693. data/spec/unit/resource/batch_spec.rb +48 -0
  694. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  695. data/spec/unit/resource/execute_spec.rb +3 -101
  696. data/spec/unit/resource/file_spec.rb +0 -5
  697. data/spec/unit/resource/group_spec.rb +9 -0
  698. data/spec/unit/resource/ifconfig_spec.rb +60 -1
  699. data/spec/unit/resource/link_spec.rb +1 -0
  700. data/spec/unit/resource/mount_spec.rb +37 -11
  701. data/spec/unit/resource/powershell_spec.rb +48 -0
  702. data/spec/unit/resource/registry_key_spec.rb +171 -0
  703. data/spec/unit/resource/remote_file_spec.rb +63 -25
  704. data/spec/unit/resource/route_spec.rb +1 -1
  705. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  706. data/spec/unit/resource/script_spec.rb +13 -36
  707. data/spec/unit/resource/service_spec.rb +11 -0
  708. data/spec/unit/resource/template_spec.rb +111 -8
  709. data/spec/unit/resource/user_spec.rb +7 -0
  710. data/spec/unit/resource_collection_spec.rb +61 -32
  711. data/spec/unit/resource_reporter_spec.rb +115 -102
  712. data/spec/unit/resource_spec.rb +197 -5
  713. data/spec/unit/rest/auth_credentials_spec.rb +4 -21
  714. data/spec/unit/rest_spec.rb +134 -284
  715. data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -0
  716. data/spec/unit/run_context_spec.rb +18 -4
  717. data/spec/unit/run_list_spec.rb +0 -209
  718. data/spec/unit/run_lock_spec.rb +37 -0
  719. data/spec/unit/runner_spec.rb +102 -3
  720. data/spec/unit/scan_access_control_spec.rb +8 -6
  721. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  722. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  723. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +16 -58
  724. data/spec/unit/shell_out_spec.rb +18 -0
  725. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  726. data/spec/unit/user_spec.rb +255 -0
  727. data/spec/unit/util/backup_spec.rb +149 -0
  728. data/spec/unit/util/diff_spec.rb +596 -0
  729. data/spec/unit/util/selinux_spec.rb +172 -0
  730. data/spec/unit/version/platform_spec.rb +61 -0
  731. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  732. data/spec/unit/version_constraint_spec.rb +5 -0
  733. metadata +493 -264
  734. data/README.rdoc +0 -177
  735. data/distro/common/html/knife-recipe.1.html +0 -92
  736. data/lib/chef/certificate.rb +0 -161
  737. data/lib/chef/checksum.rb +0 -167
  738. data/lib/chef/checksum_cache.rb +0 -190
  739. data/lib/chef/cookbook_version_selector.rb +0 -168
  740. data/lib/chef/couchdb.rb +0 -246
  741. data/lib/chef/index_queue/amqp_client.rb +0 -116
  742. data/lib/chef/index_queue/consumer.rb +0 -76
  743. data/lib/chef/index_queue/indexable.rb +0 -109
  744. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  745. data/lib/chef/monkey_patches/dir.rb +0 -36
  746. data/lib/chef/monkey_patches/moneta.rb +0 -50
  747. data/lib/chef/monkey_patches/uri.rb +0 -70
  748. data/lib/chef/openid_registration.rb +0 -187
  749. data/lib/chef/solr_query.rb +0 -187
  750. data/lib/chef/solr_query/lucene.treetop +0 -150
  751. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  752. data/lib/chef/solr_query/query_transform.rb +0 -65
  753. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  754. data/lib/chef/webui_user.rb +0 -231
  755. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  756. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  757. data/spec/data/mac_users/10.7.plist.xml +0 -559
  758. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  759. data/spec/data/mac_users/10.8.plist.xml +0 -559
  760. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  761. data/spec/data/mac_users/10.9.plist.xml +0 -560
  762. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  763. data/spec/functional/resource/base.rb +0 -40
  764. data/spec/functional/resource/group_spec.rb +0 -343
  765. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  766. data/spec/unit/certificate_spec.rb +0 -76
  767. data/spec/unit/checksum_cache_spec.rb +0 -209
  768. data/spec/unit/checksum_spec.rb +0 -94
  769. data/spec/unit/couchdb_spec.rb +0 -274
  770. data/spec/unit/index_queue_spec.rb +0 -391
  771. data/spec/unit/mixin/language_spec.rb +0 -305
  772. data/spec/unit/openid_registration_spec.rb +0 -153
  773. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  774. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  775. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  776. data/spec/unit/solr_query_spec.rb +0 -203
  777. data/spec/unit/webui_user_spec.rb +0 -238
@@ -51,7 +51,7 @@ describe Chef::Provider::Route do
51
51
  describe Chef::Provider::Route, "load_current_resource" do
52
52
  context "on linux" do
53
53
  before do
54
- @node[:os] = 'linux'
54
+ @node.automatic_attrs[:os] = 'linux'
55
55
  routing_table = "Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT\n" +
56
56
  "eth0 0064A8C0 0984A8C0 0003 0 0 0 00FFFFFF 0 0 0\n"
57
57
  route_file = StringIO.new(routing_table)
@@ -108,6 +108,21 @@ describe Chef::Provider::Route do
108
108
  @provider.run_action(:add)
109
109
  @new_resource.should_not be_updated
110
110
  end
111
+
112
+ it "should not delete config file for :add action (CHEF-3332)" do
113
+ @node.automatic_attrs[:platform] = 'centos'
114
+
115
+ route_file = StringIO.new
116
+ File.should_receive(:new).and_return(route_file)
117
+ @resource_add = Chef::Resource::Route.new('192.168.1.0/24 via 192.168.0.1')
118
+ @run_context.resource_collection << @resource_add
119
+ @provider.stub!(:run_command).and_return(true)
120
+
121
+ @resource_add.action(:add)
122
+ @provider.run_action(:add)
123
+ route_file.string.split("\n").should have(1).items
124
+ route_file.string.should match(/^192\.168\.1\.0\/24 via 192\.168\.0\.1$/)
125
+ end
111
126
  end
112
127
 
113
128
  describe Chef::Provider::Route, "action_delete" do
@@ -140,12 +155,12 @@ describe Chef::Provider::Route do
140
155
  end
141
156
 
142
157
  it "should include ' via $gateway ' when a gateway is specified" do
143
- @provider.generate_command(:add).should match(/\svia\s#{@new_resource.gateway}\s/)
158
+ @provider.generate_command(:add).should match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\s/)
144
159
  end
145
160
 
146
161
  it "should not include ' via $gateway ' when a gateway is not specified" do
147
162
  @new_resource.stub!(:gateway).and_return(nil)
148
- @provider.generate_command(:add).should_not match(/\svia\s#{@new_resource.gateway}\s/)
163
+ @provider.generate_command(:add).should_not match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\s/)
149
164
  end
150
165
  end
151
166
 
@@ -161,12 +176,12 @@ describe Chef::Provider::Route do
161
176
  end
162
177
 
163
178
  it "should include ' via $gateway ' when a gateway is specified" do
164
- @provider.generate_command(:delete).should match(/\svia\s#{@new_resource.gateway}\s/)
179
+ @provider.generate_command(:delete).should match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\s/)
165
180
  end
166
181
 
167
182
  it "should not include ' via $gateway ' when a gateway is not specified" do
168
183
  @new_resource.stub!(:gateway).and_return(nil)
169
- @provider.generate_command(:delete).should_not match(/\svia\s#{@new_resource.gateway}\s/)
184
+ @provider.generate_command(:delete).should_not match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\s/)
170
185
  end
171
186
  end
172
187
 
@@ -181,11 +196,11 @@ describe Chef::Provider::Route do
181
196
  end
182
197
 
183
198
  it "should include ' via $gateway ' when a gateway is specified" do
184
- @provider.config_file_contents(:add, { :target => @new_resource.target, :gateway => @new_resource.gateway}).should match(/\svia\s#{@new_resource.gateway}\n/)
199
+ @provider.config_file_contents(:add, { :target => @new_resource.target, :gateway => @new_resource.gateway}).should match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\n/)
185
200
  end
186
201
 
187
202
  it "should not include ' via $gateway ' when a gateway is not specified" do
188
- @provider.generate_command(:add).should_not match(/\svia\s#{@new_resource.gateway}\n/)
203
+ @provider.generate_command(:add).should_not match(/\svia\s#{Regexp.escape(@new_resource.gateway.to_s)}\n/)
189
204
  end
190
205
  end
191
206
 
@@ -198,7 +213,7 @@ describe Chef::Provider::Route do
198
213
  describe Chef::Provider::Route, "generate_config method" do
199
214
  %w[ centos redhat fedora ].each do |platform|
200
215
  it "should write a route file on #{platform} platform" do
201
- @node[:platform] = platform
216
+ @node.automatic_attrs[:platform] = platform
202
217
 
203
218
  route_file = StringIO.new
204
219
  File.should_receive(:new).with("/etc/sysconfig/network-scripts/route-eth0", "w").and_return(route_file)
@@ -209,18 +224,20 @@ describe Chef::Provider::Route do
209
224
  end
210
225
 
211
226
  it "should put all routes for a device in a route config file" do
212
- @node[:platform] = 'centos'
227
+ @node.automatic_attrs[:platform] = 'centos'
228
+
213
229
  route_file = StringIO.new
214
230
  File.should_receive(:new).and_return(route_file)
215
231
  @run_context.resource_collection << Chef::Resource::Route.new('192.168.1.0/24 via 192.168.0.1')
216
232
  @run_context.resource_collection << Chef::Resource::Route.new('192.168.2.0/24 via 192.168.0.1')
217
233
  @run_context.resource_collection << Chef::Resource::Route.new('192.168.3.0/24 via 192.168.0.1')
218
234
 
235
+ @provider.action = :add
219
236
  @provider.generate_config
220
237
  route_file.string.split("\n").should have(3).items
221
- route_file.string.should match(/^192.168.1.0\/24 via 192.168.0.1$/)
222
- route_file.string.should match(/^192.168.2.0\/24 via 192.168.0.1$/)
223
- route_file.string.should match(/^192.168.3.0\/24 via 192.168.0.1$/)
238
+ route_file.string.should match(/^192\.168\.1\.0\/24 via 192\.168\.0\.1$/)
239
+ route_file.string.should match(/^192\.168\.2\.0\/24 via 192\.168\.0\.1$/)
240
+ route_file.string.should match(/^192\.168\.3\.0\/24 via 192\.168\.0\.1$/)
224
241
  end
225
242
  end
226
243
  end
@@ -30,6 +30,14 @@ describe Chef::Provider::RubyBlock, "initialize" do
30
30
  end
31
31
 
32
32
  it "should call the block and flag the resource as updated" do
33
+ @provider.run_action(:run)
34
+ $evil_global_evil_laugh.should == :mwahahaha
35
+ @new_resource.should be_updated
36
+ end
37
+
38
+ it "accepts `create' as an alias for `run'" do
39
+ # SEE ALSO: CHEF-3500
40
+ # "create" used to be the default action, it was renamed.
33
41
  @provider.run_action(:create)
34
42
  $evil_global_evil_laugh.should == :mwahahaha
35
43
  @new_resource.should be_updated
@@ -27,7 +27,7 @@ require 'ostruct'
27
27
  describe Chef::Provider::Service::Arch, "load_current_resource" do
28
28
  before(:each) do
29
29
  @node = Chef::Node.new
30
- @node[:command] = {:ps => "ps -ef"}
30
+ @node.automatic_attrs[:command] = {:ps => "ps -ef"}
31
31
 
32
32
  @events = Chef::EventDispatch::Dispatcher.new
33
33
  @run_context = Chef::RunContext.new(@node, {}, @events)
@@ -62,7 +62,7 @@ describe Chef::Provider::Service::Arch, "load_current_resource" do
62
62
  @provider.load_current_resource
63
63
  end
64
64
 
65
- it "should set running to true if the status command returns 0" do
65
+ it "should set running to true if the the status command returns 0" do
66
66
  @provider.stub!(:shell_out).with("/etc/rc.d/chef status").and_return(OpenStruct.new(:exitstatus => 0))
67
67
  @provider.load_current_resource
68
68
  @provider.current_resource.running.should be_true
@@ -96,14 +96,14 @@ describe Chef::Provider::Service::Arch, "load_current_resource" do
96
96
  end
97
97
 
98
98
  it "should raise error if the node has a nil ps attribute and no other means to get status" do
99
- @node[:command] = {:ps => nil}
99
+ @node.automatic_attrs[:command] = {:ps => nil}
100
100
  @provider.define_resource_requirements
101
101
  @provider.action = :start
102
102
  lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
103
103
  end
104
104
 
105
105
  it "should raise error if the node has an empty ps attribute and no other means to get status" do
106
- @node[:command] = {:ps => ""}
106
+ @node.automatic_attrs[:command] = {:ps => ""}
107
107
  @provider.define_resource_requirements
108
108
  @provider.action = :start
109
109
  lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
@@ -130,7 +130,7 @@ DEFAULT_PS
130
130
  @status = mock("Status", :exitstatus => 0, :stdout => @stdout)
131
131
  @provider.stub!(:shell_out!).and_return(@status)
132
132
 
133
- @node[:command] = {:ps => "ps -ef"}
133
+ @node.automatic_attrs[:command] = {:ps => "ps -ef"}
134
134
  end
135
135
 
136
136
  it "determines the service is running when it appears in ps" do
@@ -21,7 +21,7 @@ require 'spec_helper'
21
21
  describe Chef::Provider::Service::Debian, "load_current_resource" do
22
22
  before(:each) do
23
23
  @node = Chef::Node.new
24
- @node[:command] = {:ps => 'fuuuu'}
24
+ @node.automatic_attrs[:command] = {:ps => 'fuuuu'}
25
25
  @events = Chef::EventDispatch::Dispatcher.new
26
26
  @run_context = Chef::RunContext.new(@node, {}, @events)
27
27
 
@@ -21,7 +21,7 @@ require 'spec_helper'
21
21
  describe Chef::Provider::Service::Freebsd do
22
22
  before do
23
23
  @node = Chef::Node.new
24
- @node[:command] = {:ps => "ps -ax"}
24
+ @node.automatic_attrs[:command] = {:ps => "ps -ax"}
25
25
  @events = Chef::EventDispatch::Dispatcher.new
26
26
  @run_context = Chef::RunContext.new(@node, {}, @events)
27
27
 
@@ -88,7 +88,7 @@ RC_SAMPLE
88
88
  @provider.load_current_resource
89
89
  end
90
90
 
91
- it "should set running to true if the status command returns 0" do
91
+ it "should set running to true if the the status command returns 0" do
92
92
  @provider.should_receive(:shell_out).with("/usr/local/etc/rc.d/#{@current_resource.service_name} status").and_return(@status)
93
93
  @current_resource.should_receive(:running).with(true)
94
94
  @provider.load_current_resource
@@ -115,13 +115,13 @@ RC_SAMPLE
115
115
  end
116
116
 
117
117
  it "should raise error if the node has a nil ps attribute and no other means to get status" do
118
- @node[:command] = {:ps => nil}
118
+ @node.automatic_attrs[:command] = {:ps => nil}
119
119
  @provider.define_resource_requirements
120
120
  lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
121
121
  end
122
122
 
123
123
  it "should raise error if the node has an empty ps attribute and no other means to get status" do
124
- @node[:command] = {:ps => ""}
124
+ @node.automatic_attrs[:command] = {:ps => ""}
125
125
  @provider.define_resource_requirements
126
126
  lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
127
127
  end
@@ -180,7 +180,7 @@ RC_SAMPLE
180
180
 
181
181
  describe "when we have a 'ps' attribute" do
182
182
  before do
183
- @node[:command] = {:ps => "ps -ax"}
183
+ @node.automatic_attrs[:command] = {:ps => "ps -ax"}
184
184
  end
185
185
 
186
186
  it "should shell_out! the node's ps command" do
@@ -21,7 +21,7 @@ require 'spec_helper'
21
21
  describe Chef::Provider::Service::Init, "load_current_resource" do
22
22
  before(:each) do
23
23
  @node = Chef::Node.new
24
- @node[:command] = {:ps => "ps -ef"}
24
+ @node.automatic_attrs[:command] = {:ps => "ps -ef"}
25
25
  @events = Chef::EventDispatch::Dispatcher.new
26
26
  @run_context = Chef::RunContext.new(@node, {}, @events)
27
27
 
@@ -61,7 +61,7 @@ PS
61
61
  @provider.load_current_resource
62
62
  end
63
63
 
64
- it "should set running to true if the status command returns 0" do
64
+ it "should set running to true if the the status command returns 0" do
65
65
  @provider.stub!(:shell_out).with("/etc/init.d/#{@current_resource.service_name} status").and_return(@status)
66
66
  @provider.load_current_resource
67
67
  @current_resource.running.should be_true
@@ -93,10 +93,23 @@ PS
93
93
 
94
94
  end
95
95
 
96
+ describe "when an init command has been specified" do
97
+ before do
98
+ @new_resource.stub!(:init_command).and_return("/opt/chef-server/service/erchef")
99
+ @provider = Chef::Provider::Service::Init.new(@new_resource, @run_context)
100
+ end
101
+
102
+ it "should use the init_command if one has been specified" do
103
+ @provider.should_receive(:shell_out!).with("/opt/chef-server/service/erchef start")
104
+ @provider.start_service
105
+ end
106
+
107
+ end
108
+
96
109
  describe "when the node has not specified a ps command" do
97
110
 
98
111
  it "should raise an error if the node has a nil ps attribute" do
99
- @node[:command] = {:ps => nil}
112
+ @node.automatic_attrs[:command] = {:ps => nil}
100
113
  @provider.load_current_resource
101
114
  @provider.action = :start
102
115
  @provider.define_resource_requirements
@@ -104,7 +117,7 @@ PS
104
117
  end
105
118
 
106
119
  it "should raise an error if the node has an empty ps attribute" do
107
- @node[:command] = {:ps => ""}
120
+ @node.automatic_attrs[:command] = {:ps => ""}
108
121
  @provider.load_current_resource
109
122
  @provider.action = :start
110
123
  @provider.define_resource_requirements
@@ -209,4 +222,14 @@ RUNNING_PS
209
222
  @provider.reload_service()
210
223
  end
211
224
  end
225
+
226
+ describe "when a custom command has been specified" do
227
+ before do
228
+ @new_resource.start_command("/etc/init.d/chef startyousillysally")
229
+ end
230
+
231
+ it "should still pass all why run assertions" do
232
+ lambda { @provider.run_action(:start) }.should_not raise_error(Chef::Exceptions::Service)
233
+ end
234
+ end
212
235
  end
@@ -23,7 +23,7 @@ describe Chef::Provider::Service::Insserv do
23
23
  @node = Chef::Node.new
24
24
  @events = Chef::EventDispatch::Dispatcher.new
25
25
  @run_context = Chef::RunContext.new(@node, {}, @events)
26
- @node[:command] = {:ps => "ps -ax"}
26
+ @node.automatic_attrs[:command] = {:ps => "ps -ax"}
27
27
 
28
28
  @new_resource = Chef::Resource::Service.new("initgrediant")
29
29
  @current_resource = Chef::Resource::Service.new("initgrediant")
@@ -21,7 +21,7 @@ require 'spec_helper'
21
21
  describe Chef::Provider::Service::Invokercd, "load_current_resource" do
22
22
  before(:each) do
23
23
  @node = Chef::Node.new
24
- @node[:command] = {:ps => "ps -ef"}
24
+ @node.automatic_attrs[:command] = {:ps => "ps -ef"}
25
25
  @events = Chef::EventDispatch::Dispatcher.new
26
26
  @run_context = Chef::RunContext.new(@node, {}, @events)
27
27
 
@@ -61,7 +61,7 @@ PS
61
61
  @provider.load_current_resource
62
62
  end
63
63
 
64
- it "should set running to true if the status command returns 0" do
64
+ it "should set running to true if the the status command returns 0" do
65
65
  @provider.stub!(:shell_out).with("/usr/sbin/invoke-rc.d #{@current_resource.service_name} status").and_return(@status)
66
66
  @provider.load_current_resource
67
67
  @current_resource.running.should be_true
@@ -95,14 +95,14 @@ PS
95
95
 
96
96
  describe "when the node has not specified a ps command" do
97
97
  it "should raise error if the node has a nil ps attribute and no other means to get status" do
98
- @node[:command] = {:ps => nil}
98
+ @node.automatic_attrs[:command] = {:ps => nil}
99
99
  @provider.action = :start
100
100
  @provider.define_resource_requirements
101
101
  lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
102
102
  end
103
103
 
104
104
  it "should raise error if the node has an empty ps attribute and no other means to get status" do
105
- @node[:command] = {:ps => ""}
105
+ @node.automatic_attrs[:command] = {:ps => ""}
106
106
  @provider.action = :start
107
107
  @provider.define_resource_requirements
108
108
  lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
@@ -19,264 +19,233 @@
19
19
  require 'spec_helper'
20
20
 
21
21
  describe Chef::Provider::Service::Macosx do
22
- let(:node) { Chef::Node.new }
23
- let(:events) {Chef::EventDispatch::Dispatcher.new}
24
- let(:run_context) { Chef::RunContext.new(node, {}, events) }
25
- let(:provider) { described_class.new(new_resource, run_context) }
26
- let(:launchctl_stdout) { StringIO.new }
27
- let(:plutil_stdout) { String.new <<-XML }
28
- <?xml version="1.0" encoding="UTF-8"?>
29
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
30
- <plist version="1.0">
31
- <dict>
32
- <key>Label</key>
33
- <string>io.redis.redis-server</string>
34
- </dict>
35
- </plist>
36
- XML
37
-
38
- before do
39
- Dir.stub!(:glob).and_return(["/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist"], [])
40
- provider.stub!(:shell_out!).
41
- with("launchctl list", {:group => 1001, :user => 101}).
42
- and_return(mock("Status", :stdout => launchctl_stdout))
43
- provider.stub!(:shell_out).
44
- with(/launchctl list /,
45
- {:group => nil, :user => nil}).
46
- and_return(mock("Status",
47
- :stdout => launchctl_stdout, :exitstatus => 0))
48
- provider.stub!(:shell_out!).
49
- with(/plutil -convert xml1 -o/).
50
- and_return(mock("Status", :stdout => plutil_stdout))
51
-
52
- File.stub!(:stat).and_return(mock("stat", :gid => 1001, :uid => 101))
53
- end
54
-
55
- ["redis-server", "io.redis.redis-server"].each do |service_name|
56
- context "when service name is given as #{service_name}" do
57
- let(:new_resource) { Chef::Resource::Service.new(service_name) }
58
- let!(:current_resource) { Chef::Resource::Service.new(service_name) }
59
-
60
- describe "#load_current_resource" do
61
-
62
- # CHEF-5223 "you can't glob for a file that hasn't been converged
63
- # onto the node yet."
64
- context "when the plist doesn't exist" do
65
-
66
- def run_resource_setup_for_action(action)
67
- new_resource.action(action)
68
- provider.action = action
69
- provider.load_current_resource
70
- provider.define_resource_requirements
71
- provider.process_resource_requirements
72
- end
73
-
74
- before do
75
- Dir.stub(:glob).and_return([])
76
- provider.stub(:shell_out!).
77
- with(/plutil -convert xml1 -o/).
78
- and_raise(Mixlib::ShellOut::ShellCommandFailed)
79
- end
80
-
81
- it "works for action :nothing" do
82
- lambda { run_resource_setup_for_action(:nothing) }.should_not raise_error
83
- end
84
-
85
- it "works for action :start" do
86
- lambda { run_resource_setup_for_action(:start) }.should_not raise_error
87
- end
88
-
89
- it "errors if action is :enable" do
90
- lambda { run_resource_setup_for_action(:enable) }.should raise_error(Chef::Exceptions::Service)
91
- end
92
-
93
- it "errors if action is :disable" do
94
- lambda { run_resource_setup_for_action(:disable) }.should raise_error(Chef::Exceptions::Service)
95
- end
96
- end
97
-
98
- context "when launchctl returns pid in service list" do
99
- let(:launchctl_stdout) { StringIO.new <<-SVC_LIST }
100
- 12761 - 0x100114220.old.machinit.thing
101
- 7777 - io.redis.redis-server
102
- - - com.lol.stopped-thing
103
- SVC_LIST
104
-
105
- before do
106
- provider.load_current_resource
107
- end
22
+ describe ".gather_plist_dirs" do
23
+ context "when HOME directory is set" do
24
+ before do
25
+ ENV.stub(:[]).with('HOME').and_return("/User/someuser")
26
+ end
108
27
 
109
- it "sets resource running state to true" do
110
- provider.current_resource.running.should be_true
111
- end
28
+ it "includes users's LaunchAgents folder" do
29
+ described_class.gather_plist_dirs.should include("#{ENV['HOME']}/Library/LaunchAgents")
30
+ end
31
+ end
112
32
 
113
- it "sets resouce enabled state to true" do
114
- provider.current_resource.enabled.should be_true
115
- end
116
- end
33
+ context "when HOME directory is not set" do
34
+ before do
35
+ ENV.stub(:[]).with('HOME').and_return(nil)
36
+ end
117
37
 
118
- describe "running unsupported actions" do
119
- let(:launchctl_stdout) { StringIO.new <<-SVC_LIST }
120
- 12761 - 0x100114220.old.machinit.thing
121
- 7777 - io.redis.redis-server
122
- - - com.lol.stopped-thing
123
- SVC_LIST
38
+ it "doesn't include user's LaunchAgents folder" do
39
+ described_class.gather_plist_dirs.should_not include("~/Library/LaunchAgents")
40
+ end
41
+ end
42
+ end
124
43
 
125
- before do
126
- Dir.stub!(:glob).and_return(["/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist"], [])
127
- end
128
- it "should throw an exception when reload action is attempted" do
129
- lambda {provider.run_action(:reload)}.should raise_error(Chef::Exceptions::UnsupportedAction)
130
- end
131
- end
132
- context "when launchctl returns empty service pid" do
133
- let(:launchctl_stdout) { StringIO.new <<-SVC_LIST }
134
- 12761 - 0x100114220.old.machinit.thing
135
- - - io.redis.redis-server
136
- - - com.lol.stopped-thing
137
- SVC_LIST
44
+ context "when service name is given as" do
45
+ let(:node) { Chef::Node.new }
46
+ let(:events) {Chef::EventDispatch::Dispatcher.new}
47
+ let(:run_context) { Chef::RunContext.new(node, {}, events) }
48
+ let(:provider) { described_class.new(new_resource, run_context) }
49
+ let(:stdout) { StringIO.new }
50
+
51
+ ["redis-server", "io.redis.redis-server"].each do |service_name|
52
+ before do
53
+ Dir.stub!(:glob).and_return(["/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist"], [])
54
+ provider.stub!(:shell_out!).
55
+ with("launchctl list", {:group => 1001, :user => 101}).
56
+ and_return(mock("ouput", :stdout => stdout))
57
+
58
+ File.stub!(:stat).and_return(mock("stat", :gid => 1001, :uid => 101))
59
+ end
138
60
 
139
- before do
140
- provider.load_current_resource
141
- end
61
+ context "#{service_name}" do
62
+ let(:new_resource) { Chef::Resource::Service.new(service_name) }
63
+ let!(:current_resource) { Chef::Resource::Service.new(service_name) }
142
64
 
143
- it "sets resource running state to false" do
144
- provider.current_resource.running.should be_false
145
- end
65
+ describe "#load_current_resource" do
66
+ context "when launchctl returns pid in service list" do
67
+ let(:stdout) { StringIO.new <<-SVC_LIST }
68
+ 12761 - 0x100114220.old.machinit.thing
69
+ 7777 - io.redis.redis-server
70
+ - - com.lol.stopped-thing
71
+ SVC_LIST
146
72
 
147
- it "sets resouce enabled state to true" do
148
- provider.current_resource.enabled.should be_true
149
- end
150
- end
73
+ before do
74
+ provider.load_current_resource
75
+ end
151
76
 
152
- context "when launchctl doesn't return service entry at all" do
153
- let(:launchctl_stdout) { StringIO.new <<-SVC_LIST }
154
- 12761 - 0x100114220.old.machinit.thing
155
- - - com.lol.stopped-thing
156
- SVC_LIST
77
+ it "sets resource running state to true" do
78
+ provider.current_resource.running.should be_true
79
+ end
157
80
 
158
- it "sets service running state to false" do
159
- provider.load_current_resource
160
- provider.current_resource.running.should be_false
81
+ it "sets resouce enabled state to true" do
82
+ provider.current_resource.enabled.should be_true
83
+ end
161
84
  end
162
85
 
163
- context "and plist for service is not available" do
86
+ describe "running unsupported actions" do
164
87
  before do
165
- Dir.stub!(:glob).and_return([])
166
- provider.load_current_resource
88
+ Dir.stub!(:glob).and_return(["/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist"], [])
167
89
  end
168
-
169
- it "sets resouce enabled state to false" do
170
- provider.current_resource.enabled.should be_false
90
+ it "should throw an exception when enable action is attempted" do
91
+ lambda {provider.run_action(:enable)}.should raise_error(Chef::Exceptions::UnsupportedAction)
92
+ end
93
+ it "should throw an exception when reload action is attempted" do
94
+ lambda {provider.run_action(:reload)}.should raise_error(Chef::Exceptions::UnsupportedAction)
95
+ end
96
+ it "should throw an exception when disable action is attempted" do
97
+ lambda {provider.run_action(:disable)}.should raise_error(Chef::Exceptions::UnsupportedAction)
171
98
  end
172
99
  end
100
+ context "when launchctl returns empty service pid" do
101
+ let(:stdout) { StringIO.new <<-SVC_LIST }
102
+ 12761 - 0x100114220.old.machinit.thing
103
+ - - io.redis.redis-server
104
+ - - com.lol.stopped-thing
105
+ SVC_LIST
173
106
 
174
- context "and plist for service is available" do
175
107
  before do
176
- Dir.stub!(:glob).and_return(["/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist"], [])
177
108
  provider.load_current_resource
178
109
  end
179
110
 
111
+ it "sets resource running state to false" do
112
+ provider.current_resource.running.should be_false
113
+ end
114
+
180
115
  it "sets resouce enabled state to true" do
181
116
  provider.current_resource.enabled.should be_true
182
117
  end
183
118
  end
184
119
 
185
- describe "and several plists match service name" do
186
- it "throws exception" do
187
- Dir.stub!(:glob).and_return(["/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist",
188
- "/Users/wtf/something.plist"])
120
+ context "when launchctl doesn't return service entry at all" do
121
+ let(:stdout) { StringIO.new <<-SVC_LIST }
122
+ 12761 - 0x100114220.old.machinit.thing
123
+ - - com.lol.stopped-thing
124
+ SVC_LIST
125
+
126
+ it "sets service running state to false" do
189
127
  provider.load_current_resource
190
- provider.define_resource_requirements
191
- lambda { provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
128
+ provider.current_resource.running.should be_false
129
+ end
130
+
131
+ context "and plist for service is not available" do
132
+ before do
133
+ Dir.stub!(:glob).and_return([])
134
+ provider.load_current_resource
135
+ end
136
+
137
+ it "sets resouce enabled state to false" do
138
+ provider.current_resource.enabled.should be_false
139
+ end
140
+ end
141
+
142
+ context "and plist for service is available" do
143
+ before do
144
+ Dir.stub!(:glob).and_return(["/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist"], [])
145
+ provider.load_current_resource
146
+ end
147
+
148
+ it "sets resouce enabled state to true" do
149
+ provider.current_resource.enabled.should be_true
150
+ end
151
+ end
152
+
153
+ describe "and several plists match service name" do
154
+ it "throws exception" do
155
+ Dir.stub!(:glob).and_return(["/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist",
156
+ "/Users/wtf/something.plist"])
157
+ provider.load_current_resource
158
+ provider.define_resource_requirements
159
+ lambda { provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
160
+ end
192
161
  end
193
162
  end
194
163
  end
195
- end
196
- describe "#start_service" do
197
- before do
198
- Chef::Resource::Service.stub!(:new).and_return(current_resource)
199
- provider.load_current_resource
200
- current_resource.stub!(:running).and_return(false)
201
- end
164
+ describe "#start_service" do
165
+ before do
166
+ Chef::Resource::Service.stub!(:new).and_return(current_resource)
167
+ provider.load_current_resource
168
+ current_resource.stub!(:running).and_return(false)
169
+ end
202
170
 
203
- it "calls the start command if one is specified and service is not running" do
204
- new_resource.stub!(:start_command).and_return("cowsay dirty")
171
+ it "calls the start command if one is specified and service is not running" do
172
+ new_resource.stub!(:start_command).and_return("cowsay dirty")
205
173
 
206
- provider.should_receive(:shell_out!).with("cowsay dirty")
207
- provider.start_service
208
- end
174
+ provider.should_receive(:shell_out!).with("cowsay dirty")
175
+ provider.start_service
176
+ end
209
177
 
210
- it "shows warning message if service is already running" do
211
- current_resource.stub!(:running).and_return(true)
212
- Chef::Log.should_receive(:debug).with("service[#{service_name}] already running, not starting")
178
+ it "shows warning message if service is already running" do
179
+ current_resource.stub!(:running).and_return(true)
180
+ Chef::Log.should_receive(:debug).with("service[#{service_name}] already running, not starting")
213
181
 
214
- provider.start_service
215
- end
182
+ provider.start_service
183
+ end
216
184
 
217
- it "starts service via launchctl if service found" do
218
- provider.should_receive(:shell_out!).
219
- with("launchctl load -w '/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist'",
220
- :group => 1001, :user => 101).
221
- and_return(0)
185
+ it "starts service via launchctl if service found" do
186
+ provider.should_receive(:shell_out!).
187
+ with("launchctl load -w '/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist'",
188
+ :group => 1001, :user => 101).
189
+ and_return(0)
222
190
 
223
- provider.start_service
191
+ provider.start_service
192
+ end
224
193
  end
225
- end
226
194
 
227
- describe "#stop_service" do
228
- before do
229
- Chef::Resource::Service.stub!(:new).and_return(current_resource)
195
+ describe "#stop_service" do
196
+ before do
197
+ Chef::Resource::Service.stub!(:new).and_return(current_resource)
230
198
 
231
- provider.load_current_resource
232
- current_resource.stub!(:running).and_return(true)
233
- end
199
+ provider.load_current_resource
200
+ current_resource.stub!(:running).and_return(true)
201
+ end
234
202
 
235
- it "calls the stop command if one is specified and service is running" do
236
- new_resource.stub!(:stop_command).and_return("kill -9 123")
203
+ it "calls the stop command if one is specified and service is running" do
204
+ new_resource.stub!(:stop_command).and_return("kill -9 123")
237
205
 
238
- provider.should_receive(:shell_out!).with("kill -9 123")
239
- provider.stop_service
240
- end
206
+ provider.should_receive(:shell_out!).with("kill -9 123")
207
+ provider.stop_service
208
+ end
241
209
 
242
- it "shows warning message if service is not running" do
243
- current_resource.stub!(:running).and_return(false)
244
- Chef::Log.should_receive(:debug).with("service[#{service_name}] not running, not stopping")
210
+ it "shows warning message if service is not running" do
211
+ current_resource.stub!(:running).and_return(false)
212
+ Chef::Log.should_receive(:debug).with("service[#{service_name}] not running, not stopping")
245
213
 
246
- provider.stop_service
247
- end
214
+ provider.stop_service
215
+ end
248
216
 
249
- it "stops the service via launchctl if service found" do
250
- provider.should_receive(:shell_out!).
251
- with("launchctl unload '/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist'",
252
- :group => 1001, :user => 101).
253
- and_return(0)
217
+ it "stops the service via launchctl if service found" do
218
+ provider.should_receive(:shell_out!).
219
+ with("launchctl unload '/Users/igor/Library/LaunchAgents/io.redis.redis-server.plist'",
220
+ :group => 1001, :user => 101).
221
+ and_return(0)
254
222
 
255
- provider.stop_service
223
+ provider.stop_service
224
+ end
256
225
  end
257
- end
258
226
 
259
- describe "#restart_service" do
260
- before do
261
- Chef::Resource::Service.stub!(:new).and_return(current_resource)
227
+ describe "#restart_service" do
228
+ before do
229
+ Chef::Resource::Service.stub!(:new).and_return(current_resource)
262
230
 
263
- provider.load_current_resource
264
- current_resource.stub!(:running).and_return(true)
265
- provider.stub!(:sleep)
266
- end
231
+ provider.load_current_resource
232
+ current_resource.stub!(:running).and_return(true)
233
+ provider.stub!(:sleep)
234
+ end
267
235
 
268
- it "issues a command if given" do
269
- new_resource.stub!(:restart_command).and_return("reload that thing")
236
+ it "issues a command if given" do
237
+ new_resource.stub!(:restart_command).and_return("reload that thing")
270
238
 
271
- provider.should_receive(:shell_out!).with("reload that thing")
272
- provider.restart_service
273
- end
239
+ provider.should_receive(:shell_out!).with("reload that thing")
240
+ provider.restart_service
241
+ end
274
242
 
275
- it "stops and then starts service" do
276
- provider.should_receive(:stop_service)
277
- provider.should_receive(:start_service);
243
+ it "stops and then starts service" do
244
+ provider.should_receive(:stop_service)
245
+ provider.should_receive(:start_service);
278
246
 
279
- provider.restart_service
247
+ provider.restart_service
248
+ end
280
249
  end
281
250
  end
282
251
  end