chef 12.22.1 → 12.22.3

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 (2061) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +151 -151
  3. data/Gemfile +95 -95
  4. data/LICENSE +201 -201
  5. data/README.md +309 -309
  6. data/Rakefile +104 -104
  7. data/VERSION +1 -1
  8. data/acceptance/.gitignore +3 -3
  9. data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +33 -33
  10. data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +283 -283
  11. data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +59 -59
  12. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +68 -68
  13. data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -1
  14. data/acceptance/Gemfile +16 -16
  15. data/acceptance/Gemfile.lock +258 -258
  16. data/acceptance/README.md +137 -137
  17. data/acceptance/basics/.acceptance/acceptance-cookbook/.gitignore +2 -2
  18. data/acceptance/basics/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  19. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  20. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  21. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  22. data/acceptance/basics/.kitchen.yml +4 -4
  23. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +19 -19
  24. data/acceptance/basics/test/integration/chef-current-install/serverspec/spec_helper.rb +6 -6
  25. data/acceptance/basics/test/integration/helpers/serverspec/Gemfile +8 -8
  26. data/acceptance/data-collector/.acceptance/acceptance-cookbook/.gitignore +2 -2
  27. data/acceptance/data-collector/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  28. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/destroy.rb +2 -2
  29. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/provision.rb +2 -2
  30. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/verify.rb +2 -2
  31. data/acceptance/data-collector/.acceptance/data-collector-test/.gitignore +16 -16
  32. data/acceptance/data-collector/.acceptance/data-collector-test/Berksfile +3 -3
  33. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb +85 -85
  34. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/apigemfile +3 -3
  35. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-both-mode.rb +4 -4
  36. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-client-mode.rb +4 -4
  37. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-no-endpoint.rb +2 -2
  38. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-solo-mode.rb +4 -4
  39. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/config.ru +2 -2
  40. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +7 -7
  41. data/acceptance/data-collector/.acceptance/data-collector-test/recipes/default.rb +38 -38
  42. data/acceptance/data-collector/.kitchen.yml +9 -9
  43. data/acceptance/data-collector/Berksfile +3 -3
  44. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +204 -204
  45. data/acceptance/data-collector/test/integration/helpers/serverspec/Gemfile +8 -8
  46. data/acceptance/fips/.acceptance/acceptance-cookbook/.gitignore +2 -2
  47. data/acceptance/fips/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  48. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  49. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  50. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  51. data/acceptance/fips/.kitchen.yml +8 -8
  52. data/acceptance/fips/test/integration/fips-integration/serverspec/Gemfile +9 -9
  53. data/acceptance/fips/test/integration/fips-integration/serverspec/fips-integration_spec.rb +52 -52
  54. data/acceptance/fips/test/integration/fips-unit-functional/serverspec/Gemfile +7 -7
  55. data/acceptance/fips/test/integration/fips-unit-functional/serverspec/fips-unit-functional_spec.rb +56 -56
  56. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/.gitignore +2 -2
  57. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/metadata.rb +1 -1
  58. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  59. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  60. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/verify.rb +61 -61
  61. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/.gitignore +2 -2
  62. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/cookbook_kitchen.rb +43 -43
  63. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +39 -39
  64. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  65. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  66. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  67. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  68. data/acceptance/top-cookbooks/.gitignore +1 -1
  69. data/acceptance/top-cookbooks/.kitchen.chocolatey.yml +6 -6
  70. data/acceptance/top-cookbooks/.kitchen.iis.yml +4 -4
  71. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-rhel.yml +7 -7
  72. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-ubuntu.yml +7 -7
  73. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-windows.yml +7 -7
  74. data/acceptance/top-cookbooks/.kitchen.powershell.yml +4 -4
  75. data/acceptance/top-cookbooks/.kitchen.sql_server.yml +5 -5
  76. data/acceptance/top-cookbooks/.kitchen.winbox.yml +8 -8
  77. data/acceptance/top-cookbooks/.kitchen.windows.yml +38 -38
  78. data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
  79. data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  80. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  81. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  82. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  83. data/acceptance/trivial/.kitchen.yml +7 -7
  84. data/acceptance/trivial/test/integration/chef-current-install/inspec/chef_client_spec.rb +5 -5
  85. data/acceptance/windows-service/.acceptance/acceptance-cookbook/.gitignore +2 -2
  86. data/acceptance/windows-service/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  87. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  88. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  89. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  90. data/acceptance/windows-service/.kitchen.yml +7 -7
  91. data/acceptance/windows-service/test/integration/chef-windows-service/inspec/chef_windows_service_spec.rb +58 -58
  92. data/bin/chef-apply +25 -25
  93. data/bin/chef-client +26 -26
  94. data/bin/chef-shell +34 -34
  95. data/bin/chef-solo +25 -25
  96. data/bin/knife +25 -25
  97. data/chef-universal-mingw32.gemspec +23 -23
  98. data/chef.gemspec +61 -61
  99. data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
  100. data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
  101. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
  102. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
  103. data/distro/common/html/_sources/index.txt +135 -135
  104. data/distro/common/html/_sources/knife.txt +74 -74
  105. data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
  106. data/distro/common/html/_sources/knife_client.txt +150 -150
  107. data/distro/common/html/_sources/knife_common_options.txt +6 -6
  108. data/distro/common/html/_sources/knife_configure.txt +29 -29
  109. data/distro/common/html/_sources/knife_cookbook.txt +236 -236
  110. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
  111. data/distro/common/html/_sources/knife_data_bag.txt +159 -159
  112. data/distro/common/html/_sources/knife_delete.txt +26 -26
  113. data/distro/common/html/_sources/knife_deps.txt +61 -61
  114. data/distro/common/html/_sources/knife_diff.txt +34 -34
  115. data/distro/common/html/_sources/knife_download.txt +44 -44
  116. data/distro/common/html/_sources/knife_edit.txt +26 -26
  117. data/distro/common/html/_sources/knife_environment.txt +158 -158
  118. data/distro/common/html/_sources/knife_exec.txt +47 -47
  119. data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
  120. data/distro/common/html/_sources/knife_list.txt +33 -33
  121. data/distro/common/html/_sources/knife_node.txt +250 -250
  122. data/distro/common/html/_sources/knife_raw.txt +35 -35
  123. data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
  124. data/distro/common/html/_sources/knife_role.txt +157 -157
  125. data/distro/common/html/_sources/knife_search.txt +53 -53
  126. data/distro/common/html/_sources/knife_serve.txt +18 -18
  127. data/distro/common/html/_sources/knife_show.txt +26 -26
  128. data/distro/common/html/_sources/knife_ssh.txt +43 -43
  129. data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
  130. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
  131. data/distro/common/html/_sources/knife_status.txt +37 -37
  132. data/distro/common/html/_sources/knife_tag.txt +69 -69
  133. data/distro/common/html/_sources/knife_upload.txt +49 -49
  134. data/distro/common/html/_sources/knife_user.txt +127 -127
  135. data/distro/common/html/_sources/knife_using.txt +43 -43
  136. data/distro/common/html/_sources/knife_xargs.txt +30 -30
  137. data/distro/common/html/_static/basic.css +536 -536
  138. data/distro/common/html/_static/doctools.js +238 -238
  139. data/distro/common/html/_static/guide.css +504 -504
  140. data/distro/common/html/_static/pygments.css +61 -61
  141. data/distro/common/html/_static/searchtools.js +621 -621
  142. data/distro/common/html/_static/underscore.js +31 -31
  143. data/distro/common/html/_static/websupport.js +808 -808
  144. data/distro/common/html/ctl_chef_client.html +269 -269
  145. data/distro/common/html/ctl_chef_server.html +727 -727
  146. data/distro/common/html/ctl_chef_shell.html +162 -162
  147. data/distro/common/html/ctl_chef_solo.html +193 -193
  148. data/distro/common/html/index.html +201 -201
  149. data/distro/common/html/knife.html +169 -169
  150. data/distro/common/html/knife_bootstrap.html +284 -284
  151. data/distro/common/html/knife_client.html +284 -284
  152. data/distro/common/html/knife_common_options.html +95 -95
  153. data/distro/common/html/knife_configure.html +104 -104
  154. data/distro/common/html/knife_cookbook.html +486 -486
  155. data/distro/common/html/knife_cookbook_site.html +375 -375
  156. data/distro/common/html/knife_data_bag.html +373 -373
  157. data/distro/common/html/knife_delete.html +92 -92
  158. data/distro/common/html/knife_deps.html +142 -142
  159. data/distro/common/html/knife_diff.html +122 -122
  160. data/distro/common/html/knife_download.html +144 -144
  161. data/distro/common/html/knife_edit.html +88 -88
  162. data/distro/common/html/knife_environment.html +322 -322
  163. data/distro/common/html/knife_exec.html +219 -219
  164. data/distro/common/html/knife_index_rebuild.html +82 -82
  165. data/distro/common/html/knife_list.html +113 -113
  166. data/distro/common/html/knife_node.html +457 -457
  167. data/distro/common/html/knife_raw.html +109 -109
  168. data/distro/common/html/knife_recipe_list.html +90 -90
  169. data/distro/common/html/knife_role.html +294 -294
  170. data/distro/common/html/knife_search.html +202 -202
  171. data/distro/common/html/knife_serve.html +78 -78
  172. data/distro/common/html/knife_show.html +103 -103
  173. data/distro/common/html/knife_ssh.html +176 -176
  174. data/distro/common/html/knife_ssl_check.html +150 -150
  175. data/distro/common/html/knife_ssl_fetch.html +150 -150
  176. data/distro/common/html/knife_status.html +143 -143
  177. data/distro/common/html/knife_tag.html +137 -137
  178. data/distro/common/html/knife_upload.html +152 -152
  179. data/distro/common/html/knife_user.html +241 -241
  180. data/distro/common/html/knife_using.html +209 -209
  181. data/distro/common/html/knife_xargs.html +121 -121
  182. data/distro/common/html/search.html +81 -81
  183. data/distro/common/man/man1/README.md +58 -58
  184. data/distro/common/man/man1/chef-shell.1 +194 -194
  185. data/distro/common/man/man1/knife-bootstrap.1 +215 -215
  186. data/distro/common/man/man1/knife-client.1 +443 -443
  187. data/distro/common/man/man1/knife-configure.1 +161 -161
  188. data/distro/common/man/man1/knife-cookbook-site.1 +552 -552
  189. data/distro/common/man/man1/knife-cookbook.1 +770 -770
  190. data/distro/common/man/man1/knife-data-bag.1 +617 -617
  191. data/distro/common/man/man1/knife-delete.1 +127 -127
  192. data/distro/common/man/man1/knife-deps.1 +246 -246
  193. data/distro/common/man/man1/knife-diff.1 +226 -226
  194. data/distro/common/man/man1/knife-download.1 +258 -258
  195. data/distro/common/man/man1/knife-edit.1 +121 -121
  196. data/distro/common/man/man1/knife-environment.1 +496 -496
  197. data/distro/common/man/man1/knife-exec.1 +362 -362
  198. data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
  199. data/distro/common/man/man1/knife-list.1 +174 -174
  200. data/distro/common/man/man1/knife-node.1 +716 -716
  201. data/distro/common/man/man1/knife-raw.1 +172 -172
  202. data/distro/common/man/man1/knife-recipe-list.1 +85 -85
  203. data/distro/common/man/man1/knife-role.1 +426 -426
  204. data/distro/common/man/man1/knife-search.1 +359 -359
  205. data/distro/common/man/man1/knife-serve.1 +109 -109
  206. data/distro/common/man/man1/knife-show.1 +160 -160
  207. data/distro/common/man/man1/knife-ssh.1 +284 -284
  208. data/distro/common/man/man1/knife-ssl-check.1 +207 -207
  209. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
  210. data/distro/common/man/man1/knife-status.1 +234 -234
  211. data/distro/common/man/man1/knife-tag.1 +189 -189
  212. data/distro/common/man/man1/knife-upload.1 +280 -280
  213. data/distro/common/man/man1/knife-user.1 +356 -356
  214. data/distro/common/man/man1/knife-xargs.1 +189 -189
  215. data/distro/common/man/man1/knife.1 +332 -332
  216. data/distro/common/man/man8/chef-apply.8 +86 -86
  217. data/distro/common/man/man8/chef-client.8 +398 -398
  218. data/distro/common/man/man8/chef-solo.8 +260 -260
  219. data/distro/common/markdown/README +3 -3
  220. data/distro/common/markdown/man1/chef-shell.mkd +195 -195
  221. data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -141
  222. data/distro/common/markdown/man1/knife-client.mkd +103 -103
  223. data/distro/common/markdown/man1/knife-configure.mkd +71 -71
  224. data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -123
  225. data/distro/common/markdown/man1/knife-cookbook.mkd +263 -263
  226. data/distro/common/markdown/man1/knife-data-bag.mkd +121 -121
  227. data/distro/common/markdown/man1/knife-environment.mkd +151 -151
  228. data/distro/common/markdown/man1/knife-exec.mkd +42 -42
  229. data/distro/common/markdown/man1/knife-index.mkd +30 -30
  230. data/distro/common/markdown/man1/knife-node.mkd +130 -130
  231. data/distro/common/markdown/man1/knife-role.mkd +85 -85
  232. data/distro/common/markdown/man1/knife-search.mkd +180 -180
  233. data/distro/common/markdown/man1/knife-ssh.mkd +69 -69
  234. data/distro/common/markdown/man1/knife-status.mkd +36 -36
  235. data/distro/common/markdown/man1/knife-tag.mkd +39 -39
  236. data/distro/common/markdown/man1/knife.mkd +213 -213
  237. data/distro/common/markdown/man8/chef-client.mkd +75 -75
  238. data/distro/common/markdown/man8/chef-expander.mkd +81 -81
  239. data/distro/common/markdown/man8/chef-expanderctl.mkd +57 -57
  240. data/distro/common/markdown/man8/chef-server-webui.mkd +121 -121
  241. data/distro/common/markdown/man8/chef-server.mkd +120 -120
  242. data/distro/common/markdown/man8/chef-solo.mkd +107 -107
  243. data/distro/common/markdown/man8/chef-solr.mkd +89 -89
  244. data/distro/powershell/chef/chef.psm1 +442 -442
  245. data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +5 -5
  246. data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +20 -20
  247. data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +5 -5
  248. data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +5 -5
  249. data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +20 -20
  250. data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +20 -20
  251. data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +20 -20
  252. data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +20 -20
  253. data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +20 -20
  254. data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +20 -20
  255. data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +20 -20
  256. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +5 -5
  257. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +5 -5
  258. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +6 -6
  259. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +5 -5
  260. data/lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb +34 -34
  261. data/lib/chef.rb +35 -35
  262. data/lib/chef/api_client.rb +231 -231
  263. data/lib/chef/api_client/registration.rb +192 -192
  264. data/lib/chef/api_client_v1.rb +323 -323
  265. data/lib/chef/application.rb +378 -378
  266. data/lib/chef/application/apply.rb +219 -219
  267. data/lib/chef/application/client.rb +528 -528
  268. data/lib/chef/application/exit_code.rb +233 -233
  269. data/lib/chef/application/knife.rb +216 -216
  270. data/lib/chef/application/solo.rb +379 -379
  271. data/lib/chef/application/windows_service.rb +337 -337
  272. data/lib/chef/application/windows_service_manager.rb +204 -204
  273. data/lib/chef/applications.rb +4 -4
  274. data/lib/chef/audit/audit_event_proxy.rb +93 -93
  275. data/lib/chef/audit/audit_reporter.rb +176 -176
  276. data/lib/chef/audit/control_group_data.rb +139 -139
  277. data/lib/chef/audit/logger.rb +36 -36
  278. data/lib/chef/audit/rspec_formatter.rb +37 -37
  279. data/lib/chef/audit/runner.rb +196 -196
  280. data/lib/chef/chef_class.rb +240 -240
  281. data/lib/chef/chef_fs.rb +59 -59
  282. data/lib/chef/chef_fs/chef_fs_data_store.rb +870 -870
  283. data/lib/chef/chef_fs/command_line.rb +292 -292
  284. data/lib/chef/chef_fs/config.rb +284 -284
  285. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -26
  286. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +39 -39
  287. data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +11 -11
  288. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -35
  289. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -38
  290. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +62 -62
  291. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +205 -205
  292. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -40
  293. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -55
  294. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -36
  295. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +36 -36
  296. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -17
  297. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -17
  298. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +48 -48
  299. data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -33
  300. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -40
  301. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -29
  302. data/lib/chef/chef_fs/file_pattern.rb +301 -301
  303. data/lib/chef/chef_fs/file_system.rb +431 -431
  304. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
  305. data/lib/chef/chef_fs/file_system/base_fs_object.rb +187 -187
  306. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +65 -65
  307. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +67 -67
  308. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +75 -75
  309. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +196 -196
  310. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +38 -38
  311. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +102 -102
  312. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +221 -221
  313. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +78 -78
  314. data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +61 -61
  315. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +42 -42
  316. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +101 -101
  317. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +76 -76
  318. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -19
  319. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +67 -67
  320. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +56 -56
  321. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +51 -51
  322. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +35 -35
  323. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +65 -65
  324. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +64 -64
  325. data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +41 -41
  326. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +158 -158
  327. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +135 -135
  328. data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +43 -43
  329. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +38 -38
  330. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +176 -176
  331. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +198 -198
  332. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +45 -45
  333. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +107 -107
  334. data/lib/chef/chef_fs/file_system/exceptions.rb +105 -105
  335. data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +53 -53
  336. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +20 -20
  337. data/lib/chef/chef_fs/file_system/memory/memory_root.rb +23 -23
  338. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +62 -62
  339. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +32 -32
  340. data/lib/chef/chef_fs/file_system/repository/acl.rb +45 -45
  341. data/lib/chef/chef_fs/file_system/repository/acls_dir.rb +50 -50
  342. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +38 -38
  343. data/lib/chef/chef_fs/file_system/repository/base_file.rb +155 -155
  344. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +41 -41
  345. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +144 -144
  346. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +177 -177
  347. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +231 -231
  348. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +42 -42
  349. data/lib/chef/chef_fs/file_system/repository/client.rb +38 -38
  350. data/lib/chef/chef_fs/file_system/repository/client_key.rb +38 -38
  351. data/lib/chef/chef_fs/file_system/repository/client_keys_dir.rb +42 -42
  352. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +38 -38
  353. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +37 -37
  354. data/lib/chef/chef_fs/file_system/repository/container.rb +38 -38
  355. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +37 -37
  356. data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +36 -36
  357. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +51 -51
  358. data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -39
  359. data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +38 -38
  360. data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -39
  361. data/lib/chef/chef_fs/file_system/repository/directory.rb +167 -167
  362. data/lib/chef/chef_fs/file_system/repository/environment.rb +38 -38
  363. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +37 -37
  364. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +151 -151
  365. data/lib/chef/chef_fs/file_system/repository/group.rb +38 -38
  366. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +37 -37
  367. data/lib/chef/chef_fs/file_system/repository/node.rb +38 -38
  368. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +59 -59
  369. data/lib/chef/chef_fs/file_system/repository/policies_dir.rb +42 -42
  370. data/lib/chef/chef_fs/file_system/repository/policy.rb +38 -38
  371. data/lib/chef/chef_fs/file_system/repository/policy_group.rb +38 -38
  372. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +37 -37
  373. data/lib/chef/chef_fs/file_system/repository/role.rb +38 -38
  374. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +37 -37
  375. data/lib/chef/chef_fs/file_system/repository/user.rb +38 -38
  376. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +37 -37
  377. data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +34 -34
  378. data/lib/chef/chef_fs/file_system_cache.rb +80 -80
  379. data/lib/chef/chef_fs/knife.rb +161 -161
  380. data/lib/chef/chef_fs/parallelizer.rb +103 -103
  381. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
  382. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +277 -277
  383. data/lib/chef/chef_fs/path_utils.rb +127 -127
  384. data/lib/chef/client.rb +1023 -1023
  385. data/lib/chef/config.rb +85 -85
  386. data/lib/chef/config_fetcher.rb +72 -72
  387. data/lib/chef/constants.rb +28 -28
  388. data/lib/chef/cookbook/chefignore.rb +74 -74
  389. data/lib/chef/cookbook/cookbook_collection.rb +63 -63
  390. data/lib/chef/cookbook/cookbook_version_loader.rb +351 -351
  391. data/lib/chef/cookbook/file_system_file_vendor.rb +58 -58
  392. data/lib/chef/cookbook/file_vendor.rb +71 -71
  393. data/lib/chef/cookbook/gem_installer.rb +84 -84
  394. data/lib/chef/cookbook/metadata.rb +912 -912
  395. data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
  396. data/lib/chef/cookbook/synchronizer.rb +298 -298
  397. data/lib/chef/cookbook/syntax_check.rb +260 -260
  398. data/lib/chef/cookbook_loader.rb +200 -200
  399. data/lib/chef/cookbook_manifest.rb +290 -290
  400. data/lib/chef/cookbook_site_streaming_uploader.rb +243 -243
  401. data/lib/chef/cookbook_uploader.rb +157 -157
  402. data/lib/chef/cookbook_version.rb +637 -637
  403. data/lib/chef/daemon.rb +131 -131
  404. data/lib/chef/data_bag.rb +176 -176
  405. data/lib/chef/data_bag_item.rb +218 -218
  406. data/lib/chef/data_collector.rb +489 -489
  407. data/lib/chef/data_collector/messages.rb +98 -98
  408. data/lib/chef/data_collector/messages/helpers.rb +161 -161
  409. data/lib/chef/data_collector/resource_report.rb +123 -123
  410. data/lib/chef/decorator.rb +81 -81
  411. data/lib/chef/decorator/lazy.rb +60 -60
  412. data/lib/chef/decorator/lazy_array.rb +59 -59
  413. data/lib/chef/decorator/unchain.rb +59 -59
  414. data/lib/chef/delayed_evaluator.rb +21 -21
  415. data/lib/chef/deprecated.rb +250 -250
  416. data/lib/chef/deprecation/mixin/template.rb +48 -48
  417. data/lib/chef/deprecation/provider/cookbook_file.rb +54 -54
  418. data/lib/chef/deprecation/provider/file.rb +198 -198
  419. data/lib/chef/deprecation/provider/remote_directory.rb +52 -52
  420. data/lib/chef/deprecation/provider/remote_file.rb +85 -85
  421. data/lib/chef/deprecation/provider/template.rb +63 -63
  422. data/lib/chef/deprecation/warnings.rb +36 -36
  423. data/lib/chef/digester.rb +74 -74
  424. data/lib/chef/dsl.rb +6 -6
  425. data/lib/chef/dsl/audit.rb +51 -51
  426. data/lib/chef/dsl/chef_provisioning.rb +57 -57
  427. data/lib/chef/dsl/cheffish.rb +65 -65
  428. data/lib/chef/dsl/core.rb +52 -52
  429. data/lib/chef/dsl/data_query.rb +89 -89
  430. data/lib/chef/dsl/declare_resource.rb +295 -295
  431. data/lib/chef/dsl/definitions.rb +43 -43
  432. data/lib/chef/dsl/include_attribute.rb +61 -61
  433. data/lib/chef/dsl/include_recipe.rb +44 -44
  434. data/lib/chef/dsl/method_missing.rb +75 -75
  435. data/lib/chef/dsl/platform_introspection.rb +268 -268
  436. data/lib/chef/dsl/powershell.rb +29 -29
  437. data/lib/chef/dsl/reboot_pending.rb +64 -64
  438. data/lib/chef/dsl/recipe.rb +95 -95
  439. data/lib/chef/dsl/registry_helper.rb +63 -63
  440. data/lib/chef/dsl/resources.rb +56 -56
  441. data/lib/chef/dsl/universal.rb +50 -50
  442. data/lib/chef/encrypted_data_bag_item.rb +155 -155
  443. data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -54
  444. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -56
  445. data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -22
  446. data/lib/chef/encrypted_data_bag_item/decryptor.rb +227 -227
  447. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -37
  448. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -22
  449. data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -225
  450. data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -22
  451. data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -22
  452. data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -22
  453. data/lib/chef/environment.rb +324 -324
  454. data/lib/chef/event_dispatch/base.rb +429 -429
  455. data/lib/chef/event_dispatch/dispatcher.rb +62 -62
  456. data/lib/chef/event_dispatch/dsl.rb +65 -65
  457. data/lib/chef/event_dispatch/events_output_stream.rb +37 -37
  458. data/lib/chef/event_loggers/base.rb +62 -62
  459. data/lib/chef/event_loggers/windows_eventlog.rb +101 -101
  460. data/lib/chef/exceptions.rb +532 -532
  461. data/lib/chef/file_access_control.rb +75 -75
  462. data/lib/chef/file_access_control/unix.rb +290 -290
  463. data/lib/chef/file_access_control/windows.rb +335 -335
  464. data/lib/chef/file_cache.rb +221 -221
  465. data/lib/chef/file_content_management/content_base.rb +56 -56
  466. data/lib/chef/file_content_management/deploy.rb +37 -37
  467. data/lib/chef/file_content_management/deploy/cp.rb +48 -48
  468. data/lib/chef/file_content_management/deploy/mv_unix.rb +76 -76
  469. data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
  470. data/lib/chef/file_content_management/tempfile.rb +107 -107
  471. data/lib/chef/formatters/base.rb +247 -247
  472. data/lib/chef/formatters/doc.rb +447 -447
  473. data/lib/chef/formatters/error_description.rb +86 -86
  474. data/lib/chef/formatters/error_inspectors.rb +19 -19
  475. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +183 -183
  476. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +154 -154
  477. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -168
  478. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +82 -82
  479. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +128 -128
  480. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +147 -147
  481. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +124 -124
  482. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +121 -121
  483. data/lib/chef/formatters/error_mapper.rb +85 -85
  484. data/lib/chef/formatters/indentable_output_stream.rb +170 -170
  485. data/lib/chef/formatters/minimal.rb +233 -233
  486. data/lib/chef/guard_interpreter.rb +32 -32
  487. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +43 -43
  488. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
  489. data/lib/chef/handler.rb +268 -268
  490. data/lib/chef/handler/error_report.rb +33 -33
  491. data/lib/chef/handler/json_file.rb +63 -63
  492. data/lib/chef/http.rb +489 -489
  493. data/lib/chef/http/api_versions.rb +50 -50
  494. data/lib/chef/http/auth_credentials.rb +57 -57
  495. data/lib/chef/http/authenticator.rb +106 -106
  496. data/lib/chef/http/basic_client.rb +158 -158
  497. data/lib/chef/http/cookie_jar.rb +31 -31
  498. data/lib/chef/http/cookie_manager.rb +59 -59
  499. data/lib/chef/http/decompressor.rb +142 -142
  500. data/lib/chef/http/http_request.rb +186 -186
  501. data/lib/chef/http/json_input.rb +73 -73
  502. data/lib/chef/http/json_output.rb +78 -78
  503. data/lib/chef/http/json_to_model_output.rb +34 -34
  504. data/lib/chef/http/remote_request_id.rb +46 -46
  505. data/lib/chef/http/simple.rb +40 -40
  506. data/lib/chef/http/simple_json.rb +43 -43
  507. data/lib/chef/http/socketless_chef_zero_client.rb +208 -208
  508. data/lib/chef/http/ssl_policies.rb +130 -130
  509. data/lib/chef/http/validate_content_length.rb +114 -114
  510. data/lib/chef/json_compat.rb +160 -160
  511. data/lib/chef/key.rb +272 -272
  512. data/lib/chef/knife.rb +613 -613
  513. data/lib/chef/knife/bootstrap.rb +489 -489
  514. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +159 -159
  515. data/lib/chef/knife/bootstrap/client_builder.rb +208 -208
  516. data/lib/chef/knife/bootstrap/templates/README.md +11 -11
  517. data/lib/chef/knife/bootstrap/templates/chef-full.erb +236 -236
  518. data/lib/chef/knife/client_bulk_delete.rb +104 -104
  519. data/lib/chef/knife/client_create.rb +111 -111
  520. data/lib/chef/knife/client_delete.rb +63 -63
  521. data/lib/chef/knife/client_edit.rb +53 -53
  522. data/lib/chef/knife/client_key_create.rb +67 -67
  523. data/lib/chef/knife/client_key_delete.rb +76 -76
  524. data/lib/chef/knife/client_key_edit.rb +79 -79
  525. data/lib/chef/knife/client_key_list.rb +69 -69
  526. data/lib/chef/knife/client_key_show.rb +76 -76
  527. data/lib/chef/knife/client_list.rb +42 -42
  528. data/lib/chef/knife/client_reregister.rb +59 -59
  529. data/lib/chef/knife/client_show.rb +49 -49
  530. data/lib/chef/knife/configure.rb +171 -171
  531. data/lib/chef/knife/configure_client.rb +50 -50
  532. data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
  533. data/lib/chef/knife/cookbook_create.rb +462 -462
  534. data/lib/chef/knife/cookbook_delete.rb +151 -151
  535. data/lib/chef/knife/cookbook_download.rb +143 -143
  536. data/lib/chef/knife/cookbook_list.rb +47 -47
  537. data/lib/chef/knife/cookbook_metadata.rb +107 -107
  538. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -44
  539. data/lib/chef/knife/cookbook_show.rb +94 -94
  540. data/lib/chef/knife/cookbook_site_download.rb +116 -116
  541. data/lib/chef/knife/cookbook_site_install.rb +196 -196
  542. data/lib/chef/knife/cookbook_site_list.rb +65 -65
  543. data/lib/chef/knife/cookbook_site_search.rb +53 -53
  544. data/lib/chef/knife/cookbook_site_share.rb +170 -170
  545. data/lib/chef/knife/cookbook_site_show.rb +66 -66
  546. data/lib/chef/knife/cookbook_site_unshare.rb +63 -63
  547. data/lib/chef/knife/cookbook_site_vendor.rb +46 -46
  548. data/lib/chef/knife/cookbook_test.rb +95 -95
  549. data/lib/chef/knife/cookbook_upload.rb +308 -308
  550. data/lib/chef/knife/core/bootstrap_context.rb +267 -267
  551. data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
  552. data/lib/chef/knife/core/custom_manifest_loader.rb +69 -69
  553. data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
  554. data/lib/chef/knife/core/generic_presenter.rb +232 -232
  555. data/lib/chef/knife/core/hashed_command_loader.rb +99 -99
  556. data/lib/chef/knife/core/node_editor.rb +130 -130
  557. data/lib/chef/knife/core/node_presenter.rb +159 -159
  558. data/lib/chef/knife/core/object_loader.rb +115 -115
  559. data/lib/chef/knife/core/status_presenter.rb +157 -157
  560. data/lib/chef/knife/core/subcommand_loader.rb +212 -212
  561. data/lib/chef/knife/core/text_formatter.rb +85 -85
  562. data/lib/chef/knife/core/ui.rb +278 -278
  563. data/lib/chef/knife/data_bag_create.rb +80 -80
  564. data/lib/chef/knife/data_bag_delete.rb +49 -49
  565. data/lib/chef/knife/data_bag_edit.rb +74 -74
  566. data/lib/chef/knife/data_bag_from_file.rb +114 -114
  567. data/lib/chef/knife/data_bag_list.rb +42 -42
  568. data/lib/chef/knife/data_bag_secret_options.rb +142 -142
  569. data/lib/chef/knife/data_bag_show.rb +69 -69
  570. data/lib/chef/knife/delete.rb +107 -107
  571. data/lib/chef/knife/deps.rb +138 -138
  572. data/lib/chef/knife/diff.rb +68 -68
  573. data/lib/chef/knife/download.rb +68 -68
  574. data/lib/chef/knife/edit.rb +72 -72
  575. data/lib/chef/knife/environment_compare.rb +127 -127
  576. data/lib/chef/knife/environment_create.rb +53 -53
  577. data/lib/chef/knife/environment_delete.rb +45 -45
  578. data/lib/chef/knife/environment_edit.rb +45 -45
  579. data/lib/chef/knife/environment_from_file.rb +82 -82
  580. data/lib/chef/knife/environment_list.rb +42 -42
  581. data/lib/chef/knife/environment_show.rb +48 -48
  582. data/lib/chef/knife/exec.rb +87 -87
  583. data/lib/chef/knife/help.rb +101 -101
  584. data/lib/chef/knife/help_topics.rb +4 -4
  585. data/lib/chef/knife/index_rebuild.rb +133 -133
  586. data/lib/chef/knife/key_create.rb +112 -112
  587. data/lib/chef/knife/key_create_base.rb +50 -50
  588. data/lib/chef/knife/key_delete.rb +55 -55
  589. data/lib/chef/knife/key_edit.rb +118 -118
  590. data/lib/chef/knife/key_edit_base.rb +55 -55
  591. data/lib/chef/knife/key_list.rb +88 -88
  592. data/lib/chef/knife/key_list_base.rb +45 -45
  593. data/lib/chef/knife/key_show.rb +53 -53
  594. data/lib/chef/knife/list.rb +156 -156
  595. data/lib/chef/knife/node_bulk_delete.rb +74 -74
  596. data/lib/chef/knife/node_create.rb +47 -47
  597. data/lib/chef/knife/node_delete.rb +46 -46
  598. data/lib/chef/knife/node_edit.rb +70 -70
  599. data/lib/chef/knife/node_environment_set.rb +54 -54
  600. data/lib/chef/knife/node_from_file.rb +51 -51
  601. data/lib/chef/knife/node_list.rb +44 -44
  602. data/lib/chef/knife/node_run_list_add.rb +104 -104
  603. data/lib/chef/knife/node_run_list_remove.rb +67 -67
  604. data/lib/chef/knife/node_run_list_set.rb +66 -66
  605. data/lib/chef/knife/node_show.rb +61 -61
  606. data/lib/chef/knife/null.rb +10 -10
  607. data/lib/chef/knife/osc_user_create.rb +97 -97
  608. data/lib/chef/knife/osc_user_delete.rb +51 -51
  609. data/lib/chef/knife/osc_user_edit.rb +58 -58
  610. data/lib/chef/knife/osc_user_list.rb +47 -47
  611. data/lib/chef/knife/osc_user_reregister.rb +64 -64
  612. data/lib/chef/knife/osc_user_show.rb +53 -53
  613. data/lib/chef/knife/raw.rb +103 -103
  614. data/lib/chef/knife/recipe_list.rb +32 -32
  615. data/lib/chef/knife/rehash.rb +65 -65
  616. data/lib/chef/knife/role_bulk_delete.rb +65 -65
  617. data/lib/chef/knife/role_create.rb +53 -53
  618. data/lib/chef/knife/role_delete.rb +46 -46
  619. data/lib/chef/knife/role_edit.rb +45 -45
  620. data/lib/chef/knife/role_env_run_list_add.rb +86 -86
  621. data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
  622. data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
  623. data/lib/chef/knife/role_env_run_list_replace.rb +59 -59
  624. data/lib/chef/knife/role_env_run_list_set.rb +70 -70
  625. data/lib/chef/knife/role_from_file.rb +51 -51
  626. data/lib/chef/knife/role_list.rb +42 -42
  627. data/lib/chef/knife/role_run_list_add.rb +86 -86
  628. data/lib/chef/knife/role_run_list_clear.rb +55 -55
  629. data/lib/chef/knife/role_run_list_remove.rb +57 -57
  630. data/lib/chef/knife/role_run_list_replace.rb +59 -59
  631. data/lib/chef/knife/role_run_list_set.rb +70 -70
  632. data/lib/chef/knife/role_show.rb +49 -49
  633. data/lib/chef/knife/search.rb +201 -201
  634. data/lib/chef/knife/serve.rb +48 -48
  635. data/lib/chef/knife/show.rb +56 -56
  636. data/lib/chef/knife/ssh.rb +591 -591
  637. data/lib/chef/knife/ssl_check.rb +283 -283
  638. data/lib/chef/knife/ssl_fetch.rb +161 -161
  639. data/lib/chef/knife/status.rb +110 -110
  640. data/lib/chef/knife/supermarket_download.rb +33 -33
  641. data/lib/chef/knife/supermarket_install.rb +33 -33
  642. data/lib/chef/knife/supermarket_list.rb +33 -33
  643. data/lib/chef/knife/supermarket_search.rb +33 -33
  644. data/lib/chef/knife/supermarket_share.rb +33 -33
  645. data/lib/chef/knife/supermarket_show.rb +33 -33
  646. data/lib/chef/knife/supermarket_unshare.rb +33 -33
  647. data/lib/chef/knife/tag_create.rb +52 -52
  648. data/lib/chef/knife/tag_delete.rb +60 -60
  649. data/lib/chef/knife/tag_list.rb +47 -47
  650. data/lib/chef/knife/upload.rb +70 -70
  651. data/lib/chef/knife/user_create.rb +150 -150
  652. data/lib/chef/knife/user_delete.rb +95 -95
  653. data/lib/chef/knife/user_edit.rb +81 -81
  654. data/lib/chef/knife/user_key_create.rb +69 -69
  655. data/lib/chef/knife/user_key_delete.rb +76 -76
  656. data/lib/chef/knife/user_key_edit.rb +79 -79
  657. data/lib/chef/knife/user_key_list.rb +69 -69
  658. data/lib/chef/knife/user_key_show.rb +76 -76
  659. data/lib/chef/knife/user_list.rb +45 -45
  660. data/lib/chef/knife/user_reregister.rb +89 -89
  661. data/lib/chef/knife/user_show.rb +78 -78
  662. data/lib/chef/knife/xargs.rb +266 -266
  663. data/lib/chef/local_mode.rb +128 -128
  664. data/lib/chef/log.rb +68 -68
  665. data/lib/chef/log/syslog.rb +45 -45
  666. data/lib/chef/log/winevt.rb +99 -99
  667. data/lib/chef/mash.rb +232 -232
  668. data/lib/chef/mixin/api_version_request_handling.rb +66 -66
  669. data/lib/chef/mixin/checksum.rb +37 -37
  670. data/lib/chef/mixin/command.rb +194 -194
  671. data/lib/chef/mixin/command/unix.rb +220 -220
  672. data/lib/chef/mixin/command/windows.rb +71 -71
  673. data/lib/chef/mixin/convert_to_class_name.rb +126 -126
  674. data/lib/chef/mixin/create_path.rb +71 -71
  675. data/lib/chef/mixin/deep_merge.rb +140 -140
  676. data/lib/chef/mixin/deprecation.rb +117 -117
  677. data/lib/chef/mixin/descendants_tracker.rb +81 -81
  678. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -39
  679. data/lib/chef/mixin/file_class.rb +35 -35
  680. data/lib/chef/mixin/from_file.rb +50 -50
  681. data/lib/chef/mixin/get_source_from_package.rb +47 -47
  682. data/lib/chef/mixin/homebrew_user.rb +68 -68
  683. data/lib/chef/mixin/language.rb +48 -48
  684. data/lib/chef/mixin/language_include_attribute.rb +34 -34
  685. data/lib/chef/mixin/language_include_recipe.rb +31 -31
  686. data/lib/chef/mixin/lazy_module_include.rb +77 -77
  687. data/lib/chef/mixin/notifying_block.rb +51 -51
  688. data/lib/chef/mixin/params_validate.rb +489 -489
  689. data/lib/chef/mixin/path_sanity.rb +68 -68
  690. data/lib/chef/mixin/powershell_out.rb +98 -98
  691. data/lib/chef/mixin/powershell_type_coercions.rb +84 -84
  692. data/lib/chef/mixin/properties.rb +306 -306
  693. data/lib/chef/mixin/provides.rb +28 -28
  694. data/lib/chef/mixin/proxified_socket.rb +42 -42
  695. data/lib/chef/mixin/recipe_definition_dsl_core.rb +35 -35
  696. data/lib/chef/mixin/securable.rb +196 -196
  697. data/lib/chef/mixin/shell_out.rb +211 -211
  698. data/lib/chef/mixin/subclass_directive.rb +37 -37
  699. data/lib/chef/mixin/template.rb +262 -262
  700. data/lib/chef/mixin/unformatter.rb +32 -32
  701. data/lib/chef/mixin/uris.rb +42 -42
  702. data/lib/chef/mixin/versioned_api.rb +69 -69
  703. data/lib/chef/mixin/which.rb +50 -50
  704. data/lib/chef/mixin/why_run.rb +331 -331
  705. data/lib/chef/mixin/wide_string.rb +72 -72
  706. data/lib/chef/mixin/windows_architecture_helper.rb +113 -113
  707. data/lib/chef/mixin/windows_env_helper.rb +67 -67
  708. data/lib/chef/mixin/xml_escape.rb +138 -138
  709. data/lib/chef/mixins.rb +13 -13
  710. data/lib/chef/monkey_patches/net_http.rb +60 -60
  711. data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
  712. data/lib/chef/monkey_patches/win32/registry.rb +86 -86
  713. data/lib/chef/monologger.rb +88 -88
  714. data/lib/chef/nil_argument.rb +3 -3
  715. data/lib/chef/node.rb +677 -677
  716. data/lib/chef/node/attribute.rb +673 -673
  717. data/lib/chef/node/attribute_collections.rb +231 -231
  718. data/lib/chef/node/common_api.rb +121 -121
  719. data/lib/chef/node/immutable_collections.rb +180 -180
  720. data/lib/chef/node/mixin/deep_merge_cache.rb +61 -61
  721. data/lib/chef/node/mixin/immutablize_array.rb +67 -67
  722. data/lib/chef/node/mixin/immutablize_hash.rb +54 -54
  723. data/lib/chef/node/mixin/state_tracking.rb +96 -96
  724. data/lib/chef/node_map.rb +238 -238
  725. data/lib/chef/null_logger.rb +72 -72
  726. data/lib/chef/org.rb +147 -147
  727. data/lib/chef/platform.rb +30 -30
  728. data/lib/chef/platform/priority_map.rb +41 -41
  729. data/lib/chef/platform/provider_handler_map.rb +29 -29
  730. data/lib/chef/platform/provider_mapping.rb +222 -222
  731. data/lib/chef/platform/provider_priority_map.rb +11 -11
  732. data/lib/chef/platform/query_helpers.rb +112 -112
  733. data/lib/chef/platform/rebooter.rb +67 -67
  734. data/lib/chef/platform/resource_handler_map.rb +29 -29
  735. data/lib/chef/platform/resource_priority_map.rb +11 -11
  736. data/lib/chef/platform/service_helpers.rb +122 -122
  737. data/lib/chef/policy_builder.rb +42 -42
  738. data/lib/chef/policy_builder/dynamic.rb +185 -185
  739. data/lib/chef/policy_builder/expand_node_object.rb +278 -278
  740. data/lib/chef/policy_builder/policyfile.rb +550 -550
  741. data/lib/chef/property.rb +731 -731
  742. data/lib/chef/provider.rb +458 -458
  743. data/lib/chef/provider/apt_repository.rb +258 -258
  744. data/lib/chef/provider/apt_update.rb +87 -87
  745. data/lib/chef/provider/batch.rb +45 -45
  746. data/lib/chef/provider/breakpoint.rb +38 -38
  747. data/lib/chef/provider/cookbook_file.rb +53 -53
  748. data/lib/chef/provider/cookbook_file/content.rb +49 -49
  749. data/lib/chef/provider/cron.rb +262 -262
  750. data/lib/chef/provider/cron/aix.rb +50 -50
  751. data/lib/chef/provider/cron/solaris.rb +22 -22
  752. data/lib/chef/provider/cron/unix.rb +83 -83
  753. data/lib/chef/provider/deploy.rb +476 -476
  754. data/lib/chef/provider/deploy/revision.rb +107 -107
  755. data/lib/chef/provider/deploy/timestamped.rb +34 -34
  756. data/lib/chef/provider/directory.rb +168 -168
  757. data/lib/chef/provider/dsc_resource.rb +213 -213
  758. data/lib/chef/provider/dsc_script.rb +189 -189
  759. data/lib/chef/provider/env.rb +169 -169
  760. data/lib/chef/provider/env/windows.rb +72 -72
  761. data/lib/chef/provider/erl_call.rb +108 -108
  762. data/lib/chef/provider/execute.rb +128 -128
  763. data/lib/chef/provider/file.rb +488 -488
  764. data/lib/chef/provider/file/content.rb +39 -39
  765. data/lib/chef/provider/git.rb +334 -334
  766. data/lib/chef/provider/group.rb +185 -185
  767. data/lib/chef/provider/group/aix.rb +79 -79
  768. data/lib/chef/provider/group/dscl.rb +173 -173
  769. data/lib/chef/provider/group/gpasswd.rb +58 -58
  770. data/lib/chef/provider/group/groupadd.rb +133 -133
  771. data/lib/chef/provider/group/groupmod.rb +123 -123
  772. data/lib/chef/provider/group/pw.rb +137 -137
  773. data/lib/chef/provider/group/suse.rb +83 -83
  774. data/lib/chef/provider/group/usermod.rb +90 -90
  775. data/lib/chef/provider/group/windows.rb +109 -109
  776. data/lib/chef/provider/http_request.rb +122 -122
  777. data/lib/chef/provider/ifconfig.rb +283 -283
  778. data/lib/chef/provider/ifconfig/aix.rb +94 -94
  779. data/lib/chef/provider/ifconfig/debian.rb +85 -85
  780. data/lib/chef/provider/ifconfig/redhat.rb +48 -48
  781. data/lib/chef/provider/launchd.rb +208 -208
  782. data/lib/chef/provider/link.rb +172 -172
  783. data/lib/chef/provider/log.rb +57 -57
  784. data/lib/chef/provider/lwrp_base.rb +98 -98
  785. data/lib/chef/provider/mdadm.rb +93 -93
  786. data/lib/chef/provider/mount.rb +171 -171
  787. data/lib/chef/provider/mount/aix.rb +180 -180
  788. data/lib/chef/provider/mount/mount.rb +270 -270
  789. data/lib/chef/provider/mount/solaris.rb +271 -271
  790. data/lib/chef/provider/mount/windows.rb +92 -92
  791. data/lib/chef/provider/noop.rb +37 -37
  792. data/lib/chef/provider/ohai.rb +51 -51
  793. data/lib/chef/provider/osx_profile.rb +257 -257
  794. data/lib/chef/provider/package.rb +656 -656
  795. data/lib/chef/provider/package/aix.rb +143 -143
  796. data/lib/chef/provider/package/apt.rb +201 -201
  797. data/lib/chef/provider/package/cab.rb +179 -179
  798. data/lib/chef/provider/package/chocolatey.rb +275 -275
  799. data/lib/chef/provider/package/dnf.rb +192 -192
  800. data/lib/chef/provider/package/dnf/dnf_helper.py +91 -91
  801. data/lib/chef/provider/package/dnf/python_helper.rb +157 -157
  802. data/lib/chef/provider/package/dnf/version.rb +56 -56
  803. data/lib/chef/provider/package/dpkg.rb +225 -225
  804. data/lib/chef/provider/package/easy_install.rb +135 -135
  805. data/lib/chef/provider/package/freebsd/base.rb +89 -89
  806. data/lib/chef/provider/package/freebsd/pkg.rb +114 -114
  807. data/lib/chef/provider/package/freebsd/pkgng.rb +76 -76
  808. data/lib/chef/provider/package/freebsd/port.rb +60 -60
  809. data/lib/chef/provider/package/homebrew.rb +138 -138
  810. data/lib/chef/provider/package/ips.rb +86 -86
  811. data/lib/chef/provider/package/macports.rb +101 -101
  812. data/lib/chef/provider/package/msu.rb +162 -162
  813. data/lib/chef/provider/package/openbsd.rb +139 -139
  814. data/lib/chef/provider/package/pacman.rb +104 -104
  815. data/lib/chef/provider/package/paludis.rb +85 -85
  816. data/lib/chef/provider/package/portage.rb +140 -140
  817. data/lib/chef/provider/package/powershell.rb +114 -114
  818. data/lib/chef/provider/package/rpm.rb +123 -123
  819. data/lib/chef/provider/package/rubygems.rb +591 -591
  820. data/lib/chef/provider/package/smartos.rb +92 -92
  821. data/lib/chef/provider/package/solaris.rb +138 -138
  822. data/lib/chef/provider/package/windows.rb +271 -271
  823. data/lib/chef/provider/package/windows/exe.rb +115 -115
  824. data/lib/chef/provider/package/windows/msi.rb +94 -94
  825. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +87 -87
  826. data/lib/chef/provider/package/yum.rb +536 -536
  827. data/lib/chef/provider/package/yum/rpm_utils.rb +642 -642
  828. data/lib/chef/provider/package/yum/yum-dump.py +307 -307
  829. data/lib/chef/provider/package/yum/yum_cache.rb +376 -376
  830. data/lib/chef/provider/package/zypper.rb +163 -163
  831. data/lib/chef/provider/powershell_script.rb +223 -223
  832. data/lib/chef/provider/reboot.rb +70 -70
  833. data/lib/chef/provider/registry_key.rb +182 -182
  834. data/lib/chef/provider/remote_directory.rb +283 -283
  835. data/lib/chef/provider/remote_file.rb +53 -53
  836. data/lib/chef/provider/remote_file/cache_control_data.rb +195 -195
  837. data/lib/chef/provider/remote_file/content.rb +81 -81
  838. data/lib/chef/provider/remote_file/fetcher.rb +57 -57
  839. data/lib/chef/provider/remote_file/ftp.rb +172 -172
  840. data/lib/chef/provider/remote_file/http.rb +135 -135
  841. data/lib/chef/provider/remote_file/local_file.rb +60 -60
  842. data/lib/chef/provider/remote_file/network_file.rb +48 -48
  843. data/lib/chef/provider/remote_file/sftp.rb +105 -105
  844. data/lib/chef/provider/resource_update.rb +52 -52
  845. data/lib/chef/provider/route.rb +231 -231
  846. data/lib/chef/provider/ruby_block.rb +44 -44
  847. data/lib/chef/provider/script.rb +121 -121
  848. data/lib/chef/provider/service.rb +259 -259
  849. data/lib/chef/provider/service/aix.rb +129 -129
  850. data/lib/chef/provider/service/aixinit.rb +117 -117
  851. data/lib/chef/provider/service/arch.rb +118 -118
  852. data/lib/chef/provider/service/debian.rb +182 -182
  853. data/lib/chef/provider/service/freebsd.rb +195 -195
  854. data/lib/chef/provider/service/gentoo.rb +71 -71
  855. data/lib/chef/provider/service/init.rb +94 -94
  856. data/lib/chef/provider/service/insserv.rb +59 -59
  857. data/lib/chef/provider/service/invokercd.rb +41 -41
  858. data/lib/chef/provider/service/macosx.rb +250 -250
  859. data/lib/chef/provider/service/openbsd.rb +217 -217
  860. data/lib/chef/provider/service/redhat.rb +126 -126
  861. data/lib/chef/provider/service/simple.rb +176 -176
  862. data/lib/chef/provider/service/solaris.rb +122 -122
  863. data/lib/chef/provider/service/systemd.rb +188 -188
  864. data/lib/chef/provider/service/upstart.rb +261 -261
  865. data/lib/chef/provider/service/windows.rb +313 -313
  866. data/lib/chef/provider/subversion.rb +233 -233
  867. data/lib/chef/provider/support/yum_repo.erb +132 -132
  868. data/lib/chef/provider/systemd_unit.rb +240 -240
  869. data/lib/chef/provider/template.rb +65 -65
  870. data/lib/chef/provider/template/content.rb +70 -70
  871. data/lib/chef/provider/template_finder.rb +62 -62
  872. data/lib/chef/provider/user.rb +220 -220
  873. data/lib/chef/provider/user/aix.rb +99 -99
  874. data/lib/chef/provider/user/dscl.rb +719 -719
  875. data/lib/chef/provider/user/linux.rb +125 -125
  876. data/lib/chef/provider/user/pw.rb +111 -111
  877. data/lib/chef/provider/user/solaris.rb +129 -129
  878. data/lib/chef/provider/user/useradd.rb +158 -158
  879. data/lib/chef/provider/user/windows.rb +125 -125
  880. data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
  881. data/lib/chef/provider/windows_script.rb +75 -75
  882. data/lib/chef/provider/yum_repository.rb +120 -120
  883. data/lib/chef/provider_resolver.rb +172 -172
  884. data/lib/chef/providers.rb +152 -152
  885. data/lib/chef/recipe.rb +108 -108
  886. data/lib/chef/request_id.rb +37 -37
  887. data/lib/chef/reserved_names.rb +9 -9
  888. data/lib/chef/resource.rb +1626 -1626
  889. data/lib/chef/resource/action_class.rb +94 -94
  890. data/lib/chef/resource/apt_package.rb +32 -32
  891. data/lib/chef/resource/apt_repository.rb +46 -46
  892. data/lib/chef/resource/apt_update.rb +33 -33
  893. data/lib/chef/resource/bash.rb +33 -33
  894. data/lib/chef/resource/batch.rb +33 -33
  895. data/lib/chef/resource/bff_package.rb +27 -27
  896. data/lib/chef/resource/breakpoint.rb +32 -32
  897. data/lib/chef/resource/cab_package.rb +44 -44
  898. data/lib/chef/resource/chef_gem.rb +50 -50
  899. data/lib/chef/resource/chocolatey_package.rb +40 -40
  900. data/lib/chef/resource/conditional.rb +135 -135
  901. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
  902. data/lib/chef/resource/cookbook_file.rb +49 -49
  903. data/lib/chef/resource/cron.rb +216 -216
  904. data/lib/chef/resource/csh.rb +33 -33
  905. data/lib/chef/resource/deploy.rb +443 -443
  906. data/lib/chef/resource/deploy_revision.rb +31 -31
  907. data/lib/chef/resource/directory.rb +62 -62
  908. data/lib/chef/resource/dnf_package.rb +74 -74
  909. data/lib/chef/resource/dpkg_package.rb +30 -30
  910. data/lib/chef/resource/dsc_resource.rb +129 -129
  911. data/lib/chef/resource/dsc_script.rb +140 -140
  912. data/lib/chef/resource/easy_install_package.rb +32 -32
  913. data/lib/chef/resource/env.rb +65 -65
  914. data/lib/chef/resource/erl_call.rb +85 -85
  915. data/lib/chef/resource/execute.rb +236 -236
  916. data/lib/chef/resource/file.rb +88 -88
  917. data/lib/chef/resource/file/verification.rb +130 -130
  918. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -67
  919. data/lib/chef/resource/freebsd_package.rb +62 -62
  920. data/lib/chef/resource/gem_package.rb +41 -41
  921. data/lib/chef/resource/git.rb +44 -44
  922. data/lib/chef/resource/group.rb +102 -102
  923. data/lib/chef/resource/homebrew_package.rb +34 -34
  924. data/lib/chef/resource/http_request.rb +66 -66
  925. data/lib/chef/resource/ifconfig.rb +147 -147
  926. data/lib/chef/resource/ips_package.rb +34 -34
  927. data/lib/chef/resource/ksh.rb +32 -32
  928. data/lib/chef/resource/launchd.rb +156 -156
  929. data/lib/chef/resource/link.rb +107 -107
  930. data/lib/chef/resource/log.rb +76 -76
  931. data/lib/chef/resource/lwrp_base.rb +124 -124
  932. data/lib/chef/resource/macosx_service.rb +58 -58
  933. data/lib/chef/resource/macports_package.rb +27 -27
  934. data/lib/chef/resource/mdadm.rb +112 -112
  935. data/lib/chef/resource/mount.rb +187 -187
  936. data/lib/chef/resource/msu_package.rb +47 -47
  937. data/lib/chef/resource/ohai.rb +33 -33
  938. data/lib/chef/resource/openbsd_package.rb +35 -35
  939. data/lib/chef/resource/osx_profile.rb +74 -74
  940. data/lib/chef/resource/package.rb +47 -47
  941. data/lib/chef/resource/pacman_package.rb +28 -28
  942. data/lib/chef/resource/paludis_package.rb +33 -33
  943. data/lib/chef/resource/perl.rb +32 -32
  944. data/lib/chef/resource/portage_package.rb +32 -32
  945. data/lib/chef/resource/powershell_package.rb +41 -41
  946. data/lib/chef/resource/powershell_script.rb +50 -50
  947. data/lib/chef/resource/python.rb +31 -31
  948. data/lib/chef/resource/reboot.rb +48 -48
  949. data/lib/chef/resource/registry_key.rb +144 -144
  950. data/lib/chef/resource/remote_directory.rb +122 -122
  951. data/lib/chef/resource/remote_file.rb +158 -158
  952. data/lib/chef/resource/resource_notification.rb +122 -122
  953. data/lib/chef/resource/route.rb +137 -137
  954. data/lib/chef/resource/rpm_package.rb +32 -32
  955. data/lib/chef/resource/ruby.rb +31 -31
  956. data/lib/chef/resource/ruby_block.rb +53 -53
  957. data/lib/chef/resource/scm.rb +179 -179
  958. data/lib/chef/resource/script.rb +74 -74
  959. data/lib/chef/resource/service.rb +217 -217
  960. data/lib/chef/resource/smartos_package.rb +29 -29
  961. data/lib/chef/resource/solaris_package.rb +31 -31
  962. data/lib/chef/resource/subversion.rb +44 -44
  963. data/lib/chef/resource/systemd_unit.rb +63 -63
  964. data/lib/chef/resource/template.rb +215 -215
  965. data/lib/chef/resource/timestamped_deploy.rb +26 -26
  966. data/lib/chef/resource/user.rb +174 -174
  967. data/lib/chef/resource/user/aix_user.rb +31 -31
  968. data/lib/chef/resource/user/dscl_user.rb +31 -31
  969. data/lib/chef/resource/user/linux_user.rb +41 -41
  970. data/lib/chef/resource/user/pw_user.rb +31 -31
  971. data/lib/chef/resource/user/solaris_user.rb +31 -31
  972. data/lib/chef/resource/user/windows_user.rb +31 -31
  973. data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
  974. data/lib/chef/resource/windows_package.rb +55 -55
  975. data/lib/chef/resource/windows_script.rb +65 -65
  976. data/lib/chef/resource/windows_service.rb +71 -71
  977. data/lib/chef/resource/yum_package.rb +61 -61
  978. data/lib/chef/resource/yum_repository.rb +78 -78
  979. data/lib/chef/resource/zypper_package.rb +28 -28
  980. data/lib/chef/resource_builder.rb +156 -156
  981. data/lib/chef/resource_collection.rb +136 -136
  982. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -59
  983. data/lib/chef/resource_collection/resource_list.rb +100 -100
  984. data/lib/chef/resource_collection/resource_set.rb +173 -173
  985. data/lib/chef/resource_collection/stepable_iterator.rb +122 -122
  986. data/lib/chef/resource_definition.rb +68 -68
  987. data/lib/chef/resource_definition_list.rb +38 -38
  988. data/lib/chef/resource_reporter.rb +338 -338
  989. data/lib/chef/resource_resolver.rb +184 -184
  990. data/lib/chef/resources.rb +101 -101
  991. data/lib/chef/rest.rb +210 -210
  992. data/lib/chef/role.rb +280 -280
  993. data/lib/chef/run_context.rb +681 -681
  994. data/lib/chef/run_context/cookbook_compiler.rb +291 -291
  995. data/lib/chef/run_list.rb +168 -168
  996. data/lib/chef/run_list/run_list_expansion.rb +234 -234
  997. data/lib/chef/run_list/run_list_item.rb +98 -98
  998. data/lib/chef/run_list/versioned_recipe_list.rb +102 -102
  999. data/lib/chef/run_lock.rb +197 -197
  1000. data/lib/chef/run_status.rb +125 -125
  1001. data/lib/chef/runner.rb +143 -143
  1002. data/lib/chef/sandbox.rb +20 -20
  1003. data/lib/chef/scan_access_control.rb +138 -138
  1004. data/lib/chef/search/query.rb +183 -183
  1005. data/lib/chef/server_api.rb +80 -80
  1006. data/lib/chef/server_api_versions.rb +40 -40
  1007. data/lib/chef/shell.rb +327 -327
  1008. data/lib/chef/shell/ext.rb +593 -593
  1009. data/lib/chef/shell/model_wrapper.rb +120 -120
  1010. data/lib/chef/shell/shell_session.rb +299 -299
  1011. data/lib/chef/shell_out.rb +13 -13
  1012. data/lib/chef/tasks/chef_repo.rake +200 -200
  1013. data/lib/chef/user.rb +197 -197
  1014. data/lib/chef/user_v1.rb +328 -328
  1015. data/lib/chef/util/backup.rb +94 -94
  1016. data/lib/chef/util/diff.rb +184 -184
  1017. data/lib/chef/util/dsc/configuration_generator.rb +139 -139
  1018. data/lib/chef/util/dsc/lcm_output_parser.rb +192 -192
  1019. data/lib/chef/util/dsc/local_configuration_manager.rb +151 -151
  1020. data/lib/chef/util/dsc/resource_info.rb +26 -26
  1021. data/lib/chef/util/dsc/resource_store.rb +109 -109
  1022. data/lib/chef/util/editor.rb +91 -91
  1023. data/lib/chef/util/file_edit.rb +100 -100
  1024. data/lib/chef/util/path_helper.rb +25 -25
  1025. data/lib/chef/util/powershell/cmdlet.rb +173 -173
  1026. data/lib/chef/util/powershell/cmdlet_result.rb +61 -61
  1027. data/lib/chef/util/powershell/ps_credential.rb +41 -41
  1028. data/lib/chef/util/selinux.rb +92 -92
  1029. data/lib/chef/util/threaded_job_queue.rb +61 -61
  1030. data/lib/chef/util/windows.rb +24 -24
  1031. data/lib/chef/util/windows/net_group.rb +72 -72
  1032. data/lib/chef/util/windows/net_use.rb +81 -81
  1033. data/lib/chef/util/windows/net_user.rb +164 -164
  1034. data/lib/chef/util/windows/volume.rb +53 -53
  1035. data/lib/chef/version.rb +34 -34
  1036. data/lib/chef/version/platform.rb +44 -44
  1037. data/lib/chef/version_class.rb +75 -75
  1038. data/lib/chef/version_constraint.rb +118 -118
  1039. data/lib/chef/version_constraint/platform.rb +26 -26
  1040. data/lib/chef/whitelist.rb +86 -86
  1041. data/lib/chef/win32/api.rb +372 -372
  1042. data/lib/chef/win32/api/crypto.rb +63 -63
  1043. data/lib/chef/win32/api/error.rb +953 -953
  1044. data/lib/chef/win32/api/file.rb +619 -619
  1045. data/lib/chef/win32/api/installer.rb +165 -165
  1046. data/lib/chef/win32/api/memory.rb +105 -105
  1047. data/lib/chef/win32/api/net.rb +312 -312
  1048. data/lib/chef/win32/api/process.rb +42 -42
  1049. data/lib/chef/win32/api/psapi.rb +51 -51
  1050. data/lib/chef/win32/api/registry.rb +51 -51
  1051. data/lib/chef/win32/api/security.rb +460 -460
  1052. data/lib/chef/win32/api/synchronization.rb +89 -89
  1053. data/lib/chef/win32/api/system.rb +238 -238
  1054. data/lib/chef/win32/api/unicode.rb +135 -135
  1055. data/lib/chef/win32/crypto.rb +50 -50
  1056. data/lib/chef/win32/error.rb +86 -86
  1057. data/lib/chef/win32/eventlog.rb +31 -31
  1058. data/lib/chef/win32/file.rb +216 -216
  1059. data/lib/chef/win32/file/info.rb +99 -99
  1060. data/lib/chef/win32/file/version_info.rb +93 -93
  1061. data/lib/chef/win32/handle.rb +55 -55
  1062. data/lib/chef/win32/memory.rb +101 -101
  1063. data/lib/chef/win32/mutex.rb +116 -116
  1064. data/lib/chef/win32/net.rb +311 -311
  1065. data/lib/chef/win32/process.rb +97 -97
  1066. data/lib/chef/win32/registry.rb +374 -374
  1067. data/lib/chef/win32/security.rb +663 -665
  1068. data/lib/chef/win32/security/ace.rb +123 -123
  1069. data/lib/chef/win32/security/acl.rb +103 -103
  1070. data/lib/chef/win32/security/securable_object.rb +109 -109
  1071. data/lib/chef/win32/security/security_descriptor.rb +93 -93
  1072. data/lib/chef/win32/security/sid.rb +304 -304
  1073. data/lib/chef/win32/security/token.rb +72 -72
  1074. data/lib/chef/win32/system.rb +62 -62
  1075. data/lib/chef/win32/unicode.rb +60 -60
  1076. data/lib/chef/win32/version.rb +158 -158
  1077. data/lib/chef/workstation_config_loader.rb +23 -23
  1078. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  1079. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  1080. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  1081. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
  1082. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  1083. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  1084. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  1085. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  1086. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  1087. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  1088. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
  1089. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  1090. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  1091. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  1092. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
  1093. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
  1094. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
  1095. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
  1096. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
  1097. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
  1098. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
  1099. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
  1100. data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
  1101. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
  1102. data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
  1103. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
  1104. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
  1105. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
  1106. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
  1107. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
  1108. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  1109. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  1110. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  1111. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  1112. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  1113. data/spec/data/apt/var/www/apt/db/version +4 -4
  1114. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  1115. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  1116. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  1117. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  1118. data/spec/data/bootstrap/no_proxy.erb +2 -2
  1119. data/spec/data/bootstrap/secret.erb +9 -9
  1120. data/spec/data/bootstrap/test-hints.erb +12 -12
  1121. data/spec/data/bootstrap/test.erb +1 -1
  1122. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  1123. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  1124. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  1125. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  1126. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  1127. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  1128. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  1129. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  1130. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  1131. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  1132. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  1133. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  1134. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  1135. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  1136. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  1137. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  1138. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  1139. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  1140. data/spec/data/client.d_00/00-foo.rb +2 -2
  1141. data/spec/data/client.d_00/01-bar.rb +1 -1
  1142. data/spec/data/client.d_00/bar +1 -1
  1143. data/spec/data/client.d_01/foo/bar.rb +1 -1
  1144. data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
  1145. data/spec/data/config.rb +6 -6
  1146. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  1147. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  1148. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  1149. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  1150. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  1151. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  1152. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  1153. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  1154. data/spec/data/cookbooks/chefignore +8 -8
  1155. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  1156. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  1157. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  1158. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  1159. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  1160. data/spec/data/cookbooks/java/metadata.rb +2 -2
  1161. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  1162. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  1163. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
  1164. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  1165. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  1166. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  1167. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  1168. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  1169. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  1170. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  1171. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  1172. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  1173. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  1174. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  1175. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  1176. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  1177. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  1178. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  1179. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  1180. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  1181. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  1182. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  1183. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  1184. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  1185. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
  1186. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  1187. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
  1188. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
  1189. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  1190. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  1191. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  1192. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  1193. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  1194. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  1195. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  1196. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  1197. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
  1198. data/spec/data/definitions/test.rb +4 -4
  1199. data/spec/data/environment-config.rb +4 -4
  1200. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  1201. data/spec/data/fileedit/hosts +4 -4
  1202. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  1203. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  1204. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
  1205. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  1206. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
  1207. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
  1208. data/spec/data/kitchen/chefignore +6 -6
  1209. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  1210. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  1211. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  1212. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  1213. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  1214. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  1215. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  1216. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  1217. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  1218. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  1219. data/spec/data/lwrp/providers/buck_passer.rb +28 -28
  1220. data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
  1221. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
  1222. data/spec/data/lwrp/providers/inline_compiler.rb +26 -26
  1223. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  1224. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  1225. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  1226. data/spec/data/lwrp/resources/bar.rb +2 -2
  1227. data/spec/data/lwrp/resources/foo.rb +4 -4
  1228. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  1229. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  1230. data/spec/data/lwrp_override/resources/foo.rb +10 -10
  1231. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  1232. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  1233. data/spec/data/mac_users/10.7.plist.xml +559 -559
  1234. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  1235. data/spec/data/mac_users/10.8.plist.xml +559 -559
  1236. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  1237. data/spec/data/mac_users/10.9.plist.xml +560 -560
  1238. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  1239. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  1240. data/spec/data/nested.json +2 -2
  1241. data/spec/data/nodes/default.rb +15 -15
  1242. data/spec/data/nodes/test.example.com.rb +17 -17
  1243. data/spec/data/nodes/test.rb +15 -15
  1244. data/spec/data/null_config.rb +1 -1
  1245. data/spec/data/object_loader/environments/test.json +7 -7
  1246. data/spec/data/object_loader/environments/test.rb +2 -2
  1247. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  1248. data/spec/data/object_loader/nodes/test.json +7 -7
  1249. data/spec/data/object_loader/nodes/test.rb +2 -2
  1250. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  1251. data/spec/data/object_loader/roles/test.json +7 -7
  1252. data/spec/data/object_loader/roles/test.rb +2 -2
  1253. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  1254. data/spec/data/partial_one.erb +1 -1
  1255. data/spec/data/prefer_metadata_json/metadata.json +51 -51
  1256. data/spec/data/prefer_metadata_json/metadata.rb +6 -6
  1257. data/spec/data/recipes/test.rb +7 -7
  1258. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
  1259. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  1260. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  1261. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  1262. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  1263. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  1264. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
  1265. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  1266. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  1267. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  1268. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  1269. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  1270. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  1271. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  1272. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -2
  1273. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  1274. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  1275. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  1276. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  1277. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -2
  1278. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  1279. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  1280. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  1281. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  1282. data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
  1283. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
  1284. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -2
  1285. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  1286. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  1287. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  1288. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
  1289. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  1290. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  1291. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  1292. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  1293. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  1294. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
  1295. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  1296. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  1297. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  1298. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  1299. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  1300. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  1301. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  1302. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  1303. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  1304. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  1305. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  1306. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  1307. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  1308. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  1309. data/spec/data/run_context/nodes/run_context.rb +5 -5
  1310. data/spec/data/sample_msu1.xml +10 -10
  1311. data/spec/data/sample_msu2.xml +14 -14
  1312. data/spec/data/sample_msu3.xml +16 -16
  1313. data/spec/data/search_queries_to_transform.txt +98 -98
  1314. data/spec/data/shef-config.rb +10 -10
  1315. data/spec/data/ssl/5e707473.0 +18 -18
  1316. data/spec/data/ssl/chef-rspec.cert +27 -27
  1317. data/spec/data/ssl/chef-rspec.key +27 -27
  1318. data/spec/data/ssl/key.pem +15 -15
  1319. data/spec/data/ssl/private_key.pem +27 -27
  1320. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  1321. data/spec/data/standalone_cookbook/chefignore +9 -9
  1322. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  1323. data/spec/data/trusted_certs/example.crt +22 -22
  1324. data/spec/data/trusted_certs/example_no_cn.crt +36 -36
  1325. data/spec/data/trusted_certs/intermediate.pem +27 -27
  1326. data/spec/data/trusted_certs/opscode.pem +57 -57
  1327. data/spec/data/trusted_certs/root.pem +22 -22
  1328. data/spec/functional/application_spec.rb +58 -58
  1329. data/spec/functional/assets/chefinittest +36 -36
  1330. data/spec/functional/assets/testchefsubsys +10 -10
  1331. data/spec/functional/assets/yumrepo/repodata/repomd.xml +55 -55
  1332. data/spec/functional/audit/rspec_formatter_spec.rb +54 -54
  1333. data/spec/functional/audit/runner_spec.rb +121 -121
  1334. data/spec/functional/dsl/reboot_pending_spec.rb +106 -106
  1335. data/spec/functional/dsl/registry_helper_spec.rb +61 -61
  1336. data/spec/functional/event_loggers/windows_eventlog_spec.rb +104 -104
  1337. data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
  1338. data/spec/functional/http/simple_spec.rb +140 -140
  1339. data/spec/functional/knife/configure_spec.rb +33 -33
  1340. data/spec/functional/knife/cookbook_delete_spec.rb +156 -156
  1341. data/spec/functional/knife/exec_spec.rb +55 -55
  1342. data/spec/functional/knife/rehash_spec.rb +39 -39
  1343. data/spec/functional/knife/smoke_test.rb +42 -42
  1344. data/spec/functional/knife/ssh_spec.rb +284 -284
  1345. data/spec/functional/mixin/powershell_out_spec.rb +43 -43
  1346. data/spec/functional/mixin/shell_out_spec.rb +48 -48
  1347. data/spec/functional/notifications_spec.rb +238 -238
  1348. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +100 -100
  1349. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -51
  1350. data/spec/functional/rebooter_spec.rb +105 -105
  1351. data/spec/functional/resource/aix_service_spec.rb +138 -138
  1352. data/spec/functional/resource/aixinit_service_spec.rb +211 -211
  1353. data/spec/functional/resource/base.rb +28 -28
  1354. data/spec/functional/resource/bash_spec.rb +88 -88
  1355. data/spec/functional/resource/batch_spec.rb +34 -34
  1356. data/spec/functional/resource/bff_spec.rb +120 -120
  1357. data/spec/functional/resource/chocolatey_package_spec.rb +125 -125
  1358. data/spec/functional/resource/cookbook_file_spec.rb +81 -81
  1359. data/spec/functional/resource/cron_spec.rb +179 -179
  1360. data/spec/functional/resource/deploy_revision_spec.rb +881 -881
  1361. data/spec/functional/resource/directory_spec.rb +43 -43
  1362. data/spec/functional/resource/dnf_package_spec.rb +686 -686
  1363. data/spec/functional/resource/dpkg_package_spec.rb +339 -339
  1364. data/spec/functional/resource/dsc_resource_spec.rb +90 -90
  1365. data/spec/functional/resource/dsc_script_spec.rb +484 -484
  1366. data/spec/functional/resource/env_spec.rb +192 -192
  1367. data/spec/functional/resource/execute_spec.rb +171 -171
  1368. data/spec/functional/resource/file_spec.rb +167 -167
  1369. data/spec/functional/resource/git_spec.rb +257 -257
  1370. data/spec/functional/resource/group_spec.rb +488 -488
  1371. data/spec/functional/resource/ifconfig_spec.rb +171 -171
  1372. data/spec/functional/resource/link_spec.rb +703 -703
  1373. data/spec/functional/resource/mount_spec.rb +207 -207
  1374. data/spec/functional/resource/msu_package_spec.rb +84 -84
  1375. data/spec/functional/resource/ohai_spec.rb +62 -62
  1376. data/spec/functional/resource/package_spec.rb +386 -386
  1377. data/spec/functional/resource/powershell_script_spec.rb +601 -601
  1378. data/spec/functional/resource/reboot_spec.rb +103 -103
  1379. data/spec/functional/resource/registry_spec.rb +676 -676
  1380. data/spec/functional/resource/remote_directory_spec.rb +220 -220
  1381. data/spec/functional/resource/remote_file_spec.rb +249 -249
  1382. data/spec/functional/resource/rpm_spec.rb +120 -120
  1383. data/spec/functional/resource/template_spec.rb +212 -212
  1384. data/spec/functional/resource/user/dscl_spec.rb +196 -196
  1385. data/spec/functional/resource/user/useradd_spec.rb +709 -709
  1386. data/spec/functional/resource/user/windows_spec.rb +133 -133
  1387. data/spec/functional/resource/windows_package_spec.rb +168 -168
  1388. data/spec/functional/resource/windows_service_spec.rb +102 -102
  1389. data/spec/functional/rest_spec.rb +95 -95
  1390. data/spec/functional/run_lock_spec.rb +473 -473
  1391. data/spec/functional/shell_spec.rb +148 -148
  1392. data/spec/functional/tiny_server_spec.rb +79 -79
  1393. data/spec/functional/util/path_helper_spec.rb +37 -37
  1394. data/spec/functional/util/powershell/cmdlet_spec.rb +111 -111
  1395. data/spec/functional/version_spec.rb +35 -35
  1396. data/spec/functional/win32/crypto_spec.rb +54 -54
  1397. data/spec/functional/win32/registry_spec.rb +624 -624
  1398. data/spec/functional/win32/security_spec.rb +135 -100
  1399. data/spec/functional/win32/service_manager_spec.rb +220 -220
  1400. data/spec/functional/win32/sid_spec.rb +55 -55
  1401. data/spec/functional/win32/version_info_spec.rb +50 -50
  1402. data/spec/functional/win32/versions_spec.rb +117 -117
  1403. data/spec/integration/client/client_spec.rb +535 -535
  1404. data/spec/integration/client/exit_code_spec.rb +245 -245
  1405. data/spec/integration/client/ipv6_spec.rb +134 -134
  1406. data/spec/integration/knife/chef_fs_data_store_spec.rb +556 -556
  1407. data/spec/integration/knife/chef_repo_path_spec.rb +959 -959
  1408. data/spec/integration/knife/chef_repository_file_system_spec.rb +296 -296
  1409. data/spec/integration/knife/chefignore_spec.rb +300 -300
  1410. data/spec/integration/knife/client_bulk_delete_spec.rb +130 -130
  1411. data/spec/integration/knife/client_create_spec.rb +69 -69
  1412. data/spec/integration/knife/client_delete_spec.rb +63 -63
  1413. data/spec/integration/knife/client_key_create_spec.rb +65 -65
  1414. data/spec/integration/knife/client_key_delete_spec.rb +42 -42
  1415. data/spec/integration/knife/client_key_list_spec.rb +60 -60
  1416. data/spec/integration/knife/client_key_show_spec.rb +44 -44
  1417. data/spec/integration/knife/client_list_spec.rb +48 -48
  1418. data/spec/integration/knife/client_show_spec.rb +36 -36
  1419. data/spec/integration/knife/common_options_spec.rb +155 -155
  1420. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
  1421. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -64
  1422. data/spec/integration/knife/cookbook_download_spec.rb +95 -95
  1423. data/spec/integration/knife/cookbook_list_spec.rb +54 -54
  1424. data/spec/integration/knife/cookbook_show_spec.rb +159 -159
  1425. data/spec/integration/knife/cookbook_upload_spec.rb +90 -90
  1426. data/spec/integration/knife/data_bag_create_spec.rb +55 -55
  1427. data/spec/integration/knife/data_bag_delete_spec.rb +58 -58
  1428. data/spec/integration/knife/data_bag_from_file_spec.rb +115 -115
  1429. data/spec/integration/knife/data_bag_list_spec.rb +43 -43
  1430. data/spec/integration/knife/data_bag_show_spec.rb +53 -53
  1431. data/spec/integration/knife/delete_spec.rb +1017 -1017
  1432. data/spec/integration/knife/deps_spec.rb +706 -706
  1433. data/spec/integration/knife/diff_spec.rb +602 -602
  1434. data/spec/integration/knife/download_spec.rb +1333 -1333
  1435. data/spec/integration/knife/environment_compare_spec.rb +74 -74
  1436. data/spec/integration/knife/environment_create_spec.rb +40 -40
  1437. data/spec/integration/knife/environment_delete_spec.rb +36 -36
  1438. data/spec/integration/knife/environment_from_file_spec.rb +115 -115
  1439. data/spec/integration/knife/environment_list_spec.rb +41 -41
  1440. data/spec/integration/knife/environment_show_spec.rb +76 -76
  1441. data/spec/integration/knife/list_spec.rb +1059 -1059
  1442. data/spec/integration/knife/node_bulk_delete_spec.rb +51 -51
  1443. data/spec/integration/knife/node_create_spec.rb +46 -46
  1444. data/spec/integration/knife/node_delete_spec.rb +47 -47
  1445. data/spec/integration/knife/node_environment_set_spec.rb +45 -45
  1446. data/spec/integration/knife/node_from_file_spec.rb +58 -58
  1447. data/spec/integration/knife/node_list_spec.rb +44 -44
  1448. data/spec/integration/knife/node_run_list_add_spec.rb +53 -53
  1449. data/spec/integration/knife/node_run_list_remove_spec.rb +35 -35
  1450. data/spec/integration/knife/node_run_list_set_spec.rb +40 -40
  1451. data/spec/integration/knife/node_show_spec.rb +35 -35
  1452. data/spec/integration/knife/raw_spec.rb +244 -244
  1453. data/spec/integration/knife/redirection_spec.rb +52 -52
  1454. data/spec/integration/knife/role_bulk_delete_spec.rb +51 -51
  1455. data/spec/integration/knife/role_create_spec.rb +40 -40
  1456. data/spec/integration/knife/role_delete_spec.rb +47 -47
  1457. data/spec/integration/knife/role_from_file_spec.rb +95 -95
  1458. data/spec/integration/knife/role_list_spec.rb +44 -44
  1459. data/spec/integration/knife/role_show_spec.rb +50 -50
  1460. data/spec/integration/knife/serve_spec.rb +57 -57
  1461. data/spec/integration/knife/show_spec.rb +167 -167
  1462. data/spec/integration/knife/upload_spec.rb +1548 -1548
  1463. data/spec/integration/recipes/accumulator_spec.rb +232 -232
  1464. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +175 -175
  1465. data/spec/integration/recipes/lwrp_spec.rb +53 -53
  1466. data/spec/integration/recipes/noop_resource_spec.rb +24 -24
  1467. data/spec/integration/recipes/notifies_spec.rb +334 -334
  1468. data/spec/integration/recipes/notifying_block_spec.rb +111 -111
  1469. data/spec/integration/recipes/provider_choice.rb +37 -37
  1470. data/spec/integration/recipes/recipe_dsl_spec.rb +1523 -1523
  1471. data/spec/integration/recipes/remote_directory.rb +74 -74
  1472. data/spec/integration/recipes/resource_action_spec.rb +581 -581
  1473. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +496 -496
  1474. data/spec/integration/recipes/resource_load_spec.rb +208 -208
  1475. data/spec/integration/solo/solo_spec.rb +217 -217
  1476. data/spec/rcov.opts +2 -2
  1477. data/spec/scripts/ssl-serve.rb +47 -47
  1478. data/spec/spec_helper.rb +288 -288
  1479. data/spec/stress/win32/file_spec.rb +37 -37
  1480. data/spec/stress/win32/memory_spec.rb +22 -22
  1481. data/spec/stress/win32/security_spec.rb +69 -69
  1482. data/spec/support/chef_helpers.rb +115 -115
  1483. data/spec/support/key_helpers.rb +104 -104
  1484. data/spec/support/lib/chef/provider/easy.rb +35 -35
  1485. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -29
  1486. data/spec/support/lib/chef/provider/snakeoil.rb +42 -42
  1487. data/spec/support/lib/chef/resource/cat.rb +39 -39
  1488. data/spec/support/lib/chef/resource/one_two_three_four.rb +38 -38
  1489. data/spec/support/lib/chef/resource/openldap_includer.rb +28 -28
  1490. data/spec/support/lib/chef/resource/with_state.rb +30 -30
  1491. data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
  1492. data/spec/support/lib/chef/resource/zen_master.rb +42 -42
  1493. data/spec/support/lib/library_load_order.rb +20 -20
  1494. data/spec/support/matchers/leak.rb +98 -98
  1495. data/spec/support/mock/constant.rb +52 -52
  1496. data/spec/support/mock/platform.rb +25 -25
  1497. data/spec/support/platform_helpers.rb +237 -237
  1498. data/spec/support/platforms/prof/gc.rb +51 -51
  1499. data/spec/support/platforms/prof/win32.rb +45 -45
  1500. data/spec/support/platforms/win32/spec_service.rb +59 -59
  1501. data/spec/support/shared/context/client.rb +302 -302
  1502. data/spec/support/shared/context/config.rb +21 -21
  1503. data/spec/support/shared/context/win32.rb +34 -34
  1504. data/spec/support/shared/examples/client.rb +53 -53
  1505. data/spec/support/shared/functional/diff_disabled.rb +10 -10
  1506. data/spec/support/shared/functional/directory_resource.rb +176 -176
  1507. data/spec/support/shared/functional/execute_resource.rb +150 -150
  1508. data/spec/support/shared/functional/file_resource.rb +1050 -1050
  1509. data/spec/support/shared/functional/http.rb +248 -248
  1510. data/spec/support/shared/functional/knife.rb +37 -37
  1511. data/spec/support/shared/functional/securable_resource.rb +547 -547
  1512. data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
  1513. data/spec/support/shared/functional/win32_service.rb +57 -57
  1514. data/spec/support/shared/functional/windows_script.rb +272 -272
  1515. data/spec/support/shared/integration/app_server_support.rb +40 -40
  1516. data/spec/support/shared/integration/integration_helper.rb +154 -154
  1517. data/spec/support/shared/integration/knife_support.rb +185 -185
  1518. data/spec/support/shared/matchers/exit_with_code.rb +32 -32
  1519. data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
  1520. data/spec/support/shared/shared_examples.rb +14 -14
  1521. data/spec/support/shared/unit/api_error_inspector.rb +190 -190
  1522. data/spec/support/shared/unit/api_versioning.rb +77 -77
  1523. data/spec/support/shared/unit/application_dot_d.rb +73 -73
  1524. data/spec/support/shared/unit/execute_resource.rb +170 -170
  1525. data/spec/support/shared/unit/file_system_support.rb +69 -69
  1526. data/spec/support/shared/unit/knife_shared.rb +39 -39
  1527. data/spec/support/shared/unit/mock_shellout.rb +49 -49
  1528. data/spec/support/shared/unit/platform_introspector.rb +189 -189
  1529. data/spec/support/shared/unit/provider/file.rb +845 -845
  1530. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +402 -402
  1531. data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
  1532. data/spec/support/shared/unit/script_resource.rb +98 -98
  1533. data/spec/support/shared/unit/user_and_client_shared.rb +114 -114
  1534. data/spec/support/shared/unit/windows_script_resource.rb +80 -80
  1535. data/spec/tiny_server.rb +192 -192
  1536. data/spec/unit/api_client/registration_spec.rb +278 -278
  1537. data/spec/unit/api_client_spec.rb +341 -341
  1538. data/spec/unit/api_client_v1_spec.rb +455 -455
  1539. data/spec/unit/application/apply_spec.rb +113 -113
  1540. data/spec/unit/application/client_spec.rb +530 -530
  1541. data/spec/unit/application/exit_code_spec.rb +229 -229
  1542. data/spec/unit/application/knife_spec.rb +229 -229
  1543. data/spec/unit/application/solo_spec.rb +232 -232
  1544. data/spec/unit/application_spec.rb +411 -411
  1545. data/spec/unit/audit/audit_event_proxy_spec.rb +318 -318
  1546. data/spec/unit/audit/audit_reporter_spec.rb +439 -439
  1547. data/spec/unit/audit/control_group_data_spec.rb +482 -482
  1548. data/spec/unit/audit/logger_spec.rb +42 -42
  1549. data/spec/unit/audit/rspec_formatter_spec.rb +29 -29
  1550. data/spec/unit/audit/runner_spec.rb +144 -144
  1551. data/spec/unit/chef_class_spec.rb +110 -110
  1552. data/spec/unit/chef_fs/config_spec.rb +235 -235
  1553. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -63
  1554. data/spec/unit/chef_fs/diff_spec.rb +328 -328
  1555. data/spec/unit/chef_fs/file_pattern_spec.rb +512 -512
  1556. data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -34
  1557. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -47
  1558. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +126 -126
  1559. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +175 -175
  1560. data/spec/unit/chef_fs/file_system_spec.rb +148 -148
  1561. data/spec/unit/chef_fs/parallelizer.rb +477 -477
  1562. data/spec/unit/chef_fs/path_util_spec.rb +108 -108
  1563. data/spec/unit/chef_spec.rb +25 -25
  1564. data/spec/unit/client_spec.rb +604 -604
  1565. data/spec/unit/config_fetcher_spec.rb +125 -125
  1566. data/spec/unit/config_spec.rb +31 -31
  1567. data/spec/unit/cookbook/chefignore_spec.rb +49 -49
  1568. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +207 -207
  1569. data/spec/unit/cookbook/file_vendor_spec.rb +112 -112
  1570. data/spec/unit/cookbook/metadata_spec.rb +971 -971
  1571. data/spec/unit/cookbook/synchronizer_spec.rb +539 -539
  1572. data/spec/unit/cookbook/syntax_check_spec.rb +225 -225
  1573. data/spec/unit/cookbook_loader_spec.rb +299 -299
  1574. data/spec/unit/cookbook_manifest_spec.rb +243 -243
  1575. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +203 -203
  1576. data/spec/unit/cookbook_spec.rb +66 -66
  1577. data/spec/unit/cookbook_uploader_spec.rb +199 -199
  1578. data/spec/unit/cookbook_version_file_specificity_spec.rb +576 -576
  1579. data/spec/unit/cookbook_version_spec.rb +359 -359
  1580. data/spec/unit/daemon_spec.rb +183 -183
  1581. data/spec/unit/data_bag_item_spec.rb +388 -388
  1582. data/spec/unit/data_bag_spec.rb +260 -260
  1583. data/spec/unit/data_collector/messages/helpers_spec.rb +193 -193
  1584. data/spec/unit/data_collector/messages_spec.rb +192 -192
  1585. data/spec/unit/data_collector/resource_report_spec.rb +145 -145
  1586. data/spec/unit/data_collector_spec.rb +741 -741
  1587. data/spec/unit/decorator/lazy_array_spec.rb +58 -58
  1588. data/spec/unit/decorator/lazy_spec.rb +39 -39
  1589. data/spec/unit/decorator_spec.rb +142 -142
  1590. data/spec/unit/deprecated_spec.rb +59 -59
  1591. data/spec/unit/deprecation_spec.rb +143 -143
  1592. data/spec/unit/digester_spec.rb +49 -49
  1593. data/spec/unit/dsl/audit_spec.rb +43 -43
  1594. data/spec/unit/dsl/data_query_spec.rb +107 -107
  1595. data/spec/unit/dsl/declare_resource_spec.rb +365 -365
  1596. data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
  1597. data/spec/unit/dsl/reboot_pending_spec.rb +100 -100
  1598. data/spec/unit/dsl/recipe_spec.rb +93 -93
  1599. data/spec/unit/dsl/registry_helper_spec.rb +52 -52
  1600. data/spec/unit/dsl/resources_spec.rb +85 -85
  1601. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +96 -96
  1602. data/spec/unit/encrypted_data_bag_item_spec.rb +438 -438
  1603. data/spec/unit/environment_spec.rb +470 -470
  1604. data/spec/unit/event_dispatch/dispatcher_spec.rb +122 -122
  1605. data/spec/unit/event_dispatch/dsl_spec.rb +83 -83
  1606. data/spec/unit/exceptions_spec.rb +132 -132
  1607. data/spec/unit/file_access_control_spec.rb +308 -308
  1608. data/spec/unit/file_cache_spec.rb +114 -114
  1609. data/spec/unit/file_content_management/deploy/cp_spec.rb +44 -44
  1610. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +101 -101
  1611. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
  1612. data/spec/unit/file_content_management/tempfile_spec.rb +115 -115
  1613. data/spec/unit/formatters/base_spec.rb +71 -71
  1614. data/spec/unit/formatters/doc_spec.rb +92 -92
  1615. data/spec/unit/formatters/error_description_spec.rb +141 -141
  1616. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +76 -76
  1617. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +265 -265
  1618. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +126 -126
  1619. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -43
  1620. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +26 -26
  1621. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +26 -26
  1622. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +191 -191
  1623. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +91 -91
  1624. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +155 -155
  1625. data/spec/unit/guard_interpreter_spec.rb +41 -41
  1626. data/spec/unit/handler/json_file_spec.rb +63 -63
  1627. data/spec/unit/handler_spec.rb +302 -302
  1628. data/spec/unit/http/api_versions_spec.rb +69 -69
  1629. data/spec/unit/http/authenticator_spec.rb +80 -80
  1630. data/spec/unit/http/basic_client_spec.rb +72 -72
  1631. data/spec/unit/http/http_request_spec.rb +91 -91
  1632. data/spec/unit/http/json_input_spec.rb +128 -128
  1633. data/spec/unit/http/simple_spec.rb +32 -32
  1634. data/spec/unit/http/socketless_chef_zero_client_spec.rb +173 -173
  1635. data/spec/unit/http/ssl_policies_spec.rb +169 -169
  1636. data/spec/unit/http/validate_content_length_spec.rb +207 -207
  1637. data/spec/unit/http_spec.rb +220 -220
  1638. data/spec/unit/json_compat_spec.rb +105 -105
  1639. data/spec/unit/key_spec.rb +631 -631
  1640. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
  1641. data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
  1642. data/spec/unit/knife/bootstrap_spec.rb +824 -824
  1643. data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
  1644. data/spec/unit/knife/client_create_spec.rb +186 -186
  1645. data/spec/unit/knife/client_delete_spec.rb +99 -99
  1646. data/spec/unit/knife/client_edit_spec.rb +53 -53
  1647. data/spec/unit/knife/client_list_spec.rb +34 -34
  1648. data/spec/unit/knife/client_reregister_spec.rb +62 -62
  1649. data/spec/unit/knife/client_show_spec.rb +52 -52
  1650. data/spec/unit/knife/configure_client_spec.rb +83 -83
  1651. data/spec/unit/knife/configure_spec.rb +241 -241
  1652. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
  1653. data/spec/unit/knife/cookbook_create_spec.rb +261 -261
  1654. data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
  1655. data/spec/unit/knife/cookbook_download_spec.rb +237 -237
  1656. data/spec/unit/knife/cookbook_list_spec.rb +88 -88
  1657. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
  1658. data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
  1659. data/spec/unit/knife/cookbook_show_spec.rb +221 -221
  1660. data/spec/unit/knife/cookbook_site_download_spec.rb +150 -150
  1661. data/spec/unit/knife/cookbook_site_install_spec.rb +200 -200
  1662. data/spec/unit/knife/cookbook_site_share_spec.rb +209 -209
  1663. data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -77
  1664. data/spec/unit/knife/cookbook_test_spec.rb +84 -84
  1665. data/spec/unit/knife/cookbook_upload_spec.rb +331 -331
  1666. data/spec/unit/knife/core/bootstrap_context_spec.rb +307 -307
  1667. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
  1668. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -41
  1669. data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
  1670. data/spec/unit/knife/core/hashed_command_loader_spec.rb +110 -110
  1671. data/spec/unit/knife/core/node_editor_spec.rb +211 -211
  1672. data/spec/unit/knife/core/object_loader_spec.rb +81 -81
  1673. data/spec/unit/knife/core/subcommand_loader_spec.rb +70 -70
  1674. data/spec/unit/knife/core/ui_spec.rb +629 -629
  1675. data/spec/unit/knife/data_bag_create_spec.rb +129 -129
  1676. data/spec/unit/knife/data_bag_edit_spec.rb +127 -127
  1677. data/spec/unit/knife/data_bag_from_file_spec.rb +173 -173
  1678. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
  1679. data/spec/unit/knife/data_bag_show_spec.rb +124 -124
  1680. data/spec/unit/knife/environment_compare_spec.rb +112 -112
  1681. data/spec/unit/knife/environment_create_spec.rb +91 -91
  1682. data/spec/unit/knife/environment_delete_spec.rb +71 -71
  1683. data/spec/unit/knife/environment_edit_spec.rb +79 -79
  1684. data/spec/unit/knife/environment_from_file_spec.rb +90 -90
  1685. data/spec/unit/knife/environment_list_spec.rb +54 -54
  1686. data/spec/unit/knife/environment_show_spec.rb +52 -52
  1687. data/spec/unit/knife/index_rebuild_spec.rb +125 -125
  1688. data/spec/unit/knife/key_create_spec.rb +223 -223
  1689. data/spec/unit/knife/key_delete_spec.rb +133 -133
  1690. data/spec/unit/knife/key_edit_spec.rb +264 -264
  1691. data/spec/unit/knife/key_helper.rb +74 -74
  1692. data/spec/unit/knife/key_list_spec.rb +216 -216
  1693. data/spec/unit/knife/key_show_spec.rb +126 -126
  1694. data/spec/unit/knife/knife_help.rb +92 -92
  1695. data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
  1696. data/spec/unit/knife/node_delete_spec.rb +77 -77
  1697. data/spec/unit/knife/node_edit_spec.rb +114 -114
  1698. data/spec/unit/knife/node_environment_set_spec.rb +56 -56
  1699. data/spec/unit/knife/node_from_file_spec.rb +59 -59
  1700. data/spec/unit/knife/node_list_spec.rb +62 -62
  1701. data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
  1702. data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
  1703. data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
  1704. data/spec/unit/knife/node_show_spec.rb +65 -65
  1705. data/spec/unit/knife/osc_user_create_spec.rb +93 -93
  1706. data/spec/unit/knife/osc_user_delete_spec.rb +44 -44
  1707. data/spec/unit/knife/osc_user_edit_spec.rb +52 -52
  1708. data/spec/unit/knife/osc_user_list_spec.rb +37 -37
  1709. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -58
  1710. data/spec/unit/knife/osc_user_show_spec.rb +46 -46
  1711. data/spec/unit/knife/raw_spec.rb +43 -43
  1712. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
  1713. data/spec/unit/knife/role_create_spec.rb +80 -80
  1714. data/spec/unit/knife/role_delete_spec.rb +67 -67
  1715. data/spec/unit/knife/role_edit_spec.rb +77 -77
  1716. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
  1717. data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
  1718. data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
  1719. data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
  1720. data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
  1721. data/spec/unit/knife/role_from_file_spec.rb +69 -69
  1722. data/spec/unit/knife/role_list_spec.rb +54 -54
  1723. data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
  1724. data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
  1725. data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
  1726. data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
  1727. data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
  1728. data/spec/unit/knife/role_show_spec.rb +59 -59
  1729. data/spec/unit/knife/ssh_spec.rb +426 -426
  1730. data/spec/unit/knife/ssl_check_spec.rb +256 -256
  1731. data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
  1732. data/spec/unit/knife/status_spec.rb +109 -109
  1733. data/spec/unit/knife/tag_create_spec.rb +23 -23
  1734. data/spec/unit/knife/tag_delete_spec.rb +25 -25
  1735. data/spec/unit/knife/tag_list_spec.rb +23 -23
  1736. data/spec/unit/knife/user_create_spec.rb +214 -214
  1737. data/spec/unit/knife/user_delete_spec.rb +65 -65
  1738. data/spec/unit/knife/user_edit_spec.rb +66 -66
  1739. data/spec/unit/knife/user_list_spec.rb +36 -36
  1740. data/spec/unit/knife/user_reregister_spec.rb +74 -74
  1741. data/spec/unit/knife/user_show_spec.rb +65 -65
  1742. data/spec/unit/knife_spec.rb +561 -561
  1743. data/spec/unit/lib_backcompat_spec.rb +34 -34
  1744. data/spec/unit/log/syslog_spec.rb +53 -53
  1745. data/spec/unit/log/winevt_spec.rb +55 -55
  1746. data/spec/unit/log_spec.rb +24 -24
  1747. data/spec/unit/lwrp_spec.rb +777 -777
  1748. data/spec/unit/mash_spec.rb +51 -51
  1749. data/spec/unit/mixin/api_version_request_handling_spec.rb +126 -126
  1750. data/spec/unit/mixin/checksum_spec.rb +54 -54
  1751. data/spec/unit/mixin/command_spec.rb +107 -107
  1752. data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -54
  1753. data/spec/unit/mixin/deep_merge_spec.rb +342 -342
  1754. data/spec/unit/mixin/deprecation_spec.rb +57 -57
  1755. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -96
  1756. data/spec/unit/mixin/homebrew_user_spec.rb +100 -100
  1757. data/spec/unit/mixin/lazy_module_include.rb +71 -71
  1758. data/spec/unit/mixin/params_validate_spec.rb +410 -410
  1759. data/spec/unit/mixin/path_sanity_spec.rb +92 -92
  1760. data/spec/unit/mixin/powershell_out_spec.rb +94 -94
  1761. data/spec/unit/mixin/powershell_type_coercions_spec.rb +83 -83
  1762. data/spec/unit/mixin/properties_spec.rb +97 -97
  1763. data/spec/unit/mixin/proxified_socket_spec.rb +97 -97
  1764. data/spec/unit/mixin/securable_spec.rb +314 -314
  1765. data/spec/unit/mixin/shell_out_spec.rb +302 -302
  1766. data/spec/unit/mixin/subclass_directive_spec.rb +45 -45
  1767. data/spec/unit/mixin/template_spec.rb +276 -276
  1768. data/spec/unit/mixin/unformatter_spec.rb +61 -61
  1769. data/spec/unit/mixin/uris_spec.rb +57 -57
  1770. data/spec/unit/mixin/versioned_api_spec.rb +107 -107
  1771. data/spec/unit/mixin/which.rb +160 -160
  1772. data/spec/unit/mixin/windows_architecture_helper_spec.rb +85 -85
  1773. data/spec/unit/mixin/xml_escape_spec.rb +54 -54
  1774. data/spec/unit/monkey_patches/uri_spec.rb +34 -34
  1775. data/spec/unit/monologger_spec.rb +45 -45
  1776. data/spec/unit/node/attribute_spec.rb +1244 -1244
  1777. data/spec/unit/node/immutable_collections_spec.rb +214 -214
  1778. data/spec/unit/node/vivid_mash_spec.rb +353 -353
  1779. data/spec/unit/node_map_spec.rb +170 -170
  1780. data/spec/unit/node_spec.rb +1836 -1836
  1781. data/spec/unit/org_spec.rb +196 -196
  1782. data/spec/unit/platform/query_helpers_spec.rb +220 -220
  1783. data/spec/unit/platform_spec.rb +269 -269
  1784. data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
  1785. data/spec/unit/policy_builder/expand_node_object_spec.rb +336 -336
  1786. data/spec/unit/policy_builder/policyfile_spec.rb +795 -795
  1787. data/spec/unit/policy_builder_spec.rb +26 -26
  1788. data/spec/unit/property/state_spec.rb +508 -508
  1789. data/spec/unit/property/validation_spec.rb +720 -720
  1790. data/spec/unit/property_spec.rb +1227 -1227
  1791. data/spec/unit/provider/apt_repository_spec.rb +189 -189
  1792. data/spec/unit/provider/apt_update_spec.rb +114 -114
  1793. data/spec/unit/provider/breakpoint_spec.rb +53 -53
  1794. data/spec/unit/provider/cookbook_file/content_spec.rb +39 -39
  1795. data/spec/unit/provider/cookbook_file_spec.rb +58 -58
  1796. data/spec/unit/provider/cron/unix_spec.rb +139 -139
  1797. data/spec/unit/provider/cron_spec.rb +1010 -1010
  1798. data/spec/unit/provider/deploy/revision_spec.rb +110 -110
  1799. data/spec/unit/provider/deploy/timestamped_spec.rb +40 -40
  1800. data/spec/unit/provider/deploy_spec.rb +641 -641
  1801. data/spec/unit/provider/directory_spec.rb +300 -300
  1802. data/spec/unit/provider/dsc_resource_spec.rb +343 -343
  1803. data/spec/unit/provider/dsc_script_spec.rb +173 -173
  1804. data/spec/unit/provider/env/windows_spec.rb +103 -103
  1805. data/spec/unit/provider/env_spec.rb +310 -310
  1806. data/spec/unit/provider/erl_call_spec.rb +85 -85
  1807. data/spec/unit/provider/execute_spec.rb +242 -242
  1808. data/spec/unit/provider/file/content_spec.rb +114 -114
  1809. data/spec/unit/provider/file_spec.rb +56 -56
  1810. data/spec/unit/provider/git_spec.rb +727 -727
  1811. data/spec/unit/provider/group/dscl_spec.rb +331 -331
  1812. data/spec/unit/provider/group/gpasswd_spec.rb +116 -116
  1813. data/spec/unit/provider/group/groupadd_spec.rb +194 -194
  1814. data/spec/unit/provider/group/groupmod_spec.rb +133 -133
  1815. data/spec/unit/provider/group/pw_spec.rb +138 -138
  1816. data/spec/unit/provider/group/suse_spec.rb +90 -90
  1817. data/spec/unit/provider/group/usermod_spec.rb +115 -115
  1818. data/spec/unit/provider/group/windows_spec.rb +109 -109
  1819. data/spec/unit/provider/group_spec.rb +286 -286
  1820. data/spec/unit/provider/http_request_spec.rb +159 -159
  1821. data/spec/unit/provider/ifconfig/aix_spec.rb +180 -180
  1822. data/spec/unit/provider/ifconfig/debian_spec.rb +332 -332
  1823. data/spec/unit/provider/ifconfig/redhat_spec.rb +73 -73
  1824. data/spec/unit/provider/ifconfig_spec.rb +194 -194
  1825. data/spec/unit/provider/launchd_spec.rb +268 -268
  1826. data/spec/unit/provider/link_spec.rb +407 -407
  1827. data/spec/unit/provider/log_spec.rb +89 -89
  1828. data/spec/unit/provider/mdadm_spec.rb +140 -140
  1829. data/spec/unit/provider/mount/aix_spec.rb +237 -237
  1830. data/spec/unit/provider/mount/mount_spec.rb +474 -474
  1831. data/spec/unit/provider/mount/solaris_spec.rb +822 -822
  1832. data/spec/unit/provider/mount/windows_spec.rb +149 -149
  1833. data/spec/unit/provider/mount_spec.rb +191 -191
  1834. data/spec/unit/provider/ohai_spec.rb +84 -84
  1835. data/spec/unit/provider/osx_profile_spec.rb +255 -255
  1836. data/spec/unit/provider/package/aix_spec.rb +185 -185
  1837. data/spec/unit/provider/package/apt_spec.rb +481 -481
  1838. data/spec/unit/provider/package/cab_spec.rb +272 -272
  1839. data/spec/unit/provider/package/chocolatey_spec.rb +489 -489
  1840. data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -29
  1841. data/spec/unit/provider/package/dpkg_spec.rb +287 -287
  1842. data/spec/unit/provider/package/easy_install_spec.rb +114 -114
  1843. data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -274
  1844. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +148 -148
  1845. data/spec/unit/provider/package/freebsd/port_spec.rb +163 -163
  1846. data/spec/unit/provider/package/homebrew_spec.rb +292 -292
  1847. data/spec/unit/provider/package/ips_spec.rb +233 -233
  1848. data/spec/unit/provider/package/macports_spec.rb +203 -203
  1849. data/spec/unit/provider/package/msu_spec.rb +283 -283
  1850. data/spec/unit/provider/package/openbsd_spec.rb +132 -132
  1851. data/spec/unit/provider/package/pacman_spec.rb +194 -194
  1852. data/spec/unit/provider/package/paludis_spec.rb +134 -134
  1853. data/spec/unit/provider/package/portage_spec.rb +315 -315
  1854. data/spec/unit/provider/package/powershell_spec.rb +337 -337
  1855. data/spec/unit/provider/package/rpm_spec.rb +429 -429
  1856. data/spec/unit/provider/package/rubygems_spec.rb +824 -824
  1857. data/spec/unit/provider/package/smartos_spec.rb +110 -110
  1858. data/spec/unit/provider/package/solaris_spec.rb +167 -167
  1859. data/spec/unit/provider/package/windows/exe_spec.rb +201 -201
  1860. data/spec/unit/provider/package/windows/msi_spec.rb +168 -168
  1861. data/spec/unit/provider/package/windows_spec.rb +443 -443
  1862. data/spec/unit/provider/package/yum/yum_cache_spec.rb +27 -27
  1863. data/spec/unit/provider/package/yum_spec.rb +2294 -2294
  1864. data/spec/unit/provider/package/zypper_spec.rb +348 -348
  1865. data/spec/unit/provider/package_spec.rb +949 -949
  1866. data/spec/unit/provider/powershell_script_spec.rb +106 -106
  1867. data/spec/unit/provider/registry_key_spec.rb +407 -407
  1868. data/spec/unit/provider/remote_directory_spec.rb +236 -236
  1869. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +245 -245
  1870. data/spec/unit/provider/remote_file/content_spec.rb +253 -253
  1871. data/spec/unit/provider/remote_file/fetcher_spec.rb +94 -94
  1872. data/spec/unit/provider/remote_file/ftp_spec.rb +217 -217
  1873. data/spec/unit/provider/remote_file/http_spec.rb +322 -322
  1874. data/spec/unit/provider/remote_file/local_file_spec.rb +105 -105
  1875. data/spec/unit/provider/remote_file/network_file_spec.rb +45 -45
  1876. data/spec/unit/provider/remote_file/sftp_spec.rb +150 -150
  1877. data/spec/unit/provider/remote_file_spec.rb +61 -61
  1878. data/spec/unit/provider/route_spec.rb +248 -248
  1879. data/spec/unit/provider/ruby_block_spec.rb +45 -45
  1880. data/spec/unit/provider/script_spec.rb +157 -157
  1881. data/spec/unit/provider/service/aix_service_spec.rb +195 -195
  1882. data/spec/unit/provider/service/aixinit_service_spec.rb +272 -272
  1883. data/spec/unit/provider/service/arch_service_spec.rb +324 -324
  1884. data/spec/unit/provider/service/debian_service_spec.rb +375 -375
  1885. data/spec/unit/provider/service/freebsd_service_spec.rb +617 -617
  1886. data/spec/unit/provider/service/gentoo_service_spec.rb +144 -144
  1887. data/spec/unit/provider/service/init_service_spec.rb +235 -235
  1888. data/spec/unit/provider/service/insserv_service_spec.rb +75 -75
  1889. data/spec/unit/provider/service/invokercd_service_spec.rb +211 -211
  1890. data/spec/unit/provider/service/macosx_spec.rb +335 -335
  1891. data/spec/unit/provider/service/openbsd_service_spec.rb +549 -549
  1892. data/spec/unit/provider/service/redhat_spec.rb +250 -250
  1893. data/spec/unit/provider/service/simple_service_spec.rb +169 -169
  1894. data/spec/unit/provider/service/solaris_smf_service_spec.rb +255 -255
  1895. data/spec/unit/provider/service/systemd_service_spec.rb +370 -370
  1896. data/spec/unit/provider/service/upstart_service_spec.rb +364 -364
  1897. data/spec/unit/provider/service/windows_spec.rb +463 -463
  1898. data/spec/unit/provider/service_spec.rb +168 -168
  1899. data/spec/unit/provider/subversion_spec.rb +361 -361
  1900. data/spec/unit/provider/systemd_unit_spec.rb +885 -885
  1901. data/spec/unit/provider/template/content_spec.rb +169 -169
  1902. data/spec/unit/provider/template_spec.rb +89 -89
  1903. data/spec/unit/provider/user/dscl_spec.rb +902 -902
  1904. data/spec/unit/provider/user/linux_spec.rb +112 -112
  1905. data/spec/unit/provider/user/pw_spec.rb +255 -255
  1906. data/spec/unit/provider/user/solaris_spec.rb +178 -178
  1907. data/spec/unit/provider/user/windows_spec.rb +185 -185
  1908. data/spec/unit/provider/user_spec.rb +478 -478
  1909. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
  1910. data/spec/unit/provider/yum_repository_spec.rb +35 -35
  1911. data/spec/unit/provider_resolver_spec.rb +939 -939
  1912. data/spec/unit/provider_spec.rb +198 -198
  1913. data/spec/unit/pure_application_spec.rb +32 -32
  1914. data/spec/unit/recipe_spec.rb +758 -758
  1915. data/spec/unit/resource/apt_package_spec.rb +38 -38
  1916. data/spec/unit/resource/apt_repository_spec.rb +50 -50
  1917. data/spec/unit/resource/apt_update_spec.rb +50 -50
  1918. data/spec/unit/resource/bash_spec.rb +40 -40
  1919. data/spec/unit/resource/batch_spec.rb +49 -49
  1920. data/spec/unit/resource/breakpoint_spec.rb +47 -47
  1921. data/spec/unit/resource/cab_package_spec.rb +38 -38
  1922. data/spec/unit/resource/chef_gem_spec.rb +157 -157
  1923. data/spec/unit/resource/chocolatey_package_spec.rb +79 -79
  1924. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
  1925. data/spec/unit/resource/conditional_spec.rb +254 -254
  1926. data/spec/unit/resource/cookbook_file_spec.rb +88 -88
  1927. data/spec/unit/resource/cron_spec.rb +186 -186
  1928. data/spec/unit/resource/csh_spec.rb +40 -40
  1929. data/spec/unit/resource/deploy_revision_spec.rb +42 -42
  1930. data/spec/unit/resource/deploy_spec.rb +283 -283
  1931. data/spec/unit/resource/directory_spec.rb +82 -82
  1932. data/spec/unit/resource/dnf_package_spec.rb +99 -99
  1933. data/spec/unit/resource/dpkg_package_spec.rb +32 -32
  1934. data/spec/unit/resource/dsc_resource_spec.rb +102 -102
  1935. data/spec/unit/resource/dsc_script_spec.rb +134 -134
  1936. data/spec/unit/resource/easy_install_package_spec.rb +39 -39
  1937. data/spec/unit/resource/env_spec.rb +85 -85
  1938. data/spec/unit/resource/erl_call_spec.rb +81 -81
  1939. data/spec/unit/resource/execute_spec.rb +249 -249
  1940. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -103
  1941. data/spec/unit/resource/file/verification_spec.rb +139 -139
  1942. data/spec/unit/resource/file_spec.rb +130 -130
  1943. data/spec/unit/resource/freebsd_package_spec.rb +87 -87
  1944. data/spec/unit/resource/gem_package_spec.rb +42 -42
  1945. data/spec/unit/resource/git_spec.rb +50 -50
  1946. data/spec/unit/resource/group_spec.rb +162 -162
  1947. data/spec/unit/resource/homebrew_package_spec.rb +50 -50
  1948. data/spec/unit/resource/http_request_spec.rb +59 -59
  1949. data/spec/unit/resource/ifconfig_spec.rb +109 -109
  1950. data/spec/unit/resource/ips_package_spec.rb +40 -40
  1951. data/spec/unit/resource/ksh_spec.rb +40 -40
  1952. data/spec/unit/resource/launchd_spec.rb +32 -32
  1953. data/spec/unit/resource/link_spec.rb +134 -134
  1954. data/spec/unit/resource/log_spec.rb +73 -73
  1955. data/spec/unit/resource/macports_package_spec.rb +32 -32
  1956. data/spec/unit/resource/mdadm_spec.rb +107 -107
  1957. data/spec/unit/resource/mount_spec.rb +215 -215
  1958. data/spec/unit/resource/msu_package_spec.rb +49 -49
  1959. data/spec/unit/resource/ohai_spec.rb +61 -61
  1960. data/spec/unit/resource/openbsd_package_spec.rb +48 -48
  1961. data/spec/unit/resource/osx_profile_spec.rb +62 -62
  1962. data/spec/unit/resource/package_spec.rb +98 -98
  1963. data/spec/unit/resource/pacman_package_spec.rb +32 -32
  1964. data/spec/unit/resource/perl_spec.rb +40 -40
  1965. data/spec/unit/resource/portage_package_spec.rb +38 -38
  1966. data/spec/unit/resource/powershell_package_spec.rb +68 -68
  1967. data/spec/unit/resource/powershell_script_spec.rb +136 -136
  1968. data/spec/unit/resource/python_spec.rb +40 -40
  1969. data/spec/unit/resource/registry_key_spec.rb +215 -215
  1970. data/spec/unit/resource/remote_directory_spec.rb +97 -97
  1971. data/spec/unit/resource/remote_file_spec.rb +207 -207
  1972. data/spec/unit/resource/resource_notification_spec.rb +169 -169
  1973. data/spec/unit/resource/route_spec.rb +107 -107
  1974. data/spec/unit/resource/rpm_package_spec.rb +46 -46
  1975. data/spec/unit/resource/ruby_block_spec.rb +61 -61
  1976. data/spec/unit/resource/ruby_spec.rb +40 -40
  1977. data/spec/unit/resource/scm_spec.rb +193 -193
  1978. data/spec/unit/resource/script_spec.rb +44 -44
  1979. data/spec/unit/resource/service_spec.rb +179 -179
  1980. data/spec/unit/resource/smartos_package_spec.rb +33 -33
  1981. data/spec/unit/resource/solaris_package_spec.rb +42 -42
  1982. data/spec/unit/resource/subversion_spec.rb +71 -71
  1983. data/spec/unit/resource/systemd_unit_spec.rb +133 -133
  1984. data/spec/unit/resource/template_spec.rb +210 -210
  1985. data/spec/unit/resource/timestamped_deploy_spec.rb +32 -32
  1986. data/spec/unit/resource/user_spec.rb +133 -133
  1987. data/spec/unit/resource/windows_package_spec.rb +95 -95
  1988. data/spec/unit/resource/windows_service_spec.rb +49 -49
  1989. data/spec/unit/resource/yum_package_spec.rb +150 -150
  1990. data/spec/unit/resource/yum_repository_spec.rb +49 -49
  1991. data/spec/unit/resource_builder_spec.rb +1 -1
  1992. data/spec/unit/resource_collection/resource_list_spec.rb +137 -137
  1993. data/spec/unit/resource_collection/resource_set_spec.rb +199 -199
  1994. data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
  1995. data/spec/unit/resource_collection_spec.rb +399 -399
  1996. data/spec/unit/resource_definition_spec.rb +117 -117
  1997. data/spec/unit/resource_reporter_spec.rb +782 -782
  1998. data/spec/unit/resource_resolver_spec.rb +52 -52
  1999. data/spec/unit/resource_spec.rb +1141 -1141
  2000. data/spec/unit/rest/auth_credentials_spec.rb +292 -292
  2001. data/spec/unit/rest_spec.rb +753 -753
  2002. data/spec/unit/role_spec.rb +358 -358
  2003. data/spec/unit/run_context/child_run_context_spec.rb +133 -133
  2004. data/spec/unit/run_context/cookbook_compiler_spec.rb +226 -226
  2005. data/spec/unit/run_context_spec.rb +241 -241
  2006. data/spec/unit/run_list/run_list_expansion_spec.rb +144 -144
  2007. data/spec/unit/run_list/run_list_item_spec.rb +117 -117
  2008. data/spec/unit/run_list/versioned_recipe_list_spec.rb +194 -194
  2009. data/spec/unit/run_list_spec.rb +312 -312
  2010. data/spec/unit/run_lock_spec.rb +140 -140
  2011. data/spec/unit/run_status_spec.rb +144 -144
  2012. data/spec/unit/runner_spec.rb +412 -412
  2013. data/spec/unit/scan_access_control_spec.rb +183 -183
  2014. data/spec/unit/search/query_spec.rb +290 -290
  2015. data/spec/unit/server_api_spec.rb +50 -50
  2016. data/spec/unit/server_api_versions_spec.rb +44 -44
  2017. data/spec/unit/shell/model_wrapper_spec.rb +96 -96
  2018. data/spec/unit/shell/shell_ext_spec.rb +153 -153
  2019. data/spec/unit/shell/shell_session_spec.rb +195 -195
  2020. data/spec/unit/shell_out_spec.rb +18 -18
  2021. data/spec/unit/shell_spec.rb +162 -162
  2022. data/spec/unit/user_spec.rb +275 -275
  2023. data/spec/unit/user_v1_spec.rb +583 -583
  2024. data/spec/unit/util/backup_spec.rb +141 -141
  2025. data/spec/unit/util/diff_spec.rb +576 -576
  2026. data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -193
  2027. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +248 -248
  2028. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +200 -200
  2029. data/spec/unit/util/dsc/resource_store.rb +78 -78
  2030. data/spec/unit/util/editor_spec.rb +152 -152
  2031. data/spec/unit/util/file_edit_spec.rb +224 -224
  2032. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -106
  2033. data/spec/unit/util/powershell/ps_credential_spec.rb +44 -44
  2034. data/spec/unit/util/selinux_spec.rb +160 -160
  2035. data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
  2036. data/spec/unit/version/platform_spec.rb +60 -60
  2037. data/spec/unit/version_class_spec.rb +171 -171
  2038. data/spec/unit/version_constraint/platform_spec.rb +45 -45
  2039. data/spec/unit/version_constraint_spec.rb +179 -179
  2040. data/spec/unit/win32/error_spec.rb +67 -67
  2041. data/spec/unit/win32/registry_spec.rb +394 -394
  2042. data/spec/unit/win32/security_spec.rb +66 -66
  2043. data/spec/unit/windows_service_spec.rb +116 -116
  2044. data/tasks/announce.rb +58 -58
  2045. data/tasks/bin/bundle-platform +20 -20
  2046. data/tasks/bin/bundle-platform.bat +2 -2
  2047. data/tasks/bin/bundler_patch.rb +27 -27
  2048. data/tasks/bin/create-override-gemfile +110 -110
  2049. data/tasks/bin/gem-version-diff +37 -37
  2050. data/tasks/bin/run_external_test +47 -47
  2051. data/tasks/bundle.rb +97 -97
  2052. data/tasks/bundle_util.rb +110 -110
  2053. data/tasks/cbgb.rb +84 -84
  2054. data/tasks/changelog.rb +31 -31
  2055. data/tasks/dependencies.rb +151 -151
  2056. data/tasks/gemfile_util.rb +390 -390
  2057. data/tasks/maintainers.rb +211 -211
  2058. data/tasks/rspec.rb +90 -90
  2059. data/tasks/templates/prerelease.md.erb +26 -26
  2060. data/tasks/templates/release.md.erb +26 -26
  2061. metadata +4 -4
@@ -1,111 +1,111 @@
1
- #
2
- # Author:: John Keiser (<jkeiser@chef.io>)
3
- # Copyright:: Copyright 2013-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
- require "support/shared/integration/integration_helper"
19
- require "chef/mixin/shell_out"
20
-
21
- describe "notifying_block" do
22
- include IntegrationSupport
23
- include Chef::Mixin::ShellOut
24
-
25
- let(:chef_dir) { File.expand_path("../../../../bin", __FILE__) }
26
- let(:chef_client) { "ruby '#{chef_dir}/chef-client' --minimal-ohai" }
27
-
28
- when_the_repository "notifying_block test one" do
29
- before do
30
- directory "cookbooks/x" do
31
- file "recipes/default.rb", <<-EOM
32
- notifying_block do
33
- log "gamma" do
34
- action :nothing
35
- end
36
- log "alpha" do
37
- notifies :write, "log[gamma]", :delayed
38
- end
39
- log "beta" do
40
- notifies :write, "log[gamma]", :delayed
41
- end
42
- end
43
- log "delta"
44
- EOM
45
- end
46
- file "config/client.rb", <<-EOM
47
- local_mode true
48
- cookbook_path "#{path_to('cookbooks')}"
49
- log_level :warn
50
- EOM
51
- end
52
-
53
- # implicitly tests -
54
- # 1. notifying block opens up a subcontext
55
- # 2. delayed notifications are de-dup'd in the subcontext
56
- # 3. delayed notifications (to resources inside the subcontext) are run at the end of the subcontext
57
- it "should run alpha, beta, gamma, and delta in that order" do
58
- result = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" --no-color -F doc -o 'x::default'", :cwd => chef_dir)
59
- expect(result.stdout).to match(/\* log\[alpha\] action write\s+\* log\[beta\] action write\s+\* log\[gamma\] action write\s+Converging 1 resources\s+\* log\[delta\] action write/)
60
- result.error!
61
- end
62
- end
63
-
64
- when_the_repository "notifying_block test two" do
65
- before do
66
- directory "cookbooks/x" do
67
- file "resources/nb_test.rb", <<-EOM
68
- default_action :run
69
- provides :nb_test
70
- resource_name :nb_test
71
-
72
- action :run do
73
- notifying_block do
74
- log "foo" do
75
- notifies :write, 'log[bar]', :delayed
76
- end
77
- end
78
- end
79
- EOM
80
- file "recipes/default.rb", <<-EOM
81
- log "bar" do
82
- action :nothing
83
- end
84
- log "baz" do
85
- action :nothing
86
- end
87
-
88
- nb_test "testing" do
89
- notifies :write, 'log[baz]', :delayed
90
- end
91
-
92
- log "quux"
93
- EOM
94
- end
95
- file "config/client.rb", <<-EOM
96
- local_mode true
97
- cookbook_path "#{path_to('cookbooks')}"
98
- log_level :warn
99
- EOM
100
- end
101
-
102
- # implicitly tests -
103
- # 1. notifying block will correctly update wrapping new_resource updated_by_last_action status
104
- # 2. delayed notifications from a subcontext inside a resource will notify resources in their outer run_context
105
- it "should run foo, quux, bar, and baz in that order" do
106
- result = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" --no-color -F doc -o 'x::default'", :cwd => chef_dir)
107
- expect(result.stdout).to match(/\* log\[foo\] action write\s+\* log\[quux\] action write\s+\* log\[bar\] action write\s+\* log\[baz\] action write/)
108
- result.error!
109
- end
110
- end
111
- end
1
+ #
2
+ # Author:: John Keiser (<jkeiser@chef.io>)
3
+ # Copyright:: Copyright 2013-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
+ require "support/shared/integration/integration_helper"
19
+ require "chef/mixin/shell_out"
20
+
21
+ describe "notifying_block" do
22
+ include IntegrationSupport
23
+ include Chef::Mixin::ShellOut
24
+
25
+ let(:chef_dir) { File.expand_path("../../../../bin", __FILE__) }
26
+ let(:chef_client) { "ruby '#{chef_dir}/chef-client' --minimal-ohai" }
27
+
28
+ when_the_repository "notifying_block test one" do
29
+ before do
30
+ directory "cookbooks/x" do
31
+ file "recipes/default.rb", <<-EOM
32
+ notifying_block do
33
+ log "gamma" do
34
+ action :nothing
35
+ end
36
+ log "alpha" do
37
+ notifies :write, "log[gamma]", :delayed
38
+ end
39
+ log "beta" do
40
+ notifies :write, "log[gamma]", :delayed
41
+ end
42
+ end
43
+ log "delta"
44
+ EOM
45
+ end
46
+ file "config/client.rb", <<-EOM
47
+ local_mode true
48
+ cookbook_path "#{path_to('cookbooks')}"
49
+ log_level :warn
50
+ EOM
51
+ end
52
+
53
+ # implicitly tests -
54
+ # 1. notifying block opens up a subcontext
55
+ # 2. delayed notifications are de-dup'd in the subcontext
56
+ # 3. delayed notifications (to resources inside the subcontext) are run at the end of the subcontext
57
+ it "should run alpha, beta, gamma, and delta in that order" do
58
+ result = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" --no-color -F doc -o 'x::default'", :cwd => chef_dir)
59
+ expect(result.stdout).to match(/\* log\[alpha\] action write\s+\* log\[beta\] action write\s+\* log\[gamma\] action write\s+Converging 1 resources\s+\* log\[delta\] action write/)
60
+ result.error!
61
+ end
62
+ end
63
+
64
+ when_the_repository "notifying_block test two" do
65
+ before do
66
+ directory "cookbooks/x" do
67
+ file "resources/nb_test.rb", <<-EOM
68
+ default_action :run
69
+ provides :nb_test
70
+ resource_name :nb_test
71
+
72
+ action :run do
73
+ notifying_block do
74
+ log "foo" do
75
+ notifies :write, 'log[bar]', :delayed
76
+ end
77
+ end
78
+ end
79
+ EOM
80
+ file "recipes/default.rb", <<-EOM
81
+ log "bar" do
82
+ action :nothing
83
+ end
84
+ log "baz" do
85
+ action :nothing
86
+ end
87
+
88
+ nb_test "testing" do
89
+ notifies :write, 'log[baz]', :delayed
90
+ end
91
+
92
+ log "quux"
93
+ EOM
94
+ end
95
+ file "config/client.rb", <<-EOM
96
+ local_mode true
97
+ cookbook_path "#{path_to('cookbooks')}"
98
+ log_level :warn
99
+ EOM
100
+ end
101
+
102
+ # implicitly tests -
103
+ # 1. notifying block will correctly update wrapping new_resource updated_by_last_action status
104
+ # 2. delayed notifications from a subcontext inside a resource will notify resources in their outer run_context
105
+ it "should run foo, quux, bar, and baz in that order" do
106
+ result = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" --no-color -F doc -o 'x::default'", :cwd => chef_dir)
107
+ expect(result.stdout).to match(/\* log\[foo\] action write\s+\* log\[quux\] action write\s+\* log\[bar\] action write\s+\* log\[baz\] action write/)
108
+ result.error!
109
+ end
110
+ end
111
+ end
@@ -1,37 +1,37 @@
1
- require "support/shared/integration/integration_helper"
2
-
3
- describe "Recipe DSL methods" do
4
- include IntegrationSupport
5
-
6
- context "With resource class providing 'provider_thingy'" do
7
- before :context do
8
- class Chef::Resource::ProviderThingy < Chef::Resource
9
- resource_name :provider_thingy
10
- default_action :create
11
- def to_s
12
- "provider_thingy resource class"
13
- end
14
- end
15
- end
16
- context "And class Chef::Provider::ProviderThingy with no provides" do
17
- before :context do
18
- class Chef::Provider::ProviderThingy < Chef::Provider
19
- def load_current_resource
20
- end
21
-
22
- def action_create
23
- Chef::Log.warn("hello from #{self.class.name}")
24
- end
25
- end
26
- end
27
-
28
- it "provider_thingy 'blah' runs the provider and warns" do
29
- recipe = converge do
30
- provider_thingy("blah") {}
31
- end
32
- expect(recipe.logged_warnings).to match /hello from Chef::Provider::ProviderThingy/
33
- expect(recipe.logged_warnings).to match /you must use 'provides' to provide DSL/i
34
- end
35
- end
36
- end
37
- end
1
+ require "support/shared/integration/integration_helper"
2
+
3
+ describe "Recipe DSL methods" do
4
+ include IntegrationSupport
5
+
6
+ context "With resource class providing 'provider_thingy'" do
7
+ before :context do
8
+ class Chef::Resource::ProviderThingy < Chef::Resource
9
+ resource_name :provider_thingy
10
+ default_action :create
11
+ def to_s
12
+ "provider_thingy resource class"
13
+ end
14
+ end
15
+ end
16
+ context "And class Chef::Provider::ProviderThingy with no provides" do
17
+ before :context do
18
+ class Chef::Provider::ProviderThingy < Chef::Provider
19
+ def load_current_resource
20
+ end
21
+
22
+ def action_create
23
+ Chef::Log.warn("hello from #{self.class.name}")
24
+ end
25
+ end
26
+ end
27
+
28
+ it "provider_thingy 'blah' runs the provider and warns" do
29
+ recipe = converge do
30
+ provider_thingy("blah") {}
31
+ end
32
+ expect(recipe.logged_warnings).to match /hello from Chef::Provider::ProviderThingy/
33
+ expect(recipe.logged_warnings).to match /you must use 'provides' to provide DSL/i
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,1523 +1,1523 @@
1
- require "support/shared/integration/integration_helper"
2
-
3
- describe "Recipe DSL methods" do
4
- include IntegrationSupport
5
-
6
- module Namer
7
- extend self
8
- attr_accessor :current_index
9
- end
10
-
11
- before(:all) { Namer.current_index = 1 }
12
- before { Namer.current_index += 1 }
13
-
14
- context "with resource 'base_thingy' declared as BaseThingy" do
15
- before(:context) do
16
-
17
- class BaseThingy < Chef::Resource
18
- resource_name "base_thingy"
19
- default_action :create
20
-
21
- class<<self
22
- attr_accessor :created_name
23
- attr_accessor :created_resource
24
- attr_accessor :created_provider
25
- end
26
-
27
- def provider
28
- Provider
29
- end
30
- class Provider < Chef::Provider
31
- def load_current_resource
32
- end
33
-
34
- def action_create
35
- BaseThingy.created_name = new_resource.name
36
- BaseThingy.created_resource = new_resource.class
37
- BaseThingy.created_provider = self.class
38
- end
39
- end
40
- end
41
-
42
- # Modules to put stuff in
43
- module RecipeDSLSpecNamespace; end
44
- module RecipeDSLSpecNamespace::Bar; end
45
-
46
- end
47
-
48
- before :each do
49
- BaseThingy.created_resource = nil
50
- BaseThingy.created_provider = nil
51
- end
52
-
53
- it "creates base_thingy when you call base_thingy in a recipe" do
54
- recipe = converge do
55
- base_thingy("blah") {}
56
- end
57
- expect(recipe.logged_warnings).to eq ""
58
- expect(BaseThingy.created_name).to eq "blah"
59
- expect(BaseThingy.created_resource).to eq BaseThingy
60
- end
61
-
62
- it "errors out when you call base_thingy do ... end in a recipe" do
63
- expect_converge do
64
- base_thingy { ; }
65
- end.to raise_error(ArgumentError, "You must supply a name when declaring a base_thingy resource")
66
- end
67
-
68
- it "emits a warning when you call base_thingy 'foo', 'bar' do ... end in a recipe" do
69
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
70
- recipe = converge do
71
- base_thingy "foo", "bar" do
72
- end
73
- end
74
- expect(recipe.logged_warnings).to match(/Cannot create resource base_thingy with more than one argument. All arguments except the name \("foo"\) will be ignored. This will cause an error in Chef 13. Arguments: \["foo", "bar"\]/)
75
- expect(BaseThingy.created_name).to eq "foo"
76
- expect(BaseThingy.created_resource).to eq BaseThingy
77
- end
78
-
79
- context "Deprecated automatic resource DSL" do
80
- before do
81
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
82
- end
83
-
84
- context "with a resource 'backcompat_thingy' declared in Chef::Resource and Chef::Provider" do
85
- before(:context) do
86
-
87
- class Chef::Resource::BackcompatThingy < Chef::Resource
88
- default_action :create
89
- end
90
- class Chef::Provider::BackcompatThingy < Chef::Provider
91
- def load_current_resource
92
- end
93
-
94
- def action_create
95
- BaseThingy.created_resource = new_resource.class
96
- BaseThingy.created_provider = self.class
97
- end
98
- end
99
-
100
- end
101
-
102
- it "backcompat_thingy creates a Chef::Resource::BackcompatThingy" do
103
- recipe = converge do
104
- backcompat_thingy("blah") {}
105
- end
106
- expect(BaseThingy.created_resource).to eq Chef::Resource::BackcompatThingy
107
- expect(BaseThingy.created_provider).to eq Chef::Provider::BackcompatThingy
108
- end
109
-
110
- context "and another resource 'backcompat_thingy' in BackcompatThingy with 'provides'" do
111
- before(:context) do
112
-
113
- class RecipeDSLSpecNamespace::BackcompatThingy < BaseThingy
114
- provides :backcompat_thingy
115
- resource_name :backcompat_thingy
116
- end
117
-
118
- end
119
-
120
- it "backcompat_thingy creates a BackcompatThingy" do
121
- recipe = converge do
122
- backcompat_thingy("blah") {}
123
- end
124
- expect(recipe.logged_warnings).to match(/Class Chef::Provider::BackcompatThingy does not declare 'provides :backcompat_thingy'./)
125
- expect(BaseThingy.created_resource).not_to be_nil
126
- end
127
- end
128
- end
129
-
130
- context "with a resource named RecipeDSLSpecNamespace::Bar::BarThingy" do
131
- before(:context) do
132
-
133
- class RecipeDSLSpecNamespace::Bar::BarThingy < BaseThingy
134
- end
135
-
136
- end
137
-
138
- it "bar_thingy does not work" do
139
- expect_converge do
140
- bar_thingy("blah") {}
141
- end.to raise_error(NoMethodError)
142
- end
143
- end
144
-
145
- context "with a resource named Chef::Resource::NoNameThingy with resource_name nil" do
146
- before(:context) do
147
-
148
- class Chef::Resource::NoNameThingy < BaseThingy
149
- resource_name nil
150
- end
151
-
152
- end
153
-
154
- it "no_name_thingy does not work" do
155
- expect_converge do
156
- no_name_thingy("blah") {}
157
- end.to raise_error(NoMethodError)
158
- end
159
- end
160
-
161
- context "with a resource named AnotherNoNameThingy with resource_name :another_thingy_name" do
162
- before(:context) do
163
-
164
- class AnotherNoNameThingy < BaseThingy
165
- resource_name :another_thingy_name
166
- end
167
-
168
- end
169
-
170
- it "another_no_name_thingy does not work" do
171
- expect_converge do
172
- another_no_name_thingy("blah") {}
173
- end.to raise_error(NoMethodError)
174
- end
175
-
176
- it "another_thingy_name works" do
177
- recipe = converge do
178
- another_thingy_name("blah") {}
179
- end
180
- expect(recipe.logged_warnings).to eq ""
181
- expect(BaseThingy.created_resource).to eq(AnotherNoNameThingy)
182
- end
183
- end
184
-
185
- context "with a resource named AnotherNoNameThingy2 with resource_name :another_thingy_name2; resource_name :another_thingy_name3" do
186
- before(:context) do
187
-
188
- class AnotherNoNameThingy2 < BaseThingy
189
- resource_name :another_thingy_name2
190
- resource_name :another_thingy_name3
191
- end
192
-
193
- end
194
-
195
- it "another_no_name_thingy does not work" do
196
- expect_converge do
197
- another_no_name_thingy2("blah") {}
198
- end.to raise_error(NoMethodError)
199
- end
200
-
201
- it "another_thingy_name2 does not work" do
202
- expect_converge do
203
- another_thingy_name2("blah") {}
204
- end.to raise_error(NoMethodError)
205
- end
206
-
207
- it "yet_another_thingy_name3 works" do
208
- recipe = converge do
209
- another_thingy_name3("blah") {}
210
- end
211
- expect(recipe.logged_warnings).to eq ""
212
- expect(BaseThingy.created_resource).to eq(AnotherNoNameThingy2)
213
- end
214
- end
215
-
216
- context "provides overriding resource_name" do
217
- context "with a resource named AnotherNoNameThingy3 with provides :another_no_name_thingy3, os: 'blarghle'" do
218
- before(:context) do
219
-
220
- class AnotherNoNameThingy3 < BaseThingy
221
- resource_name :another_no_name_thingy_3
222
- provides :another_no_name_thingy3, os: "blarghle"
223
- end
224
-
225
- end
226
-
227
- it "and os = linux, another_no_name_thingy3 does not work" do
228
- expect_converge do
229
- # TODO this is an ugly way to test, make Cheffish expose node attrs
230
- run_context.node.automatic[:os] = "linux"
231
- another_no_name_thingy3("blah") {}
232
- end.to raise_error(Chef::Exceptions::NoSuchResourceType)
233
- end
234
-
235
- it "and os = blarghle, another_no_name_thingy3 works" do
236
- recipe = converge do
237
- # TODO this is an ugly way to test, make Cheffish expose node attrs
238
- run_context.node.automatic[:os] = "blarghle"
239
- another_no_name_thingy3("blah") {}
240
- end
241
- expect(recipe.logged_warnings).to eq ""
242
- expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy3)
243
- end
244
- end
245
-
246
- context "with a resource named AnotherNoNameThingy4 with two provides" do
247
- before(:context) do
248
-
249
- class AnotherNoNameThingy4 < BaseThingy
250
- resource_name :another_no_name_thingy_4
251
- provides :another_no_name_thingy4, os: "blarghle"
252
- provides :another_no_name_thingy4, platform_family: "foo"
253
- end
254
-
255
- end
256
-
257
- it "and os = linux, another_no_name_thingy4 does not work" do
258
- expect_converge do
259
- # TODO this is an ugly way to test, make Cheffish expose node attrs
260
- run_context.node.automatic[:os] = "linux"
261
- another_no_name_thingy4("blah") {}
262
- end.to raise_error(Chef::Exceptions::NoSuchResourceType)
263
- end
264
-
265
- it "and os = blarghle, another_no_name_thingy4 works" do
266
- recipe = converge do
267
- # TODO this is an ugly way to test, make Cheffish expose node attrs
268
- run_context.node.automatic[:os] = "blarghle"
269
- another_no_name_thingy4("blah") {}
270
- end
271
- expect(recipe.logged_warnings).to eq ""
272
- expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy4)
273
- end
274
-
275
- it "and platform_family = foo, another_no_name_thingy4 works" do
276
- recipe = converge do
277
- # TODO this is an ugly way to test, make Cheffish expose node attrs
278
- run_context.node.automatic[:platform_family] = "foo"
279
- another_no_name_thingy4("blah") {}
280
- end
281
- expect(recipe.logged_warnings).to eq ""
282
- expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy4)
283
- end
284
- end
285
-
286
- context "with a resource named AnotherNoNameThingy5, a different resource_name, and a provides with the original resource_name" do
287
- before(:context) do
288
-
289
- class AnotherNoNameThingy5 < BaseThingy
290
- resource_name :another_thingy_name_for_another_no_name_thingy5
291
- provides :another_no_name_thingy5, os: "blarghle"
292
- end
293
-
294
- end
295
-
296
- it "and os = linux, another_no_name_thingy5 does not work" do
297
- expect_converge do
298
- # this is an ugly way to test, make Cheffish expose node attrs
299
- run_context.node.automatic[:os] = "linux"
300
- another_no_name_thingy5("blah") {}
301
- end.to raise_error(Chef::Exceptions::NoSuchResourceType)
302
- end
303
-
304
- it "and os = blarghle, another_no_name_thingy5 works" do
305
- recipe = converge do
306
- # this is an ugly way to test, make Cheffish expose node attrs
307
- run_context.node.automatic[:os] = "blarghle"
308
- another_no_name_thingy5("blah") {}
309
- end
310
- expect(recipe.logged_warnings).to eq ""
311
- expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy5)
312
- end
313
-
314
- it "the new resource name can be used in a recipe" do
315
- recipe = converge do
316
- another_thingy_name_for_another_no_name_thingy5("blah") {}
317
- end
318
- expect(recipe.logged_warnings).to eq ""
319
- expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy5)
320
- end
321
- end
322
-
323
- context "with a resource named AnotherNoNameThingy6, a provides with the original resource name, and a different resource_name" do
324
- before(:context) do
325
-
326
- class AnotherNoNameThingy6 < BaseThingy
327
- provides :another_no_name_thingy6, os: "blarghle"
328
- resource_name :another_thingy_name_for_another_no_name_thingy6
329
- end
330
-
331
- end
332
-
333
- it "and os = linux, another_no_name_thingy6 does not work" do
334
- expect_converge do
335
- # this is an ugly way to test, make Cheffish expose node attrs
336
- run_context.node.automatic[:os] = "linux"
337
- another_no_name_thingy6("blah") {}
338
- end.to raise_error(Chef::Exceptions::NoSuchResourceType)
339
- end
340
-
341
- it "and os = blarghle, another_no_name_thingy6 works" do
342
- recipe = converge do
343
- # this is an ugly way to test, make Cheffish expose node attrs
344
- run_context.node.automatic[:os] = "blarghle"
345
- another_no_name_thingy6("blah") {}
346
- end
347
- expect(recipe.logged_warnings).to eq ""
348
- expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy6)
349
- end
350
-
351
- it "the new resource name can be used in a recipe" do
352
- recipe = converge do
353
- another_thingy_name_for_another_no_name_thingy6("blah") {}
354
- end
355
- expect(recipe.logged_warnings).to eq ""
356
- expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy6)
357
- end
358
- end
359
-
360
- context "with a resource named AnotherNoNameThingy7, a new resource_name, and provides with that new resource name" do
361
- before(:context) do
362
-
363
- class AnotherNoNameThingy7 < BaseThingy
364
- resource_name :another_thingy_name_for_another_no_name_thingy7
365
- provides :another_thingy_name_for_another_no_name_thingy7, os: "blarghle"
366
- end
367
-
368
- end
369
-
370
- it "and os = linux, another_thingy_name_for_another_no_name_thingy7 does not work" do
371
- expect_converge do
372
- # this is an ugly way to test, make Cheffish expose node attrs
373
- run_context.node.automatic[:os] = "linux"
374
- another_thingy_name_for_another_no_name_thingy7("blah") {}
375
- end.to raise_error(Chef::Exceptions::NoSuchResourceType)
376
- end
377
-
378
- it "and os = blarghle, another_thingy_name_for_another_no_name_thingy7 works" do
379
- recipe = converge do
380
- # this is an ugly way to test, make Cheffish expose node attrs
381
- run_context.node.automatic[:os] = "blarghle"
382
- another_thingy_name_for_another_no_name_thingy7("blah") {}
383
- end
384
- expect(recipe.logged_warnings).to eq ""
385
- expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy7)
386
- end
387
-
388
- it "the old resource name does not work" do
389
- expect_converge do
390
- # this is an ugly way to test, make Cheffish expose node attrs
391
- run_context.node.automatic[:os] = "linux"
392
- another_no_name_thingy_7("blah") {}
393
- end.to raise_error(NoMethodError)
394
- end
395
- end
396
-
397
- # opposite order from the previous test (provides, then resource_name)
398
- context "with a resource named AnotherNoNameThingy8, a provides with a new resource name, and resource_name with that new resource name" do
399
- before(:context) do
400
-
401
- class AnotherNoNameThingy8 < BaseThingy
402
- provides :another_thingy_name_for_another_no_name_thingy8, os: "blarghle"
403
- resource_name :another_thingy_name_for_another_no_name_thingy8
404
- end
405
-
406
- end
407
-
408
- it "and os = linux, another_thingy_name_for_another_no_name_thingy8 does not work" do
409
- expect_converge do
410
- # this is an ugly way to test, make Cheffish expose node attrs
411
- run_context.node.automatic[:os] = "linux"
412
- another_thingy_name_for_another_no_name_thingy8("blah") {}
413
- end.to raise_error(Chef::Exceptions::NoSuchResourceType)
414
- end
415
-
416
- it "and os = blarghle, another_thingy_name_for_another_no_name_thingy8 works" do
417
- recipe = converge do
418
- # this is an ugly way to test, make Cheffish expose node attrs
419
- run_context.node.automatic[:os] = "blarghle"
420
- another_thingy_name_for_another_no_name_thingy8("blah") {}
421
- end
422
- expect(recipe.logged_warnings).to eq ""
423
- expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy8)
424
- end
425
-
426
- it "the old resource name does not work" do
427
- expect_converge do
428
- # this is an ugly way to test, make Cheffish expose node attrs
429
- run_context.node.automatic[:os] = "linux"
430
- another_thingy_name8("blah") {}
431
- end.to raise_error(NoMethodError)
432
- end
433
- end
434
- end
435
- end
436
-
437
- context "provides" do
438
- context "when MySupplier provides :hemlock" do
439
- before(:context) do
440
-
441
- class RecipeDSLSpecNamespace::MySupplier < BaseThingy
442
- resource_name :hemlock
443
- end
444
-
445
- end
446
-
447
- it "my_supplier does not work in a recipe" do
448
- expect_converge do
449
- my_supplier("blah") {}
450
- end.to raise_error(NoMethodError)
451
- end
452
-
453
- it "hemlock works in a recipe" do
454
- expect_recipe do
455
- hemlock("blah") {}
456
- end.to emit_no_warnings_or_errors
457
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::MySupplier
458
- end
459
- end
460
-
461
- context "when Thingy3 has resource_name :thingy3" do
462
- before(:context) do
463
-
464
- class RecipeDSLSpecNamespace::Thingy3 < BaseThingy
465
- resource_name :thingy3
466
- end
467
-
468
- end
469
-
470
- it "thingy3 works in a recipe" do
471
- expect_recipe do
472
- thingy3("blah") {}
473
- end.to emit_no_warnings_or_errors
474
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
475
- end
476
-
477
- context "and Thingy4 has resource_name :thingy3" do
478
- before(:context) do
479
-
480
- class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
481
- resource_name :thingy3
482
- end
483
-
484
- end
485
-
486
- it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
487
- recipe = converge do
488
- thingy3("blah") {}
489
- end
490
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
491
- end
492
-
493
- it "thingy4 does not work in a recipe" do
494
- expect_converge do
495
- thingy4("blah") {}
496
- end.to raise_error(NoMethodError)
497
- end
498
-
499
- it "resource_matching_short_name returns Thingy4" do
500
- expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
501
- end
502
- end
503
- end
504
-
505
- context "when Thingy5 has resource_name :thingy5 and provides :thingy5reverse, :thingy5_2 and :thingy5_2reverse" do
506
- before(:context) do
507
-
508
- class RecipeDSLSpecNamespace::Thingy5 < BaseThingy
509
- resource_name :thingy5
510
- provides :thingy5reverse
511
- provides :thingy5_2
512
- provides :thingy5_2reverse
513
- end
514
-
515
- end
516
-
517
- it "thingy5 works in a recipe" do
518
- expect_recipe do
519
- thingy5("blah") {}
520
- end.to emit_no_warnings_or_errors
521
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
522
- end
523
-
524
- context "and Thingy6 provides :thingy5" do
525
- before(:context) do
526
-
527
- class RecipeDSLSpecNamespace::Thingy6 < BaseThingy
528
- resource_name :thingy6
529
- provides :thingy5
530
- end
531
-
532
- end
533
-
534
- it "thingy6 works in a recipe and yields Thingy6" do
535
- recipe = converge do
536
- thingy6("blah") {}
537
- end
538
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy6
539
- end
540
-
541
- it "thingy5 works in a recipe and yields Foo::Thingy5 (the alphabetical one)" do
542
- recipe = converge do
543
- thingy5("blah") {}
544
- end
545
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
546
- end
547
-
548
- it "resource_matching_short_name returns Thingy5" do
549
- expect(Chef::Resource.resource_matching_short_name(:thingy5)).to eq RecipeDSLSpecNamespace::Thingy5
550
- end
551
-
552
- context "and AThingy5 provides :thingy5reverse" do
553
- before(:context) do
554
-
555
- class RecipeDSLSpecNamespace::AThingy5 < BaseThingy
556
- resource_name :thingy5reverse
557
- end
558
-
559
- end
560
-
561
- it "thingy5reverse works in a recipe and yields AThingy5 (the alphabetical one)" do
562
- recipe = converge do
563
- thingy5reverse("blah") {}
564
- end
565
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::AThingy5
566
- end
567
- end
568
-
569
- context "and ZRecipeDSLSpecNamespace::Thingy5 provides :thingy5_2" do
570
- before(:context) do
571
-
572
- module ZRecipeDSLSpecNamespace
573
- class Thingy5 < BaseThingy
574
- resource_name :thingy5_2
575
- end
576
- end
577
-
578
- end
579
-
580
- it "thingy5_2 works in a recipe and yields the RecipeDSLSpaceNamespace one (the alphabetical one)" do
581
- recipe = converge do
582
- thingy5_2("blah") {}
583
- end
584
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
585
- end
586
- end
587
-
588
- context "and ARecipeDSLSpecNamespace::Thingy5 provides :thingy5_2" do
589
- before(:context) do
590
-
591
- module ARecipeDSLSpecNamespace
592
- class Thingy5 < BaseThingy
593
- resource_name :thingy5_2reverse
594
- end
595
- end
596
-
597
- end
598
-
599
- it "thingy5_2reverse works in a recipe and yields the ARecipeDSLSpaceNamespace one (the alphabetical one)" do
600
- recipe = converge do
601
- thingy5_2reverse("blah") {}
602
- end
603
- expect(BaseThingy.created_resource).to eq ARecipeDSLSpecNamespace::Thingy5
604
- end
605
- end
606
- end
607
-
608
- context "when Thingy3 has resource_name :thingy3" do
609
- before(:context) do
610
-
611
- class RecipeDSLSpecNamespace::Thingy3 < BaseThingy
612
- resource_name :thingy3
613
- end
614
-
615
- end
616
-
617
- it "thingy3 works in a recipe" do
618
- expect_recipe do
619
- thingy3("blah") {}
620
- end.to emit_no_warnings_or_errors
621
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
622
- end
623
-
624
- context "and Thingy4 has resource_name :thingy3" do
625
- before(:context) do
626
-
627
- class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
628
- resource_name :thingy3
629
- end
630
-
631
- end
632
-
633
- it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
634
- recipe = converge do
635
- thingy3("blah") {}
636
- end
637
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
638
- end
639
-
640
- it "thingy4 does not work in a recipe" do
641
- expect_converge do
642
- thingy4("blah") {}
643
- end.to raise_error(NoMethodError)
644
- end
645
-
646
- it "resource_matching_short_name returns Thingy4" do
647
- expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
648
- end
649
- end
650
-
651
- context "and Thingy4 has resource_name :thingy3" do
652
- before(:context) do
653
-
654
- class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
655
- resource_name :thingy3
656
- end
657
-
658
- end
659
-
660
- it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
661
- recipe = converge do
662
- thingy3("blah") {}
663
- end
664
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
665
- end
666
-
667
- it "thingy4 does not work in a recipe" do
668
- expect_converge do
669
- thingy4("blah") {}
670
- end.to raise_error(NoMethodError)
671
- end
672
-
673
- it "resource_matching_short_name returns Thingy4" do
674
- expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
675
- end
676
- end
677
- end
678
-
679
- end
680
-
681
- context "when Thingy7 provides :thingy8" do
682
- before(:context) do
683
-
684
- class RecipeDSLSpecNamespace::Thingy7 < BaseThingy
685
- resource_name :thingy7
686
- provides :thingy8
687
- end
688
-
689
- end
690
-
691
- context "and Thingy8 has resource_name :thingy8" do
692
- before(:context) do
693
-
694
- class RecipeDSLSpecNamespace::Thingy8 < BaseThingy
695
- resource_name :thingy8
696
- end
697
-
698
- end
699
-
700
- it "thingy7 works in a recipe and yields Thingy7" do
701
- recipe = converge do
702
- thingy7("blah") {}
703
- end
704
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy7
705
- end
706
-
707
- it "thingy8 works in a recipe and yields Thingy7 (alphabetical)" do
708
- recipe = converge do
709
- thingy8("blah") {}
710
- end
711
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy7
712
- end
713
-
714
- it "resource_matching_short_name returns Thingy8" do
715
- expect(Chef::Resource.resource_matching_short_name(:thingy8)).to eq RecipeDSLSpecNamespace::Thingy8
716
- end
717
- end
718
- end
719
-
720
- context "when Thingy12 provides :thingy12, :twizzle and :twizzle2" do
721
- before(:context) do
722
-
723
- class RecipeDSLSpecNamespace::Thingy12 < BaseThingy
724
- resource_name :thingy12
725
- provides :twizzle
726
- provides :twizzle2
727
- end
728
-
729
- end
730
-
731
- it "thingy12 works in a recipe and yields Thingy12" do
732
- expect_recipe do
733
- thingy12("blah") {}
734
- end.to emit_no_warnings_or_errors
735
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
736
- end
737
-
738
- it "twizzle works in a recipe and yields Thingy12" do
739
- expect_recipe do
740
- twizzle("blah") {}
741
- end.to emit_no_warnings_or_errors
742
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
743
- end
744
-
745
- it "twizzle2 works in a recipe and yields Thingy12" do
746
- expect_recipe do
747
- twizzle2("blah") {}
748
- end.to emit_no_warnings_or_errors
749
- expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
750
- end
751
- end
752
-
753
- context "with platform-specific resources 'my_super_thingy_foo' and 'my_super_thingy_bar'" do
754
- before(:context) do
755
- class MySuperThingyFoo < BaseThingy
756
- resource_name :my_super_thingy_foo
757
- provides :my_super_thingy, platform: "foo"
758
- end
759
-
760
- class MySuperThingyBar < BaseThingy
761
- resource_name :my_super_thingy_bar
762
- provides :my_super_thingy, platform: "bar"
763
- end
764
- end
765
-
766
- it "A run with platform 'foo' uses MySuperThingyFoo" do
767
- r = Cheffish::ChefRun.new(chef_config)
768
- r.client.run_context.node.automatic["platform"] = "foo"
769
- r.compile_recipe do
770
- my_super_thingy("blah") {}
771
- end
772
- r.converge
773
- expect(r).to emit_no_warnings_or_errors
774
- expect(BaseThingy.created_resource).to eq MySuperThingyFoo
775
- end
776
-
777
- it "A run with platform 'bar' uses MySuperThingyBar" do
778
- r = Cheffish::ChefRun.new(chef_config)
779
- r.client.run_context.node.automatic["platform"] = "bar"
780
- r.compile_recipe do
781
- my_super_thingy("blah") {}
782
- end
783
- r.converge
784
- expect(r).to emit_no_warnings_or_errors
785
- expect(BaseThingy.created_resource).to eq MySuperThingyBar
786
- end
787
-
788
- it "A run with platform 'x' reports that my_super_thingy is not supported" do
789
- r = Cheffish::ChefRun.new(chef_config)
790
- r.client.run_context.node.automatic["platform"] = "x"
791
- expect do
792
- r.compile_recipe do
793
- my_super_thingy("blah") {}
794
- end
795
- end.to raise_error(Chef::Exceptions::NoSuchResourceType)
796
- end
797
- end
798
-
799
- context "when Thingy10 provides :thingy10" do
800
- before(:context) do
801
- class RecipeDSLSpecNamespace::Thingy10 < BaseThingy
802
- resource_name :thingy10
803
- end
804
- end
805
-
806
- it "declaring a resource providing the same :thingy10 with override: true does not produce a warning" do
807
- expect(Chef::Log).not_to receive(:warn)
808
- class RecipeDSLSpecNamespace::Thingy10AlternateProvider < BaseThingy
809
- provides :thingy10, override: true
810
- end
811
- end
812
- end
813
-
814
- context "when Thingy11 provides :thingy11" do
815
- before(:context) do
816
- class RecipeDSLSpecNamespace::Thingy11 < BaseThingy
817
- resource_name :thingy10
818
- end
819
- end
820
-
821
- it "declaring a resource providing the same :thingy11 with os: 'linux' does not produce a warning" do
822
- expect(Chef::Log).not_to receive(:warn)
823
- class RecipeDSLSpecNamespace::Thingy11AlternateProvider < BaseThingy
824
- provides :thingy11, os: "linux"
825
- end
826
- end
827
- end
828
- end
829
-
830
- context "with a resource named 'B' with resource name :two_classes_one_dsl" do
831
- let(:two_classes_one_dsl) { :"two_classes_one_dsl#{Namer.current_index}" }
832
- let(:resource_class) do
833
- result = Class.new(BaseThingy) do
834
- def self.name
835
- "B"
836
- end
837
-
838
- def self.to_s; name; end
839
-
840
- def self.inspect; name.inspect; end
841
- end
842
- result.resource_name two_classes_one_dsl
843
- result
844
- end
845
- before { resource_class } # pull on it so it gets defined before the recipe runs
846
-
847
- context "and another resource named 'A' with resource_name :two_classes_one_dsl" do
848
- let(:resource_class_a) do
849
- result = Class.new(BaseThingy) do
850
- def self.name
851
- "A"
852
- end
853
-
854
- def self.to_s; name; end
855
-
856
- def self.inspect; name.inspect; end
857
- end
858
- result.resource_name two_classes_one_dsl
859
- result
860
- end
861
- before { resource_class_a } # pull on it so it gets defined before the recipe runs
862
-
863
- it "two_classes_one_dsl resolves to A (alphabetically earliest)" do
864
- temp_two_classes_one_dsl = two_classes_one_dsl
865
- recipe = converge do
866
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
867
- end
868
- expect(recipe.logged_warnings).to eq ""
869
- expect(BaseThingy.created_resource).to eq resource_class_a
870
- end
871
-
872
- it "resource_matching_short_name returns B" do
873
- expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class_a
874
- end
875
- end
876
-
877
- context "and another resource named 'Z' with resource_name :two_classes_one_dsl" do
878
- let(:resource_class_z) do
879
- result = Class.new(BaseThingy) do
880
- def self.name
881
- "Z"
882
- end
883
-
884
- def self.to_s; name; end
885
-
886
- def self.inspect; name.inspect; end
887
- end
888
- result.resource_name two_classes_one_dsl
889
- result
890
- end
891
- before { resource_class_z } # pull on it so it gets defined before the recipe runs
892
-
893
- it "two_classes_one_dsl resolves to B (alphabetically earliest)" do
894
- temp_two_classes_one_dsl = two_classes_one_dsl
895
- recipe = converge do
896
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
897
- end
898
- expect(recipe.logged_warnings).to eq ""
899
- expect(BaseThingy.created_resource).to eq resource_class
900
- end
901
-
902
- it "resource_matching_short_name returns B" do
903
- expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
904
- end
905
-
906
- context "and a priority array [ Z, B ]" do
907
- before do
908
- Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z, resource_class ])
909
- end
910
-
911
- it "two_classes_one_dsl resolves to Z (respects the priority array)" do
912
- temp_two_classes_one_dsl = two_classes_one_dsl
913
- recipe = converge do
914
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
915
- end
916
- expect(recipe.logged_warnings).to eq ""
917
- expect(BaseThingy.created_resource).to eq resource_class_z
918
- end
919
-
920
- it "resource_matching_short_name returns B" do
921
- expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
922
- end
923
-
924
- context "when Z provides(:two_classes_one_dsl) { false }" do
925
- before do
926
- resource_class_z.provides(two_classes_one_dsl) { false }
927
- end
928
-
929
- it "two_classes_one_dsl resolves to B (picks the next thing in the priority array)" do
930
- temp_two_classes_one_dsl = two_classes_one_dsl
931
- recipe = converge do
932
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
933
- end
934
- expect(recipe.logged_warnings).to eq ""
935
- expect(BaseThingy.created_resource).to eq resource_class
936
- end
937
-
938
- it "resource_matching_short_name returns B" do
939
- expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
940
- end
941
- end
942
- end
943
-
944
- context "and priority arrays [ B ] and [ Z ]" do
945
- before do
946
- Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class ])
947
- Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z ])
948
- end
949
-
950
- it "two_classes_one_dsl resolves to Z (respects the most recent priority array)" do
951
- temp_two_classes_one_dsl = two_classes_one_dsl
952
- recipe = converge do
953
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
954
- end
955
- expect(recipe.logged_warnings).to eq ""
956
- expect(BaseThingy.created_resource).to eq resource_class_z
957
- end
958
-
959
- it "resource_matching_short_name returns B" do
960
- expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
961
- end
962
-
963
- context "when Z provides(:two_classes_one_dsl) { false }" do
964
- before do
965
- resource_class_z.provides(two_classes_one_dsl) { false }
966
- end
967
-
968
- it "two_classes_one_dsl resolves to B (picks the first match from the other priority array)" do
969
- temp_two_classes_one_dsl = two_classes_one_dsl
970
- recipe = converge do
971
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
972
- end
973
- expect(recipe.logged_warnings).to eq ""
974
- expect(BaseThingy.created_resource).to eq resource_class
975
- end
976
-
977
- it "resource_matching_short_name returns B" do
978
- expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
979
- end
980
- end
981
- end
982
-
983
- context "and a priority array [ Z ]" do
984
- before do
985
- Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z ])
986
- end
987
-
988
- context "when Z provides(:two_classes_one_dsl) { false }" do
989
- before do
990
- resource_class_z.provides(two_classes_one_dsl) { false }
991
- end
992
-
993
- it "two_classes_one_dsl resolves to B (picks the first match outside the priority array)" do
994
- temp_two_classes_one_dsl = two_classes_one_dsl
995
- recipe = converge do
996
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
997
- end
998
- expect(recipe.logged_warnings).to eq ""
999
- expect(BaseThingy.created_resource).to eq resource_class
1000
- end
1001
-
1002
- it "resource_matching_short_name returns B" do
1003
- expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
1004
- end
1005
- end
1006
- end
1007
-
1008
- end
1009
-
1010
- context "and a provider named 'B' which provides :two_classes_one_dsl" do
1011
- before do
1012
- resource_class.send(:define_method, :provider) { nil }
1013
- end
1014
-
1015
- let(:provider_class) do
1016
- result = Class.new(BaseThingy::Provider) do
1017
- def self.name
1018
- "B"
1019
- end
1020
-
1021
- def self.to_s; name; end
1022
-
1023
- def self.inspect; name.inspect; end
1024
- end
1025
- result.provides two_classes_one_dsl
1026
- result
1027
- end
1028
- before { provider_class } # pull on it so it gets defined before the recipe runs
1029
-
1030
- context "and another provider named 'A'" do
1031
- let(:provider_class_a) do
1032
- result = Class.new(BaseThingy::Provider) do
1033
- def self.name
1034
- "A"
1035
- end
1036
-
1037
- def self.to_s; name; end
1038
-
1039
- def self.inspect; name.inspect; end
1040
- end
1041
- result
1042
- end
1043
- context "which provides :two_classes_one_dsl" do
1044
- before { provider_class_a.provides two_classes_one_dsl }
1045
-
1046
- it "two_classes_one_dsl resolves to A (alphabetically earliest)" do
1047
- temp_two_classes_one_dsl = two_classes_one_dsl
1048
- recipe = converge do
1049
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1050
- end
1051
- expect(recipe.logged_warnings).to eq ""
1052
- expect(BaseThingy.created_provider).to eq provider_class_a
1053
- end
1054
- end
1055
- context "which provides(:two_classes_one_dsl) { false }" do
1056
- before { provider_class_a.provides(two_classes_one_dsl) { false } }
1057
-
1058
- it "two_classes_one_dsl resolves to B (since A declined)" do
1059
- temp_two_classes_one_dsl = two_classes_one_dsl
1060
- recipe = converge do
1061
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1062
- end
1063
- expect(recipe.logged_warnings).to eq ""
1064
- expect(BaseThingy.created_provider).to eq provider_class
1065
- end
1066
- end
1067
- end
1068
-
1069
- context "and another provider named 'Z'" do
1070
- let(:provider_class_z) do
1071
- result = Class.new(BaseThingy::Provider) do
1072
- def self.name
1073
- "Z"
1074
- end
1075
-
1076
- def self.to_s; name; end
1077
-
1078
- def self.inspect; name.inspect; end
1079
- end
1080
- result
1081
- end
1082
- before { provider_class_z } # pull on it so it gets defined before the recipe runs
1083
-
1084
- context "which provides :two_classes_one_dsl" do
1085
- before { provider_class_z.provides two_classes_one_dsl }
1086
-
1087
- it "two_classes_one_dsl resolves to B (alphabetically earliest)" do
1088
- temp_two_classes_one_dsl = two_classes_one_dsl
1089
- recipe = converge do
1090
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1091
- end
1092
- expect(recipe.logged_warnings).to eq ""
1093
- expect(BaseThingy.created_provider).to eq provider_class
1094
- end
1095
-
1096
- context "with a priority array [ Z, B ]" do
1097
- before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z, provider_class ] }
1098
-
1099
- it "two_classes_one_dsl resolves to Z (respects the priority map)" do
1100
- temp_two_classes_one_dsl = two_classes_one_dsl
1101
- recipe = converge do
1102
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1103
- end
1104
- expect(recipe.logged_warnings).to eq ""
1105
- expect(BaseThingy.created_provider).to eq provider_class_z
1106
- end
1107
- end
1108
- end
1109
-
1110
- context "which provides(:two_classes_one_dsl) { false }" do
1111
- before { provider_class_z.provides(two_classes_one_dsl) { false } }
1112
-
1113
- context "with a priority array [ Z, B ]" do
1114
- before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z, provider_class ] }
1115
-
1116
- it "two_classes_one_dsl resolves to B (the next one in the priority map)" do
1117
- temp_two_classes_one_dsl = two_classes_one_dsl
1118
- recipe = converge do
1119
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1120
- end
1121
- expect(recipe.logged_warnings).to eq ""
1122
- expect(BaseThingy.created_provider).to eq provider_class
1123
- end
1124
- end
1125
-
1126
- context "with priority arrays [ B ] and [ Z ]" do
1127
- before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z ] }
1128
- before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class ] }
1129
-
1130
- it "two_classes_one_dsl resolves to B (the one in the next priority map)" do
1131
- temp_two_classes_one_dsl = two_classes_one_dsl
1132
- recipe = converge do
1133
- instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1134
- end
1135
- expect(recipe.logged_warnings).to eq ""
1136
- expect(BaseThingy.created_provider).to eq provider_class
1137
- end
1138
- end
1139
- end
1140
- end
1141
- end
1142
-
1143
- context "and another resource Blarghle with provides :two_classes_one_dsl, os: 'blarghle'" do
1144
- let(:resource_class_blarghle) do
1145
- result = Class.new(BaseThingy) do
1146
- def self.name
1147
- "Blarghle"
1148
- end
1149
-
1150
- def self.to_s; name; end
1151
-
1152
- def self.inspect; name.inspect; end
1153
- end
1154
- result.resource_name two_classes_one_dsl
1155
- result.provides two_classes_one_dsl, os: "blarghle"
1156
- result
1157
- end
1158
- before { resource_class_blarghle } # pull on it so it gets defined before the recipe runs
1159
-
1160
- it "on os = blarghle, two_classes_one_dsl resolves to Blarghle" do
1161
- temp_two_classes_one_dsl = two_classes_one_dsl
1162
- recipe = converge do
1163
- # this is an ugly way to test, make Cheffish expose node attrs
1164
- run_context.node.automatic[:os] = "blarghle"
1165
- instance_eval("#{temp_two_classes_one_dsl} 'blah' do; end")
1166
- end
1167
- expect(recipe.logged_warnings).to eq ""
1168
- expect(BaseThingy.created_resource).to eq resource_class_blarghle
1169
- end
1170
-
1171
- it "on os = linux, two_classes_one_dsl resolves to B" do
1172
- temp_two_classes_one_dsl = two_classes_one_dsl
1173
- recipe = converge do
1174
- # this is an ugly way to test, make Cheffish expose node attrs
1175
- run_context.node.automatic[:os] = "linux"
1176
- instance_eval("#{temp_two_classes_one_dsl} 'blah' do; end")
1177
- end
1178
- expect(recipe.logged_warnings).to eq ""
1179
- expect(BaseThingy.created_resource).to eq resource_class
1180
- end
1181
- end
1182
- end
1183
-
1184
- context "with a resource MyResource" do
1185
- let(:resource_class) do
1186
- Class.new(BaseThingy) do
1187
- def self.called_provides
1188
- @called_provides
1189
- end
1190
-
1191
- def to_s
1192
- "MyResource"
1193
- end
1194
- end end
1195
- let(:my_resource) { :"my_resource#{Namer.current_index}" }
1196
- let(:blarghle_blarghle_little_star) { :"blarghle_blarghle_little_star#{Namer.current_index}" }
1197
-
1198
- context "with resource_name :my_resource" do
1199
- before do
1200
- resource_class.resource_name my_resource
1201
- end
1202
-
1203
- context "with provides? returning true to my_resource" do
1204
- before do
1205
- temp_my_resource = my_resource
1206
- resource_class.define_singleton_method(:provides?) do |node, resource_name|
1207
- @called_provides = true
1208
- resource_name == temp_my_resource
1209
- end
1210
- end
1211
-
1212
- it "my_resource returns the resource and calls provides?, but does not emit a warning" do
1213
- dsl_name = my_resource
1214
- recipe = converge do
1215
- instance_eval("#{dsl_name} 'foo'")
1216
- end
1217
- expect(recipe.logged_warnings).to eq ""
1218
- expect(BaseThingy.created_resource).to eq resource_class
1219
- expect(resource_class.called_provides).to be_truthy
1220
- end
1221
- end
1222
-
1223
- context "with provides? returning true to blarghle_blarghle_little_star and not resource_name" do
1224
- before do
1225
- temp_blarghle_blarghle_little_star = blarghle_blarghle_little_star
1226
- resource_class.define_singleton_method(:provides?) do |node, resource_name|
1227
- @called_provides = true
1228
- resource_name == temp_blarghle_blarghle_little_star
1229
- end
1230
- end
1231
-
1232
- it "my_resource does not return the resource" do
1233
- dsl_name = my_resource
1234
- expect_converge do
1235
- instance_eval("#{dsl_name} 'foo'")
1236
- end.to raise_error(Chef::Exceptions::NoSuchResourceType)
1237
- expect(resource_class.called_provides).to be_truthy
1238
- end
1239
-
1240
- it "blarghle_blarghle_little_star 'foo' returns the resource and emits a warning" do
1241
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
1242
- dsl_name = blarghle_blarghle_little_star
1243
- recipe = converge do
1244
- instance_eval("#{dsl_name} 'foo'")
1245
- end
1246
- expect(recipe.logged_warnings).to include "WARN: #{resource_class}.provides? returned true when asked if it provides DSL #{dsl_name}, but provides :#{dsl_name} was never called!"
1247
- expect(BaseThingy.created_resource).to eq resource_class
1248
- expect(resource_class.called_provides).to be_truthy
1249
- end
1250
- end
1251
-
1252
- context "and a provider" do
1253
- let(:provider_class) do
1254
- Class.new(BaseThingy::Provider) do
1255
- def self.name
1256
- "MyProvider"
1257
- end
1258
-
1259
- def self.to_s; name; end
1260
-
1261
- def self.inspect; name.inspect; end
1262
-
1263
- def self.called_provides
1264
- @called_provides
1265
- end
1266
- end
1267
- end
1268
-
1269
- before do
1270
- resource_class.send(:define_method, :provider) { nil }
1271
- end
1272
-
1273
- context "that provides :my_resource" do
1274
- before do
1275
- provider_class.provides my_resource
1276
- end
1277
-
1278
- context "with supports? returning true" do
1279
- before do
1280
- provider_class.define_singleton_method(:supports?) { |resource, action| true }
1281
- end
1282
-
1283
- it "my_resource runs the provider and does not emit a warning" do
1284
- temp_my_resource = my_resource
1285
- recipe = converge do
1286
- instance_eval("#{temp_my_resource} 'foo'")
1287
- end
1288
- expect(recipe.logged_warnings).to eq ""
1289
- expect(BaseThingy.created_provider).to eq provider_class
1290
- end
1291
-
1292
- context "and another provider supporting :my_resource with supports? false" do
1293
- let(:provider_class2) do
1294
- Class.new(BaseThingy::Provider) do
1295
- def self.name
1296
- "MyProvider2"
1297
- end
1298
-
1299
- def self.to_s; name; end
1300
-
1301
- def self.inspect; name.inspect; end
1302
-
1303
- def self.called_provides
1304
- @called_provides
1305
- end
1306
- provides my_resource
1307
- def self.supports?(resource, action)
1308
- false
1309
- end
1310
- end
1311
- end
1312
-
1313
- it "my_resource runs the first provider" do
1314
- temp_my_resource = my_resource
1315
- recipe = converge do
1316
- instance_eval("#{temp_my_resource} 'foo'")
1317
- end
1318
- expect(recipe.logged_warnings).to eq ""
1319
- expect(BaseThingy.created_provider).to eq provider_class
1320
- end
1321
- end
1322
- end
1323
-
1324
- context "with supports? returning false" do
1325
- before do
1326
- provider_class.define_singleton_method(:supports?) { |resource, action| false }
1327
- end
1328
-
1329
- # TODO no warning? ick
1330
- it "my_resource runs the provider anyway" do
1331
- temp_my_resource = my_resource
1332
- recipe = converge do
1333
- instance_eval("#{temp_my_resource} 'foo'")
1334
- end
1335
- expect(recipe.logged_warnings).to eq ""
1336
- expect(BaseThingy.created_provider).to eq provider_class
1337
- end
1338
-
1339
- context "and another provider supporting :my_resource with supports? true" do
1340
- let(:provider_class2) do
1341
- temp_my_resource = my_resource
1342
- Class.new(BaseThingy::Provider) do
1343
- def self.name
1344
- "MyProvider2"
1345
- end
1346
-
1347
- def self.to_s; name; end
1348
-
1349
- def self.inspect; name.inspect; end
1350
-
1351
- def self.called_provides
1352
- @called_provides
1353
- end
1354
- provides temp_my_resource
1355
- def self.supports?(resource, action)
1356
- true
1357
- end
1358
- end
1359
- end
1360
- before { provider_class2 } # make sure the provider class shows up
1361
-
1362
- it "my_resource runs the other provider" do
1363
- temp_my_resource = my_resource
1364
- recipe = converge do
1365
- instance_eval("#{temp_my_resource} 'foo'")
1366
- end
1367
- expect(recipe.logged_warnings).to eq ""
1368
- expect(BaseThingy.created_provider).to eq provider_class2
1369
- end
1370
- end
1371
- end
1372
- end
1373
-
1374
- context "with provides? returning true" do
1375
- before do
1376
- temp_my_resource = my_resource
1377
- provider_class.define_singleton_method(:provides?) do |node, resource|
1378
- @called_provides = true
1379
- resource.declared_type == temp_my_resource
1380
- end
1381
- end
1382
-
1383
- context "that provides :my_resource" do
1384
- before do
1385
- provider_class.provides my_resource
1386
- end
1387
-
1388
- it "my_resource calls the provider (and calls provides?), but does not emit a warning" do
1389
- temp_my_resource = my_resource
1390
- recipe = converge do
1391
- instance_eval("#{temp_my_resource} 'foo'")
1392
- end
1393
- expect(recipe.logged_warnings).to eq ""
1394
- expect(BaseThingy.created_provider).to eq provider_class
1395
- expect(provider_class.called_provides).to be_truthy
1396
- end
1397
- end
1398
-
1399
- context "that does not call provides :my_resource" do
1400
- it "my_resource calls the provider (and calls provides?), and emits a warning" do
1401
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
1402
- temp_my_resource = my_resource
1403
- recipe = converge do
1404
- instance_eval("#{temp_my_resource} 'foo'")
1405
- end
1406
- expect(recipe.logged_warnings).to include("WARN: #{provider_class}.provides? returned true when asked if it provides DSL #{my_resource}, but provides :#{my_resource} was never called!")
1407
- expect(BaseThingy.created_provider).to eq provider_class
1408
- expect(provider_class.called_provides).to be_truthy
1409
- end
1410
- end
1411
- end
1412
-
1413
- context "with provides? returning false to my_resource" do
1414
- before do
1415
- temp_my_resource = my_resource
1416
- provider_class.define_singleton_method(:provides?) do |node, resource|
1417
- @called_provides = true
1418
- false
1419
- end
1420
- end
1421
-
1422
- context "that provides :my_resource" do
1423
- before do
1424
- provider_class.provides my_resource
1425
- end
1426
-
1427
- it "my_resource fails to find a provider (and calls provides)" do
1428
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
1429
- temp_my_resource = my_resource
1430
- expect_converge do
1431
- instance_eval("#{temp_my_resource} 'foo'")
1432
- end.to raise_error(Chef::Exceptions::ProviderNotFound)
1433
- expect(provider_class.called_provides).to be_truthy
1434
- end
1435
- end
1436
-
1437
- context "that does not provide :my_resource" do
1438
- it "my_resource fails to find a provider (and calls provides)" do
1439
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
1440
- temp_my_resource = my_resource
1441
- expect_converge do
1442
- instance_eval("#{temp_my_resource} 'foo'")
1443
- end.to raise_error(Chef::Exceptions::ProviderNotFound)
1444
- expect(provider_class.called_provides).to be_truthy
1445
- end
1446
- end
1447
- end
1448
- end
1449
- end
1450
- end
1451
- end
1452
-
1453
- before(:all) { Namer.current_index = 0 }
1454
- before { Namer.current_index += 1 }
1455
-
1456
- context "with an LWRP that declares actions" do
1457
- let(:resource_class) do
1458
- Class.new(Chef::Resource::LWRPBase) do
1459
- provides :"recipe_dsl_spec#{Namer.current_index}"
1460
- actions :create
1461
- end
1462
- end
1463
- let(:resource) do
1464
- resource_class.new("blah", run_context)
1465
- end
1466
- it "The actions are part of actions along with :nothing" do
1467
- expect(resource_class.actions).to eq [ :nothing, :create ]
1468
- end
1469
- it "The actions are part of allowed_actions along with :nothing" do
1470
- expect(resource.allowed_actions).to eq [ :nothing, :create ]
1471
- end
1472
-
1473
- context "and a subclass that declares more actions" do
1474
- let(:subresource_class) do
1475
- Class.new(Chef::Resource::LWRPBase) do
1476
- provides :"recipe_dsl_spec_sub#{Namer.current_index}"
1477
- actions :delete
1478
- end
1479
- end
1480
- let(:subresource) do
1481
- subresource_class.new("subblah", run_context)
1482
- end
1483
-
1484
- it "The parent class actions are not part of actions" do
1485
- expect(subresource_class.actions).to eq [ :nothing, :delete ]
1486
- end
1487
- it "The parent class actions are not part of allowed_actions" do
1488
- expect(subresource.allowed_actions).to eq [ :nothing, :delete ]
1489
- end
1490
- it "The parent class actions do not change" do
1491
- expect(resource_class.actions).to eq [ :nothing, :create ]
1492
- expect(resource.allowed_actions).to eq [ :nothing, :create ]
1493
- end
1494
- end
1495
- end
1496
-
1497
- context "with a dynamically defined resource and regular provider" do
1498
- before(:context) do
1499
- Class.new(Chef::Resource) do
1500
- resource_name :lw_resource_with_hw_provider_test_case
1501
- default_action :create
1502
- attr_accessor :created_provider
1503
- end
1504
- class Chef::Provider::LwResourceWithHwProviderTestCase < Chef::Provider
1505
- def load_current_resource
1506
- end
1507
-
1508
- def action_create
1509
- new_resource.created_provider = self.class
1510
- end
1511
- end
1512
- end
1513
-
1514
- it "looks up the provider in Chef::Provider converting the resource name from snake case to camel case" do
1515
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
1516
- resource = nil
1517
- recipe = converge do
1518
- resource = lw_resource_with_hw_provider_test_case("blah") {}
1519
- end
1520
- expect(resource.created_provider).to eq(Chef::Provider::LwResourceWithHwProviderTestCase)
1521
- end
1522
- end
1523
- end
1
+ require "support/shared/integration/integration_helper"
2
+
3
+ describe "Recipe DSL methods" do
4
+ include IntegrationSupport
5
+
6
+ module Namer
7
+ extend self
8
+ attr_accessor :current_index
9
+ end
10
+
11
+ before(:all) { Namer.current_index = 1 }
12
+ before { Namer.current_index += 1 }
13
+
14
+ context "with resource 'base_thingy' declared as BaseThingy" do
15
+ before(:context) do
16
+
17
+ class BaseThingy < Chef::Resource
18
+ resource_name "base_thingy"
19
+ default_action :create
20
+
21
+ class<<self
22
+ attr_accessor :created_name
23
+ attr_accessor :created_resource
24
+ attr_accessor :created_provider
25
+ end
26
+
27
+ def provider
28
+ Provider
29
+ end
30
+ class Provider < Chef::Provider
31
+ def load_current_resource
32
+ end
33
+
34
+ def action_create
35
+ BaseThingy.created_name = new_resource.name
36
+ BaseThingy.created_resource = new_resource.class
37
+ BaseThingy.created_provider = self.class
38
+ end
39
+ end
40
+ end
41
+
42
+ # Modules to put stuff in
43
+ module RecipeDSLSpecNamespace; end
44
+ module RecipeDSLSpecNamespace::Bar; end
45
+
46
+ end
47
+
48
+ before :each do
49
+ BaseThingy.created_resource = nil
50
+ BaseThingy.created_provider = nil
51
+ end
52
+
53
+ it "creates base_thingy when you call base_thingy in a recipe" do
54
+ recipe = converge do
55
+ base_thingy("blah") {}
56
+ end
57
+ expect(recipe.logged_warnings).to eq ""
58
+ expect(BaseThingy.created_name).to eq "blah"
59
+ expect(BaseThingy.created_resource).to eq BaseThingy
60
+ end
61
+
62
+ it "errors out when you call base_thingy do ... end in a recipe" do
63
+ expect_converge do
64
+ base_thingy { ; }
65
+ end.to raise_error(ArgumentError, "You must supply a name when declaring a base_thingy resource")
66
+ end
67
+
68
+ it "emits a warning when you call base_thingy 'foo', 'bar' do ... end in a recipe" do
69
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
70
+ recipe = converge do
71
+ base_thingy "foo", "bar" do
72
+ end
73
+ end
74
+ expect(recipe.logged_warnings).to match(/Cannot create resource base_thingy with more than one argument. All arguments except the name \("foo"\) will be ignored. This will cause an error in Chef 13. Arguments: \["foo", "bar"\]/)
75
+ expect(BaseThingy.created_name).to eq "foo"
76
+ expect(BaseThingy.created_resource).to eq BaseThingy
77
+ end
78
+
79
+ context "Deprecated automatic resource DSL" do
80
+ before do
81
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
82
+ end
83
+
84
+ context "with a resource 'backcompat_thingy' declared in Chef::Resource and Chef::Provider" do
85
+ before(:context) do
86
+
87
+ class Chef::Resource::BackcompatThingy < Chef::Resource
88
+ default_action :create
89
+ end
90
+ class Chef::Provider::BackcompatThingy < Chef::Provider
91
+ def load_current_resource
92
+ end
93
+
94
+ def action_create
95
+ BaseThingy.created_resource = new_resource.class
96
+ BaseThingy.created_provider = self.class
97
+ end
98
+ end
99
+
100
+ end
101
+
102
+ it "backcompat_thingy creates a Chef::Resource::BackcompatThingy" do
103
+ recipe = converge do
104
+ backcompat_thingy("blah") {}
105
+ end
106
+ expect(BaseThingy.created_resource).to eq Chef::Resource::BackcompatThingy
107
+ expect(BaseThingy.created_provider).to eq Chef::Provider::BackcompatThingy
108
+ end
109
+
110
+ context "and another resource 'backcompat_thingy' in BackcompatThingy with 'provides'" do
111
+ before(:context) do
112
+
113
+ class RecipeDSLSpecNamespace::BackcompatThingy < BaseThingy
114
+ provides :backcompat_thingy
115
+ resource_name :backcompat_thingy
116
+ end
117
+
118
+ end
119
+
120
+ it "backcompat_thingy creates a BackcompatThingy" do
121
+ recipe = converge do
122
+ backcompat_thingy("blah") {}
123
+ end
124
+ expect(recipe.logged_warnings).to match(/Class Chef::Provider::BackcompatThingy does not declare 'provides :backcompat_thingy'./)
125
+ expect(BaseThingy.created_resource).not_to be_nil
126
+ end
127
+ end
128
+ end
129
+
130
+ context "with a resource named RecipeDSLSpecNamespace::Bar::BarThingy" do
131
+ before(:context) do
132
+
133
+ class RecipeDSLSpecNamespace::Bar::BarThingy < BaseThingy
134
+ end
135
+
136
+ end
137
+
138
+ it "bar_thingy does not work" do
139
+ expect_converge do
140
+ bar_thingy("blah") {}
141
+ end.to raise_error(NoMethodError)
142
+ end
143
+ end
144
+
145
+ context "with a resource named Chef::Resource::NoNameThingy with resource_name nil" do
146
+ before(:context) do
147
+
148
+ class Chef::Resource::NoNameThingy < BaseThingy
149
+ resource_name nil
150
+ end
151
+
152
+ end
153
+
154
+ it "no_name_thingy does not work" do
155
+ expect_converge do
156
+ no_name_thingy("blah") {}
157
+ end.to raise_error(NoMethodError)
158
+ end
159
+ end
160
+
161
+ context "with a resource named AnotherNoNameThingy with resource_name :another_thingy_name" do
162
+ before(:context) do
163
+
164
+ class AnotherNoNameThingy < BaseThingy
165
+ resource_name :another_thingy_name
166
+ end
167
+
168
+ end
169
+
170
+ it "another_no_name_thingy does not work" do
171
+ expect_converge do
172
+ another_no_name_thingy("blah") {}
173
+ end.to raise_error(NoMethodError)
174
+ end
175
+
176
+ it "another_thingy_name works" do
177
+ recipe = converge do
178
+ another_thingy_name("blah") {}
179
+ end
180
+ expect(recipe.logged_warnings).to eq ""
181
+ expect(BaseThingy.created_resource).to eq(AnotherNoNameThingy)
182
+ end
183
+ end
184
+
185
+ context "with a resource named AnotherNoNameThingy2 with resource_name :another_thingy_name2; resource_name :another_thingy_name3" do
186
+ before(:context) do
187
+
188
+ class AnotherNoNameThingy2 < BaseThingy
189
+ resource_name :another_thingy_name2
190
+ resource_name :another_thingy_name3
191
+ end
192
+
193
+ end
194
+
195
+ it "another_no_name_thingy does not work" do
196
+ expect_converge do
197
+ another_no_name_thingy2("blah") {}
198
+ end.to raise_error(NoMethodError)
199
+ end
200
+
201
+ it "another_thingy_name2 does not work" do
202
+ expect_converge do
203
+ another_thingy_name2("blah") {}
204
+ end.to raise_error(NoMethodError)
205
+ end
206
+
207
+ it "yet_another_thingy_name3 works" do
208
+ recipe = converge do
209
+ another_thingy_name3("blah") {}
210
+ end
211
+ expect(recipe.logged_warnings).to eq ""
212
+ expect(BaseThingy.created_resource).to eq(AnotherNoNameThingy2)
213
+ end
214
+ end
215
+
216
+ context "provides overriding resource_name" do
217
+ context "with a resource named AnotherNoNameThingy3 with provides :another_no_name_thingy3, os: 'blarghle'" do
218
+ before(:context) do
219
+
220
+ class AnotherNoNameThingy3 < BaseThingy
221
+ resource_name :another_no_name_thingy_3
222
+ provides :another_no_name_thingy3, os: "blarghle"
223
+ end
224
+
225
+ end
226
+
227
+ it "and os = linux, another_no_name_thingy3 does not work" do
228
+ expect_converge do
229
+ # TODO this is an ugly way to test, make Cheffish expose node attrs
230
+ run_context.node.automatic[:os] = "linux"
231
+ another_no_name_thingy3("blah") {}
232
+ end.to raise_error(Chef::Exceptions::NoSuchResourceType)
233
+ end
234
+
235
+ it "and os = blarghle, another_no_name_thingy3 works" do
236
+ recipe = converge do
237
+ # TODO this is an ugly way to test, make Cheffish expose node attrs
238
+ run_context.node.automatic[:os] = "blarghle"
239
+ another_no_name_thingy3("blah") {}
240
+ end
241
+ expect(recipe.logged_warnings).to eq ""
242
+ expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy3)
243
+ end
244
+ end
245
+
246
+ context "with a resource named AnotherNoNameThingy4 with two provides" do
247
+ before(:context) do
248
+
249
+ class AnotherNoNameThingy4 < BaseThingy
250
+ resource_name :another_no_name_thingy_4
251
+ provides :another_no_name_thingy4, os: "blarghle"
252
+ provides :another_no_name_thingy4, platform_family: "foo"
253
+ end
254
+
255
+ end
256
+
257
+ it "and os = linux, another_no_name_thingy4 does not work" do
258
+ expect_converge do
259
+ # TODO this is an ugly way to test, make Cheffish expose node attrs
260
+ run_context.node.automatic[:os] = "linux"
261
+ another_no_name_thingy4("blah") {}
262
+ end.to raise_error(Chef::Exceptions::NoSuchResourceType)
263
+ end
264
+
265
+ it "and os = blarghle, another_no_name_thingy4 works" do
266
+ recipe = converge do
267
+ # TODO this is an ugly way to test, make Cheffish expose node attrs
268
+ run_context.node.automatic[:os] = "blarghle"
269
+ another_no_name_thingy4("blah") {}
270
+ end
271
+ expect(recipe.logged_warnings).to eq ""
272
+ expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy4)
273
+ end
274
+
275
+ it "and platform_family = foo, another_no_name_thingy4 works" do
276
+ recipe = converge do
277
+ # TODO this is an ugly way to test, make Cheffish expose node attrs
278
+ run_context.node.automatic[:platform_family] = "foo"
279
+ another_no_name_thingy4("blah") {}
280
+ end
281
+ expect(recipe.logged_warnings).to eq ""
282
+ expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy4)
283
+ end
284
+ end
285
+
286
+ context "with a resource named AnotherNoNameThingy5, a different resource_name, and a provides with the original resource_name" do
287
+ before(:context) do
288
+
289
+ class AnotherNoNameThingy5 < BaseThingy
290
+ resource_name :another_thingy_name_for_another_no_name_thingy5
291
+ provides :another_no_name_thingy5, os: "blarghle"
292
+ end
293
+
294
+ end
295
+
296
+ it "and os = linux, another_no_name_thingy5 does not work" do
297
+ expect_converge do
298
+ # this is an ugly way to test, make Cheffish expose node attrs
299
+ run_context.node.automatic[:os] = "linux"
300
+ another_no_name_thingy5("blah") {}
301
+ end.to raise_error(Chef::Exceptions::NoSuchResourceType)
302
+ end
303
+
304
+ it "and os = blarghle, another_no_name_thingy5 works" do
305
+ recipe = converge do
306
+ # this is an ugly way to test, make Cheffish expose node attrs
307
+ run_context.node.automatic[:os] = "blarghle"
308
+ another_no_name_thingy5("blah") {}
309
+ end
310
+ expect(recipe.logged_warnings).to eq ""
311
+ expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy5)
312
+ end
313
+
314
+ it "the new resource name can be used in a recipe" do
315
+ recipe = converge do
316
+ another_thingy_name_for_another_no_name_thingy5("blah") {}
317
+ end
318
+ expect(recipe.logged_warnings).to eq ""
319
+ expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy5)
320
+ end
321
+ end
322
+
323
+ context "with a resource named AnotherNoNameThingy6, a provides with the original resource name, and a different resource_name" do
324
+ before(:context) do
325
+
326
+ class AnotherNoNameThingy6 < BaseThingy
327
+ provides :another_no_name_thingy6, os: "blarghle"
328
+ resource_name :another_thingy_name_for_another_no_name_thingy6
329
+ end
330
+
331
+ end
332
+
333
+ it "and os = linux, another_no_name_thingy6 does not work" do
334
+ expect_converge do
335
+ # this is an ugly way to test, make Cheffish expose node attrs
336
+ run_context.node.automatic[:os] = "linux"
337
+ another_no_name_thingy6("blah") {}
338
+ end.to raise_error(Chef::Exceptions::NoSuchResourceType)
339
+ end
340
+
341
+ it "and os = blarghle, another_no_name_thingy6 works" do
342
+ recipe = converge do
343
+ # this is an ugly way to test, make Cheffish expose node attrs
344
+ run_context.node.automatic[:os] = "blarghle"
345
+ another_no_name_thingy6("blah") {}
346
+ end
347
+ expect(recipe.logged_warnings).to eq ""
348
+ expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy6)
349
+ end
350
+
351
+ it "the new resource name can be used in a recipe" do
352
+ recipe = converge do
353
+ another_thingy_name_for_another_no_name_thingy6("blah") {}
354
+ end
355
+ expect(recipe.logged_warnings).to eq ""
356
+ expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy6)
357
+ end
358
+ end
359
+
360
+ context "with a resource named AnotherNoNameThingy7, a new resource_name, and provides with that new resource name" do
361
+ before(:context) do
362
+
363
+ class AnotherNoNameThingy7 < BaseThingy
364
+ resource_name :another_thingy_name_for_another_no_name_thingy7
365
+ provides :another_thingy_name_for_another_no_name_thingy7, os: "blarghle"
366
+ end
367
+
368
+ end
369
+
370
+ it "and os = linux, another_thingy_name_for_another_no_name_thingy7 does not work" do
371
+ expect_converge do
372
+ # this is an ugly way to test, make Cheffish expose node attrs
373
+ run_context.node.automatic[:os] = "linux"
374
+ another_thingy_name_for_another_no_name_thingy7("blah") {}
375
+ end.to raise_error(Chef::Exceptions::NoSuchResourceType)
376
+ end
377
+
378
+ it "and os = blarghle, another_thingy_name_for_another_no_name_thingy7 works" do
379
+ recipe = converge do
380
+ # this is an ugly way to test, make Cheffish expose node attrs
381
+ run_context.node.automatic[:os] = "blarghle"
382
+ another_thingy_name_for_another_no_name_thingy7("blah") {}
383
+ end
384
+ expect(recipe.logged_warnings).to eq ""
385
+ expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy7)
386
+ end
387
+
388
+ it "the old resource name does not work" do
389
+ expect_converge do
390
+ # this is an ugly way to test, make Cheffish expose node attrs
391
+ run_context.node.automatic[:os] = "linux"
392
+ another_no_name_thingy_7("blah") {}
393
+ end.to raise_error(NoMethodError)
394
+ end
395
+ end
396
+
397
+ # opposite order from the previous test (provides, then resource_name)
398
+ context "with a resource named AnotherNoNameThingy8, a provides with a new resource name, and resource_name with that new resource name" do
399
+ before(:context) do
400
+
401
+ class AnotherNoNameThingy8 < BaseThingy
402
+ provides :another_thingy_name_for_another_no_name_thingy8, os: "blarghle"
403
+ resource_name :another_thingy_name_for_another_no_name_thingy8
404
+ end
405
+
406
+ end
407
+
408
+ it "and os = linux, another_thingy_name_for_another_no_name_thingy8 does not work" do
409
+ expect_converge do
410
+ # this is an ugly way to test, make Cheffish expose node attrs
411
+ run_context.node.automatic[:os] = "linux"
412
+ another_thingy_name_for_another_no_name_thingy8("blah") {}
413
+ end.to raise_error(Chef::Exceptions::NoSuchResourceType)
414
+ end
415
+
416
+ it "and os = blarghle, another_thingy_name_for_another_no_name_thingy8 works" do
417
+ recipe = converge do
418
+ # this is an ugly way to test, make Cheffish expose node attrs
419
+ run_context.node.automatic[:os] = "blarghle"
420
+ another_thingy_name_for_another_no_name_thingy8("blah") {}
421
+ end
422
+ expect(recipe.logged_warnings).to eq ""
423
+ expect(BaseThingy.created_resource).to eq (AnotherNoNameThingy8)
424
+ end
425
+
426
+ it "the old resource name does not work" do
427
+ expect_converge do
428
+ # this is an ugly way to test, make Cheffish expose node attrs
429
+ run_context.node.automatic[:os] = "linux"
430
+ another_thingy_name8("blah") {}
431
+ end.to raise_error(NoMethodError)
432
+ end
433
+ end
434
+ end
435
+ end
436
+
437
+ context "provides" do
438
+ context "when MySupplier provides :hemlock" do
439
+ before(:context) do
440
+
441
+ class RecipeDSLSpecNamespace::MySupplier < BaseThingy
442
+ resource_name :hemlock
443
+ end
444
+
445
+ end
446
+
447
+ it "my_supplier does not work in a recipe" do
448
+ expect_converge do
449
+ my_supplier("blah") {}
450
+ end.to raise_error(NoMethodError)
451
+ end
452
+
453
+ it "hemlock works in a recipe" do
454
+ expect_recipe do
455
+ hemlock("blah") {}
456
+ end.to emit_no_warnings_or_errors
457
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::MySupplier
458
+ end
459
+ end
460
+
461
+ context "when Thingy3 has resource_name :thingy3" do
462
+ before(:context) do
463
+
464
+ class RecipeDSLSpecNamespace::Thingy3 < BaseThingy
465
+ resource_name :thingy3
466
+ end
467
+
468
+ end
469
+
470
+ it "thingy3 works in a recipe" do
471
+ expect_recipe do
472
+ thingy3("blah") {}
473
+ end.to emit_no_warnings_or_errors
474
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
475
+ end
476
+
477
+ context "and Thingy4 has resource_name :thingy3" do
478
+ before(:context) do
479
+
480
+ class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
481
+ resource_name :thingy3
482
+ end
483
+
484
+ end
485
+
486
+ it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
487
+ recipe = converge do
488
+ thingy3("blah") {}
489
+ end
490
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
491
+ end
492
+
493
+ it "thingy4 does not work in a recipe" do
494
+ expect_converge do
495
+ thingy4("blah") {}
496
+ end.to raise_error(NoMethodError)
497
+ end
498
+
499
+ it "resource_matching_short_name returns Thingy4" do
500
+ expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
501
+ end
502
+ end
503
+ end
504
+
505
+ context "when Thingy5 has resource_name :thingy5 and provides :thingy5reverse, :thingy5_2 and :thingy5_2reverse" do
506
+ before(:context) do
507
+
508
+ class RecipeDSLSpecNamespace::Thingy5 < BaseThingy
509
+ resource_name :thingy5
510
+ provides :thingy5reverse
511
+ provides :thingy5_2
512
+ provides :thingy5_2reverse
513
+ end
514
+
515
+ end
516
+
517
+ it "thingy5 works in a recipe" do
518
+ expect_recipe do
519
+ thingy5("blah") {}
520
+ end.to emit_no_warnings_or_errors
521
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
522
+ end
523
+
524
+ context "and Thingy6 provides :thingy5" do
525
+ before(:context) do
526
+
527
+ class RecipeDSLSpecNamespace::Thingy6 < BaseThingy
528
+ resource_name :thingy6
529
+ provides :thingy5
530
+ end
531
+
532
+ end
533
+
534
+ it "thingy6 works in a recipe and yields Thingy6" do
535
+ recipe = converge do
536
+ thingy6("blah") {}
537
+ end
538
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy6
539
+ end
540
+
541
+ it "thingy5 works in a recipe and yields Foo::Thingy5 (the alphabetical one)" do
542
+ recipe = converge do
543
+ thingy5("blah") {}
544
+ end
545
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
546
+ end
547
+
548
+ it "resource_matching_short_name returns Thingy5" do
549
+ expect(Chef::Resource.resource_matching_short_name(:thingy5)).to eq RecipeDSLSpecNamespace::Thingy5
550
+ end
551
+
552
+ context "and AThingy5 provides :thingy5reverse" do
553
+ before(:context) do
554
+
555
+ class RecipeDSLSpecNamespace::AThingy5 < BaseThingy
556
+ resource_name :thingy5reverse
557
+ end
558
+
559
+ end
560
+
561
+ it "thingy5reverse works in a recipe and yields AThingy5 (the alphabetical one)" do
562
+ recipe = converge do
563
+ thingy5reverse("blah") {}
564
+ end
565
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::AThingy5
566
+ end
567
+ end
568
+
569
+ context "and ZRecipeDSLSpecNamespace::Thingy5 provides :thingy5_2" do
570
+ before(:context) do
571
+
572
+ module ZRecipeDSLSpecNamespace
573
+ class Thingy5 < BaseThingy
574
+ resource_name :thingy5_2
575
+ end
576
+ end
577
+
578
+ end
579
+
580
+ it "thingy5_2 works in a recipe and yields the RecipeDSLSpaceNamespace one (the alphabetical one)" do
581
+ recipe = converge do
582
+ thingy5_2("blah") {}
583
+ end
584
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy5
585
+ end
586
+ end
587
+
588
+ context "and ARecipeDSLSpecNamespace::Thingy5 provides :thingy5_2" do
589
+ before(:context) do
590
+
591
+ module ARecipeDSLSpecNamespace
592
+ class Thingy5 < BaseThingy
593
+ resource_name :thingy5_2reverse
594
+ end
595
+ end
596
+
597
+ end
598
+
599
+ it "thingy5_2reverse works in a recipe and yields the ARecipeDSLSpaceNamespace one (the alphabetical one)" do
600
+ recipe = converge do
601
+ thingy5_2reverse("blah") {}
602
+ end
603
+ expect(BaseThingy.created_resource).to eq ARecipeDSLSpecNamespace::Thingy5
604
+ end
605
+ end
606
+ end
607
+
608
+ context "when Thingy3 has resource_name :thingy3" do
609
+ before(:context) do
610
+
611
+ class RecipeDSLSpecNamespace::Thingy3 < BaseThingy
612
+ resource_name :thingy3
613
+ end
614
+
615
+ end
616
+
617
+ it "thingy3 works in a recipe" do
618
+ expect_recipe do
619
+ thingy3("blah") {}
620
+ end.to emit_no_warnings_or_errors
621
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
622
+ end
623
+
624
+ context "and Thingy4 has resource_name :thingy3" do
625
+ before(:context) do
626
+
627
+ class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
628
+ resource_name :thingy3
629
+ end
630
+
631
+ end
632
+
633
+ it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
634
+ recipe = converge do
635
+ thingy3("blah") {}
636
+ end
637
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
638
+ end
639
+
640
+ it "thingy4 does not work in a recipe" do
641
+ expect_converge do
642
+ thingy4("blah") {}
643
+ end.to raise_error(NoMethodError)
644
+ end
645
+
646
+ it "resource_matching_short_name returns Thingy4" do
647
+ expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
648
+ end
649
+ end
650
+
651
+ context "and Thingy4 has resource_name :thingy3" do
652
+ before(:context) do
653
+
654
+ class RecipeDSLSpecNamespace::Thingy4 < BaseThingy
655
+ resource_name :thingy3
656
+ end
657
+
658
+ end
659
+
660
+ it "thingy3 works in a recipe and yields Thingy3 (the alphabetical one)" do
661
+ recipe = converge do
662
+ thingy3("blah") {}
663
+ end
664
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy3
665
+ end
666
+
667
+ it "thingy4 does not work in a recipe" do
668
+ expect_converge do
669
+ thingy4("blah") {}
670
+ end.to raise_error(NoMethodError)
671
+ end
672
+
673
+ it "resource_matching_short_name returns Thingy4" do
674
+ expect(Chef::Resource.resource_matching_short_name(:thingy3)).to eq RecipeDSLSpecNamespace::Thingy3
675
+ end
676
+ end
677
+ end
678
+
679
+ end
680
+
681
+ context "when Thingy7 provides :thingy8" do
682
+ before(:context) do
683
+
684
+ class RecipeDSLSpecNamespace::Thingy7 < BaseThingy
685
+ resource_name :thingy7
686
+ provides :thingy8
687
+ end
688
+
689
+ end
690
+
691
+ context "and Thingy8 has resource_name :thingy8" do
692
+ before(:context) do
693
+
694
+ class RecipeDSLSpecNamespace::Thingy8 < BaseThingy
695
+ resource_name :thingy8
696
+ end
697
+
698
+ end
699
+
700
+ it "thingy7 works in a recipe and yields Thingy7" do
701
+ recipe = converge do
702
+ thingy7("blah") {}
703
+ end
704
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy7
705
+ end
706
+
707
+ it "thingy8 works in a recipe and yields Thingy7 (alphabetical)" do
708
+ recipe = converge do
709
+ thingy8("blah") {}
710
+ end
711
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy7
712
+ end
713
+
714
+ it "resource_matching_short_name returns Thingy8" do
715
+ expect(Chef::Resource.resource_matching_short_name(:thingy8)).to eq RecipeDSLSpecNamespace::Thingy8
716
+ end
717
+ end
718
+ end
719
+
720
+ context "when Thingy12 provides :thingy12, :twizzle and :twizzle2" do
721
+ before(:context) do
722
+
723
+ class RecipeDSLSpecNamespace::Thingy12 < BaseThingy
724
+ resource_name :thingy12
725
+ provides :twizzle
726
+ provides :twizzle2
727
+ end
728
+
729
+ end
730
+
731
+ it "thingy12 works in a recipe and yields Thingy12" do
732
+ expect_recipe do
733
+ thingy12("blah") {}
734
+ end.to emit_no_warnings_or_errors
735
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
736
+ end
737
+
738
+ it "twizzle works in a recipe and yields Thingy12" do
739
+ expect_recipe do
740
+ twizzle("blah") {}
741
+ end.to emit_no_warnings_or_errors
742
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
743
+ end
744
+
745
+ it "twizzle2 works in a recipe and yields Thingy12" do
746
+ expect_recipe do
747
+ twizzle2("blah") {}
748
+ end.to emit_no_warnings_or_errors
749
+ expect(BaseThingy.created_resource).to eq RecipeDSLSpecNamespace::Thingy12
750
+ end
751
+ end
752
+
753
+ context "with platform-specific resources 'my_super_thingy_foo' and 'my_super_thingy_bar'" do
754
+ before(:context) do
755
+ class MySuperThingyFoo < BaseThingy
756
+ resource_name :my_super_thingy_foo
757
+ provides :my_super_thingy, platform: "foo"
758
+ end
759
+
760
+ class MySuperThingyBar < BaseThingy
761
+ resource_name :my_super_thingy_bar
762
+ provides :my_super_thingy, platform: "bar"
763
+ end
764
+ end
765
+
766
+ it "A run with platform 'foo' uses MySuperThingyFoo" do
767
+ r = Cheffish::ChefRun.new(chef_config)
768
+ r.client.run_context.node.automatic["platform"] = "foo"
769
+ r.compile_recipe do
770
+ my_super_thingy("blah") {}
771
+ end
772
+ r.converge
773
+ expect(r).to emit_no_warnings_or_errors
774
+ expect(BaseThingy.created_resource).to eq MySuperThingyFoo
775
+ end
776
+
777
+ it "A run with platform 'bar' uses MySuperThingyBar" do
778
+ r = Cheffish::ChefRun.new(chef_config)
779
+ r.client.run_context.node.automatic["platform"] = "bar"
780
+ r.compile_recipe do
781
+ my_super_thingy("blah") {}
782
+ end
783
+ r.converge
784
+ expect(r).to emit_no_warnings_or_errors
785
+ expect(BaseThingy.created_resource).to eq MySuperThingyBar
786
+ end
787
+
788
+ it "A run with platform 'x' reports that my_super_thingy is not supported" do
789
+ r = Cheffish::ChefRun.new(chef_config)
790
+ r.client.run_context.node.automatic["platform"] = "x"
791
+ expect do
792
+ r.compile_recipe do
793
+ my_super_thingy("blah") {}
794
+ end
795
+ end.to raise_error(Chef::Exceptions::NoSuchResourceType)
796
+ end
797
+ end
798
+
799
+ context "when Thingy10 provides :thingy10" do
800
+ before(:context) do
801
+ class RecipeDSLSpecNamespace::Thingy10 < BaseThingy
802
+ resource_name :thingy10
803
+ end
804
+ end
805
+
806
+ it "declaring a resource providing the same :thingy10 with override: true does not produce a warning" do
807
+ expect(Chef::Log).not_to receive(:warn)
808
+ class RecipeDSLSpecNamespace::Thingy10AlternateProvider < BaseThingy
809
+ provides :thingy10, override: true
810
+ end
811
+ end
812
+ end
813
+
814
+ context "when Thingy11 provides :thingy11" do
815
+ before(:context) do
816
+ class RecipeDSLSpecNamespace::Thingy11 < BaseThingy
817
+ resource_name :thingy10
818
+ end
819
+ end
820
+
821
+ it "declaring a resource providing the same :thingy11 with os: 'linux' does not produce a warning" do
822
+ expect(Chef::Log).not_to receive(:warn)
823
+ class RecipeDSLSpecNamespace::Thingy11AlternateProvider < BaseThingy
824
+ provides :thingy11, os: "linux"
825
+ end
826
+ end
827
+ end
828
+ end
829
+
830
+ context "with a resource named 'B' with resource name :two_classes_one_dsl" do
831
+ let(:two_classes_one_dsl) { :"two_classes_one_dsl#{Namer.current_index}" }
832
+ let(:resource_class) do
833
+ result = Class.new(BaseThingy) do
834
+ def self.name
835
+ "B"
836
+ end
837
+
838
+ def self.to_s; name; end
839
+
840
+ def self.inspect; name.inspect; end
841
+ end
842
+ result.resource_name two_classes_one_dsl
843
+ result
844
+ end
845
+ before { resource_class } # pull on it so it gets defined before the recipe runs
846
+
847
+ context "and another resource named 'A' with resource_name :two_classes_one_dsl" do
848
+ let(:resource_class_a) do
849
+ result = Class.new(BaseThingy) do
850
+ def self.name
851
+ "A"
852
+ end
853
+
854
+ def self.to_s; name; end
855
+
856
+ def self.inspect; name.inspect; end
857
+ end
858
+ result.resource_name two_classes_one_dsl
859
+ result
860
+ end
861
+ before { resource_class_a } # pull on it so it gets defined before the recipe runs
862
+
863
+ it "two_classes_one_dsl resolves to A (alphabetically earliest)" do
864
+ temp_two_classes_one_dsl = two_classes_one_dsl
865
+ recipe = converge do
866
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
867
+ end
868
+ expect(recipe.logged_warnings).to eq ""
869
+ expect(BaseThingy.created_resource).to eq resource_class_a
870
+ end
871
+
872
+ it "resource_matching_short_name returns B" do
873
+ expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class_a
874
+ end
875
+ end
876
+
877
+ context "and another resource named 'Z' with resource_name :two_classes_one_dsl" do
878
+ let(:resource_class_z) do
879
+ result = Class.new(BaseThingy) do
880
+ def self.name
881
+ "Z"
882
+ end
883
+
884
+ def self.to_s; name; end
885
+
886
+ def self.inspect; name.inspect; end
887
+ end
888
+ result.resource_name two_classes_one_dsl
889
+ result
890
+ end
891
+ before { resource_class_z } # pull on it so it gets defined before the recipe runs
892
+
893
+ it "two_classes_one_dsl resolves to B (alphabetically earliest)" do
894
+ temp_two_classes_one_dsl = two_classes_one_dsl
895
+ recipe = converge do
896
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
897
+ end
898
+ expect(recipe.logged_warnings).to eq ""
899
+ expect(BaseThingy.created_resource).to eq resource_class
900
+ end
901
+
902
+ it "resource_matching_short_name returns B" do
903
+ expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
904
+ end
905
+
906
+ context "and a priority array [ Z, B ]" do
907
+ before do
908
+ Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z, resource_class ])
909
+ end
910
+
911
+ it "two_classes_one_dsl resolves to Z (respects the priority array)" do
912
+ temp_two_classes_one_dsl = two_classes_one_dsl
913
+ recipe = converge do
914
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
915
+ end
916
+ expect(recipe.logged_warnings).to eq ""
917
+ expect(BaseThingy.created_resource).to eq resource_class_z
918
+ end
919
+
920
+ it "resource_matching_short_name returns B" do
921
+ expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
922
+ end
923
+
924
+ context "when Z provides(:two_classes_one_dsl) { false }" do
925
+ before do
926
+ resource_class_z.provides(two_classes_one_dsl) { false }
927
+ end
928
+
929
+ it "two_classes_one_dsl resolves to B (picks the next thing in the priority array)" do
930
+ temp_two_classes_one_dsl = two_classes_one_dsl
931
+ recipe = converge do
932
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
933
+ end
934
+ expect(recipe.logged_warnings).to eq ""
935
+ expect(BaseThingy.created_resource).to eq resource_class
936
+ end
937
+
938
+ it "resource_matching_short_name returns B" do
939
+ expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
940
+ end
941
+ end
942
+ end
943
+
944
+ context "and priority arrays [ B ] and [ Z ]" do
945
+ before do
946
+ Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class ])
947
+ Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z ])
948
+ end
949
+
950
+ it "two_classes_one_dsl resolves to Z (respects the most recent priority array)" do
951
+ temp_two_classes_one_dsl = two_classes_one_dsl
952
+ recipe = converge do
953
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
954
+ end
955
+ expect(recipe.logged_warnings).to eq ""
956
+ expect(BaseThingy.created_resource).to eq resource_class_z
957
+ end
958
+
959
+ it "resource_matching_short_name returns B" do
960
+ expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
961
+ end
962
+
963
+ context "when Z provides(:two_classes_one_dsl) { false }" do
964
+ before do
965
+ resource_class_z.provides(two_classes_one_dsl) { false }
966
+ end
967
+
968
+ it "two_classes_one_dsl resolves to B (picks the first match from the other priority array)" do
969
+ temp_two_classes_one_dsl = two_classes_one_dsl
970
+ recipe = converge do
971
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
972
+ end
973
+ expect(recipe.logged_warnings).to eq ""
974
+ expect(BaseThingy.created_resource).to eq resource_class
975
+ end
976
+
977
+ it "resource_matching_short_name returns B" do
978
+ expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
979
+ end
980
+ end
981
+ end
982
+
983
+ context "and a priority array [ Z ]" do
984
+ before do
985
+ Chef.set_resource_priority_array(two_classes_one_dsl, [ resource_class_z ])
986
+ end
987
+
988
+ context "when Z provides(:two_classes_one_dsl) { false }" do
989
+ before do
990
+ resource_class_z.provides(two_classes_one_dsl) { false }
991
+ end
992
+
993
+ it "two_classes_one_dsl resolves to B (picks the first match outside the priority array)" do
994
+ temp_two_classes_one_dsl = two_classes_one_dsl
995
+ recipe = converge do
996
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
997
+ end
998
+ expect(recipe.logged_warnings).to eq ""
999
+ expect(BaseThingy.created_resource).to eq resource_class
1000
+ end
1001
+
1002
+ it "resource_matching_short_name returns B" do
1003
+ expect(Chef::Resource.resource_matching_short_name(two_classes_one_dsl)).to eq resource_class
1004
+ end
1005
+ end
1006
+ end
1007
+
1008
+ end
1009
+
1010
+ context "and a provider named 'B' which provides :two_classes_one_dsl" do
1011
+ before do
1012
+ resource_class.send(:define_method, :provider) { nil }
1013
+ end
1014
+
1015
+ let(:provider_class) do
1016
+ result = Class.new(BaseThingy::Provider) do
1017
+ def self.name
1018
+ "B"
1019
+ end
1020
+
1021
+ def self.to_s; name; end
1022
+
1023
+ def self.inspect; name.inspect; end
1024
+ end
1025
+ result.provides two_classes_one_dsl
1026
+ result
1027
+ end
1028
+ before { provider_class } # pull on it so it gets defined before the recipe runs
1029
+
1030
+ context "and another provider named 'A'" do
1031
+ let(:provider_class_a) do
1032
+ result = Class.new(BaseThingy::Provider) do
1033
+ def self.name
1034
+ "A"
1035
+ end
1036
+
1037
+ def self.to_s; name; end
1038
+
1039
+ def self.inspect; name.inspect; end
1040
+ end
1041
+ result
1042
+ end
1043
+ context "which provides :two_classes_one_dsl" do
1044
+ before { provider_class_a.provides two_classes_one_dsl }
1045
+
1046
+ it "two_classes_one_dsl resolves to A (alphabetically earliest)" do
1047
+ temp_two_classes_one_dsl = two_classes_one_dsl
1048
+ recipe = converge do
1049
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1050
+ end
1051
+ expect(recipe.logged_warnings).to eq ""
1052
+ expect(BaseThingy.created_provider).to eq provider_class_a
1053
+ end
1054
+ end
1055
+ context "which provides(:two_classes_one_dsl) { false }" do
1056
+ before { provider_class_a.provides(two_classes_one_dsl) { false } }
1057
+
1058
+ it "two_classes_one_dsl resolves to B (since A declined)" do
1059
+ temp_two_classes_one_dsl = two_classes_one_dsl
1060
+ recipe = converge do
1061
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1062
+ end
1063
+ expect(recipe.logged_warnings).to eq ""
1064
+ expect(BaseThingy.created_provider).to eq provider_class
1065
+ end
1066
+ end
1067
+ end
1068
+
1069
+ context "and another provider named 'Z'" do
1070
+ let(:provider_class_z) do
1071
+ result = Class.new(BaseThingy::Provider) do
1072
+ def self.name
1073
+ "Z"
1074
+ end
1075
+
1076
+ def self.to_s; name; end
1077
+
1078
+ def self.inspect; name.inspect; end
1079
+ end
1080
+ result
1081
+ end
1082
+ before { provider_class_z } # pull on it so it gets defined before the recipe runs
1083
+
1084
+ context "which provides :two_classes_one_dsl" do
1085
+ before { provider_class_z.provides two_classes_one_dsl }
1086
+
1087
+ it "two_classes_one_dsl resolves to B (alphabetically earliest)" do
1088
+ temp_two_classes_one_dsl = two_classes_one_dsl
1089
+ recipe = converge do
1090
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1091
+ end
1092
+ expect(recipe.logged_warnings).to eq ""
1093
+ expect(BaseThingy.created_provider).to eq provider_class
1094
+ end
1095
+
1096
+ context "with a priority array [ Z, B ]" do
1097
+ before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z, provider_class ] }
1098
+
1099
+ it "two_classes_one_dsl resolves to Z (respects the priority map)" do
1100
+ temp_two_classes_one_dsl = two_classes_one_dsl
1101
+ recipe = converge do
1102
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1103
+ end
1104
+ expect(recipe.logged_warnings).to eq ""
1105
+ expect(BaseThingy.created_provider).to eq provider_class_z
1106
+ end
1107
+ end
1108
+ end
1109
+
1110
+ context "which provides(:two_classes_one_dsl) { false }" do
1111
+ before { provider_class_z.provides(two_classes_one_dsl) { false } }
1112
+
1113
+ context "with a priority array [ Z, B ]" do
1114
+ before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z, provider_class ] }
1115
+
1116
+ it "two_classes_one_dsl resolves to B (the next one in the priority map)" do
1117
+ temp_two_classes_one_dsl = two_classes_one_dsl
1118
+ recipe = converge do
1119
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1120
+ end
1121
+ expect(recipe.logged_warnings).to eq ""
1122
+ expect(BaseThingy.created_provider).to eq provider_class
1123
+ end
1124
+ end
1125
+
1126
+ context "with priority arrays [ B ] and [ Z ]" do
1127
+ before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class_z ] }
1128
+ before { Chef.set_provider_priority_array two_classes_one_dsl, [ provider_class ] }
1129
+
1130
+ it "two_classes_one_dsl resolves to B (the one in the next priority map)" do
1131
+ temp_two_classes_one_dsl = two_classes_one_dsl
1132
+ recipe = converge do
1133
+ instance_eval("#{temp_two_classes_one_dsl} 'blah'")
1134
+ end
1135
+ expect(recipe.logged_warnings).to eq ""
1136
+ expect(BaseThingy.created_provider).to eq provider_class
1137
+ end
1138
+ end
1139
+ end
1140
+ end
1141
+ end
1142
+
1143
+ context "and another resource Blarghle with provides :two_classes_one_dsl, os: 'blarghle'" do
1144
+ let(:resource_class_blarghle) do
1145
+ result = Class.new(BaseThingy) do
1146
+ def self.name
1147
+ "Blarghle"
1148
+ end
1149
+
1150
+ def self.to_s; name; end
1151
+
1152
+ def self.inspect; name.inspect; end
1153
+ end
1154
+ result.resource_name two_classes_one_dsl
1155
+ result.provides two_classes_one_dsl, os: "blarghle"
1156
+ result
1157
+ end
1158
+ before { resource_class_blarghle } # pull on it so it gets defined before the recipe runs
1159
+
1160
+ it "on os = blarghle, two_classes_one_dsl resolves to Blarghle" do
1161
+ temp_two_classes_one_dsl = two_classes_one_dsl
1162
+ recipe = converge do
1163
+ # this is an ugly way to test, make Cheffish expose node attrs
1164
+ run_context.node.automatic[:os] = "blarghle"
1165
+ instance_eval("#{temp_two_classes_one_dsl} 'blah' do; end")
1166
+ end
1167
+ expect(recipe.logged_warnings).to eq ""
1168
+ expect(BaseThingy.created_resource).to eq resource_class_blarghle
1169
+ end
1170
+
1171
+ it "on os = linux, two_classes_one_dsl resolves to B" do
1172
+ temp_two_classes_one_dsl = two_classes_one_dsl
1173
+ recipe = converge do
1174
+ # this is an ugly way to test, make Cheffish expose node attrs
1175
+ run_context.node.automatic[:os] = "linux"
1176
+ instance_eval("#{temp_two_classes_one_dsl} 'blah' do; end")
1177
+ end
1178
+ expect(recipe.logged_warnings).to eq ""
1179
+ expect(BaseThingy.created_resource).to eq resource_class
1180
+ end
1181
+ end
1182
+ end
1183
+
1184
+ context "with a resource MyResource" do
1185
+ let(:resource_class) do
1186
+ Class.new(BaseThingy) do
1187
+ def self.called_provides
1188
+ @called_provides
1189
+ end
1190
+
1191
+ def to_s
1192
+ "MyResource"
1193
+ end
1194
+ end end
1195
+ let(:my_resource) { :"my_resource#{Namer.current_index}" }
1196
+ let(:blarghle_blarghle_little_star) { :"blarghle_blarghle_little_star#{Namer.current_index}" }
1197
+
1198
+ context "with resource_name :my_resource" do
1199
+ before do
1200
+ resource_class.resource_name my_resource
1201
+ end
1202
+
1203
+ context "with provides? returning true to my_resource" do
1204
+ before do
1205
+ temp_my_resource = my_resource
1206
+ resource_class.define_singleton_method(:provides?) do |node, resource_name|
1207
+ @called_provides = true
1208
+ resource_name == temp_my_resource
1209
+ end
1210
+ end
1211
+
1212
+ it "my_resource returns the resource and calls provides?, but does not emit a warning" do
1213
+ dsl_name = my_resource
1214
+ recipe = converge do
1215
+ instance_eval("#{dsl_name} 'foo'")
1216
+ end
1217
+ expect(recipe.logged_warnings).to eq ""
1218
+ expect(BaseThingy.created_resource).to eq resource_class
1219
+ expect(resource_class.called_provides).to be_truthy
1220
+ end
1221
+ end
1222
+
1223
+ context "with provides? returning true to blarghle_blarghle_little_star and not resource_name" do
1224
+ before do
1225
+ temp_blarghle_blarghle_little_star = blarghle_blarghle_little_star
1226
+ resource_class.define_singleton_method(:provides?) do |node, resource_name|
1227
+ @called_provides = true
1228
+ resource_name == temp_blarghle_blarghle_little_star
1229
+ end
1230
+ end
1231
+
1232
+ it "my_resource does not return the resource" do
1233
+ dsl_name = my_resource
1234
+ expect_converge do
1235
+ instance_eval("#{dsl_name} 'foo'")
1236
+ end.to raise_error(Chef::Exceptions::NoSuchResourceType)
1237
+ expect(resource_class.called_provides).to be_truthy
1238
+ end
1239
+
1240
+ it "blarghle_blarghle_little_star 'foo' returns the resource and emits a warning" do
1241
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
1242
+ dsl_name = blarghle_blarghle_little_star
1243
+ recipe = converge do
1244
+ instance_eval("#{dsl_name} 'foo'")
1245
+ end
1246
+ expect(recipe.logged_warnings).to include "WARN: #{resource_class}.provides? returned true when asked if it provides DSL #{dsl_name}, but provides :#{dsl_name} was never called!"
1247
+ expect(BaseThingy.created_resource).to eq resource_class
1248
+ expect(resource_class.called_provides).to be_truthy
1249
+ end
1250
+ end
1251
+
1252
+ context "and a provider" do
1253
+ let(:provider_class) do
1254
+ Class.new(BaseThingy::Provider) do
1255
+ def self.name
1256
+ "MyProvider"
1257
+ end
1258
+
1259
+ def self.to_s; name; end
1260
+
1261
+ def self.inspect; name.inspect; end
1262
+
1263
+ def self.called_provides
1264
+ @called_provides
1265
+ end
1266
+ end
1267
+ end
1268
+
1269
+ before do
1270
+ resource_class.send(:define_method, :provider) { nil }
1271
+ end
1272
+
1273
+ context "that provides :my_resource" do
1274
+ before do
1275
+ provider_class.provides my_resource
1276
+ end
1277
+
1278
+ context "with supports? returning true" do
1279
+ before do
1280
+ provider_class.define_singleton_method(:supports?) { |resource, action| true }
1281
+ end
1282
+
1283
+ it "my_resource runs the provider and does not emit a warning" do
1284
+ temp_my_resource = my_resource
1285
+ recipe = converge do
1286
+ instance_eval("#{temp_my_resource} 'foo'")
1287
+ end
1288
+ expect(recipe.logged_warnings).to eq ""
1289
+ expect(BaseThingy.created_provider).to eq provider_class
1290
+ end
1291
+
1292
+ context "and another provider supporting :my_resource with supports? false" do
1293
+ let(:provider_class2) do
1294
+ Class.new(BaseThingy::Provider) do
1295
+ def self.name
1296
+ "MyProvider2"
1297
+ end
1298
+
1299
+ def self.to_s; name; end
1300
+
1301
+ def self.inspect; name.inspect; end
1302
+
1303
+ def self.called_provides
1304
+ @called_provides
1305
+ end
1306
+ provides my_resource
1307
+ def self.supports?(resource, action)
1308
+ false
1309
+ end
1310
+ end
1311
+ end
1312
+
1313
+ it "my_resource runs the first provider" do
1314
+ temp_my_resource = my_resource
1315
+ recipe = converge do
1316
+ instance_eval("#{temp_my_resource} 'foo'")
1317
+ end
1318
+ expect(recipe.logged_warnings).to eq ""
1319
+ expect(BaseThingy.created_provider).to eq provider_class
1320
+ end
1321
+ end
1322
+ end
1323
+
1324
+ context "with supports? returning false" do
1325
+ before do
1326
+ provider_class.define_singleton_method(:supports?) { |resource, action| false }
1327
+ end
1328
+
1329
+ # TODO no warning? ick
1330
+ it "my_resource runs the provider anyway" do
1331
+ temp_my_resource = my_resource
1332
+ recipe = converge do
1333
+ instance_eval("#{temp_my_resource} 'foo'")
1334
+ end
1335
+ expect(recipe.logged_warnings).to eq ""
1336
+ expect(BaseThingy.created_provider).to eq provider_class
1337
+ end
1338
+
1339
+ context "and another provider supporting :my_resource with supports? true" do
1340
+ let(:provider_class2) do
1341
+ temp_my_resource = my_resource
1342
+ Class.new(BaseThingy::Provider) do
1343
+ def self.name
1344
+ "MyProvider2"
1345
+ end
1346
+
1347
+ def self.to_s; name; end
1348
+
1349
+ def self.inspect; name.inspect; end
1350
+
1351
+ def self.called_provides
1352
+ @called_provides
1353
+ end
1354
+ provides temp_my_resource
1355
+ def self.supports?(resource, action)
1356
+ true
1357
+ end
1358
+ end
1359
+ end
1360
+ before { provider_class2 } # make sure the provider class shows up
1361
+
1362
+ it "my_resource runs the other provider" do
1363
+ temp_my_resource = my_resource
1364
+ recipe = converge do
1365
+ instance_eval("#{temp_my_resource} 'foo'")
1366
+ end
1367
+ expect(recipe.logged_warnings).to eq ""
1368
+ expect(BaseThingy.created_provider).to eq provider_class2
1369
+ end
1370
+ end
1371
+ end
1372
+ end
1373
+
1374
+ context "with provides? returning true" do
1375
+ before do
1376
+ temp_my_resource = my_resource
1377
+ provider_class.define_singleton_method(:provides?) do |node, resource|
1378
+ @called_provides = true
1379
+ resource.declared_type == temp_my_resource
1380
+ end
1381
+ end
1382
+
1383
+ context "that provides :my_resource" do
1384
+ before do
1385
+ provider_class.provides my_resource
1386
+ end
1387
+
1388
+ it "my_resource calls the provider (and calls provides?), but does not emit a warning" do
1389
+ temp_my_resource = my_resource
1390
+ recipe = converge do
1391
+ instance_eval("#{temp_my_resource} 'foo'")
1392
+ end
1393
+ expect(recipe.logged_warnings).to eq ""
1394
+ expect(BaseThingy.created_provider).to eq provider_class
1395
+ expect(provider_class.called_provides).to be_truthy
1396
+ end
1397
+ end
1398
+
1399
+ context "that does not call provides :my_resource" do
1400
+ it "my_resource calls the provider (and calls provides?), and emits a warning" do
1401
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
1402
+ temp_my_resource = my_resource
1403
+ recipe = converge do
1404
+ instance_eval("#{temp_my_resource} 'foo'")
1405
+ end
1406
+ expect(recipe.logged_warnings).to include("WARN: #{provider_class}.provides? returned true when asked if it provides DSL #{my_resource}, but provides :#{my_resource} was never called!")
1407
+ expect(BaseThingy.created_provider).to eq provider_class
1408
+ expect(provider_class.called_provides).to be_truthy
1409
+ end
1410
+ end
1411
+ end
1412
+
1413
+ context "with provides? returning false to my_resource" do
1414
+ before do
1415
+ temp_my_resource = my_resource
1416
+ provider_class.define_singleton_method(:provides?) do |node, resource|
1417
+ @called_provides = true
1418
+ false
1419
+ end
1420
+ end
1421
+
1422
+ context "that provides :my_resource" do
1423
+ before do
1424
+ provider_class.provides my_resource
1425
+ end
1426
+
1427
+ it "my_resource fails to find a provider (and calls provides)" do
1428
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
1429
+ temp_my_resource = my_resource
1430
+ expect_converge do
1431
+ instance_eval("#{temp_my_resource} 'foo'")
1432
+ end.to raise_error(Chef::Exceptions::ProviderNotFound)
1433
+ expect(provider_class.called_provides).to be_truthy
1434
+ end
1435
+ end
1436
+
1437
+ context "that does not provide :my_resource" do
1438
+ it "my_resource fails to find a provider (and calls provides)" do
1439
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
1440
+ temp_my_resource = my_resource
1441
+ expect_converge do
1442
+ instance_eval("#{temp_my_resource} 'foo'")
1443
+ end.to raise_error(Chef::Exceptions::ProviderNotFound)
1444
+ expect(provider_class.called_provides).to be_truthy
1445
+ end
1446
+ end
1447
+ end
1448
+ end
1449
+ end
1450
+ end
1451
+ end
1452
+
1453
+ before(:all) { Namer.current_index = 0 }
1454
+ before { Namer.current_index += 1 }
1455
+
1456
+ context "with an LWRP that declares actions" do
1457
+ let(:resource_class) do
1458
+ Class.new(Chef::Resource::LWRPBase) do
1459
+ provides :"recipe_dsl_spec#{Namer.current_index}"
1460
+ actions :create
1461
+ end
1462
+ end
1463
+ let(:resource) do
1464
+ resource_class.new("blah", run_context)
1465
+ end
1466
+ it "The actions are part of actions along with :nothing" do
1467
+ expect(resource_class.actions).to eq [ :nothing, :create ]
1468
+ end
1469
+ it "The actions are part of allowed_actions along with :nothing" do
1470
+ expect(resource.allowed_actions).to eq [ :nothing, :create ]
1471
+ end
1472
+
1473
+ context "and a subclass that declares more actions" do
1474
+ let(:subresource_class) do
1475
+ Class.new(Chef::Resource::LWRPBase) do
1476
+ provides :"recipe_dsl_spec_sub#{Namer.current_index}"
1477
+ actions :delete
1478
+ end
1479
+ end
1480
+ let(:subresource) do
1481
+ subresource_class.new("subblah", run_context)
1482
+ end
1483
+
1484
+ it "The parent class actions are not part of actions" do
1485
+ expect(subresource_class.actions).to eq [ :nothing, :delete ]
1486
+ end
1487
+ it "The parent class actions are not part of allowed_actions" do
1488
+ expect(subresource.allowed_actions).to eq [ :nothing, :delete ]
1489
+ end
1490
+ it "The parent class actions do not change" do
1491
+ expect(resource_class.actions).to eq [ :nothing, :create ]
1492
+ expect(resource.allowed_actions).to eq [ :nothing, :create ]
1493
+ end
1494
+ end
1495
+ end
1496
+
1497
+ context "with a dynamically defined resource and regular provider" do
1498
+ before(:context) do
1499
+ Class.new(Chef::Resource) do
1500
+ resource_name :lw_resource_with_hw_provider_test_case
1501
+ default_action :create
1502
+ attr_accessor :created_provider
1503
+ end
1504
+ class Chef::Provider::LwResourceWithHwProviderTestCase < Chef::Provider
1505
+ def load_current_resource
1506
+ end
1507
+
1508
+ def action_create
1509
+ new_resource.created_provider = self.class
1510
+ end
1511
+ end
1512
+ end
1513
+
1514
+ it "looks up the provider in Chef::Provider converting the resource name from snake case to camel case" do
1515
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
1516
+ resource = nil
1517
+ recipe = converge do
1518
+ resource = lw_resource_with_hw_provider_test_case("blah") {}
1519
+ end
1520
+ expect(resource.created_provider).to eq(Chef::Provider::LwResourceWithHwProviderTestCase)
1521
+ end
1522
+ end
1523
+ end