chef 12.4.0.rc.0-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 (1709) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.md +212 -0
  3. data/LICENSE +201 -0
  4. data/README.md +134 -0
  5. data/Rakefile +160 -0
  6. data/bin/chef-apply +25 -0
  7. data/bin/chef-client +26 -0
  8. data/bin/chef-service-manager +37 -0
  9. data/bin/chef-shell +37 -0
  10. data/bin/chef-solo +25 -0
  11. data/bin/chef-windows-service +35 -0
  12. data/bin/knife +26 -0
  13. data/distro/common/html/_sources/ctl_chef_client.txt +36 -0
  14. data/distro/common/html/_sources/ctl_chef_server.txt +341 -0
  15. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -0
  16. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -0
  17. data/distro/common/html/_sources/index.txt +135 -0
  18. data/distro/common/html/_sources/knife.txt +74 -0
  19. data/distro/common/html/_sources/knife_bootstrap.txt +56 -0
  20. data/distro/common/html/_sources/knife_client.txt +151 -0
  21. data/distro/common/html/_sources/knife_common_options.txt +6 -0
  22. data/distro/common/html/_sources/knife_configure.txt +29 -0
  23. data/distro/common/html/_sources/knife_cookbook.txt +236 -0
  24. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -0
  25. data/distro/common/html/_sources/knife_data_bag.txt +160 -0
  26. data/distro/common/html/_sources/knife_delete.txt +26 -0
  27. data/distro/common/html/_sources/knife_deps.txt +61 -0
  28. data/distro/common/html/_sources/knife_diff.txt +34 -0
  29. data/distro/common/html/_sources/knife_download.txt +44 -0
  30. data/distro/common/html/_sources/knife_edit.txt +26 -0
  31. data/distro/common/html/_sources/knife_environment.txt +158 -0
  32. data/distro/common/html/_sources/knife_exec.txt +47 -0
  33. data/distro/common/html/_sources/knife_index_rebuild.txt +21 -0
  34. data/distro/common/html/_sources/knife_list.txt +33 -0
  35. data/distro/common/html/_sources/knife_node.txt +250 -0
  36. data/distro/common/html/_sources/knife_raw.txt +35 -0
  37. data/distro/common/html/_sources/knife_recipe_list.txt +23 -0
  38. data/distro/common/html/_sources/knife_role.txt +157 -0
  39. data/distro/common/html/_sources/knife_search.txt +53 -0
  40. data/distro/common/html/_sources/knife_serve.txt +19 -0
  41. data/distro/common/html/_sources/knife_show.txt +27 -0
  42. data/distro/common/html/_sources/knife_ssh.txt +43 -0
  43. data/distro/common/html/_sources/knife_ssl_check.txt +41 -0
  44. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -0
  45. data/distro/common/html/_sources/knife_status.txt +37 -0
  46. data/distro/common/html/_sources/knife_tag.txt +69 -0
  47. data/distro/common/html/_sources/knife_upload.txt +49 -0
  48. data/distro/common/html/_sources/knife_user.txt +127 -0
  49. data/distro/common/html/_sources/knife_using.txt +43 -0
  50. data/distro/common/html/_sources/knife_xargs.txt +30 -0
  51. data/distro/common/html/_static/ajax-loader.gif +0 -0
  52. data/distro/common/html/_static/basic.css +537 -0
  53. data/distro/common/html/_static/chef.ico +0 -0
  54. data/distro/common/html/_static/chef_html_logo.png +0 -0
  55. data/distro/common/html/_static/comment-bright.png +0 -0
  56. data/distro/common/html/_static/comment-close.png +0 -0
  57. data/distro/common/html/_static/comment.png +0 -0
  58. data/distro/common/html/_static/contents.png +0 -0
  59. data/distro/common/html/_static/doctools.js +238 -0
  60. data/distro/common/html/_static/down-pressed.png +0 -0
  61. data/distro/common/html/_static/down.png +0 -0
  62. data/distro/common/html/_static/file.png +0 -0
  63. data/distro/common/html/_static/guide.css +505 -0
  64. data/distro/common/html/_static/jquery.js +2 -0
  65. data/distro/common/html/_static/minus.png +0 -0
  66. data/distro/common/html/_static/navigation.png +0 -0
  67. data/distro/common/html/_static/plus.png +0 -0
  68. data/distro/common/html/_static/pygments.css +62 -0
  69. data/distro/common/html/_static/searchtools.js +622 -0
  70. data/distro/common/html/_static/underscore.js +31 -0
  71. data/distro/common/html/_static/up-pressed.png +0 -0
  72. data/distro/common/html/_static/up.png +0 -0
  73. data/distro/common/html/_static/websupport.js +808 -0
  74. data/distro/common/html/ctl_chef_client.html +270 -0
  75. data/distro/common/html/ctl_chef_server.html +728 -0
  76. data/distro/common/html/ctl_chef_shell.html +163 -0
  77. data/distro/common/html/ctl_chef_solo.html +194 -0
  78. data/distro/common/html/index.html +202 -0
  79. data/distro/common/html/knife.html +170 -0
  80. data/distro/common/html/knife_bootstrap.html +285 -0
  81. data/distro/common/html/knife_client.html +285 -0
  82. data/distro/common/html/knife_common_options.html +96 -0
  83. data/distro/common/html/knife_configure.html +105 -0
  84. data/distro/common/html/knife_cookbook.html +487 -0
  85. data/distro/common/html/knife_cookbook_site.html +375 -0
  86. data/distro/common/html/knife_data_bag.html +374 -0
  87. data/distro/common/html/knife_delete.html +93 -0
  88. data/distro/common/html/knife_deps.html +143 -0
  89. data/distro/common/html/knife_diff.html +123 -0
  90. data/distro/common/html/knife_download.html +145 -0
  91. data/distro/common/html/knife_edit.html +89 -0
  92. data/distro/common/html/knife_environment.html +326 -0
  93. data/distro/common/html/knife_exec.html +220 -0
  94. data/distro/common/html/knife_index_rebuild.html +83 -0
  95. data/distro/common/html/knife_list.html +114 -0
  96. data/distro/common/html/knife_node.html +458 -0
  97. data/distro/common/html/knife_raw.html +110 -0
  98. data/distro/common/html/knife_recipe_list.html +91 -0
  99. data/distro/common/html/knife_role.html +295 -0
  100. data/distro/common/html/knife_search.html +203 -0
  101. data/distro/common/html/knife_serve.html +79 -0
  102. data/distro/common/html/knife_show.html +104 -0
  103. data/distro/common/html/knife_ssh.html +177 -0
  104. data/distro/common/html/knife_ssl_check.html +151 -0
  105. data/distro/common/html/knife_ssl_fetch.html +151 -0
  106. data/distro/common/html/knife_status.html +144 -0
  107. data/distro/common/html/knife_tag.html +138 -0
  108. data/distro/common/html/knife_upload.html +153 -0
  109. data/distro/common/html/knife_user.html +242 -0
  110. data/distro/common/html/knife_using.html +210 -0
  111. data/distro/common/html/knife_xargs.html +122 -0
  112. data/distro/common/html/objects.inv +0 -0
  113. data/distro/common/html/search.html +82 -0
  114. data/distro/common/html/searchindex.js +1 -0
  115. data/distro/common/man/man1/README.md +58 -0
  116. data/distro/common/man/man1/chef-shell.1 +194 -0
  117. data/distro/common/man/man1/knife-bootstrap.1 +215 -0
  118. data/distro/common/man/man1/knife-client.1 +443 -0
  119. data/distro/common/man/man1/knife-configure.1 +161 -0
  120. data/distro/common/man/man1/knife-cookbook-site.1 +552 -0
  121. data/distro/common/man/man1/knife-cookbook.1 +770 -0
  122. data/distro/common/man/man1/knife-data-bag.1 +617 -0
  123. data/distro/common/man/man1/knife-delete.1 +127 -0
  124. data/distro/common/man/man1/knife-deps.1 +246 -0
  125. data/distro/common/man/man1/knife-diff.1 +226 -0
  126. data/distro/common/man/man1/knife-download.1 +258 -0
  127. data/distro/common/man/man1/knife-edit.1 +121 -0
  128. data/distro/common/man/man1/knife-environment.1 +508 -0
  129. data/distro/common/man/man1/knife-exec.1 +362 -0
  130. data/distro/common/man/man1/knife-index-rebuild.1 +63 -0
  131. data/distro/common/man/man1/knife-list.1 +174 -0
  132. data/distro/common/man/man1/knife-node.1 +716 -0
  133. data/distro/common/man/man1/knife-raw.1 +172 -0
  134. data/distro/common/man/man1/knife-recipe-list.1 +85 -0
  135. data/distro/common/man/man1/knife-role.1 +426 -0
  136. data/distro/common/man/man1/knife-search.1 +359 -0
  137. data/distro/common/man/man1/knife-serve.1 +109 -0
  138. data/distro/common/man/man1/knife-show.1 +160 -0
  139. data/distro/common/man/man1/knife-ssh.1 +284 -0
  140. data/distro/common/man/man1/knife-ssl-check.1 +207 -0
  141. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -0
  142. data/distro/common/man/man1/knife-status.1 +234 -0
  143. data/distro/common/man/man1/knife-tag.1 +189 -0
  144. data/distro/common/man/man1/knife-upload.1 +280 -0
  145. data/distro/common/man/man1/knife-user.1 +356 -0
  146. data/distro/common/man/man1/knife-xargs.1 +189 -0
  147. data/distro/common/man/man1/knife.1 +332 -0
  148. data/distro/common/man/man8/chef-apply.8 +86 -0
  149. data/distro/common/man/man8/chef-client.8 +398 -0
  150. data/distro/common/man/man8/chef-solo.8 +260 -0
  151. data/distro/common/markdown/README +3 -0
  152. data/distro/common/markdown/man1/chef-shell.mkd +195 -0
  153. data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -0
  154. data/distro/common/markdown/man1/knife-client.mkd +103 -0
  155. data/distro/common/markdown/man1/knife-configure.mkd +70 -0
  156. data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -0
  157. data/distro/common/markdown/man1/knife-cookbook.mkd +263 -0
  158. data/distro/common/markdown/man1/knife-data-bag.mkd +121 -0
  159. data/distro/common/markdown/man1/knife-environment.mkd +151 -0
  160. data/distro/common/markdown/man1/knife-exec.mkd +42 -0
  161. data/distro/common/markdown/man1/knife-index.mkd +30 -0
  162. data/distro/common/markdown/man1/knife-node.mkd +130 -0
  163. data/distro/common/markdown/man1/knife-role.mkd +85 -0
  164. data/distro/common/markdown/man1/knife-search.mkd +180 -0
  165. data/distro/common/markdown/man1/knife-ssh.mkd +69 -0
  166. data/distro/common/markdown/man1/knife-status.mkd +36 -0
  167. data/distro/common/markdown/man1/knife-tag.mkd +39 -0
  168. data/distro/common/markdown/man1/knife.mkd +213 -0
  169. data/distro/common/markdown/man8/chef-client.mkd +73 -0
  170. data/distro/common/markdown/man8/chef-expander.mkd +81 -0
  171. data/distro/common/markdown/man8/chef-expanderctl.mkd +57 -0
  172. data/distro/common/markdown/man8/chef-server-webui.mkd +121 -0
  173. data/distro/common/markdown/man8/chef-server.mkd +120 -0
  174. data/distro/common/markdown/man8/chef-solo.mkd +107 -0
  175. data/distro/common/markdown/man8/chef-solr.mkd +89 -0
  176. data/ext/win32-eventlog/Rakefile +54 -0
  177. data/ext/win32-eventlog/chef-log.man +56 -0
  178. data/lib/chef.rb +35 -0
  179. data/lib/chef/api_client.rb +226 -0
  180. data/lib/chef/api_client/registration.rb +163 -0
  181. data/lib/chef/application.rb +415 -0
  182. data/lib/chef/application/apply.rb +196 -0
  183. data/lib/chef/application/client.rb +481 -0
  184. data/lib/chef/application/knife.rb +202 -0
  185. data/lib/chef/application/solo.rb +313 -0
  186. data/lib/chef/application/windows_service.rb +323 -0
  187. data/lib/chef/application/windows_service_manager.rb +196 -0
  188. data/lib/chef/applications.rb +4 -0
  189. data/lib/chef/audit/audit_event_proxy.rb +93 -0
  190. data/lib/chef/audit/audit_reporter.rb +169 -0
  191. data/lib/chef/audit/control_group_data.rb +140 -0
  192. data/lib/chef/audit/rspec_formatter.rb +37 -0
  193. data/lib/chef/audit/runner.rb +192 -0
  194. data/lib/chef/chef_class.rb +130 -0
  195. data/lib/chef/chef_fs.rb +9 -0
  196. data/lib/chef/chef_fs/chef_fs_data_store.rb +482 -0
  197. data/lib/chef/chef_fs/command_line.rb +285 -0
  198. data/lib/chef/chef_fs/config.rb +255 -0
  199. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  200. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +37 -0
  201. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  202. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  203. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  204. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +202 -0
  205. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  206. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -0
  207. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  208. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +30 -0
  209. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -0
  210. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -0
  211. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +15 -0
  212. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  213. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -0
  214. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  215. data/lib/chef/chef_fs/file_system.rb +429 -0
  216. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  217. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  218. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  219. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  220. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +52 -0
  221. data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
  222. data/lib/chef/chef_fs/file_system/chef_repository_file_system_acls_dir.rb +37 -0
  223. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +109 -0
  224. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +87 -0
  225. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +89 -0
  226. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  227. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +92 -0
  228. data/lib/chef/chef_fs/file_system/chef_repository_file_system_policies_dir.rb +38 -0
  229. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +192 -0
  230. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +159 -0
  231. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +224 -0
  232. data/lib/chef/chef_fs/file_system/cookbook_file.rb +82 -0
  233. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  234. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  235. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  236. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +164 -0
  237. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
  238. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +73 -0
  239. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  240. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  241. data/lib/chef/chef_fs/file_system/file_system_entry.rb +108 -0
  242. data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
  243. data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
  244. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  245. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  246. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  247. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +49 -0
  248. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  249. data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
  250. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
  251. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  252. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +42 -0
  253. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  254. data/lib/chef/chef_fs/file_system/org_entry.rb +34 -0
  255. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +59 -0
  256. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +58 -0
  257. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +115 -0
  258. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +185 -0
  259. data/lib/chef/chef_fs/knife.rb +133 -0
  260. data/lib/chef/chef_fs/parallelizer.rb +105 -0
  261. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -0
  262. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +281 -0
  263. data/lib/chef/chef_fs/path_utils.rb +95 -0
  264. data/lib/chef/client.rb +546 -0
  265. data/lib/chef/config.rb +54 -0
  266. data/lib/chef/config_fetcher.rb +64 -0
  267. data/lib/chef/cookbook/chefignore.rb +75 -0
  268. data/lib/chef/cookbook/cookbook_collection.rb +45 -0
  269. data/lib/chef/cookbook/cookbook_version_loader.rb +301 -0
  270. data/lib/chef/cookbook/file_system_file_vendor.rb +59 -0
  271. data/lib/chef/cookbook/file_vendor.rb +72 -0
  272. data/lib/chef/cookbook/metadata.rb +757 -0
  273. data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
  274. data/lib/chef/cookbook/synchronizer.rb +293 -0
  275. data/lib/chef/cookbook/syntax_check.rb +260 -0
  276. data/lib/chef/cookbook_loader.rb +182 -0
  277. data/lib/chef/cookbook_manifest.rb +289 -0
  278. data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
  279. data/lib/chef/cookbook_uploader.rb +156 -0
  280. data/lib/chef/cookbook_version.rb +623 -0
  281. data/lib/chef/daemon.rb +131 -0
  282. data/lib/chef/data_bag.rb +169 -0
  283. data/lib/chef/data_bag_item.rb +215 -0
  284. data/lib/chef/deprecation/mixin/template.rb +49 -0
  285. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  286. data/lib/chef/deprecation/provider/file.rb +198 -0
  287. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  288. data/lib/chef/deprecation/provider/template.rb +63 -0
  289. data/lib/chef/deprecation/warnings.rb +39 -0
  290. data/lib/chef/digester.rb +70 -0
  291. data/lib/chef/dsl.rb +6 -0
  292. data/lib/chef/dsl/audit.rb +51 -0
  293. data/lib/chef/dsl/data_query.rb +89 -0
  294. data/lib/chef/dsl/definitions.rb +44 -0
  295. data/lib/chef/dsl/include_attribute.rb +63 -0
  296. data/lib/chef/dsl/include_recipe.rb +44 -0
  297. data/lib/chef/dsl/platform_introspection.rb +260 -0
  298. data/lib/chef/dsl/powershell.rb +29 -0
  299. data/lib/chef/dsl/reboot_pending.rb +64 -0
  300. data/lib/chef/dsl/recipe.rb +196 -0
  301. data/lib/chef/dsl/registry_helper.rb +59 -0
  302. data/lib/chef/dsl/resources.rb +28 -0
  303. data/lib/chef/encrypted_data_bag_item.rb +155 -0
  304. data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -0
  305. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
  306. data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -0
  307. data/lib/chef/encrypted_data_bag_item/decryptor.rb +225 -0
  308. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -0
  309. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -0
  310. data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -0
  311. data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -0
  312. data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -0
  313. data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -0
  314. data/lib/chef/environment.rb +319 -0
  315. data/lib/chef/event_dispatch/base.rb +363 -0
  316. data/lib/chef/event_dispatch/dispatcher.rb +42 -0
  317. data/lib/chef/event_dispatch/events_output_stream.rb +29 -0
  318. data/lib/chef/event_loggers/base.rb +62 -0
  319. data/lib/chef/event_loggers/windows_eventlog.rb +101 -0
  320. data/lib/chef/exceptions.rb +465 -0
  321. data/lib/chef/file_access_control.rb +75 -0
  322. data/lib/chef/file_access_control/unix.rb +290 -0
  323. data/lib/chef/file_access_control/windows.rb +335 -0
  324. data/lib/chef/file_cache.rb +221 -0
  325. data/lib/chef/file_content_management/content_base.rb +56 -0
  326. data/lib/chef/file_content_management/deploy.rb +38 -0
  327. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  328. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  329. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  330. data/lib/chef/file_content_management/tempfile.rb +96 -0
  331. data/lib/chef/formatters/base.rb +228 -0
  332. data/lib/chef/formatters/doc.rb +338 -0
  333. data/lib/chef/formatters/error_descriptor.rb +67 -0
  334. data/lib/chef/formatters/error_inspectors.rb +19 -0
  335. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +146 -0
  336. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +118 -0
  337. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -0
  338. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +80 -0
  339. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +127 -0
  340. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +145 -0
  341. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +127 -0
  342. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +120 -0
  343. data/lib/chef/formatters/error_mapper.rb +85 -0
  344. data/lib/chef/formatters/indentable_output_stream.rb +165 -0
  345. data/lib/chef/formatters/minimal.rb +235 -0
  346. data/lib/chef/guard_interpreter.rb +32 -0
  347. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +42 -0
  348. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +132 -0
  349. data/lib/chef/handler.rb +235 -0
  350. data/lib/chef/handler/error_report.rb +33 -0
  351. data/lib/chef/handler/json_file.rb +63 -0
  352. data/lib/chef/http.rb +414 -0
  353. data/lib/chef/http/auth_credentials.rb +57 -0
  354. data/lib/chef/http/authenticator.rb +96 -0
  355. data/lib/chef/http/basic_client.rb +169 -0
  356. data/lib/chef/http/cookie_jar.rb +31 -0
  357. data/lib/chef/http/cookie_manager.rb +59 -0
  358. data/lib/chef/http/decompressor.rb +144 -0
  359. data/lib/chef/http/http_request.rb +187 -0
  360. data/lib/chef/http/json_input.rb +73 -0
  361. data/lib/chef/http/json_output.rb +78 -0
  362. data/lib/chef/http/json_to_model_output.rb +34 -0
  363. data/lib/chef/http/remote_request_id.rb +46 -0
  364. data/lib/chef/http/simple.rb +22 -0
  365. data/lib/chef/http/socketless_chef_zero_client.rb +207 -0
  366. data/lib/chef/http/ssl_policies.rb +130 -0
  367. data/lib/chef/http/validate_content_length.rb +110 -0
  368. data/lib/chef/json_compat.rb +163 -0
  369. data/lib/chef/key.rb +271 -0
  370. data/lib/chef/knife.rb +571 -0
  371. data/lib/chef/knife/bootstrap.rb +394 -0
  372. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +165 -0
  373. data/lib/chef/knife/bootstrap/client_builder.rb +190 -0
  374. data/lib/chef/knife/bootstrap/templates/README.md +12 -0
  375. data/lib/chef/knife/bootstrap/templates/archlinux-gems.erb +76 -0
  376. data/lib/chef/knife/bootstrap/templates/chef-aix.erb +72 -0
  377. data/lib/chef/knife/bootstrap/templates/chef-full.erb +231 -0
  378. data/lib/chef/knife/client_bulk_delete.rb +104 -0
  379. data/lib/chef/knife/client_create.rb +87 -0
  380. data/lib/chef/knife/client_delete.rb +60 -0
  381. data/lib/chef/knife/client_edit.rb +45 -0
  382. data/lib/chef/knife/client_key_create.rb +67 -0
  383. data/lib/chef/knife/client_key_delete.rb +76 -0
  384. data/lib/chef/knife/client_key_edit.rb +80 -0
  385. data/lib/chef/knife/client_key_list.rb +69 -0
  386. data/lib/chef/knife/client_key_show.rb +76 -0
  387. data/lib/chef/knife/client_list.rb +42 -0
  388. data/lib/chef/knife/client_reregister.rb +59 -0
  389. data/lib/chef/knife/client_show.rb +49 -0
  390. data/lib/chef/knife/configure.rb +171 -0
  391. data/lib/chef/knife/configure_client.rb +50 -0
  392. data/lib/chef/knife/cookbook_bulk_delete.rb +72 -0
  393. data/lib/chef/knife/cookbook_create.rb +448 -0
  394. data/lib/chef/knife/cookbook_delete.rb +151 -0
  395. data/lib/chef/knife/cookbook_download.rb +145 -0
  396. data/lib/chef/knife/cookbook_list.rb +47 -0
  397. data/lib/chef/knife/cookbook_metadata.rb +108 -0
  398. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
  399. data/lib/chef/knife/cookbook_show.rb +102 -0
  400. data/lib/chef/knife/cookbook_site_download.rb +109 -0
  401. data/lib/chef/knife/cookbook_site_install.rb +188 -0
  402. data/lib/chef/knife/cookbook_site_list.rb +62 -0
  403. data/lib/chef/knife/cookbook_site_search.rb +51 -0
  404. data/lib/chef/knife/cookbook_site_share.rb +170 -0
  405. data/lib/chef/knife/cookbook_site_show.rb +60 -0
  406. data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
  407. data/lib/chef/knife/cookbook_site_vendor.rb +46 -0
  408. data/lib/chef/knife/cookbook_test.rb +96 -0
  409. data/lib/chef/knife/cookbook_upload.rb +311 -0
  410. data/lib/chef/knife/core/bootstrap_context.rb +187 -0
  411. data/lib/chef/knife/core/cookbook_scm_repo.rb +160 -0
  412. data/lib/chef/knife/core/generic_presenter.rb +223 -0
  413. data/lib/chef/knife/core/node_editor.rb +109 -0
  414. data/lib/chef/knife/core/node_presenter.rb +137 -0
  415. data/lib/chef/knife/core/object_loader.rb +114 -0
  416. data/lib/chef/knife/core/status_presenter.rb +157 -0
  417. data/lib/chef/knife/core/subcommand_loader.rb +222 -0
  418. data/lib/chef/knife/core/text_formatter.rb +86 -0
  419. data/lib/chef/knife/core/ui.rb +276 -0
  420. data/lib/chef/knife/data_bag_create.rb +77 -0
  421. data/lib/chef/knife/data_bag_delete.rb +51 -0
  422. data/lib/chef/knife/data_bag_edit.rb +77 -0
  423. data/lib/chef/knife/data_bag_from_file.rb +113 -0
  424. data/lib/chef/knife/data_bag_list.rb +46 -0
  425. data/lib/chef/knife/data_bag_secret_options.rb +142 -0
  426. data/lib/chef/knife/data_bag_show.rb +69 -0
  427. data/lib/chef/knife/delete.rb +108 -0
  428. data/lib/chef/knife/deps.rb +140 -0
  429. data/lib/chef/knife/diff.rb +69 -0
  430. data/lib/chef/knife/download.rb +69 -0
  431. data/lib/chef/knife/edit.rb +73 -0
  432. data/lib/chef/knife/environment_compare.rb +127 -0
  433. data/lib/chef/knife/environment_create.rb +53 -0
  434. data/lib/chef/knife/environment_delete.rb +45 -0
  435. data/lib/chef/knife/environment_edit.rb +45 -0
  436. data/lib/chef/knife/environment_from_file.rb +83 -0
  437. data/lib/chef/knife/environment_list.rb +42 -0
  438. data/lib/chef/knife/environment_show.rb +48 -0
  439. data/lib/chef/knife/exec.rb +87 -0
  440. data/lib/chef/knife/help.rb +103 -0
  441. data/lib/chef/knife/help_topics.rb +4 -0
  442. data/lib/chef/knife/index_rebuild.rb +134 -0
  443. data/lib/chef/knife/key_create.rb +108 -0
  444. data/lib/chef/knife/key_create_base.rb +50 -0
  445. data/lib/chef/knife/key_delete.rb +55 -0
  446. data/lib/chef/knife/key_edit.rb +114 -0
  447. data/lib/chef/knife/key_edit_base.rb +55 -0
  448. data/lib/chef/knife/key_list.rb +88 -0
  449. data/lib/chef/knife/key_list_base.rb +45 -0
  450. data/lib/chef/knife/key_show.rb +53 -0
  451. data/lib/chef/knife/list.rb +156 -0
  452. data/lib/chef/knife/node_bulk_delete.rb +80 -0
  453. data/lib/chef/knife/node_create.rb +50 -0
  454. data/lib/chef/knife/node_delete.rb +47 -0
  455. data/lib/chef/knife/node_edit.rb +72 -0
  456. data/lib/chef/knife/node_environment_set.rb +54 -0
  457. data/lib/chef/knife/node_from_file.rb +51 -0
  458. data/lib/chef/knife/node_list.rb +46 -0
  459. data/lib/chef/knife/node_run_list_add.rb +104 -0
  460. data/lib/chef/knife/node_run_list_remove.rb +56 -0
  461. data/lib/chef/knife/node_run_list_set.rb +66 -0
  462. data/lib/chef/knife/node_show.rb +67 -0
  463. data/lib/chef/knife/raw.rb +102 -0
  464. data/lib/chef/knife/recipe_list.rb +32 -0
  465. data/lib/chef/knife/role_bulk_delete.rb +70 -0
  466. data/lib/chef/knife/role_create.rb +55 -0
  467. data/lib/chef/knife/role_delete.rb +47 -0
  468. data/lib/chef/knife/role_edit.rb +48 -0
  469. data/lib/chef/knife/role_env_run_list_add.rb +86 -0
  470. data/lib/chef/knife/role_env_run_list_clear.rb +55 -0
  471. data/lib/chef/knife/role_env_run_list_remove.rb +57 -0
  472. data/lib/chef/knife/role_env_run_list_replace.rb +59 -0
  473. data/lib/chef/knife/role_env_run_list_set.rb +70 -0
  474. data/lib/chef/knife/role_from_file.rb +56 -0
  475. data/lib/chef/knife/role_list.rb +43 -0
  476. data/lib/chef/knife/role_run_list_add.rb +86 -0
  477. data/lib/chef/knife/role_run_list_clear.rb +55 -0
  478. data/lib/chef/knife/role_run_list_remove.rb +57 -0
  479. data/lib/chef/knife/role_run_list_replace.rb +59 -0
  480. data/lib/chef/knife/role_run_list_set.rb +70 -0
  481. data/lib/chef/knife/role_show.rb +52 -0
  482. data/lib/chef/knife/search.rb +201 -0
  483. data/lib/chef/knife/serve.rb +48 -0
  484. data/lib/chef/knife/show.rb +56 -0
  485. data/lib/chef/knife/ssh.rb +539 -0
  486. data/lib/chef/knife/ssl_check.rb +277 -0
  487. data/lib/chef/knife/ssl_fetch.rb +158 -0
  488. data/lib/chef/knife/status.rb +97 -0
  489. data/lib/chef/knife/tag_create.rb +52 -0
  490. data/lib/chef/knife/tag_delete.rb +60 -0
  491. data/lib/chef/knife/tag_list.rb +47 -0
  492. data/lib/chef/knife/upload.rb +71 -0
  493. data/lib/chef/knife/user_create.rb +93 -0
  494. data/lib/chef/knife/user_delete.rb +46 -0
  495. data/lib/chef/knife/user_edit.rb +53 -0
  496. data/lib/chef/knife/user_key_create.rb +69 -0
  497. data/lib/chef/knife/user_key_delete.rb +76 -0
  498. data/lib/chef/knife/user_key_edit.rb +80 -0
  499. data/lib/chef/knife/user_key_list.rb +69 -0
  500. data/lib/chef/knife/user_key_show.rb +76 -0
  501. data/lib/chef/knife/user_list.rb +42 -0
  502. data/lib/chef/knife/user_reregister.rb +59 -0
  503. data/lib/chef/knife/user_show.rb +49 -0
  504. data/lib/chef/knife/xargs.rb +267 -0
  505. data/lib/chef/local_mode.rb +121 -0
  506. data/lib/chef/log.rb +50 -0
  507. data/lib/chef/log/syslog.rb +46 -0
  508. data/lib/chef/log/winevt.rb +99 -0
  509. data/lib/chef/mash.rb +225 -0
  510. data/lib/chef/mixin/checksum.rb +32 -0
  511. data/lib/chef/mixin/command.rb +192 -0
  512. data/lib/chef/mixin/command/unix.rb +220 -0
  513. data/lib/chef/mixin/command/windows.rb +72 -0
  514. data/lib/chef/mixin/convert_to_class_name.rb +120 -0
  515. data/lib/chef/mixin/create_path.rb +73 -0
  516. data/lib/chef/mixin/deep_merge.rb +140 -0
  517. data/lib/chef/mixin/deprecation.rb +100 -0
  518. data/lib/chef/mixin/descendants_tracker.rb +82 -0
  519. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -0
  520. data/lib/chef/mixin/file_class.rb +37 -0
  521. data/lib/chef/mixin/from_file.rb +50 -0
  522. data/lib/chef/mixin/get_source_from_package.rb +43 -0
  523. data/lib/chef/mixin/homebrew_user.rb +68 -0
  524. data/lib/chef/mixin/language.rb +48 -0
  525. data/lib/chef/mixin/language_include_attribute.rb +35 -0
  526. data/lib/chef/mixin/language_include_recipe.rb +32 -0
  527. data/lib/chef/mixin/params_validate.rb +242 -0
  528. data/lib/chef/mixin/path_sanity.rb +68 -0
  529. data/lib/chef/mixin/powershell_type_coercions.rb +82 -0
  530. data/lib/chef/mixin/provides.rb +40 -0
  531. data/lib/chef/mixin/recipe_definition_dsl_core.rb +35 -0
  532. data/lib/chef/mixin/securable.rb +199 -0
  533. data/lib/chef/mixin/shell_out.rb +117 -0
  534. data/lib/chef/mixin/template.rb +215 -0
  535. data/lib/chef/mixin/unformatter.rb +32 -0
  536. data/lib/chef/mixin/uris.rb +33 -0
  537. data/lib/chef/mixin/which.rb +37 -0
  538. data/lib/chef/mixin/why_run.rb +332 -0
  539. data/lib/chef/mixin/windows_architecture_helper.rb +136 -0
  540. data/lib/chef/mixin/windows_env_helper.rb +56 -0
  541. data/lib/chef/mixin/wstring.rb +31 -0
  542. data/lib/chef/mixin/xml_escape.rb +140 -0
  543. data/lib/chef/mixins.rb +14 -0
  544. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  545. data/lib/chef/monkey_patches/net_http.rb +60 -0
  546. data/lib/chef/monologger.rb +90 -0
  547. data/lib/chef/nil_argument.rb +3 -0
  548. data/lib/chef/node.rb +573 -0
  549. data/lib/chef/node/attribute.rb +586 -0
  550. data/lib/chef/node/attribute_collections.rb +323 -0
  551. data/lib/chef/node/immutable_collections.rb +219 -0
  552. data/lib/chef/node_map.rb +146 -0
  553. data/lib/chef/null_logger.rb +72 -0
  554. data/lib/chef/org.rb +148 -0
  555. data/lib/chef/platform.rb +30 -0
  556. data/lib/chef/platform/provider_mapping.rb +481 -0
  557. data/lib/chef/platform/provider_priority_map.rb +92 -0
  558. data/lib/chef/platform/query_helpers.rb +55 -0
  559. data/lib/chef/platform/rebooter.rb +54 -0
  560. data/lib/chef/platform/resource_priority_map.rb +37 -0
  561. data/lib/chef/platform/service_helpers.rb +142 -0
  562. data/lib/chef/policy_builder.rb +49 -0
  563. data/lib/chef/policy_builder/expand_node_object.rb +251 -0
  564. data/lib/chef/policy_builder/policyfile.rb +387 -0
  565. data/lib/chef/provider.rb +228 -0
  566. data/lib/chef/provider/batch.rb +37 -0
  567. data/lib/chef/provider/breakpoint.rb +38 -0
  568. data/lib/chef/provider/cookbook_file.rb +53 -0
  569. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  570. data/lib/chef/provider/cron.rb +263 -0
  571. data/lib/chef/provider/cron/aix.rb +50 -0
  572. data/lib/chef/provider/cron/solaris.rb +22 -0
  573. data/lib/chef/provider/cron/unix.rb +83 -0
  574. data/lib/chef/provider/deploy.rb +479 -0
  575. data/lib/chef/provider/deploy/revision.rb +109 -0
  576. data/lib/chef/provider/deploy/timestamped.rb +34 -0
  577. data/lib/chef/provider/directory.rb +137 -0
  578. data/lib/chef/provider/dsc_resource.rb +157 -0
  579. data/lib/chef/provider/dsc_script.rb +185 -0
  580. data/lib/chef/provider/env.rb +169 -0
  581. data/lib/chef/provider/env/windows.rb +72 -0
  582. data/lib/chef/provider/erl_call.rb +108 -0
  583. data/lib/chef/provider/execute.rb +104 -0
  584. data/lib/chef/provider/file.rb +494 -0
  585. data/lib/chef/provider/file/content.rb +39 -0
  586. data/lib/chef/provider/git.rb +334 -0
  587. data/lib/chef/provider/group.rb +183 -0
  588. data/lib/chef/provider/group/aix.rb +85 -0
  589. data/lib/chef/provider/group/dscl.rb +170 -0
  590. data/lib/chef/provider/group/gpasswd.rb +57 -0
  591. data/lib/chef/provider/group/groupadd.rb +137 -0
  592. data/lib/chef/provider/group/groupmod.rb +128 -0
  593. data/lib/chef/provider/group/pw.rb +139 -0
  594. data/lib/chef/provider/group/suse.rb +60 -0
  595. data/lib/chef/provider/group/usermod.rb +90 -0
  596. data/lib/chef/provider/group/windows.rb +98 -0
  597. data/lib/chef/provider/http_request.rb +122 -0
  598. data/lib/chef/provider/ifconfig.rb +223 -0
  599. data/lib/chef/provider/ifconfig/aix.rb +97 -0
  600. data/lib/chef/provider/ifconfig/debian.rb +82 -0
  601. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  602. data/lib/chef/provider/link.rb +159 -0
  603. data/lib/chef/provider/log.rb +57 -0
  604. data/lib/chef/provider/lwrp_base.rb +168 -0
  605. data/lib/chef/provider/mdadm.rb +92 -0
  606. data/lib/chef/provider/mount.rb +170 -0
  607. data/lib/chef/provider/mount/aix.rb +179 -0
  608. data/lib/chef/provider/mount/mount.rb +268 -0
  609. data/lib/chef/provider/mount/solaris.rb +269 -0
  610. data/lib/chef/provider/mount/windows.rb +86 -0
  611. data/lib/chef/provider/ohai.rb +49 -0
  612. data/lib/chef/provider/package.rb +495 -0
  613. data/lib/chef/provider/package/aix.rb +136 -0
  614. data/lib/chef/provider/package/apt.rb +184 -0
  615. data/lib/chef/provider/package/dpkg.rb +149 -0
  616. data/lib/chef/provider/package/easy_install.rb +134 -0
  617. data/lib/chef/provider/package/freebsd/base.rb +89 -0
  618. data/lib/chef/provider/package/freebsd/pkg.rb +114 -0
  619. data/lib/chef/provider/package/freebsd/pkgng.rb +78 -0
  620. data/lib/chef/provider/package/freebsd/port.rb +60 -0
  621. data/lib/chef/provider/package/homebrew.rb +136 -0
  622. data/lib/chef/provider/package/ips.rb +90 -0
  623. data/lib/chef/provider/package/macports.rb +100 -0
  624. data/lib/chef/provider/package/openbsd.rb +138 -0
  625. data/lib/chef/provider/package/pacman.rb +106 -0
  626. data/lib/chef/provider/package/paludis.rb +88 -0
  627. data/lib/chef/provider/package/portage.rb +139 -0
  628. data/lib/chef/provider/package/rpm.rb +125 -0
  629. data/lib/chef/provider/package/rubygems.rb +593 -0
  630. data/lib/chef/provider/package/smartos.rb +94 -0
  631. data/lib/chef/provider/package/solaris.rb +139 -0
  632. data/lib/chef/provider/package/windows.rb +170 -0
  633. data/lib/chef/provider/package/windows/msi.rb +69 -0
  634. data/lib/chef/provider/package/yum-dump.py +307 -0
  635. data/lib/chef/provider/package/yum.rb +1401 -0
  636. data/lib/chef/provider/package/zypper.rb +130 -0
  637. data/lib/chef/provider/powershell_script.rb +94 -0
  638. data/lib/chef/provider/reboot.rb +70 -0
  639. data/lib/chef/provider/registry_key.rb +155 -0
  640. data/lib/chef/provider/remote_directory.rb +193 -0
  641. data/lib/chef/provider/remote_file.rb +53 -0
  642. data/lib/chef/provider/remote_file/cache_control_data.rb +163 -0
  643. data/lib/chef/provider/remote_file/content.rb +78 -0
  644. data/lib/chef/provider/remote_file/fetcher.rb +55 -0
  645. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  646. data/lib/chef/provider/remote_file/http.rb +117 -0
  647. data/lib/chef/provider/remote_file/local_file.rb +54 -0
  648. data/lib/chef/provider/remote_file/network_file.rb +48 -0
  649. data/lib/chef/provider/resource_update.rb +52 -0
  650. data/lib/chef/provider/route.rb +229 -0
  651. data/lib/chef/provider/ruby_block.rb +44 -0
  652. data/lib/chef/provider/script.rb +84 -0
  653. data/lib/chef/provider/service.rb +173 -0
  654. data/lib/chef/provider/service/aix.rb +129 -0
  655. data/lib/chef/provider/service/aixinit.rb +117 -0
  656. data/lib/chef/provider/service/arch.rb +118 -0
  657. data/lib/chef/provider/service/debian.rb +185 -0
  658. data/lib/chef/provider/service/freebsd.rb +195 -0
  659. data/lib/chef/provider/service/gentoo.rb +71 -0
  660. data/lib/chef/provider/service/init.rb +93 -0
  661. data/lib/chef/provider/service/insserv.rb +61 -0
  662. data/lib/chef/provider/service/invokercd.rb +43 -0
  663. data/lib/chef/provider/service/macosx.rb +246 -0
  664. data/lib/chef/provider/service/openbsd.rb +216 -0
  665. data/lib/chef/provider/service/redhat.rb +84 -0
  666. data/lib/chef/provider/service/simple.rb +174 -0
  667. data/lib/chef/provider/service/solaris.rb +91 -0
  668. data/lib/chef/provider/service/systemd.rb +141 -0
  669. data/lib/chef/provider/service/upstart.rb +243 -0
  670. data/lib/chef/provider/service/windows.rb +360 -0
  671. data/lib/chef/provider/subversion.rb +215 -0
  672. data/lib/chef/provider/template.rb +65 -0
  673. data/lib/chef/provider/template/content.rb +60 -0
  674. data/lib/chef/provider/template_finder.rb +61 -0
  675. data/lib/chef/provider/user.rb +214 -0
  676. data/lib/chef/provider/user/aix.rb +95 -0
  677. data/lib/chef/provider/user/dscl.rb +700 -0
  678. data/lib/chef/provider/user/pw.rb +113 -0
  679. data/lib/chef/provider/user/solaris.rb +91 -0
  680. data/lib/chef/provider/user/useradd.rb +162 -0
  681. data/lib/chef/provider/user/windows.rb +126 -0
  682. data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -0
  683. data/lib/chef/provider/windows_script.rb +74 -0
  684. data/lib/chef/provider_resolver.rb +211 -0
  685. data/lib/chef/providers.rb +138 -0
  686. data/lib/chef/recipe.rb +129 -0
  687. data/lib/chef/request_id.rb +37 -0
  688. data/lib/chef/reserved_names.rb +9 -0
  689. data/lib/chef/resource.rb +1187 -0
  690. data/lib/chef/resource/apt_package.rb +45 -0
  691. data/lib/chef/resource/bash.rb +35 -0
  692. data/lib/chef/resource/batch.rb +33 -0
  693. data/lib/chef/resource/bff_package.rb +34 -0
  694. data/lib/chef/resource/breakpoint.rb +36 -0
  695. data/lib/chef/resource/chef_gem.rb +70 -0
  696. data/lib/chef/resource/conditional.rb +127 -0
  697. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  698. data/lib/chef/resource/cookbook_file.rb +51 -0
  699. data/lib/chef/resource/cron.rb +218 -0
  700. data/lib/chef/resource/csh.rb +35 -0
  701. data/lib/chef/resource/deploy.rb +434 -0
  702. data/lib/chef/resource/deploy_revision.rb +45 -0
  703. data/lib/chef/resource/directory.rb +64 -0
  704. data/lib/chef/resource/dpkg_package.rb +35 -0
  705. data/lib/chef/resource/dsc_resource.rb +83 -0
  706. data/lib/chef/resource/dsc_script.rb +139 -0
  707. data/lib/chef/resource/easy_install_package.rb +58 -0
  708. data/lib/chef/resource/env.rb +65 -0
  709. data/lib/chef/resource/erl_call.rb +88 -0
  710. data/lib/chef/resource/execute.rb +166 -0
  711. data/lib/chef/resource/file.rb +152 -0
  712. data/lib/chef/resource/file/verification.rb +122 -0
  713. data/lib/chef/resource/freebsd_package.rb +66 -0
  714. data/lib/chef/resource/gem_package.rb +59 -0
  715. data/lib/chef/resource/git.rb +47 -0
  716. data/lib/chef/resource/group.rb +105 -0
  717. data/lib/chef/resource/homebrew_package.rb +47 -0
  718. data/lib/chef/resource/http_request.rb +67 -0
  719. data/lib/chef/resource/ifconfig.rb +148 -0
  720. data/lib/chef/resource/ips_package.rb +44 -0
  721. data/lib/chef/resource/link.rb +108 -0
  722. data/lib/chef/resource/log.rb +78 -0
  723. data/lib/chef/resource/lwrp_base.rb +184 -0
  724. data/lib/chef/resource/macosx_service.rb +59 -0
  725. data/lib/chef/resource/macports_package.rb +32 -0
  726. data/lib/chef/resource/mdadm.rb +107 -0
  727. data/lib/chef/resource/mount.rb +181 -0
  728. data/lib/chef/resource/ohai.rb +55 -0
  729. data/lib/chef/resource/openbsd_package.rb +51 -0
  730. data/lib/chef/resource/package.rb +104 -0
  731. data/lib/chef/resource/pacman_package.rb +34 -0
  732. data/lib/chef/resource/paludis_package.rb +36 -0
  733. data/lib/chef/resource/perl.rb +35 -0
  734. data/lib/chef/resource/portage_package.rb +34 -0
  735. data/lib/chef/resource/powershell_script.rb +51 -0
  736. data/lib/chef/resource/python.rb +34 -0
  737. data/lib/chef/resource/reboot.rb +50 -0
  738. data/lib/chef/resource/registry_key.rb +146 -0
  739. data/lib/chef/resource/remote_directory.rb +125 -0
  740. data/lib/chef/resource/remote_file.rb +150 -0
  741. data/lib/chef/resource/resource_notification.rb +109 -0
  742. data/lib/chef/resource/route.rb +139 -0
  743. data/lib/chef/resource/rpm_package.rb +44 -0
  744. data/lib/chef/resource/ruby.rb +35 -0
  745. data/lib/chef/resource/ruby_block.rb +55 -0
  746. data/lib/chef/resource/scm.rb +188 -0
  747. data/lib/chef/resource/script.rb +77 -0
  748. data/lib/chef/resource/service.rb +191 -0
  749. data/lib/chef/resource/smartos_package.rb +37 -0
  750. data/lib/chef/resource/solaris_package.rb +43 -0
  751. data/lib/chef/resource/subversion.rb +41 -0
  752. data/lib/chef/resource/template.rb +219 -0
  753. data/lib/chef/resource/timestamped_deploy.rb +30 -0
  754. data/lib/chef/resource/user.rb +163 -0
  755. data/lib/chef/resource/whyrun_safe_ruby_block.rb +31 -0
  756. data/lib/chef/resource/windows_package.rb +100 -0
  757. data/lib/chef/resource/windows_script.rb +61 -0
  758. data/lib/chef/resource/windows_service.rb +71 -0
  759. data/lib/chef/resource/yum_package.rb +65 -0
  760. data/lib/chef/resource_builder.rb +137 -0
  761. data/lib/chef/resource_collection.rb +89 -0
  762. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
  763. data/lib/chef/resource_collection/resource_list.rb +89 -0
  764. data/lib/chef/resource_collection/resource_set.rb +170 -0
  765. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  766. data/lib/chef/resource_definition.rb +68 -0
  767. data/lib/chef/resource_definition_list.rb +38 -0
  768. data/lib/chef/resource_reporter.rb +322 -0
  769. data/lib/chef/resource_resolver.rb +111 -0
  770. data/lib/chef/resources.rb +89 -0
  771. data/lib/chef/rest.rb +208 -0
  772. data/lib/chef/role.rb +274 -0
  773. data/lib/chef/run_context.rb +310 -0
  774. data/lib/chef/run_context/cookbook_compiler.rb +292 -0
  775. data/lib/chef/run_list.rb +166 -0
  776. data/lib/chef/run_list/run_list_expansion.rb +191 -0
  777. data/lib/chef/run_list/run_list_item.rb +99 -0
  778. data/lib/chef/run_list/versioned_recipe_list.rb +86 -0
  779. data/lib/chef/run_lock.rb +188 -0
  780. data/lib/chef/run_status.rb +125 -0
  781. data/lib/chef/runner.rb +117 -0
  782. data/lib/chef/sandbox.rb +20 -0
  783. data/lib/chef/scan_access_control.rb +138 -0
  784. data/lib/chef/search/query.rb +152 -0
  785. data/lib/chef/server_api.rb +44 -0
  786. data/lib/chef/shell.rb +323 -0
  787. data/lib/chef/shell/ext.rb +593 -0
  788. data/lib/chef/shell/model_wrapper.rb +120 -0
  789. data/lib/chef/shell/shell_rest.rb +28 -0
  790. data/lib/chef/shell/shell_session.rb +298 -0
  791. data/lib/chef/shell_out.rb +13 -0
  792. data/lib/chef/tasks/chef_repo.rake +201 -0
  793. data/lib/chef/user.rb +183 -0
  794. data/lib/chef/util/backup.rb +86 -0
  795. data/lib/chef/util/diff.rb +184 -0
  796. data/lib/chef/util/dsc/configuration_generator.rb +139 -0
  797. data/lib/chef/util/dsc/lcm_output_parser.rb +137 -0
  798. data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
  799. data/lib/chef/util/dsc/resource_info.rb +26 -0
  800. data/lib/chef/util/dsc/resource_store.rb +110 -0
  801. data/lib/chef/util/editor.rb +92 -0
  802. data/lib/chef/util/file_edit.rb +100 -0
  803. data/lib/chef/util/path_helper.rb +26 -0
  804. data/lib/chef/util/powershell/cmdlet.rb +170 -0
  805. data/lib/chef/util/powershell/cmdlet_result.rb +61 -0
  806. data/lib/chef/util/powershell/ps_credential.rb +38 -0
  807. data/lib/chef/util/selinux.rb +92 -0
  808. data/lib/chef/util/threaded_job_queue.rb +61 -0
  809. data/lib/chef/util/windows.rb +56 -0
  810. data/lib/chef/util/windows/net_group.rb +106 -0
  811. data/lib/chef/util/windows/net_use.rb +121 -0
  812. data/lib/chef/util/windows/net_user.rb +169 -0
  813. data/lib/chef/util/windows/volume.rb +59 -0
  814. data/lib/chef/version.rb +34 -0
  815. data/lib/chef/version/platform.rb +44 -0
  816. data/lib/chef/version_class.rb +70 -0
  817. data/lib/chef/version_constraint.rb +118 -0
  818. data/lib/chef/version_constraint/platform.rb +26 -0
  819. data/lib/chef/whitelist.rb +86 -0
  820. data/lib/chef/win32/api.rb +368 -0
  821. data/lib/chef/win32/api/crypto.rb +63 -0
  822. data/lib/chef/win32/api/error.rb +921 -0
  823. data/lib/chef/win32/api/file.rb +551 -0
  824. data/lib/chef/win32/api/installer.rb +166 -0
  825. data/lib/chef/win32/api/memory.rb +105 -0
  826. data/lib/chef/win32/api/net.rb +204 -0
  827. data/lib/chef/win32/api/process.rb +42 -0
  828. data/lib/chef/win32/api/psapi.rb +51 -0
  829. data/lib/chef/win32/api/security.rb +435 -0
  830. data/lib/chef/win32/api/synchronization.rb +89 -0
  831. data/lib/chef/win32/api/system.rb +215 -0
  832. data/lib/chef/win32/api/unicode.rb +178 -0
  833. data/lib/chef/win32/crypto.rb +49 -0
  834. data/lib/chef/win32/error.rb +73 -0
  835. data/lib/chef/win32/eventlog.rb +31 -0
  836. data/lib/chef/win32/file.rb +188 -0
  837. data/lib/chef/win32/file/info.rb +100 -0
  838. data/lib/chef/win32/handle.rb +55 -0
  839. data/lib/chef/win32/memory.rb +101 -0
  840. data/lib/chef/win32/mutex.rb +117 -0
  841. data/lib/chef/win32/net.rb +190 -0
  842. data/lib/chef/win32/process.rb +84 -0
  843. data/lib/chef/win32/registry.rb +381 -0
  844. data/lib/chef/win32/security.rb +603 -0
  845. data/lib/chef/win32/security/ace.rb +123 -0
  846. data/lib/chef/win32/security/acl.rb +103 -0
  847. data/lib/chef/win32/security/securable_object.rb +109 -0
  848. data/lib/chef/win32/security/security_descriptor.rb +93 -0
  849. data/lib/chef/win32/security/sid.rb +266 -0
  850. data/lib/chef/win32/security/token.rb +72 -0
  851. data/lib/chef/win32/unicode.rb +55 -0
  852. data/lib/chef/win32/version.rb +162 -0
  853. data/lib/chef/workstation_config_loader.rb +178 -0
  854. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  855. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  856. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  857. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  858. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  859. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  860. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  861. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  862. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  863. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  864. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  865. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  866. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  867. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  868. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  869. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  870. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  871. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  872. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  873. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  874. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  875. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  876. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  877. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  878. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  879. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  880. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  881. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  882. data/spec/data/apt/var/www/apt/db/version +4 -0
  883. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  884. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  885. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  886. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  887. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  888. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  889. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  890. data/spec/data/bad-config.rb +1 -0
  891. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  892. data/spec/data/bootstrap/no_proxy.erb +2 -0
  893. data/spec/data/bootstrap/secret.erb +9 -0
  894. data/spec/data/bootstrap/test-hints.erb +12 -0
  895. data/spec/data/bootstrap/test.erb +1 -0
  896. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  897. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  898. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +3 -0
  899. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -0
  900. data/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb +1 -0
  901. data/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz +1 -0
  902. data/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb +1 -0
  903. data/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb +1 -0
  904. data/spec/data/cb_version_cookbooks/tatft/recipes/default.rb +1 -0
  905. data/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb +1 -0
  906. data/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb +0 -0
  907. data/spec/data/checksum/random.txt +1 -0
  908. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -0
  909. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0 +0 -0
  910. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -0
  911. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -0
  912. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -0
  913. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -0
  914. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -0
  915. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -0
  916. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -0
  917. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -0
  918. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -0
  919. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -0
  920. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -0
  921. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -0
  922. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -0
  923. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -0
  924. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -0
  925. data/spec/data/config.rb +6 -0
  926. data/spec/data/cookbooks/angrybash/metadata.rb +2 -0
  927. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -0
  928. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -0
  929. data/spec/data/cookbooks/apache2/metadata.rb +2 -0
  930. data/spec/data/cookbooks/apache2/recipes/default.rb +3 -0
  931. data/spec/data/cookbooks/borken/metadata.rb +2 -0
  932. data/spec/data/cookbooks/borken/recipes/default.rb +2 -0
  933. data/spec/data/cookbooks/borken/templates/default/borken.erb +2 -0
  934. data/spec/data/cookbooks/chefignore +8 -0
  935. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
  936. data/spec/data/cookbooks/ignorken/metadata.rb +2 -0
  937. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  938. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  939. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
  940. data/spec/data/cookbooks/java/files/default/java.response +2 -0
  941. data/spec/data/cookbooks/java/metadata.rb +2 -0
  942. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -0
  943. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -0
  944. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -0
  945. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -0
  946. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -0
  947. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -0
  948. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -0
  949. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
  950. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
  951. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
  952. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -0
  953. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +3 -0
  954. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +3 -0
  955. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
  956. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +3 -0
  957. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +3 -0
  958. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -0
  959. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
  960. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
  961. data/spec/data/cookbooks/openldap/metadata.rb +8 -0
  962. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -0
  963. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -0
  964. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -0
  965. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -0
  966. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  967. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  968. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  969. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  970. data/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb +1 -0
  971. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -0
  972. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  973. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -0
  974. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  975. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -0
  976. data/spec/data/cookbooks/preseed/metadata.rb +2 -0
  977. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -0
  978. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  979. data/spec/data/definitions/test.rb +5 -0
  980. data/spec/data/environment-config.rb +5 -0
  981. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  982. data/spec/data/fileedit/blank +0 -0
  983. data/spec/data/fileedit/hosts +4 -0
  984. data/spec/data/gems/chef-integration-test-0.1.0.gem +0 -0
  985. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  986. data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
  987. data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
  988. data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
  989. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -0
  990. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -0
  991. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -0
  992. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -0
  993. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +10 -0
  994. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -0
  995. data/spec/data/kitchen/chefignore +6 -0
  996. data/spec/data/kitchen/openldap/attributes/default.rb +3 -0
  997. data/spec/data/kitchen/openldap/attributes/robinson.rb +3 -0
  998. data/spec/data/kitchen/openldap/definitions/client.rb +3 -0
  999. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +3 -0
  1000. data/spec/data/kitchen/openldap/recipes/gigantor.rb +3 -0
  1001. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +3 -0
  1002. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -0
  1003. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  1004. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  1005. data/spec/data/knife_subcommand/test_explicit_category.rb +7 -0
  1006. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -0
  1007. data/spec/data/knife_subcommand/test_yourself.rb +21 -0
  1008. data/spec/data/lwrp/providers/buck_passer.rb +28 -0
  1009. data/spec/data/lwrp/providers/buck_passer_2.rb +26 -0
  1010. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -0
  1011. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  1012. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -0
  1013. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -0
  1014. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -0
  1015. data/spec/data/lwrp/resources/bar.rb +2 -0
  1016. data/spec/data/lwrp/resources/foo.rb +4 -0
  1017. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -0
  1018. data/spec/data/lwrp_const_scoping/resources/conflict.rb +0 -0
  1019. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -0
  1020. data/spec/data/lwrp_override/resources/foo.rb +10 -0
  1021. data/spec/data/mac_users/10.7-8.plist.xml +559 -0
  1022. data/spec/data/mac_users/10.7-8.shadow.xml +11 -0
  1023. data/spec/data/mac_users/10.7.plist.xml +559 -0
  1024. data/spec/data/mac_users/10.7.shadow.xml +11 -0
  1025. data/spec/data/mac_users/10.8.plist.xml +559 -0
  1026. data/spec/data/mac_users/10.8.shadow.xml +21 -0
  1027. data/spec/data/mac_users/10.9.plist.xml +560 -0
  1028. data/spec/data/mac_users/10.9.shadow.xml +21 -0
  1029. data/spec/data/metadata/quick_start/metadata.rb +19 -0
  1030. data/spec/data/nested.json +2 -0
  1031. data/spec/data/nodes/default.rb +15 -0
  1032. data/spec/data/nodes/test.example.com.rb +17 -0
  1033. data/spec/data/nodes/test.rb +15 -0
  1034. data/spec/data/null_config.rb +1 -0
  1035. data/spec/data/object_loader/environments/test.json +7 -0
  1036. data/spec/data/object_loader/environments/test.rb +2 -0
  1037. data/spec/data/object_loader/environments/test_json_class.json +8 -0
  1038. data/spec/data/object_loader/nodes/test.json +7 -0
  1039. data/spec/data/object_loader/nodes/test.rb +2 -0
  1040. data/spec/data/object_loader/nodes/test_json_class.json +8 -0
  1041. data/spec/data/object_loader/roles/test.json +7 -0
  1042. data/spec/data/object_loader/roles/test.rb +2 -0
  1043. data/spec/data/object_loader/roles/test_json_class.json +8 -0
  1044. data/spec/data/old_home_dir/my-dot-emacs +0 -0
  1045. data/spec/data/old_home_dir/my-dot-vim +0 -0
  1046. data/spec/data/partial_one.erb +1 -0
  1047. data/spec/data/recipes.tgz +0 -0
  1048. data/spec/data/recipes/test.rb +7 -0
  1049. data/spec/data/remote_directory_data/remote_dir_file.txt +1 -0
  1050. data/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt +1 -0
  1051. data/spec/data/remote_file/nyan_cat.png +0 -0
  1052. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  1053. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  1054. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  1055. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  1056. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  1057. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  1058. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  1059. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  1060. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  1061. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  1062. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  1063. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  1064. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  1065. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  1066. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  1067. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  1068. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  1069. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  1070. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  1071. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  1072. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  1073. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  1074. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  1075. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  1076. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  1077. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  1078. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  1079. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  1080. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  1081. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  1082. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  1083. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  1084. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  1085. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  1086. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  1087. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  1088. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  1089. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  1090. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  1091. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  1092. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  1093. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  1094. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  1095. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  1096. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  1097. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  1098. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  1099. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  1100. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  1101. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  1102. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -0
  1103. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -0
  1104. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -0
  1105. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  1106. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  1107. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -0
  1108. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -0
  1109. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -0
  1110. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  1111. data/spec/data/run_context/nodes/run_context.rb +5 -0
  1112. data/spec/data/search_queries_to_transform.txt +98 -0
  1113. data/spec/data/shef-config.rb +10 -0
  1114. data/spec/data/ssl/5e707473.0 +18 -0
  1115. data/spec/data/ssl/chef-rspec.cert +27 -0
  1116. data/spec/data/ssl/chef-rspec.key +27 -0
  1117. data/spec/data/ssl/key.pem +15 -0
  1118. data/spec/data/ssl/private_key.pem +27 -0
  1119. data/spec/data/ssl/private_key_with_whitespace.pem +32 -0
  1120. data/spec/data/standalone_cookbook/Gemfile +1 -0
  1121. data/spec/data/standalone_cookbook/chefignore +9 -0
  1122. data/spec/data/standalone_cookbook/recipes/default.rb +3 -0
  1123. data/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb +1 -0
  1124. data/spec/data/templates/seattle.txt +1 -0
  1125. data/spec/data/trusted_certs/example.crt +22 -0
  1126. data/spec/data/trusted_certs/intermediate.pem +27 -0
  1127. data/spec/data/trusted_certs/opscode.pem +60 -0
  1128. data/spec/data/trusted_certs/root.pem +22 -0
  1129. data/spec/functional/application_spec.rb +58 -0
  1130. data/spec/functional/assets/PkgA.1.0.0.0.bff +0 -0
  1131. data/spec/functional/assets/PkgA.2.0.0.0.bff +0 -0
  1132. data/spec/functional/assets/chefinittest +34 -0
  1133. data/spec/functional/assets/dummy-1-0.aix6.1.noarch.rpm +0 -0
  1134. data/spec/functional/assets/dummy-2-0.aix6.1.noarch.rpm +0 -0
  1135. data/spec/functional/assets/mytest-1.0-1.noarch.rpm +0 -0
  1136. data/spec/functional/assets/mytest-2.0-1.noarch.rpm +0 -0
  1137. data/spec/functional/assets/testchefsubsys +11 -0
  1138. data/spec/functional/audit/rspec_formatter_spec.rb +54 -0
  1139. data/spec/functional/audit/runner_spec.rb +137 -0
  1140. data/spec/functional/dsl/reboot_pending_spec.rb +121 -0
  1141. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  1142. data/spec/functional/event_loggers/windows_eventlog_spec.rb +96 -0
  1143. data/spec/functional/file_content_management/deploy_strategies_spec.rb +230 -0
  1144. data/spec/functional/http/simple_spec.rb +140 -0
  1145. data/spec/functional/knife/configure_spec.rb +38 -0
  1146. data/spec/functional/knife/cookbook_delete_spec.rb +157 -0
  1147. data/spec/functional/knife/exec_spec.rb +55 -0
  1148. data/spec/functional/knife/smoke_test.rb +34 -0
  1149. data/spec/functional/knife/ssh_spec.rb +268 -0
  1150. data/spec/functional/mixin/shell_out_spec.rb +48 -0
  1151. data/spec/functional/notifications_spec.rb +169 -0
  1152. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  1153. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -0
  1154. data/spec/functional/rebooter_spec.rb +105 -0
  1155. data/spec/functional/resource/aix_service_spec.rb +139 -0
  1156. data/spec/functional/resource/aixinit_service_spec.rb +211 -0
  1157. data/spec/functional/resource/base.rb +30 -0
  1158. data/spec/functional/resource/bash_spec.rb +88 -0
  1159. data/spec/functional/resource/batch_spec.rb +30 -0
  1160. data/spec/functional/resource/bff_spec.rb +122 -0
  1161. data/spec/functional/resource/cookbook_file_spec.rb +81 -0
  1162. data/spec/functional/resource/cron_spec.rb +172 -0
  1163. data/spec/functional/resource/deploy_revision_spec.rb +881 -0
  1164. data/spec/functional/resource/directory_spec.rb +43 -0
  1165. data/spec/functional/resource/dsc_resource_spec.rb +93 -0
  1166. data/spec/functional/resource/dsc_script_spec.rb +382 -0
  1167. data/spec/functional/resource/env_spec.rb +192 -0
  1168. data/spec/functional/resource/execute_spec.rb +147 -0
  1169. data/spec/functional/resource/file_spec.rb +143 -0
  1170. data/spec/functional/resource/git_spec.rb +259 -0
  1171. data/spec/functional/resource/group_spec.rb +433 -0
  1172. data/spec/functional/resource/ifconfig_spec.rb +163 -0
  1173. data/spec/functional/resource/link_spec.rb +614 -0
  1174. data/spec/functional/resource/mount_spec.rb +212 -0
  1175. data/spec/functional/resource/ohai_spec.rb +65 -0
  1176. data/spec/functional/resource/package_spec.rb +390 -0
  1177. data/spec/functional/resource/powershell_spec.rb +477 -0
  1178. data/spec/functional/resource/reboot_spec.rb +103 -0
  1179. data/spec/functional/resource/registry_spec.rb +561 -0
  1180. data/spec/functional/resource/remote_directory_spec.rb +220 -0
  1181. data/spec/functional/resource/remote_file_spec.rb +240 -0
  1182. data/spec/functional/resource/rpm_spec.rb +123 -0
  1183. data/spec/functional/resource/template_spec.rb +212 -0
  1184. data/spec/functional/resource/user/dscl_spec.rb +198 -0
  1185. data/spec/functional/resource/user/useradd_spec.rb +713 -0
  1186. data/spec/functional/resource/user/windows_spec.rb +125 -0
  1187. data/spec/functional/resource/windows_service_spec.rb +98 -0
  1188. data/spec/functional/rest_spec.rb +94 -0
  1189. data/spec/functional/run_lock_spec.rb +286 -0
  1190. data/spec/functional/shell_spec.rb +147 -0
  1191. data/spec/functional/tiny_server_spec.rb +78 -0
  1192. data/spec/functional/util/path_helper_spec.rb +37 -0
  1193. data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
  1194. data/spec/functional/version_spec.rb +35 -0
  1195. data/spec/functional/win32/crypto_spec.rb +57 -0
  1196. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  1197. data/spec/functional/win32/security_spec.rb +100 -0
  1198. data/spec/functional/win32/service_manager_spec.rb +221 -0
  1199. data/spec/functional/win32/sid_spec.rb +55 -0
  1200. data/spec/functional/win32/versions_spec.rb +117 -0
  1201. data/spec/integration/client/client_spec.rb +370 -0
  1202. data/spec/integration/client/ipv6_spec.rb +135 -0
  1203. data/spec/integration/knife/chef_fs_data_store_spec.rb +370 -0
  1204. data/spec/integration/knife/chef_repo_path_spec.rb +888 -0
  1205. data/spec/integration/knife/chef_repository_file_system_spec.rb +292 -0
  1206. data/spec/integration/knife/chefignore_spec.rb +300 -0
  1207. data/spec/integration/knife/common_options_spec.rb +155 -0
  1208. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -0
  1209. data/spec/integration/knife/delete_spec.rb +1003 -0
  1210. data/spec/integration/knife/deps_spec.rb +706 -0
  1211. data/spec/integration/knife/diff_spec.rb +602 -0
  1212. data/spec/integration/knife/download_spec.rb +1170 -0
  1213. data/spec/integration/knife/list_spec.rb +865 -0
  1214. data/spec/integration/knife/raw_spec.rb +242 -0
  1215. data/spec/integration/knife/redirection_spec.rb +52 -0
  1216. data/spec/integration/knife/serve_spec.rb +57 -0
  1217. data/spec/integration/knife/show_spec.rb +167 -0
  1218. data/spec/integration/knife/upload_spec.rb +1391 -0
  1219. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +78 -0
  1220. data/spec/integration/recipes/provider_choice.rb +41 -0
  1221. data/spec/integration/recipes/recipe_dsl_spec.rb +259 -0
  1222. data/spec/integration/solo/solo_spec.rb +143 -0
  1223. data/spec/rcov.opts +2 -0
  1224. data/spec/scripts/ssl-serve.rb +52 -0
  1225. data/spec/spec_helper.rb +219 -0
  1226. data/spec/stress/win32/file_spec.rb +37 -0
  1227. data/spec/stress/win32/memory_spec.rb +22 -0
  1228. data/spec/stress/win32/security_spec.rb +69 -0
  1229. data/spec/support/chef_helpers.rb +96 -0
  1230. data/spec/support/key_helpers.rb +104 -0
  1231. data/spec/support/lib/chef/provider/easy.rb +35 -0
  1232. data/spec/support/lib/chef/provider/snakeoil.rb +41 -0
  1233. data/spec/support/lib/chef/resource/cat.rb +40 -0
  1234. data/spec/support/lib/chef/resource/one_two_three_four.rb +43 -0
  1235. data/spec/support/lib/chef/resource/with_state.rb +37 -0
  1236. data/spec/support/lib/chef/resource/zen_follower.rb +41 -0
  1237. data/spec/support/lib/chef/resource/zen_master.rb +47 -0
  1238. data/spec/support/lib/library_load_order.rb +22 -0
  1239. data/spec/support/matchers/leak.rb +96 -0
  1240. data/spec/support/mock/constant.rb +52 -0
  1241. data/spec/support/mock/platform.rb +25 -0
  1242. data/spec/support/pedant/Gemfile +3 -0
  1243. data/spec/support/pedant/Gemfile.lock +67 -0
  1244. data/spec/support/pedant/pedant_config.rb +129 -0
  1245. data/spec/support/pedant/run_pedant.rb +63 -0
  1246. data/spec/support/pedant/stickywicket.pem +27 -0
  1247. data/spec/support/platform_helpers.rb +184 -0
  1248. data/spec/support/platforms/prof/gc.rb +54 -0
  1249. data/spec/support/platforms/prof/win32.rb +46 -0
  1250. data/spec/support/platforms/win32/spec_service.rb +59 -0
  1251. data/spec/support/shared/context/config.rb +21 -0
  1252. data/spec/support/shared/functional/diff_disabled.rb +10 -0
  1253. data/spec/support/shared/functional/directory_resource.rb +176 -0
  1254. data/spec/support/shared/functional/file_resource.rb +1056 -0
  1255. data/spec/support/shared/functional/http.rb +249 -0
  1256. data/spec/support/shared/functional/knife.rb +37 -0
  1257. data/spec/support/shared/functional/securable_resource.rb +571 -0
  1258. data/spec/support/shared/functional/securable_resource_with_reporting.rb +398 -0
  1259. data/spec/support/shared/functional/win32_service.rb +60 -0
  1260. data/spec/support/shared/functional/windows_script.rb +165 -0
  1261. data/spec/support/shared/integration/app_server_support.rb +42 -0
  1262. data/spec/support/shared/integration/integration_helper.rb +148 -0
  1263. data/spec/support/shared/integration/knife_support.rb +173 -0
  1264. data/spec/support/shared/matchers/exit_with_code.rb +32 -0
  1265. data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
  1266. data/spec/support/shared/shared_examples.rb +14 -0
  1267. data/spec/support/shared/unit/api_error_inspector.rb +192 -0
  1268. data/spec/support/shared/unit/execute_resource.rb +128 -0
  1269. data/spec/support/shared/unit/file_system_support.rb +70 -0
  1270. data/spec/support/shared/unit/platform_introspector.rb +184 -0
  1271. data/spec/support/shared/unit/provider/file.rb +840 -0
  1272. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +434 -0
  1273. data/spec/support/shared/unit/resource/static_provider_resolution.rb +66 -0
  1274. data/spec/support/shared/unit/script_resource.rb +98 -0
  1275. data/spec/support/shared/unit/windows_script_resource.rb +81 -0
  1276. data/spec/tiny_server.rb +203 -0
  1277. data/spec/unit/api_client/registration_spec.rb +274 -0
  1278. data/spec/unit/api_client_spec.rb +348 -0
  1279. data/spec/unit/application/agent_spec.rb +0 -0
  1280. data/spec/unit/application/apply_spec.rb +110 -0
  1281. data/spec/unit/application/client_spec.rb +420 -0
  1282. data/spec/unit/application/knife_spec.rb +177 -0
  1283. data/spec/unit/application/server_spec.rb +0 -0
  1284. data/spec/unit/application/solo_spec.rb +185 -0
  1285. data/spec/unit/application_spec.rb +544 -0
  1286. data/spec/unit/audit/audit_event_proxy_spec.rb +311 -0
  1287. data/spec/unit/audit/audit_reporter_spec.rb +393 -0
  1288. data/spec/unit/audit/control_group_data_spec.rb +478 -0
  1289. data/spec/unit/audit/rspec_formatter_spec.rb +29 -0
  1290. data/spec/unit/audit/runner_spec.rb +145 -0
  1291. data/spec/unit/chef_class_spec.rb +91 -0
  1292. data/spec/unit/chef_fs/config_spec.rb +110 -0
  1293. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -0
  1294. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  1295. data/spec/unit/chef_fs/file_pattern_spec.rb +525 -0
  1296. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -0
  1297. data/spec/unit/chef_fs/file_system_spec.rb +148 -0
  1298. data/spec/unit/chef_fs/parallelizer.rb +482 -0
  1299. data/spec/unit/chef_spec.rb +25 -0
  1300. data/spec/unit/client_spec.rb +839 -0
  1301. data/spec/unit/config_fetcher_spec.rb +97 -0
  1302. data/spec/unit/cookbook/chefignore_spec.rb +49 -0
  1303. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +187 -0
  1304. data/spec/unit/cookbook/file_vendor_spec.rb +98 -0
  1305. data/spec/unit/cookbook/metadata_spec.rb +787 -0
  1306. data/spec/unit/cookbook/synchronizer_spec.rb +521 -0
  1307. data/spec/unit/cookbook/syntax_check_spec.rb +214 -0
  1308. data/spec/unit/cookbook_loader_spec.rb +291 -0
  1309. data/spec/unit/cookbook_manifest_spec.rb +244 -0
  1310. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +199 -0
  1311. data/spec/unit/cookbook_spec.rb +75 -0
  1312. data/spec/unit/cookbook_uploader_spec.rb +200 -0
  1313. data/spec/unit/cookbook_version_file_specificity_spec.rb +554 -0
  1314. data/spec/unit/cookbook_version_spec.rb +364 -0
  1315. data/spec/unit/daemon_spec.rb +174 -0
  1316. data/spec/unit/data_bag_item_spec.rb +324 -0
  1317. data/spec/unit/data_bag_spec.rb +260 -0
  1318. data/spec/unit/deprecation_spec.rb +98 -0
  1319. data/spec/unit/digester_spec.rb +50 -0
  1320. data/spec/unit/dsl/audit_spec.rb +43 -0
  1321. data/spec/unit/dsl/data_query_spec.rb +106 -0
  1322. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  1323. data/spec/unit/dsl/reboot_pending_spec.rb +94 -0
  1324. data/spec/unit/dsl/recipe_spec.rb +82 -0
  1325. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  1326. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
  1327. data/spec/unit/encrypted_data_bag_item_spec.rb +437 -0
  1328. data/spec/unit/environment_spec.rb +470 -0
  1329. data/spec/unit/event_dispatch/dispatcher_spec.rb +61 -0
  1330. data/spec/unit/exceptions_spec.rb +130 -0
  1331. data/spec/unit/file_access_control_spec.rb +308 -0
  1332. data/spec/unit/file_cache_spec.rb +114 -0
  1333. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  1334. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  1335. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  1336. data/spec/unit/formatters/base_spec.rb +48 -0
  1337. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +75 -0
  1338. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +239 -0
  1339. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +129 -0
  1340. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -0
  1341. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +27 -0
  1342. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +27 -0
  1343. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +193 -0
  1344. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +93 -0
  1345. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +147 -0
  1346. data/spec/unit/guard_interpreter_spec.rb +41 -0
  1347. data/spec/unit/handler/json_file_spec.rb +64 -0
  1348. data/spec/unit/handler_spec.rb +215 -0
  1349. data/spec/unit/http/authenticator_spec.rb +69 -0
  1350. data/spec/unit/http/basic_client_spec.rb +129 -0
  1351. data/spec/unit/http/http_request_spec.rb +91 -0
  1352. data/spec/unit/http/json_input_spec.rb +128 -0
  1353. data/spec/unit/http/simple_spec.rb +32 -0
  1354. data/spec/unit/http/socketless_chef_zero_client_spec.rb +174 -0
  1355. data/spec/unit/http/ssl_policies_spec.rb +170 -0
  1356. data/spec/unit/http/validate_content_length_spec.rb +192 -0
  1357. data/spec/unit/http_spec.rb +92 -0
  1358. data/spec/unit/json_compat_spec.rb +97 -0
  1359. data/spec/unit/key_spec.rb +634 -0
  1360. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +153 -0
  1361. data/spec/unit/knife/bootstrap/client_builder_spec.rb +178 -0
  1362. data/spec/unit/knife/bootstrap_spec.rb +641 -0
  1363. data/spec/unit/knife/client_bulk_delete_spec.rb +166 -0
  1364. data/spec/unit/knife/client_create_spec.rb +116 -0
  1365. data/spec/unit/knife/client_delete_spec.rb +83 -0
  1366. data/spec/unit/knife/client_edit_spec.rb +40 -0
  1367. data/spec/unit/knife/client_list_spec.rb +34 -0
  1368. data/spec/unit/knife/client_reregister_spec.rb +62 -0
  1369. data/spec/unit/knife/client_show_spec.rb +52 -0
  1370. data/spec/unit/knife/configure_client_spec.rb +84 -0
  1371. data/spec/unit/knife/configure_spec.rb +243 -0
  1372. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +89 -0
  1373. data/spec/unit/knife/cookbook_create_spec.rb +260 -0
  1374. data/spec/unit/knife/cookbook_delete_spec.rb +239 -0
  1375. data/spec/unit/knife/cookbook_download_spec.rb +238 -0
  1376. data/spec/unit/knife/cookbook_list_spec.rb +88 -0
  1377. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -0
  1378. data/spec/unit/knife/cookbook_metadata_spec.rb +179 -0
  1379. data/spec/unit/knife/cookbook_show_spec.rb +223 -0
  1380. data/spec/unit/knife/cookbook_site_download_spec.rb +151 -0
  1381. data/spec/unit/knife/cookbook_site_install_spec.rb +195 -0
  1382. data/spec/unit/knife/cookbook_site_share_spec.rb +209 -0
  1383. data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -0
  1384. data/spec/unit/knife/cookbook_test_spec.rb +84 -0
  1385. data/spec/unit/knife/cookbook_upload_spec.rb +329 -0
  1386. data/spec/unit/knife/core/bootstrap_context_spec.rb +227 -0
  1387. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -0
  1388. data/spec/unit/knife/core/object_loader_spec.rb +81 -0
  1389. data/spec/unit/knife/core/subcommand_loader_spec.rb +224 -0
  1390. data/spec/unit/knife/core/ui_spec.rb +577 -0
  1391. data/spec/unit/knife/data_bag_create_spec.rb +109 -0
  1392. data/spec/unit/knife/data_bag_edit_spec.rb +127 -0
  1393. data/spec/unit/knife/data_bag_from_file_spec.rb +172 -0
  1394. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
  1395. data/spec/unit/knife/data_bag_show_spec.rb +123 -0
  1396. data/spec/unit/knife/environment_compare_spec.rb +112 -0
  1397. data/spec/unit/knife/environment_create_spec.rb +91 -0
  1398. data/spec/unit/knife/environment_delete_spec.rb +71 -0
  1399. data/spec/unit/knife/environment_edit_spec.rb +79 -0
  1400. data/spec/unit/knife/environment_from_file_spec.rb +90 -0
  1401. data/spec/unit/knife/environment_list_spec.rb +54 -0
  1402. data/spec/unit/knife/environment_show_spec.rb +52 -0
  1403. data/spec/unit/knife/index_rebuild_spec.rb +128 -0
  1404. data/spec/unit/knife/key_create_spec.rb +224 -0
  1405. data/spec/unit/knife/key_delete_spec.rb +135 -0
  1406. data/spec/unit/knife/key_edit_spec.rb +267 -0
  1407. data/spec/unit/knife/key_helper.rb +74 -0
  1408. data/spec/unit/knife/key_list_spec.rb +216 -0
  1409. data/spec/unit/knife/key_show_spec.rb +126 -0
  1410. data/spec/unit/knife/knife_help.rb +92 -0
  1411. data/spec/unit/knife/node_bulk_delete_spec.rb +97 -0
  1412. data/spec/unit/knife/node_delete_spec.rb +68 -0
  1413. data/spec/unit/knife/node_edit_spec.rb +115 -0
  1414. data/spec/unit/knife/node_environment_set_spec.rb +80 -0
  1415. data/spec/unit/knife/node_from_file_spec.rb +59 -0
  1416. data/spec/unit/knife/node_list_spec.rb +63 -0
  1417. data/spec/unit/knife/node_run_list_add_spec.rb +148 -0
  1418. data/spec/unit/knife/node_run_list_remove_spec.rb +89 -0
  1419. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  1420. data/spec/unit/knife/node_show_spec.rb +65 -0
  1421. data/spec/unit/knife/raw_spec.rb +43 -0
  1422. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -0
  1423. data/spec/unit/knife/role_create_spec.rb +80 -0
  1424. data/spec/unit/knife/role_delete_spec.rb +67 -0
  1425. data/spec/unit/knife/role_edit_spec.rb +79 -0
  1426. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -0
  1427. data/spec/unit/knife/role_env_run_list_clear_spec.rb +100 -0
  1428. data/spec/unit/knife/role_env_run_list_remove_spec.rb +108 -0
  1429. data/spec/unit/knife/role_env_run_list_replace_spec.rb +108 -0
  1430. data/spec/unit/knife/role_env_run_list_set_spec.rb +102 -0
  1431. data/spec/unit/knife/role_from_file_spec.rb +69 -0
  1432. data/spec/unit/knife/role_list_spec.rb +56 -0
  1433. data/spec/unit/knife/role_run_list_add_spec.rb +179 -0
  1434. data/spec/unit/knife/role_run_list_clear_spec.rb +90 -0
  1435. data/spec/unit/knife/role_run_list_remove_spec.rb +98 -0
  1436. data/spec/unit/knife/role_run_list_replace_spec.rb +101 -0
  1437. data/spec/unit/knife/role_run_list_set_spec.rb +92 -0
  1438. data/spec/unit/knife/role_show_spec.rb +59 -0
  1439. data/spec/unit/knife/ssh_spec.rb +410 -0
  1440. data/spec/unit/knife/ssl_check_spec.rb +232 -0
  1441. data/spec/unit/knife/ssl_fetch_spec.rb +184 -0
  1442. data/spec/unit/knife/status_spec.rb +108 -0
  1443. data/spec/unit/knife/tag_create_spec.rb +23 -0
  1444. data/spec/unit/knife/tag_delete_spec.rb +25 -0
  1445. data/spec/unit/knife/tag_list_spec.rb +23 -0
  1446. data/spec/unit/knife/user_create_spec.rb +88 -0
  1447. data/spec/unit/knife/user_delete_spec.rb +39 -0
  1448. data/spec/unit/knife/user_edit_spec.rb +47 -0
  1449. data/spec/unit/knife/user_list_spec.rb +32 -0
  1450. data/spec/unit/knife/user_reregister_spec.rb +53 -0
  1451. data/spec/unit/knife/user_show_spec.rb +41 -0
  1452. data/spec/unit/knife_spec.rb +492 -0
  1453. data/spec/unit/log/syslog_spec.rb +53 -0
  1454. data/spec/unit/log/winevt_spec.rb +55 -0
  1455. data/spec/unit/log_spec.rb +24 -0
  1456. data/spec/unit/lwrp_spec.rb +497 -0
  1457. data/spec/unit/mash_spec.rb +51 -0
  1458. data/spec/unit/mixin/checksum_spec.rb +41 -0
  1459. data/spec/unit/mixin/command_spec.rb +105 -0
  1460. data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -0
  1461. data/spec/unit/mixin/deep_merge_spec.rb +342 -0
  1462. data/spec/unit/mixin/deprecation_spec.rb +57 -0
  1463. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -0
  1464. data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
  1465. data/spec/unit/mixin/params_validate_spec.rb +407 -0
  1466. data/spec/unit/mixin/path_sanity_spec.rb +86 -0
  1467. data/spec/unit/mixin/powershell_type_coercions_spec.rb +72 -0
  1468. data/spec/unit/mixin/securable_spec.rb +314 -0
  1469. data/spec/unit/mixin/shell_out_spec.rb +299 -0
  1470. data/spec/unit/mixin/template_spec.rb +269 -0
  1471. data/spec/unit/mixin/unformatter_spec.rb +61 -0
  1472. data/spec/unit/mixin/uris_spec.rb +45 -0
  1473. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  1474. data/spec/unit/mixin/xml_escape_spec.rb +54 -0
  1475. data/spec/unit/monkey_patches/uri_spec.rb +34 -0
  1476. data/spec/unit/monologger_spec.rb +45 -0
  1477. data/spec/unit/node/attribute_spec.rb +1224 -0
  1478. data/spec/unit/node/immutable_collections_spec.rb +198 -0
  1479. data/spec/unit/node_map_spec.rb +155 -0
  1480. data/spec/unit/node_spec.rb +1307 -0
  1481. data/spec/unit/org_spec.rb +196 -0
  1482. data/spec/unit/platform/query_helpers_spec.rb +77 -0
  1483. data/spec/unit/platform_spec.rb +301 -0
  1484. data/spec/unit/policy_builder/expand_node_object_spec.rb +335 -0
  1485. data/spec/unit/policy_builder/policyfile_spec.rb +530 -0
  1486. data/spec/unit/policy_builder_spec.rb +26 -0
  1487. data/spec/unit/provider/breakpoint_spec.rb +54 -0
  1488. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  1489. data/spec/unit/provider/cookbook_file_spec.rb +58 -0
  1490. data/spec/unit/provider/cron/unix_spec.rb +139 -0
  1491. data/spec/unit/provider/cron_spec.rb +1010 -0
  1492. data/spec/unit/provider/deploy/revision_spec.rb +111 -0
  1493. data/spec/unit/provider/deploy/timestamped_spec.rb +40 -0
  1494. data/spec/unit/provider/deploy_spec.rb +642 -0
  1495. data/spec/unit/provider/directory_spec.rb +188 -0
  1496. data/spec/unit/provider/dsc_resource_spec.rb +84 -0
  1497. data/spec/unit/provider/dsc_script_spec.rb +174 -0
  1498. data/spec/unit/provider/env/windows_spec.rb +103 -0
  1499. data/spec/unit/provider/env_spec.rb +310 -0
  1500. data/spec/unit/provider/erl_call_spec.rb +86 -0
  1501. data/spec/unit/provider/execute_spec.rb +176 -0
  1502. data/spec/unit/provider/file/content_spec.rb +114 -0
  1503. data/spec/unit/provider/file_spec.rb +57 -0
  1504. data/spec/unit/provider/git_spec.rb +669 -0
  1505. data/spec/unit/provider/group/dscl_spec.rb +331 -0
  1506. data/spec/unit/provider/group/gpasswd_spec.rb +116 -0
  1507. data/spec/unit/provider/group/groupadd_spec.rb +174 -0
  1508. data/spec/unit/provider/group/groupmod_spec.rb +133 -0
  1509. data/spec/unit/provider/group/pw_spec.rb +138 -0
  1510. data/spec/unit/provider/group/usermod_spec.rb +115 -0
  1511. data/spec/unit/provider/group/windows_spec.rb +101 -0
  1512. data/spec/unit/provider/group_spec.rb +286 -0
  1513. data/spec/unit/provider/http_request_spec.rb +159 -0
  1514. data/spec/unit/provider/ifconfig/aix_spec.rb +181 -0
  1515. data/spec/unit/provider/ifconfig/debian_spec.rb +354 -0
  1516. data/spec/unit/provider/ifconfig/redhat_spec.rb +73 -0
  1517. data/spec/unit/provider/ifconfig_spec.rb +180 -0
  1518. data/spec/unit/provider/link_spec.rb +252 -0
  1519. data/spec/unit/provider/log_spec.rb +75 -0
  1520. data/spec/unit/provider/mdadm_spec.rb +131 -0
  1521. data/spec/unit/provider/mount/aix_spec.rb +237 -0
  1522. data/spec/unit/provider/mount/mount_spec.rb +474 -0
  1523. data/spec/unit/provider/mount/solaris_spec.rb +822 -0
  1524. data/spec/unit/provider/mount/windows_spec.rb +137 -0
  1525. data/spec/unit/provider/mount_spec.rb +193 -0
  1526. data/spec/unit/provider/ohai_spec.rb +84 -0
  1527. data/spec/unit/provider/package/aix_spec.rb +172 -0
  1528. data/spec/unit/provider/package/apt_spec.rb +386 -0
  1529. data/spec/unit/provider/package/dpkg_spec.rb +195 -0
  1530. data/spec/unit/provider/package/easy_install_spec.rb +112 -0
  1531. data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -0
  1532. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +155 -0
  1533. data/spec/unit/provider/package/freebsd/port_spec.rb +170 -0
  1534. data/spec/unit/provider/package/homebrew_spec.rb +292 -0
  1535. data/spec/unit/provider/package/ips_spec.rb +228 -0
  1536. data/spec/unit/provider/package/macports_spec.rb +203 -0
  1537. data/spec/unit/provider/package/openbsd_spec.rb +154 -0
  1538. data/spec/unit/provider/package/pacman_spec.rb +195 -0
  1539. data/spec/unit/provider/package/paludis_spec.rb +135 -0
  1540. data/spec/unit/provider/package/portage_spec.rb +310 -0
  1541. data/spec/unit/provider/package/rpm_spec.rb +205 -0
  1542. data/spec/unit/provider/package/rubygems_spec.rb +701 -0
  1543. data/spec/unit/provider/package/smartos_spec.rb +112 -0
  1544. data/spec/unit/provider/package/solaris_spec.rb +167 -0
  1545. data/spec/unit/provider/package/windows/msi_spec.rb +75 -0
  1546. data/spec/unit/provider/package/windows_spec.rb +165 -0
  1547. data/spec/unit/provider/package/yum_spec.rb +2190 -0
  1548. data/spec/unit/provider/package/zypper_spec.rb +230 -0
  1549. data/spec/unit/provider/package_spec.rb +707 -0
  1550. data/spec/unit/provider/package_spec.rbe +0 -0
  1551. data/spec/unit/provider/powershell_spec.rb +38 -0
  1552. data/spec/unit/provider/registry_key_spec.rb +283 -0
  1553. data/spec/unit/provider/remote_directory_spec.rb +222 -0
  1554. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +220 -0
  1555. data/spec/unit/provider/remote_file/content_spec.rb +253 -0
  1556. data/spec/unit/provider/remote_file/fetcher_spec.rb +94 -0
  1557. data/spec/unit/provider/remote_file/ftp_spec.rb +219 -0
  1558. data/spec/unit/provider/remote_file/http_spec.rb +303 -0
  1559. data/spec/unit/provider/remote_file/local_file_spec.rb +84 -0
  1560. data/spec/unit/provider/remote_file/network_file_spec.rb +45 -0
  1561. data/spec/unit/provider/remote_file_spec.rb +63 -0
  1562. data/spec/unit/provider/route_spec.rb +243 -0
  1563. data/spec/unit/provider/ruby_block_spec.rb +46 -0
  1564. data/spec/unit/provider/script_spec.rb +114 -0
  1565. data/spec/unit/provider/service/aix_service_spec.rb +196 -0
  1566. data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
  1567. data/spec/unit/provider/service/arch_service_spec.rb +324 -0
  1568. data/spec/unit/provider/service/debian_service_spec.rb +375 -0
  1569. data/spec/unit/provider/service/freebsd_service_spec.rb +625 -0
  1570. data/spec/unit/provider/service/gentoo_service_spec.rb +144 -0
  1571. data/spec/unit/provider/service/init_service_spec.rb +235 -0
  1572. data/spec/unit/provider/service/insserv_service_spec.rb +75 -0
  1573. data/spec/unit/provider/service/invokercd_service_spec.rb +211 -0
  1574. data/spec/unit/provider/service/macosx_spec.rb +335 -0
  1575. data/spec/unit/provider/service/openbsd_service_spec.rb +543 -0
  1576. data/spec/unit/provider/service/redhat_spec.rb +156 -0
  1577. data/spec/unit/provider/service/simple_service_spec.rb +169 -0
  1578. data/spec/unit/provider/service/solaris_smf_service_spec.rb +184 -0
  1579. data/spec/unit/provider/service/systemd_service_spec.rb +279 -0
  1580. data/spec/unit/provider/service/upstart_service_spec.rb +319 -0
  1581. data/spec/unit/provider/service/windows_spec.rb +461 -0
  1582. data/spec/unit/provider/service_spec.rb +169 -0
  1583. data/spec/unit/provider/subversion_spec.rb +280 -0
  1584. data/spec/unit/provider/template/content_spec.rb +78 -0
  1585. data/spec/unit/provider/template_spec.rb +90 -0
  1586. data/spec/unit/provider/user/dscl_spec.rb +887 -0
  1587. data/spec/unit/provider/user/pw_spec.rb +252 -0
  1588. data/spec/unit/provider/user/solaris_spec.rb +80 -0
  1589. data/spec/unit/provider/user/useradd_spec.rb +51 -0
  1590. data/spec/unit/provider/user/windows_spec.rb +185 -0
  1591. data/spec/unit/provider/user_spec.rb +466 -0
  1592. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +47 -0
  1593. data/spec/unit/provider_resolver_spec.rb +689 -0
  1594. data/spec/unit/provider_spec.rb +201 -0
  1595. data/spec/unit/pure_application_spec.rb +32 -0
  1596. data/spec/unit/recipe_spec.rb +649 -0
  1597. data/spec/unit/registry_helper_spec.rb +376 -0
  1598. data/spec/unit/resource/apt_package_spec.rb +38 -0
  1599. data/spec/unit/resource/bash_spec.rb +40 -0
  1600. data/spec/unit/resource/batch_spec.rb +49 -0
  1601. data/spec/unit/resource/breakpoint_spec.rb +47 -0
  1602. data/spec/unit/resource/chef_gem_spec.rb +161 -0
  1603. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  1604. data/spec/unit/resource/conditional_spec.rb +208 -0
  1605. data/spec/unit/resource/cookbook_file_spec.rb +89 -0
  1606. data/spec/unit/resource/cron_spec.rb +186 -0
  1607. data/spec/unit/resource/csh_spec.rb +40 -0
  1608. data/spec/unit/resource/deploy_revision_spec.rb +42 -0
  1609. data/spec/unit/resource/deploy_spec.rb +278 -0
  1610. data/spec/unit/resource/directory_spec.rb +82 -0
  1611. data/spec/unit/resource/dpkg_package_spec.rb +32 -0
  1612. data/spec/unit/resource/dsc_resource_spec.rb +85 -0
  1613. data/spec/unit/resource/dsc_script_spec.rb +130 -0
  1614. data/spec/unit/resource/easy_install_package_spec.rb +39 -0
  1615. data/spec/unit/resource/env_spec.rb +85 -0
  1616. data/spec/unit/resource/erl_call_spec.rb +81 -0
  1617. data/spec/unit/resource/execute_spec.rb +35 -0
  1618. data/spec/unit/resource/file/verification_spec.rb +111 -0
  1619. data/spec/unit/resource/file_spec.rb +130 -0
  1620. data/spec/unit/resource/freebsd_package_spec.rb +90 -0
  1621. data/spec/unit/resource/gem_package_spec.rb +42 -0
  1622. data/spec/unit/resource/git_spec.rb +50 -0
  1623. data/spec/unit/resource/group_spec.rb +157 -0
  1624. data/spec/unit/resource/homebrew_package_spec.rb +50 -0
  1625. data/spec/unit/resource/http_request_spec.rb +59 -0
  1626. data/spec/unit/resource/ifconfig_spec.rb +105 -0
  1627. data/spec/unit/resource/ips_package_spec.rb +40 -0
  1628. data/spec/unit/resource/link_spec.rb +134 -0
  1629. data/spec/unit/resource/log_spec.rb +73 -0
  1630. data/spec/unit/resource/macports_package_spec.rb +32 -0
  1631. data/spec/unit/resource/mdadm_spec.rb +102 -0
  1632. data/spec/unit/resource/mount_spec.rb +214 -0
  1633. data/spec/unit/resource/ohai_spec.rb +62 -0
  1634. data/spec/unit/resource/openbsd_package_spec.rb +49 -0
  1635. data/spec/unit/resource/package_spec.rb +93 -0
  1636. data/spec/unit/resource/pacman_package_spec.rb +32 -0
  1637. data/spec/unit/resource/perl_spec.rb +40 -0
  1638. data/spec/unit/resource/portage_package_spec.rb +38 -0
  1639. data/spec/unit/resource/powershell_spec.rb +132 -0
  1640. data/spec/unit/resource/python_spec.rb +40 -0
  1641. data/spec/unit/resource/registry_key_spec.rb +199 -0
  1642. data/spec/unit/resource/remote_directory_spec.rb +97 -0
  1643. data/spec/unit/resource/remote_file_spec.rb +202 -0
  1644. data/spec/unit/resource/resource_notification_spec.rb +170 -0
  1645. data/spec/unit/resource/route_spec.rb +107 -0
  1646. data/spec/unit/resource/rpm_package_spec.rb +46 -0
  1647. data/spec/unit/resource/ruby_block_spec.rb +61 -0
  1648. data/spec/unit/resource/ruby_spec.rb +40 -0
  1649. data/spec/unit/resource/scm_spec.rb +193 -0
  1650. data/spec/unit/resource/script_spec.rb +44 -0
  1651. data/spec/unit/resource/service_spec.rb +180 -0
  1652. data/spec/unit/resource/smartos_package_spec.rb +33 -0
  1653. data/spec/unit/resource/solaris_package_spec.rb +42 -0
  1654. data/spec/unit/resource/subversion_spec.rb +67 -0
  1655. data/spec/unit/resource/template_spec.rb +211 -0
  1656. data/spec/unit/resource/timestamped_deploy_spec.rb +33 -0
  1657. data/spec/unit/resource/user_spec.rb +133 -0
  1658. data/spec/unit/resource/windows_package_spec.rb +95 -0
  1659. data/spec/unit/resource/windows_service_spec.rb +49 -0
  1660. data/spec/unit/resource/yum_package_spec.rb +80 -0
  1661. data/spec/unit/resource_builder_spec.rb +1 -0
  1662. data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
  1663. data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
  1664. data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -0
  1665. data/spec/unit/resource_collection_spec.rb +300 -0
  1666. data/spec/unit/resource_definition_spec.rb +117 -0
  1667. data/spec/unit/resource_reporter_spec.rb +759 -0
  1668. data/spec/unit/resource_spec.rb +879 -0
  1669. data/spec/unit/rest/auth_credentials_spec.rb +328 -0
  1670. data/spec/unit/rest_spec.rb +747 -0
  1671. data/spec/unit/role_spec.rb +362 -0
  1672. data/spec/unit/run_context/cookbook_compiler_spec.rb +186 -0
  1673. data/spec/unit/run_context_spec.rb +193 -0
  1674. data/spec/unit/run_list/run_list_expansion_spec.rb +129 -0
  1675. data/spec/unit/run_list/run_list_item_spec.rb +117 -0
  1676. data/spec/unit/run_list/versioned_recipe_list_spec.rb +123 -0
  1677. data/spec/unit/run_list_spec.rb +316 -0
  1678. data/spec/unit/run_lock_spec.rb +140 -0
  1679. data/spec/unit/run_status_spec.rb +145 -0
  1680. data/spec/unit/runner_spec.rb +411 -0
  1681. data/spec/unit/scan_access_control_spec.rb +184 -0
  1682. data/spec/unit/search/query_spec.rb +267 -0
  1683. data/spec/unit/shell/model_wrapper_spec.rb +97 -0
  1684. data/spec/unit/shell/shell_ext_spec.rb +153 -0
  1685. data/spec/unit/shell/shell_session_spec.rb +196 -0
  1686. data/spec/unit/shell_out_spec.rb +18 -0
  1687. data/spec/unit/shell_spec.rb +162 -0
  1688. data/spec/unit/user_spec.rb +271 -0
  1689. data/spec/unit/util/backup_spec.rb +142 -0
  1690. data/spec/unit/util/diff_spec.rb +579 -0
  1691. data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -0
  1692. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +164 -0
  1693. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
  1694. data/spec/unit/util/dsc/resource_store.rb +76 -0
  1695. data/spec/unit/util/editor_spec.rb +152 -0
  1696. data/spec/unit/util/file_edit_spec.rb +224 -0
  1697. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
  1698. data/spec/unit/util/powershell/ps_credential_spec.rb +37 -0
  1699. data/spec/unit/util/selinux_spec.rb +172 -0
  1700. data/spec/unit/util/threaded_job_queue_spec.rb +51 -0
  1701. data/spec/unit/version/platform_spec.rb +61 -0
  1702. data/spec/unit/version_class_spec.rb +172 -0
  1703. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  1704. data/spec/unit/version_constraint_spec.rb +179 -0
  1705. data/spec/unit/windows_service_spec.rb +71 -0
  1706. data/spec/unit/workstation_config_loader_spec.rb +283 -0
  1707. data/tasks/external_tests.rb +29 -0
  1708. data/tasks/rspec.rb +86 -0
  1709. metadata +2305 -0
@@ -0,0 +1,198 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+ require "chef/node/immutable_collections"
21
+
22
+ describe Chef::Node::ImmutableMash do
23
+ before do
24
+ @data_in = {:top => {:second_level => "some value"},
25
+ "top_level_2" => %w[array of values],
26
+ :top_level_3 => [{:hash_array => 1, :hash_array_b => 2}],
27
+ :top_level_4 => {:level2 => {:key => "value"}}
28
+ }
29
+ @immutable_mash = Chef::Node::ImmutableMash.new(@data_in)
30
+ end
31
+
32
+ it "element references like regular hash" do
33
+ expect(@immutable_mash[:top][:second_level]).to eq("some value")
34
+ end
35
+
36
+ it "element references like a regular Mash" do
37
+ expect(@immutable_mash[:top_level_2]).to eq(%w[array of values])
38
+ end
39
+
40
+ it "converts Hash-like inputs into ImmutableMash's" do
41
+ expect(@immutable_mash[:top]).to be_a(Chef::Node::ImmutableMash)
42
+ end
43
+
44
+ it "converts array inputs into ImmutableArray's" do
45
+ expect(@immutable_mash[:top_level_2]).to be_a(Chef::Node::ImmutableArray)
46
+ end
47
+
48
+ it "converts arrays of hashes to ImmutableArray's of ImmutableMashes" do
49
+ expect(@immutable_mash[:top_level_3].first).to be_a(Chef::Node::ImmutableMash)
50
+ end
51
+
52
+ it "converts nested hashes to ImmutableMashes" do
53
+ expect(@immutable_mash[:top_level_4]).to be_a(Chef::Node::ImmutableMash)
54
+ expect(@immutable_mash[:top_level_4][:level2]).to be_a(Chef::Node::ImmutableMash)
55
+ end
56
+
57
+ describe "to_hash" do
58
+ before do
59
+ @copy = @immutable_mash.to_hash
60
+ end
61
+
62
+ it "converts an immutable mash to a new mutable hash" do
63
+ expect(@copy).to be_instance_of(Hash)
64
+ end
65
+
66
+ it "converts an immutable nested mash to a new mutable hash" do
67
+ expect(@copy['top_level_4']['level2']).to be_instance_of(Hash)
68
+ end
69
+
70
+ it "converts an immutable nested array to a new mutable array" do
71
+ expect(@copy['top_level_2']).to be_instance_of(Array)
72
+ end
73
+
74
+ it "should create a mash with the same content" do
75
+ expect(@copy).to eq(@immutable_mash)
76
+ end
77
+
78
+ it 'should allow mutation' do
79
+ expect { @copy['m'] = 'm' }.not_to raise_error
80
+ end
81
+
82
+ end
83
+
84
+ [
85
+ :[]=,
86
+ :clear,
87
+ :default=,
88
+ :default_proc=,
89
+ :delete,
90
+ :delete_if,
91
+ :keep_if,
92
+ :merge!,
93
+ :update,
94
+ :reject!,
95
+ :replace,
96
+ :select!,
97
+ :shift
98
+ ].each do |mutator|
99
+ it "doesn't allow mutation via `#{mutator}'" do
100
+ expect { @immutable_mash.send(mutator) }.to raise_error
101
+ end
102
+ end
103
+
104
+ it "returns a mutable version of itself when duped" do
105
+ mutable = @immutable_mash.dup
106
+ mutable[:new_key] = :value
107
+ expect(mutable[:new_key]).to eq(:value)
108
+ end
109
+
110
+ end
111
+
112
+ describe Chef::Node::ImmutableArray do
113
+
114
+ before do
115
+ @immutable_array = Chef::Node::ImmutableArray.new(%w[foo bar baz] + Array(1..3) + [nil, true, false, [ "el", 0, nil ] ])
116
+ immutable_mash = Chef::Node::ImmutableMash.new({:m => 'm'})
117
+ @immutable_nested_array = Chef::Node::ImmutableArray.new(["level1",@immutable_array, immutable_mash])
118
+ end
119
+
120
+ ##
121
+ # Note: other behaviors, such as immutibilizing input data, are tested along
122
+ # with ImmutableMash, above
123
+ ###
124
+
125
+ [
126
+ :<<,
127
+ :[]=,
128
+ :clear,
129
+ :collect!,
130
+ :compact!,
131
+ :default=,
132
+ :default_proc=,
133
+ :delete,
134
+ :delete_at,
135
+ :delete_if,
136
+ :fill,
137
+ :flatten!,
138
+ :insert,
139
+ :keep_if,
140
+ :map!,
141
+ :merge!,
142
+ :pop,
143
+ :push,
144
+ :update,
145
+ :reject!,
146
+ :reverse!,
147
+ :replace,
148
+ :select!,
149
+ :shift,
150
+ :slice!,
151
+ :sort!,
152
+ :sort_by!,
153
+ :uniq!,
154
+ :unshift
155
+ ].each do |mutator|
156
+ it "does not allow mutation via `#{mutator}" do
157
+ expect { @immutable_array.send(mutator)}.to raise_error
158
+ end
159
+ end
160
+
161
+ it "can be duped even if some elements can't" do
162
+ @immutable_array.dup
163
+ end
164
+
165
+ it "returns a mutable version of itself when duped" do
166
+ mutable = @immutable_array.dup
167
+ mutable[0] = :value
168
+ expect(mutable[0]).to eq(:value)
169
+ end
170
+
171
+ describe "to_a" do
172
+ before do
173
+ @copy = @immutable_nested_array.to_a
174
+ end
175
+
176
+ it "converts an immutable array to a new mutable array" do
177
+ expect(@copy).to be_instance_of(Array)
178
+ end
179
+
180
+ it "converts an immutable nested array to a new mutable array" do
181
+ expect(@copy[1]).to be_instance_of(Array)
182
+ end
183
+
184
+ it "converts an immutable nested mash to a new mutable hash" do
185
+ expect(@copy[2]).to be_instance_of(Hash)
186
+ end
187
+
188
+ it "should create an array with the same content" do
189
+ expect(@copy).to eq(@immutable_nested_array)
190
+ end
191
+
192
+ it 'should allow mutation' do
193
+ expect { @copy << 'm' }.not_to raise_error
194
+ end
195
+ end
196
+
197
+ end
198
+
@@ -0,0 +1,155 @@
1
+ #
2
+ # Author:: Lamont Granquist (<lamont@chef.io>)
3
+ # Copyright:: Copyright (c) 2014 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+ require 'chef/node_map'
21
+
22
+ describe Chef::NodeMap do
23
+
24
+ let(:node_map) { Chef::NodeMap.new }
25
+
26
+ let(:node) { Chef::Node.new }
27
+
28
+ describe "with a bad filter name" do
29
+ it "should raise an error" do
30
+ expect{ node_map.set(node, :thing, on_platform_family: 'rhel') }.to raise_error
31
+ end
32
+ end
33
+
34
+ describe "when no matchers are set at all" do
35
+ before do
36
+ node_map.set(:thing, :foo)
37
+ end
38
+
39
+ it "returns the value" do
40
+ expect(node_map.get(node, :thing)).to eql(:foo)
41
+ end
42
+
43
+ it "returns nil for keys that do not exist" do
44
+ expect(node_map.get(node, :other_thing)).to eql(nil)
45
+ end
46
+ end
47
+
48
+ describe "filtering by os" do
49
+ before do
50
+ node_map.set(:thing, :foo, os: ["windows"])
51
+ node_map.set(:thing, :bar, os: "linux")
52
+ end
53
+ it "returns the correct value for windows" do
54
+ allow(node).to receive(:[]).with(:os).and_return("windows")
55
+ expect(node_map.get(node, :thing)).to eql(:foo)
56
+ end
57
+ it "returns the correct value for linux" do
58
+ allow(node).to receive(:[]).with(:os).and_return("linux")
59
+ expect(node_map.get(node, :thing)).to eql(:bar)
60
+ end
61
+ it "returns nil for a non-matching os" do
62
+ allow(node).to receive(:[]).with(:os).and_return("freebsd")
63
+ expect(node_map.get(node, :thing)).to eql(nil)
64
+ end
65
+ end
66
+
67
+ describe "rejecting an os" do
68
+ before do
69
+ node_map.set(:thing, :foo, os: "!windows")
70
+ end
71
+ it "returns nil for windows" do
72
+ allow(node).to receive(:[]).with(:os).and_return("windows")
73
+ expect(node_map.get(node, :thing)).to eql(nil)
74
+ end
75
+ it "returns the correct value for linux" do
76
+ allow(node).to receive(:[]).with(:os).and_return("linux")
77
+ expect(node_map.get(node, :thing)).to eql(:foo)
78
+ end
79
+ end
80
+
81
+ describe "filtering by os and platform_family" do
82
+ before do
83
+ node_map.set(:thing, :bar, os: "linux", platform_family: "rhel")
84
+ end
85
+
86
+ it "returns the correct value when both match" do
87
+ allow(node).to receive(:[]).with(:os).and_return("linux")
88
+ allow(node).to receive(:[]).with(:platform_family).and_return("rhel")
89
+ expect(node_map.get(node, :thing)).to eql(:bar)
90
+ end
91
+
92
+ it "returns nil for a non-matching os" do
93
+ allow(node).to receive(:[]).with(:os).and_return("freebsd")
94
+ expect(node_map.get(node, :thing)).to eql(nil)
95
+ end
96
+
97
+ it "returns nil when the platform_family does not match" do
98
+ allow(node).to receive(:[]).with(:os).and_return("linux")
99
+ allow(node).to receive(:[]).with(:platform_family).and_return("debian")
100
+ expect(node_map.get(node, :thing)).to eql(nil)
101
+ end
102
+ end
103
+
104
+ describe "with a block doing platform_version checks" do
105
+ before do
106
+ node_map.set(:thing, :foo, platform_family: "rhel") do |node|
107
+ node[:platform_version].to_i >= 7
108
+ end
109
+ end
110
+
111
+ it "returns the value when the node matches" do
112
+ allow(node).to receive(:[]).with(:platform_family).and_return("rhel")
113
+ allow(node).to receive(:[]).with(:platform_version).and_return("7.0")
114
+ expect(node_map.get(node, :thing)).to eql(:foo)
115
+ end
116
+
117
+ it "returns nil when the block does not match" do
118
+ allow(node).to receive(:[]).with(:platform_family).and_return("rhel")
119
+ allow(node).to receive(:[]).with(:platform_version).and_return("6.4")
120
+ expect(node_map.get(node, :thing)).to eql(nil)
121
+ end
122
+
123
+ it "returns nil when the platform_family filter does not match" do
124
+ allow(node).to receive(:[]).with(:platform_family).and_return("debian")
125
+ allow(node).to receive(:[]).with(:platform_version).and_return("7.0")
126
+ expect(node_map.get(node, :thing)).to eql(nil)
127
+ end
128
+
129
+ it "returns nil when both do not match" do
130
+ allow(node).to receive(:[]).with(:platform_family).and_return("debian")
131
+ allow(node).to receive(:[]).with(:platform_version).and_return("6.0")
132
+ expect(node_map.get(node, :thing)).to eql(nil)
133
+ end
134
+ end
135
+
136
+ describe "resource back-compat testing" do
137
+ it "should handle :on_platforms => :all" do
138
+ node_map.set(:chef_gem, :foo, :on_platforms => :all)
139
+ allow(node).to receive(:[]).with(:platform).and_return("windows")
140
+ expect(node_map.get(node, :chef_gem)).to eql(:foo)
141
+ end
142
+ it "should handle :on_platforms => [ 'windows' ]" do
143
+ node_map.set(:dsc_script, :foo, :on_platforms => [ 'windows' ])
144
+ allow(node).to receive(:[]).with(:platform).and_return("windows")
145
+ expect(node_map.get(node, :dsc_script)).to eql(:foo)
146
+ end
147
+ it "should handle :on_platform => :all" do
148
+ node_map.set(:link, :foo, :on_platform => :all)
149
+ allow(node).to receive(:[]).with(:platform).and_return("windows")
150
+ expect(node_map.get(node, :link)).to eql(:foo)
151
+ end
152
+ end
153
+
154
+ end
155
+
@@ -0,0 +1,1307 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+ require 'ostruct'
21
+
22
+ describe Chef::Node do
23
+
24
+ let(:node) { Chef::Node.new() }
25
+ let(:platform_introspector) { node }
26
+
27
+ it_behaves_like "a platform introspector"
28
+
29
+ it "creates a node and assigns it a name" do
30
+ node = Chef::Node.build('solo-node')
31
+ expect(node.name).to eq('solo-node')
32
+ end
33
+
34
+ it "should validate the name of the node" do
35
+ expect{Chef::Node.build('solo node')}.to raise_error(Chef::Exceptions::ValidationFailed)
36
+ end
37
+
38
+ it "should be sortable" do
39
+ n1 = Chef::Node.build('alpha')
40
+ n2 = Chef::Node.build('beta')
41
+ n3 = Chef::Node.build('omega')
42
+ expect([n3, n1, n2].sort).to eq([n1, n2, n3])
43
+ end
44
+
45
+ describe "when the node does not exist on the server" do
46
+ before do
47
+ response = OpenStruct.new(:code => '404')
48
+ exception = Net::HTTPServerException.new("404 not found", response)
49
+ allow(Chef::Node).to receive(:load).and_raise(exception)
50
+ node.name("created-node")
51
+ end
52
+
53
+ it "creates a new node for find_or_create" do
54
+ allow(Chef::Node).to receive(:new).and_return(node)
55
+ expect(node).to receive(:create).and_return(node)
56
+ node = Chef::Node.find_or_create("created-node")
57
+ expect(node.name).to eq('created-node')
58
+ expect(node).to equal(node)
59
+ end
60
+ end
61
+
62
+ describe "when the node exists on the server" do
63
+ before do
64
+ node.name('existing-node')
65
+ allow(Chef::Node).to receive(:load).and_return(node)
66
+ end
67
+
68
+ it "loads the node via the REST API for find_or_create" do
69
+ expect(Chef::Node.find_or_create('existing-node')).to equal(node)
70
+ end
71
+ end
72
+
73
+ describe "run_state" do
74
+ it "is an empty hash" do
75
+ expect(node.run_state).to respond_to(:keys)
76
+ expect(node.run_state).to be_empty
77
+ end
78
+ end
79
+
80
+ describe "initialize" do
81
+ it "should default to the '_default' chef_environment" do
82
+ n = Chef::Node.new
83
+ expect(n.chef_environment).to eq('_default')
84
+ end
85
+ end
86
+
87
+ describe "name" do
88
+ it "should allow you to set a name with name(something)" do
89
+ expect { node.name("latte") }.not_to raise_error
90
+ end
91
+
92
+ it "should return the name with name()" do
93
+ node.name("latte")
94
+ expect(node.name).to eql("latte")
95
+ end
96
+
97
+ it "should always have a string for name" do
98
+ expect { node.name(Hash.new) }.to raise_error(ArgumentError)
99
+ end
100
+
101
+ it "cannot be blank" do
102
+ expect { node.name("")}.to raise_error(Chef::Exceptions::ValidationFailed)
103
+ end
104
+
105
+ it "should not accept name doesn't match /^[\-[:alnum:]_:.]+$/" do
106
+ expect { node.name("space in it")}.to raise_error(Chef::Exceptions::ValidationFailed)
107
+ end
108
+ end
109
+
110
+ describe "chef_environment" do
111
+ it "should set an environment with chef_environment(something)" do
112
+ expect { node.chef_environment("latte") }.not_to raise_error
113
+ end
114
+
115
+ it "should return the chef_environment with chef_environment()" do
116
+ node.chef_environment("latte")
117
+ expect(node.chef_environment).to eq("latte")
118
+ end
119
+
120
+ it "should disallow non-strings" do
121
+ expect { node.chef_environment(Hash.new) }.to raise_error(ArgumentError)
122
+ expect { node.chef_environment(42) }.to raise_error(ArgumentError)
123
+ end
124
+
125
+ it "cannot be blank" do
126
+ expect { node.chef_environment("")}.to raise_error(Chef::Exceptions::ValidationFailed)
127
+ end
128
+ end
129
+
130
+ describe "attributes" do
131
+ it "should have attributes" do
132
+ expect(node.attribute).to be_a_kind_of(Hash)
133
+ end
134
+
135
+ it "should allow attributes to be accessed by name or symbol directly on node[]" do
136
+ node.default["locust"] = "something"
137
+ expect(node[:locust]).to eql("something")
138
+ expect(node["locust"]).to eql("something")
139
+ end
140
+
141
+ it "should return nil if it cannot find an attribute with node[]" do
142
+ expect(node["secret"]).to eql(nil)
143
+ end
144
+
145
+ it "does not allow you to set an attribute via node[]=" do
146
+ expect { node["secret"] = "shush" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
147
+ end
148
+
149
+ it "should allow you to query whether an attribute exists with attribute?" do
150
+ node.default["locust"] = "something"
151
+ expect(node.attribute?("locust")).to eql(true)
152
+ expect(node.attribute?("no dice")).to eql(false)
153
+ end
154
+
155
+ it "should let you go deep with attribute?" do
156
+ node.set["battles"]["people"]["wonkey"] = true
157
+ expect(node["battles"]["people"].attribute?("wonkey")).to eq(true)
158
+ expect(node["battles"]["people"].attribute?("snozzberry")).to eq(false)
159
+ end
160
+
161
+ it "does not allow you to set an attribute via method_missing" do
162
+ expect { node.sunshine = "is bright"}.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
163
+ end
164
+
165
+ it "should allow you get get an attribute via method_missing" do
166
+ node.default.sunshine = "is bright"
167
+ expect(node.sunshine).to eql("is bright")
168
+ end
169
+
170
+ describe "normal attributes" do
171
+ it "should allow you to set an attribute with set, without pre-declaring a hash" do
172
+ node.set[:snoopy][:is_a_puppy] = true
173
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
174
+ end
175
+
176
+ it "should allow you to set an attribute with set_unless" do
177
+ node.set_unless[:snoopy][:is_a_puppy] = false
178
+ expect(node[:snoopy][:is_a_puppy]).to eq(false)
179
+ end
180
+
181
+ it "should not allow you to set an attribute with set_unless if it already exists" do
182
+ node.set[:snoopy][:is_a_puppy] = true
183
+ node.set_unless[:snoopy][:is_a_puppy] = false
184
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
185
+ end
186
+
187
+ it "should allow you to set a value after a set_unless" do
188
+ # this tests for set_unless_present state bleeding between statements CHEF-3806
189
+ node.set_unless[:snoopy][:is_a_puppy] = false
190
+ node.set[:snoopy][:is_a_puppy] = true
191
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
192
+ end
193
+
194
+ it "should let you set a value after a 'dangling' set_unless" do
195
+ # this tests for set_unless_present state bleeding between statements CHEF-3806
196
+ node.set[:snoopy][:is_a_puppy] = "what"
197
+ node.set_unless[:snoopy][:is_a_puppy]
198
+ node.set[:snoopy][:is_a_puppy] = true
199
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
200
+ end
201
+
202
+ it "auto-vivifies attributes created via method syntax" do
203
+ node.set.fuu.bahrr.baz = "qux"
204
+ expect(node.fuu.bahrr.baz).to eq("qux")
205
+ end
206
+
207
+ it "should let you use tag as a convience method for the tags attribute" do
208
+ node.normal['tags'] = ['one', 'two']
209
+ node.tag('three', 'four')
210
+ expect(node['tags']).to eq(['one', 'two', 'three', 'four'])
211
+ end
212
+ end
213
+
214
+ describe "default attributes" do
215
+ it "should be set with default, without pre-declaring a hash" do
216
+ node.default[:snoopy][:is_a_puppy] = true
217
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
218
+ end
219
+
220
+ it "should allow you to set with default_unless without pre-declaring a hash" do
221
+ node.default_unless[:snoopy][:is_a_puppy] = false
222
+ expect(node[:snoopy][:is_a_puppy]).to eq(false)
223
+ end
224
+
225
+ it "should not allow you to set an attribute with default_unless if it already exists" do
226
+ node.default[:snoopy][:is_a_puppy] = true
227
+ node.default_unless[:snoopy][:is_a_puppy] = false
228
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
229
+ end
230
+
231
+ it "should allow you to set a value after a default_unless" do
232
+ # this tests for set_unless_present state bleeding between statements CHEF-3806
233
+ node.default_unless[:snoopy][:is_a_puppy] = false
234
+ node.default[:snoopy][:is_a_puppy] = true
235
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
236
+ end
237
+
238
+ it "should allow you to set a value after a 'dangling' default_unless" do
239
+ # this tests for set_unless_present state bleeding between statements CHEF-3806
240
+ node.default[:snoopy][:is_a_puppy] = "what"
241
+ node.default_unless[:snoopy][:is_a_puppy]
242
+ node.default[:snoopy][:is_a_puppy] = true
243
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
244
+ end
245
+
246
+ it "auto-vivifies attributes created via method syntax" do
247
+ node.default.fuu.bahrr.baz = "qux"
248
+ expect(node.fuu.bahrr.baz).to eq("qux")
249
+ end
250
+ end
251
+
252
+ describe "override attributes" do
253
+ it "should be set with override, without pre-declaring a hash" do
254
+ node.override[:snoopy][:is_a_puppy] = true
255
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
256
+ end
257
+
258
+ it "should allow you to set with override_unless without pre-declaring a hash" do
259
+ node.override_unless[:snoopy][:is_a_puppy] = false
260
+ expect(node[:snoopy][:is_a_puppy]).to eq(false)
261
+ end
262
+
263
+ it "should not allow you to set an attribute with override_unless if it already exists" do
264
+ node.override[:snoopy][:is_a_puppy] = true
265
+ node.override_unless[:snoopy][:is_a_puppy] = false
266
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
267
+ end
268
+
269
+ it "should allow you to set a value after an override_unless" do
270
+ # this tests for set_unless_present state bleeding between statements CHEF-3806
271
+ node.override_unless[:snoopy][:is_a_puppy] = false
272
+ node.override[:snoopy][:is_a_puppy] = true
273
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
274
+ end
275
+
276
+ it "should allow you to set a value after a 'dangling' override_unless" do
277
+ # this tests for set_unless_present state bleeding between statements CHEF-3806
278
+ node.override_unless[:snoopy][:is_a_puppy] = "what"
279
+ node.override_unless[:snoopy][:is_a_puppy]
280
+ node.override[:snoopy][:is_a_puppy] = true
281
+ expect(node[:snoopy][:is_a_puppy]).to eq(true)
282
+ end
283
+
284
+ it "auto-vivifies attributes created via method syntax" do
285
+ node.override.fuu.bahrr.baz = "qux"
286
+ expect(node.fuu.bahrr.baz).to eq("qux")
287
+ end
288
+ end
289
+
290
+ describe "globally deleting attributes" do
291
+ context "with hash values" do
292
+ before do
293
+ node.role_default["mysql"]["server"]["port"] = 1234
294
+ node.normal["mysql"]["server"]["port"] = 2345
295
+ node.override["mysql"]["server"]["port"] = 3456
296
+ end
297
+
298
+ it "deletes all the values and returns the value with the highest precidence" do
299
+ expect( node.rm("mysql", "server", "port") ).to eql(3456)
300
+ expect( node["mysql"]["server"]["port"] ).to be_nil
301
+ expect( node["mysql"]["server"] ).to eql({})
302
+ end
303
+
304
+ it "deletes nested things correctly" do
305
+ node.default["mysql"]["client"]["client_setting"] = "foo"
306
+ expect( node.rm("mysql", "server") ).to eql( {"port" => 3456} )
307
+ expect( node["mysql"] ).to eql( { "client" => { "client_setting" => "foo" } } )
308
+ end
309
+
310
+ it "returns nil if the node attribute does not exist" do
311
+ expect( node.rm("no", "such", "thing") ).to be_nil
312
+ end
313
+
314
+ it "can delete the entire tree" do
315
+ expect( node.rm("mysql") ).to eql({"server"=>{"port"=>3456}})
316
+ end
317
+ end
318
+
319
+ context "when trying to delete through a thing that isn't an array-like or hash-like object" do
320
+ before do
321
+ node.default["mysql"] = true
322
+ end
323
+
324
+ it "returns nil when you're two levels deeper" do
325
+ expect( node.rm("mysql", "server", "port") ).to eql(nil)
326
+ end
327
+
328
+ it "returns nil when you're one level deeper" do
329
+ expect( node.rm("mysql", "server") ).to eql(nil)
330
+ end
331
+
332
+ it "correctly deletes at the top level" do
333
+ expect( node.rm("mysql") ).to eql(true)
334
+ end
335
+ end
336
+
337
+ context "with array indexes" do
338
+ before do
339
+ node.role_default["mysql"]["server"][0]["port"] = 1234
340
+ node.normal["mysql"]["server"][0]["port"] = 2345
341
+ node.override["mysql"]["server"][0]["port"] = 3456
342
+ node.override["mysql"]["server"][1]["port"] = 3456
343
+ end
344
+
345
+ it "deletes the array element" do
346
+ expect( node.rm("mysql", "server", 0, "port") ).to eql(3456)
347
+ expect( node["mysql"]["server"][0]["port"] ).to be_nil
348
+ expect( node["mysql"]["server"][1]["port"] ).to eql(3456)
349
+ end
350
+ end
351
+
352
+ context "with real arrays" do
353
+ before do
354
+ node.role_default["mysql"]["server"] = [ {
355
+ "port" => 1234,
356
+ } ]
357
+ node.normal["mysql"]["server"] = [ {
358
+ "port" => 2345,
359
+ } ]
360
+ node.override["mysql"]["server"] = [ {
361
+ "port" => 3456,
362
+ } ]
363
+ end
364
+
365
+ it "deletes the array element" do
366
+ expect( node.rm("mysql", "server", 0, "port") ).to eql(3456)
367
+ expect( node["mysql"]["server"][0]["port"] ).to be_nil
368
+ end
369
+
370
+ it "does not have a horrible error message when mistaking arrays for hashes" do
371
+ expect { node.rm("mysql", "server", "port") }.to raise_error(TypeError, "Wrong type in index of attribute (did you use a Hash index on an Array?)")
372
+ end
373
+ end
374
+ end
375
+
376
+ describe "granular deleting attributes" do
377
+ context "when only defaults exist" do
378
+ before do
379
+ node.role_default["mysql"]["server"]["port"] = 1234
380
+ node.default["mysql"]["server"]["port"] = 2345
381
+ node.force_default["mysql"]["server"]["port"] = 3456
382
+ end
383
+
384
+ it "returns the deleted values" do
385
+ expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
386
+ end
387
+
388
+ it "returns nil for the combined attribues" do
389
+ expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
390
+ expect( node["mysql"]["server"]["port"] ).to eql(nil)
391
+ end
392
+
393
+ it "returns an empty hash for the default attrs" do
394
+ expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
395
+ # this auto-vivifies, should it?
396
+ expect( node.default_attrs["mysql"]["server"]["port"] ).to eql({})
397
+ end
398
+
399
+ it "returns an empty hash after the last key is deleted" do
400
+ expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
401
+ expect( node["mysql"]["server"] ).to eql({})
402
+ end
403
+ end
404
+
405
+ context "when trying to delete through a thing that isn't an array-like or hash-like object" do
406
+ before do
407
+ node.default["mysql"] = true
408
+ end
409
+
410
+ it "returns nil when you're two levels deeper" do
411
+ expect( node.rm_default("mysql", "server", "port") ).to eql(nil)
412
+ end
413
+
414
+ it "returns nil when you're one level deeper" do
415
+ expect( node.rm_default("mysql", "server") ).to eql(nil)
416
+ end
417
+
418
+ it "correctly deletes at the top level" do
419
+ expect( node.rm_default("mysql") ).to eql(true)
420
+ end
421
+ end
422
+
423
+ context "when a higher precedence exists" do
424
+ before do
425
+ node.role_default["mysql"]["server"]["port"] = 1234
426
+ node.default["mysql"]["server"]["port"] = 2345
427
+ node.force_default["mysql"]["server"]["port"] = 3456
428
+
429
+ node.override["mysql"]["server"]["port"] = 9999
430
+ end
431
+
432
+ it "returns the deleted values" do
433
+ expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
434
+ end
435
+
436
+ it "returns the higher precedence values after the delete" do
437
+ expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
438
+ expect( node["mysql"]["server"]["port"] ).to eql(9999)
439
+ end
440
+
441
+ it "returns an empty has for the default attrs" do
442
+ expect( node.rm_default("mysql", "server", "port") ).to eql(3456)
443
+ # this auto-vivifies, should it?
444
+ expect( node.default_attrs["mysql"]["server"]["port"] ).to eql({})
445
+ end
446
+ end
447
+
448
+ context "when a lower precedence exists" do
449
+ before do
450
+ node.default["mysql"]["server"]["port"] = 2345
451
+ node.override["mysql"]["server"]["port"] = 9999
452
+ node.role_override["mysql"]["server"]["port"] = 9876
453
+ node.force_override["mysql"]["server"]["port"] = 6669
454
+ end
455
+
456
+ it "returns the deleted values" do
457
+ expect( node.rm_override("mysql", "server", "port") ).to eql(6669)
458
+ end
459
+
460
+ it "returns the lower precedence levels after the delete" do
461
+ expect( node.rm_override("mysql", "server", "port") ).to eql(6669)
462
+ expect( node["mysql"]["server"]["port"] ).to eql(2345)
463
+ end
464
+
465
+ it "returns an empty has for the override attrs" do
466
+ expect( node.rm_override("mysql", "server", "port") ).to eql(6669)
467
+ # this auto-vivifies, should it?
468
+ expect( node.override_attrs["mysql"]["server"]["port"] ).to eql({})
469
+ end
470
+ end
471
+
472
+ it "rm_default returns nil on deleting non-existent values" do
473
+ expect( node.rm_default("no", "such", "thing") ).to be_nil
474
+ end
475
+
476
+ it "rm_normal returns nil on deleting non-existent values" do
477
+ expect( node.rm_normal("no", "such", "thing") ).to be_nil
478
+ end
479
+
480
+ it "rm_override returns nil on deleting non-existent values" do
481
+ expect( node.rm_override("no", "such", "thing") ).to be_nil
482
+ end
483
+ end
484
+
485
+ describe "granular replacing attributes" do
486
+ it "removes everything at the level of the last key" do
487
+ node.default["mysql"]["server"]["port"] = 2345
488
+
489
+ node.default!["mysql"]["server"] = { "data_dir" => "/my_raid_volume/lib/mysql" }
490
+
491
+ expect( node["mysql"]["server"] ).to eql({ "data_dir" => "/my_raid_volume/lib/mysql" })
492
+ end
493
+
494
+ it "replaces a value at the cookbook sub-level of the atributes only" do
495
+ node.default["mysql"]["server"]["port"] = 2345
496
+ node.default["mysql"]["server"]["service_name"] = "fancypants-sql"
497
+ node.role_default["mysql"]["server"]["port"] = 1234
498
+ node.force_default["mysql"]["server"]["port"] = 3456
499
+
500
+ node.default!["mysql"]["server"] = { "data_dir" => "/my_raid_volume/lib/mysql" }
501
+
502
+ expect( node["mysql"]["server"]["port"] ).to eql(3456)
503
+ expect( node["mysql"]["server"]["service_name"] ).to be_nil
504
+ expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
505
+ expect( node["mysql"]["server"] ).to eql({ "port" => 3456, "data_dir" => "/my_raid_volume/lib/mysql" })
506
+ end
507
+
508
+ it "higher precedence values aren't removed" do
509
+ node.role_default["mysql"]["server"]["port"] = 1234
510
+ node.default["mysql"]["server"]["port"] = 2345
511
+ node.force_default["mysql"]["server"]["port"] = 3456
512
+ node.override["mysql"]["server"]["service_name"] = "fancypants-sql"
513
+
514
+ node.default!["mysql"]["server"] = { "data_dir" => "/my_raid_volume/lib/mysql" }
515
+
516
+ expect( node["mysql"]["server"]["port"] ).to eql(3456)
517
+ expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
518
+ expect( node["mysql"]["server"] ).to eql({ "service_name" => "fancypants-sql", "port" => 3456, "data_dir" => "/my_raid_volume/lib/mysql" })
519
+ end
520
+ end
521
+
522
+ describe "granular force replacing attributes" do
523
+ it "removes everything at the level of the last key" do
524
+ node.force_default["mysql"]["server"]["port"] = 2345
525
+
526
+ node.force_default!["mysql"]["server"] = {
527
+ "data_dir" => "/my_raid_volume/lib/mysql",
528
+ }
529
+
530
+ expect( node["mysql"]["server"] ).to eql({
531
+ "data_dir" => "/my_raid_volume/lib/mysql",
532
+ })
533
+ end
534
+
535
+ it "removes all values from the precedence level when setting" do
536
+ node.role_default["mysql"]["server"]["port"] = 1234
537
+ node.default["mysql"]["server"]["port"] = 2345
538
+ node.force_default["mysql"]["server"]["port"] = 3456
539
+
540
+ node.force_default!["mysql"]["server"] = {
541
+ "data_dir" => "/my_raid_volume/lib/mysql",
542
+ }
543
+
544
+ expect( node["mysql"]["server"]["port"] ).to be_nil
545
+ expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
546
+ expect( node["mysql"]["server"] ).to eql({
547
+ "data_dir" => "/my_raid_volume/lib/mysql",
548
+ })
549
+ end
550
+
551
+ it "higher precedence levels are not removed" do
552
+ node.role_default["mysql"]["server"]["port"] = 1234
553
+ node.default["mysql"]["server"]["port"] = 2345
554
+ node.force_default["mysql"]["server"]["port"] = 3456
555
+ node.override["mysql"]["server"]["service_name"] = "fancypants-sql"
556
+
557
+ node.force_default!["mysql"]["server"] = {
558
+ "data_dir" => "/my_raid_volume/lib/mysql",
559
+ }
560
+
561
+ expect( node["mysql"]["server"]["port"] ).to be_nil
562
+ expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
563
+ expect( node["mysql"]["server"] ).to eql({
564
+ "service_name" => "fancypants-sql",
565
+ "data_dir" => "/my_raid_volume/lib/mysql",
566
+ })
567
+ end
568
+
569
+ it "will autovivify" do
570
+ node.force_default!["mysql"]["server"] = {
571
+ "data_dir" => "/my_raid_volume/lib/mysql",
572
+ }
573
+ expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
574
+ end
575
+
576
+ it "lower precedence levels aren't removed" do
577
+ node.role_override["mysql"]["server"]["port"] = 1234
578
+ node.override["mysql"]["server"]["port"] = 2345
579
+ node.force_override["mysql"]["server"]["port"] = 3456
580
+ node.default["mysql"]["server"]["service_name"] = "fancypants-sql"
581
+
582
+ node.force_override!["mysql"]["server"] = {
583
+ "data_dir" => "/my_raid_volume/lib/mysql",
584
+ }
585
+
586
+ expect( node["mysql"]["server"]["port"] ).to be_nil
587
+ expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
588
+ expect( node["mysql"]["server"] ).to eql({
589
+ "service_name" => "fancypants-sql",
590
+ "data_dir" => "/my_raid_volume/lib/mysql",
591
+ })
592
+ end
593
+
594
+ it "when overwriting a non-hash/array" do
595
+ node.override["mysql"] = false
596
+ node.force_override["mysql"] = true
597
+ node.force_override!["mysql"]["server"] = {
598
+ "data_dir" => "/my_raid_volume/lib/mysql",
599
+ }
600
+ expect( node["mysql"]["server"]["data_dir"] ).to eql("/my_raid_volume/lib/mysql")
601
+ end
602
+
603
+ it "when overwriting an array with a hash" do
604
+ node.force_override["mysql"][0] = true
605
+ node.force_override!["mysql"]["server"] = {
606
+ "data_dir" => "/my_raid_volume/lib/mysql",
607
+ }
608
+ expect( node["mysql"]["server"] ).to eql({
609
+ "data_dir" => "/my_raid_volume/lib/mysql",
610
+ })
611
+ end
612
+ end
613
+
614
+ # In Chef-12.0 there is a deep_merge cache on the top level attribute which had a bug
615
+ # where it cached node[:foo] separate from node['foo']. These tests exercise those edge conditions.
616
+ #
617
+ # https://github.com/opscode/chef/issues/2700
618
+ # https://github.com/opscode/chef/issues/2712
619
+ # https://github.com/opscode/chef/issues/2745
620
+ #
621
+ describe "deep merge attribute cache edge conditions" do
622
+ it "does not error with complicated attribute substitution" do
623
+ node.default['chef_attribute_hell']['attr1'] = "attribute1"
624
+ node.default['chef_attribute_hell']['attr2'] = "#{node.chef_attribute_hell.attr1}/attr2"
625
+ expect { node.default['chef_attribute_hell']['attr3'] = "#{node.chef_attribute_hell.attr2}/attr3" }.not_to raise_error
626
+ end
627
+
628
+ it "caches both strings and symbols correctly" do
629
+ node.force_default[:solr][:version] = '4.10.2'
630
+ node.force_default[:solr][:data_dir] = "/opt/solr-#{node['solr'][:version]}/example/solr"
631
+ node.force_default[:solr][:xms] = "512M"
632
+ expect(node[:solr][:xms]).to eql("512M")
633
+ expect(node['solr'][:xms]).to eql("512M")
634
+ end
635
+
636
+ it "method interpolation syntax also works" do
637
+ node.default['passenger']['version'] = '4.0.57'
638
+ node.default['passenger']['root_path'] = "passenger-#{node['passenger']['version']}"
639
+ node.default['passenger']['root_path_2'] = "passenger-#{node.passenger['version']}"
640
+ expect(node['passenger']['root_path_2']).to eql("passenger-4.0.57")
641
+ expect(node[:passenger]['root_path_2']).to eql("passenger-4.0.57")
642
+ end
643
+ end
644
+
645
+ it "should raise an ArgumentError if you ask for an attribute that doesn't exist via method_missing" do
646
+ expect { node.sunshine }.to raise_error(NoMethodError)
647
+ end
648
+
649
+ it "should allow you to iterate over attributes with each_attribute" do
650
+ node.default.sunshine = "is bright"
651
+ node.default.canada = "is a nice place"
652
+ seen_attributes = Hash.new
653
+ node.each_attribute do |a,v|
654
+ seen_attributes[a] = v
655
+ end
656
+ expect(seen_attributes).to have_key("sunshine")
657
+ expect(seen_attributes).to have_key("canada")
658
+ expect(seen_attributes["sunshine"]).to eq("is bright")
659
+ expect(seen_attributes["canada"]).to eq("is a nice place")
660
+ end
661
+ end
662
+
663
+ describe "consuming json" do
664
+
665
+ before do
666
+ @ohai_data = {:platform => 'foo', :platform_version => 'bar'}
667
+ end
668
+
669
+ it "consumes the run list portion of a collection of attributes and returns the remainder" do
670
+ attrs = {"run_list" => [ "role[base]", "recipe[chef::server]" ], "foo" => "bar"}
671
+ expect(node.consume_run_list(attrs)).to eq({"foo" => "bar"})
672
+ expect(node.run_list).to eq([ "role[base]", "recipe[chef::server]" ])
673
+ end
674
+
675
+ it "should overwrites the run list with the run list it consumes" do
676
+ node.consume_run_list "recipes" => [ "one", "two" ]
677
+ node.consume_run_list "recipes" => [ "three" ]
678
+ expect(node.run_list).to eq([ "three" ])
679
+ end
680
+
681
+ it "should not add duplicate recipes from the json attributes" do
682
+ node.run_list << "one"
683
+ node.consume_run_list "recipes" => [ "one", "two", "three" ]
684
+ expect(node.run_list).to eq([ "one", "two", "three" ])
685
+ end
686
+
687
+ it "doesn't change the run list if no run_list is specified in the json" do
688
+ node.run_list << "role[database]"
689
+ node.consume_run_list "foo" => "bar"
690
+ expect(node.run_list).to eq(["role[database]"])
691
+ end
692
+
693
+ it "raises an exception if you provide both recipe and run_list attributes, since this is ambiguous" do
694
+ expect { node.consume_run_list "recipes" => "stuff", "run_list" => "other_stuff" }.to raise_error(Chef::Exceptions::AmbiguousRunlistSpecification)
695
+ end
696
+
697
+ it "should add json attributes to the node" do
698
+ node.consume_external_attrs(@ohai_data, {"one" => "two", "three" => "four"})
699
+ expect(node.one).to eql("two")
700
+ expect(node.three).to eql("four")
701
+ end
702
+
703
+ it "should set the tags attribute to an empty array if it is not already defined" do
704
+ node.consume_external_attrs(@ohai_data, {})
705
+ expect(node.tags).to eql([])
706
+ end
707
+
708
+ it "should not set the tags attribute to an empty array if it is already defined" do
709
+ node.normal[:tags] = [ "radiohead" ]
710
+ node.consume_external_attrs(@ohai_data, {})
711
+ expect(node.tags).to eql([ "radiohead" ])
712
+ end
713
+
714
+ it "deep merges attributes instead of overwriting them" do
715
+ node.consume_external_attrs(@ohai_data, "one" => {"two" => {"three" => "four"}})
716
+ expect(node.one.to_hash).to eq({"two" => {"three" => "four"}})
717
+ node.consume_external_attrs(@ohai_data, "one" => {"abc" => "123"})
718
+ node.consume_external_attrs(@ohai_data, "one" => {"two" => {"foo" => "bar"}})
719
+ expect(node.one.to_hash).to eq({"two" => {"three" => "four", "foo" => "bar"}, "abc" => "123"})
720
+ end
721
+
722
+ it "gives attributes from JSON priority when deep merging" do
723
+ node.consume_external_attrs(@ohai_data, "one" => {"two" => {"three" => "four"}})
724
+ expect(node.one.to_hash).to eq({"two" => {"three" => "four"}})
725
+ node.consume_external_attrs(@ohai_data, "one" => {"two" => {"three" => "forty-two"}})
726
+ expect(node.one.to_hash).to eq({"two" => {"three" => "forty-two"}})
727
+ end
728
+
729
+ end
730
+
731
+ describe "preparing for a chef client run" do
732
+ before do
733
+ @ohai_data = {:platform => 'foobuntu', :platform_version => '23.42'}
734
+ end
735
+
736
+ it "sets its platform according to platform detection" do
737
+ node.consume_external_attrs(@ohai_data, {})
738
+ expect(node.automatic_attrs[:platform]).to eq('foobuntu')
739
+ expect(node.automatic_attrs[:platform_version]).to eq('23.42')
740
+ end
741
+
742
+ it "consumes the run list from provided json attributes" do
743
+ node.consume_external_attrs(@ohai_data, {"run_list" => ['recipe[unicorn]']})
744
+ expect(node.run_list).to eq(['recipe[unicorn]'])
745
+ end
746
+
747
+ it "saves non-runlist json attrs for later" do
748
+ expansion = Chef::RunList::RunListExpansion.new('_default', [])
749
+ allow(node.run_list).to receive(:expand).and_return(expansion)
750
+ node.consume_external_attrs(@ohai_data, {"foo" => "bar"})
751
+ node.expand!
752
+ expect(node.normal_attrs).to eq({"foo" => "bar", "tags" => []})
753
+ end
754
+
755
+ end
756
+
757
+ describe "when expanding its run list and merging attributes" do
758
+ before do
759
+ @environment = Chef::Environment.new.tap do |e|
760
+ e.name('rspec_env')
761
+ e.default_attributes("env default key" => "env default value")
762
+ e.override_attributes("env override key" => "env override value")
763
+ end
764
+ expect(Chef::Environment).to receive(:load).with("rspec_env").and_return(@environment)
765
+ @expansion = Chef::RunList::RunListExpansion.new("rspec_env", [])
766
+ node.chef_environment("rspec_env")
767
+ allow(node.run_list).to receive(:expand).and_return(@expansion)
768
+ end
769
+
770
+ it "sets the 'recipes' automatic attribute to the recipes in the expanded run_list" do
771
+ @expansion.recipes << 'recipe[chef::client]' << 'recipe[nginx::default]'
772
+ node.expand!
773
+ expect(node.automatic_attrs[:recipes]).to eq(['recipe[chef::client]', 'recipe[nginx::default]'])
774
+ end
775
+
776
+ it "sets the 'roles' automatic attribute to the expanded role list" do
777
+ @expansion.instance_variable_set(:@applied_roles, {'arf' => nil, 'countersnark' => nil})
778
+ node.expand!
779
+ expect(node.automatic_attrs[:roles].sort).to eq(['arf', 'countersnark'])
780
+ end
781
+
782
+ it "applies default attributes from the environment as environment defaults" do
783
+ node.expand!
784
+ expect(node.attributes.env_default["env default key"]).to eq("env default value")
785
+ end
786
+
787
+ it "applies override attributes from the environment as env overrides" do
788
+ node.expand!
789
+ expect(node.attributes.env_override["env override key"]).to eq("env override value")
790
+ end
791
+
792
+ it "applies default attributes from roles as role defaults" do
793
+ @expansion.default_attrs["role default key"] = "role default value"
794
+ node.expand!
795
+ expect(node.attributes.role_default["role default key"]).to eq("role default value")
796
+ end
797
+
798
+ it "applies override attributes from roles as role overrides" do
799
+ @expansion.override_attrs["role override key"] = "role override value"
800
+ node.expand!
801
+ expect(node.attributes.role_override["role override key"]).to eq("role override value")
802
+ end
803
+ end
804
+
805
+ describe "loaded_recipe" do
806
+ it "should not add a recipe that is already in the recipes list" do
807
+ node.automatic_attrs[:recipes] = [ "nginx::module" ]
808
+ node.loaded_recipe(:nginx, "module")
809
+ expect(node.automatic_attrs[:recipes].length).to eq(1)
810
+ end
811
+
812
+ it "should add a recipe that is not already in the recipes list" do
813
+ node.automatic_attrs[:recipes] = [ "nginx::other_module" ]
814
+ node.loaded_recipe(:nginx, "module")
815
+ expect(node.automatic_attrs[:recipes].length).to eq(2)
816
+ expect(node.recipe?("nginx::module")).to be true
817
+ expect(node.recipe?("nginx::other_module")).to be true
818
+ end
819
+ end
820
+
821
+ describe "when querying for recipes in the run list" do
822
+ context "when a recipe is in the top level run list" do
823
+ before do
824
+ node.run_list << "recipe[nginx::module]"
825
+ end
826
+
827
+ it "finds the recipe" do
828
+ expect(node.recipe?("nginx::module")).to be true
829
+ end
830
+
831
+ it "does not find a recipe not in the run list" do
832
+ expect(node.recipe?("nginx::other_module")).to be false
833
+ end
834
+ end
835
+ context "when a recipe is in the expanded run list only" do
836
+ before do
837
+ node.run_list << "role[base]"
838
+ node.automatic_attrs[:recipes] = [ "nginx::module" ]
839
+ end
840
+
841
+ it "finds a recipe in the expanded run list" do
842
+ expect(node.recipe?("nginx::module")).to be true
843
+ end
844
+
845
+ it "does not find a recipe that's not in the run list" do
846
+ expect(node.recipe?("nginx::other_module")).to be false
847
+ end
848
+ end
849
+ end
850
+
851
+ describe "when clearing computed state at the beginning of a run" do
852
+ before do
853
+ node.default[:foo] = "default"
854
+ node.normal[:foo] = "normal"
855
+ node.override[:foo] = "override"
856
+ node.reset_defaults_and_overrides
857
+ end
858
+
859
+ it "removes default attributes" do
860
+ expect(node.default).to be_empty
861
+ end
862
+
863
+ it "removes override attributes" do
864
+ expect(node.override).to be_empty
865
+ end
866
+
867
+ it "leaves normal level attributes untouched" do
868
+ expect(node[:foo]).to eq("normal")
869
+ end
870
+
871
+ end
872
+
873
+ describe "when merging environment attributes" do
874
+ before do
875
+ node.chef_environment = "rspec"
876
+ @expansion = Chef::RunList::RunListExpansion.new("rspec", [])
877
+ @expansion.default_attrs.replace({:default => "from role", :d_role => "role only"})
878
+ @expansion.override_attrs.replace({:override => "from role", :o_role => "role only"})
879
+
880
+ @environment = Chef::Environment.new
881
+ @environment.default_attributes = {:default => "from env", :d_env => "env only" }
882
+ @environment.override_attributes = {:override => "from env", :o_env => "env only"}
883
+ allow(Chef::Environment).to receive(:load).and_return(@environment)
884
+ node.apply_expansion_attributes(@expansion)
885
+ end
886
+
887
+ it "does not nuke role-only default attrs" do
888
+ expect(node[:d_role]).to eq("role only")
889
+ end
890
+
891
+ it "does not nuke role-only override attrs" do
892
+ expect(node[:o_role]).to eq("role only")
893
+ end
894
+
895
+ it "does not nuke env-only default attrs" do
896
+ expect(node[:o_env]).to eq("env only")
897
+ end
898
+
899
+ it "does not nuke role-only override attrs" do
900
+ expect(node[:o_env]).to eq("env only")
901
+ end
902
+
903
+ it "gives role defaults precedence over env defaults" do
904
+ expect(node[:default]).to eq("from role")
905
+ end
906
+
907
+ it "gives env overrides precedence over role overrides" do
908
+ expect(node[:override]).to eq("from env")
909
+ end
910
+ end
911
+
912
+ describe "when evaluating attributes files" do
913
+ before do
914
+ @cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, "cookbooks"))
915
+ @cookbook_loader = Chef::CookbookLoader.new(@cookbook_repo)
916
+ @cookbook_loader.load_cookbooks
917
+
918
+ @cookbook_collection = Chef::CookbookCollection.new(@cookbook_loader.cookbooks_by_name)
919
+
920
+ @events = Chef::EventDispatch::Dispatcher.new
921
+ @run_context = Chef::RunContext.new(node, @cookbook_collection, @events)
922
+
923
+ node.include_attribute("openldap::default")
924
+ node.include_attribute("openldap::smokey")
925
+ end
926
+
927
+ it "sets attributes from the files" do
928
+ expect(node.ldap_server).to eql("ops1prod")
929
+ expect(node.ldap_basedn).to eql("dc=hjksolutions,dc=com")
930
+ expect(node.ldap_replication_password).to eql("forsure")
931
+ expect(node.smokey).to eql("robinson")
932
+ end
933
+
934
+ it "gives a sensible error when attempting to load a missing attributes file" do
935
+ expect { node.include_attribute("nope-this::doesnt-exist") }.to raise_error(Chef::Exceptions::CookbookNotFound)
936
+ end
937
+ end
938
+
939
+ describe "roles" do
940
+ it "should allow you to query whether or not it has a recipe applied with role?" do
941
+ node.run_list << "role[sunrise]"
942
+ expect(node.role?("sunrise")).to eql(true)
943
+ expect(node.role?("not at home")).to eql(false)
944
+ end
945
+
946
+ it "should allow you to set roles with arguments" do
947
+ node.run_list << "role[one]"
948
+ node.run_list << "role[two]"
949
+ expect(node.role?("one")).to eql(true)
950
+ expect(node.role?("two")).to eql(true)
951
+ end
952
+ end
953
+
954
+ describe "run_list" do
955
+ it "should have a Chef::RunList of recipes and roles that should be applied" do
956
+ expect(node.run_list).to be_a_kind_of(Chef::RunList)
957
+ end
958
+
959
+ it "should allow you to query the run list with arguments" do
960
+ node.run_list "recipe[baz]"
961
+ expect(node.run_list?("recipe[baz]")).to eql(true)
962
+ end
963
+
964
+ it "should allow you to set the run list with arguments" do
965
+ node.run_list "recipe[baz]", "role[foo]"
966
+ expect(node.run_list?("recipe[baz]")).to eql(true)
967
+ expect(node.run_list?("role[foo]")).to eql(true)
968
+ end
969
+ end
970
+
971
+ describe "from file" do
972
+ it "should load a node from a ruby file" do
973
+ node.from_file(File.expand_path(File.join(CHEF_SPEC_DATA, "nodes", "test.rb")))
974
+ expect(node.name).to eql("test.example.com-short")
975
+ expect(node.sunshine).to eql("in")
976
+ expect(node.something).to eql("else")
977
+ expect(node.run_list).to eq(["operations-master", "operations-monitoring"])
978
+ end
979
+
980
+ it "should raise an exception if the file cannot be found or read" do
981
+ expect { node.from_file("/tmp/monkeydiving") }.to raise_error(IOError)
982
+ end
983
+ end
984
+
985
+ describe "update_from!" do
986
+ before(:each) do
987
+ node.name("orig")
988
+ node.chef_environment("dev")
989
+ node.default_attrs = { "one" => { "two" => "three", "four" => "five", "eight" => "nine" } }
990
+ node.override_attrs = { "one" => { "two" => "three", "four" => "six" } }
991
+ node.normal_attrs = { "one" => { "two" => "seven" } }
992
+ node.run_list << "role[marxist]"
993
+ node.run_list << "role[leninist]"
994
+ node.run_list << "recipe[stalinist]"
995
+
996
+ @example = Chef::Node.new()
997
+ @example.name("newname")
998
+ @example.chef_environment("prod")
999
+ @example.default_attrs = { "alpha" => { "bravo" => "charlie", "delta" => "echo" } }
1000
+ @example.override_attrs = { "alpha" => { "bravo" => "foxtrot", "delta" => "golf" } }
1001
+ @example.normal_attrs = { "alpha" => { "bravo" => "hotel" } }
1002
+ @example.run_list << "role[comedy]"
1003
+ @example.run_list << "role[drama]"
1004
+ @example.run_list << "recipe[mystery]"
1005
+ end
1006
+
1007
+ it "allows update of everything except name" do
1008
+ node.update_from!(@example)
1009
+ expect(node.name).to eq("orig")
1010
+ expect(node.chef_environment).to eq(@example.chef_environment)
1011
+ expect(node.default_attrs).to eq(@example.default_attrs)
1012
+ expect(node.override_attrs).to eq(@example.override_attrs)
1013
+ expect(node.normal_attrs).to eq(@example.normal_attrs)
1014
+ expect(node.run_list).to eq(@example.run_list)
1015
+ end
1016
+
1017
+ it "should not update the name of the node" do
1018
+ expect(node).not_to receive(:name).with(@example.name)
1019
+ node.update_from!(@example)
1020
+ end
1021
+ end
1022
+
1023
+ describe "to_hash" do
1024
+ it "should serialize itself as a hash" do
1025
+ node.chef_environment("dev")
1026
+ node.default_attrs = { "one" => { "two" => "three", "four" => "five", "eight" => "nine" } }
1027
+ node.override_attrs = { "one" => { "two" => "three", "four" => "six" } }
1028
+ node.normal_attrs = { "one" => { "two" => "seven" } }
1029
+ node.run_list << "role[marxist]"
1030
+ node.run_list << "role[leninist]"
1031
+ node.run_list << "recipe[stalinist]"
1032
+ h = node.to_hash
1033
+ expect(h["one"]["two"]).to eq("three")
1034
+ expect(h["one"]["four"]).to eq("six")
1035
+ expect(h["one"]["eight"]).to eq("nine")
1036
+ expect(h["role"]).to be_include("marxist")
1037
+ expect(h["role"]).to be_include("leninist")
1038
+ expect(h["run_list"]).to be_include("role[marxist]")
1039
+ expect(h["run_list"]).to be_include("role[leninist]")
1040
+ expect(h["run_list"]).to be_include("recipe[stalinist]")
1041
+ expect(h["chef_environment"]).to eq("dev")
1042
+ end
1043
+
1044
+ it 'should return an empty array for empty run_list' do
1045
+ expect(node.to_hash["run_list"]).to eq([])
1046
+ end
1047
+ end
1048
+
1049
+ describe "converting to or from json" do
1050
+ it "should serialize itself as json", :json => true do
1051
+ node.from_file(File.expand_path("nodes/test.example.com.rb", CHEF_SPEC_DATA))
1052
+ json = Chef::JSONCompat.to_json(node)
1053
+ expect(json).to match(/json_class/)
1054
+ expect(json).to match(/name/)
1055
+ expect(json).to match(/chef_environment/)
1056
+ expect(json).to match(/normal/)
1057
+ expect(json).to match(/default/)
1058
+ expect(json).to match(/override/)
1059
+ expect(json).to match(/run_list/)
1060
+ end
1061
+
1062
+ it 'should serialize valid json with a run list', :json => true do
1063
+ #This test came about because activesupport mucks with Chef json serialization
1064
+ #Test should pass with and without Activesupport
1065
+ node.run_list << {"type" => "role", "name" => 'Cthulu'}
1066
+ node.run_list << {"type" => "role", "name" => 'Hastur'}
1067
+ json = Chef::JSONCompat.to_json(node)
1068
+ expect(json).to match(/\"run_list\":\[\"role\[Cthulu\]\",\"role\[Hastur\]\"\]/)
1069
+ end
1070
+
1071
+ it "should serialize the correct run list", :json => true do
1072
+ node.run_list << "role[marxist]"
1073
+ node.run_list << "role[leninist]"
1074
+ node.override_runlist << "role[stalinist]"
1075
+ expect(node.run_list).to be_include("role[stalinist]")
1076
+ json = Chef::JSONCompat.to_json(node)
1077
+ expect(json).to match(/\"run_list\":\[\"role\[marxist\]\",\"role\[leninist\]\"\]/)
1078
+ end
1079
+
1080
+ it "merges the override components into a combined override object" do
1081
+ node.attributes.role_override["role override"] = "role override"
1082
+ node.attributes.env_override["env override"] = "env override"
1083
+ node_for_json = node.for_json
1084
+ expect(node_for_json["override"]["role override"]).to eq("role override")
1085
+ expect(node_for_json["override"]["env override"]).to eq("env override")
1086
+ end
1087
+
1088
+ it "merges the default components into a combined default object" do
1089
+ node.attributes.role_default["role default"] = "role default"
1090
+ node.attributes.env_default["env default"] = "env default"
1091
+ node_for_json = node.for_json
1092
+ expect(node_for_json["default"]["role default"]).to eq("role default")
1093
+ expect(node_for_json["default"]["env default"]).to eq("env default")
1094
+ end
1095
+
1096
+ it "should deserialize itself from json", :json => true do
1097
+ node.from_file(File.expand_path("nodes/test.example.com.rb", CHEF_SPEC_DATA))
1098
+ json = Chef::JSONCompat.to_json(node)
1099
+ serialized_node = Chef::JSONCompat.from_json(json)
1100
+ expect(serialized_node).to be_a_kind_of(Chef::Node)
1101
+ expect(serialized_node.name).to eql(node.name)
1102
+ expect(serialized_node.chef_environment).to eql(node.chef_environment)
1103
+ node.each_attribute do |k,v|
1104
+ expect(serialized_node[k]).to eql(v)
1105
+ end
1106
+ expect(serialized_node.run_list).to eq(node.run_list)
1107
+ end
1108
+
1109
+ include_examples "to_json equalivent to Chef::JSONCompat.to_json" do
1110
+ let(:jsonable) {
1111
+ node.from_file(File.expand_path("nodes/test.example.com.rb", CHEF_SPEC_DATA))
1112
+ node
1113
+ }
1114
+ end
1115
+ end
1116
+
1117
+ describe "to_s" do
1118
+ it "should turn into a string like node[name]" do
1119
+ node.name("airplane")
1120
+ expect(node.to_s).to eql("node[airplane]")
1121
+ end
1122
+ end
1123
+
1124
+ describe "api model" do
1125
+ before(:each) do
1126
+ @rest = double("Chef::REST")
1127
+ allow(Chef::REST).to receive(:new).and_return(@rest)
1128
+ @query = double("Chef::Search::Query")
1129
+ allow(Chef::Search::Query).to receive(:new).and_return(@query)
1130
+ end
1131
+
1132
+ describe "list" do
1133
+ describe "inflated" do
1134
+ it "should return a hash of node names and objects" do
1135
+ n1 = double("Chef::Node", :name => "one")
1136
+ expect(@query).to receive(:search).with(:node).and_yield(n1)
1137
+ r = Chef::Node.list(true)
1138
+ expect(r["one"]).to eq(n1)
1139
+ end
1140
+ end
1141
+
1142
+ it "should return a hash of node names and urls" do
1143
+ expect(@rest).to receive(:get_rest).and_return({ "one" => "http://foo" })
1144
+ r = Chef::Node.list
1145
+ expect(r["one"]).to eq("http://foo")
1146
+ end
1147
+ end
1148
+
1149
+ describe "load" do
1150
+ it "should load a node by name" do
1151
+ expect(@rest).to receive(:get_rest).with("nodes/monkey").and_return("foo")
1152
+ expect(Chef::Node.load("monkey")).to eq("foo")
1153
+ end
1154
+ end
1155
+
1156
+ describe "destroy" do
1157
+ it "should destroy a node" do
1158
+ expect(@rest).to receive(:delete_rest).with("nodes/monkey").and_return("foo")
1159
+ node.name("monkey")
1160
+ node.destroy
1161
+ end
1162
+ end
1163
+
1164
+ describe "save" do
1165
+ it "should update a node if it already exists" do
1166
+ node.name("monkey")
1167
+ allow(node).to receive(:data_for_save).and_return({})
1168
+ expect(@rest).to receive(:put_rest).with("nodes/monkey", {}).and_return("foo")
1169
+ node.save
1170
+ end
1171
+
1172
+ it "should not try and create if it can update" do
1173
+ node.name("monkey")
1174
+ allow(node).to receive(:data_for_save).and_return({})
1175
+ expect(@rest).to receive(:put_rest).with("nodes/monkey", {}).and_return("foo")
1176
+ expect(@rest).not_to receive(:post_rest)
1177
+ node.save
1178
+ end
1179
+
1180
+ it "should create if it cannot update" do
1181
+ node.name("monkey")
1182
+ allow(node).to receive(:data_for_save).and_return({})
1183
+ exception = double("404 error", :code => "404")
1184
+ expect(@rest).to receive(:put_rest).and_raise(Net::HTTPServerException.new("foo", exception))
1185
+ expect(@rest).to receive(:post_rest).with("nodes", {})
1186
+ node.save
1187
+ end
1188
+
1189
+ describe "when whyrun mode is enabled" do
1190
+ before do
1191
+ Chef::Config[:why_run] = true
1192
+ end
1193
+ after do
1194
+ Chef::Config[:why_run] = false
1195
+ end
1196
+ it "should not save" do
1197
+ node.name("monkey")
1198
+ expect(@rest).not_to receive(:put_rest)
1199
+ expect(@rest).not_to receive(:post_rest)
1200
+ node.save
1201
+ end
1202
+ end
1203
+
1204
+ context "with whitelisted attributes configured" do
1205
+ it "should only save whitelisted attributes (and subattributes)" do
1206
+ Chef::Config[:automatic_attribute_whitelist] = [
1207
+ ["filesystem", "/dev/disk0s2"],
1208
+ "network/interfaces/eth0"
1209
+ ]
1210
+
1211
+ data = {
1212
+ "automatic" => {
1213
+ "filesystem" => {
1214
+ "/dev/disk0s2" => { "size" => "10mb" },
1215
+ "map - autohome" => { "size" => "10mb" }
1216
+ },
1217
+ "network" => {
1218
+ "interfaces" => {
1219
+ "eth0" => {},
1220
+ "eth1" => {}
1221
+ }
1222
+ }
1223
+ },
1224
+ "default" => {}, "normal" => {}, "override" => {}
1225
+ }
1226
+
1227
+ selected_data = {
1228
+ "automatic" => {
1229
+ "filesystem" => {
1230
+ "/dev/disk0s2" => { "size" => "10mb" }
1231
+ },
1232
+ "network" => {
1233
+ "interfaces" => {
1234
+ "eth0" => {}
1235
+ }
1236
+ }
1237
+ },
1238
+ "default" => {}, "normal" => {}, "override" => {}
1239
+ }
1240
+
1241
+ node.name("picky-monkey")
1242
+ allow(node).to receive(:for_json).and_return(data)
1243
+ expect(@rest).to receive(:put_rest).with("nodes/picky-monkey", selected_data).and_return("foo")
1244
+ node.save
1245
+ end
1246
+
1247
+ it "should save false-y whitelisted attributes" do
1248
+ Chef::Config[:default_attribute_whitelist] = [
1249
+ "foo/bar/baz"
1250
+ ]
1251
+
1252
+ data = {
1253
+ "default" => {
1254
+ "foo" => {
1255
+ "bar" => {
1256
+ "baz" => false,
1257
+ },
1258
+ "other" => {
1259
+ "stuff" => true,
1260
+ }
1261
+ }
1262
+ }
1263
+ }
1264
+
1265
+ selected_data = {
1266
+ "default" => {
1267
+ "foo" => {
1268
+ "bar" => {
1269
+ "baz" => false,
1270
+ }
1271
+ }
1272
+ }
1273
+ }
1274
+
1275
+ node.name("falsey-monkey")
1276
+ allow(node).to receive(:for_json).and_return(data)
1277
+ expect(@rest).to receive(:put_rest).with("nodes/falsey-monkey", selected_data).and_return("foo")
1278
+ node.save
1279
+ end
1280
+
1281
+ it "should not save any attributes if the whitelist is empty" do
1282
+ Chef::Config[:automatic_attribute_whitelist] = []
1283
+
1284
+ data = {
1285
+ "automatic" => {
1286
+ "filesystem" => {
1287
+ "/dev/disk0s2" => { "size" => "10mb" },
1288
+ "map - autohome" => { "size" => "10mb" }
1289
+ }
1290
+ },
1291
+ "default" => {}, "normal" => {}, "override" => {}
1292
+ }
1293
+
1294
+ selected_data = {
1295
+ "automatic" => {}, "default" => {}, "normal" => {}, "override" => {}
1296
+ }
1297
+
1298
+ node.name("picky-monkey")
1299
+ allow(node).to receive(:for_json).and_return(data)
1300
+ expect(@rest).to receive(:put_rest).with("nodes/picky-monkey", selected_data).and_return("foo")
1301
+ node.save
1302
+ end
1303
+ end
1304
+ end
1305
+ end
1306
+
1307
+ end