chef 12.10.24 → 12.11.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (523) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +3 -38
  3. data/Gemfile +6 -11
  4. data/LICENSE +201 -201
  5. data/README.md +11 -1
  6. data/VERSION +1 -1
  7. data/acceptance/.bundle/config +2 -0
  8. data/acceptance/Gemfile.lock +27 -26
  9. data/acceptance/basics/.kitchen/logs/chef-current-install-ubuntu-1404.log +2 -0
  10. data/acceptance/basics/.kitchen/logs/kitchen.log +3 -0
  11. data/acceptance/data-collector/.acceptance/acceptance-cookbook/.gitignore +2 -0
  12. data/acceptance/data-collector/.acceptance/acceptance-cookbook/metadata.rb +3 -0
  13. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/destroy.rb +2 -0
  14. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/provision.rb +2 -0
  15. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/verify.rb +2 -0
  16. data/acceptance/data-collector/.acceptance/data-collector-test/.gitignore +16 -0
  17. data/acceptance/data-collector/.acceptance/data-collector-test/Berksfile +3 -0
  18. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb +85 -0
  19. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/apigemfile +3 -0
  20. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-both-mode.rb +4 -0
  21. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-client-mode.rb +4 -0
  22. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-no-endpoint.rb +2 -0
  23. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-solo-mode.rb +4 -0
  24. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/config.ru +2 -0
  25. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +7 -0
  26. data/acceptance/data-collector/.acceptance/data-collector-test/recipes/default.rb +38 -0
  27. data/acceptance/data-collector/.kitchen.yml +9 -0
  28. data/acceptance/data-collector/Berksfile +3 -0
  29. data/acceptance/data-collector/Berksfile.lock +6 -0
  30. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +251 -0
  31. data/acceptance/fips/.kitchen/logs/fips-integration-centos-6.log +3 -0
  32. data/acceptance/fips/.kitchen/logs/fips-integration-windows-2012r2.log +3 -0
  33. data/acceptance/fips/.kitchen/logs/fips-unit-functional-centos-6.log +3 -0
  34. data/acceptance/fips/.kitchen/logs/fips-unit-functional-windows-2012r2.log +3 -0
  35. data/acceptance/fips/.kitchen/logs/kitchen.log +6 -0
  36. data/acceptance/fips/test/integration/fips-integration/serverspec/fips-integration_spec.rb +2 -1
  37. data/acceptance/top-cookbooks/.kitchen.docker.yml +1 -4
  38. data/acceptance/trivial/.kitchen/logs/chef-current-install-windows-2012r2.log +2 -0
  39. data/acceptance/trivial/.kitchen/logs/kitchen.log +3 -0
  40. data/acceptance/windows-service/.kitchen/logs/chef-windows-service-windows-2012r2.log +2 -0
  41. data/acceptance/windows-service/.kitchen/logs/kitchen.log +3 -0
  42. data/bin/chef-apply +0 -0
  43. data/bin/chef-client +0 -0
  44. data/bin/chef-shell +0 -0
  45. data/bin/chef-solo +0 -0
  46. data/bin/knife +0 -0
  47. data/chef.gemspec +1 -0
  48. data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
  49. data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
  50. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
  51. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
  52. data/distro/common/html/_sources/index.txt +135 -135
  53. data/distro/common/html/_sources/knife.txt +74 -74
  54. data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
  55. data/distro/common/html/_sources/knife_client.txt +150 -150
  56. data/distro/common/html/_sources/knife_common_options.txt +6 -6
  57. data/distro/common/html/_sources/knife_configure.txt +29 -29
  58. data/distro/common/html/_sources/knife_cookbook.txt +236 -236
  59. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
  60. data/distro/common/html/_sources/knife_data_bag.txt +159 -159
  61. data/distro/common/html/_sources/knife_delete.txt +26 -26
  62. data/distro/common/html/_sources/knife_deps.txt +61 -61
  63. data/distro/common/html/_sources/knife_diff.txt +34 -34
  64. data/distro/common/html/_sources/knife_download.txt +44 -44
  65. data/distro/common/html/_sources/knife_edit.txt +26 -26
  66. data/distro/common/html/_sources/knife_environment.txt +158 -158
  67. data/distro/common/html/_sources/knife_exec.txt +47 -47
  68. data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
  69. data/distro/common/html/_sources/knife_list.txt +33 -33
  70. data/distro/common/html/_sources/knife_node.txt +250 -250
  71. data/distro/common/html/_sources/knife_raw.txt +35 -35
  72. data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
  73. data/distro/common/html/_sources/knife_role.txt +157 -157
  74. data/distro/common/html/_sources/knife_search.txt +53 -53
  75. data/distro/common/html/_sources/knife_serve.txt +18 -18
  76. data/distro/common/html/_sources/knife_show.txt +26 -26
  77. data/distro/common/html/_sources/knife_ssh.txt +43 -43
  78. data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
  79. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
  80. data/distro/common/html/_sources/knife_status.txt +37 -37
  81. data/distro/common/html/_sources/knife_tag.txt +69 -69
  82. data/distro/common/html/_sources/knife_upload.txt +49 -49
  83. data/distro/common/html/_sources/knife_user.txt +127 -127
  84. data/distro/common/html/_sources/knife_using.txt +43 -43
  85. data/distro/common/html/_sources/knife_xargs.txt +30 -30
  86. data/distro/common/html/_static/guide.css +504 -504
  87. data/distro/common/html/_static/pygments.css +61 -61
  88. data/distro/common/html/_static/underscore.js +31 -31
  89. data/distro/common/html/ctl_chef_client.html +269 -269
  90. data/distro/common/html/ctl_chef_server.html +727 -727
  91. data/distro/common/html/ctl_chef_shell.html +162 -162
  92. data/distro/common/html/ctl_chef_solo.html +193 -193
  93. data/distro/common/html/index.html +201 -201
  94. data/distro/common/html/knife.html +169 -169
  95. data/distro/common/html/knife_bootstrap.html +284 -284
  96. data/distro/common/html/knife_client.html +284 -284
  97. data/distro/common/html/knife_common_options.html +95 -95
  98. data/distro/common/html/knife_configure.html +104 -104
  99. data/distro/common/html/knife_cookbook.html +486 -486
  100. data/distro/common/html/knife_data_bag.html +373 -373
  101. data/distro/common/html/knife_delete.html +92 -92
  102. data/distro/common/html/knife_deps.html +142 -142
  103. data/distro/common/html/knife_diff.html +122 -122
  104. data/distro/common/html/knife_download.html +144 -144
  105. data/distro/common/html/knife_edit.html +88 -88
  106. data/distro/common/html/knife_environment.html +325 -325
  107. data/distro/common/html/knife_exec.html +219 -219
  108. data/distro/common/html/knife_index_rebuild.html +82 -82
  109. data/distro/common/html/knife_list.html +113 -113
  110. data/distro/common/html/knife_node.html +457 -457
  111. data/distro/common/html/knife_raw.html +109 -109
  112. data/distro/common/html/knife_recipe_list.html +90 -90
  113. data/distro/common/html/knife_role.html +294 -294
  114. data/distro/common/html/knife_search.html +202 -202
  115. data/distro/common/html/knife_serve.html +78 -78
  116. data/distro/common/html/knife_show.html +103 -103
  117. data/distro/common/html/knife_ssh.html +176 -176
  118. data/distro/common/html/knife_ssl_check.html +150 -150
  119. data/distro/common/html/knife_ssl_fetch.html +150 -150
  120. data/distro/common/html/knife_status.html +143 -143
  121. data/distro/common/html/knife_tag.html +137 -137
  122. data/distro/common/html/knife_upload.html +152 -152
  123. data/distro/common/html/knife_user.html +241 -241
  124. data/distro/common/html/knife_using.html +209 -209
  125. data/distro/common/html/knife_xargs.html +121 -121
  126. data/distro/common/html/search.html +81 -81
  127. data/distro/common/man/man1/README.md +58 -58
  128. data/distro/common/man/man1/chef-shell.1 +194 -194
  129. data/distro/common/man/man1/knife-bootstrap.1 +215 -215
  130. data/distro/common/man/man1/knife-client.1 +443 -443
  131. data/distro/common/man/man1/knife-configure.1 +161 -161
  132. data/distro/common/man/man1/knife-cookbook.1 +770 -770
  133. data/distro/common/man/man1/knife-data-bag.1 +617 -617
  134. data/distro/common/man/man1/knife-delete.1 +127 -127
  135. data/distro/common/man/man1/knife-deps.1 +246 -246
  136. data/distro/common/man/man1/knife-diff.1 +226 -226
  137. data/distro/common/man/man1/knife-download.1 +258 -258
  138. data/distro/common/man/man1/knife-edit.1 +121 -121
  139. data/distro/common/man/man1/knife-environment.1 +508 -508
  140. data/distro/common/man/man1/knife-exec.1 +362 -362
  141. data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
  142. data/distro/common/man/man1/knife-list.1 +174 -174
  143. data/distro/common/man/man1/knife-node.1 +716 -716
  144. data/distro/common/man/man1/knife-raw.1 +172 -172
  145. data/distro/common/man/man1/knife-recipe-list.1 +85 -85
  146. data/distro/common/man/man1/knife-role.1 +426 -426
  147. data/distro/common/man/man1/knife-search.1 +359 -359
  148. data/distro/common/man/man1/knife-serve.1 +109 -109
  149. data/distro/common/man/man1/knife-show.1 +160 -160
  150. data/distro/common/man/man1/knife-ssh.1 +284 -284
  151. data/distro/common/man/man1/knife-ssl-check.1 +207 -207
  152. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
  153. data/distro/common/man/man1/knife-status.1 +234 -234
  154. data/distro/common/man/man1/knife-tag.1 +189 -189
  155. data/distro/common/man/man1/knife-upload.1 +280 -280
  156. data/distro/common/man/man1/knife-user.1 +356 -356
  157. data/distro/common/man/man1/knife-xargs.1 +189 -189
  158. data/distro/common/man/man1/knife.1 +332 -332
  159. data/distro/common/man/man8/chef-apply.8 +86 -86
  160. data/distro/common/man/man8/chef-client.8 +398 -398
  161. data/distro/common/man/man8/chef-solo.8 +260 -260
  162. data/distro/common/markdown/README +3 -3
  163. data/lib/chef/application.rb +14 -9
  164. data/lib/chef/application/apply.rb +5 -5
  165. data/lib/chef/application/client.rb +3 -3
  166. data/lib/chef/application/exit_code.rb +226 -0
  167. data/lib/chef/application/solo.rb +37 -7
  168. data/lib/chef/application/windows_service.rb +3 -3
  169. data/lib/chef/chef_fs/command_line.rb +7 -0
  170. data/lib/chef/chef_fs/config.rb +1 -1
  171. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +11 -10
  172. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  173. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  174. data/lib/chef/chef_fs/file_system.rb +15 -13
  175. data/lib/chef/chef_fs/file_system/base_fs_object.rb +4 -0
  176. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +1 -1
  177. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +9 -0
  178. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +6 -0
  179. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -0
  180. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +1 -1
  181. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +1 -1
  182. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +4 -0
  183. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +4 -0
  184. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +4 -0
  185. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +4 -0
  186. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +3 -3
  187. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +15 -4
  188. data/lib/chef/chef_fs/file_system/exceptions.rb +7 -0
  189. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +2 -2
  190. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
  191. data/lib/chef/chef_fs/file_system/repository/acl.rb +7 -0
  192. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +0 -4
  193. data/lib/chef/chef_fs/file_system/repository/base_file.rb +36 -4
  194. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +4 -0
  195. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +0 -4
  196. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +0 -3
  197. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +0 -4
  198. data/lib/chef/chef_fs/file_system/repository/directory.rb +4 -0
  199. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +0 -4
  200. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +0 -4
  201. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +0 -4
  202. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +0 -4
  203. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +0 -4
  204. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +0 -4
  205. data/lib/chef/client.rb +11 -3
  206. data/lib/chef/config_fetcher.rb +4 -4
  207. data/lib/chef/cookbook/gem_installer.rb +1 -0
  208. data/lib/chef/cookbook/synchronizer.rb +1 -1
  209. data/lib/chef/data_bag.rb +2 -2
  210. data/lib/chef/data_bag_item.rb +1 -1
  211. data/lib/chef/data_collector.rb +345 -0
  212. data/lib/chef/data_collector/messages.rb +125 -0
  213. data/lib/chef/data_collector/messages/helpers.rb +161 -0
  214. data/lib/chef/data_collector/resource_report.rb +84 -0
  215. data/lib/chef/decorator.rb +81 -0
  216. data/lib/chef/decorator/lazy.rb +60 -0
  217. data/lib/chef/decorator/lazy_array.rb +59 -0
  218. data/lib/chef/deprecation/provider/remote_file.rb +1 -1
  219. data/lib/chef/dsl/core.rb +19 -11
  220. data/lib/chef/dsl/platform_introspection.rb +16 -0
  221. data/lib/chef/dsl/recipe.rb +15 -9
  222. data/lib/chef/dsl/universal.rb +50 -0
  223. data/lib/chef/environment.rb +2 -2
  224. data/lib/chef/exceptions.rb +19 -4
  225. data/lib/chef/handler.rb +33 -0
  226. data/lib/chef/knife/cookbook_show.rb +6 -10
  227. data/lib/chef/knife/cookbook_site_install.rb +7 -2
  228. data/lib/chef/knife/help_topics.rb +4 -4
  229. data/lib/chef/knife/list.rb +1 -2
  230. data/lib/chef/knife/ssl_check.rb +2 -1
  231. data/lib/chef/monkey_patches/win32/registry.rb +11 -0
  232. data/lib/chef/nil_argument.rb +3 -3
  233. data/lib/chef/node.rb +2 -2
  234. data/lib/chef/platform/rebooter.rb +13 -2
  235. data/lib/chef/policy_builder/dynamic.rb +1 -1
  236. data/lib/chef/policy_builder/expand_node_object.rb +3 -3
  237. data/lib/chef/policy_builder/policyfile.rb +1 -1
  238. data/lib/chef/provider/git.rb +43 -41
  239. data/lib/chef/provider/lwrp_base.rb +0 -1
  240. data/lib/chef/provider/osx_profile.rb +2 -3
  241. data/lib/chef/provider/package.rb +51 -13
  242. data/lib/chef/provider/package/apt.rb +97 -103
  243. data/lib/chef/provider/package/chocolatey.rb +9 -10
  244. data/lib/chef/provider/package/dpkg.rb +2 -2
  245. data/lib/chef/provider/package/portage.rb +1 -1
  246. data/lib/chef/provider/package/rubygems.rb +8 -12
  247. data/lib/chef/provider/package/yum.rb +4 -959
  248. data/lib/chef/provider/package/yum/rpm_utils.rb +642 -0
  249. data/lib/chef/provider/package/{yum-dump.py → yum/yum-dump.py} +0 -0
  250. data/lib/chef/provider/package/yum/yum_cache.rb +376 -0
  251. data/lib/chef/provider/resource_update.rb +52 -52
  252. data/lib/chef/provider/systemd_unit.rb +238 -0
  253. data/lib/chef/providers.rb +1 -0
  254. data/lib/chef/reserved_names.rb +9 -9
  255. data/lib/chef/resource.rb +2 -7
  256. data/lib/chef/resource/file.rb +6 -1
  257. data/lib/chef/resource/systemd_unit.rb +63 -0
  258. data/lib/chef/resources.rb +1 -0
  259. data/lib/chef/sandbox.rb +20 -20
  260. data/lib/chef/shell/shell_session.rb +3 -3
  261. data/lib/chef/version.rb +1 -1
  262. data/lib/chef/win32/system.rb +0 -0
  263. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  264. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  265. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  266. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  267. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  268. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  269. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  270. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  271. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  272. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  273. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  274. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  275. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +0 -0
  276. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  277. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  278. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  279. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  280. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  281. data/spec/data/apt/var/www/apt/db/version +4 -4
  282. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  283. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  284. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  285. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  286. data/spec/data/bootstrap/no_proxy.erb +2 -2
  287. data/spec/data/bootstrap/secret.erb +9 -9
  288. data/spec/data/bootstrap/test-hints.erb +12 -12
  289. data/spec/data/bootstrap/test.erb +1 -1
  290. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  291. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  292. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  293. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  294. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  295. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  296. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  297. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  298. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  299. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  300. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  301. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  302. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  303. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  304. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  305. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  306. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  307. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  308. data/spec/data/config.rb +6 -6
  309. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  310. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  311. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  312. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  313. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  314. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  315. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  316. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  317. data/spec/data/cookbooks/chefignore +8 -8
  318. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  319. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  320. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  321. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  322. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  323. data/spec/data/cookbooks/java/metadata.rb +2 -2
  324. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  325. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  326. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  327. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  328. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  329. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  330. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  331. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  332. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  333. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  334. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  335. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  336. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  337. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  338. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  339. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  340. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  341. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  342. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  343. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  344. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  345. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  346. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  347. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  348. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  349. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  350. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  351. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  352. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  353. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  354. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  355. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  356. data/spec/data/definitions/test.rb +4 -4
  357. data/spec/data/environment-config.rb +4 -4
  358. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  359. data/spec/data/fileedit/hosts +4 -4
  360. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  361. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  362. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  363. data/spec/data/kitchen/chefignore +6 -6
  364. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  365. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  366. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  367. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  368. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  369. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  370. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  371. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  372. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  373. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  374. data/spec/data/lwrp/providers/inline_compiler.rb +26 -26
  375. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  376. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  377. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  378. data/spec/data/lwrp/resources/foo.rb +4 -4
  379. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  380. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  381. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  382. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  383. data/spec/data/mac_users/10.7.plist.xml +559 -559
  384. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  385. data/spec/data/mac_users/10.8.plist.xml +559 -559
  386. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  387. data/spec/data/mac_users/10.9.plist.xml +560 -560
  388. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  389. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  390. data/spec/data/nodes/default.rb +15 -15
  391. data/spec/data/nodes/test.example.com.rb +17 -17
  392. data/spec/data/nodes/test.rb +15 -15
  393. data/spec/data/null_config.rb +1 -1
  394. data/spec/data/object_loader/environments/test.json +7 -7
  395. data/spec/data/object_loader/environments/test.rb +2 -2
  396. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  397. data/spec/data/object_loader/nodes/test.json +7 -7
  398. data/spec/data/object_loader/nodes/test.rb +2 -2
  399. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  400. data/spec/data/object_loader/roles/test.json +7 -7
  401. data/spec/data/object_loader/roles/test.rb +2 -2
  402. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  403. data/spec/data/partial_one.erb +1 -1
  404. data/spec/data/recipes/test.rb +7 -7
  405. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -4
  406. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  407. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  408. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  409. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  410. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  411. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -3
  412. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  413. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  414. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  415. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  416. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  417. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  418. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  419. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -3
  420. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  421. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  422. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  423. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  424. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -3
  425. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  426. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  427. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  428. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  429. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -3
  430. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  431. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  432. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  433. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -3
  434. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  435. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  436. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  437. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  438. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  439. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -3
  440. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  441. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  442. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  443. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  444. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  445. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  446. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  447. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  448. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  449. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  450. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  451. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  452. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  453. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  454. data/spec/data/run_context/nodes/run_context.rb +5 -5
  455. data/spec/data/search_queries_to_transform.txt +98 -98
  456. data/spec/data/shef-config.rb +10 -10
  457. data/spec/data/ssl/5e707473.0 +18 -18
  458. data/spec/data/ssl/chef-rspec.cert +27 -27
  459. data/spec/data/ssl/chef-rspec.key +27 -27
  460. data/spec/data/ssl/key.pem +15 -15
  461. data/spec/data/ssl/private_key.pem +27 -27
  462. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  463. data/spec/data/standalone_cookbook/chefignore +9 -9
  464. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  465. data/spec/data/trusted_certs/example.crt +22 -22
  466. data/spec/data/trusted_certs/intermediate.pem +27 -27
  467. data/spec/data/trusted_certs/root.pem +22 -22
  468. data/spec/functional/assets/chefinittest +34 -34
  469. data/spec/functional/assets/testchefsubsys +10 -10
  470. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +0 -0
  471. data/spec/functional/resource/aix_service_spec.rb +0 -0
  472. data/spec/functional/resource/aixinit_service_spec.rb +0 -0
  473. data/spec/functional/resource/chocolatey_package_spec.rb +0 -5
  474. data/spec/functional/resource/env_spec.rb +0 -0
  475. data/spec/functional/win32/registry_spec.rb +1 -0
  476. data/spec/integration/client/exit_code_spec.rb +245 -0
  477. data/spec/integration/knife/deps_spec.rb +7 -7
  478. data/spec/integration/knife/download_spec.rb +19 -0
  479. data/spec/integration/knife/list_spec.rb +0 -8
  480. data/spec/integration/knife/upload_spec.rb +21 -2
  481. data/spec/integration/solo/solo_spec.rb +1 -1
  482. data/spec/rcov.opts +2 -2
  483. data/spec/unit/application/apply_spec.rb +6 -4
  484. data/spec/unit/application/exit_code_spec.rb +231 -0
  485. data/spec/unit/application/solo_spec.rb +143 -88
  486. data/spec/unit/chef_fs/config_spec.rb +129 -0
  487. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +8 -10
  488. data/spec/unit/client_spec.rb +1 -1
  489. data/spec/unit/config_fetcher_spec.rb +2 -2
  490. data/spec/unit/cookbook/synchronizer_spec.rb +1 -1
  491. data/spec/unit/data_bag_item_spec.rb +2 -2
  492. data/spec/unit/data_bag_spec.rb +2 -2
  493. data/spec/unit/data_collector/messages/helpers_spec.rb +190 -0
  494. data/spec/unit/data_collector/messages_spec.rb +207 -0
  495. data/spec/unit/data_collector_spec.rb +525 -0
  496. data/spec/unit/decorator/lazy_array_spec.rb +58 -0
  497. data/spec/unit/decorator/lazy_spec.rb +39 -0
  498. data/spec/unit/decorator_spec.rb +142 -0
  499. data/spec/unit/environment_spec.rb +4 -4
  500. data/spec/unit/handler_spec.rb +87 -0
  501. data/spec/unit/knife/cookbook_show_spec.rb +89 -90
  502. data/spec/unit/knife/ssl_check_spec.rb +16 -0
  503. data/spec/unit/policy_builder/dynamic_spec.rb +1 -1
  504. data/spec/unit/policy_builder/policyfile_spec.rb +1 -1
  505. data/spec/unit/provider/git_spec.rb +77 -18
  506. data/spec/unit/provider/package/apt_spec.rb +97 -34
  507. data/spec/unit/provider/package/chocolatey_spec.rb +3 -15
  508. data/spec/unit/provider/package/portage_spec.rb +6 -0
  509. data/spec/unit/provider/package/rubygems_spec.rb +38 -4
  510. data/spec/unit/provider/package/yum/yum_cache_spec.rb +27 -0
  511. data/spec/unit/provider/package_spec.rb +20 -7
  512. data/spec/unit/provider/systemd_unit_spec.rb +885 -0
  513. data/spec/unit/resource/systemd_unit_spec.rb +133 -0
  514. data/spec/unit/resource_builder_spec.rb +1 -1
  515. data/tasks/bin/bundle-platform +6 -2
  516. data/tasks/bin/bundle-platform.bat +0 -0
  517. data/tasks/bin/create-override-gemfile +0 -0
  518. data/tasks/bin/run_external_test +0 -0
  519. data/tasks/bundle_util.rb +18 -2
  520. data/tasks/changelog.rb +1 -0
  521. data/tasks/dependencies.rb +47 -57
  522. metadata +847 -7
  523. data/tasks/bin/run_chef_tests +0 -17
@@ -0,0 +1,58 @@
1
+ #
2
+ # Author:: Lamont Granquist (<lamont@chef.io>)
3
+ # Copyright:: Copyright 2015-2016, Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require "spec_helper"
20
+
21
+ describe Chef::Decorator::LazyArray do
22
+ def foo
23
+ @foo ||= 1
24
+ end
25
+
26
+ def bar
27
+ @bar ||= 2
28
+ end
29
+
30
+ let(:decorator) do
31
+ Chef::Decorator::LazyArray.new { [ foo, bar ] }
32
+ end
33
+
34
+ it "behaves like an array" do
35
+ expect(decorator[0]).to eql(1)
36
+ expect(decorator[1]).to eql(2)
37
+ end
38
+
39
+ it "accessing the array elements is lazy" do
40
+ expect(decorator[0].class).to eql(Chef::Decorator::Lazy)
41
+ expect(decorator[1].class).to eql(Chef::Decorator::Lazy)
42
+ expect(@foo).to be nil
43
+ expect(@bar).to be nil
44
+ end
45
+
46
+ it "calling a method on the array element runs the proc (and both elements are autovivified)" do
47
+ expect(decorator[0].nil?).to be false
48
+ expect(@foo).to equal(1)
49
+ expect(@bar).to equal(2)
50
+ end
51
+
52
+ it "if we loop over the elements and do nothing then its not lazy" do
53
+ # we don't know how many elements there are unless we evaluate the proc
54
+ decorator.each { |i| }
55
+ expect(@foo).to equal(1)
56
+ expect(@bar).to equal(2)
57
+ end
58
+ end
@@ -0,0 +1,39 @@
1
+ #
2
+ # Author:: Lamont Granquist (<lamont@chef.io>)
3
+ # Copyright:: Copyright 2015-2016, Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require "spec_helper"
20
+
21
+ describe Chef::Decorator::Lazy do
22
+ let(:decorator) do
23
+ @a = 0
24
+ Chef::Decorator::Lazy.new { @a = @a + 1 }
25
+ end
26
+
27
+ it "decorates an object" do
28
+ expect(decorator.even?).to be false
29
+ end
30
+
31
+ it "the proc runs and does work" do
32
+ expect(decorator).to eql(1)
33
+ end
34
+
35
+ it "creating the decorator does not cause the proc to run" do
36
+ decorator
37
+ expect(@a).to eql(0)
38
+ end
39
+ end
@@ -0,0 +1,142 @@
1
+ #
2
+ # Author:: Lamont Granquist (<lamont@chef.io>)
3
+ # Copyright:: Copyright 2015-2016, Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require "spec_helper"
20
+
21
+ def impersonates_a(klass)
22
+ it "#is_a?(#{klass}) is true" do
23
+ expect(decorator.is_a?(klass)).to be true
24
+ end
25
+
26
+ it "#is_a?(Chef::Decorator) is true" do
27
+ expect(decorator.is_a?(Chef::Decorator)).to be true
28
+ end
29
+
30
+ it "#kind_of?(#{klass}) is true" do
31
+ expect(decorator.kind_of?(klass)).to be true
32
+ end
33
+
34
+ it "#kind_of?(Chef::Decorator) is true" do
35
+ expect(decorator.kind_of?(Chef::Decorator)).to be true
36
+ end
37
+
38
+ it "#instance_of?(#{klass}) is false" do
39
+ expect(decorator.instance_of?(klass)).to be false
40
+ end
41
+
42
+ it "#instance_of?(Chef::Decorator) is true" do
43
+ expect(decorator.instance_of?(Chef::Decorator)).to be true
44
+ end
45
+
46
+ it "#class is Chef::Decorator" do
47
+ expect(decorator.class).to eql(Chef::Decorator)
48
+ end
49
+ end
50
+
51
+ describe Chef::Decorator do
52
+ let(:obj) {}
53
+ let(:decorator) { Chef::Decorator.new(obj) }
54
+
55
+ context "when the obj is a string" do
56
+ let(:obj) { "STRING" }
57
+
58
+ impersonates_a(String)
59
+
60
+ it "#nil? is false" do
61
+ expect(decorator.nil?).to be false
62
+ end
63
+
64
+ it "!! is true" do
65
+ expect(!!decorator).to be true
66
+ end
67
+
68
+ it "dup returns a decorator" do
69
+ expect(decorator.dup.class).to be Chef::Decorator
70
+ end
71
+
72
+ it "dup dup's the underlying thing" do
73
+ expect(decorator.dup.__getobj__).not_to equal(decorator.__getobj__)
74
+ end
75
+ end
76
+
77
+ context "when the obj is a nil" do
78
+ let(:obj) { nil }
79
+
80
+ it "#nil? is true" do
81
+ expect(decorator.nil?).to be true
82
+ end
83
+
84
+ it "!! is false" do
85
+ expect(!!decorator).to be false
86
+ end
87
+
88
+ impersonates_a(NilClass)
89
+ end
90
+
91
+ context "when the obj is an empty Hash" do
92
+ let(:obj) { {} }
93
+
94
+ impersonates_a(Hash)
95
+
96
+ it "formats it correctly through ffi-yajl and not the JSON gem" do
97
+ # this relies on a quirk of pretty formatting whitespace between yajl and ruby's JSON
98
+ expect(FFI_Yajl::Encoder.encode(decorator, pretty: true)).to eql("{\n\n}\n")
99
+ end
100
+ end
101
+
102
+ context "whent he obj is a Hash with elements" do
103
+ let(:obj) { { foo: "bar", baz: "qux" } }
104
+
105
+ impersonates_a(Hash)
106
+
107
+ it "dup is shallow on the Hash" do
108
+ expect(decorator.dup[:baz]).to equal(decorator[:baz])
109
+ end
110
+
111
+ it "deep mutating the dup'd hash mutates the origin" do
112
+ decorator.dup[:baz] << "qux"
113
+ expect(decorator[:baz]).to eql("quxqux")
114
+ end
115
+ end
116
+
117
+ context "memoizing methods" do
118
+ let(:obj) { {} }
119
+
120
+ it "calls method_missing only once" do
121
+ expect(decorator).to receive(:method_missing).once.and_call_original
122
+ expect(decorator.keys).to eql([])
123
+ expect(decorator.keys).to eql([])
124
+ end
125
+
126
+ it "switching a Hash to an Array responds to keys then does not" do
127
+ expect(decorator.respond_to?(:keys)).to be true
128
+ expect(decorator.keys).to eql([])
129
+ decorator.__setobj__([])
130
+ expect(decorator.respond_to?(:keys)).to be false
131
+ expect { decorator.keys }.to raise_error(NoMethodError)
132
+ end
133
+
134
+ it "memoization of methods happens on the instances, not the classes" do
135
+ decorator2 = Chef::Decorator.new([])
136
+ expect(decorator.respond_to?(:keys)).to be true
137
+ expect(decorator.keys).to eql([])
138
+ expect(decorator2.respond_to?(:keys)).to be false
139
+ expect { decorator2.keys }.to raise_error(NoMethodError)
140
+ end
141
+ end
142
+ end
@@ -288,11 +288,11 @@ describe Chef::Environment do
288
288
 
289
289
  describe "in solo mode" do
290
290
  before do
291
- Chef::Config[:solo] = true
291
+ Chef::Config[:solo_legacy_mode] = true
292
292
  end
293
293
 
294
294
  after do
295
- Chef::Config[:solo] = false
295
+ Chef::Config[:solo_legacy_mode] = false
296
296
  end
297
297
 
298
298
  it "should raise and exception" do
@@ -392,12 +392,12 @@ describe Chef::Environment do
392
392
  describe "when loading" do
393
393
  describe "in solo mode" do
394
394
  before do
395
- Chef::Config[:solo] = true
395
+ Chef::Config[:solo_legacy_mode] = true
396
396
  Chef::Config[:environment_path] = "/var/chef/environments"
397
397
  end
398
398
 
399
399
  after do
400
- Chef::Config[:solo] = false
400
+ Chef::Config[:solo_legacy_mode] = false
401
401
  end
402
402
 
403
403
  it "should get the environment from the environment_path" do
@@ -212,4 +212,91 @@ describe Chef::Handler do
212
212
  end
213
213
  end
214
214
 
215
+ describe "library report handler" do
216
+ before do
217
+ # we need to lazily declare this after we have reset Chef::Config in the default rspec before handler
218
+ class MyTestHandler < Chef::Handler
219
+ handler_for :report, :exception, :start
220
+
221
+ class << self
222
+ attr_accessor :ran_report
223
+ end
224
+
225
+ def report
226
+ self.class.ran_report = true
227
+ end
228
+ end
229
+ end
230
+
231
+ it "gets added to Chef::Config[:report_handlers]" do
232
+ expect(Chef::Config[:report_handlers].include?(MyTestHandler)).to be true
233
+ end
234
+
235
+ it "gets added to Chef::Config[:exception_handlers]" do
236
+ expect(Chef::Config[:exception_handlers].include?(MyTestHandler)).to be true
237
+ end
238
+
239
+ it "gets added to Chef::Config[:start_handlers]" do
240
+ expect(Chef::Config[:start_handlers].include?(MyTestHandler)).to be true
241
+ end
242
+
243
+ it "runs the report handler" do
244
+ Chef::Handler.run_report_handlers(@run_status)
245
+ expect(MyTestHandler.ran_report).to be true
246
+ end
247
+
248
+ it "runs the exception handler" do
249
+ Chef::Handler.run_exception_handlers(@run_status)
250
+ expect(MyTestHandler.ran_report).to be true
251
+ end
252
+
253
+ it "runs the start handler" do
254
+ Chef::Handler.run_start_handlers(@run_status)
255
+ expect(MyTestHandler.ran_report).to be true
256
+ end
257
+ end
258
+
259
+ describe "library singleton report handler" do
260
+ before do
261
+ # we need to lazily declare this after we have reset Chef::Config in the default rspec before handler
262
+ class MyTestHandler < Chef::Handler
263
+ handler_for :report, :exception, :start
264
+
265
+ include Singleton
266
+
267
+ attr_accessor :ran_report
268
+
269
+ def report
270
+ self.ran_report = true
271
+ end
272
+ end
273
+ end
274
+
275
+ it "gets added to Chef::Config[:report_handlers]" do
276
+ expect(Chef::Config[:report_handlers].include?(MyTestHandler)).to be true
277
+ end
278
+
279
+ it "gets added to Chef::Config[:exception_handlers]" do
280
+ expect(Chef::Config[:exception_handlers].include?(MyTestHandler)).to be true
281
+ end
282
+
283
+ it "gets added to Chef::Config[:start_handlers]" do
284
+ expect(Chef::Config[:start_handlers].include?(MyTestHandler)).to be true
285
+ end
286
+
287
+ it "runs the report handler" do
288
+ Chef::Handler.run_report_handlers(@run_status)
289
+ expect(MyTestHandler.instance.ran_report).to be true
290
+ end
291
+
292
+ it "runs the exception handler" do
293
+ Chef::Handler.run_exception_handlers(@run_status)
294
+ expect(MyTestHandler.instance.ran_report).to be true
295
+ end
296
+
297
+ it "runs the start handler" do
298
+ Chef::Handler.run_start_handlers(@run_status)
299
+ expect(MyTestHandler.instance.ran_report).to be true
300
+ end
301
+ end
215
302
  end
@@ -20,30 +20,57 @@
20
20
  require "spec_helper"
21
21
 
22
22
  describe Chef::Knife::CookbookShow do
23
- before(:each) do
23
+ before do
24
24
  Chef::Config[:node_name] = "webmonkey.example.com"
25
- @knife = Chef::Knife::CookbookShow.new
26
- @knife.config = {}
27
- @knife.name_args = [ "cookbook_name" ]
28
- @rest = double(Chef::ServerAPI)
29
- allow(@knife).to receive(:rest).and_return(@rest)
30
- allow(@knife).to receive(:pretty_print).and_return(true)
31
- allow(@knife).to receive(:output).and_return(true)
25
+ allow(knife).to receive(:rest).and_return(rest)
26
+ allow(knife).to receive(:pretty_print).and_return(true)
27
+ allow(knife).to receive(:output).and_return(true)
28
+ allow(Chef::CookbookVersion).to receive(:load).and_return(cb)
29
+ end
30
+
31
+ let (:knife) do
32
+ knife = Chef::Knife::CookbookShow.new
33
+ knife.config = {}
34
+ knife.name_args = [ "cookbook_name" ]
35
+ knife
36
+ end
37
+
38
+ let (:cb) do
39
+ cb = Chef::CookbookVersion.new("cookbook_name")
40
+ cb.manifest = manifest
41
+ cb
42
+ end
43
+
44
+ let (:rest) { double(Chef::ServerAPI) }
45
+
46
+ let (:content) { "Example recipe text" }
47
+
48
+ let (:manifest) do
49
+ {
50
+ "recipes" => [
51
+ {
52
+ :name => "default.rb",
53
+ :path => "recipes/default.rb",
54
+ :checksum => "1234",
55
+ :url => "http://example.org/files/default.rb",
56
+ },
57
+ ],
58
+ }
32
59
  end
33
60
 
34
61
  describe "run" do
35
62
  describe "with 0 arguments: help" do
36
63
  it "should should print usage and exit when given no arguments" do
37
- @knife.name_args = []
38
- expect(@knife).to receive(:show_usage)
39
- expect(@knife.ui).to receive(:fatal)
40
- expect { @knife.run }.to raise_error(SystemExit)
64
+ knife.name_args = []
65
+ expect(knife).to receive(:show_usage)
66
+ expect(knife.ui).to receive(:fatal)
67
+ expect { knife.run }.to raise_error(SystemExit)
41
68
  end
42
69
  end
43
70
 
44
71
  describe "with 1 argument: versions" do
45
- before(:each) do
46
- @response = {
72
+ let (:response) do
73
+ {
47
74
  "cookbook_name" => {
48
75
  "url" => "http://url/cookbooks/cookbook_name",
49
76
  "versions" => [
@@ -56,87 +83,60 @@ describe Chef::Knife::CookbookShow do
56
83
  end
57
84
 
58
85
  it "should show the raw cookbook data" do
59
- expect(@rest).to receive(:get).with("cookbooks/cookbook_name").and_return(@response)
60
- expect(@knife).to receive(:format_cookbook_list_for_display).with(@response)
61
- @knife.run
86
+ expect(rest).to receive(:get).with("cookbooks/cookbook_name").and_return(response)
87
+ expect(knife).to receive(:format_cookbook_list_for_display).with(response)
88
+ knife.run
62
89
  end
63
90
 
64
91
  it "should respect the user-supplied environment" do
65
- @knife.config[:environment] = "foo"
66
- expect(@rest).to receive(:get).with("environments/foo/cookbooks/cookbook_name").and_return(@response)
67
- expect(@knife).to receive(:format_cookbook_list_for_display).with(@response)
68
- @knife.run
92
+ knife.config[:environment] = "foo"
93
+ expect(rest).to receive(:get).with("environments/foo/cookbooks/cookbook_name").and_return(response)
94
+ expect(knife).to receive(:format_cookbook_list_for_display).with(response)
95
+ knife.run
69
96
  end
70
97
  end
71
98
 
72
99
  describe "with 2 arguments: name and version" do
73
- before(:each) do
74
- @knife.name_args << "0.1.0"
75
- @response = { "0.1.0" => { "recipes" => { "default.rb" => "" } } }
100
+ before do
101
+ knife.name_args << "0.1.0"
76
102
  end
77
103
 
78
104
  it "should show the specific part of a cookbook" do
79
- expect(@rest).to receive(:get).with("cookbooks/cookbook_name/0.1.0").and_return(@response)
80
- expect(@knife).to receive(:output).with(@response)
81
- @knife.run
105
+ expect(Chef::CookbookVersion).to receive(:load).with("cookbook_name", "0.1.0").and_return(cb)
106
+ expect(knife).to receive(:output).with(cb)
107
+ knife.run
82
108
  end
83
109
  end
84
110
 
85
111
  describe "with 3 arguments: name, version, and segment" do
86
112
  before(:each) do
87
- @knife.name_args = [ "cookbook_name", "0.1.0", "recipes" ]
88
- @cookbook_response = Chef::CookbookVersion.new("cookbook_name")
89
- @manifest = {
90
- "recipes" => [
91
- {
92
- :name => "default.rb",
93
- :path => "recipes/default.rb",
94
- :checksum => "1234",
95
- :url => "http://example.org/files/default.rb",
96
- },
97
- ],
98
- }
99
- @cookbook_response.manifest = @manifest
100
- @response = { "name" => "default.rb", "url" => "http://example.org/files/default.rb", "checksum" => "1234", "path" => "recipes/default.rb" }
113
+ knife.name_args = [ "cookbook_name", "0.1.0", "recipes" ]
101
114
  end
102
115
 
103
116
  it "should print the json of the part" do
104
- expect(@rest).to receive(:get).with("cookbooks/cookbook_name/0.1.0").and_return(@cookbook_response)
105
- expect(@knife).to receive(:output).with(@cookbook_response.manifest["recipes"])
106
- @knife.run
117
+ expect(Chef::CookbookVersion).to receive(:load).with("cookbook_name", "0.1.0").and_return(cb)
118
+ expect(knife).to receive(:output).with(cb.manifest["recipes"])
119
+ knife.run
107
120
  end
108
121
  end
109
122
 
110
123
  describe "with 4 arguments: name, version, segment and filename" do
111
124
  before(:each) do
112
- @knife.name_args = [ "cookbook_name", "0.1.0", "recipes", "default.rb" ]
113
- @cookbook_response = Chef::CookbookVersion.new("cookbook_name")
114
- @cookbook_response.manifest = {
115
- "recipes" => [
116
- {
117
- :name => "default.rb",
118
- :path => "recipes/default.rb",
119
- :checksum => "1234",
120
- :url => "http://example.org/files/default.rb",
121
- },
122
- ],
123
- }
124
- @response = "Example recipe text"
125
+ knife.name_args = [ "cookbook_name", "0.1.0", "recipes", "default.rb" ]
125
126
  end
126
127
 
127
128
  it "should print the raw result of the request (likely a file!)" do
128
- expect(@rest).to receive(:get).with("cookbooks/cookbook_name/0.1.0").and_return(@cookbook_response)
129
- expect(@rest).to receive(:streaming_request).with("http://example.org/files/default.rb").and_return(StringIO.new(@response))
130
- expect(@knife).to receive(:pretty_print).with(@response)
131
- @knife.run
129
+ expect(Chef::CookbookVersion).to receive(:load).with("cookbook_name", "0.1.0").and_return(cb)
130
+ expect(rest).to receive(:streaming_request).with("http://example.org/files/default.rb").and_return(StringIO.new(content))
131
+ expect(knife).to receive(:pretty_print).with(content)
132
+ knife.run
132
133
  end
133
134
  end
134
135
 
135
136
  describe "with 4 arguments: name, version, segment and filename -- with specificity" do
136
137
  before(:each) do
137
- @knife.name_args = [ "cookbook_name", "0.1.0", "files", "afile.rb" ]
138
- @cookbook_response = Chef::CookbookVersion.new("cookbook_name")
139
- @cookbook_response.manifest = {
138
+ knife.name_args = [ "cookbook_name", "0.1.0", "files", "afile.rb" ]
139
+ cb.manifest = {
140
140
  "files" => [
141
141
  {
142
142
  :name => "afile.rb",
@@ -169,51 +169,50 @@ describe Chef::Knife::CookbookShow do
169
169
  ],
170
170
  }
171
171
 
172
- @response = "Example recipe text"
173
172
  end
174
173
 
175
174
  describe "with --fqdn" do
176
175
  it "should pass the fqdn" do
177
- @knife.config[:platform] = "example_platform"
178
- @knife.config[:platform_version] = "1.0"
179
- @knife.config[:fqdn] = "examplehost.example.org"
180
- expect(@rest).to receive(:get).with("cookbooks/cookbook_name/0.1.0").and_return(@cookbook_response)
181
- expect(@rest).to receive(:streaming_request).with("http://example.org/files/1111").and_return(StringIO.new(@response))
182
- expect(@knife).to receive(:pretty_print).with(@response)
183
- @knife.run
176
+ knife.config[:platform] = "example_platform"
177
+ knife.config[:platform_version] = "1.0"
178
+ knife.config[:fqdn] = "examplehost.example.org"
179
+ expect(Chef::CookbookVersion).to receive(:load).with("cookbook_name", "0.1.0").and_return(cb)
180
+ expect(rest).to receive(:streaming_request).with("http://example.org/files/1111").and_return(StringIO.new(content))
181
+ expect(knife).to receive(:pretty_print).with(content)
182
+ knife.run
184
183
  end
185
184
  end
186
185
 
187
186
  describe "and --platform" do
188
187
  it "should pass the platform" do
189
- @knife.config[:platform] = "ubuntu"
190
- @knife.config[:platform_version] = "1.0"
191
- @knife.config[:fqdn] = "differenthost.example.org"
192
- expect(@rest).to receive(:get).with("cookbooks/cookbook_name/0.1.0").and_return(@cookbook_response)
193
- expect(@rest).to receive(:streaming_request).with("http://example.org/files/3333").and_return(StringIO.new(@response))
194
- expect(@knife).to receive(:pretty_print).with(@response)
195
- @knife.run
188
+ knife.config[:platform] = "ubuntu"
189
+ knife.config[:platform_version] = "1.0"
190
+ knife.config[:fqdn] = "differenthost.example.org"
191
+ expect(Chef::CookbookVersion).to receive(:load).with("cookbook_name", "0.1.0").and_return(cb)
192
+ expect(rest).to receive(:streaming_request).with("http://example.org/files/3333").and_return(StringIO.new(content))
193
+ expect(knife).to receive(:pretty_print).with(content)
194
+ knife.run
196
195
  end
197
196
  end
198
197
 
199
198
  describe "and --platform-version" do
200
199
  it "should pass the platform" do
201
- @knife.config[:platform] = "ubuntu"
202
- @knife.config[:platform_version] = "9.10"
203
- @knife.config[:fqdn] = "differenthost.example.org"
204
- expect(@rest).to receive(:get).with("cookbooks/cookbook_name/0.1.0").and_return(@cookbook_response)
205
- expect(@rest).to receive(:streaming_request).with("http://example.org/files/2222").and_return(StringIO.new(@response))
206
- expect(@knife).to receive(:pretty_print).with(@response)
207
- @knife.run
200
+ knife.config[:platform] = "ubuntu"
201
+ knife.config[:platform_version] = "9.10"
202
+ knife.config[:fqdn] = "differenthost.example.org"
203
+ expect(Chef::CookbookVersion).to receive(:load).with("cookbook_name", "0.1.0").and_return(cb)
204
+ expect(rest).to receive(:streaming_request).with("http://example.org/files/2222").and_return(StringIO.new(content))
205
+ expect(knife).to receive(:pretty_print).with(content)
206
+ knife.run
208
207
  end
209
208
  end
210
209
 
211
210
  describe "with none of the arguments, it should use the default" do
212
211
  it "should pass them all" do
213
- expect(@rest).to receive(:get).with("cookbooks/cookbook_name/0.1.0").and_return(@cookbook_response)
214
- expect(@rest).to receive(:streaming_request).with("http://example.org/files/4444").and_return(StringIO.new(@response))
215
- expect(@knife).to receive(:pretty_print).with(@response)
216
- @knife.run
212
+ expect(Chef::CookbookVersion).to receive(:load).with("cookbook_name", "0.1.0").and_return(cb)
213
+ expect(rest).to receive(:streaming_request).with("http://example.org/files/4444").and_return(StringIO.new(content))
214
+ expect(knife).to receive(:pretty_print).with(content)
215
+ knife.run
217
216
  end
218
217
  end
219
218