chef 12.7.2-universal-mingw32 → 12.8.1-universal-mingw32

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