chef 12.0.0.alpha.2-x86-mingw32 → 12.0.0.rc.0-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 (628) hide show
  1. data/CONTRIBUTING.md +9 -0
  2. data/README.md +1 -1
  3. data/Rakefile +12 -0
  4. data/bin/chef-service-manager +1 -1
  5. data/bin/chef-windows-service +35 -0
  6. data/distro/common/html/_sources/ctl_chef_server.txt +307 -10
  7. data/distro/common/html/ctl_chef_client.html +3 -7
  8. data/distro/common/html/ctl_chef_server.html +609 -41
  9. data/distro/common/html/ctl_chef_shell.html +2 -2
  10. data/distro/common/html/ctl_chef_solo.html +1 -1
  11. data/distro/common/html/index.html +13 -13
  12. data/distro/common/html/knife.html +10 -10
  13. data/distro/common/html/knife_bootstrap.html +8 -8
  14. data/distro/common/html/knife_client.html +12 -12
  15. data/distro/common/html/knife_common_options.html +7 -7
  16. data/distro/common/html/knife_configure.html +3 -3
  17. data/distro/common/html/knife_cookbook.html +19 -19
  18. data/distro/common/html/knife_cookbook_site.html +28 -28
  19. data/distro/common/html/knife_data_bag.html +28 -13
  20. data/distro/common/html/knife_delete.html +2 -2
  21. data/distro/common/html/knife_deps.html +3 -3
  22. data/distro/common/html/knife_diff.html +4 -4
  23. data/distro/common/html/knife_download.html +3 -3
  24. data/distro/common/html/knife_edit.html +2 -2
  25. data/distro/common/html/knife_environment.html +14 -14
  26. data/distro/common/html/knife_exec.html +11 -11
  27. data/distro/common/html/knife_index_rebuild.html +2 -2
  28. data/distro/common/html/knife_list.html +3 -3
  29. data/distro/common/html/knife_node.html +23 -23
  30. data/distro/common/html/knife_raw.html +4 -4
  31. data/distro/common/html/knife_recipe_list.html +3 -3
  32. data/distro/common/html/knife_role.html +11 -11
  33. data/distro/common/html/knife_search.html +4 -4
  34. data/distro/common/html/knife_serve.html +3 -3
  35. data/distro/common/html/knife_show.html +3 -3
  36. data/distro/common/html/knife_ssh.html +7 -7
  37. data/distro/common/html/knife_ssl_check.html +7 -7
  38. data/distro/common/html/knife_ssl_fetch.html +9 -9
  39. data/distro/common/html/knife_status.html +3 -3
  40. data/distro/common/html/knife_tag.html +9 -9
  41. data/distro/common/html/knife_upload.html +3 -3
  42. data/distro/common/html/knife_user.html +9 -9
  43. data/distro/common/html/knife_using.html +11 -11
  44. data/distro/common/html/knife_xargs.html +14 -5
  45. data/distro/common/html/search.html +2 -2
  46. data/distro/common/html/searchindex.js +1 -1
  47. data/distro/common/man/man1/chef-shell.1 +2 -2
  48. data/distro/common/man/man1/knife-bootstrap.1 +7 -7
  49. data/distro/common/man/man1/knife-client.1 +10 -10
  50. data/distro/common/man/man1/knife-configure.1 +5 -5
  51. data/distro/common/man/man1/knife-cookbook-site.1 +24 -24
  52. data/distro/common/man/man1/knife-cookbook.1 +12 -12
  53. data/distro/common/man/man1/knife-data-bag.1 +34 -10
  54. data/distro/common/man/man1/knife-delete.1 +5 -5
  55. data/distro/common/man/man1/knife-deps.1 +5 -5
  56. data/distro/common/man/man1/knife-diff.1 +7 -7
  57. data/distro/common/man/man1/knife-download.1 +5 -5
  58. data/distro/common/man/man1/knife-edit.1 +5 -5
  59. data/distro/common/man/man1/knife-environment.1 +11 -11
  60. data/distro/common/man/man1/knife-exec.1 +11 -11
  61. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  62. data/distro/common/man/man1/knife-list.1 +5 -5
  63. data/distro/common/man/man1/knife-node.1 +16 -16
  64. data/distro/common/man/man1/knife-raw.1 +6 -6
  65. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  66. data/distro/common/man/man1/knife-role.1 +7 -7
  67. data/distro/common/man/man1/knife-search.1 +6 -6
  68. data/distro/common/man/man1/knife-serve.1 +6 -6
  69. data/distro/common/man/man1/knife-show.1 +5 -5
  70. data/distro/common/man/man1/knife-ssh.1 +9 -9
  71. data/distro/common/man/man1/knife-ssl-check.1 +7 -7
  72. data/distro/common/man/man1/knife-ssl-fetch.1 +9 -9
  73. data/distro/common/man/man1/knife-status.1 +5 -5
  74. data/distro/common/man/man1/knife-tag.1 +8 -8
  75. data/distro/common/man/man1/knife-upload.1 +5 -5
  76. data/distro/common/man/man1/knife-user.1 +8 -8
  77. data/distro/common/man/man1/knife-xargs.1 +36 -10
  78. data/distro/common/man/man1/knife.1 +14 -14
  79. data/distro/common/man/man8/chef-client.8 +3 -10
  80. data/distro/common/man/man8/chef-solo.8 +1 -1
  81. data/ext/win32-eventlog/Rakefile +50 -0
  82. data/ext/win32-eventlog/chef-log.man +26 -0
  83. data/lib/chef/application.rb +313 -241
  84. data/lib/chef/application/apply.rb +10 -8
  85. data/lib/chef/application/client.rb +58 -33
  86. data/lib/chef/application/solo.rb +33 -12
  87. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  88. data/lib/chef/chef_fs/command_line.rb +1 -1
  89. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +2 -1
  90. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -1
  91. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +2 -1
  92. data/lib/chef/client.rb +18 -48
  93. data/lib/chef/config.rb +43 -11
  94. data/lib/chef/cookbook/cookbook_version_loader.rb +14 -7
  95. data/lib/chef/cookbook/metadata.rb +81 -38
  96. data/lib/chef/cookbook/syntax_check.rb +18 -52
  97. data/lib/chef/cookbook_loader.rb +1 -1
  98. data/lib/chef/cookbook_version.rb +58 -39
  99. data/lib/chef/data_bag.rb +2 -2
  100. data/lib/chef/deprecation/provider/file.rb +2 -1
  101. data/lib/chef/dsl/data_query.rb +2 -29
  102. data/lib/chef/dsl/recipe.rb +8 -22
  103. data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
  104. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
  105. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +1 -1
  106. data/lib/chef/event_loggers/base.rb +62 -0
  107. data/lib/chef/event_loggers/windows_eventlog.rb +104 -0
  108. data/lib/chef/exceptions.rb +18 -1
  109. data/lib/chef/file_cache.rb +3 -2
  110. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +15 -6
  111. data/lib/chef/http.rb +20 -13
  112. data/lib/chef/http/ssl_policies.rb +2 -1
  113. data/lib/chef/json_compat.rb +9 -3
  114. data/lib/chef/knife.rb +2 -1
  115. data/lib/chef/knife/bootstrap.rb +12 -18
  116. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  117. data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
  118. data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
  119. data/lib/chef/knife/cookbook_create.rb +1 -1
  120. data/lib/chef/knife/cookbook_site_share.rb +43 -8
  121. data/lib/chef/knife/core/bootstrap_context.rb +6 -11
  122. data/lib/chef/knife/core/object_loader.rb +5 -5
  123. data/lib/chef/knife/core/status_presenter.rb +156 -0
  124. data/lib/chef/knife/core/subcommand_loader.rb +6 -5
  125. data/lib/chef/knife/core/ui.rb +4 -4
  126. data/lib/chef/knife/data_bag_create.rb +7 -32
  127. data/lib/chef/knife/data_bag_edit.rb +24 -43
  128. data/lib/chef/knife/data_bag_from_file.rb +6 -31
  129. data/lib/chef/knife/data_bag_secret_options.rb +142 -0
  130. data/lib/chef/knife/data_bag_show.rb +19 -33
  131. data/lib/chef/knife/node_from_file.rb +9 -8
  132. data/lib/chef/knife/ssh.rb +0 -7
  133. data/lib/chef/knife/ssl_check.rb +70 -6
  134. data/lib/chef/knife/status.rb +11 -58
  135. data/lib/chef/mixin/command/unix.rb +2 -2
  136. data/lib/chef/mixin/convert_to_class_name.rb +54 -0
  137. data/lib/chef/mixin/descendants_tracker.rb +82 -0
  138. data/lib/chef/mixin/homebrew_user.rb +68 -0
  139. data/lib/chef/mixin/shell_out.rb +0 -4
  140. data/lib/chef/mixin/windows_architecture_helper.rb +16 -0
  141. data/lib/chef/mixin/windows_env_helper.rb +56 -0
  142. data/lib/chef/node.rb +2 -2
  143. data/lib/chef/node_map.rb +146 -0
  144. data/lib/chef/platform/provider_mapping.rb +11 -39
  145. data/lib/chef/platform/provider_priority_map.rb +80 -0
  146. data/lib/chef/platform/query_helpers.rb +5 -1
  147. data/lib/chef/platform/service_helpers.rb +113 -0
  148. data/lib/chef/provider.rb +24 -0
  149. data/lib/chef/provider/breakpoint.rb +2 -0
  150. data/lib/chef/provider/cookbook_file.rb +2 -0
  151. data/lib/chef/provider/cron.rb +1 -1
  152. data/lib/chef/provider/cron/unix.rb +13 -9
  153. data/lib/chef/provider/deploy.rb +3 -2
  154. data/lib/chef/provider/deploy/revision.rb +4 -2
  155. data/lib/chef/provider/deploy/timestamped.rb +2 -0
  156. data/lib/chef/provider/directory.rb +2 -0
  157. data/lib/chef/provider/dsc_script.rb +179 -0
  158. data/lib/chef/provider/env.rb +25 -10
  159. data/lib/chef/provider/env/windows.rb +9 -16
  160. data/lib/chef/provider/erl_call.rb +2 -0
  161. data/lib/chef/provider/execute.rb +5 -2
  162. data/lib/chef/provider/file.rb +2 -0
  163. data/lib/chef/provider/git.rb +51 -23
  164. data/lib/chef/provider/group/dscl.rb +2 -2
  165. data/lib/chef/provider/group/pw.rb +9 -13
  166. data/lib/chef/provider/http_request.rb +2 -0
  167. data/lib/chef/provider/link.rb +3 -0
  168. data/lib/chef/provider/log.rb +2 -0
  169. data/lib/chef/provider/lwrp_base.rb +11 -9
  170. data/lib/chef/provider/mount/mount.rb +1 -1
  171. data/lib/chef/provider/package/aix.rb +2 -0
  172. data/lib/chef/provider/package/apt.rb +2 -0
  173. data/lib/chef/provider/package/dpkg.rb +2 -0
  174. data/lib/chef/provider/package/easy_install.rb +2 -0
  175. data/lib/chef/provider/package/freebsd/pkg.rb +2 -1
  176. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  177. data/lib/chef/provider/package/freebsd/port.rb +1 -9
  178. data/lib/chef/provider/package/homebrew.rb +127 -0
  179. data/lib/chef/provider/package/ips.rb +2 -0
  180. data/lib/chef/provider/package/macports.rb +3 -0
  181. data/lib/chef/provider/package/pacman.rb +5 -4
  182. data/lib/chef/provider/package/paludis.rb +4 -2
  183. data/lib/chef/provider/package/portage.rb +4 -1
  184. data/lib/chef/provider/package/rpm.rb +2 -0
  185. data/lib/chef/provider/package/rubygems.rb +4 -0
  186. data/lib/chef/provider/package/smartos.rb +2 -0
  187. data/lib/chef/provider/package/solaris.rb +2 -0
  188. data/lib/chef/provider/package/windows.rb +5 -2
  189. data/lib/chef/provider/package/yum.rb +2 -0
  190. data/lib/chef/provider/powershell_script.rb +3 -1
  191. data/lib/chef/provider/remote_directory.rb +25 -10
  192. data/lib/chef/provider/route.rb +2 -0
  193. data/lib/chef/provider/ruby_block.rb +2 -0
  194. data/lib/chef/provider/script.rb +6 -0
  195. data/lib/chef/provider/service/aix.rb +128 -0
  196. data/lib/chef/provider/service/aixinit.rb +117 -0
  197. data/lib/chef/provider/service/arch.rb +6 -0
  198. data/lib/chef/provider/service/debian.rb +35 -29
  199. data/lib/chef/provider/service/freebsd.rb +7 -1
  200. data/lib/chef/provider/service/gentoo.rb +5 -1
  201. data/lib/chef/provider/service/init.rb +2 -0
  202. data/lib/chef/provider/service/insserv.rb +15 -8
  203. data/lib/chef/provider/service/invokercd.rb +6 -0
  204. data/lib/chef/provider/service/macosx.rb +4 -1
  205. data/lib/chef/provider/service/redhat.rb +9 -3
  206. data/lib/chef/provider/service/simple.rb +2 -0
  207. data/lib/chef/provider/service/solaris.rb +2 -0
  208. data/lib/chef/provider/service/systemd.rb +7 -0
  209. data/lib/chef/provider/service/upstart.rb +7 -0
  210. data/lib/chef/provider/service/windows.rb +5 -0
  211. data/lib/chef/provider/subversion.rb +2 -0
  212. data/lib/chef/provider/template.rb +1 -0
  213. data/lib/chef/provider/user/dscl.rb +3 -2
  214. data/lib/chef/provider/whyrun_safe_ruby_block.rb +2 -0
  215. data/lib/chef/provider_resolver.rb +103 -0
  216. data/lib/chef/providers.rb +6 -2
  217. data/lib/chef/recipe.rb +2 -0
  218. data/lib/chef/resource.rb +69 -78
  219. data/lib/chef/resource/apt_package.rb +3 -1
  220. data/lib/chef/resource/bash.rb +1 -0
  221. data/lib/chef/resource/bff_package.rb +0 -1
  222. data/lib/chef/resource/breakpoint.rb +1 -1
  223. data/lib/chef/resource/chef_gem.rb +1 -2
  224. data/lib/chef/resource/conditional.rb +26 -6
  225. data/lib/chef/resource/cookbook_file.rb +2 -3
  226. data/lib/chef/resource/csh.rb +1 -0
  227. data/lib/chef/resource/deploy.rb +0 -1
  228. data/lib/chef/resource/deploy_revision.rb +6 -1
  229. data/lib/chef/resource/directory.rb +1 -2
  230. data/lib/chef/resource/dpkg_package.rb +2 -1
  231. data/lib/chef/resource/dsc_script.rb +125 -0
  232. data/lib/chef/resource/easy_install_package.rb +2 -1
  233. data/lib/chef/resource/erl_call.rb +1 -0
  234. data/lib/chef/resource/execute.rb +26 -9
  235. data/lib/chef/resource/file.rb +1 -3
  236. data/lib/chef/resource/freebsd_package.rb +10 -23
  237. data/lib/chef/resource/gem_package.rb +2 -1
  238. data/lib/chef/resource/git.rb +2 -1
  239. data/lib/chef/resource/homebrew_package.rb +46 -0
  240. data/lib/chef/resource/http_request.rb +1 -0
  241. data/lib/chef/resource/ips_package.rb +3 -1
  242. data/lib/chef/resource/link.rb +1 -2
  243. data/lib/chef/resource/log.rb +4 -0
  244. data/lib/chef/resource/lwrp_base.rb +24 -15
  245. data/lib/chef/resource/macports_package.rb +3 -1
  246. data/lib/chef/resource/pacman_package.rb +2 -1
  247. data/lib/chef/resource/paludis_package.rb +3 -1
  248. data/lib/chef/resource/perl.rb +1 -0
  249. data/lib/chef/resource/powershell_script.rb +0 -2
  250. data/lib/chef/resource/python.rb +1 -1
  251. data/lib/chef/resource/remote_directory.rb +1 -2
  252. data/lib/chef/resource/remote_file.rb +1 -1
  253. data/lib/chef/resource/rpm_package.rb +2 -1
  254. data/lib/chef/resource/ruby.rb +1 -0
  255. data/lib/chef/resource/ruby_block.rb +3 -0
  256. data/lib/chef/resource/script.rb +2 -25
  257. data/lib/chef/resource/service.rb +0 -4
  258. data/lib/chef/resource/smartos_package.rb +3 -4
  259. data/lib/chef/resource/solaris_package.rb +7 -1
  260. data/lib/chef/resource/subversion.rb +0 -1
  261. data/lib/chef/resource/template.rb +2 -3
  262. data/lib/chef/resource/timestamped_deploy.rb +1 -2
  263. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
  264. data/lib/chef/resource/windows_package.rb +3 -4
  265. data/lib/chef/resource/windows_script.rb +3 -0
  266. data/lib/chef/resource/windows_service.rb +2 -2
  267. data/lib/chef/resource/yum_package.rb +3 -1
  268. data/lib/chef/resource_collection.rb +50 -227
  269. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
  270. data/lib/chef/resource_collection/resource_list.rb +89 -0
  271. data/lib/chef/resource_collection/resource_set.rb +170 -0
  272. data/lib/chef/resources.rb +2 -0
  273. data/lib/chef/role.rb +1 -1
  274. data/lib/chef/run_context.rb +5 -1
  275. data/lib/chef/shell/ext.rb +1 -1
  276. data/lib/chef/util/backup.rb +3 -2
  277. data/lib/chef/util/dsc/configuration_generator.rb +115 -0
  278. data/lib/chef/util/dsc/lcm_output_parser.rb +133 -0
  279. data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
  280. data/lib/chef/util/dsc/resource_info.rb +26 -0
  281. data/lib/chef/util/path_helper.rb +12 -0
  282. data/lib/chef/util/powershell/cmdlet.rb +136 -0
  283. data/lib/chef/util/powershell/cmdlet_result.rb +46 -0
  284. data/lib/chef/version.rb +1 -1
  285. data/lib/chef/win32/api/system.rb +9 -0
  286. data/lib/chef/win32/version.rb +2 -0
  287. data/spec/.DS_Store +0 -0
  288. data/spec/data/.DS_Store +0 -0
  289. data/spec/data/bootstrap/test-hints.erb +1 -1
  290. data/spec/data/bootstrap/test.erb +1 -1
  291. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  292. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  293. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
  294. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
  295. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
  296. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
  297. data/spec/data/lwrp/.DS_Store +0 -0
  298. data/spec/data/lwrp/providers/.DS_Store +0 -0
  299. data/spec/data/lwrp/providers/buck_passer.rb +9 -2
  300. data/spec/data/lwrp/resources/.DS_Store +0 -0
  301. data/spec/data/lwrp/resources/foo.rb +3 -2
  302. data/spec/data/lwrp_override/.DS_Store +0 -0
  303. data/spec/data/lwrp_override/providers/.DS_Store +0 -0
  304. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -10
  305. data/spec/data/lwrp_override/resources/.DS_Store +0 -0
  306. data/spec/data/lwrp_override/resources/foo.rb +4 -3
  307. data/spec/functional/assets/chefinittest +34 -0
  308. data/spec/functional/assets/testchefsubsys +11 -0
  309. data/spec/functional/dsl/reboot_pending_spec.rb +19 -16
  310. data/spec/functional/event_loggers/windows_eventlog_spec.rb +82 -0
  311. data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
  312. data/spec/functional/knife/exec_spec.rb +1 -1
  313. data/spec/functional/resource/aix_service_spec.rb +136 -0
  314. data/spec/functional/resource/aixinit_service_spec.rb +211 -0
  315. data/spec/functional/resource/base.rb +1 -0
  316. data/spec/functional/resource/batch_spec.rb +4 -11
  317. data/spec/functional/resource/cron_spec.rb +7 -1
  318. data/spec/functional/resource/dsc_script_spec.rb +382 -0
  319. data/spec/functional/resource/env_spec.rb +54 -0
  320. data/spec/functional/resource/execute_spec.rb +113 -0
  321. data/spec/functional/resource/file_spec.rb +2 -0
  322. data/spec/functional/resource/group_spec.rb +7 -4
  323. data/spec/functional/resource/powershell_spec.rb +198 -185
  324. data/spec/functional/resource/rpm_spec.rb +5 -4
  325. data/spec/functional/resource/user/dscl_spec.rb +2 -1
  326. data/spec/functional/util/path_helper_spec.rb +37 -0
  327. data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
  328. data/spec/integration/client/client_spec.rb +1 -1
  329. data/spec/integration/client/ipv6_spec.rb +1 -1
  330. data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
  331. data/spec/integration/knife/chef_repo_path_spec.rb +1 -1
  332. data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
  333. data/spec/integration/knife/chefignore_spec.rb +1 -1
  334. data/spec/integration/knife/common_options_spec.rb +1 -1
  335. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  336. data/spec/integration/knife/delete_spec.rb +1 -1
  337. data/spec/integration/knife/deps_spec.rb +1 -1
  338. data/spec/integration/knife/diff_spec.rb +1 -1
  339. data/spec/integration/knife/download_spec.rb +1 -1
  340. data/spec/integration/knife/list_spec.rb +1 -1
  341. data/spec/integration/knife/raw_spec.rb +1 -1
  342. data/spec/integration/knife/redirection_spec.rb +1 -1
  343. data/spec/integration/knife/serve_spec.rb +1 -1
  344. data/spec/integration/knife/show_spec.rb +1 -1
  345. data/spec/integration/knife/upload_spec.rb +4 -3
  346. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  347. data/spec/spec_helper.rb +15 -0
  348. data/spec/support/chef_helpers.rb +1 -0
  349. data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
  350. data/spec/support/lib/chef/resource/zen_follower.rb +1 -7
  351. data/spec/support/platform_helpers.rb +28 -0
  352. data/spec/support/shared/functional/file_resource.rb +6 -0
  353. data/spec/support/shared/functional/windows_script.rb +118 -0
  354. data/spec/support/shared/integration/integration_helper.rb +5 -2
  355. data/spec/support/shared/matchers/exit_with_code.rb +28 -0
  356. data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
  357. data/spec/support/shared/shared_examples.rb +14 -0
  358. data/spec/support/shared/unit/execute_resource.rb +0 -7
  359. data/spec/support/shared/unit/resource/static_provider_resolution.rb +71 -0
  360. data/spec/support/shared/unit/script_resource.rb +1 -1
  361. data/spec/support/shared/unit/windows_script_resource.rb +35 -2
  362. data/spec/tiny_server.rb +1 -2
  363. data/spec/unit/api_client_spec.rb +5 -1
  364. data/spec/unit/application/{apply.rb → apply_spec.rb} +13 -5
  365. data/spec/unit/application/client_spec.rb +106 -13
  366. data/spec/unit/application/solo_spec.rb +25 -1
  367. data/spec/unit/client_spec.rb +1 -26
  368. data/spec/unit/config_fetcher_spec.rb +2 -1
  369. data/spec/unit/config_spec.rb +91 -2
  370. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +8 -0
  371. data/spec/unit/cookbook/metadata_spec.rb +43 -6
  372. data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
  373. data/spec/unit/cookbook_loader_spec.rb +4 -2
  374. data/spec/unit/cookbook_version_spec.rb +83 -2
  375. data/spec/unit/data_bag_item_spec.rb +5 -1
  376. data/spec/unit/data_bag_spec.rb +6 -1
  377. data/spec/unit/dsl/data_query_spec.rb +8 -110
  378. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
  379. data/spec/unit/encrypted_data_bag_item_spec.rb +16 -23
  380. data/spec/unit/environment_spec.rb +6 -2
  381. data/spec/unit/exceptions_spec.rb +6 -0
  382. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +16 -15
  383. data/spec/unit/json_compat_spec.rb +12 -2
  384. data/spec/unit/knife/bootstrap_spec.rb +16 -63
  385. data/spec/unit/knife/cookbook_site_share_spec.rb +59 -6
  386. data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -37
  387. data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -1
  388. data/spec/unit/knife/core/ui_spec.rb +28 -0
  389. data/spec/unit/knife/data_bag_create_spec.rb +63 -71
  390. data/spec/unit/knife/data_bag_edit_spec.rb +83 -49
  391. data/spec/unit/knife/data_bag_from_file_spec.rb +104 -126
  392. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
  393. data/spec/unit/knife/data_bag_show_spec.rb +74 -72
  394. data/spec/unit/knife/environment_from_file_spec.rb +3 -2
  395. data/spec/unit/knife/ssl_check_spec.rb +46 -1
  396. data/spec/unit/knife/status_spec.rb +1 -2
  397. data/spec/unit/knife_spec.rb +18 -1
  398. data/spec/unit/lwrp_spec.rb +29 -8
  399. data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
  400. data/spec/unit/node_map_spec.rb +155 -0
  401. data/spec/unit/node_spec.rb +11 -0
  402. data/spec/unit/platform/query_helpers_spec.rb +23 -0
  403. data/spec/unit/platform_spec.rb +23 -0
  404. data/spec/unit/provider/breakpoint_spec.rb +9 -9
  405. data/spec/unit/provider/cookbook_file/content_spec.rb +3 -3
  406. data/spec/unit/provider/cookbook_file_spec.rb +1 -1
  407. data/spec/unit/provider/cron/unix_spec.rb +78 -60
  408. data/spec/unit/provider/cron_spec.rb +175 -175
  409. data/spec/unit/provider/deploy/revision_spec.rb +22 -21
  410. data/spec/unit/provider/deploy/timestamped_spec.rb +3 -3
  411. data/spec/unit/provider/deploy_spec.rb +231 -230
  412. data/spec/unit/provider/directory_spec.rb +55 -55
  413. data/spec/unit/provider/dsc_script_spec.rb +174 -0
  414. data/spec/unit/provider/env/windows_spec.rb +70 -34
  415. data/spec/unit/provider/env_spec.rb +95 -49
  416. data/spec/unit/provider/erl_call_spec.rb +9 -9
  417. data/spec/unit/provider/execute_spec.rb +43 -27
  418. data/spec/unit/provider/file/content_spec.rb +9 -9
  419. data/spec/unit/provider/file_spec.rb +1 -1
  420. data/spec/unit/provider/git_spec.rb +221 -159
  421. data/spec/unit/provider/group/dscl_spec.rb +64 -63
  422. data/spec/unit/provider/group/gpasswd_spec.rb +14 -14
  423. data/spec/unit/provider/group/groupadd_spec.rb +33 -33
  424. data/spec/unit/provider/group/groupmod_spec.rb +23 -23
  425. data/spec/unit/provider/group/pw_spec.rb +21 -21
  426. data/spec/unit/provider/group/usermod_spec.rb +20 -20
  427. data/spec/unit/provider/group/windows_spec.rb +15 -15
  428. data/spec/unit/provider/group_spec.rb +76 -76
  429. data/spec/unit/provider/http_request_spec.rb +30 -30
  430. data/spec/unit/provider/ifconfig/aix_spec.rb +20 -20
  431. data/spec/unit/provider/ifconfig/debian_spec.rb +25 -9
  432. data/spec/unit/provider/ifconfig/redhat_spec.rb +13 -13
  433. data/spec/unit/provider/ifconfig_spec.rb +43 -43
  434. data/spec/unit/provider/link_spec.rb +60 -60
  435. data/spec/unit/provider/log_spec.rb +0 -4
  436. data/spec/unit/provider/mdadm_spec.rb +23 -23
  437. data/spec/unit/provider/mount/aix_spec.rb +17 -17
  438. data/spec/unit/provider/mount/mount_spec.rb +115 -119
  439. data/spec/unit/provider/mount/solaris_spec.rb +72 -72
  440. data/spec/unit/provider/mount/windows_spec.rb +24 -24
  441. data/spec/unit/provider/ohai_spec.rb +11 -11
  442. data/spec/unit/provider/package/aix_spec.rb +34 -34
  443. data/spec/unit/provider/package/apt_spec.rb +36 -36
  444. data/spec/unit/provider/package/dpkg_spec.rb +27 -27
  445. data/spec/unit/provider/package/easy_install_spec.rb +16 -16
  446. data/spec/unit/provider/package/freebsd/pkg_spec.rb +53 -53
  447. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +24 -24
  448. data/spec/unit/provider/package/freebsd/port_spec.rb +45 -35
  449. data/spec/unit/provider/package/homebrew_spec.rb +266 -0
  450. data/spec/unit/provider/package/ips_spec.rb +34 -34
  451. data/spec/unit/provider/package/macports_spec.rb +49 -49
  452. data/spec/unit/provider/package/pacman_spec.rb +35 -39
  453. data/spec/unit/provider/package/paludis_spec.rb +20 -20
  454. data/spec/unit/provider/package/portage_spec.rb +38 -38
  455. data/spec/unit/provider/package/rpm_spec.rb +29 -29
  456. data/spec/unit/provider/package/rubygems_spec.rb +284 -270
  457. data/spec/unit/provider/package/smartos_spec.rb +15 -15
  458. data/spec/unit/provider/package/solaris_spec.rb +35 -35
  459. data/spec/unit/provider/package/windows/msi_spec.rb +3 -3
  460. data/spec/unit/provider/package/windows_spec.rb +6 -6
  461. data/spec/unit/provider/package/yum_spec.rb +416 -416
  462. data/spec/unit/provider/package/zypper_spec.rb +47 -47
  463. data/spec/unit/provider/package_spec.rb +107 -107
  464. data/spec/unit/provider/powershell_spec.rb +1 -1
  465. data/spec/unit/provider/registry_key_spec.rb +61 -61
  466. data/spec/unit/provider/remote_directory_spec.rb +36 -36
  467. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +24 -24
  468. data/spec/unit/provider/remote_file/content_spec.rb +45 -45
  469. data/spec/unit/provider/remote_file/fetcher_spec.rb +9 -9
  470. data/spec/unit/provider/remote_file/ftp_spec.rb +32 -32
  471. data/spec/unit/provider/remote_file/http_spec.rb +44 -44
  472. data/spec/unit/provider/remote_file/local_file_spec.rb +9 -9
  473. data/spec/unit/provider/remote_file_spec.rb +3 -3
  474. data/spec/unit/provider/route_spec.rb +63 -63
  475. data/spec/unit/provider/ruby_block_spec.rb +4 -4
  476. data/spec/unit/provider/script_spec.rb +12 -12
  477. data/spec/unit/provider/service/aix_service_spec.rb +181 -0
  478. data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
  479. data/spec/unit/provider/service/arch_service_spec.rb +48 -48
  480. data/spec/unit/provider/service/debian_service_spec.rb +40 -40
  481. data/spec/unit/provider/service/gentoo_service_spec.rb +28 -28
  482. data/spec/unit/provider/service/init_service_spec.rb +39 -39
  483. data/spec/unit/provider/service/insserv_service_spec.rb +8 -8
  484. data/spec/unit/provider/service/invokercd_service_spec.rb +35 -35
  485. data/spec/unit/provider/service/macosx_spec.rb +49 -49
  486. data/spec/unit/provider/service/redhat_spec.rb +27 -27
  487. data/spec/unit/provider/service/simple_service_spec.rb +28 -28
  488. data/spec/unit/provider/service/solaris_smf_service_spec.rb +43 -46
  489. data/spec/unit/provider/service/systemd_service_spec.rb +63 -63
  490. data/spec/unit/provider/service/upstart_service_spec.rb +78 -78
  491. data/spec/unit/provider/service/windows_spec.rb +92 -92
  492. data/spec/unit/provider/service_spec.rb +40 -40
  493. data/spec/unit/provider/subversion_spec.rb +80 -80
  494. data/spec/unit/provider/template/content_spec.rb +9 -9
  495. data/spec/unit/provider/template_spec.rb +6 -6
  496. data/spec/unit/provider/user/dscl_spec.rb +170 -167
  497. data/spec/unit/provider/user/pw_spec.rb +48 -48
  498. data/spec/unit/provider/user/solaris_spec.rb +8 -8
  499. data/spec/unit/provider/user/useradd_spec.rb +1 -1
  500. data/spec/unit/provider/user/windows_spec.rb +26 -26
  501. data/spec/unit/provider/user_spec.rb +72 -72
  502. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +4 -4
  503. data/spec/unit/provider_resolver_spec.rb +387 -0
  504. data/spec/unit/recipe_spec.rb +33 -12
  505. data/spec/unit/resource/apt_package_spec.rb +10 -13
  506. data/spec/unit/resource/bash_spec.rb +4 -4
  507. data/spec/unit/resource/batch_spec.rb +1 -1
  508. data/spec/unit/resource/breakpoint_spec.rb +11 -7
  509. data/spec/unit/resource/chef_gem_spec.rb +8 -15
  510. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  511. data/spec/unit/resource/conditional_spec.rb +35 -16
  512. data/spec/unit/resource/cookbook_file_spec.rb +13 -13
  513. data/spec/unit/resource/cron_spec.rb +37 -37
  514. data/spec/unit/resource/csh_spec.rb +4 -4
  515. data/spec/unit/resource/deploy_revision_spec.rb +13 -18
  516. data/spec/unit/resource/deploy_spec.rb +60 -55
  517. data/spec/unit/resource/directory_spec.rb +18 -18
  518. data/spec/unit/resource/dpkg_package_spec.rb +8 -14
  519. data/spec/unit/resource/dsc_script_spec.rb +98 -0
  520. data/spec/unit/resource/easy_install_package_spec.rb +9 -18
  521. data/spec/unit/resource/env_spec.rb +12 -12
  522. data/spec/unit/resource/erl_call_spec.rb +11 -11
  523. data/spec/unit/resource/execute_spec.rb +5 -0
  524. data/spec/unit/resource/file_spec.rb +29 -29
  525. data/spec/unit/resource/freebsd_package_spec.rb +11 -12
  526. data/spec/unit/resource/gem_package_spec.rb +8 -15
  527. data/spec/unit/resource/git_spec.rb +12 -8
  528. data/spec/unit/resource/group_spec.rb +27 -27
  529. data/spec/unit/resource/homebrew_package_spec.rb +50 -0
  530. data/spec/unit/resource/http_request_spec.rb +6 -6
  531. data/spec/unit/resource/ifconfig_spec.rb +8 -8
  532. data/spec/unit/resource/ips_package_spec.rb +10 -13
  533. data/spec/unit/resource/link_spec.rb +25 -25
  534. data/spec/unit/resource/log_spec.rb +9 -9
  535. data/spec/unit/resource/macports_package_spec.rb +8 -13
  536. data/spec/unit/resource/mdadm_spec.rb +18 -18
  537. data/spec/unit/resource/mount_spec.rb +45 -45
  538. data/spec/unit/resource/ohai_spec.rb +7 -7
  539. data/spec/unit/resource/package_spec.rb +12 -12
  540. data/spec/unit/resource/pacman_package_spec.rb +8 -14
  541. data/spec/unit/resource/perl_spec.rb +4 -4
  542. data/spec/unit/resource/portage_package_spec.rb +3 -3
  543. data/spec/unit/resource/powershell_spec.rb +7 -7
  544. data/spec/unit/resource/python_spec.rb +4 -4
  545. data/spec/unit/resource/registry_key_spec.rb +32 -32
  546. data/spec/unit/resource/remote_directory_spec.rb +17 -17
  547. data/spec/unit/resource/remote_file_spec.rb +41 -41
  548. data/spec/unit/resource/route_spec.rb +19 -19
  549. data/spec/unit/resource/rpm_package_spec.rb +9 -13
  550. data/spec/unit/resource/ruby_block_spec.rb +8 -8
  551. data/spec/unit/resource/ruby_spec.rb +4 -4
  552. data/spec/unit/resource/scm_spec.rb +40 -40
  553. data/spec/unit/resource/script_spec.rb +2 -2
  554. data/spec/unit/resource/service_spec.rb +37 -47
  555. data/spec/unit/resource/smartos_package_spec.rb +10 -15
  556. data/spec/unit/resource/solaris_package_spec.rb +13 -28
  557. data/spec/unit/resource/subversion_spec.rb +16 -12
  558. data/spec/unit/resource/template_spec.rb +35 -35
  559. data/spec/unit/resource/timestamped_deploy_spec.rb +30 -4
  560. data/spec/unit/resource/user_spec.rb +23 -23
  561. data/spec/unit/resource/windows_package_spec.rb +17 -10
  562. data/spec/unit/resource/windows_service_spec.rb +9 -6
  563. data/spec/unit/resource/yum_package_spec.rb +16 -21
  564. data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
  565. data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
  566. data/spec/unit/resource_collection_spec.rb +73 -92
  567. data/spec/unit/resource_definition_spec.rb +38 -40
  568. data/spec/unit/resource_reporter_spec.rb +3 -3
  569. data/spec/unit/resource_spec.rb +68 -33
  570. data/spec/unit/rest_spec.rb +83 -76
  571. data/spec/unit/role_spec.rb +5 -0
  572. data/spec/unit/run_list_spec.rb +5 -1
  573. data/spec/unit/runner_spec.rb +245 -238
  574. data/spec/unit/shell/shell_ext_spec.rb +1 -1
  575. data/spec/unit/user_spec.rb +5 -1
  576. data/spec/unit/util/dsc/configuration_generator_spec.rb +171 -0
  577. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +169 -0
  578. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
  579. data/spec/unit/util/path_helper_spec.rb +23 -1
  580. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
  581. data/spec/unit/workstation_config_loader_spec.rb +1 -1
  582. metadata +303 -196
  583. checksums.yaml +0 -7
  584. data/distro/README +0 -2
  585. data/distro/arch/etc/conf.d/chef-client.conf +0 -5
  586. data/distro/arch/etc/conf.d/chef-expander.conf +0 -8
  587. data/distro/arch/etc/conf.d/chef-server-webui.conf +0 -10
  588. data/distro/arch/etc/conf.d/chef-server.conf +0 -10
  589. data/distro/arch/etc/conf.d/chef-solr.conf +0 -8
  590. data/distro/arch/etc/rc.d/chef-client +0 -90
  591. data/distro/arch/etc/rc.d/chef-expander +0 -78
  592. data/distro/arch/etc/rc.d/chef-server +0 -78
  593. data/distro/arch/etc/rc.d/chef-server-webui +0 -78
  594. data/distro/arch/etc/rc.d/chef-solr +0 -78
  595. data/distro/debian/etc/default/chef-client +0 -4
  596. data/distro/debian/etc/default/chef-expander +0 -8
  597. data/distro/debian/etc/default/chef-server +0 -9
  598. data/distro/debian/etc/default/chef-server-webui +0 -9
  599. data/distro/debian/etc/default/chef-solr +0 -8
  600. data/distro/debian/etc/init.d/chef-client +0 -212
  601. data/distro/debian/etc/init.d/chef-expander +0 -176
  602. data/distro/debian/etc/init.d/chef-server +0 -122
  603. data/distro/debian/etc/init.d/chef-server-webui +0 -123
  604. data/distro/debian/etc/init.d/chef-solr +0 -176
  605. data/distro/debian/etc/init/chef-client.conf +0 -17
  606. data/distro/debian/etc/init/chef-expander.conf +0 -17
  607. data/distro/debian/etc/init/chef-server-webui.conf +0 -17
  608. data/distro/debian/etc/init/chef-server.conf +0 -17
  609. data/distro/debian/etc/init/chef-solr.conf +0 -17
  610. data/distro/redhat/etc/init.d/chef-client +0 -121
  611. data/distro/redhat/etc/init.d/chef-expander +0 -104
  612. data/distro/redhat/etc/init.d/chef-server +0 -112
  613. data/distro/redhat/etc/init.d/chef-server-webui +0 -112
  614. data/distro/redhat/etc/init.d/chef-solr +0 -104
  615. data/distro/redhat/etc/logrotate.d/chef-client +0 -8
  616. data/distro/redhat/etc/logrotate.d/chef-expander +0 -8
  617. data/distro/redhat/etc/logrotate.d/chef-server +0 -8
  618. data/distro/redhat/etc/logrotate.d/chef-server-webui +0 -8
  619. data/distro/redhat/etc/logrotate.d/chef-solr +0 -8
  620. data/distro/redhat/etc/sysconfig/chef-client +0 -15
  621. data/distro/redhat/etc/sysconfig/chef-expander +0 -7
  622. data/distro/redhat/etc/sysconfig/chef-server +0 -14
  623. data/distro/redhat/etc/sysconfig/chef-server-webui +0 -14
  624. data/distro/redhat/etc/sysconfig/chef-solr +0 -8
  625. data/distro/windows/service_manager.rb +0 -20
  626. data/lib/chef/resource_platform_map.rb +0 -151
  627. data/spec/support/shared/matchers.rb +0 -17
  628. data/spec/unit/resource_platform_map_spec.rb +0 -164
@@ -0,0 +1,95 @@
1
+ #
2
+ # Author:: Tyler Ball (<tball@getchef.com>)
3
+ # Copyright:: Copyright (c) 2010-2014 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
+ require 'chef/encrypted_data_bag_item/check_encrypted'
21
+
22
+ class CheckEncryptedTester
23
+ include Chef::EncryptedDataBagItem::CheckEncrypted
24
+ end
25
+
26
+ describe Chef::EncryptedDataBagItem::CheckEncrypted do
27
+
28
+ let(:tester) { CheckEncryptedTester.new }
29
+
30
+ it "detects the item is not encrypted when the data is empty" do
31
+ expect(tester.encrypted?({})).to eq(false)
32
+ end
33
+
34
+ it "detects the item is not encrypted when the data only contains an id" do
35
+ expect(tester.encrypted?({id: "foo"})).to eq(false)
36
+ end
37
+
38
+ context "when the item is encrypted" do
39
+
40
+ let(:default_secret) { "abc123SECRET" }
41
+ let(:item_name) { "item_name" }
42
+ let(:raw_data) {{
43
+ "id" => item_name,
44
+ "greeting" => "hello",
45
+ "nested" => {
46
+ "a1" => [1, 2, 3],
47
+ "a2" => { "b1" => true }
48
+ }
49
+ }}
50
+
51
+ let(:version) { 1 }
52
+ let(:encoded_data) do
53
+ Chef::Config[:data_bag_encrypt_version] = version
54
+ Chef::EncryptedDataBagItem.encrypt_data_bag_item(raw_data, default_secret)
55
+ end
56
+
57
+ it "does not detect encryption when the item version is unknown" do
58
+ # It shouldn't be possible for someone to normally encrypt an item with an unknown version - they would have to
59
+ # do something funky like encrypting it and then manually changing the version
60
+ modified_encoded_data = encoded_data
61
+ modified_encoded_data["greeting"]["version"] = 4
62
+ expect(tester.encrypted?(modified_encoded_data)).to eq(false)
63
+ end
64
+
65
+ shared_examples_for "encryption detected" do
66
+ it "detects encrypted data bag" do
67
+ expect( encryptor ).to receive(:encryptor_keys).at_least(:once).and_call_original
68
+ expect(tester.encrypted?(encoded_data)).to eq(true)
69
+ end
70
+ end
71
+
72
+ context "when encryption version is 1" do
73
+ include_examples "encryption detected" do
74
+ let(:version) { 1 }
75
+ let(:encryptor) { Chef::EncryptedDataBagItem::Encryptor::Version1Encryptor }
76
+ end
77
+ end
78
+
79
+ context "when encryption version is 2" do
80
+ include_examples "encryption detected" do
81
+ let(:version) { 2 }
82
+ let(:encryptor) { Chef::EncryptedDataBagItem::Encryptor::Version2Encryptor }
83
+ end
84
+ end
85
+
86
+ context "when encryption version is 3", :aes_256_gcm_only, :ruby_20_only do
87
+ include_examples "encryption detected" do
88
+ let(:version) { 3 }
89
+ let(:encryptor) { Chef::EncryptedDataBagItem::Encryptor::Version3Encryptor }
90
+ end
91
+ end
92
+
93
+ end
94
+
95
+ end
@@ -97,7 +97,7 @@ describe Chef::EncryptedDataBagItem::Encryptor do
97
97
  Chef::Config[:data_bag_encrypt_version] = 3
98
98
  end
99
99
 
100
- context "on supported platforms", :ruby_gte_20_and_openssl_gte_101 do
100
+ context "on supported platforms", :aes_256_gcm_only, :ruby_20_only do
101
101
 
102
102
  it "creates a version 3 encryptor" do
103
103
  encryptor.should be_a_instance_of(Chef::EncryptedDataBagItem::Encryptor::Version3Encryptor)
@@ -168,10 +168,21 @@ describe Chef::EncryptedDataBagItem::Decryptor do
168
168
  let(:plaintext_data) { {"foo" => "bar"} }
169
169
  let(:encryption_key) { "passwd" }
170
170
  let(:decryption_key) { encryption_key }
171
+ let(:json_wrapped_data) { Chef::JSONCompat.to_json({"json_wrapper" => plaintext_data}) }
172
+
173
+ shared_examples "decryption examples" do
174
+ it "decrypts the encrypted value" do
175
+ decryptor.decrypted_data.should eq(json_wrapped_data)
176
+ end
177
+
178
+ it "unwraps the encrypted data and returns it" do
179
+ decryptor.for_decrypted_item.should eq plaintext_data
180
+ end
181
+ end
171
182
 
172
183
  context "when decrypting a version 3 (JSON+aes-256-gcm+random iv+auth tag) encrypted value" do
173
184
 
174
- context "on supported platforms", :ruby_gte_20_and_openssl_gte_101 do
185
+ context "on supported platforms", :aes_256_gcm_only, :ruby_20_only do
175
186
 
176
187
  let(:encrypted_value) do
177
188
  Chef::EncryptedDataBagItem::Encryptor::Version3Encryptor.new(plaintext_data, encryption_key).for_encrypted_item
@@ -179,13 +190,7 @@ describe Chef::EncryptedDataBagItem::Decryptor do
179
190
 
180
191
  let(:bogus_auth_tag) { "bogus_auth_tag" }
181
192
 
182
- it "decrypts the encrypted value" do
183
- decryptor.decrypted_data.should eq({"json_wrapper" => plaintext_data}.to_json)
184
- end
185
-
186
- it "unwraps the encrypted data and returns it" do
187
- decryptor.for_decrypted_item.should eq plaintext_data
188
- end
193
+ include_examples "decryption examples"
189
194
 
190
195
  it "rejects the data if the authentication tag is wrong" do
191
196
  encrypted_value["auth_tag"] = bogus_auth_tag
@@ -240,13 +245,7 @@ describe Chef::EncryptedDataBagItem::Decryptor do
240
245
  Base64.encode64(raw_hmac)
241
246
  end
242
247
 
243
- it "decrypts the encrypted value" do
244
- decryptor.decrypted_data.should eq({"json_wrapper" => plaintext_data}.to_json)
245
- end
246
-
247
- it "unwraps the encrypted data and returns it" do
248
- decryptor.for_decrypted_item.should eq plaintext_data
249
- end
248
+ include_examples "decryption examples"
250
249
 
251
250
  it "rejects the data if the hmac is wrong" do
252
251
  encrypted_value["hmac"] = bogus_hmac
@@ -270,13 +269,7 @@ describe Chef::EncryptedDataBagItem::Decryptor do
270
269
  decryptor.should be_a_instance_of Chef::EncryptedDataBagItem::Decryptor::Version1Decryptor
271
270
  end
272
271
 
273
- it "decrypts the encrypted value" do
274
- decryptor.decrypted_data.should eq({"json_wrapper" => plaintext_data}.to_json)
275
- end
276
-
277
- it "unwraps the encrypted data and returns it" do
278
- decryptor.for_decrypted_item.should eq plaintext_data
279
- end
272
+ include_examples "decryption examples"
280
273
 
281
274
  describe "and the decryption step returns invalid data" do
282
275
  it "raises a decryption failure error" do
@@ -196,7 +196,7 @@ describe Chef::Environment do
196
196
 
197
197
  %w{name description cookbook_versions}.each do |t|
198
198
  it "should include '#{t}'" do
199
- @json.should =~ /"#{t}":#{Regexp.escape(@environment.send(t.to_sym).to_json)}/
199
+ @json.should =~ /"#{t}":#{Regexp.escape(Chef::JSONCompat.to_json(@environment.send(t.to_sym)))}/
200
200
  end
201
201
  end
202
202
 
@@ -207,6 +207,10 @@ describe Chef::Environment do
207
207
  it "should include 'chef_type'" do
208
208
  @json.should =~ /"chef_type":"environment"/
209
209
  end
210
+
211
+ include_examples "to_json equalivent to Chef::JSONCompat.to_json" do
212
+ let(:jsonable) { @environment }
213
+ end
210
214
  end
211
215
 
212
216
  describe "from_json" do
@@ -222,7 +226,7 @@ describe Chef::Environment do
222
226
  "json_class" => "Chef::Environment",
223
227
  "chef_type" => "environment"
224
228
  }
225
- @environment = Chef::JSONCompat.from_json(@data.to_json)
229
+ @environment = Chef::JSONCompat.from_json(Chef::JSONCompat.to_json(@data))
226
230
  end
227
231
 
228
232
  it "should return a Chef::Environment" do
@@ -74,5 +74,11 @@ describe Chef::Exceptions do
74
74
  it "should have an exception class of #{exception} which inherits from #{expected_super_class}" do
75
75
  lambda{ raise exception }.should raise_error(expected_super_class)
76
76
  end
77
+
78
+ if exception.methods.include?(:to_json)
79
+ include_examples "to_json equalivent to Chef::JSONCompat.to_json" do
80
+ let(:jsonable) { exception }
81
+ end
82
+ end
77
83
  end
78
84
  end
@@ -19,37 +19,38 @@
19
19
  require 'spec_helper'
20
20
 
21
21
  describe Chef::GuardInterpreter::ResourceGuardInterpreter do
22
- before(:each) do
22
+ let(:node) do
23
23
  node = Chef::Node.new
24
24
 
25
25
  node.default["kernel"] = Hash.new
26
26
  node.default["kernel"][:machine] = :x86_64.to_s
27
+ node
28
+ end
27
29
 
28
- run_context = Chef::RunContext.new(node, nil, nil)
30
+ let(:run_context) { Chef::RunContext.new(node, nil, nil) }
29
31
 
30
- @resource = Chef::Resource.new("powershell_unit_test", run_context)
31
- @resource.stub(:run_action)
32
- @resource.stub(:updated).and_return(true)
32
+ let(:resource) do
33
+ resource = Chef::Resource.new("powershell_unit_test", run_context)
34
+ resource.stub(:run_action)
35
+ resource.stub(:updated).and_return(true)
36
+ resource
33
37
  end
34
38
 
35
- describe "when evaluating a guard resource" do
36
- let(:resource) { @resource }
37
39
 
38
- it "should allow guard interpreter to be set to Chef::Resource::Script" do
40
+ describe "get_interpreter_resource" do
41
+ it "allows the guard interpreter to be set to Chef::Resource::Script" do
39
42
  resource.guard_interpreter(:script)
40
- allow_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:evaluate_action).and_return(false)
41
- resource.only_if("echo hi")
43
+ expect { Chef::GuardInterpreter::ResourceGuardInterpreter.new(resource, "echo hi", nil) }.not_to raise_error
42
44
  end
43
45
 
44
- it "should allow guard interpreter to be set to Chef::Resource::PowershellScript derived indirectly from Chef::Resource::Script" do
46
+ it "allows the guard interpreter to be set to Chef::Resource::PowershellScript derived indirectly from Chef::Resource::Script" do
45
47
  resource.guard_interpreter(:powershell_script)
46
- allow_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:evaluate_action).and_return(false)
47
- resource.only_if("echo hi")
48
+ expect { Chef::GuardInterpreter::ResourceGuardInterpreter.new(resource, "echo hi", nil) }.not_to raise_error
48
49
  end
49
50
 
50
- it "should raise an exception if guard_interpreter is set to a resource not derived from Chef::Resource::Script" do
51
+ it "raises an exception if guard_interpreter is set to a resource not derived from Chef::Resource::Script" do
51
52
  resource.guard_interpreter(:file)
52
- expect { resource.only_if("echo hi") }.to raise_error ArgumentError
53
+ expect { Chef::GuardInterpreter::ResourceGuardInterpreter.new(resource, "echo hi", nil) }.to raise_error(ArgumentError)
53
54
  end
54
55
  end
55
56
  end
@@ -58,13 +58,17 @@ describe Chef::JSONCompat do
58
58
  describe "when pretty printing an object that defines #to_json" do
59
59
  class Foo
60
60
  def to_json(*a)
61
- {'foo' => 1234}.to_json(*a)
61
+ Chef::JSONCompat.to_json({'foo' => 1234, 'bar' => {'baz' => 5678}}, *a)
62
62
  end
63
63
  end
64
64
 
65
65
  it "should work" do
66
66
  f = Foo.new
67
- expect(Chef::JSONCompat.to_json_pretty(f)).to eql("{\n \"foo\": 1234\n}\n")
67
+ expect(Chef::JSONCompat.to_json_pretty(f)).to eql("{\n \"foo\": 1234,\n \"bar\": {\n \"baz\": 5678\n }\n}\n")
68
+ end
69
+
70
+ include_examples "to_json equalivent to Chef::JSONCompat.to_json" do
71
+ let(:jsonable) { Foo.new }
68
72
  end
69
73
  end
70
74
 
@@ -97,4 +101,10 @@ describe Chef::JSONCompat do
97
101
  end
98
102
  end
99
103
  end
104
+
105
+ it "should define .to_json on all classes" do
106
+ class SomeClass; end
107
+
108
+ expect(SomeClass.new.respond_to?(:to_json)).to eq(true)
109
+ end
100
110
  end
@@ -22,6 +22,9 @@ Chef::Knife::Bootstrap.load_deps
22
22
  require 'net/ssh'
23
23
 
24
24
  describe Chef::Knife::Bootstrap do
25
+ before do
26
+ Chef::Platform.stub(:windows?) { false }
27
+ end
25
28
  let(:knife) do
26
29
  Chef::Log.logger = Logger.new(StringIO.new)
27
30
  Chef::Config[:knife][:bootstrap_template] = bootstrap_template unless bootstrap_template.nil?
@@ -30,6 +33,7 @@ describe Chef::Knife::Bootstrap do
30
33
  k.merge_configs
31
34
 
32
35
  k.ui.stub(:stderr).and_return(stderr)
36
+ allow(k).to receive(:encryption_secret_provided_ignore_encrypt_flag?).and_return(false)
33
37
  k
34
38
  end
35
39
 
@@ -221,10 +225,6 @@ describe Chef::Knife::Bootstrap do
221
225
  k
222
226
  end
223
227
 
224
- # Include a data bag secret in the options to prevent Bootstrap from
225
- # attempting to access /etc/chef/encrypted_data_bag_secret, which
226
- # can fail when the file exists but can't be accessed by the user
227
- # running the tests.
228
228
  let(:options){ ["--bootstrap-no-proxy", setting, "-s", "foo"] }
229
229
  let(:template_file) { File.expand_path(File.join(CHEF_SPEC_DATA, "bootstrap", "no_proxy.erb")) }
230
230
  let(:rendered_template) do
@@ -290,7 +290,6 @@ describe Chef::Knife::Bootstrap do
290
290
 
291
291
  describe "specifying the encrypted data bag secret key" do
292
292
  let(:secret) { "supersekret" }
293
- let(:secret_file) { File.join(CHEF_SPEC_DATA, 'bootstrap', 'encrypted_data_bag_secret') }
294
293
  let(:options) { [] }
295
294
  let(:bootstrap_template) { File.expand_path(File.join(CHEF_SPEC_DATA, "bootstrap", "secret.erb")) }
296
295
  let(:rendered_template) do
@@ -299,64 +298,22 @@ describe Chef::Knife::Bootstrap do
299
298
  knife.render_template
300
299
  end
301
300
 
302
- context "via --secret" do
303
- let(:options){ ["--secret", secret] }
304
-
305
- it "creates a secret file" do
306
- rendered_template.should match(%r{#{secret}})
307
- end
308
-
309
- it "renders the client.rb with an encrypted_data_bag_secret entry" do
310
- rendered_template.should match(%r{encrypted_data_bag_secret\s*"/etc/chef/encrypted_data_bag_secret"})
311
- end
301
+ it "creates a secret file" do
302
+ expect(knife).to receive(:encryption_secret_provided_ignore_encrypt_flag?).and_return(true)
303
+ expect(knife).to receive(:read_secret).and_return(secret)
304
+ rendered_template.should match(%r{#{secret}})
312
305
  end
313
306
 
314
- context "via --secret-file" do
315
- let(:options) { ["--secret-file", secret_file] }
316
- let(:secret) { IO.read(secret_file) }
317
-
318
- it "creates a secret file" do
319
- rendered_template.should match(%r{#{secret}})
320
- end
321
-
322
- it "renders the client.rb with an encrypted_data_bag_secret entry" do
323
- rendered_template.should match(%r{encrypted_data_bag_secret\s*"/etc/chef/encrypted_data_bag_secret"})
324
- end
325
- end
326
-
327
- context "secret via config" do
328
- before do
329
- Chef::Config[:knife][:secret] = secret
330
- end
331
-
332
- it "creates a secret file" do
333
- rendered_template.should match(%r{#{secret}})
334
- end
335
-
336
- it "renders the client.rb with an encrypted_data_bag_secret entry" do
337
- rendered_template.should match(%r{encrypted_data_bag_secret\s*"/etc/chef/encrypted_data_bag_secret"})
338
- end
307
+ it "renders the client.rb with an encrypted_data_bag_secret entry" do
308
+ expect(knife).to receive(:encryption_secret_provided_ignore_encrypt_flag?).and_return(true)
309
+ expect(knife).to receive(:read_secret).and_return(secret)
310
+ rendered_template.should match(%r{encrypted_data_bag_secret\s*"/etc/chef/encrypted_data_bag_secret"})
339
311
  end
340
312
 
341
- context "secret-file via config" do
342
- let(:secret) { IO.read(secret_file) }
343
-
344
- before do
345
- Chef::Config[:knife][:secret_file] = secret_file
346
- end
347
-
348
- it "creates a secret file" do
349
- rendered_template.should match(%r{#{secret}})
350
- end
351
-
352
- it "renders the client.rb with an encrypted_data_bag_secret entry" do
353
- rendered_template.should match(%r{encrypted_data_bag_secret\s*"/etc/chef/encrypted_data_bag_secret"})
354
- end
355
- end
356
313
  end
357
314
 
358
315
  describe "when transferring trusted certificates" do
359
- let(:trusted_certs_dir) { File.join(CHEF_SPEC_DATA, 'trusted_certs') }
316
+ let(:trusted_certs_dir) { Chef::Util::PathHelper.cleanpath(File.join(File.dirname(__FILE__), '../../data/trusted_certs')) }
360
317
 
361
318
  let(:rendered_template) do
362
319
  knife.merge_configs
@@ -366,7 +323,7 @@ describe Chef::Knife::Bootstrap do
366
323
  before do
367
324
  Chef::Config[:trusted_certs_dir] = trusted_certs_dir
368
325
  IO.stub(:read).and_call_original
369
- IO.stub(:read).with("/etc/chef/validation.pem").and_return("")
326
+ IO.stub(:read).with(File.expand_path(Chef::Config[:validation_key])).and_return("")
370
327
  end
371
328
 
372
329
  def certificates
@@ -461,12 +418,6 @@ describe Chef::Knife::Bootstrap do
461
418
  context "from the knife config file" do
462
419
  let(:knife_ssh) do
463
420
  knife.name_args = ["config.example.com"]
464
- knife.config[:ssh_user] = nil
465
- knife.config[:ssh_port] = nil
466
- knife.config[:ssh_gateway] = nil
467
- knife.config[:forward_agent] = nil
468
- knife.config[:identity_file] = nil
469
- knife.config[:host_key_verify] = nil
470
421
  Chef::Config[:knife][:ssh_user] = "curiosity"
471
422
  Chef::Config[:knife][:ssh_port] = "2430"
472
423
  Chef::Config[:knife][:forward_agent] = true
@@ -474,6 +425,8 @@ describe Chef::Knife::Bootstrap do
474
425
  Chef::Config[:knife][:ssh_gateway] = "towel.blinkenlights.nl"
475
426
  Chef::Config[:knife][:host_key_verify] = true
476
427
  knife.stub(:render_template).and_return("")
428
+ knife.config = {}
429
+ knife.merge_configs
477
430
  knife.knife_ssh
478
431
  end
479
432
 
@@ -25,6 +25,8 @@ describe Chef::Knife::CookbookSiteShare do
25
25
 
26
26
  before(:each) do
27
27
  @knife = Chef::Knife::CookbookSiteShare.new
28
+ # Merge default settings in.
29
+ @knife.merge_configs
28
30
  @knife.name_args = ['cookbook_name', 'AwesomeSausage']
29
31
 
30
32
  @cookbook = Chef::CookbookVersion.new('cookbook_name')
@@ -34,6 +36,9 @@ describe Chef::Knife::CookbookSiteShare do
34
36
  @cookbook_loader.stub(:[]).and_return(@cookbook)
35
37
  Chef::CookbookLoader.stub(:new).and_return(@cookbook_loader)
36
38
 
39
+ @noauth_rest = double(Chef::REST)
40
+ @knife.stub(:noauth_rest).and_return(@noauth_rest)
41
+
37
42
  @cookbook_uploader = Chef::CookbookUploader.new('herpderp', :rest => "norest")
38
43
  Chef::CookbookUploader.stub(:new).and_return(@cookbook_uploader)
39
44
  @cookbook_uploader.stub(:validate_cookbooks).and_return(true)
@@ -48,6 +53,20 @@ describe Chef::Knife::CookbookSiteShare do
48
53
 
49
54
  before(:each) do
50
55
  @knife.stub(:do_upload).and_return(true)
56
+ @category_response = {
57
+ "name" => "cookbook_name",
58
+ "category" => "Testing Category"
59
+ }
60
+ @bad_category_response = {
61
+ "error_code" => "NOT_FOUND",
62
+ "error_messages" => [
63
+ "Resource does not exist."
64
+ ]
65
+ }
66
+ end
67
+
68
+ it 'should set true to config[:dry_run] as default' do
69
+ @knife.config[:dry_run].should be_false
51
70
  end
52
71
 
53
72
  it 'should should print usage and exit when given no arguments' do
@@ -57,9 +76,23 @@ describe Chef::Knife::CookbookSiteShare do
57
76
  lambda { @knife.run }.should raise_error(SystemExit)
58
77
  end
59
78
 
60
- it 'should print usage and exit when given only 1 argument' do
79
+ it 'should not fail when given only 1 argument and can determine category' do
61
80
  @knife.name_args = ['cookbook_name']
62
- @knife.should_receive(:show_usage)
81
+ @noauth_rest.should_receive(:get_rest).with("http://cookbooks.opscode.com/api/v1/cookbooks/cookbook_name").and_return(@category_response)
82
+ @knife.should_receive(:do_upload)
83
+ @knife.run
84
+ end
85
+
86
+ it 'should print error and exit when given only 1 argument and cannot determine category' do
87
+ @knife.name_args = ['cookbook_name']
88
+ @noauth_rest.should_receive(:get_rest).with("http://cookbooks.opscode.com/api/v1/cookbooks/cookbook_name").and_return(@bad_category_response)
89
+ @knife.ui.should_receive(:fatal)
90
+ lambda { @knife.run }.should raise_error(SystemExit)
91
+ end
92
+
93
+ it 'should print error and exit when given only 1 argument and Chef::REST throws an exception' do
94
+ @knife.name_args = ['cookbook_name']
95
+ @noauth_rest.should_receive(:get_rest).with("http://cookbooks.opscode.com/api/v1/cookbooks/cookbook_name") { raise Errno::ECONNREFUSED, "Connection refused" }
63
96
  @knife.ui.should_receive(:fatal)
64
97
  lambda { @knife.run }.should raise_error(SystemExit)
65
98
  end
@@ -93,6 +126,26 @@ describe Chef::Knife::CookbookSiteShare do
93
126
  FileUtils.should_receive(:rm_rf)
94
127
  @knife.run
95
128
  end
129
+
130
+ context "when the --dry-run flag is specified" do
131
+ before do
132
+ Chef::CookbookSiteStreamingUploader.stub(:create_build_dir).and_return("/var/tmp/dummy")
133
+ @knife.config = { :dry_run => true }
134
+ @knife.stub_chain(:shell_out!, :stdout).and_return('file')
135
+ end
136
+
137
+ it "should list files in the tarball" do
138
+ expect(@knife).to receive(:shell_out!).with("tar -czf #{@cookbook.name}.tgz #{@cookbook.name}", {:cwd => "/var/tmp/dummy"})
139
+ expect(@knife).to receive(:shell_out!).with("tar -tzf #{@cookbook.name}.tgz", {:cwd => "/var/tmp/dummy"})
140
+ @knife.run
141
+ end
142
+
143
+ it "does not upload the cookbook" do
144
+ allow(@knife).to receive(:shell_out!).and_return(true)
145
+ expect(@knife).not_to receive(:do_upload)
146
+ @knife.run
147
+ end
148
+ end
96
149
  end
97
150
 
98
151
  describe 'do_upload' do
@@ -109,7 +162,7 @@ describe Chef::Knife::CookbookSiteShare do
109
162
  end
110
163
 
111
164
  it 'should post the cookbook to "https://supermarket.getchef.com"' do
112
- response_text = {:uri => 'https://supermarket.getchef.com/cookbooks/cookbook_name'}.to_json
165
+ response_text = Chef::JSONCompat.to_json({:uri => 'https://supermarket.getchef.com/cookbooks/cookbook_name'})
113
166
  @upload_response.stub(:body).and_return(response_text)
114
167
  @upload_response.stub(:code).and_return(201)
115
168
  Chef::CookbookSiteStreamingUploader.should_receive(:post).with(/supermarket\.getchef\.com/, anything(), anything(), anything())
@@ -117,7 +170,7 @@ describe Chef::Knife::CookbookSiteShare do
117
170
  end
118
171
 
119
172
  it 'should alert the user when a version already exists' do
120
- response_text = {:error_messages => ['Version already exists']}.to_json
173
+ response_text = Chef::JSONCompat.to_json({:error_messages => ['Version already exists']})
121
174
  @upload_response.stub(:body).and_return(response_text)
122
175
  @upload_response.stub(:code).and_return(409)
123
176
  lambda { @knife.run }.should raise_error(SystemExit)
@@ -125,7 +178,7 @@ describe Chef::Knife::CookbookSiteShare do
125
178
  end
126
179
 
127
180
  it 'should pass any errors on to the user' do
128
- response_text = {:error_messages => ["You're holding it wrong"]}.to_json
181
+ response_text = Chef::JSONCompat.to_json({:error_messages => ["You're holding it wrong"]})
129
182
  @upload_response.stub(:body).and_return(response_text)
130
183
  @upload_response.stub(:code).and_return(403)
131
184
  lambda { @knife.run }.should raise_error(SystemExit)
@@ -133,7 +186,7 @@ describe Chef::Knife::CookbookSiteShare do
133
186
  end
134
187
 
135
188
  it 'should print the body if no errors are exposed on failure' do
136
- response_text = {:system_error => "Your call was dropped", :reason => "There's a map for that"}.to_json
189
+ response_text = Chef::JSONCompat.to_json({:system_error => "Your call was dropped", :reason => "There's a map for that"})
137
190
  @upload_response.stub(:body).and_return(response_text)
138
191
  @upload_response.stub(:code).and_return(500)
139
192
  @knife.ui.should_receive(:error).with(/#{Regexp.escape(response_text)}/)#.ordered