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
@@ -38,11 +38,18 @@ describe Chef::ResourceReporter do
38
38
  @rest_client = mock("Chef::REST (mock)")
39
39
  @rest_client.stub!(:post_rest).and_return(true)
40
40
  @resource_reporter = Chef::ResourceReporter.new(@rest_client)
41
+ @run_id = @resource_reporter.run_id
41
42
  @new_resource = Chef::Resource::File.new("/tmp/a-file.txt")
42
43
  @new_resource.cookbook_name = "monkey"
43
44
  @cookbook_version = mock("Cookbook::Version", :version => "1.2.3")
44
45
  @new_resource.stub!(:cookbook_version).and_return(@cookbook_version)
45
46
  @current_resource = Chef::Resource::File.new("/tmp/a-file.txt")
47
+ @start_time = Time.new
48
+ @end_time = Time.new + 20
49
+ @events = Chef::EventDispatch::Dispatcher.new
50
+ @run_context = Chef::RunContext.new(@node, {}, @events)
51
+ @run_status = Chef::RunStatus.new(@node, @events)
52
+ Time.stub!(:now).and_return(@start_time, @end_time)
46
53
  end
47
54
 
48
55
  context "when first created" do
@@ -80,23 +87,23 @@ describe Chef::ResourceReporter do
80
87
 
81
88
  context "when chef fails" do
82
89
  before do
83
- @rest_client.stub!(:create_url).and_return("reports/nodes/spitfire/runs/ABC123");
90
+ @rest_client.stub!(:create_url).and_return("reports/nodes/spitfire/runs/#{@run_id}");
84
91
  @rest_client.stub!(:raw_http_request).and_return({"result"=>"ok"});
85
- @rest_client.stub!(:post_rest).and_return({"uri"=>"https://example.com/reports/nodes/spitfire/runs/ABC123"});
92
+ @rest_client.stub!(:post_rest).and_return({"uri"=>"https://example.com/reports/nodes/spitfire/runs/#{@run_id}"});
86
93
 
87
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
88
94
  end
89
95
 
90
96
  context "before converging any resources" do
91
97
  before do
98
+ @resource_reporter.run_started(@run_status)
92
99
  @exception = Exception.new
93
100
  @resource_reporter.run_failed(@exception)
94
101
  end
95
-
102
+
96
103
  it "sets the run status to 'failure'" do
97
104
  @resource_reporter.status.should == "failure"
98
105
  end
99
-
106
+
100
107
  it "keeps the exception data" do
101
108
  @resource_reporter.exception.should == @exception
102
109
  end
@@ -117,13 +124,13 @@ describe Chef::ResourceReporter do
117
124
 
118
125
  it "collects the desired state of the resource" do
119
126
  update_record = @resource_reporter.updated_resources.first
120
- update_record.new_resource.should == @new_resource
127
+ update_record.new_resource.should == @new_resource
121
128
  end
122
129
  end
123
130
 
124
131
  # TODO: make sure a resource that is skipped because of `not_if` doesn't
125
132
  # leave us in a bad state.
126
-
133
+
127
134
  context "once the a resource's current state is loaded" do
128
135
  before do
129
136
  @resource_reporter.resource_action_start(@new_resource, :create)
@@ -151,12 +158,12 @@ describe Chef::ResourceReporter do
151
158
  it "collects the updated resource" do
152
159
  @resource_reporter.should have(1).updated_resources
153
160
  end
154
-
161
+
155
162
  it "collects the old state of the resource" do
156
- update_record = @resource_reporter.updated_resources.first
163
+ update_record = @resource_reporter.updated_resources.first
157
164
  update_record.current_resource.should == @current_resource
158
165
  end
159
-
166
+
160
167
  it "collects the new state of the resource" do
161
168
  update_record = @resource_reporter.updated_resources.first
162
169
  update_record.new_resource.should == @new_resource
@@ -170,19 +177,19 @@ describe Chef::ResourceReporter do
170
177
  @resource_reporter.resource_failed(@next_new_resource, :create, @exception)
171
178
  @resource_reporter.resource_completed(@next_new_resource)
172
179
  end
173
-
180
+
174
181
  it "collects the desired state of the failed resource" do
175
182
  failed_resource_update = @resource_reporter.updated_resources.last
176
183
  failed_resource_update.new_resource.should == @next_new_resource
177
184
  end
178
-
185
+
179
186
  it "does not have the current state of the failed resource" do
180
187
  failed_resource_update = @resource_reporter.updated_resources.last
181
188
  failed_resource_update.current_resource.should be_nil
182
189
  end
183
190
  end
184
191
  end
185
-
192
+
186
193
  # Some providers, such as RemoteDirectory and some LWRPs use other
187
194
  # resources for their implementation. These should be hidden from reporting
188
195
  # since we only care about the top-level resource and not the sub-resources
@@ -213,7 +220,7 @@ describe Chef::ResourceReporter do
213
220
  @resource_reporter.resource_updated(@new_resource, :create)
214
221
  @resource_reporter.resource_completed(@new_resource)
215
222
  end
216
-
223
+
217
224
  it "does not collect data about the nested resource" do
218
225
  @resource_reporter.should have(1).updated_resources
219
226
  end
@@ -226,16 +233,16 @@ describe Chef::ResourceReporter do
226
233
  @resource_reporter.resource_failed(@new_resource, :create, @exception)
227
234
  @resource_reporter.resource_completed(@new_resource)
228
235
  end
229
-
236
+
230
237
  it "collects the resource as an updated resource" do
231
238
  @resource_reporter.should have(1).updated_resources
232
239
  end
233
-
240
+
234
241
  it "collects the desired state of the resource" do
235
242
  update_record = @resource_reporter.updated_resources.first
236
243
  update_record.new_resource.should == @new_resource
237
244
  end
238
-
245
+
239
246
  it "collects the current state of the resource" do
240
247
  update_record = @resource_reporter.updated_resources.first
241
248
  update_record.current_resource.should == @current_resource
@@ -248,13 +255,13 @@ describe Chef::ResourceReporter do
248
255
  describe "when generating a report for the server" do
249
256
 
250
257
  before do
251
- @rest_client.stub!(:create_url).and_return("reports/nodes/spitfire/runs/ABC123");
258
+ @rest_client.stub!(:create_url).and_return("reports/nodes/spitfire/runs/#{@run_id}");
252
259
  @rest_client.stub!(:raw_http_request).and_return({"result"=>"ok"});
253
- @rest_client.stub!(:post_rest).and_return({"uri"=>"https://example.com/reports/nodes/spitfire/runs/ABC123"});
254
-
255
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
260
+ @rest_client.stub!(:post_rest).and_return({"uri"=>"https://example.com/reports/nodes/spitfire/runs/#{@run_id}"});
261
+
262
+ @resource_reporter.run_started(@run_status)
256
263
  end
257
-
264
+
258
265
  context "for a successful client run" do
259
266
  before do
260
267
  # TODO: add inputs to generate expected output.
@@ -291,6 +298,7 @@ describe Chef::ResourceReporter do
291
298
  @resource_reporter.resource_current_state_loaded(@new_resource, :create, @current_resource)
292
299
  @resource_reporter.resource_updated(@new_resource, :create)
293
300
  @resource_reporter.resource_completed(@new_resource)
301
+ @run_status.stop_clock
294
302
  @report = @resource_reporter.prepare_run_data
295
303
  @first_update_report = @report["resources"].first
296
304
  end
@@ -357,8 +365,14 @@ describe Chef::ResourceReporter do
357
365
 
358
366
  it "includes the run_list" do
359
367
  @report.should have_key("run_list")
360
- @report["run_list"].should == @node.run_list.to_json
368
+ @report["run_list"].should == @run_status.node.run_list.to_json
361
369
  end
370
+
371
+ it "includes the end_time" do
372
+ @report.should have_key("end_time")
373
+ @report["end_time"].should == @run_status.end_time.to_s
374
+ end
375
+
362
376
  end
363
377
 
364
378
  context "for an unsuccessful run" do
@@ -394,15 +408,68 @@ describe Chef::ResourceReporter do
394
408
 
395
409
  it "includes the error inspector output in the event data" do
396
410
  @report["data"]["exception"].should have_key("description")
397
- @report["data"]["exception"]["description"].should include({"title"=>"Error expanding the run_list:", "sections"=>[["Unexpected Error:", "RSpec::Mocks::Mock: Object not found"]]})
411
+ @report["data"]["exception"]["description"].should include({"title"=>"Error expanding the run_list:", "sections"=>[{"Unexpected Error:" => "RSpec::Mocks::Mock: Object not found"}]})
398
412
  end
399
413
 
400
414
  end
401
415
 
416
+ context "when new_resource does not have a cookbook_name" do
417
+ before do
418
+ @bad_resource = Chef::Resource::File.new("/tmp/a-file.txt")
419
+ @bad_resource.cookbook_name = nil
420
+
421
+ @resource_reporter.resource_action_start(@bad_resource, :create)
422
+ @resource_reporter.resource_current_state_loaded(@bad_resource, :create, @current_resource)
423
+ @resource_reporter.resource_updated(@bad_resource, :create)
424
+ @resource_reporter.resource_completed(@bad_resource)
425
+ @run_status.stop_clock
426
+ @report = @resource_reporter.prepare_run_data
427
+ @first_update_report = @report["resources"].first
428
+ end
429
+
430
+ it "includes an updated resource's initial state" do
431
+ @first_update_report["before"].should == @current_resource.state
432
+ end
433
+
434
+ it "includes an updated resource's final state" do
435
+ @first_update_report["after"].should == @new_resource.state
436
+ end
437
+
438
+ it "includes the resource's name" do
439
+ @first_update_report["name"].should == @new_resource.name
440
+ end
441
+
442
+ it "includes the resource's id attribute" do
443
+ @first_update_report["id"].should == @new_resource.identity
444
+ end
445
+
446
+ it "includes the elapsed time for the resource to converge" do
447
+ # TODO: API takes integer number of milliseconds as a string. This
448
+ # should be an int.
449
+ @first_update_report.should have_key("duration")
450
+ @first_update_report["duration"].to_i.should be_within(100).of(0)
451
+ end
452
+
453
+ it "includes the action executed by the resource" do
454
+ # TODO: rename as "action"
455
+ @first_update_report["result"].should == "create"
456
+ end
457
+
458
+ it "does not include a cookbook name for the resource" do
459
+ @first_update_report.should_not have_key("cookbook_name")
460
+ end
461
+
462
+ it "does not include a cookbook version for the resource" do
463
+ @first_update_report.should_not have_key("cookbook_version")
464
+ end
465
+ end
466
+
402
467
  end
403
468
 
404
469
  describe "when updating resource history on the server" do
405
470
  before do
471
+ @resource_reporter.run_started(@run_status)
472
+ @run_status.start_clock
406
473
  end
407
474
 
408
475
  context "when the server does not support storing resource history" do
@@ -411,24 +478,26 @@ describe Chef::ResourceReporter do
411
478
  @response = Net::HTTPNotFound.new("a response body", "404", "Not Found")
412
479
  @error = Net::HTTPServerException.new("404 message", @response)
413
480
  @rest_client.should_receive(:post_rest).
414
- with("reports/nodes/spitfire/runs", {:action => :begin}).
481
+ with("reports/nodes/spitfire/runs", {:action => :start, :run_id => @run_id,
482
+ :start_time => @start_time.to_s},
483
+ {'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION}).
415
484
  and_raise(@error)
416
485
  end
417
486
 
418
487
  it "assumes the feature is not enabled" do
419
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
488
+ @resource_reporter.run_started(@run_status)
420
489
  @resource_reporter.reporting_enabled?.should be_false
421
490
  end
422
491
 
423
492
  it "does not send a resource report to the server" do
424
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
493
+ @resource_reporter.run_started(@run_status)
425
494
  @rest_client.should_not_receive(:post_rest)
426
495
  @resource_reporter.run_completed(@node)
427
496
  end
428
497
 
429
498
  it "prints an error about the 404" do
430
499
  Chef::Log.should_receive(:debug).with(/404/)
431
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
500
+ @resource_reporter.run_started(@run_status)
432
501
  end
433
502
 
434
503
  end
@@ -439,24 +508,25 @@ describe Chef::ResourceReporter do
439
508
  @response = Net::HTTPInternalServerError.new("a response body", "500", "Internal Server Error")
440
509
  @error = Net::HTTPServerException.new("500 message", @response)
441
510
  @rest_client.should_receive(:post_rest).
442
- with("reports/nodes/spitfire/runs", {:action => :begin}).
511
+ with("reports/nodes/spitfire/runs", {:action => :start, :run_id => @run_id, :start_time => @start_time.to_s},
512
+ {'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION}).
443
513
  and_raise(@error)
444
514
  end
445
515
 
446
516
  it "assumes the feature is not enabled" do
447
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
517
+ @resource_reporter.run_started(@run_status)
448
518
  @resource_reporter.reporting_enabled?.should be_false
449
519
  end
450
520
 
451
521
  it "does not send a resource report to the server" do
452
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
522
+ @resource_reporter.run_started(@run_status)
453
523
  @rest_client.should_not_receive(:post_rest)
454
524
  @resource_reporter.run_completed(@node)
455
525
  end
456
526
 
457
527
  it "prints an error about the error" do
458
528
  Chef::Log.should_receive(:info).with(/500/)
459
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
529
+ @resource_reporter.run_started(@run_status)
460
530
  end
461
531
  end
462
532
 
@@ -468,7 +538,8 @@ describe Chef::ResourceReporter do
468
538
  @response = Net::HTTPInternalServerError.new("a response body", "500", "Internal Server Error")
469
539
  @error = Net::HTTPServerException.new("500 message", @response)
470
540
  @rest_client.should_receive(:post_rest).
471
- with("reports/nodes/spitfire/runs", {:action => :begin}).
541
+ with("reports/nodes/spitfire/runs", {:action => :start, :run_id => @run_id, :start_time => @start_time.to_s},
542
+ {'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION}).
472
543
  and_raise(@error)
473
544
  end
474
545
 
@@ -479,23 +550,23 @@ describe Chef::ResourceReporter do
479
550
  it "fails the run and prints an message about the error" do
480
551
  Chef::Log.should_receive(:error).with(/500/)
481
552
  lambda {
482
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
553
+ @resource_reporter.run_started(@run_status)
483
554
  }.should raise_error(Net::HTTPServerException)
484
555
  end
485
556
  end
486
557
 
487
558
  context "after creating the run history document" do
488
559
  before do
489
- response = {"uri"=>"https://example.com/reports/nodes/spitfire/runs/ABC123"}
560
+ response = {"uri"=>"https://example.com/reports/nodes/spitfire/runs/@run_id"}
490
561
  @rest_client.should_receive(:post_rest).
491
- with("reports/nodes/spitfire/runs", {:action => :begin}).
562
+ with("reports/nodes/spitfire/runs", {:action => :start, :run_id => @run_id, :start_time => @start_time.to_s},
563
+ {'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION}).
492
564
  and_return(response)
493
-
494
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
565
+ @resource_reporter.run_started(@run_status)
495
566
  end
496
567
 
497
568
  it "creates a run document on the server at the start of the run" do
498
- @resource_reporter.run_id.should == "ABC123"
569
+ @resource_reporter.run_id.should == @run_id
499
570
  end
500
571
 
501
572
  it "updates the run document with resource updates at the end of the run" do
@@ -504,19 +575,22 @@ describe Chef::ResourceReporter do
504
575
  @resource_reporter.resource_current_state_loaded(@new_resource, :create, @current_resource)
505
576
  @resource_reporter.resource_updated(@new_resource, :create)
506
577
 
578
+ @resource_reporter.stub!(:end_time).and_return(@end_time)
507
579
  @expected_data = @resource_reporter.prepare_run_data
508
580
 
509
581
  post_url = "https://chef_server/example_url"
510
582
  response = {"result"=>"ok"}
511
583
 
512
584
  @rest_client.should_receive(:create_url).
513
- with("reports/nodes/spitfire/runs/ABC123").
585
+ with("reports/nodes/spitfire/runs/#{@run_id}").
514
586
  ordered.
515
587
  and_return(post_url)
516
588
  @rest_client.should_receive(:raw_http_request).ordered do |method, url, headers, data|
517
589
  method.should eq(:POST)
518
590
  url.should eq(post_url)
519
- headers.should eq({'Content-Encoding' => 'gzip'})
591
+ headers.should eq({'Content-Encoding' => 'gzip',
592
+ 'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION
593
+ })
520
594
  data_stream = Zlib::GzipReader.new(StringIO.new(data))
521
595
  data = data_stream.read
522
596
  data.should eq(@expected_data.to_json)
@@ -526,66 +600,5 @@ describe Chef::ResourceReporter do
526
600
  @resource_reporter.run_completed(@node)
527
601
  end
528
602
  end
529
-
530
- context "after creating the run history document when summary_only is set to true" do
531
- before do
532
- response = {"uri"=>"https://example.com/reports/nodes/spitfire/runs/ABC123", "summary_only"=>"true"}
533
- @rest_client.should_receive(:post_rest).
534
- with("reports/nodes/spitfire/runs", {:action => :begin}).
535
- and_return(response)
536
-
537
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
538
- end
539
-
540
- it "enables summary only reporting" do
541
- @resource_reporter.summary_only.should == "true"
542
- end
543
-
544
- it "updates the run document with resource updates at the end of the run" do
545
- # update some resources...
546
- @resource_reporter.resource_action_start(@new_resource, :create)
547
- @resource_reporter.resource_current_state_loaded(@new_resource, :create, @current_resource)
548
- @resource_reporter.resource_updated(@new_resource, :create)
549
-
550
- post_url = "reports/nodes/spitfire/runs/ABC123"
551
- response = {"result"=>"ok"}
552
-
553
- @rest_client.should_receive(:post_rest).ordered do |url, data|
554
- url.should eq(post_url)
555
- data.should have_key("action")
556
- data["action"].should == "end"
557
- data.should have_key("status")
558
- data.should have_key("resources")
559
- data["resources"].should == []
560
- data.should have_key("total_res_count")
561
- data["total_res_count"].should == "1"
562
- data.should have_key("data")
563
- data["data"].should == {}
564
- data.should have_key("updated_res_count")
565
- data["updated_res_count"].should == "0"
566
- data.should have_key("post_size")
567
- response
568
- end
569
-
570
- @resource_reporter.run_completed(@node)
571
- end
572
- end
573
-
574
- context "after creating the run history document when summary_only is set to false" do
575
- before do
576
- response = {"uri"=>"https://example.com/reports/nodes/spitfire/runs/ABC123", "summary_only"=>"false"}
577
- @rest_client.should_receive(:post_rest).
578
- with("reports/nodes/spitfire/runs", {:action => :begin}).
579
- and_return(response)
580
-
581
- @resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
582
- end
583
-
584
- it "disables summary_only reporting" do
585
- @resource_reporter.summary_only.should == "false"
586
- end
587
- end
588
-
589
603
  end
590
-
591
604
  end
@@ -288,6 +288,29 @@ describe Chef::Resource do
288
288
  end
289
289
  end
290
290
 
291
+ describe "defined_at" do
292
+ it "should correctly parse source_line on unix-like operating systems" do
293
+ @resource.source_line = "/some/path/to/file.rb:80:in `wombat_tears'"
294
+ @resource.defined_at.should == "/some/path/to/file.rb line 80"
295
+ end
296
+
297
+ it "should correctly parse source_line on Windows" do
298
+ @resource.source_line = "C:/some/path/to/file.rb:80 in 1`wombat_tears'"
299
+ @resource.defined_at.should == "C:/some/path/to/file.rb line 80"
300
+ end
301
+
302
+ it "should include the cookbook and recipe when it knows it" do
303
+ @resource.source_line = "/some/path/to/file.rb:80:in `wombat_tears'"
304
+ @resource.recipe_name = "wombats"
305
+ @resource.cookbook_name = "animals"
306
+ @resource.defined_at.should == "animals::wombats line 80"
307
+ end
308
+
309
+ it "should recognize dynamically defined resources" do
310
+ @resource.defined_at.should == "dynamically defined"
311
+ end
312
+ end
313
+
291
314
  describe "to_s" do
292
315
  it "should become a string like resource_name[name]" do
293
316
  zm = Chef::Resource::ZenMaster.new("coffee")
@@ -436,12 +459,11 @@ describe Chef::Resource do
436
459
  end
437
460
 
438
461
  describe "when invoking its action" do
439
-
440
462
  before do
441
463
  @resource = Chef::Resource.new("provided", @run_context)
442
464
  @resource.provider = Chef::Provider::SnakeOil
443
- @node[:platform] = "fubuntu"
444
- @node[:platform_version] = '10.04'
465
+ @node.automatic_attrs[:platform] = "fubuntu"
466
+ @node.automatic_attrs[:platform_version] = '10.04'
445
467
  end
446
468
 
447
469
  it "does not run only_if if no only_if command is given" do
@@ -506,6 +528,114 @@ describe Chef::Resource do
506
528
 
507
529
  end
508
530
 
531
+ describe "should_skip?" do
532
+ before do
533
+ @resource = Chef::Resource::Cat.new("sugar", @run_context)
534
+ end
535
+
536
+ it "should return false by default" do
537
+ @resource.should_skip?(:purr).should be_false
538
+ end
539
+
540
+ it "should return false when if_only is met" do
541
+ @resource.only_if { true }
542
+ @resource.should_skip?(:purr).should be_false
543
+ end
544
+
545
+ it "should return true when if_only is not met" do
546
+ @resource.only_if { false }
547
+ @resource.should_skip?(:purr).should be_true
548
+ end
549
+
550
+ it "should return true when not_if is met" do
551
+ @resource.not_if { true }
552
+ @resource.should_skip?(:purr).should be_true
553
+ end
554
+
555
+ it "should return false when if_only is not met" do
556
+ @resource.not_if { false }
557
+ @resource.should_skip?(:purr).should be_false
558
+ end
559
+
560
+ it "should return true when if_only is met but also not_if is met" do
561
+ @resource.only_if { true }
562
+ @resource.not_if { true }
563
+ @resource.should_skip?(:purr).should be_true
564
+ end
565
+
566
+ it "should return true when one of multiple if_only's is not met" do
567
+ @resource.only_if { true }
568
+ @resource.only_if { false }
569
+ @resource.only_if { true }
570
+ @resource.should_skip?(:purr).should be_true
571
+ end
572
+
573
+ it "should return true when one of multiple not_if's is met" do
574
+ @resource.not_if { false }
575
+ @resource.not_if { true }
576
+ @resource.not_if { false }
577
+ @resource.should_skip?(:purr).should be_true
578
+ end
579
+
580
+ it "should return true when action is :nothing" do
581
+ @resource.should_skip?(:nothing).should be_true
582
+ end
583
+
584
+ it "should return true when action is :nothing ignoring only_if/not_if conditionals" do
585
+ @resource.only_if { true }
586
+ @resource.not_if { false }
587
+ @resource.should_skip?(:nothing).should be_true
588
+ end
589
+
590
+ it "should print \"skipped due to action :nothing\" message for doc formatter when action is :nothing" do
591
+ fdoc = Chef::Formatters.new(:doc, STDOUT, STDERR)
592
+ @run_context.stub!(:events).and_return(fdoc)
593
+ fdoc.should_receive(:puts).with(" (skipped due to action :nothing)")
594
+ @resource.should_skip?(:nothing)
595
+ end
596
+
597
+ end
598
+
599
+ describe "when resource action is :nothing" do
600
+ before do
601
+ @resource1 = Chef::Resource::Cat.new("sugar", @run_context)
602
+ @resource1.action = :nothing
603
+
604
+ @node.automatic_attrs[:platform] = "fubuntu"
605
+ @node.automatic_attrs[:platform_version] = '10.04'
606
+ end
607
+
608
+ it "should not run only_if/not_if conditionals (CHEF-972)" do
609
+ snitch_var1 = 0
610
+ @resource1.only_if { snitch_var1 = 1 }
611
+ @resource1.not_if { snitch_var1 = 2 }
612
+ @resource1.run_action(:nothing)
613
+ snitch_var1.should == 0
614
+ end
615
+
616
+ it "should run only_if/not_if conditionals when notified to run another action (CHEF-972)" do
617
+ snitch_var1 = snitch_var2 = 0
618
+ @runner = Chef::Runner.new(@run_context)
619
+ Chef::Platform.set(
620
+ :resource => :cat,
621
+ :provider => Chef::Provider::SnakeOil
622
+ )
623
+
624
+ @resource1.only_if { snitch_var1 = 1 }
625
+ @resource1.not_if { snitch_var2 = 2 }
626
+ @resource2 = Chef::Resource::Cat.new("coffee", @run_context)
627
+ @resource2.notifies :purr, @resource1
628
+ @resource2.action = :purr
629
+
630
+ @run_context.resource_collection << @resource1
631
+ @run_context.resource_collection << @resource2
632
+ @runner.converge
633
+
634
+ snitch_var1.should == 1
635
+ snitch_var2.should == 2
636
+ end
637
+ end
638
+
509
639
  describe "building the platform map" do
510
640
 
511
641
  it 'adds mappings for a single platform' do
@@ -537,8 +667,8 @@ describe Chef::Resource do
537
667
  before(:each) do
538
668
  @node = Chef::Node.new
539
669
  @node.name("bumblebee")
540
- @node.platform("autobots")
541
- @node.platform_version("6.1")
670
+ @node.automatic[:platform] = "autobots"
671
+ @node.automatic[:platform_version] = "6.1"
542
672
  Object.const_set('Soundwave', Class.new(Chef::Resource))
543
673
  Object.const_set('Grimlock', Class.new(Chef::Resource){ provides :dinobot, :on_platforms => ['autobots'] })
544
674
  end
@@ -567,6 +697,68 @@ describe Chef::Resource do
567
697
  end
568
698
 
569
699
  end
700
+
701
+ describe "when creating notifications" do
702
+
703
+ describe "with a string resource spec" do
704
+
705
+ it "creates a delayed notification when timing is not specified" do
706
+ @resource.notifies(:run, "execute[foo]")
707
+ @run_context.delayed_notification_collection.should have(1).notifications
708
+ end
709
+
710
+ it "creates a delayed notification when :delayed is not specified" do
711
+ @resource.notifies(:run, "execute[foo]", :delayed)
712
+ @run_context.delayed_notification_collection.should have(1).notifications
713
+ end
714
+
715
+ it "creates an immediate notification when :immediate is specified" do
716
+ @resource.notifies(:run, "execute[foo]", :immediate)
717
+ @run_context.immediate_notification_collection.should have(1).notifications
718
+ end
719
+
720
+ it "creates an immediate notification when :immediately is specified" do
721
+ @resource.notifies(:run, "execute[foo]", :immediately)
722
+ @run_context.immediate_notification_collection.should have(1).notifications
723
+ end
724
+
725
+ describe "with a syntax error in the resource spec" do
726
+
727
+ it "raises an exception immmediately" do
728
+ lambda do
729
+ @resource.notifies(:run, "typo[missing-closing-bracket")
730
+ end.should raise_error(Chef::Exceptions::InvalidResourceSpecification)
731
+ end
732
+ end
733
+ end
734
+
735
+ describe "with a resource reference" do
736
+ before do
737
+ @notified_resource = Chef::Resource.new("punk", @run_context)
738
+ end
739
+
740
+ it "creates a delayed notification when timing is not specified" do
741
+ @resource.notifies(:run, @notified_resource)
742
+ @run_context.delayed_notification_collection.should have(1).notifications
743
+ end
744
+
745
+ it "creates a delayed notification when :delayed is not specified" do
746
+ @resource.notifies(:run, @notified_resource, :delayed)
747
+ @run_context.delayed_notification_collection.should have(1).notifications
748
+ end
749
+
750
+ it "creates an immediate notification when :immediate is specified" do
751
+ @resource.notifies(:run, @notified_resource, :immediate)
752
+ @run_context.immediate_notification_collection.should have(1).notifications
753
+ end
754
+
755
+ it "creates an immediate notification when :immediately is specified" do
756
+ @resource.notifies(:run, @notified_resource, :immediately)
757
+ @run_context.immediate_notification_collection.should have(1).notifications
758
+ end
759
+ end
760
+
761
+ end
570
762
  end
571
763
 
572
764
  describe Chef::Resource::Notification do