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
@@ -44,7 +44,7 @@ describe "Chef::Provider::Service::Redhat" do
44
44
 
45
45
  before(:each) do
46
46
  @node = Chef::Node.new
47
- @node[:command] = {:ps => 'foo'}
47
+ @node.automatic_attrs[:command] = {:ps => 'foo'}
48
48
  @events = Chef::EventDispatch::Dispatcher.new
49
49
  @run_context = Chef::RunContext.new(@node, {}, @events)
50
50
 
@@ -21,7 +21,7 @@ require 'spec_helper'
21
21
  describe Chef::Provider::Service::Simple, "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
 
@@ -51,13 +51,13 @@ NOMOCKINGSTRINGSPLZ
51
51
  end
52
52
 
53
53
  it "should raise error if the node has a nil ps attribute and no other means to get status" do
54
- @node[:command] = {:ps => nil}
54
+ @node.automatic_attrs[:command] = {:ps => nil}
55
55
  @provider.define_resource_requirements
56
56
  lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
57
57
  end
58
58
 
59
59
  it "should raise error if the node has an empty ps attribute and no other means to get status" do
60
- @node[:command] = {:ps => ""}
60
+ @node.automatic_attrs[:command] = {:ps => ""}
61
61
  @provider.define_resource_requirements
62
62
  lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Service)
63
63
  end
@@ -37,6 +37,8 @@ describe Chef::Provider::Service::Solaris do
37
37
  @pid = 2342
38
38
  @stdout_string = "state disabled"
39
39
  @stdout.stub!(:gets).and_return(@stdout_string)
40
+ @status = mock("Status", :exitstatus => 0, :stdout => @stdout)
41
+ @provider.stub!(:shell_out!).and_return(@status)
40
42
  end
41
43
 
42
44
  it "should raise an error if /bin/svcs does not exist" do
@@ -84,21 +86,22 @@ describe Chef::Provider::Service::Solaris do
84
86
 
85
87
  describe "when enabling the service" do
86
88
  before(:each) do
87
- #@provider = Chef::Provider::Service::Solaris.new(@node, @new_resource)
88
89
  @provider.current_resource = @current_resource
89
90
  @current_resource.enabled(true)
90
91
  end
91
92
 
92
- it "should call svcadm enable chef" do
93
- @provider.should_receive(:run_command).with({:command => "/usr/sbin/svcadm enable chef"})
94
- @provider.should_receive(:service_status).and_return(@current_resource)
95
- @provider.enable_service.should be_true
93
+ it "should call svcadm enable -s chef" do
94
+ @new_resource.stub!(:enable_command).and_return("#{@new_resource.enable_command}")
95
+ @provider.should_receive(:shell_out!).with("/usr/sbin/svcadm enable -s #{@current_resource.service_name}").and_return(@status)
96
+ @provider.enable_service.should be_true
97
+ @current_resource.enabled.should be_true
96
98
  end
97
99
 
98
- it "should call svcadm enable chef for start_service" do
99
- @provider.should_receive(:run_command).with({:command => "/usr/sbin/svcadm enable chef"})
100
- @provider.should_receive(:service_status).and_return(@current_resource)
100
+ it "should call svcadm enable -s chef for start_service" do
101
+ @new_resource.stub!(:start_command).and_return("#{@new_resource.start_command}")
102
+ @provider.should_receive(:shell_out!).with("/usr/sbin/svcadm enable -s #{@current_resource.service_name}").and_return(@status)
101
103
  @provider.start_service.should be_true
104
+ @current_resource.enabled.should be_true
102
105
  end
103
106
 
104
107
  end
@@ -110,16 +113,16 @@ describe Chef::Provider::Service::Solaris do
110
113
  @current_resource.enabled(false)
111
114
  end
112
115
 
113
- it "should call svcadm disable chef" do
114
- @provider.should_receive(:run_command).with({:command => "/usr/sbin/svcadm disable chef"})
115
- @provider.should_receive(:service_status).and_return(@current_resource)
116
- @provider.disable_service.should be_false
116
+ it "should call svcadm disable -s chef" do
117
+ @provider.should_receive(:shell_out!).with("/usr/sbin/svcadm disable -s chef").and_return(@status)
118
+ @provider.disable_service.should be_true
119
+ @current_resource.enabled.should be_false
117
120
  end
118
121
 
119
- it "should call svcadm disable chef for stop_service" do
120
- @provider.should_receive(:run_command).with({:command => "/usr/sbin/svcadm disable chef"})
121
- @provider.should_receive(:service_status).and_return(@current_resource)
122
- @provider.stop_service.should be_false
122
+ it "should call svcadm disable -s chef for stop_service" do
123
+ @provider.should_receive(:shell_out!).with("/usr/sbin/svcadm disable -s chef")
124
+ @provider.stop_service.should be_true
125
+ @current_resource.enabled.should be_false
123
126
  end
124
127
 
125
128
  end
@@ -131,8 +134,8 @@ describe Chef::Provider::Service::Solaris do
131
134
  end
132
135
 
133
136
  it "should call svcadm refresh chef" do
134
- @provider.should_receive(:run_command).with({:command => "/usr/sbin/svcadm refresh chef"}).and_return(@status)
135
- @provider.reload_service.should be_true
137
+ @provider.should_receive(:shell_out!).with("/usr/sbin/svcadm refresh chef").and_return(@status)
138
+ @provider.reload_service
136
139
  end
137
140
 
138
141
  end
@@ -135,7 +135,7 @@ describe Chef::Provider::Service::Systemd do
135
135
 
136
136
  it "should not call '/bin/systemctl start service_name' if it is already running" do
137
137
  @current_resource.stub!(:running).and_return(true)
138
- @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/bin/systemctl start #{@new_resource.service_name}"}).and_return(0)
138
+ @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/bin/systemctl start #{@new_resource.service_name}"})
139
139
  @provider.start_service
140
140
  end
141
141
 
@@ -180,7 +180,7 @@ describe Chef::Provider::Service::Systemd do
180
180
 
181
181
  it "should not call '/bin/systemctl stop service_name' if it is already stopped" do
182
182
  @current_resource.stub!(:running).and_return(false)
183
- @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/bin/systemctl stop #{@new_resource.service_name}"}).and_return(0)
183
+ @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/bin/systemctl stop #{@new_resource.service_name}"})
184
184
  @provider.stop_service
185
185
  end
186
186
  end
@@ -21,9 +21,9 @@ require 'spec_helper'
21
21
  describe Chef::Provider::Service::Upstart do
22
22
  before(:each) do
23
23
  @node =Chef::Node.new
24
- @node[:name] = 'upstarter'
25
- @node[:platform] = 'ubuntu'
26
- @node[:platform_version] = '9.10'
24
+ @node.name('upstarter')
25
+ @node.automatic_attrs[:platform] = 'ubuntu'
26
+ @node.automatic_attrs[:platform_version] = '9.10'
27
27
 
28
28
  @events = Chef::EventDispatch::Dispatcher.new
29
29
  @run_context = Chef::RunContext.new(@node, {}, @events)
@@ -38,7 +38,7 @@ describe Chef::Provider::Service::Upstart do
38
38
  end
39
39
 
40
40
  it "should return /etc/event.d as the upstart job directory when running on Ubuntu 9.04" do
41
- @node[:platform_version] = '9.04'
41
+ @node.automatic_attrs[:platform_version] = '9.04'
42
42
  #Chef::Platform.stub!(:find_platform_and_version).and_return([ "ubuntu", "9.04" ])
43
43
  @provider = Chef::Provider::Service::Upstart.new(@new_resource, @run_context)
44
44
  @provider.instance_variable_get(:@upstart_job_dir).should == "/etc/event.d"
@@ -46,14 +46,14 @@ describe Chef::Provider::Service::Upstart do
46
46
  end
47
47
 
48
48
  it "should return /etc/init as the upstart job directory when running on Ubuntu 9.10" do
49
- @node[:platform_version] = '9.10'
49
+ @node.automatic_attrs[:platform_version] = '9.10'
50
50
  @provider = Chef::Provider::Service::Upstart.new(@new_resource, @run_context)
51
51
  @provider.instance_variable_get(:@upstart_job_dir).should == "/etc/init"
52
52
  @provider.instance_variable_get(:@upstart_conf_suffix).should == ".conf"
53
53
  end
54
54
 
55
55
  it "should return /etc/init as the upstart job directory by default" do
56
- @node[:platform_version] = '9000'
56
+ @node.automatic_attrs[:platform_version] = '9000'
57
57
  @provider = Chef::Provider::Service::Upstart.new(@new_resource, @run_context)
58
58
  @provider.instance_variable_get(:@upstart_job_dir).should == "/etc/init"
59
59
  @provider.instance_variable_get(:@upstart_conf_suffix).should == ".conf"
@@ -62,7 +62,7 @@ describe Chef::Provider::Service::Upstart do
62
62
 
63
63
  describe "load_current_resource" do
64
64
  before(:each) do
65
- @node[:command] = {:ps => "ps -ax"}
65
+ @node.automatic_attrs[:command] = {:ps => "ps -ax"}
66
66
 
67
67
  @current_resource = Chef::Resource::Service.new("rsyslog")
68
68
  Chef::Resource::Service.stub!(:new).and_return(@current_resource)
@@ -97,7 +97,7 @@ describe Chef::Provider::Service::Upstart do
97
97
  before do
98
98
  end
99
99
 
100
- it "should set running to true if the status command returns 0" do
100
+ it "should set running to true if the the status command returns 0" do
101
101
  @stdout = StringIO.new("rsyslog start/running")
102
102
  @provider.stub!(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
103
103
  @provider.load_current_resource
@@ -113,7 +113,7 @@ describe Chef::Provider::Service::Upstart do
113
113
  end
114
114
 
115
115
  describe "when the status command uses the old format" do
116
- it "should set running to true if the status command returns 0" do
116
+ it "should set running to true if the the status command returns 0" do
117
117
  @stdout = StringIO.new("rsyslog (start) running, process 32225")
118
118
  @provider.stub!(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
119
119
  @provider.load_current_resource
@@ -247,7 +247,7 @@ describe Chef::Provider::Service::Upstart do
247
247
 
248
248
  it "should not call '/sbin/start service_name' if it is already running" do
249
249
  @current_resource.stub!(:running).and_return(true)
250
- @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/sbin/start #{@new_resource.service_name}"}).and_return(0)
250
+ @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/sbin/start #{@new_resource.service_name}"})
251
251
  @provider.start_service()
252
252
  end
253
253
 
@@ -307,7 +307,7 @@ describe Chef::Provider::Service::Upstart do
307
307
 
308
308
  it "should not call '/sbin/stop service_name' if it is already stopped" do
309
309
  @current_resource.stub!(:running).and_return(false)
310
- @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/sbin/stop #{@new_resource.service_name}"}).and_return(0)
310
+ @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/sbin/stop #{@new_resource.service_name}"})
311
311
  @provider.stop_service()
312
312
  end
313
313
  end
@@ -60,7 +60,7 @@ describe Chef::Provider::Service do
60
60
 
61
61
  it "should not disable the service if already disabled" do
62
62
  @current_resource.stub!(:enabled).and_return(false)
63
- @provider.should_not_receive(:disable_service).and_return(true)
63
+ @provider.should_not_receive(:disable_service)
64
64
  @provider.run_action(:disable)
65
65
  @provider.new_resource.should_not be_updated
66
66
  end
@@ -92,7 +92,7 @@ describe Chef::Provider::Service do
92
92
 
93
93
  it "should not stop the service if it's already stopped" do
94
94
  @current_resource.stub!(:running).and_return(false)
95
- @provider.should_not_receive(:stop_service).and_return(true)
95
+ @provider.should_not_receive(:stop_service)
96
96
  @provider.run_action(:stop)
97
97
  @provider.new_resource.should_not be_updated
98
98
  end
@@ -137,7 +137,7 @@ describe Chef::Provider::Service do
137
137
 
138
138
  it "should not reload the service if it's stopped" do
139
139
  @current_resource.stub!(:running).and_return(false)
140
- @provider.should_not_receive(:reload_service).and_return(true)
140
+ @provider.should_not_receive(:reload_service)
141
141
  @provider.run_action(:stop)
142
142
  @provider.new_resource.should_not be_updated
143
143
  end
@@ -63,7 +63,7 @@ describe Chef::Provider::Subversion do
63
63
  "Last Changed Author: codeninja\n" +
64
64
  "Last Changed Rev: 11410\n" + # Last Changed Rev is preferred to Revision
65
65
  "Last Changed Date: 2009-03-25 06:09:56 -0600 (Wed, 25 Mar 2009)\n\n"
66
- ::File.should_receive(:exist?).with("/my/deploy/dir/.svn").and_return(true)
66
+ ::File.should_receive(:exist?).at_least(1).times.with("/my/deploy/dir/.svn").and_return(true)
67
67
  ::File.should_receive(:directory?).with("/my/deploy/dir").and_return(true)
68
68
  ::Dir.should_receive(:chdir).with("/my/deploy/dir").and_yield
69
69
  @stdout.stub!(:string).and_return(example_svn_info)
@@ -0,0 +1,78 @@
1
+ #
2
+ # Author:: Lamont Granquist (<lamont@opscode.com>)
3
+ # Copyright:: Copyright (c) 2013 Opscode, Inc.
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::Template::Content do
22
+
23
+ let(:new_resource) do
24
+ mock("Chef::Resource::Template (new)",
25
+ :cookbook_name => 'openldap',
26
+ :source => 'openldap_stuff.conf.erb',
27
+ :local => false,
28
+ :cookbook => nil,
29
+ :variables => {},
30
+ :inline_helper_blocks => {},
31
+ :inline_helper_modules => [],
32
+ :helper_modules => [])
33
+ end
34
+
35
+ let(:rendered_file_location) { Dir.tmpdir + '/openldap_stuff.conf' }
36
+
37
+ let(:run_context) do
38
+ cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, "cookbooks"))
39
+ Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, cookbook_repo) }
40
+ cl = Chef::CookbookLoader.new(cookbook_repo)
41
+ cl.load_cookbooks
42
+ cookbook_collection = Chef::CookbookCollection.new(cl)
43
+ node = Chef::Node.new
44
+ mock("Chef::Resource::RunContext", :node => node, :cookbook_collection => cookbook_collection)
45
+ end
46
+
47
+ let(:content) do
48
+ current_resource = mock("Chef::Resource::Template (current)")
49
+ Chef::Provider::Template::Content.new(new_resource, current_resource, run_context)
50
+ end
51
+
52
+ after do
53
+ FileUtils.rm(rendered_file_location) if ::File.exist?(rendered_file_location)
54
+ end
55
+
56
+ it "finds the template file in the cookbook cache if it isn't local" do
57
+ content.template_location.should == CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/openldap_stuff.conf.erb'
58
+ end
59
+
60
+ it "finds the template file locally if it is local" do
61
+ new_resource.stub!(:local).and_return(true)
62
+ new_resource.stub!(:source).and_return('/tmp/its_on_disk.erb')
63
+ content.template_location.should == '/tmp/its_on_disk.erb'
64
+ end
65
+
66
+ it "should use the cookbook name if defined in the template resource" do
67
+ new_resource.stub!(:cookbook_name).and_return('apache2')
68
+ new_resource.stub!(:cookbook).and_return('openldap')
69
+ new_resource.stub!(:source).and_return("test.erb")
70
+ content.template_location.should == CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/test.erb'
71
+ end
72
+
73
+ it "creates the template with the rendered content" do
74
+ run_context.node.normal[:slappiness] = "a warm gun"
75
+ IO.read(content.tempfile.path).should == "slappiness is a warm gun"
76
+ end
77
+
78
+ end
@@ -1,6 +1,7 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2008 Opscode, Inc.
3
+ # Author:: Lamont Granquist (<lamont@opscode.com>)
4
+ # Copyright:: Copyright (c) 2008-2013 Opscode, Inc.
4
5
  # License:: Apache License, Version 2.0
5
6
  #
6
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,181 +16,72 @@
15
16
  # See the License for the specific language governing permissions and
16
17
  # limitations under the License.
17
18
  #
19
+
18
20
  require 'stringio'
19
21
  require 'spec_helper'
20
22
  require 'etc'
21
23
  require 'ostruct'
24
+ require 'support/shared/unit/provider/file'
22
25
 
23
- describe Chef::Provider::Template do
24
- before(:each) do
25
- @cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, "cookbooks"))
26
- Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, @cookbook_repo) }
27
-
28
- @node = Chef::Node.new
29
- @cookbook_collection = Chef::CookbookCollection.new(Chef::CookbookLoader.new(@cookbook_repo))
30
- @events = Chef::EventDispatch::Dispatcher.new
31
- @run_context = Chef::RunContext.new(@node, @cookbook_collection, @events)
32
-
33
- @rendered_file_location = Dir.tmpdir + '/openldap_stuff.conf'
34
26
 
35
- @resource = Chef::Resource::Template.new(@rendered_file_location)
36
- @resource.cookbook_name = 'openldap'
37
-
38
- @provider = Chef::Provider::Template.new(@resource, @run_context)
39
- @current_resource = @resource.dup
40
- @provider.current_resource = @current_resource
41
- @access_controls = mock("access controls")
42
- @provider.stub!(:access_controls).and_return(@access_controls)
43
- passwd_struct = if windows?
44
- Struct::Passwd.new("root", "x", 0, 0, "/root", "/bin/bash")
45
- else
46
- Struct::Passwd.new("root", "x", 0, 0, "root", "/root", "/bin/bash")
47
- end
48
- group_struct = OpenStruct.new(:name => "root", :passwd => "x", :gid => 0)
49
- Etc.stub!(:getpwuid).and_return(passwd_struct)
50
- Etc.stub!(:getgrgid).and_return(group_struct)
27
+ describe Chef::Provider::Template do
28
+ let(:node) { double('Chef::Node') }
29
+ let(:events) { double('Chef::Events').as_null_object } # mock all the methods
30
+ let(:run_context) { double('Chef::RunContext', :node => node, :events => events) }
31
+ let(:enclosing_directory) {
32
+ canonicalize_path(File.expand_path(File.join(CHEF_SPEC_DATA, "templates")))
33
+ }
34
+ let(:resource_path) {
35
+ canonicalize_path(File.expand_path(File.join(enclosing_directory, "seattle.txt")))
36
+ }
37
+
38
+ # Subject
39
+
40
+ let(:provider) do
41
+ provider = described_class.new(resource, run_context)
42
+ provider.stub!(:content).and_return(content)
43
+ provider
51
44
  end
52
45
 
53
- describe "when creating the template" do
54
-
55
- before do
56
-
57
- end
58
- after do
59
- FileUtils.rm(@rendered_file_location) if ::File.exist?(@rendered_file_location)
60
- end
61
-
62
- it "finds the template file in the coobook cache if it isn't local" do
63
- @provider.template_location.should == CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/openldap_stuff.conf.erb'
64
- end
65
-
66
- it "finds the template file locally if it is local" do
67
- @resource.local(true)
68
- @resource.source('/tmp/its_on_disk.erb')
69
- @provider.template_location.should == '/tmp/its_on_disk.erb'
70
- end
71
-
72
- it "stops executing when the local template source can't be found" do
73
- @access_controls.stub!(:requires_changes?).and_return(false)
74
- @resource.source "invalid.erb"
75
- @resource.local true
76
- lambda { @provider.run_action(:create) } .should raise_error Chef::Mixin::WhyRun::ResourceRequirements::Assertion::AssertionFailure
77
- end
78
-
79
- it "should use the cookbook name if defined in the template resource" do
80
- @resource.cookbook_name = 'apache2'
81
- @resource.cookbook('openldap')
82
- @resource.source "test.erb"
83
- @provider.template_location.should == CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/test.erb'
84
- end
85
-
86
- describe "when the target file does not exist" do
87
- it "creates the template with the rendered content" do
88
- @access_controls.stub!(:requires_changes?).and_return(true)
89
- @access_controls.should_receive(:set_all!)
90
- @node[:slappiness] = "a warm gun"
91
- @provider.should_receive(:backup)
92
- @provider.run_action(:create)
93
- IO.read(@rendered_file_location).should == "slappiness is a warm gun"
94
- @resource.should be_updated_by_last_action
95
- end
46
+ let(:resource) do
47
+ resource = Chef::Resource::Template.new("seattle", @run_context)
48
+ resource.path(resource_path)
49
+ resource
50
+ end
96
51
 
97
- it "should set the file access control as specified in the resource" do
98
- @access_controls.stub!(:requires_changes?).and_return(false)
99
- @access_controls.should_receive(:set_all!)
100
- @resource.owner("adam")
101
- @resource.group("wheel")
102
- @resource.mode(00644)
103
- @provider.run_action(:create)
104
- @resource.should be_updated_by_last_action
105
- end
52
+ let(:content) do
53
+ content = mock('Chef::Provider::File::Content::Template', :template_location => "/foo/bar/baz")
54
+ File.stub(:exists?).with("/foo/bar/baz").and_return(true)
55
+ content
56
+ end
106
57
 
107
- it "creates the template with the rendered content for the create if missing action" do
108
- @access_controls.stub!(:requires_changes?).and_return(true)
109
- @access_controls.should_receive(:set_all!)
110
- @node[:slappiness] = "happiness"
111
- @provider.should_receive(:backup)
112
- @provider.run_action(:create_if_missing)
113
- IO.read(@rendered_file_location).should == "slappiness is happiness"
114
- @resource.should be_updated_by_last_action
115
- end
116
- end
58
+ it_behaves_like Chef::Provider::File
117
59
 
118
- describe "when the target file has the wrong content" do
119
- before do
120
- File.open(@rendered_file_location, "w+") { |f| f.print "blargh" }
121
- end
60
+ context "when creating the template" do
122
61
 
123
- it "overwrites the file with the updated content when the create action is run" do
124
- @node[:slappiness] = "a warm gun"
125
- @access_controls.stub!(:requires_changes?).and_return(false)
126
- @access_controls.should_receive(:set_all!)
127
- @provider.should_receive(:backup)
128
- @provider.run_action(:create)
129
- IO.read(@rendered_file_location).should == "slappiness is a warm gun"
130
- @resource.should be_updated_by_last_action
131
- end
62
+ let(:node) { double('Chef::Node') }
63
+ let(:events) { double('Chef::Events').as_null_object } # mock all the methods
64
+ let(:run_context) { double('Chef::RunContext', :node => node, :events => events) }
65
+ let(:enclosing_directory) {
66
+ canonicalize_path(File.expand_path(File.join(CHEF_SPEC_DATA, "templates")))
67
+ }
68
+ let(:resource_path) {
69
+ canonicalize_path(File.expand_path(File.join(enclosing_directory, "seattle.txt")))
70
+ }
132
71
 
133
- it "should set the file access control as specified in the resource" do
134
- @access_controls.stub!(:requires_changes?).and_return(true)
135
- @access_controls.should_receive(:set_all!)
136
- @resource.owner("adam")
137
- @resource.group("wheel")
138
- @resource.mode(00644)
139
- @provider.should_receive(:backup)
140
- @provider.run_action(:create)
141
- @resource.should be_updated_by_last_action
142
- end
72
+ # Subject
143
73
 
144
- it "doesn't overwrite the file when the create if missing action is run" do
145
- @access_controls.stub!(:requires_changes?).and_return(false)
146
- @access_controls.should_not_receive(:set_all!)
147
- @node[:slappiness] = "a warm gun"
148
- @provider.should_not_receive(:backup)
149
- @provider.run_action(:create_if_missing)
150
- IO.read(@rendered_file_location).should == "blargh"
151
- @resource.should_not be_updated_by_last_action
152
- end
74
+ let(:provider) do
75
+ provider = described_class.new(resource, run_context)
76
+ provider.stub!(:content).and_return(content)
77
+ provider
153
78
  end
154
79
 
155
- describe "when the target has the correct content" do
156
- before do
157
- Chef::ChecksumCache.instance.reset!
158
- File.open(@rendered_file_location, "w") { |f| f.print "slappiness is a warm gun" }
159
- @current_resource.checksum('4ff94a87794ed9aefe88e734df5a66fc8727a179e9496cbd88e3b5ec762a5ee9')
160
- @access_controls = mock("access controls")
161
- @provider.stub!(:access_controls).and_return(@access_controls)
162
- end
163
-
164
- it "does not backup the original or overwrite it" do
165
- @node[:slappiness] = "a warm gun"
166
- @access_controls.stub!(:requires_changes?).and_return(false)
167
- @provider.should_not_receive(:backup)
168
- FileUtils.should_not_receive(:mv)
169
- @provider.run_action(:create)
170
- @resource.should_not be_updated_by_last_action
171
- end
172
-
173
- it "does not backup the original or overwrite it on create if missing" do
174
- @node[:slappiness] = "a warm gun"
175
- @access_controls.stub!(:requires_changes?).and_return(false)
176
- @provider.should_not_receive(:backup)
177
- FileUtils.should_not_receive(:mv)
178
- @provider.run_action(:create)
179
- @resource.should_not be_updated_by_last_action
180
- end
181
-
182
- it "sets the file access controls if they have diverged" do
183
- @provider.stub!(:backup).and_return(true)
184
- @access_controls.stub!(:requires_changes?).and_return(true)
185
- @access_controls.should_receive(:set_all!)
186
- @resource.owner("adam")
187
- @resource.group("wheel")
188
- @resource.mode(00644)
189
- @provider.should_receive(:backup)
190
- @provider.run_action(:create)
191
- @resource.should be_updated_by_last_action
192
- end
80
+ it "stops executing when the local template source can't be found" do
81
+ setup_normal_file
82
+ content.stub!(:template_location).and_return("/baz/bar/foo")
83
+ File.stub(:exists?).with("/baz/bar/foo").and_return(false)
84
+ lambda { provider.run_action(:create) }.should raise_error Chef::Mixin::WhyRun::ResourceRequirements::Assertion::AssertionFailure
193
85
  end
194
86
 
195
87
  end