chef 12.0.3-x86-mingw32 → 12.1.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 (653) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +4 -1
  3. data/README.md +42 -18
  4. data/distro/common/html/_sources/ctl_chef_client.txt +1 -1
  5. data/distro/common/html/_sources/ctl_chef_server.txt +53 -35
  6. data/distro/common/html/_sources/ctl_chef_solo.txt +1 -1
  7. data/distro/common/html/_sources/knife_bootstrap.txt +1 -1
  8. data/distro/common/html/_sources/knife_cookbook_site.txt +1 -1
  9. data/distro/common/html/_sources/knife_data_bag.txt +4 -4
  10. data/distro/common/html/_sources/knife_status.txt +1 -1
  11. data/distro/common/html/_static/searchtools.js +1 -1
  12. data/distro/common/html/ctl_chef_client.html +55 -7
  13. data/distro/common/html/ctl_chef_server.html +84 -41
  14. data/distro/common/html/ctl_chef_shell.html +45 -1
  15. data/distro/common/html/ctl_chef_solo.html +51 -5
  16. data/distro/common/html/index.html +2 -2
  17. data/distro/common/html/knife.html +1 -1
  18. data/distro/common/html/knife_bootstrap.html +30 -10
  19. data/distro/common/html/knife_cookbook_site.html +2 -0
  20. data/distro/common/html/knife_data_bag.html +4 -4
  21. data/distro/common/html/knife_node.html +2 -2
  22. data/distro/common/html/knife_raw.html +1 -1
  23. data/distro/common/html/knife_role.html +1 -1
  24. data/distro/common/html/knife_search.html +3 -3
  25. data/distro/common/html/knife_status.html +4 -0
  26. data/distro/common/html/searchindex.js +1 -1
  27. data/distro/common/man/man1/chef-shell.1 +72 -1
  28. data/distro/common/man/man1/knife-bootstrap.1 +71 -63
  29. data/distro/common/man/man1/knife-client.1 +1 -1
  30. data/distro/common/man/man1/knife-configure.1 +1 -1
  31. data/distro/common/man/man1/knife-cookbook-site.1 +4 -1
  32. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  33. data/distro/common/man/man1/knife-data-bag.1 +5 -5
  34. data/distro/common/man/man1/knife-delete.1 +1 -1
  35. data/distro/common/man/man1/knife-deps.1 +1 -1
  36. data/distro/common/man/man1/knife-diff.1 +1 -1
  37. data/distro/common/man/man1/knife-download.1 +1 -1
  38. data/distro/common/man/man1/knife-edit.1 +1 -1
  39. data/distro/common/man/man1/knife-environment.1 +1 -1
  40. data/distro/common/man/man1/knife-exec.1 +1 -1
  41. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  42. data/distro/common/man/man1/knife-list.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +3 -3
  44. data/distro/common/man/man1/knife-raw.1 +2 -2
  45. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  46. data/distro/common/man/man1/knife-role.1 +2 -2
  47. data/distro/common/man/man1/knife-search.1 +4 -4
  48. data/distro/common/man/man1/knife-serve.1 +1 -1
  49. data/distro/common/man/man1/knife-show.1 +1 -1
  50. data/distro/common/man/man1/knife-ssh.1 +1 -1
  51. data/distro/common/man/man1/knife-ssl-check.1 +1 -1
  52. data/distro/common/man/man1/knife-ssl-fetch.1 +1 -1
  53. data/distro/common/man/man1/knife-status.1 +1 -1
  54. data/distro/common/man/man1/knife-tag.1 +1 -1
  55. data/distro/common/man/man1/knife-upload.1 +1 -1
  56. data/distro/common/man/man1/knife-user.1 +1 -1
  57. data/distro/common/man/man1/knife-xargs.1 +1 -1
  58. data/distro/common/man/man1/knife.1 +1 -1
  59. data/distro/common/man/man8/chef-apply.8 +86 -0
  60. data/distro/common/man/man8/chef-client.8 +76 -5
  61. data/distro/common/man/man8/chef-solo.8 +79 -6
  62. data/distro/common/markdown/man1/knife-bootstrap.mkd +1 -1
  63. data/distro/common/markdown/man1/knife-cookbook-site.mkd +1 -1
  64. data/distro/common/markdown/man1/knife-data-bag.mkd +1 -1
  65. data/distro/common/markdown/man1/knife-environment.mkd +1 -1
  66. data/distro/common/markdown/man1/knife.mkd +1 -1
  67. data/lib/chef.rb +0 -7
  68. data/lib/chef/api_client.rb +10 -2
  69. data/lib/chef/api_client/registration.rb +7 -9
  70. data/lib/chef/application.rb +28 -12
  71. data/lib/chef/application/apply.rb +17 -1
  72. data/lib/chef/application/client.rb +74 -6
  73. data/lib/chef/application/knife.rb +1 -2
  74. data/lib/chef/application/solo.rb +30 -0
  75. data/lib/chef/application/windows_service.rb +1 -0
  76. data/lib/chef/application/windows_service_manager.rb +8 -2
  77. data/lib/chef/applications.rb +0 -1
  78. data/lib/chef/audit/audit_event_proxy.rb +93 -0
  79. data/lib/chef/audit/audit_reporter.rb +169 -0
  80. data/lib/chef/audit/control_group_data.rb +140 -0
  81. data/lib/chef/audit/rspec_formatter.rb +37 -0
  82. data/lib/chef/audit/runner.rb +178 -0
  83. data/lib/chef/chef_fs/chef_fs_data_store.rb +11 -2
  84. data/lib/chef/chef_fs/config.rb +25 -4
  85. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +15 -0
  86. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -0
  87. data/lib/chef/chef_fs/file_system.rb +1 -1
  88. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +5 -0
  89. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +3 -2
  90. data/lib/chef/{shef/ext.rb → chef_fs/file_system/chef_repository_file_system_policies_dir.rb} +22 -3
  91. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +4 -0
  92. data/lib/chef/client.rb +81 -52
  93. data/lib/chef/config.rb +35 -3
  94. data/lib/chef/cookbook/metadata.rb +3 -3
  95. data/lib/chef/cookbook_manifest.rb +275 -0
  96. data/lib/chef/cookbook_site_streaming_uploader.rb +24 -23
  97. data/lib/chef/cookbook_uploader.rb +11 -2
  98. data/lib/chef/cookbook_version.rb +71 -194
  99. data/lib/chef/data_bag.rb +5 -2
  100. data/lib/chef/data_bag_item.rb +6 -3
  101. data/lib/chef/deprecation/warnings.rb +5 -4
  102. data/lib/chef/dsl/audit.rb +51 -0
  103. data/lib/chef/dsl/include_recipe.rb +2 -3
  104. data/lib/chef/dsl/reboot_pending.rb +1 -1
  105. data/lib/chef/dsl/recipe.rb +49 -31
  106. data/lib/chef/encrypted_data_bag_item/assertions.rb +0 -3
  107. data/lib/chef/environment.rb +5 -2
  108. data/lib/chef/event_dispatch/base.rb +36 -1
  109. data/lib/chef/event_dispatch/dispatcher.rb +3 -5
  110. data/lib/chef/exceptions.rb +61 -2
  111. data/lib/chef/file_access_control/unix.rb +12 -0
  112. data/lib/chef/file_access_control/windows.rb +14 -0
  113. data/lib/chef/formatters/doc.rb +47 -1
  114. data/{spec/unit/monkey_patches/string_spec.rb → lib/chef/guard_interpreter.rb} +11 -16
  115. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -2
  116. data/lib/chef/http.rb +1 -2
  117. data/lib/chef/knife.rb +5 -3
  118. data/lib/chef/knife/bootstrap.rb +84 -15
  119. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +165 -0
  120. data/lib/chef/knife/bootstrap/client_builder.rb +190 -0
  121. data/lib/chef/knife/bootstrap/{README.md → templates/README.md} +0 -0
  122. data/lib/chef/knife/bootstrap/{archlinux-gems.erb → templates/archlinux-gems.erb} +9 -0
  123. data/lib/chef/knife/bootstrap/{chef-aix.erb → templates/chef-aix.erb} +9 -0
  124. data/lib/chef/knife/bootstrap/{chef-full.erb → templates/chef-full.erb} +10 -1
  125. data/lib/chef/knife/client_create.rb +8 -7
  126. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  127. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  128. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  129. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  130. data/lib/chef/knife/cookbook_site_share.rb +39 -28
  131. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  132. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  133. data/lib/chef/knife/cookbook_test.rb +1 -0
  134. data/lib/chef/knife/cookbook_upload.rb +13 -8
  135. data/lib/chef/knife/core/bootstrap_context.rb +14 -3
  136. data/lib/chef/knife/core/generic_presenter.rb +5 -2
  137. data/lib/chef/knife/core/object_loader.rb +1 -1
  138. data/lib/chef/knife/core/subcommand_loader.rb +24 -0
  139. data/lib/chef/knife/core/ui.rb +9 -1
  140. data/lib/chef/knife/node_run_list_remove.rb +11 -3
  141. data/lib/chef/knife/raw.rb +14 -3
  142. data/lib/chef/knife/role_env_run_list_add.rb +86 -0
  143. data/lib/chef/knife/role_env_run_list_clear.rb +55 -0
  144. data/lib/chef/knife/role_env_run_list_remove.rb +57 -0
  145. data/lib/chef/knife/role_env_run_list_replace.rb +59 -0
  146. data/lib/chef/knife/role_env_run_list_set.rb +70 -0
  147. data/lib/chef/knife/role_run_list_add.rb +86 -0
  148. data/lib/chef/knife/role_run_list_clear.rb +55 -0
  149. data/lib/chef/knife/role_run_list_remove.rb +57 -0
  150. data/lib/chef/knife/role_run_list_replace.rb +59 -0
  151. data/lib/chef/knife/role_run_list_set.rb +70 -0
  152. data/lib/chef/knife/search.rb +4 -4
  153. data/lib/chef/knife/serve.rb +3 -0
  154. data/lib/chef/knife/ssh.rb +1 -1
  155. data/lib/chef/knife/ssl_check.rb +2 -2
  156. data/lib/chef/knife/ssl_fetch.rb +14 -1
  157. data/lib/chef/log.rb +10 -1
  158. data/lib/chef/mixin/command.rb +1 -1
  159. data/lib/chef/mixin/command/windows.rb +1 -5
  160. data/lib/chef/mixin/get_source_from_package.rb +1 -0
  161. data/lib/chef/mixin/params_validate.rb +2 -2
  162. data/lib/chef/mixin/securable.rb +1 -7
  163. data/lib/chef/mixin/shell_out.rb +7 -1
  164. data/lib/chef/mixin/template.rb +2 -14
  165. data/lib/chef/mixin/why_run.rb +1 -1
  166. data/lib/chef/monkey_patches/net_http.rb +4 -0
  167. data/lib/chef/monologger.rb +0 -2
  168. data/lib/chef/node.rb +5 -2
  169. data/lib/chef/node/attribute.rb +11 -9
  170. data/lib/chef/node/attribute_collections.rb +8 -12
  171. data/lib/chef/node/immutable_collections.rb +4 -10
  172. data/lib/chef/org.rb +148 -0
  173. data/lib/chef/platform/provider_mapping.rb +3 -2
  174. data/lib/chef/platform/provider_priority_map.rb +2 -0
  175. data/lib/chef/platform/query_helpers.rb +0 -3
  176. data/lib/chef/policy_builder/policyfile.rb +51 -8
  177. data/lib/chef/provider/deploy.rb +1 -2
  178. data/lib/chef/provider/directory.rb +3 -3
  179. data/lib/chef/provider/dsc_script.rb +13 -7
  180. data/lib/chef/provider/env.rb +8 -8
  181. data/lib/chef/provider/execute.rb +55 -36
  182. data/lib/chef/provider/file.rb +8 -0
  183. data/lib/chef/provider/group.rb +2 -0
  184. data/lib/chef/provider/group/dscl.rb +3 -4
  185. data/lib/chef/provider/ifconfig.rb +25 -25
  186. data/lib/chef/provider/ifconfig/aix.rb +25 -27
  187. data/lib/chef/provider/lwrp_base.rb +1 -1
  188. data/lib/chef/provider/mount.rb +2 -2
  189. data/lib/chef/provider/mount/mount.rb +3 -4
  190. data/lib/chef/provider/mount/solaris.rb +1 -1
  191. data/lib/chef/provider/package.rb +297 -48
  192. data/lib/chef/provider/package/aix.rb +25 -30
  193. data/lib/chef/provider/package/apt.rb +63 -19
  194. data/lib/chef/provider/package/dpkg.rb +15 -16
  195. data/lib/chef/provider/package/macports.rb +7 -7
  196. data/lib/chef/provider/package/openbsd.rb +107 -0
  197. data/lib/chef/provider/package/pacman.rb +13 -15
  198. data/lib/chef/provider/package/portage.rb +3 -4
  199. data/lib/chef/provider/package/rpm.rb +28 -17
  200. data/lib/chef/provider/package/rubygems.rb +9 -9
  201. data/lib/chef/provider/package/solaris.rb +17 -21
  202. data/lib/chef/provider/package/windows/msi.rb +1 -1
  203. data/lib/chef/provider/package/yum-dump.py +2 -2
  204. data/lib/chef/provider/package/yum.rb +117 -51
  205. data/lib/chef/provider/package/zypper.rb +17 -18
  206. data/lib/chef/provider/powershell_script.rb +4 -4
  207. data/lib/chef/provider/registry_key.rb +2 -2
  208. data/lib/chef/provider/remote_directory.rb +1 -1
  209. data/lib/chef/provider/script.rb +25 -16
  210. data/lib/chef/provider/service.rb +1 -1
  211. data/lib/chef/provider/service/freebsd.rb +1 -1
  212. data/lib/chef/provider/service/openbsd.rb +216 -0
  213. data/lib/chef/provider/service/upstart.rb +1 -1
  214. data/lib/chef/provider/service/windows.rb +99 -1
  215. data/lib/chef/provider/user.rb +1 -1
  216. data/lib/chef/provider/user/dscl.rb +19 -4
  217. data/lib/chef/providers.rb +2 -0
  218. data/lib/chef/recipe.rb +11 -5
  219. data/lib/chef/request_id.rb +1 -1
  220. data/lib/chef/resource.rb +839 -444
  221. data/lib/chef/resource/chef_gem.rb +20 -3
  222. data/lib/chef/resource/conditional.rb +3 -14
  223. data/lib/chef/resource/dsc_script.rb +14 -0
  224. data/lib/chef/resource/execute.rb +14 -7
  225. data/lib/chef/resource/file.rb +14 -0
  226. data/lib/chef/resource/file/verification.rb +122 -0
  227. data/lib/chef/resource/ips_package.rb +1 -1
  228. data/lib/chef/resource/lwrp_base.rb +2 -11
  229. data/lib/chef/resource/macports_package.rb +2 -1
  230. data/lib/chef/resource/openbsd_package.rb +51 -0
  231. data/lib/chef/resource/package.rb +2 -2
  232. data/lib/chef/resource/paludis_package.rb +1 -1
  233. data/lib/chef/resource/reboot.rb +1 -1
  234. data/lib/chef/resource/remote_file.rb +1 -0
  235. data/lib/chef/resource/rpm_package.rb +9 -0
  236. data/lib/chef/resource/script.rb +11 -0
  237. data/lib/chef/resource/template.rb +2 -3
  238. data/lib/chef/resource/windows_package.rb +1 -1
  239. data/lib/chef/resource/windows_service.rb +18 -0
  240. data/lib/chef/resource_builder.rb +137 -0
  241. data/lib/chef/resource_definition.rb +1 -1
  242. data/lib/chef/resource_reporter.rb +1 -1
  243. data/lib/chef/resources.rb +1 -0
  244. data/lib/chef/role.rb +17 -4
  245. data/lib/chef/run_context.rb +10 -6
  246. data/lib/chef/search/query.rb +66 -87
  247. data/lib/chef/shell/ext.rb +2 -2
  248. data/lib/chef/util/diff.rb +1 -4
  249. data/lib/chef/util/dsc/configuration_generator.rb +30 -6
  250. data/lib/chef/util/dsc/lcm_output_parser.rb +7 -3
  251. data/lib/chef/util/dsc/local_configuration_manager.rb +8 -8
  252. data/lib/chef/util/file_edit.rb +2 -2
  253. data/lib/chef/util/path_helper.rb +1 -4
  254. data/lib/chef/util/windows/net_use.rb +3 -3
  255. data/lib/chef/version.rb +1 -1
  256. data/lib/chef/win32/api.rb +1 -0
  257. data/lib/chef/win32/api/security.rb +26 -0
  258. data/lib/chef/win32/file.rb +21 -0
  259. data/lib/chef/win32/security.rb +46 -0
  260. data/lib/chef/win32/security/token.rb +8 -0
  261. data/lib/chef/win32/version.rb +0 -4
  262. data/spec/data/recipes.tgz +0 -0
  263. data/spec/functional/application_spec.rb +1 -1
  264. data/spec/functional/audit/rspec_formatter_spec.rb +54 -0
  265. data/spec/functional/audit/runner_spec.rb +137 -0
  266. data/spec/functional/dsl/reboot_pending_spec.rb +10 -10
  267. data/spec/functional/dsl/registry_helper_spec.rb +6 -6
  268. data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
  269. data/spec/functional/file_content_management/deploy_strategies_spec.rb +12 -21
  270. data/spec/functional/http/simple_spec.rb +1 -1
  271. data/spec/functional/knife/cookbook_delete_spec.rb +24 -24
  272. data/spec/functional/knife/exec_spec.rb +2 -4
  273. data/spec/functional/knife/smoke_test.rb +1 -1
  274. data/spec/functional/knife/ssh_spec.rb +23 -23
  275. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +8 -8
  276. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  277. data/spec/functional/rebooter_spec.rb +1 -1
  278. data/spec/functional/resource/aix_service_spec.rb +3 -0
  279. data/spec/functional/resource/aixinit_service_spec.rb +3 -3
  280. data/spec/functional/resource/bash_spec.rb +88 -0
  281. data/spec/functional/resource/deploy_revision_spec.rb +99 -100
  282. data/spec/functional/resource/env_spec.rb +3 -3
  283. data/spec/functional/resource/execute_spec.rb +97 -63
  284. data/spec/functional/resource/file_spec.rb +7 -7
  285. data/spec/functional/resource/git_spec.rb +13 -13
  286. data/spec/functional/resource/group_spec.rb +28 -25
  287. data/spec/functional/resource/ifconfig_spec.rb +2 -2
  288. data/spec/functional/resource/link_spec.rb +77 -78
  289. data/spec/functional/resource/mount_spec.rb +5 -5
  290. data/spec/functional/resource/ohai_spec.rb +1 -1
  291. data/spec/functional/resource/package_spec.rb +22 -22
  292. data/spec/functional/resource/powershell_spec.rb +57 -42
  293. data/spec/functional/resource/reboot_spec.rb +2 -2
  294. data/spec/functional/resource/registry_spec.rb +91 -91
  295. data/spec/functional/resource/remote_directory_spec.rb +19 -19
  296. data/spec/functional/resource/remote_file_spec.rb +18 -18
  297. data/spec/functional/resource/template_spec.rb +4 -4
  298. data/spec/functional/resource/user/dscl_spec.rb +4 -4
  299. data/spec/functional/resource/user/useradd_spec.rb +64 -51
  300. data/spec/functional/resource/windows_service_spec.rb +98 -0
  301. data/spec/functional/run_lock_spec.rb +9 -9
  302. data/spec/functional/shell_spec.rb +3 -3
  303. data/spec/functional/tiny_server_spec.rb +12 -12
  304. data/spec/functional/util/path_helper_spec.rb +1 -1
  305. data/spec/functional/version_spec.rb +1 -1
  306. data/spec/functional/win32/registry_helper_spec.rb +125 -125
  307. data/spec/functional/win32/security_spec.rb +65 -2
  308. data/spec/functional/win32/service_manager_spec.rb +30 -84
  309. data/spec/functional/win32/versions_spec.rb +6 -6
  310. data/spec/integration/client/client_spec.rb +102 -9
  311. data/spec/integration/knife/chef_fs_data_store_spec.rb +12 -8
  312. data/spec/integration/knife/common_options_spec.rb +3 -3
  313. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  314. data/spec/integration/knife/deps_spec.rb +4 -4
  315. data/spec/integration/knife/diff_spec.rb +6 -6
  316. data/spec/integration/knife/download_spec.rb +6 -6
  317. data/spec/integration/knife/list_spec.rb +2 -2
  318. data/spec/integration/knife/raw_spec.rb +5 -5
  319. data/spec/integration/knife/serve_spec.rb +3 -3
  320. data/spec/integration/knife/show_spec.rb +3 -3
  321. data/spec/integration/knife/upload_spec.rb +18 -18
  322. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  323. data/spec/integration/solo/solo_spec.rb +11 -12
  324. data/spec/spec_helper.rb +27 -15
  325. data/spec/stress/win32/file_spec.rb +4 -4
  326. data/spec/stress/win32/security_spec.rb +4 -4
  327. data/spec/support/chef_helpers.rb +3 -3
  328. data/spec/support/matchers/leak.rb +2 -2
  329. data/spec/support/mock/platform.rb +1 -1
  330. data/spec/support/pedant/Gemfile +3 -0
  331. data/spec/support/pedant/pedant_config.rb +9 -2
  332. data/spec/support/pedant/run_pedant.rb +15 -16
  333. data/spec/support/platform_helpers.rb +8 -12
  334. data/spec/support/shared/functional/directory_resource.rb +13 -13
  335. data/spec/support/shared/functional/file_resource.rb +83 -83
  336. data/spec/support/shared/functional/http.rb +1 -1
  337. data/spec/support/shared/functional/securable_resource.rb +64 -64
  338. data/spec/support/shared/functional/securable_resource_with_reporting.rb +43 -41
  339. data/spec/support/shared/functional/win32_service.rb +60 -0
  340. data/spec/support/shared/functional/windows_script.rb +8 -8
  341. data/spec/support/shared/integration/knife_support.rb +8 -5
  342. data/spec/support/shared/matchers/exit_with_code.rb +6 -2
  343. data/spec/support/shared/unit/api_error_inspector.rb +8 -8
  344. data/spec/support/shared/unit/execute_resource.rb +24 -20
  345. data/spec/support/shared/unit/file_system_support.rb +2 -2
  346. data/spec/support/shared/unit/platform_introspector.rb +21 -21
  347. data/spec/support/shared/unit/provider/file.rb +239 -210
  348. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +69 -69
  349. data/spec/support/shared/unit/script_resource.rb +40 -32
  350. data/spec/support/shared/unit/windows_script_resource.rb +8 -8
  351. data/spec/unit/api_client/registration_spec.rb +47 -47
  352. data/spec/unit/api_client_spec.rb +107 -69
  353. data/spec/unit/application/apply_spec.rb +31 -15
  354. data/spec/unit/application/client_spec.rb +146 -45
  355. data/spec/unit/application/knife_spec.rb +31 -31
  356. data/spec/unit/application/solo_spec.rb +59 -43
  357. data/spec/unit/application_spec.rb +109 -74
  358. data/spec/unit/audit/audit_event_proxy_spec.rb +311 -0
  359. data/spec/unit/audit/audit_reporter_spec.rb +393 -0
  360. data/spec/unit/audit/control_group_data_spec.rb +478 -0
  361. data/{lib/chef/monkey_patches/file.rb → spec/unit/audit/rspec_formatter_spec.rb} +11 -8
  362. data/spec/unit/audit/runner_spec.rb +135 -0
  363. data/spec/unit/chef_fs/config_spec.rb +52 -0
  364. data/spec/unit/chef_fs/diff_spec.rb +12 -12
  365. data/spec/unit/chef_fs/file_pattern_spec.rb +276 -277
  366. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +6 -6
  367. data/spec/unit/chef_fs/file_system_spec.rb +26 -13
  368. data/spec/unit/chef_fs/parallelizer.rb +87 -87
  369. data/spec/unit/chef_spec.rb +1 -1
  370. data/spec/unit/client_spec.rb +263 -97
  371. data/spec/unit/config_fetcher_spec.rb +13 -13
  372. data/spec/unit/config_spec.rb +105 -66
  373. data/spec/unit/cookbook/chefignore_spec.rb +6 -6
  374. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +3 -3
  375. data/spec/unit/cookbook/metadata_spec.rb +149 -149
  376. data/spec/unit/cookbook/syntax_check_spec.rb +36 -31
  377. data/spec/unit/cookbook_loader_spec.rb +62 -58
  378. data/spec/unit/cookbook_manifest_spec.rb +141 -468
  379. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +27 -27
  380. data/spec/unit/cookbook_spec.rb +15 -15
  381. data/spec/unit/cookbook_uploader_spec.rb +37 -3
  382. data/spec/unit/cookbook_version_file_specificity_spec.rb +554 -0
  383. data/spec/unit/cookbook_version_spec.rb +98 -240
  384. data/spec/unit/daemon_spec.rb +31 -31
  385. data/spec/unit/data_bag_item_spec.rb +121 -89
  386. data/spec/unit/data_bag_spec.rb +35 -35
  387. data/spec/unit/deprecation_spec.rb +27 -14
  388. data/spec/unit/digester_spec.rb +3 -3
  389. data/spec/unit/dsl/audit_spec.rb +43 -0
  390. data/spec/unit/dsl/data_query_spec.rb +1 -1
  391. data/spec/unit/dsl/platform_introspection_spec.rb +14 -14
  392. data/spec/unit/dsl/reboot_pending_spec.rb +18 -18
  393. data/spec/unit/dsl/regsitry_helper_spec.rb +6 -6
  394. data/spec/unit/encrypted_data_bag_item_spec.rb +58 -82
  395. data/spec/unit/environment_spec.rb +105 -105
  396. data/spec/unit/exceptions_spec.rb +47 -1
  397. data/spec/unit/file_access_control_spec.rb +62 -56
  398. data/spec/unit/file_cache_spec.rb +11 -11
  399. data/spec/unit/file_content_management/deploy/cp_spec.rb +2 -2
  400. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +10 -10
  401. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +23 -23
  402. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +14 -14
  403. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +12 -12
  404. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +1 -1
  405. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +16 -16
  406. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +4 -4
  407. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +103 -13
  408. data/spec/unit/guard_interpreter_spec.rb +41 -0
  409. data/spec/unit/handler/json_file_spec.rb +10 -10
  410. data/spec/unit/handler_spec.rb +39 -39
  411. data/spec/unit/http/basic_client_spec.rb +3 -3
  412. data/spec/unit/http/http_request_spec.rb +10 -10
  413. data/spec/unit/http/simple_spec.rb +3 -3
  414. data/spec/unit/http/ssl_policies_spec.rb +15 -15
  415. data/spec/unit/http/validate_content_length_spec.rb +18 -13
  416. data/spec/unit/http_spec.rb +16 -9
  417. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +153 -0
  418. data/spec/unit/knife/bootstrap/client_builder_spec.rb +178 -0
  419. data/spec/unit/knife/bootstrap_spec.rb +144 -91
  420. data/spec/unit/knife/client_bulk_delete_spec.rb +24 -24
  421. data/spec/unit/knife/client_create_spec.rb +57 -43
  422. data/spec/unit/knife/client_delete_spec.rb +15 -15
  423. data/spec/unit/knife/client_edit_spec.rb +4 -4
  424. data/spec/unit/knife/client_list_spec.rb +2 -2
  425. data/spec/unit/knife/client_reregister_spec.rb +9 -9
  426. data/spec/unit/knife/configure_client_spec.rb +20 -20
  427. data/spec/unit/knife/configure_spec.rb +85 -85
  428. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +15 -15
  429. data/spec/unit/knife/cookbook_create_spec.rb +59 -59
  430. data/spec/unit/knife/cookbook_delete_spec.rb +49 -49
  431. data/spec/unit/knife/cookbook_download_spec.rb +56 -56
  432. data/spec/unit/knife/cookbook_list_spec.rb +9 -9
  433. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +8 -8
  434. data/spec/unit/knife/cookbook_metadata_spec.rb +44 -44
  435. data/spec/unit/knife/cookbook_show_spec.rb +29 -29
  436. data/spec/unit/knife/cookbook_site_download_spec.rb +26 -26
  437. data/spec/unit/knife/cookbook_site_install_spec.rb +5 -1
  438. data/spec/unit/knife/cookbook_site_share_spec.rb +68 -59
  439. data/spec/unit/knife/cookbook_site_unshare_spec.rb +15 -15
  440. data/spec/unit/knife/cookbook_test_spec.rb +16 -16
  441. data/spec/unit/knife/cookbook_upload_spec.rb +105 -71
  442. data/spec/unit/knife/core/bootstrap_context_spec.rb +37 -22
  443. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +36 -36
  444. data/spec/unit/knife/core/object_loader_spec.rb +3 -3
  445. data/spec/unit/knife/core/subcommand_loader_spec.rb +107 -33
  446. data/spec/unit/knife/core/ui_spec.rb +84 -72
  447. data/spec/unit/knife/data_bag_from_file_spec.rb +1 -1
  448. data/spec/unit/knife/environment_compare_spec.rb +12 -12
  449. data/spec/unit/knife/environment_create_spec.rb +16 -16
  450. data/spec/unit/knife/environment_delete_spec.rb +14 -14
  451. data/spec/unit/knife/environment_edit_spec.rb +15 -15
  452. data/spec/unit/knife/environment_from_file_spec.rb +17 -17
  453. data/spec/unit/knife/environment_list_spec.rb +7 -7
  454. data/spec/unit/knife/environment_show_spec.rb +10 -10
  455. data/spec/unit/knife/index_rebuild_spec.rb +17 -17
  456. data/spec/unit/knife/knife_help.rb +24 -24
  457. data/spec/unit/knife/node_bulk_delete_spec.rb +14 -14
  458. data/spec/unit/knife/node_delete_spec.rb +11 -11
  459. data/spec/unit/knife/node_edit_spec.rb +17 -17
  460. data/spec/unit/knife/node_environment_set_spec.rb +12 -12
  461. data/spec/unit/knife/node_from_file_spec.rb +8 -8
  462. data/spec/unit/knife/node_list_spec.rb +9 -9
  463. data/spec/unit/knife/node_run_list_add_spec.rb +29 -29
  464. data/spec/unit/knife/node_run_list_remove_spec.rb +28 -13
  465. data/spec/unit/knife/node_run_list_set_spec.rb +27 -27
  466. data/spec/unit/knife/raw_spec.rb +43 -0
  467. data/spec/unit/knife/role_bulk_delete_spec.rb +12 -12
  468. data/spec/unit/knife/role_create_spec.rb +12 -12
  469. data/spec/unit/knife/role_delete_spec.rb +10 -10
  470. data/spec/unit/knife/role_edit_spec.rb +13 -13
  471. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -0
  472. data/spec/unit/knife/role_env_run_list_clear_spec.rb +100 -0
  473. data/spec/unit/knife/role_env_run_list_remove_spec.rb +108 -0
  474. data/spec/unit/knife/role_env_run_list_replace_spec.rb +108 -0
  475. data/spec/unit/knife/role_env_run_list_set_spec.rb +102 -0
  476. data/spec/unit/knife/role_from_file_spec.rb +10 -10
  477. data/spec/unit/knife/role_list_spec.rb +7 -7
  478. data/spec/unit/knife/role_run_list_add_spec.rb +179 -0
  479. data/spec/unit/knife/role_run_list_clear_spec.rb +90 -0
  480. data/spec/unit/knife/role_run_list_remove_spec.rb +98 -0
  481. data/spec/unit/knife/role_run_list_replace_spec.rb +101 -0
  482. data/spec/unit/knife/role_run_list_set_spec.rb +92 -0
  483. data/spec/unit/knife/ssh_spec.rb +66 -66
  484. data/spec/unit/knife/ssl_check_spec.rb +27 -27
  485. data/spec/unit/knife/ssl_fetch_spec.rb +45 -12
  486. data/spec/unit/knife/status_spec.rb +5 -5
  487. data/spec/unit/knife/tag_create_spec.rb +5 -5
  488. data/spec/unit/knife/tag_delete_spec.rb +6 -6
  489. data/spec/unit/knife/tag_list_spec.rb +4 -4
  490. data/spec/unit/knife/user_create_spec.rb +18 -18
  491. data/spec/unit/knife/user_delete_spec.rb +4 -4
  492. data/spec/unit/knife/user_edit_spec.rb +7 -7
  493. data/spec/unit/knife/user_list_spec.rb +2 -2
  494. data/spec/unit/knife/user_reregister_spec.rb +10 -10
  495. data/spec/unit/knife/user_show_spec.rb +5 -5
  496. data/spec/unit/knife_spec.rb +36 -36
  497. data/spec/unit/lwrp_spec.rb +63 -39
  498. data/spec/unit/mash_spec.rb +6 -6
  499. data/spec/unit/mixin/checksum_spec.rb +2 -2
  500. data/spec/unit/mixin/command_spec.rb +13 -13
  501. data/spec/unit/mixin/convert_to_class_name_spec.rb +6 -6
  502. data/spec/unit/mixin/deep_merge_spec.rb +49 -49
  503. data/spec/unit/mixin/deprecation_spec.rb +5 -5
  504. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +14 -14
  505. data/spec/unit/mixin/homebrew_user_spec.rb +3 -3
  506. data/spec/unit/mixin/params_validate_spec.rb +71 -71
  507. data/spec/unit/mixin/path_sanity_spec.rb +14 -14
  508. data/spec/unit/mixin/securable_spec.rb +177 -177
  509. data/spec/unit/mixin/shell_out_spec.rb +56 -27
  510. data/spec/unit/mixin/template_spec.rb +31 -31
  511. data/spec/unit/mixin/windows_architecture_helper_spec.rb +5 -5
  512. data/spec/unit/mixin/xml_escape_spec.rb +7 -7
  513. data/spec/unit/monkey_patches/uri_spec.rb +1 -1
  514. data/spec/unit/monologger_spec.rb +3 -3
  515. data/spec/unit/node/attribute_spec.rb +185 -136
  516. data/spec/unit/node/immutable_collections_spec.rb +22 -22
  517. data/spec/unit/node_spec.rb +210 -179
  518. data/spec/unit/org_spec.rb +196 -0
  519. data/spec/unit/platform/query_helpers_spec.rb +5 -5
  520. data/spec/unit/platform_spec.rb +46 -46
  521. data/spec/unit/policy_builder/expand_node_object_spec.rb +17 -18
  522. data/spec/unit/policy_builder/policyfile_spec.rb +159 -71
  523. data/spec/unit/provider/directory_spec.rb +5 -5
  524. data/spec/unit/provider/dsc_script_spec.rb +6 -6
  525. data/spec/unit/provider/env_spec.rb +27 -14
  526. data/spec/unit/provider/execute_spec.rb +139 -68
  527. data/spec/unit/provider/file/content_spec.rb +8 -8
  528. data/spec/unit/provider/git_spec.rb +10 -5
  529. data/spec/unit/provider/group/dscl_spec.rb +8 -11
  530. data/spec/unit/provider/group_spec.rb +13 -13
  531. data/spec/unit/provider/ifconfig/aix_spec.rb +3 -2
  532. data/spec/unit/provider/ifconfig/debian_spec.rb +19 -19
  533. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  534. data/spec/unit/provider/mdadm_spec.rb +2 -2
  535. data/spec/unit/provider/mount/aix_spec.rb +5 -5
  536. data/spec/unit/provider/mount/mount_spec.rb +22 -22
  537. data/spec/unit/provider/mount/solaris_spec.rb +20 -20
  538. data/spec/unit/provider/package/aix_spec.rb +23 -22
  539. data/spec/unit/provider/package/apt_spec.rb +23 -4
  540. data/spec/unit/provider/package/dpkg_spec.rb +14 -15
  541. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  542. data/spec/unit/provider/package/freebsd/port_spec.rb +1 -1
  543. data/spec/unit/provider/package/ips_spec.rb +1 -2
  544. data/spec/unit/provider/package/macports_spec.rb +14 -14
  545. data/spec/unit/provider/package/openbsd_spec.rb +66 -0
  546. data/spec/unit/provider/package/pacman_spec.rb +15 -14
  547. data/spec/unit/provider/package/portage_spec.rb +11 -11
  548. data/spec/unit/provider/package/rpm_spec.rb +132 -84
  549. data/spec/unit/provider/package/rubygems_spec.rb +54 -25
  550. data/spec/unit/provider/package/solaris_spec.rb +22 -25
  551. data/spec/unit/provider/package/yum_spec.rb +237 -36
  552. data/spec/unit/provider/package/zypper_spec.rb +9 -12
  553. data/spec/unit/provider/package_spec.rb +276 -2
  554. data/spec/unit/provider/package_spec.rbe +0 -0
  555. data/spec/unit/provider/remote_directory_spec.rb +25 -25
  556. data/spec/unit/provider/remote_file/ftp_spec.rb +3 -3
  557. data/spec/unit/provider/route_spec.rb +3 -3
  558. data/spec/unit/provider/script_spec.rb +61 -43
  559. data/spec/unit/provider/service/aix_service_spec.rb +5 -5
  560. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  561. data/spec/unit/provider/service/debian_service_spec.rb +8 -8
  562. data/spec/unit/provider/service/freebsd_service_spec.rb +16 -2
  563. data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
  564. data/spec/unit/provider/service/init_service_spec.rb +5 -5
  565. data/spec/unit/provider/service/insserv_service_spec.rb +2 -2
  566. data/spec/unit/provider/service/invokercd_service_spec.rb +5 -5
  567. data/spec/unit/provider/service/macosx_spec.rb +7 -7
  568. data/spec/unit/provider/service/openbsd_service_spec.rb +543 -0
  569. data/spec/unit/provider/service/redhat_spec.rb +4 -4
  570. data/spec/unit/provider/service/simple_service_spec.rb +2 -2
  571. data/spec/unit/provider/service/solaris_smf_service_spec.rb +14 -14
  572. data/spec/unit/provider/service/systemd_service_spec.rb +15 -7
  573. data/spec/unit/provider/service/upstart_service_spec.rb +4 -4
  574. data/spec/unit/provider/service/windows_spec.rb +119 -25
  575. data/spec/unit/provider/service_spec.rb +1 -1
  576. data/spec/unit/provider/user/dscl_spec.rb +38 -30
  577. data/spec/unit/provider/user_spec.rb +1 -1
  578. data/spec/unit/provider_resolver_spec.rb +7 -7
  579. data/spec/unit/provider_spec.rb +23 -23
  580. data/spec/unit/recipe_spec.rb +194 -83
  581. data/spec/unit/registry_helper_spec.rb +143 -143
  582. data/spec/unit/resource/chef_gem_spec.rb +117 -3
  583. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  584. data/spec/unit/resource/conditional_spec.rb +56 -15
  585. data/spec/unit/resource/deploy_spec.rb +2 -2
  586. data/spec/unit/resource/dsc_script_spec.rb +32 -0
  587. data/spec/unit/resource/execute_spec.rb +4 -0
  588. data/spec/unit/resource/file/verification_spec.rb +111 -0
  589. data/spec/unit/resource/file_spec.rb +14 -0
  590. data/spec/unit/resource/openbsd_package_spec.rb +49 -0
  591. data/spec/unit/resource/remote_file_spec.rb +12 -12
  592. data/spec/unit/resource/resource_notification_spec.rb +18 -18
  593. data/spec/unit/resource/rpm_package_spec.rb +12 -0
  594. data/spec/unit/resource/scm_spec.rb +4 -4
  595. data/spec/unit/resource/script_spec.rb +3 -5
  596. data/spec/unit/resource/subversion_spec.rb +1 -1
  597. data/spec/unit/resource_builder_spec.rb +1 -0
  598. data/spec/unit/resource_collection/resource_list_spec.rb +2 -2
  599. data/spec/unit/resource_collection/resource_set_spec.rb +3 -3
  600. data/spec/unit/resource_collection/stepable_iterator_spec.rb +24 -24
  601. data/spec/unit/resource_collection_spec.rb +52 -52
  602. data/spec/unit/resource_definition_spec.rb +1 -1
  603. data/spec/unit/resource_reporter_spec.rb +118 -118
  604. data/spec/unit/resource_spec.rb +131 -125
  605. data/spec/unit/rest/auth_credentials_spec.rb +73 -73
  606. data/spec/unit/rest_spec.rb +12 -12
  607. data/spec/unit/role_spec.rb +85 -84
  608. data/spec/unit/run_context/cookbook_compiler_spec.rb +18 -18
  609. data/spec/unit/run_context_spec.rb +39 -68
  610. data/spec/unit/run_list/run_list_expansion_spec.rb +21 -21
  611. data/spec/unit/run_list/run_list_item_spec.rb +28 -28
  612. data/spec/unit/run_list/versioned_recipe_list_spec.rb +14 -14
  613. data/spec/unit/run_list_spec.rb +55 -55
  614. data/spec/unit/run_lock_spec.rb +14 -14
  615. data/spec/unit/run_status_spec.rb +24 -24
  616. data/spec/unit/scan_access_control_spec.rb +23 -23
  617. data/spec/unit/search/query_spec.rb +54 -66
  618. data/spec/unit/shell/model_wrapper_spec.rb +13 -13
  619. data/spec/unit/shell/shell_ext_spec.rb +32 -32
  620. data/spec/unit/shell/shell_session_spec.rb +24 -24
  621. data/spec/unit/shell_out_spec.rb +4 -4
  622. data/spec/unit/shell_spec.rb +27 -27
  623. data/spec/unit/user_spec.rb +50 -50
  624. data/spec/unit/util/backup_spec.rb +32 -32
  625. data/spec/unit/util/diff_spec.rb +31 -31
  626. data/spec/unit/util/dsc/configuration_generator_spec.rb +38 -16
  627. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +21 -26
  628. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +10 -10
  629. data/spec/unit/util/editor_spec.rb +10 -10
  630. data/spec/unit/util/file_edit_spec.rb +10 -10
  631. data/spec/unit/util/path_helper_spec.rb +38 -46
  632. data/spec/unit/util/powershell/cmdlet_spec.rb +9 -9
  633. data/spec/unit/util/selinux_spec.rb +30 -30
  634. data/spec/unit/util/threaded_job_queue_spec.rb +6 -6
  635. data/spec/unit/version/platform_spec.rb +5 -5
  636. data/spec/unit/version_class_spec.rb +15 -15
  637. data/spec/unit/version_constraint/platform_spec.rb +7 -7
  638. data/spec/unit/version_constraint_spec.rb +43 -43
  639. data/spec/unit/windows_service_spec.rb +15 -15
  640. data/spec/unit/workstation_config_loader_spec.rb +2 -2
  641. data/tasks/rspec.rb +16 -18
  642. metadata +126 -49
  643. data/bin/shef +0 -35
  644. data/lib/chef/application/agent.rb +0 -18
  645. data/lib/chef/monkey_patches/fileutils.rb +0 -65
  646. data/lib/chef/monkey_patches/numeric.rb +0 -15
  647. data/lib/chef/monkey_patches/object.rb +0 -9
  648. data/lib/chef/monkey_patches/pathname.rb +0 -32
  649. data/lib/chef/monkey_patches/regexp.rb +0 -34
  650. data/lib/chef/monkey_patches/securerandom.rb +0 -44
  651. data/lib/chef/monkey_patches/string.rb +0 -49
  652. data/lib/chef/monkey_patches/tempfile.rb +0 -64
  653. data/lib/chef/monkey_patches/uri.rb +0 -70
@@ -42,16 +42,16 @@ describe Chef::CookbookSiteStreamingUploader do
42
42
  @cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, 'cookbooks'))
43
43
  @loader = Chef::CookbookLoader.new(@cookbook_repo)
44
44
  @loader.load_cookbooks
45
- File.stub(:unlink).and_return()
45
+ allow(File).to receive(:unlink)
46
46
  end
47
47
 
48
48
  it "should create the cookbook tmp dir" do
49
49
  cookbook = @loader[:openldap]
50
50
  files_count = Dir.glob(File.join(@cookbook_repo, cookbook.name.to_s, '**', '*'), File::FNM_DOTMATCH).count { |file| File.file?(file) }
51
51
 
52
- Tempfile.should_receive(:new).with("chef-#{cookbook.name}-build").and_return(FakeTempfile.new("chef-#{cookbook.name}-build"))
53
- FileUtils.should_receive(:mkdir_p).exactly(files_count + 1).times
54
- FileUtils.should_receive(:cp).exactly(files_count).times
52
+ expect(Tempfile).to receive(:new).with("chef-#{cookbook.name}-build").and_return(FakeTempfile.new("chef-#{cookbook.name}-build"))
53
+ expect(FileUtils).to receive(:mkdir_p).exactly(files_count + 1).times
54
+ expect(FileUtils).to receive(:cp).exactly(files_count).times
55
55
  Chef::CookbookSiteStreamingUploader.create_build_dir(cookbook)
56
56
  end
57
57
 
@@ -64,39 +64,39 @@ describe Chef::CookbookSiteStreamingUploader do
64
64
  @secret_filename = File.join(CHEF_SPEC_DATA, 'ssl/private_key.pem')
65
65
  @rsa_key = File.read(@secret_filename)
66
66
  response = Net::HTTPResponse.new('1.0', '200', 'OK')
67
- Net::HTTP.any_instance.stub(:request).and_return(response)
67
+ allow_any_instance_of(Net::HTTP).to receive(:request).and_return(response)
68
68
  end
69
69
 
70
70
  it "should send an http request" do
71
- Net::HTTP.any_instance.should_receive(:request)
71
+ expect_any_instance_of(Net::HTTP).to receive(:request)
72
72
  Chef::CookbookSiteStreamingUploader.make_request(:post, @uri, 'bill', @secret_filename)
73
73
  end
74
74
 
75
75
  it "should read the private key file" do
76
- File.should_receive(:read).with(@secret_filename).and_return(@rsa_key)
76
+ expect(File).to receive(:read).with(@secret_filename).and_return(@rsa_key)
77
77
  Chef::CookbookSiteStreamingUploader.make_request(:post, @uri, 'bill', @secret_filename)
78
78
  end
79
79
 
80
80
  it "should add the authentication signed header" do
81
- Mixlib::Authentication::SigningObject.any_instance.should_receive(:sign).and_return({})
81
+ expect_any_instance_of(Mixlib::Authentication::SigningObject).to receive(:sign).and_return({})
82
82
  Chef::CookbookSiteStreamingUploader.make_request(:post, @uri, 'bill', @secret_filename)
83
83
  end
84
84
 
85
85
  it "should be able to send post requests" do
86
86
  post = Net::HTTP::Post.new(@uri, {})
87
87
 
88
- Net::HTTP::Post.should_receive(:new).once.and_return(post)
89
- Net::HTTP::Put.should_not_receive(:new)
90
- Net::HTTP::Get.should_not_receive(:new)
88
+ expect(Net::HTTP::Post).to receive(:new).once.and_return(post)
89
+ expect(Net::HTTP::Put).not_to receive(:new)
90
+ expect(Net::HTTP::Get).not_to receive(:new)
91
91
  Chef::CookbookSiteStreamingUploader.make_request(:post, @uri, 'bill', @secret_filename)
92
92
  end
93
93
 
94
94
  it "should be able to send put requests" do
95
95
  put = Net::HTTP::Put.new(@uri, {})
96
96
 
97
- Net::HTTP::Post.should_not_receive(:new)
98
- Net::HTTP::Put.should_receive(:new).once.and_return(put)
99
- Net::HTTP::Get.should_not_receive(:new)
97
+ expect(Net::HTTP::Post).not_to receive(:new)
98
+ expect(Net::HTTP::Put).to receive(:new).once.and_return(put)
99
+ expect(Net::HTTP::Get).not_to receive(:new)
100
100
  Chef::CookbookSiteStreamingUploader.make_request(:put, @uri, 'bill', @secret_filename)
101
101
  end
102
102
 
@@ -126,19 +126,19 @@ describe Chef::CookbookSiteStreamingUploader do
126
126
  @uri = "https://cookbooks.dummy.com/api/v1/cookbooks"
127
127
  uri_info = URI.parse(@uri)
128
128
  @http = Net::HTTP.new(uri_info.host, uri_info.port)
129
- Net::HTTP.should_receive(:new).with(uri_info.host, uri_info.port).and_return(@http)
129
+ expect(Net::HTTP).to receive(:new).with(uri_info.host, uri_info.port).and_return(@http)
130
130
  end
131
131
 
132
132
  it "should be VERIFY_NONE when ssl_verify_mode is :verify_none" do
133
133
  Chef::Config[:ssl_verify_mode] = :verify_none
134
134
  Chef::CookbookSiteStreamingUploader.make_request(:post, @uri, 'bill', @secret_filename)
135
- @http.verify_mode.should == OpenSSL::SSL::VERIFY_NONE
135
+ expect(@http.verify_mode).to eq(OpenSSL::SSL::VERIFY_NONE)
136
136
  end
137
137
 
138
138
  it "should be VERIFY_PEER when ssl_verify_mode is :verify_peer" do
139
139
  Chef::Config[:ssl_verify_mode] = :verify_peer
140
140
  Chef::CookbookSiteStreamingUploader.make_request(:post, @uri, 'bill', @secret_filename)
141
- @http.verify_mode.should == OpenSSL::SSL::VERIFY_PEER
141
+ expect(@http.verify_mode).to eq(OpenSSL::SSL::VERIFY_PEER)
142
142
  end
143
143
  end
144
144
 
@@ -151,17 +151,17 @@ describe Chef::CookbookSiteStreamingUploader do
151
151
  end
152
152
 
153
153
  it "should create a StreamPart" do
154
- @stream_part.should be_instance_of(Chef::CookbookSiteStreamingUploader::StreamPart)
154
+ expect(@stream_part).to be_instance_of(Chef::CookbookSiteStreamingUploader::StreamPart)
155
155
  end
156
156
 
157
157
  it "should expose its size" do
158
- @stream_part.size.should eql(File.size(@file))
158
+ expect(@stream_part.size).to eql(File.size(@file))
159
159
  end
160
160
 
161
161
  it "should read with offset and how_much" do
162
162
  content = @file.read(4)
163
163
  @file.rewind
164
- @stream_part.read(0, 4).should eql(content)
164
+ expect(@stream_part.read(0, 4)).to eql(content)
165
165
  end
166
166
 
167
167
  end # StreamPart
@@ -173,15 +173,15 @@ describe Chef::CookbookSiteStreamingUploader do
173
173
  end
174
174
 
175
175
  it "should create a StringPart" do
176
- @string_part.should be_instance_of(Chef::CookbookSiteStreamingUploader::StringPart)
176
+ expect(@string_part).to be_instance_of(Chef::CookbookSiteStreamingUploader::StringPart)
177
177
  end
178
178
 
179
179
  it "should expose its size" do
180
- @string_part.size.should eql(@str.size)
180
+ expect(@string_part.size).to eql(@str.size)
181
181
  end
182
182
 
183
183
  it "should read with offset and how_much" do
184
- @string_part.read(2, 4).should eql(@str[2, 4])
184
+ expect(@string_part.read(2, 4)).to eql(@str[2, 4])
185
185
  end
186
186
 
187
187
  end # StringPart
@@ -198,21 +198,21 @@ describe Chef::CookbookSiteStreamingUploader do
198
198
  end
199
199
 
200
200
  it "should create a MultipartStream" do
201
- @multipart_stream.should be_instance_of(Chef::CookbookSiteStreamingUploader::MultipartStream)
201
+ expect(@multipart_stream).to be_instance_of(Chef::CookbookSiteStreamingUploader::MultipartStream)
202
202
  end
203
203
 
204
204
  it "should expose its size" do
205
- @multipart_stream.size.should eql(@stream1.size + @stream2.size)
205
+ expect(@multipart_stream.size).to eql(@stream1.size + @stream2.size)
206
206
  end
207
207
 
208
208
  it "should read with how_much" do
209
- @multipart_stream.read(10).should eql("#{@string1}#{@string2}"[0, 10])
209
+ expect(@multipart_stream.read(10)).to eql("#{@string1}#{@string2}"[0, 10])
210
210
  end
211
211
 
212
212
  it "should read receiving destination buffer as second argument (CHEF-4456: Ruby 2 compat)" do
213
213
  dst_buf = ''
214
214
  @multipart_stream.read(10, dst_buf)
215
- dst_buf.should eql("#{@string1}#{@string2}"[0, 10])
215
+ expect(dst_buf).to eql("#{@string1}#{@string2}"[0, 10])
216
216
  end
217
217
 
218
218
  end # MultipartStream
@@ -33,43 +33,43 @@ describe Chef::CookbookVersion do
33
33
  end
34
34
 
35
35
  it "should have a name" do
36
- @cookbook.name.should == :openldap
36
+ expect(@cookbook.name).to eq(:openldap)
37
37
  end
38
38
 
39
39
  it "should allow you to set the list of attribute files and create the mapping from short names to paths" do
40
40
  @cookbook.attribute_filenames = [ "attributes/one.rb", "attributes/two.rb" ]
41
- @cookbook.attribute_filenames.should == [ "attributes/one.rb", "attributes/two.rb" ]
42
- @cookbook.attribute_filenames_by_short_filename.keys.sort.should eql(["one", "two"])
43
- @cookbook.attribute_filenames_by_short_filename["one"].should == "attributes/one.rb"
44
- @cookbook.attribute_filenames_by_short_filename["two"].should == "attributes/two.rb"
41
+ expect(@cookbook.attribute_filenames).to eq([ "attributes/one.rb", "attributes/two.rb" ])
42
+ expect(@cookbook.attribute_filenames_by_short_filename.keys.sort).to eql(["one", "two"])
43
+ expect(@cookbook.attribute_filenames_by_short_filename["one"]).to eq("attributes/one.rb")
44
+ expect(@cookbook.attribute_filenames_by_short_filename["two"]).to eq("attributes/two.rb")
45
45
  end
46
46
 
47
47
  it "should allow you to set the list of recipe files and create the mapping of recipe short name to filename" do
48
48
  @cookbook.recipe_filenames = [ "recipes/one.rb", "recipes/two.rb" ]
49
- @cookbook.recipe_filenames.should == [ "recipes/one.rb", "recipes/two.rb" ]
50
- @cookbook.recipe_filenames_by_name.keys.sort.should eql(["one", "two"])
51
- @cookbook.recipe_filenames_by_name["one"].should == "recipes/one.rb"
52
- @cookbook.recipe_filenames_by_name["two"].should == "recipes/two.rb"
49
+ expect(@cookbook.recipe_filenames).to eq([ "recipes/one.rb", "recipes/two.rb" ])
50
+ expect(@cookbook.recipe_filenames_by_name.keys.sort).to eql(["one", "two"])
51
+ expect(@cookbook.recipe_filenames_by_name["one"]).to eq("recipes/one.rb")
52
+ expect(@cookbook.recipe_filenames_by_name["two"]).to eq("recipes/two.rb")
53
53
  end
54
54
 
55
55
  it "should generate a list of recipes by fully-qualified name" do
56
56
  @cookbook.recipe_filenames = [ "recipes/one.rb", "/recipes/two.rb", "three.rb" ]
57
- @cookbook.fully_qualified_recipe_names.include?("openldap::one").should == true
58
- @cookbook.fully_qualified_recipe_names.include?("openldap::two").should == true
59
- @cookbook.fully_qualified_recipe_names.include?("openldap::three").should == true
57
+ expect(@cookbook.fully_qualified_recipe_names.include?("openldap::one")).to eq(true)
58
+ expect(@cookbook.fully_qualified_recipe_names.include?("openldap::two")).to eq(true)
59
+ expect(@cookbook.fully_qualified_recipe_names.include?("openldap::three")).to eq(true)
60
60
  end
61
61
 
62
62
  it "should find a preferred file" do
63
- pending
63
+ skip
64
64
  end
65
65
 
66
66
  it "should not return an unchanged preferred file" do
67
67
  pending
68
- @cookbook.preferred_filename(@node, :files, 'a-filename', 'the-checksum').should be_nil
68
+ expect(@cookbook.preferred_filename(@node, :files, 'a-filename', 'the-checksum')).to be_nil
69
69
  end
70
70
 
71
71
  it "should raise an ArgumentException if you try to load a bad recipe name" do
72
- lambda { @cookbook.load_recipe("doesnt_exist", @node) }.should raise_error(ArgumentError)
72
+ expect { @cookbook.load_recipe("doesnt_exist", @node) }.to raise_error(ArgumentError)
73
73
  end
74
74
 
75
75
  end
@@ -45,7 +45,13 @@ describe Chef::CookbookUploader do
45
45
 
46
46
  let(:sandbox_commit_uri) { "https://chef.example.org/sandboxes/abc123" }
47
47
 
48
- let(:uploader) { described_class.new(cookbooks_to_upload, :rest => http_client) }
48
+ let(:policy_mode) { false }
49
+
50
+ let(:uploader) { described_class.new(cookbooks_to_upload, rest: http_client, policy_mode: policy_mode) }
51
+
52
+ it "defaults to not enabling policy mode" do
53
+ expect(described_class.new(cookbooks_to_upload, rest: http_client).policy_mode?).to be(false)
54
+ end
49
55
 
50
56
  it "has a list of cookbooks to upload" do
51
57
  expect(uploader.cookbooks).to eq(cookbooks_to_upload)
@@ -61,7 +67,7 @@ describe Chef::CookbookUploader do
61
67
  describe "uploading cookbooks" do
62
68
 
63
69
  def url_for(cksum)
64
- "https://storage.example.com/#{cksum}"
70
+ "https://storage.example.com/#{cksum}"
65
71
  end
66
72
 
67
73
  let(:sandbox_response) do
@@ -94,6 +100,10 @@ describe Chef::CookbookUploader do
94
100
  end
95
101
  end
96
102
 
103
+ def expected_save_url(cookbook)
104
+ "cookbooks/#{cookbook.name}/#{cookbook.version}"
105
+ end
106
+
97
107
  def expect_sandbox_commit
98
108
  expect(http_client).to receive(:put).with(sandbox_commit_uri, {:is_completed => true})
99
109
  end
@@ -102,7 +112,7 @@ describe Chef::CookbookUploader do
102
112
  cookbooks_to_upload.each do |cookbook|
103
113
 
104
114
  expect(http_client).to receive(:put).
105
- with(cookbook.save_url, cookbook)
115
+ with(expected_save_url(cookbook), cookbook)
106
116
 
107
117
  end
108
118
  end
@@ -155,6 +165,30 @@ describe Chef::CookbookUploader do
155
165
  end
156
166
 
157
167
  end
168
+
169
+ context "when policy_mode is specified" do
170
+
171
+ let(:cksums_not_on_remote) do
172
+ checksums_of_cookbook_files.keys
173
+ end
174
+
175
+ let(:policy_mode) { true }
176
+
177
+ def expected_save_url(cookbook)
178
+ "cookbook_artifacts/#{cookbook.name}/#{cookbook.version}"
179
+ end
180
+
181
+ it "uploads all files in a sandbox transaction, then creates cookbooks on the server using cookbook_artifacts API" do
182
+ expect_sandbox_create
183
+ expect_checksum_upload
184
+ expect_sandbox_commit
185
+ expect_cookbook_create
186
+
187
+ uploader.upload_cookbooks
188
+ end
189
+
190
+
191
+ end
158
192
  end
159
193
 
160
194
  end
@@ -0,0 +1,554 @@
1
+ #
2
+ # Author:: Tim Hinderliter (<tim@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Copyright:: Copyright (c) 2010 Opscode, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'spec_helper'
21
+
22
+ describe Chef::CookbookVersion, "file specificity" do
23
+ before(:each) do
24
+ @cookbook = Chef::CookbookVersion.new "test-cookbook"
25
+ @cookbook.manifest = {
26
+ "files" =>
27
+ [
28
+ # afile.rb
29
+ {
30
+ :name => "afile.rb",
31
+ :path => "files/host-examplehost.example.org/afile.rb",
32
+ :checksum => "csum-host",
33
+ :specificity => "host-examplehost.example.org"
34
+ },
35
+ {
36
+ :name => "afile.rb",
37
+ :path => "files/ubuntu-9.10/afile.rb",
38
+ :checksum => "csum-platver-full",
39
+ :specificity => "ubuntu-9.10"
40
+ },
41
+ {
42
+ :name => "afile.rb",
43
+ :path => "files/newubuntu-9/afile.rb",
44
+ :checksum => "csum-platver-partial",
45
+ :specificity => "newubuntu-9"
46
+ },
47
+ {
48
+ :name => "afile.rb",
49
+ :path => "files/ubuntu/afile.rb",
50
+ :checksum => "csum-plat",
51
+ :specificity => "ubuntu"
52
+ },
53
+ {
54
+ :name => "afile.rb",
55
+ :path => "files/default/afile.rb",
56
+ :checksum => "csum-default",
57
+ :specificity => "default"
58
+ },
59
+
60
+ # for different/odd platform_versions
61
+ {
62
+ :name => "bfile.rb",
63
+ :path => "files/fakeos-2.0.rc.1/bfile.rb",
64
+ :checksum => "csum2-platver-full",
65
+ :specificity => "fakeos-2.0.rc.1"
66
+ },
67
+ {
68
+ :name => "bfile.rb",
69
+ :path => "files/newfakeos-2.0.rc/bfile.rb",
70
+ :checksum => "csum2-platver-partial",
71
+ :specificity => "newfakeos-2.0.rc"
72
+ },
73
+ {
74
+ :name => "bfile.rb",
75
+ :path => "files/fakeos-maple tree/bfile.rb",
76
+ :checksum => "csum3-platver-full",
77
+ :specificity => "maple tree"
78
+ },
79
+ {
80
+ :name => "bfile.rb",
81
+ :path => "files/fakeos-1/bfile.rb",
82
+ :checksum => "csum4-platver-full",
83
+ :specificity => "fakeos-1"
84
+ },
85
+
86
+ # directory adirectory
87
+ {
88
+ :name => "anotherfile1.rb",
89
+ :path => "files/host-examplehost.example.org/adirectory/anotherfile1.rb.host",
90
+ :checksum => "csum-host-1",
91
+ :specificity => "host-examplehost.example.org"
92
+ },
93
+ {
94
+ :name => "anotherfile2.rb",
95
+ :path => "files/host-examplehost.example.org/adirectory/anotherfile2.rb.host",
96
+ :checksum => "csum-host-2",
97
+ :specificity => "host-examplehost.example.org"
98
+ },
99
+
100
+ {
101
+ :name => "anotherfile1.rb",
102
+ :path => "files/ubuntu-9.10/adirectory/anotherfile1.rb.platform-full-version",
103
+ :checksum => "csum-platver-full-1",
104
+ :specificity => "ubuntu-9.10"
105
+ },
106
+ {
107
+ :name => "anotherfile2.rb",
108
+ :path => "files/ubuntu-9.10/adirectory/anotherfile2.rb.platform-full-version",
109
+ :checksum => "csum-platver-full-2",
110
+ :specificity => "ubuntu-9.10"
111
+ },
112
+
113
+ {
114
+ :name => "anotherfile1.rb",
115
+ :path => "files/newubuntu-9/adirectory/anotherfile1.rb.platform-partial-version",
116
+ :checksum => "csum-platver-partial-1",
117
+ :specificity => "newubuntu-9"
118
+ },
119
+ {
120
+ :name => "anotherfile2.rb",
121
+ :path => "files/newubuntu-9/adirectory/anotherfile2.rb.platform-partial-version",
122
+ :checksum => "csum-platver-partial-2",
123
+ :specificity => "nweubuntu-9"
124
+ },
125
+
126
+ {
127
+ :name => "anotherfile1.rb",
128
+ :path => "files/ubuntu/adirectory/anotherfile1.rb.platform",
129
+ :checksum => "csum-plat-1",
130
+ :specificity => "ubuntu"
131
+ },
132
+ {
133
+ :name => "anotherfile2.rb",
134
+ :path => "files/ubuntu/adirectory/anotherfile2.rb.platform",
135
+ :checksum => "csum-plat-2",
136
+ :specificity => "ubuntu"
137
+ },
138
+
139
+ {
140
+ :name => "anotherfile1.rb",
141
+ :path => "files/default/adirectory/anotherfile1.rb.default",
142
+ :checksum => "csum-default-1",
143
+ :specificity => "default"
144
+ },
145
+ {
146
+ :name => "anotherfile2.rb",
147
+ :path => "files/default/adirectory/anotherfile2.rb.default",
148
+ :checksum => "csum-default-2",
149
+ :specificity => "default"
150
+ },
151
+ # for different/odd platform_versions
152
+ {
153
+ :name => "anotherfile1.rb",
154
+ :path => "files/fakeos-2.0.rc.1/adirectory/anotherfile1.rb.platform-full-version",
155
+ :checksum => "csum2-platver-full-1",
156
+ :specificity => "fakeos-2.0.rc.1"
157
+ },
158
+ {
159
+ :name => "anotherfile2.rb",
160
+ :path => "files/fakeos-2.0.rc.1/adirectory/anotherfile2.rb.platform-full-version",
161
+ :checksum => "csum2-platver-full-2",
162
+ :specificity => "fakeos-2.0.rc.1"
163
+ },
164
+ {
165
+ :name => "anotherfile1.rb",
166
+ :path => "files/newfakeos-2.0.rc.1/adirectory/anotherfile1.rb.platform-partial-version",
167
+ :checksum => "csum2-platver-partial-1",
168
+ :specificity => "newfakeos-2.0.rc"
169
+ },
170
+ {
171
+ :name => "anotherfile2.rb",
172
+ :path => "files/newfakeos-2.0.rc.1/adirectory/anotherfile2.rb.platform-partial-version",
173
+ :checksum => "csum2-platver-partial-2",
174
+ :specificity => "newfakeos-2.0.rc"
175
+ },
176
+ {
177
+ :name => "anotherfile1.rb",
178
+ :path => "files/fakeos-maple tree/adirectory/anotherfile1.rb.platform-full-version",
179
+ :checksum => "csum3-platver-full-1",
180
+ :specificity => "fakeos-maple tree"
181
+ },
182
+ {
183
+ :name => "anotherfile2.rb",
184
+ :path => "files/fakeos-maple tree/adirectory/anotherfile2.rb.platform-full-version",
185
+ :checksum => "csum3-platver-full-2",
186
+ :specificity => "fakeos-maple tree"
187
+ },
188
+ {
189
+ :name => "anotherfile1.rb",
190
+ :path => "files/fakeos-1/adirectory/anotherfile1.rb.platform-full-version",
191
+ :checksum => "csum4-platver-full-1",
192
+ :specificity => "fakeos-1"
193
+ },
194
+ {
195
+ :name => "anotherfile2.rb",
196
+ :path => "files/fakeos-1/adirectory/anotherfile2.rb.platform-full-version",
197
+ :checksum => "csum4-platver-full-2",
198
+ :specificity => "fakeos-1"
199
+ },
200
+ ]
201
+ }
202
+
203
+ end
204
+
205
+
206
+ it "should return a manifest record based on priority preference: host" do
207
+ node = Chef::Node.new
208
+ node.automatic_attrs[:platform] = "ubuntu"
209
+ node.automatic_attrs[:platform_version] = "9.10"
210
+ node.automatic_attrs[:fqdn] = "examplehost.example.org"
211
+
212
+ manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb")
213
+ expect(manifest_record).not_to be_nil
214
+ expect(manifest_record[:checksum]).to eq("csum-host")
215
+ end
216
+
217
+ it "should return a manifest record based on priority preference: platform & full version" do
218
+ node = Chef::Node.new
219
+ node.automatic_attrs[:platform] = "ubuntu"
220
+ node.automatic_attrs[:platform_version] = "9.10"
221
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
222
+
223
+ manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb")
224
+ expect(manifest_record).not_to be_nil
225
+ expect(manifest_record[:checksum]).to eq("csum-platver-full")
226
+ end
227
+
228
+ it "should return a manifest record based on priority preference: platform & partial version" do
229
+ node = Chef::Node.new
230
+ node.automatic_attrs[:platform] = "newubuntu"
231
+ node.automatic_attrs[:platform_version] = "9.10"
232
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
233
+
234
+ manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb")
235
+ expect(manifest_record).not_to be_nil
236
+ expect(manifest_record[:checksum]).to eq("csum-platver-partial")
237
+ end
238
+
239
+ it "should return a manifest record based on priority preference: platform only" do
240
+ node = Chef::Node.new
241
+ node.automatic_attrs[:platform] = "ubuntu"
242
+ node.automatic_attrs[:platform_version] = "1.0"
243
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
244
+
245
+ manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb")
246
+ expect(manifest_record).not_to be_nil
247
+ expect(manifest_record[:checksum]).to eq("csum-plat")
248
+ end
249
+
250
+ it "should return a manifest record based on priority preference: default" do
251
+ node = Chef::Node.new
252
+ node.automatic_attrs[:platform] = "notubuntu"
253
+ node.automatic_attrs[:platform_version] = "1.0"
254
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
255
+
256
+ manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb")
257
+ expect(manifest_record).not_to be_nil
258
+ expect(manifest_record[:checksum]).to eq("csum-default")
259
+ end
260
+
261
+ it "should return a manifest record based on priority preference: platform & full version - platform_version variant 1" do
262
+ node = Chef::Node.new
263
+ node.automatic_attrs[:platform] = "fakeos"
264
+ node.automatic_attrs[:platform_version] = "2.0.rc.1"
265
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
266
+
267
+ manifest_record = @cookbook.preferred_manifest_record(node, :files, "bfile.rb")
268
+ expect(manifest_record).not_to be_nil
269
+ expect(manifest_record[:checksum]).to eq("csum2-platver-full")
270
+ end
271
+
272
+ it "should return a manifest record based on priority preference: platform & partial version - platform_version variant 1" do
273
+ node = Chef::Node.new
274
+ node.automatic_attrs[:platform] = "newfakeos"
275
+ node.automatic_attrs[:platform_version] = "2.0.rc.1"
276
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
277
+
278
+ manifest_record = @cookbook.preferred_manifest_record(node, :files, "bfile.rb")
279
+ expect(manifest_record).not_to be_nil
280
+ expect(manifest_record[:checksum]).to eq("csum2-platver-partial")
281
+ end
282
+
283
+ it "should return a manifest record based on priority preference: platform & full version - platform_version variant 2" do
284
+ node = Chef::Node.new
285
+ node.automatic_attrs[:platform] = "fakeos"
286
+ node.automatic_attrs[:platform_version] = "maple tree"
287
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
288
+
289
+ manifest_record = @cookbook.preferred_manifest_record(node, :files, "bfile.rb")
290
+ expect(manifest_record).not_to be_nil
291
+ expect(manifest_record[:checksum]).to eq("csum3-platver-full")
292
+ end
293
+
294
+ it "should return a manifest record based on priority preference: platform & full version - platform_version variant 3" do
295
+ node = Chef::Node.new
296
+ node.automatic_attrs[:platform] = "fakeos"
297
+ node.automatic_attrs[:platform_version] = "1"
298
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
299
+
300
+ manifest_record = @cookbook.preferred_manifest_record(node, :files, "bfile.rb")
301
+ expect(manifest_record).not_to be_nil
302
+ expect(manifest_record[:checksum]).to eq("csum4-platver-full")
303
+ end
304
+
305
+ describe "when fetching the contents of a directory by file specificity" do
306
+
307
+ it "should return a directory of manifest records based on priority preference: host" do
308
+ node = Chef::Node.new
309
+ node.automatic_attrs[:platform] = "ubuntu"
310
+ node.automatic_attrs[:platform_version] = "9.10"
311
+ node.automatic_attrs[:fqdn] = "examplehost.example.org"
312
+
313
+ manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory")
314
+ expect(manifest_records).not_to be_nil
315
+ expect(manifest_records.size).to eq(2)
316
+
317
+ checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] }
318
+ expect(checksums.sort).to eq(["csum-host-1", "csum-host-2"])
319
+ end
320
+
321
+ it "should return a directory of manifest records based on priority preference: platform & full version" do
322
+ node = Chef::Node.new
323
+ node.automatic_attrs[:platform] = "ubuntu"
324
+ node.automatic_attrs[:platform_version] = "9.10"
325
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
326
+
327
+ manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory")
328
+ expect(manifest_records).not_to be_nil
329
+ expect(manifest_records.size).to eq(2)
330
+
331
+ checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] }
332
+ expect(checksums.sort).to eq(["csum-platver-full-1", "csum-platver-full-2"])
333
+ end
334
+
335
+ it "should return a directory of manifest records based on priority preference: platform & partial version" do
336
+ node = Chef::Node.new
337
+ node.automatic_attrs[:platform] = "newubuntu"
338
+ node.automatic_attrs[:platform_version] = "9.10"
339
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
340
+
341
+ manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory")
342
+ expect(manifest_records).not_to be_nil
343
+ expect(manifest_records.size).to eq(2)
344
+
345
+ checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] }
346
+ expect(checksums.sort).to eq(["csum-platver-partial-1", "csum-platver-partial-2"])
347
+ end
348
+
349
+ it "should return a directory of manifest records based on priority preference: platform only" do
350
+ node = Chef::Node.new
351
+ node.automatic_attrs[:platform] = "ubuntu"
352
+ node.automatic_attrs[:platform_version] = "1.0"
353
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
354
+
355
+ manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory")
356
+ expect(manifest_records).not_to be_nil
357
+ expect(manifest_records.size).to eq(2)
358
+
359
+ checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] }
360
+ expect(checksums.sort).to eq(["csum-plat-1", "csum-plat-2"])
361
+ end
362
+
363
+ it "should return a directory of manifest records based on priority preference: default" do
364
+ node = Chef::Node.new
365
+ node.automatic_attrs[:platform] = "notubuntu"
366
+ node.automatic_attrs[:platform_version] = "1.0"
367
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
368
+
369
+ manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory")
370
+ expect(manifest_records).not_to be_nil
371
+ expect(manifest_records.size).to eq(2)
372
+
373
+ checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] }
374
+ expect(checksums.sort).to eq(["csum-default-1", "csum-default-2"])
375
+ end
376
+
377
+ it "should return a manifest record based on priority preference: platform & full version - platform_version variant 1" do
378
+ node = Chef::Node.new
379
+ node.automatic_attrs[:platform] = "fakeos"
380
+ node.automatic_attrs[:platform_version] = "2.0.rc.1"
381
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
382
+
383
+ manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory")
384
+ expect(manifest_records).not_to be_nil
385
+ expect(manifest_records.size).to eq(2)
386
+
387
+ checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] }
388
+ expect(checksums.sort).to eq(["csum2-platver-full-1", "csum2-platver-full-2"])
389
+ end
390
+
391
+ it "should return a manifest record based on priority preference: platform & partial version - platform_version variant 1" do
392
+ node = Chef::Node.new
393
+ node.automatic_attrs[:platform] = "newfakeos"
394
+ node.automatic_attrs[:platform_version] = "2.0.rc.1"
395
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
396
+
397
+ manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory")
398
+ expect(manifest_records).not_to be_nil
399
+ expect(manifest_records.size).to eq(2)
400
+
401
+ checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] }
402
+ expect(checksums.sort).to eq(["csum2-platver-partial-1", "csum2-platver-partial-2"])
403
+ end
404
+
405
+ it "should return a manifest record based on priority preference: platform & full version - platform_version variant 2" do
406
+ node = Chef::Node.new
407
+ node.automatic_attrs[:platform] = "fakeos"
408
+ node.automatic_attrs[:platform_version] = "maple tree"
409
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
410
+
411
+ manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory")
412
+ expect(manifest_records).not_to be_nil
413
+ expect(manifest_records.size).to eq(2)
414
+
415
+ checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] }
416
+ expect(checksums.sort).to eq(["csum3-platver-full-1", "csum3-platver-full-2"])
417
+ end
418
+
419
+ it "should return a manifest record based on priority preference: platform & full version - platform_version variant 3" do
420
+ node = Chef::Node.new
421
+ node.automatic_attrs[:platform] = "fakeos"
422
+ node.automatic_attrs[:platform_version] = "1"
423
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
424
+
425
+ manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory")
426
+ expect(manifest_records).not_to be_nil
427
+ expect(manifest_records.size).to eq(2)
428
+
429
+ checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] }
430
+ expect(checksums.sort).to eq(["csum4-platver-full-1", "csum4-platver-full-2"])
431
+ end
432
+ end
433
+
434
+ ## Globbing the relative paths out of the manifest records ##
435
+
436
+ describe "when globbing for relative file paths based on filespecificity" do
437
+ it "should return a list of relative paths based on priority preference: host" do
438
+ node = Chef::Node.new
439
+ node.automatic_attrs[:platform] = "ubuntu"
440
+ node.automatic_attrs[:platform_version] = "9.10"
441
+ node.automatic_attrs[:fqdn] = "examplehost.example.org"
442
+
443
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory")
444
+ expect(filenames).not_to be_nil
445
+ expect(filenames.size).to eq(2)
446
+
447
+ expect(filenames.sort).to eq(['anotherfile1.rb.host', 'anotherfile2.rb.host'])
448
+ end
449
+
450
+ it "should return a list of relative paths based on priority preference: platform & full version" do
451
+ node = Chef::Node.new
452
+ node.automatic_attrs[:platform] = "ubuntu"
453
+ node.automatic_attrs[:platform_version] = "9.10"
454
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
455
+
456
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory")
457
+ expect(filenames).not_to be_nil
458
+ expect(filenames.size).to eq(2)
459
+
460
+ expect(filenames.sort).to eq(['anotherfile1.rb.platform-full-version', 'anotherfile2.rb.platform-full-version'])
461
+ end
462
+
463
+ it "should return a list of relative paths based on priority preference: platform & partial version" do
464
+ node = Chef::Node.new
465
+ node.automatic_attrs[:platform] = "newubuntu"
466
+ node.automatic_attrs[:platform_version] = "9.10"
467
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
468
+
469
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory")
470
+ expect(filenames).not_to be_nil
471
+ expect(filenames.size).to eq(2)
472
+
473
+ expect(filenames.sort).to eq(['anotherfile1.rb.platform-partial-version', 'anotherfile2.rb.platform-partial-version'])
474
+ end
475
+
476
+ it "should return a list of relative paths based on priority preference: platform only" do
477
+ node = Chef::Node.new
478
+ node.automatic_attrs[:platform] = "ubuntu"
479
+ node.automatic_attrs[:platform_version] = "1.0"
480
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
481
+
482
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory")
483
+ expect(filenames).not_to be_nil
484
+ expect(filenames.size).to eq(2)
485
+
486
+ expect(filenames.sort).to eq(['anotherfile1.rb.platform', 'anotherfile2.rb.platform'])
487
+ end
488
+
489
+ it "should return a list of relative paths based on priority preference: default" do
490
+ node = Chef::Node.new
491
+ node.automatic_attrs[:platform] = "notubuntu"
492
+ node.automatic_attrs[:platform_version] = "1.0"
493
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
494
+
495
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory")
496
+ expect(filenames).not_to be_nil
497
+ expect(filenames.size).to eq(2)
498
+
499
+ expect(filenames.sort).to eq(['anotherfile1.rb.default', 'anotherfile2.rb.default'])
500
+ end
501
+
502
+ it "should return a list of relative paths based on priority preference: platform & full version - platform_version variant 1" do
503
+ node = Chef::Node.new
504
+ node.automatic_attrs[:platform] = "fakeos"
505
+ node.automatic_attrs[:platform_version] = "2.0.rc.1"
506
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
507
+
508
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory")
509
+ expect(filenames).not_to be_nil
510
+ expect(filenames.size).to eq(2)
511
+
512
+ expect(filenames.sort).to eq(['anotherfile1.rb.platform-full-version', 'anotherfile2.rb.platform-full-version'])
513
+ end
514
+
515
+ it "should return a list of relative paths based on priority preference: platform & partial version - platform_version variant 1" do
516
+ node = Chef::Node.new
517
+ node.automatic_attrs[:platform] = "newfakeos"
518
+ node.automatic_attrs[:platform_version] = "2.0.rc.1"
519
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
520
+
521
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory")
522
+ expect(filenames).not_to be_nil
523
+ expect(filenames.size).to eq(2)
524
+
525
+ expect(filenames.sort).to eq(['anotherfile1.rb.platform-partial-version', 'anotherfile2.rb.platform-partial-version'])
526
+ end
527
+
528
+ it "should return a list of relative paths based on priority preference: platform & full version - platform_version variant 2" do
529
+ node = Chef::Node.new
530
+ node.automatic_attrs[:platform] = "fakeos"
531
+ node.automatic_attrs[:platform_version] = "maple tree"
532
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
533
+
534
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory")
535
+ expect(filenames).not_to be_nil
536
+ expect(filenames.size).to eq(2)
537
+
538
+ expect(filenames.sort).to eq(['anotherfile1.rb.platform-full-version', 'anotherfile2.rb.platform-full-version'])
539
+ end
540
+
541
+ it "should return a list of relative paths based on priority preference: platform & full version - platform_version variant 3" do
542
+ node = Chef::Node.new
543
+ node.automatic_attrs[:platform] = "fakeos"
544
+ node.automatic_attrs[:platform_version] = "1"
545
+ node.automatic_attrs[:fqdn] = "differenthost.example.org"
546
+
547
+ filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory")
548
+ expect(filenames).not_to be_nil
549
+ expect(filenames.size).to eq(2)
550
+
551
+ expect(filenames.sort).to eq(['anotherfile1.rb.platform-full-version', 'anotherfile2.rb.platform-full-version'])
552
+ end
553
+ end
554
+ end