chef 14.13.11-universal-mingw32 → 14.14.14-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 (1980) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +72 -72
  3. data/LICENSE +201 -201
  4. data/README.md +240 -240
  5. data/Rakefile +72 -72
  6. data/bin/chef-apply +24 -24
  7. data/bin/chef-client +25 -25
  8. data/bin/chef-resource-inspector +26 -26
  9. data/bin/chef-service-manager +37 -37
  10. data/bin/chef-shell +31 -31
  11. data/bin/chef-solo +24 -24
  12. data/bin/chef-windows-service +34 -34
  13. data/bin/knife +24 -24
  14. data/chef-universal-mingw32.gemspec +24 -24
  15. data/chef.gemspec +62 -62
  16. data/distro/powershell/chef/chef.psm1 +459 -459
  17. data/ext/win32-eventlog/Rakefile +53 -53
  18. data/ext/win32-eventlog/chef-log.man +56 -56
  19. data/lib/.DS_Store +0 -0
  20. data/lib/chef.rb +34 -34
  21. data/lib/chef/.DS_Store +0 -0
  22. data/lib/chef/api_client.rb +228 -228
  23. data/lib/chef/api_client/registration.rb +200 -200
  24. data/lib/chef/api_client_v1.rb +326 -326
  25. data/lib/chef/application.rb +398 -398
  26. data/lib/chef/application/apply.rb +226 -226
  27. data/lib/chef/application/client.rb +559 -559
  28. data/lib/chef/application/exit_code.rb +164 -164
  29. data/lib/chef/application/knife.rb +221 -221
  30. data/lib/chef/application/solo.rb +381 -381
  31. data/lib/chef/application/windows_service.rb +337 -337
  32. data/lib/chef/application/windows_service_manager.rb +204 -204
  33. data/lib/chef/applications.rb +4 -4
  34. data/lib/chef/audit/audit_event_proxy.rb +93 -93
  35. data/lib/chef/audit/audit_reporter.rb +176 -176
  36. data/lib/chef/audit/control_group_data.rb +145 -145
  37. data/lib/chef/audit/logger.rb +36 -36
  38. data/lib/chef/audit/rspec_formatter.rb +37 -37
  39. data/lib/chef/audit/runner.rb +196 -196
  40. data/lib/chef/blacklist.rb +81 -81
  41. data/lib/chef/chef_class.rb +248 -248
  42. data/lib/chef/chef_fs.rb +59 -59
  43. data/lib/chef/chef_fs/chef_fs_data_store.rb +870 -870
  44. data/lib/chef/chef_fs/command_line.rb +291 -291
  45. data/lib/chef/chef_fs/config.rb +284 -284
  46. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -26
  47. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +39 -39
  48. data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +11 -11
  49. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -35
  50. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -38
  51. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +67 -67
  52. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +207 -207
  53. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -40
  54. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -55
  55. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -36
  56. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +36 -36
  57. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -17
  58. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -17
  59. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +48 -48
  60. data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -33
  61. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -40
  62. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -29
  63. data/lib/chef/chef_fs/file_pattern.rb +301 -301
  64. data/lib/chef/chef_fs/file_system.rb +431 -431
  65. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
  66. data/lib/chef/chef_fs/file_system/base_fs_object.rb +187 -187
  67. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +65 -65
  68. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +67 -67
  69. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +75 -75
  70. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +196 -196
  71. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +38 -38
  72. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +106 -106
  73. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +208 -208
  74. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +78 -78
  75. data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +61 -61
  76. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +42 -42
  77. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +105 -105
  78. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +76 -76
  79. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -19
  80. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +67 -67
  81. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +56 -56
  82. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +51 -51
  83. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +35 -35
  84. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +65 -65
  85. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +64 -64
  86. data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +41 -41
  87. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +158 -158
  88. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +135 -135
  89. data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +43 -43
  90. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +38 -38
  91. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +176 -176
  92. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +207 -207
  93. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +45 -45
  94. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +111 -111
  95. data/lib/chef/chef_fs/file_system/exceptions.rb +105 -105
  96. data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +53 -53
  97. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +20 -20
  98. data/lib/chef/chef_fs/file_system/memory/memory_root.rb +23 -23
  99. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +62 -62
  100. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +32 -32
  101. data/lib/chef/chef_fs/file_system/repository/acl.rb +45 -45
  102. data/lib/chef/chef_fs/file_system/repository/acls_dir.rb +50 -50
  103. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +38 -38
  104. data/lib/chef/chef_fs/file_system/repository/base_file.rb +155 -155
  105. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +41 -41
  106. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +143 -143
  107. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +177 -177
  108. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +232 -232
  109. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +42 -42
  110. data/lib/chef/chef_fs/file_system/repository/client.rb +38 -38
  111. data/lib/chef/chef_fs/file_system/repository/client_key.rb +38 -38
  112. data/lib/chef/chef_fs/file_system/repository/client_keys_dir.rb +42 -42
  113. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +38 -38
  114. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +37 -37
  115. data/lib/chef/chef_fs/file_system/repository/container.rb +38 -38
  116. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +37 -37
  117. data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +36 -36
  118. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +51 -51
  119. data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -39
  120. data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +38 -38
  121. data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -39
  122. data/lib/chef/chef_fs/file_system/repository/directory.rb +167 -167
  123. data/lib/chef/chef_fs/file_system/repository/environment.rb +38 -38
  124. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +37 -37
  125. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +151 -151
  126. data/lib/chef/chef_fs/file_system/repository/group.rb +38 -38
  127. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +37 -37
  128. data/lib/chef/chef_fs/file_system/repository/node.rb +38 -38
  129. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +59 -59
  130. data/lib/chef/chef_fs/file_system/repository/policies_dir.rb +42 -42
  131. data/lib/chef/chef_fs/file_system/repository/policy.rb +38 -38
  132. data/lib/chef/chef_fs/file_system/repository/policy_group.rb +38 -38
  133. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +37 -37
  134. data/lib/chef/chef_fs/file_system/repository/role.rb +38 -38
  135. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +37 -37
  136. data/lib/chef/chef_fs/file_system/repository/user.rb +38 -38
  137. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +37 -37
  138. data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +34 -34
  139. data/lib/chef/chef_fs/file_system_cache.rb +80 -80
  140. data/lib/chef/chef_fs/knife.rb +161 -161
  141. data/lib/chef/chef_fs/parallelizer.rb +103 -103
  142. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
  143. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +277 -277
  144. data/lib/chef/chef_fs/path_utils.rb +127 -127
  145. data/lib/chef/client.rb +1037 -1037
  146. data/lib/chef/config.rb +84 -84
  147. data/lib/chef/config_fetcher.rb +72 -72
  148. data/lib/chef/constants.rb +28 -28
  149. data/lib/chef/cookbook/chefignore.rb +78 -78
  150. data/lib/chef/cookbook/cookbook_collection.rb +63 -63
  151. data/lib/chef/cookbook/cookbook_version_loader.rb +267 -267
  152. data/lib/chef/cookbook/file_system_file_vendor.rb +58 -58
  153. data/lib/chef/cookbook/file_vendor.rb +71 -71
  154. data/lib/chef/cookbook/gem_installer.rb +100 -95
  155. data/lib/chef/cookbook/manifest_v0.rb +73 -73
  156. data/lib/chef/cookbook/manifest_v2.rb +45 -45
  157. data/lib/chef/cookbook/metadata.rb +804 -804
  158. data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
  159. data/lib/chef/cookbook/synchronizer.rb +312 -312
  160. data/lib/chef/cookbook/syntax_check.rb +260 -260
  161. data/lib/chef/cookbook_loader.rb +208 -208
  162. data/lib/chef/cookbook_manifest.rb +328 -328
  163. data/lib/chef/cookbook_site_streaming_uploader.rb +241 -241
  164. data/lib/chef/cookbook_uploader.rb +156 -156
  165. data/lib/chef/cookbook_version.rb +544 -544
  166. data/lib/chef/daemon.rb +131 -131
  167. data/lib/chef/data_bag.rb +174 -174
  168. data/lib/chef/data_bag_item.rb +209 -209
  169. data/lib/chef/data_collector.rb +565 -565
  170. data/lib/chef/data_collector/messages.rb +100 -100
  171. data/lib/chef/data_collector/messages/helpers.rb +159 -159
  172. data/lib/chef/data_collector/resource_report.rb +123 -123
  173. data/lib/chef/decorator.rb +81 -81
  174. data/lib/chef/decorator/lazy.rb +60 -60
  175. data/lib/chef/decorator/lazy_array.rb +59 -59
  176. data/lib/chef/decorator/unchain.rb +43 -43
  177. data/lib/chef/delayed_evaluator.rb +21 -21
  178. data/lib/chef/deprecated.rb +248 -248
  179. data/lib/chef/deprecation/warnings.rb +38 -38
  180. data/lib/chef/digester.rb +74 -74
  181. data/lib/chef/dsl.rb +6 -6
  182. data/lib/chef/dsl/.DS_Store +0 -0
  183. data/lib/chef/dsl/audit.rb +51 -51
  184. data/lib/chef/dsl/chef_provisioning.rb +57 -57
  185. data/lib/chef/dsl/cheffish.rb +65 -65
  186. data/lib/chef/dsl/core.rb +52 -52
  187. data/lib/chef/dsl/data_query.rb +103 -103
  188. data/lib/chef/dsl/declare_resource.rb +319 -319
  189. data/lib/chef/dsl/definitions.rb +43 -43
  190. data/lib/chef/dsl/include_attribute.rb +57 -57
  191. data/lib/chef/dsl/include_recipe.rb +40 -40
  192. data/lib/chef/dsl/platform_introspection.rb +269 -269
  193. data/lib/chef/dsl/powershell.rb +29 -29
  194. data/lib/chef/dsl/reboot_pending.rb +57 -57
  195. data/lib/chef/dsl/recipe.rb +76 -76
  196. data/lib/chef/dsl/registry_helper.rb +63 -63
  197. data/lib/chef/dsl/resources.rb +49 -49
  198. data/lib/chef/dsl/universal.rb +60 -60
  199. data/lib/chef/encrypted_data_bag_item.rb +157 -157
  200. data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -54
  201. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -56
  202. data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -22
  203. data/lib/chef/encrypted_data_bag_item/decryptor.rb +227 -227
  204. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -37
  205. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -22
  206. data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -225
  207. data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -22
  208. data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -22
  209. data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -22
  210. data/lib/chef/environment.rb +319 -319
  211. data/lib/chef/event_dispatch/base.rb +445 -445
  212. data/lib/chef/event_dispatch/dispatcher.rb +62 -62
  213. data/lib/chef/event_dispatch/dsl.rb +65 -65
  214. data/lib/chef/event_dispatch/events_output_stream.rb +37 -37
  215. data/lib/chef/event_loggers/base.rb +62 -62
  216. data/lib/chef/event_loggers/windows_eventlog.rb +101 -101
  217. data/lib/chef/exceptions.rb +543 -531
  218. data/lib/chef/file_access_control.rb +75 -75
  219. data/lib/chef/file_access_control/unix.rb +290 -290
  220. data/lib/chef/file_access_control/windows.rb +337 -337
  221. data/lib/chef/file_cache.rb +223 -223
  222. data/lib/chef/file_content_management/content_base.rb +58 -58
  223. data/lib/chef/file_content_management/deploy.rb +37 -37
  224. data/lib/chef/file_content_management/deploy/cp.rb +48 -48
  225. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -77
  226. data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
  227. data/lib/chef/file_content_management/tempfile.rb +107 -107
  228. data/lib/chef/formatters/base.rb +246 -246
  229. data/lib/chef/formatters/doc.rb +443 -443
  230. data/lib/chef/formatters/error_description.rb +86 -86
  231. data/lib/chef/formatters/error_inspectors.rb +19 -19
  232. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +183 -183
  233. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +154 -154
  234. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -168
  235. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +82 -82
  236. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +128 -128
  237. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +147 -147
  238. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +124 -124
  239. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +121 -121
  240. data/lib/chef/formatters/error_mapper.rb +85 -85
  241. data/lib/chef/formatters/indentable_output_stream.rb +182 -182
  242. data/lib/chef/formatters/minimal.rb +233 -233
  243. data/lib/chef/guard_interpreter.rb +32 -32
  244. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +47 -47
  245. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
  246. data/lib/chef/handler.rb +266 -266
  247. data/lib/chef/handler/error_report.rb +33 -33
  248. data/lib/chef/handler/json_file.rb +62 -62
  249. data/lib/chef/http.rb +539 -539
  250. data/lib/chef/http/api_versions.rb +56 -56
  251. data/lib/chef/http/auth_credentials.rb +59 -59
  252. data/lib/chef/http/authenticator.rb +118 -118
  253. data/lib/chef/http/basic_client.rb +157 -157
  254. data/lib/chef/http/cookie_jar.rb +31 -31
  255. data/lib/chef/http/cookie_manager.rb +59 -59
  256. data/lib/chef/http/decompressor.rb +142 -142
  257. data/lib/chef/http/http_request.rb +189 -189
  258. data/lib/chef/http/json_input.rb +73 -73
  259. data/lib/chef/http/json_output.rb +81 -81
  260. data/lib/chef/http/json_to_model_output.rb +34 -34
  261. data/lib/chef/http/remote_request_id.rb +46 -46
  262. data/lib/chef/http/simple.rb +40 -40
  263. data/lib/chef/http/simple_json.rb +43 -43
  264. data/lib/chef/http/socketless_chef_zero_client.rb +209 -209
  265. data/lib/chef/http/ssl_policies.rb +130 -130
  266. data/lib/chef/http/validate_content_length.rb +114 -114
  267. data/lib/chef/json_compat.rb +68 -68
  268. data/lib/chef/key.rb +269 -269
  269. data/lib/chef/knife.rb +620 -620
  270. data/lib/chef/knife/.DS_Store +0 -0
  271. data/lib/chef/knife/bootstrap.rb +525 -501
  272. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +159 -159
  273. data/lib/chef/knife/bootstrap/client_builder.rb +208 -208
  274. data/lib/chef/knife/bootstrap/templates/README.md +11 -11
  275. data/lib/chef/knife/bootstrap/templates/chef-full.erb +243 -243
  276. data/lib/chef/knife/client_bulk_delete.rb +103 -103
  277. data/lib/chef/knife/client_create.rb +110 -110
  278. data/lib/chef/knife/client_delete.rb +62 -62
  279. data/lib/chef/knife/client_edit.rb +52 -52
  280. data/lib/chef/knife/client_key_create.rb +70 -70
  281. data/lib/chef/knife/client_key_delete.rb +77 -77
  282. data/lib/chef/knife/client_key_edit.rb +80 -80
  283. data/lib/chef/knife/client_key_list.rb +70 -70
  284. data/lib/chef/knife/client_key_show.rb +77 -77
  285. data/lib/chef/knife/client_list.rb +41 -41
  286. data/lib/chef/knife/client_reregister.rb +58 -58
  287. data/lib/chef/knife/client_show.rb +48 -48
  288. data/lib/chef/knife/config_get.rb +126 -126
  289. data/lib/chef/knife/config_get_profile.rb +37 -37
  290. data/lib/chef/knife/config_list_profiles.rb +121 -121
  291. data/lib/chef/knife/config_use_profile.rb +50 -50
  292. data/lib/chef/knife/configure.rb +147 -147
  293. data/lib/chef/knife/configure_client.rb +48 -48
  294. data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
  295. data/lib/chef/knife/cookbook_create.rb +29 -29
  296. data/lib/chef/knife/cookbook_delete.rb +151 -151
  297. data/lib/chef/knife/cookbook_download.rb +142 -142
  298. data/lib/chef/knife/cookbook_list.rb +47 -47
  299. data/lib/chef/knife/cookbook_metadata.rb +106 -106
  300. data/lib/chef/knife/cookbook_metadata_from_file.rb +43 -43
  301. data/lib/chef/knife/cookbook_show.rb +98 -98
  302. data/lib/chef/knife/cookbook_site_download.rb +40 -40
  303. data/lib/chef/knife/cookbook_site_install.rb +40 -40
  304. data/lib/chef/knife/cookbook_site_list.rb +40 -40
  305. data/lib/chef/knife/cookbook_site_search.rb +40 -40
  306. data/lib/chef/knife/cookbook_site_share.rb +41 -41
  307. data/lib/chef/knife/cookbook_site_show.rb +40 -40
  308. data/lib/chef/knife/cookbook_site_unshare.rb +41 -41
  309. data/lib/chef/knife/cookbook_test.rb +95 -95
  310. data/lib/chef/knife/cookbook_upload.rb +308 -308
  311. data/lib/chef/knife/core/bootstrap_context.rb +273 -273
  312. data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
  313. data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
  314. data/lib/chef/knife/core/generic_presenter.rb +231 -231
  315. data/lib/chef/knife/core/hashed_command_loader.rb +99 -99
  316. data/lib/chef/knife/core/node_editor.rb +130 -130
  317. data/lib/chef/knife/core/node_presenter.rb +158 -158
  318. data/lib/chef/knife/core/object_loader.rb +115 -115
  319. data/lib/chef/knife/core/status_presenter.rb +172 -172
  320. data/lib/chef/knife/core/subcommand_loader.rb +183 -183
  321. data/lib/chef/knife/core/text_formatter.rb +85 -85
  322. data/lib/chef/knife/core/ui.rb +286 -286
  323. data/lib/chef/knife/data_bag_create.rb +80 -80
  324. data/lib/chef/knife/data_bag_delete.rb +49 -49
  325. data/lib/chef/knife/data_bag_edit.rb +74 -74
  326. data/lib/chef/knife/data_bag_from_file.rb +113 -113
  327. data/lib/chef/knife/data_bag_list.rb +42 -42
  328. data/lib/chef/knife/data_bag_secret_options.rb +142 -142
  329. data/lib/chef/knife/data_bag_show.rb +69 -69
  330. data/lib/chef/knife/delete.rb +125 -125
  331. data/lib/chef/knife/deps.rb +154 -154
  332. data/lib/chef/knife/diff.rb +84 -84
  333. data/lib/chef/knife/download.rb +84 -84
  334. data/lib/chef/knife/edit.rb +88 -88
  335. data/lib/chef/knife/environment_compare.rb +127 -127
  336. data/lib/chef/knife/environment_create.rb +52 -52
  337. data/lib/chef/knife/environment_delete.rb +44 -44
  338. data/lib/chef/knife/environment_edit.rb +44 -44
  339. data/lib/chef/knife/environment_from_file.rb +84 -84
  340. data/lib/chef/knife/environment_list.rb +41 -41
  341. data/lib/chef/knife/environment_show.rb +47 -47
  342. data/lib/chef/knife/exec.rb +87 -87
  343. data/lib/chef/knife/key_create.rb +112 -112
  344. data/lib/chef/knife/key_create_base.rb +50 -50
  345. data/lib/chef/knife/key_delete.rb +55 -55
  346. data/lib/chef/knife/key_edit.rb +118 -118
  347. data/lib/chef/knife/key_edit_base.rb +55 -55
  348. data/lib/chef/knife/key_list.rb +88 -88
  349. data/lib/chef/knife/key_list_base.rb +45 -45
  350. data/lib/chef/knife/key_show.rb +53 -53
  351. data/lib/chef/knife/list.rb +172 -172
  352. data/lib/chef/knife/node_bulk_delete.rb +74 -74
  353. data/lib/chef/knife/node_create.rb +47 -47
  354. data/lib/chef/knife/node_delete.rb +46 -46
  355. data/lib/chef/knife/node_edit.rb +70 -70
  356. data/lib/chef/knife/node_environment_set.rb +54 -54
  357. data/lib/chef/knife/node_from_file.rb +51 -51
  358. data/lib/chef/knife/node_list.rb +44 -44
  359. data/lib/chef/knife/node_policy_set.rb +79 -79
  360. data/lib/chef/knife/node_run_list_add.rb +104 -104
  361. data/lib/chef/knife/node_run_list_remove.rb +67 -67
  362. data/lib/chef/knife/node_run_list_set.rb +66 -66
  363. data/lib/chef/knife/node_show.rb +61 -61
  364. data/lib/chef/knife/null.rb +10 -10
  365. data/lib/chef/knife/osc_user_create.rb +97 -97
  366. data/lib/chef/knife/osc_user_delete.rb +51 -51
  367. data/lib/chef/knife/osc_user_edit.rb +58 -58
  368. data/lib/chef/knife/osc_user_list.rb +47 -47
  369. data/lib/chef/knife/osc_user_reregister.rb +64 -64
  370. data/lib/chef/knife/osc_user_show.rb +53 -53
  371. data/lib/chef/knife/raw.rb +124 -124
  372. data/lib/chef/knife/recipe_list.rb +32 -32
  373. data/lib/chef/knife/rehash.rb +65 -65
  374. data/lib/chef/knife/role_bulk_delete.rb +65 -65
  375. data/lib/chef/knife/role_create.rb +53 -53
  376. data/lib/chef/knife/role_delete.rb +46 -46
  377. data/lib/chef/knife/role_edit.rb +45 -45
  378. data/lib/chef/knife/role_env_run_list_add.rb +87 -87
  379. data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
  380. data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
  381. data/lib/chef/knife/role_env_run_list_replace.rb +60 -60
  382. data/lib/chef/knife/role_env_run_list_set.rb +70 -70
  383. data/lib/chef/knife/role_from_file.rb +51 -51
  384. data/lib/chef/knife/role_list.rb +42 -42
  385. data/lib/chef/knife/role_run_list_add.rb +87 -87
  386. data/lib/chef/knife/role_run_list_clear.rb +55 -55
  387. data/lib/chef/knife/role_run_list_remove.rb +56 -56
  388. data/lib/chef/knife/role_run_list_replace.rb +60 -60
  389. data/lib/chef/knife/role_run_list_set.rb +69 -69
  390. data/lib/chef/knife/role_show.rb +48 -48
  391. data/lib/chef/knife/search.rb +194 -194
  392. data/lib/chef/knife/serve.rb +64 -64
  393. data/lib/chef/knife/show.rb +72 -72
  394. data/lib/chef/knife/ssh.rb +634 -634
  395. data/lib/chef/knife/ssl_check.rb +283 -283
  396. data/lib/chef/knife/ssl_fetch.rb +161 -161
  397. data/lib/chef/knife/status.rb +110 -110
  398. data/lib/chef/knife/supermarket_download.rb +122 -122
  399. data/lib/chef/knife/supermarket_install.rb +193 -193
  400. data/lib/chef/knife/supermarket_list.rb +65 -65
  401. data/lib/chef/knife/supermarket_search.rb +53 -53
  402. data/lib/chef/knife/supermarket_share.rb +166 -166
  403. data/lib/chef/knife/supermarket_show.rb +67 -67
  404. data/lib/chef/knife/supermarket_unshare.rb +61 -61
  405. data/lib/chef/knife/tag_create.rb +52 -52
  406. data/lib/chef/knife/tag_delete.rb +60 -60
  407. data/lib/chef/knife/tag_list.rb +47 -47
  408. data/lib/chef/knife/upload.rb +86 -86
  409. data/lib/chef/knife/user_create.rb +151 -151
  410. data/lib/chef/knife/user_delete.rb +96 -96
  411. data/lib/chef/knife/user_edit.rb +82 -82
  412. data/lib/chef/knife/user_key_create.rb +70 -70
  413. data/lib/chef/knife/user_key_delete.rb +77 -77
  414. data/lib/chef/knife/user_key_edit.rb +80 -80
  415. data/lib/chef/knife/user_key_list.rb +70 -70
  416. data/lib/chef/knife/user_key_show.rb +77 -77
  417. data/lib/chef/knife/user_list.rb +44 -44
  418. data/lib/chef/knife/user_reregister.rb +90 -90
  419. data/lib/chef/knife/user_show.rb +79 -79
  420. data/lib/chef/knife/xargs.rb +282 -282
  421. data/lib/chef/local_mode.rb +129 -129
  422. data/lib/chef/log.rb +70 -70
  423. data/lib/chef/log/syslog.rb +45 -45
  424. data/lib/chef/log/winevt.rb +99 -99
  425. data/lib/chef/mash.rb +232 -232
  426. data/lib/chef/mixin/.DS_Store +0 -0
  427. data/lib/chef/mixin/api_version_request_handling.rb +64 -64
  428. data/lib/chef/mixin/checksum.rb +37 -37
  429. data/lib/chef/mixin/convert_to_class_name.rb +126 -126
  430. data/lib/chef/mixin/create_path.rb +71 -71
  431. data/lib/chef/mixin/deep_merge.rb +140 -140
  432. data/lib/chef/mixin/deprecation.rb +117 -117
  433. data/lib/chef/mixin/descendants_tracker.rb +81 -81
  434. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -39
  435. data/lib/chef/mixin/file_class.rb +35 -35
  436. data/lib/chef/mixin/from_file.rb +55 -55
  437. data/lib/chef/mixin/get_source_from_package.rb +47 -47
  438. data/lib/chef/mixin/homebrew_user.rb +79 -79
  439. data/lib/chef/mixin/lazy_module_include.rb +77 -77
  440. data/lib/chef/mixin/notifying_block.rb +51 -51
  441. data/lib/chef/mixin/openssl_helper.rb +402 -402
  442. data/lib/chef/mixin/params_validate.rb +498 -498
  443. data/lib/chef/mixin/path_sanity.rb +66 -66
  444. data/lib/chef/mixin/powershell_exec.rb +105 -105
  445. data/lib/chef/mixin/powershell_out.rb +98 -98
  446. data/lib/chef/mixin/powershell_type_coercions.rb +84 -84
  447. data/lib/chef/mixin/properties.rb +323 -323
  448. data/lib/chef/mixin/provides.rb +29 -29
  449. data/lib/chef/mixin/proxified_socket.rb +42 -42
  450. data/lib/chef/mixin/securable.rb +192 -192
  451. data/lib/chef/mixin/shell_out.rb +258 -258
  452. data/lib/chef/mixin/subclass_directive.rb +37 -37
  453. data/lib/chef/mixin/template.rb +265 -265
  454. data/lib/chef/mixin/unformatter.rb +32 -32
  455. data/lib/chef/mixin/uris.rb +42 -42
  456. data/lib/chef/mixin/user_context.rb +55 -55
  457. data/lib/chef/mixin/versioned_api.rb +84 -84
  458. data/lib/chef/mixin/which.rb +52 -52
  459. data/lib/chef/mixin/why_run.rb +326 -326
  460. data/lib/chef/mixin/wide_string.rb +54 -54
  461. data/lib/chef/mixin/windows_architecture_helper.rb +113 -113
  462. data/lib/chef/mixin/windows_env_helper.rb +67 -67
  463. data/lib/chef/mixin/xml_escape.rb +138 -138
  464. data/lib/chef/mixins.rb +12 -12
  465. data/lib/chef/monkey_patches/net_http.rb +64 -64
  466. data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
  467. data/lib/chef/monkey_patches/win32/registry.rb +86 -86
  468. data/lib/chef/monologger.rb +4 -4
  469. data/lib/chef/nil_argument.rb +3 -3
  470. data/lib/chef/node.rb +688 -688
  471. data/lib/chef/node/attribute.rb +649 -649
  472. data/lib/chef/node/attribute_collections.rb +213 -213
  473. data/lib/chef/node/common_api.rb +121 -121
  474. data/lib/chef/node/immutable_collections.rb +182 -182
  475. data/lib/chef/node/mixin/deep_merge_cache.rb +61 -61
  476. data/lib/chef/node/mixin/immutablize_array.rb +180 -180
  477. data/lib/chef/node/mixin/immutablize_hash.rb +165 -165
  478. data/lib/chef/node/mixin/state_tracking.rb +96 -96
  479. data/lib/chef/node_map.rb +315 -315
  480. data/lib/chef/null_logger.rb +79 -79
  481. data/lib/chef/org.rb +144 -144
  482. data/lib/chef/platform.rb +30 -30
  483. data/lib/chef/platform/priority_map.rb +41 -41
  484. data/lib/chef/platform/provider_handler_map.rb +29 -29
  485. data/lib/chef/platform/provider_mapping.rb +55 -55
  486. data/lib/chef/platform/provider_priority_map.rb +11 -11
  487. data/lib/chef/platform/query_helpers.rb +100 -100
  488. data/lib/chef/platform/rebooter.rb +71 -71
  489. data/lib/chef/platform/resource_handler_map.rb +29 -29
  490. data/lib/chef/platform/resource_priority_map.rb +11 -11
  491. data/lib/chef/platform/service_helpers.rb +122 -122
  492. data/lib/chef/policy_builder.rb +42 -42
  493. data/lib/chef/policy_builder/dynamic.rb +185 -185
  494. data/lib/chef/policy_builder/expand_node_object.rb +252 -252
  495. data/lib/chef/policy_builder/policyfile.rb +569 -569
  496. data/lib/chef/powershell.rb +57 -57
  497. data/lib/chef/property.rb +731 -731
  498. data/lib/chef/provider.rb +410 -408
  499. data/lib/chef/provider/.DS_Store +0 -0
  500. data/lib/chef/provider/apt_preference.rb +94 -94
  501. data/lib/chef/provider/apt_repository.rb +360 -360
  502. data/lib/chef/provider/apt_update.rb +80 -80
  503. data/lib/chef/provider/batch.rb +45 -45
  504. data/lib/chef/provider/cookbook_file.rb +47 -47
  505. data/lib/chef/provider/cookbook_file/content.rb +49 -49
  506. data/lib/chef/provider/cron.rb +256 -256
  507. data/lib/chef/provider/cron/aix.rb +50 -50
  508. data/lib/chef/provider/cron/solaris.rb +22 -22
  509. data/lib/chef/provider/cron/unix.rb +83 -83
  510. data/lib/chef/provider/directory.rb +164 -164
  511. data/lib/chef/provider/dsc_resource.rb +209 -209
  512. data/lib/chef/provider/dsc_script.rb +185 -185
  513. data/lib/chef/provider/execute.rb +130 -130
  514. data/lib/chef/provider/file.rb +478 -478
  515. data/lib/chef/provider/file/content.rb +39 -39
  516. data/lib/chef/provider/git.rb +357 -357
  517. data/lib/chef/provider/group.rb +179 -179
  518. data/lib/chef/provider/group/aix.rb +79 -79
  519. data/lib/chef/provider/group/dscl.rb +177 -177
  520. data/lib/chef/provider/group/gpasswd.rb +58 -58
  521. data/lib/chef/provider/group/groupadd.rb +133 -133
  522. data/lib/chef/provider/group/groupmod.rb +123 -123
  523. data/lib/chef/provider/group/pw.rb +137 -137
  524. data/lib/chef/provider/group/suse.rb +83 -83
  525. data/lib/chef/provider/group/usermod.rb +90 -90
  526. data/lib/chef/provider/group/windows.rb +110 -110
  527. data/lib/chef/provider/http_request.rb +132 -132
  528. data/lib/chef/provider/ifconfig.rb +271 -271
  529. data/lib/chef/provider/ifconfig/aix.rb +94 -94
  530. data/lib/chef/provider/ifconfig/debian.rb +88 -88
  531. data/lib/chef/provider/ifconfig/redhat.rb +54 -54
  532. data/lib/chef/provider/launchd.rb +231 -231
  533. data/lib/chef/provider/link.rb +168 -168
  534. data/lib/chef/provider/log.rb +43 -43
  535. data/lib/chef/provider/lwrp_base.rb +89 -89
  536. data/lib/chef/provider/mdadm.rb +85 -85
  537. data/lib/chef/provider/mount.rb +175 -175
  538. data/lib/chef/provider/mount/aix.rb +221 -221
  539. data/lib/chef/provider/mount/mount.rb +283 -283
  540. data/lib/chef/provider/mount/solaris.rb +275 -275
  541. data/lib/chef/provider/mount/windows.rb +92 -92
  542. data/lib/chef/provider/noop.rb +37 -37
  543. data/lib/chef/provider/ohai.rb +45 -45
  544. data/lib/chef/provider/osx_profile.rb +251 -251
  545. data/lib/chef/provider/package.rb +687 -687
  546. data/lib/chef/provider/package/.DS_Store +0 -0
  547. data/lib/chef/provider/package/apt.rb +249 -249
  548. data/lib/chef/provider/package/bff.rb +142 -142
  549. data/lib/chef/provider/package/cab.rb +187 -187
  550. data/lib/chef/provider/package/chocolatey.rb +285 -285
  551. data/lib/chef/provider/package/dnf.rb +196 -196
  552. data/lib/chef/provider/package/dnf/dnf_helper.py +114 -100
  553. data/lib/chef/provider/package/dnf/python_helper.rb +173 -173
  554. data/lib/chef/provider/package/dnf/version.rb +56 -56
  555. data/lib/chef/provider/package/dpkg.rb +241 -241
  556. data/lib/chef/provider/package/freebsd/.DS_Store +0 -0
  557. data/lib/chef/provider/package/freebsd/base.rb +89 -89
  558. data/lib/chef/provider/package/freebsd/pkg.rb +114 -114
  559. data/lib/chef/provider/package/freebsd/pkgng.rb +76 -76
  560. data/lib/chef/provider/package/freebsd/port.rb +60 -60
  561. data/lib/chef/provider/package/homebrew.rb +138 -138
  562. data/lib/chef/provider/package/ips.rb +85 -85
  563. data/lib/chef/provider/package/macports.rb +101 -101
  564. data/lib/chef/provider/package/msu.rb +161 -161
  565. data/lib/chef/provider/package/openbsd.rb +139 -139
  566. data/lib/chef/provider/package/pacman.rb +103 -103
  567. data/lib/chef/provider/package/paludis.rb +85 -85
  568. data/lib/chef/provider/package/portage.rb +133 -133
  569. data/lib/chef/provider/package/powershell.rb +133 -133
  570. data/lib/chef/provider/package/rpm.rb +126 -126
  571. data/lib/chef/provider/package/rubygems.rb +617 -617
  572. data/lib/chef/provider/package/smartos.rb +92 -92
  573. data/lib/chef/provider/package/solaris.rb +137 -137
  574. data/lib/chef/provider/package/windows.rb +317 -317
  575. data/lib/chef/provider/package/windows/exe.rb +117 -117
  576. data/lib/chef/provider/package/windows/msi.rb +96 -96
  577. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +99 -99
  578. data/lib/chef/provider/package/yum.rb +289 -289
  579. data/lib/chef/provider/package/yum/python_helper.rb +222 -222
  580. data/lib/chef/provider/package/yum/rpm_utils.rb +651 -651
  581. data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +79 -79
  582. data/lib/chef/provider/package/yum/simplejson/__init__.py +318 -318
  583. data/lib/chef/provider/package/yum/simplejson/decoder.py +354 -354
  584. data/lib/chef/provider/package/yum/simplejson/encoder.py +440 -440
  585. data/lib/chef/provider/package/yum/simplejson/scanner.py +65 -65
  586. data/lib/chef/provider/package/yum/simplejson/tool.py +37 -37
  587. data/lib/chef/provider/package/yum/version.rb +56 -56
  588. data/lib/chef/provider/package/yum/yum_cache.rb +93 -93
  589. data/lib/chef/provider/package/yum/yum_helper.py +211 -211
  590. data/lib/chef/provider/package/zypper.rb +167 -167
  591. data/lib/chef/provider/powershell_script.rb +223 -223
  592. data/lib/chef/provider/reboot.rb +78 -78
  593. data/lib/chef/provider/registry_key.rb +199 -199
  594. data/lib/chef/provider/remote_directory.rb +269 -269
  595. data/lib/chef/provider/remote_file.rb +66 -66
  596. data/lib/chef/provider/remote_file/cache_control_data.rb +195 -195
  597. data/lib/chef/provider/remote_file/content.rb +81 -81
  598. data/lib/chef/provider/remote_file/fetcher.rb +60 -60
  599. data/lib/chef/provider/remote_file/ftp.rb +172 -172
  600. data/lib/chef/provider/remote_file/http.rb +143 -143
  601. data/lib/chef/provider/remote_file/local_file.rb +60 -60
  602. data/lib/chef/provider/remote_file/network_file.rb +61 -61
  603. data/lib/chef/provider/remote_file/sftp.rb +105 -105
  604. data/lib/chef/provider/resource_update.rb +52 -52
  605. data/lib/chef/provider/route.rb +248 -248
  606. data/lib/chef/provider/ruby_block.rb +40 -40
  607. data/lib/chef/provider/script.rb +121 -121
  608. data/lib/chef/provider/service.rb +252 -252
  609. data/lib/chef/provider/service/aix.rb +125 -125
  610. data/lib/chef/provider/service/aixinit.rb +117 -117
  611. data/lib/chef/provider/service/arch.rb +118 -118
  612. data/lib/chef/provider/service/debian.rb +193 -193
  613. data/lib/chef/provider/service/freebsd.rb +194 -194
  614. data/lib/chef/provider/service/gentoo.rb +70 -70
  615. data/lib/chef/provider/service/init.rb +93 -93
  616. data/lib/chef/provider/service/insserv.rb +61 -61
  617. data/lib/chef/provider/service/invokercd.rb +41 -41
  618. data/lib/chef/provider/service/macosx.rb +252 -252
  619. data/lib/chef/provider/service/openbsd.rb +216 -216
  620. data/lib/chef/provider/service/redhat.rb +126 -126
  621. data/lib/chef/provider/service/simple.rb +172 -172
  622. data/lib/chef/provider/service/solaris.rb +127 -127
  623. data/lib/chef/provider/service/systemd.rb +189 -189
  624. data/lib/chef/provider/service/upstart.rb +260 -260
  625. data/lib/chef/provider/service/windows.rb +488 -488
  626. data/lib/chef/provider/subversion.rb +227 -227
  627. data/lib/chef/provider/support/yum_repo.erb +138 -138
  628. data/lib/chef/provider/support/zypper_repo.erb +17 -17
  629. data/lib/chef/provider/systemd_unit.rb +261 -261
  630. data/lib/chef/provider/template.rb +59 -59
  631. data/lib/chef/provider/template/content.rb +93 -93
  632. data/lib/chef/provider/template_finder.rb +62 -62
  633. data/lib/chef/provider/user.rb +221 -221
  634. data/lib/chef/provider/user/aix.rb +131 -131
  635. data/lib/chef/provider/user/dscl.rb +712 -712
  636. data/lib/chef/provider/user/linux.rb +116 -116
  637. data/lib/chef/provider/user/pw.rb +105 -105
  638. data/lib/chef/provider/user/solaris.rb +160 -160
  639. data/lib/chef/provider/user/useradd.rb +161 -161
  640. data/lib/chef/provider/user/windows.rb +126 -126
  641. data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
  642. data/lib/chef/provider/windows_env.rb +207 -207
  643. data/lib/chef/provider/windows_path.rb +61 -61
  644. data/lib/chef/provider/windows_script.rb +75 -75
  645. data/lib/chef/provider/windows_task.rb +631 -631
  646. data/lib/chef/provider/yum_repository.rb +130 -130
  647. data/lib/chef/provider/zypper_repository.rb +169 -169
  648. data/lib/chef/provider_resolver.rb +146 -146
  649. data/lib/chef/providers.rb +146 -146
  650. data/lib/chef/recipe.rb +110 -110
  651. data/lib/chef/request_id.rb +37 -37
  652. data/lib/chef/reserved_names.rb +9 -9
  653. data/lib/chef/resource.rb +1593 -1584
  654. data/lib/chef/resource/.DS_Store +0 -0
  655. data/lib/chef/resource/action_class.rb +90 -90
  656. data/lib/chef/resource/apt_package.rb +40 -40
  657. data/lib/chef/resource/apt_preference.rb +52 -52
  658. data/lib/chef/resource/apt_repository.rb +86 -86
  659. data/lib/chef/resource/apt_update.rb +41 -41
  660. data/lib/chef/resource/bash.rb +34 -34
  661. data/lib/chef/resource/batch.rb +34 -34
  662. data/lib/chef/resource/bff_package.rb +31 -31
  663. data/lib/chef/resource/breakpoint.rb +47 -47
  664. data/lib/chef/resource/build_essential.rb +142 -142
  665. data/lib/chef/resource/cab_package.rb +45 -45
  666. data/lib/chef/resource/chef_gem.rb +59 -59
  667. data/lib/chef/resource/chef_handler.rb +132 -132
  668. data/lib/chef/resource/chocolatey_config.rb +83 -83
  669. data/lib/chef/resource/chocolatey_package.rb +50 -50
  670. data/lib/chef/resource/chocolatey_source.rb +95 -95
  671. data/lib/chef/resource/conditional.rb +135 -135
  672. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
  673. data/lib/chef/resource/cookbook_file.rb +45 -45
  674. data/lib/chef/resource/cron.rb +174 -174
  675. data/lib/chef/resource/cron_access.rb +70 -70
  676. data/lib/chef/resource/cron_d.rb +238 -238
  677. data/lib/chef/resource/csh.rb +39 -39
  678. data/lib/chef/resource/directory.rb +51 -51
  679. data/lib/chef/resource/dmg_package.rb +171 -171
  680. data/lib/chef/resource/dnf_package.rb +79 -79
  681. data/lib/chef/resource/dpkg_package.rb +33 -33
  682. data/lib/chef/resource/dsc_resource.rb +120 -120
  683. data/lib/chef/resource/dsc_script.rb +124 -124
  684. data/lib/chef/resource/execute.rb +201 -201
  685. data/lib/chef/resource/file.rb +105 -105
  686. data/lib/chef/resource/file/.DS_Store +0 -0
  687. data/lib/chef/resource/file/verification.rb +139 -139
  688. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -67
  689. data/lib/chef/resource/freebsd_package.rb +73 -73
  690. data/lib/chef/resource/gem_package.rb +58 -58
  691. data/lib/chef/resource/git.rb +35 -35
  692. data/lib/chef/resource/group.rb +61 -61
  693. data/lib/chef/resource/homebrew_cask.rb +100 -100
  694. data/lib/chef/resource/homebrew_package.rb +38 -38
  695. data/lib/chef/resource/homebrew_tap.rb +87 -87
  696. data/lib/chef/resource/hostname.rb +265 -265
  697. data/lib/chef/resource/http_request.rb +55 -55
  698. data/lib/chef/resource/ifconfig.rb +105 -105
  699. data/lib/chef/resource/ips_package.rb +38 -38
  700. data/lib/chef/resource/kernel_module.rb +135 -135
  701. data/lib/chef/resource/ksh.rb +39 -39
  702. data/lib/chef/resource/launchd.rb +252 -252
  703. data/lib/chef/resource/link.rb +93 -93
  704. data/lib/chef/resource/locale.rb +94 -94
  705. data/lib/chef/resource/log.rb +52 -52
  706. data/lib/chef/resource/lwrp_base.rb +123 -123
  707. data/lib/chef/resource/macos_userdefaults.rb +132 -132
  708. data/lib/chef/resource/macosx_service.rb +41 -41
  709. data/lib/chef/resource/macports_package.rb +29 -29
  710. data/lib/chef/resource/mdadm.rb +67 -67
  711. data/lib/chef/resource/mount.rb +96 -96
  712. data/lib/chef/resource/msu_package.rb +49 -49
  713. data/lib/chef/resource/ohai.rb +41 -41
  714. data/lib/chef/resource/ohai_hint.rb +95 -95
  715. data/lib/chef/resource/openbsd_package.rb +38 -38
  716. data/lib/chef/resource/openssl_dhparam.rb +77 -77
  717. data/lib/chef/resource/openssl_ec_private_key.rb +93 -93
  718. data/lib/chef/resource/openssl_ec_public_key.rb +75 -75
  719. data/lib/chef/resource/openssl_rsa_private_key.rb +91 -91
  720. data/lib/chef/resource/openssl_rsa_public_key.rb +74 -74
  721. data/lib/chef/resource/openssl_x509_certificate.rb +221 -221
  722. data/lib/chef/resource/openssl_x509_crl.rb +132 -132
  723. data/lib/chef/resource/openssl_x509_request.rb +151 -151
  724. data/lib/chef/resource/osx_profile.rb +48 -48
  725. data/lib/chef/resource/package.rb +73 -73
  726. data/lib/chef/resource/pacman_package.rb +30 -30
  727. data/lib/chef/resource/paludis_package.rb +38 -38
  728. data/lib/chef/resource/perl.rb +38 -38
  729. data/lib/chef/resource/portage_package.rb +33 -33
  730. data/lib/chef/resource/powershell_package.rb +52 -52
  731. data/lib/chef/resource/powershell_package_source.rb +169 -169
  732. data/lib/chef/resource/powershell_script.rb +59 -59
  733. data/lib/chef/resource/python.rb +36 -36
  734. data/lib/chef/resource/reboot.rb +46 -46
  735. data/lib/chef/resource/registry_key.rb +130 -130
  736. data/lib/chef/resource/remote_directory.rb +87 -87
  737. data/lib/chef/resource/remote_file.rb +181 -181
  738. data/lib/chef/resource/resource_notification.rb +143 -139
  739. data/lib/chef/resource/rhsm_errata.rb +46 -46
  740. data/lib/chef/resource/rhsm_errata_level.rb +51 -51
  741. data/lib/chef/resource/rhsm_register.rb +168 -168
  742. data/lib/chef/resource/rhsm_repo.rb +65 -65
  743. data/lib/chef/resource/rhsm_subscription.rb +98 -98
  744. data/lib/chef/resource/route.rb +46 -46
  745. data/lib/chef/resource/rpm_package.rb +33 -33
  746. data/lib/chef/resource/ruby.rb +37 -37
  747. data/lib/chef/resource/ruby_block.rb +45 -45
  748. data/lib/chef/resource/scm.rb +75 -75
  749. data/lib/chef/resource/script.rb +54 -54
  750. data/lib/chef/resource/service.rb +221 -221
  751. data/lib/chef/resource/smartos_package.rb +31 -31
  752. data/lib/chef/resource/solaris_package.rb +33 -33
  753. data/lib/chef/resource/ssh_known_hosts_entry.rb +146 -146
  754. data/lib/chef/resource/subversion.rb +55 -55
  755. data/lib/chef/resource/sudo.rb +230 -230
  756. data/lib/chef/resource/support/cron.d.erb +28 -28
  757. data/lib/chef/resource/support/cron_access.erb +4 -4
  758. data/lib/chef/resource/support/ssh_known_hosts.erb +3 -3
  759. data/lib/chef/resource/support/sudoer.erb +18 -18
  760. data/lib/chef/resource/swap_file.rb +209 -209
  761. data/lib/chef/resource/sysctl.rb +151 -151
  762. data/lib/chef/resource/systemd_unit.rb +86 -86
  763. data/lib/chef/resource/template.rb +211 -211
  764. data/lib/chef/resource/timezone.rb +135 -135
  765. data/lib/chef/resource/user.rb +159 -159
  766. data/lib/chef/resource/user/aix_user.rb +31 -31
  767. data/lib/chef/resource/user/dscl_user.rb +31 -31
  768. data/lib/chef/resource/user/linux_user.rb +32 -32
  769. data/lib/chef/resource/user/pw_user.rb +31 -31
  770. data/lib/chef/resource/user/solaris_user.rb +31 -31
  771. data/lib/chef/resource/user/windows_user.rb +35 -35
  772. data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
  773. data/lib/chef/resource/windows_ad_join.rb +120 -120
  774. data/lib/chef/resource/windows_auto_run.rb +87 -87
  775. data/lib/chef/resource/windows_certificate.rb +332 -332
  776. data/lib/chef/resource/windows_env.rb +49 -49
  777. data/lib/chef/resource/windows_feature.rb +90 -90
  778. data/lib/chef/resource/windows_feature_dism.rb +222 -222
  779. data/lib/chef/resource/windows_feature_powershell.rb +262 -262
  780. data/lib/chef/resource/windows_firewall_rule.rb +205 -205
  781. data/lib/chef/resource/windows_font.rb +125 -125
  782. data/lib/chef/resource/windows_package.rb +61 -61
  783. data/lib/chef/resource/windows_pagefile.rb +206 -206
  784. data/lib/chef/resource/windows_path.rb +38 -38
  785. data/lib/chef/resource/windows_printer.rb +146 -146
  786. data/lib/chef/resource/windows_printer_port.rb +136 -136
  787. data/lib/chef/resource/windows_script.rb +65 -65
  788. data/lib/chef/resource/windows_service.rb +121 -121
  789. data/lib/chef/resource/windows_share.rb +324 -324
  790. data/lib/chef/resource/windows_shortcut.rb +79 -79
  791. data/lib/chef/resource/windows_task.rb +349 -349
  792. data/lib/chef/resource/windows_workgroup.rb +112 -112
  793. data/lib/chef/resource/yum_package.rb +77 -77
  794. data/lib/chef/resource/yum_repository.rb +187 -187
  795. data/lib/chef/resource/zypper_package.rb +44 -44
  796. data/lib/chef/resource/zypper_repository.rb +103 -103
  797. data/lib/chef/resource_builder.rb +92 -92
  798. data/lib/chef/resource_collection.rb +153 -147
  799. data/lib/chef/resource_collection/resource_collection_serialization.rb +68 -68
  800. data/lib/chef/resource_collection/resource_list.rb +106 -106
  801. data/lib/chef/resource_collection/resource_set.rb +200 -200
  802. data/lib/chef/resource_collection/stepable_iterator.rb +122 -122
  803. data/lib/chef/resource_definition.rb +68 -68
  804. data/lib/chef/resource_definition_list.rb +38 -38
  805. data/lib/chef/resource_inspector.rb +108 -108
  806. data/lib/chef/resource_reporter.rb +337 -337
  807. data/lib/chef/resource_resolver.rb +160 -160
  808. data/lib/chef/resources.rb +147 -147
  809. data/lib/chef/role.rb +274 -274
  810. data/lib/chef/run_context.rb +708 -682
  811. data/lib/chef/run_context/cookbook_compiler.rb +344 -344
  812. data/lib/chef/run_list.rb +168 -168
  813. data/lib/chef/run_list/run_list_expansion.rb +236 -236
  814. data/lib/chef/run_list/run_list_item.rb +98 -98
  815. data/lib/chef/run_list/versioned_recipe_list.rb +104 -104
  816. data/lib/chef/run_lock.rb +197 -197
  817. data/lib/chef/run_status.rb +127 -127
  818. data/lib/chef/runner.rb +184 -144
  819. data/lib/chef/sandbox.rb +20 -20
  820. data/lib/chef/scan_access_control.rb +138 -138
  821. data/lib/chef/search/query.rb +182 -182
  822. data/lib/chef/server_api.rb +83 -83
  823. data/lib/chef/server_api_versions.rb +59 -59
  824. data/lib/chef/shell.rb +353 -353
  825. data/lib/chef/shell/ext.rb +593 -593
  826. data/lib/chef/shell/model_wrapper.rb +120 -120
  827. data/lib/chef/shell/shell_session.rb +310 -310
  828. data/lib/chef/user.rb +194 -194
  829. data/lib/chef/user_v1.rb +325 -325
  830. data/lib/chef/util/backup.rb +94 -94
  831. data/lib/chef/util/diff.rb +184 -184
  832. data/lib/chef/util/dsc/configuration_generator.rb +139 -139
  833. data/lib/chef/util/dsc/lcm_output_parser.rb +192 -192
  834. data/lib/chef/util/dsc/local_configuration_manager.rb +151 -151
  835. data/lib/chef/util/dsc/resource_info.rb +26 -26
  836. data/lib/chef/util/dsc/resource_store.rb +109 -109
  837. data/lib/chef/util/editor.rb +91 -91
  838. data/lib/chef/util/file_edit.rb +100 -100
  839. data/lib/chef/util/path_helper.rb +25 -25
  840. data/lib/chef/util/powershell/cmdlet.rb +173 -173
  841. data/lib/chef/util/powershell/cmdlet_result.rb +61 -61
  842. data/lib/chef/util/powershell/ps_credential.rb +41 -41
  843. data/lib/chef/util/selinux.rb +93 -93
  844. data/lib/chef/util/threaded_job_queue.rb +61 -61
  845. data/lib/chef/util/windows.rb +24 -24
  846. data/lib/chef/util/windows/logon_session.rb +129 -129
  847. data/lib/chef/util/windows/net_group.rb +78 -78
  848. data/lib/chef/util/windows/net_use.rb +81 -81
  849. data/lib/chef/util/windows/net_user.rb +172 -172
  850. data/lib/chef/util/windows/volume.rb +49 -49
  851. data/lib/chef/version.rb +36 -36
  852. data/lib/chef/version/platform.rb +62 -62
  853. data/lib/chef/version_class.rb +75 -75
  854. data/lib/chef/version_constraint.rb +118 -118
  855. data/lib/chef/version_constraint/platform.rb +28 -28
  856. data/lib/chef/version_string.rb +143 -143
  857. data/lib/chef/whitelist.rb +86 -86
  858. data/lib/chef/win32/api.rb +372 -372
  859. data/lib/chef/win32/api/crypto.rb +63 -63
  860. data/lib/chef/win32/api/error.rb +953 -953
  861. data/lib/chef/win32/api/file.rb +620 -620
  862. data/lib/chef/win32/api/installer.rb +165 -165
  863. data/lib/chef/win32/api/memory.rb +105 -105
  864. data/lib/chef/win32/api/net.rb +328 -328
  865. data/lib/chef/win32/api/process.rb +42 -42
  866. data/lib/chef/win32/api/psapi.rb +51 -51
  867. data/lib/chef/win32/api/registry.rb +51 -51
  868. data/lib/chef/win32/api/security.rb +476 -476
  869. data/lib/chef/win32/api/synchronization.rb +89 -89
  870. data/lib/chef/win32/api/system.rb +238 -238
  871. data/lib/chef/win32/api/unicode.rb +135 -135
  872. data/lib/chef/win32/crypto.rb +50 -50
  873. data/lib/chef/win32/error.rb +86 -86
  874. data/lib/chef/win32/eventlog.rb +31 -31
  875. data/lib/chef/win32/file.rb +226 -226
  876. data/lib/chef/win32/file/info.rb +99 -99
  877. data/lib/chef/win32/file/version_info.rb +93 -93
  878. data/lib/chef/win32/handle.rb +55 -55
  879. data/lib/chef/win32/memory.rb +101 -101
  880. data/lib/chef/win32/mutex.rb +116 -116
  881. data/lib/chef/win32/net.rb +326 -326
  882. data/lib/chef/win32/process.rb +97 -97
  883. data/lib/chef/win32/registry.rb +374 -374
  884. data/lib/chef/win32/security.rb +698 -698
  885. data/lib/chef/win32/security/ace.rb +123 -123
  886. data/lib/chef/win32/security/acl.rb +103 -103
  887. data/lib/chef/win32/security/securable_object.rb +109 -109
  888. data/lib/chef/win32/security/security_descriptor.rb +93 -93
  889. data/lib/chef/win32/security/sid.rb +347 -347
  890. data/lib/chef/win32/security/token.rb +72 -72
  891. data/lib/chef/win32/system.rb +62 -62
  892. data/lib/chef/win32/unicode.rb +66 -66
  893. data/lib/chef/win32/version.rb +151 -151
  894. data/lib/chef/win32_service_constants.rb +143 -143
  895. data/lib/chef/workstation_config_loader.rb +23 -23
  896. data/spec/.DS_Store +0 -0
  897. data/spec/data/.DS_Store +0 -0
  898. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  899. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  900. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  901. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
  902. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  903. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  904. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  905. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  906. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  907. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  908. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
  909. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  910. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  911. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  912. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
  913. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
  914. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
  915. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
  916. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
  917. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
  918. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
  919. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
  920. data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
  921. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
  922. data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
  923. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
  924. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
  925. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
  926. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
  927. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
  928. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  929. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  930. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  931. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  932. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  933. data/spec/data/apt/var/www/apt/db/version +4 -4
  934. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  935. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  936. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  937. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  938. data/spec/data/bootstrap/no_proxy.erb +2 -2
  939. data/spec/data/bootstrap/secret.erb +9 -9
  940. data/spec/data/bootstrap/test-hints.erb +12 -12
  941. data/spec/data/bootstrap/test.erb +1 -1
  942. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  943. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  944. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  945. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  946. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  947. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  948. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  949. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  950. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  951. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  952. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  953. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  954. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  955. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  956. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  957. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  958. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  959. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  960. data/spec/data/client.d_00/00-foo.rb +2 -2
  961. data/spec/data/client.d_00/01-bar.rb +1 -1
  962. data/spec/data/client.d_00/02-strings.rb +2 -2
  963. data/spec/data/client.d_00/bar +1 -1
  964. data/spec/data/client.d_01/foo/bar.rb +1 -1
  965. data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
  966. data/spec/data/config.rb +6 -6
  967. data/spec/data/cookbooks/.DS_Store +0 -0
  968. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  969. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  970. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  971. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  972. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  973. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  974. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  975. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  976. data/spec/data/cookbooks/chefignore +8 -8
  977. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  978. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  979. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  980. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  981. data/spec/data/cookbooks/java/.DS_Store +0 -0
  982. data/spec/data/cookbooks/java/files/.DS_Store +0 -0
  983. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  984. data/spec/data/cookbooks/java/metadata.rb +2 -2
  985. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  986. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  987. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
  988. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  989. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  990. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  991. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  992. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  993. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  994. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  995. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  996. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  997. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  998. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  999. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  1000. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  1001. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  1002. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  1003. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  1004. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  1005. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  1006. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  1007. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  1008. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  1009. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
  1010. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  1011. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
  1012. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
  1013. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  1014. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -1
  1015. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  1016. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  1017. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  1018. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  1019. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  1020. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  1021. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  1022. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
  1023. data/spec/data/definitions/test.rb +4 -4
  1024. data/spec/data/environment-config.rb +4 -4
  1025. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  1026. data/spec/data/fileedit/hosts +4 -4
  1027. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  1028. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  1029. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
  1030. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  1031. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
  1032. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
  1033. data/spec/data/kitchen/chefignore +6 -6
  1034. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  1035. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  1036. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  1037. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  1038. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  1039. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  1040. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  1041. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  1042. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  1043. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  1044. data/spec/data/lwrp/providers/buck_passer.rb +28 -28
  1045. data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
  1046. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
  1047. data/spec/data/lwrp/providers/inline_compiler.rb +24 -24
  1048. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  1049. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  1050. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  1051. data/spec/data/lwrp/resources/bar.rb +2 -2
  1052. data/spec/data/lwrp/resources/buck_passer.rb +5 -5
  1053. data/spec/data/lwrp/resources/buck_passer_2.rb +3 -3
  1054. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -3
  1055. data/spec/data/lwrp/resources/foo.rb +4 -4
  1056. data/spec/data/lwrp/resources/inline_compiler.rb +3 -3
  1057. data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -5
  1058. data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -3
  1059. data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -3
  1060. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  1061. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  1062. data/spec/data/lwrp_override/resources/foo.rb +10 -10
  1063. data/spec/data/mac_users/.DS_Store +0 -0
  1064. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  1065. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  1066. data/spec/data/mac_users/10.7.plist.xml +559 -559
  1067. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  1068. data/spec/data/mac_users/10.8.plist.xml +559 -559
  1069. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  1070. data/spec/data/mac_users/10.9.plist.xml +560 -560
  1071. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  1072. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  1073. data/spec/data/mixin/invalid_data.rb +3 -3
  1074. data/spec/data/mixin/real_data.rb +2 -2
  1075. data/spec/data/nested.json +2 -2
  1076. data/spec/data/nodes/Tim.local.json +3 -0
  1077. data/spec/data/nodes/Tims-MBP.local.json +3 -0
  1078. data/spec/data/nodes/default.rb +15 -15
  1079. data/spec/data/nodes/test.example.com.rb +17 -17
  1080. data/spec/data/nodes/test.rb +15 -15
  1081. data/spec/data/null_config.rb +1 -1
  1082. data/spec/data/object_loader/environments/test.json +7 -7
  1083. data/spec/data/object_loader/environments/test.rb +2 -2
  1084. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  1085. data/spec/data/object_loader/nodes/test.json +7 -7
  1086. data/spec/data/object_loader/nodes/test.rb +2 -2
  1087. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  1088. data/spec/data/object_loader/roles/test.json +7 -7
  1089. data/spec/data/object_loader/roles/test.rb +2 -2
  1090. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  1091. data/spec/data/partial_one.erb +1 -1
  1092. data/spec/data/prefer_metadata_json/metadata.json +51 -51
  1093. data/spec/data/prefer_metadata_json/metadata.rb +6 -6
  1094. data/spec/data/recipes/test.rb +7 -7
  1095. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -1
  1096. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -1
  1097. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -2
  1098. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -3
  1099. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -1
  1100. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -2
  1101. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -3
  1102. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -3
  1103. data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -1
  1104. data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -2
  1105. data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -3
  1106. data/spec/data/run_context/.DS_Store +0 -0
  1107. data/spec/data/run_context/cookbooks/.DS_Store +0 -0
  1108. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
  1109. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  1110. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  1111. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  1112. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  1113. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  1114. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
  1115. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  1116. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  1117. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  1118. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  1119. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  1120. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  1121. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  1122. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -2
  1123. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  1124. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  1125. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  1126. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  1127. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -2
  1128. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  1129. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  1130. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  1131. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  1132. data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
  1133. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
  1134. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -2
  1135. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  1136. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  1137. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  1138. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
  1139. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  1140. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  1141. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  1142. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  1143. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  1144. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
  1145. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  1146. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  1147. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  1148. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  1149. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  1150. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  1151. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  1152. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  1153. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  1154. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  1155. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  1156. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  1157. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  1158. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  1159. data/spec/data/run_context/nodes/run_context.rb +5 -5
  1160. data/spec/data/sample_msu1.xml +10 -10
  1161. data/spec/data/sample_msu2.xml +14 -14
  1162. data/spec/data/sample_msu3.xml +16 -16
  1163. data/spec/data/search_queries_to_transform.txt +98 -98
  1164. data/spec/data/shef-config.rb +11 -11
  1165. data/spec/data/ssl/5e707473.0 +18 -18
  1166. data/spec/data/ssl/chef-rspec.cert +27 -27
  1167. data/spec/data/ssl/chef-rspec.key +27 -27
  1168. data/spec/data/ssl/key.pem +15 -15
  1169. data/spec/data/ssl/private_key.pem +27 -27
  1170. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  1171. data/spec/data/standalone_cookbook/chefignore +9 -9
  1172. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  1173. data/spec/data/templates/failed.erb +5 -5
  1174. data/spec/data/trusted_certs/example.crt +22 -22
  1175. data/spec/data/trusted_certs/example_no_cn.crt +36 -36
  1176. data/spec/data/trusted_certs/intermediate.pem +27 -27
  1177. data/spec/data/trusted_certs/opscode.pem +57 -57
  1178. data/spec/data/trusted_certs/root.pem +22 -22
  1179. data/spec/data/windows_certificates/base64_test.cer +22 -22
  1180. data/spec/data/windows_certificates/test.pem +21 -21
  1181. data/spec/functional/.DS_Store +0 -0
  1182. data/spec/functional/application_spec.rb +58 -58
  1183. data/spec/functional/assets/chefinittest +36 -36
  1184. data/spec/functional/assets/inittest +36 -36
  1185. data/spec/functional/assets/testchefsubsys +10 -10
  1186. data/spec/functional/assets/yumrepo/repodata/repomd.xml +21 -21
  1187. data/spec/functional/audit/rspec_formatter_spec.rb +54 -54
  1188. data/spec/functional/audit/runner_spec.rb +121 -121
  1189. data/spec/functional/dsl/reboot_pending_spec.rb +106 -106
  1190. data/spec/functional/dsl/registry_helper_spec.rb +61 -61
  1191. data/spec/functional/event_loggers/windows_eventlog_spec.rb +104 -104
  1192. data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
  1193. data/spec/functional/http/simple_spec.rb +146 -146
  1194. data/spec/functional/knife/configure_spec.rb +33 -33
  1195. data/spec/functional/knife/cookbook_delete_spec.rb +156 -156
  1196. data/spec/functional/knife/exec_spec.rb +55 -55
  1197. data/spec/functional/knife/rehash_spec.rb +39 -39
  1198. data/spec/functional/knife/smoke_test.rb +42 -42
  1199. data/spec/functional/knife/ssh_spec.rb +359 -359
  1200. data/spec/functional/mixin/from_file_spec.rb +82 -82
  1201. data/spec/functional/mixin/powershell_out_spec.rb +43 -43
  1202. data/spec/functional/mixin/shell_out_spec.rb +78 -78
  1203. data/spec/functional/mixin/user_context_spec.rb +117 -117
  1204. data/spec/functional/notifications_spec.rb +238 -238
  1205. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +100 -100
  1206. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -51
  1207. data/spec/functional/rebooter_spec.rb +117 -117
  1208. data/spec/functional/resource/.DS_Store +0 -0
  1209. data/spec/functional/resource/aix_service_spec.rb +138 -138
  1210. data/spec/functional/resource/aixinit_service_spec.rb +211 -211
  1211. data/spec/functional/resource/apt_package_spec.rb +386 -386
  1212. data/spec/functional/resource/base.rb +28 -28
  1213. data/spec/functional/resource/bash_spec.rb +54 -54
  1214. data/spec/functional/resource/batch_spec.rb +34 -34
  1215. data/spec/functional/resource/bff_spec.rb +120 -120
  1216. data/spec/functional/resource/chocolatey_package_spec.rb +118 -118
  1217. data/spec/functional/resource/cookbook_file_spec.rb +81 -81
  1218. data/spec/functional/resource/cron_spec.rb +179 -179
  1219. data/spec/functional/resource/directory_spec.rb +43 -43
  1220. data/spec/functional/resource/dnf_package_spec.rb +686 -686
  1221. data/spec/functional/resource/dpkg_package_spec.rb +339 -339
  1222. data/spec/functional/resource/dsc_resource_spec.rb +90 -90
  1223. data/spec/functional/resource/dsc_script_spec.rb +484 -484
  1224. data/spec/functional/resource/execute_spec.rb +171 -171
  1225. data/spec/functional/resource/file_spec.rb +167 -167
  1226. data/spec/functional/resource/git_spec.rb +257 -257
  1227. data/spec/functional/resource/group_spec.rb +497 -497
  1228. data/spec/functional/resource/ifconfig_spec.rb +172 -172
  1229. data/spec/functional/resource/insserv_spec.rb +206 -205
  1230. data/spec/functional/resource/link_spec.rb +699 -699
  1231. data/spec/functional/resource/mount_spec.rb +207 -207
  1232. data/spec/functional/resource/msu_package_spec.rb +98 -98
  1233. data/spec/functional/resource/ohai_spec.rb +62 -62
  1234. data/spec/functional/resource/powershell_script_spec.rb +599 -599
  1235. data/spec/functional/resource/reboot_spec.rb +103 -103
  1236. data/spec/functional/resource/registry_spec.rb +676 -676
  1237. data/spec/functional/resource/remote_directory_spec.rb +220 -220
  1238. data/spec/functional/resource/remote_file_spec.rb +424 -424
  1239. data/spec/functional/resource/rpm_spec.rb +120 -120
  1240. data/spec/functional/resource/template_spec.rb +245 -245
  1241. data/spec/functional/resource/timezone_spec.rb +39 -39
  1242. data/spec/functional/resource/user/dscl_spec.rb +195 -195
  1243. data/spec/functional/resource/user/windows_spec.rb +245 -245
  1244. data/spec/functional/resource/windows_certificate_spec.rb +492 -492
  1245. data/spec/functional/resource/windows_env_spec.rb +285 -285
  1246. data/spec/functional/resource/windows_package_spec.rb +168 -168
  1247. data/spec/functional/resource/windows_path_spec.rb +64 -64
  1248. data/spec/functional/resource/windows_service_spec.rb +102 -102
  1249. data/spec/functional/resource/windows_task_spec.rb +1917 -1917
  1250. data/spec/functional/resource/yum_package_spec.rb +959 -959
  1251. data/spec/functional/resource/zypper_package_spec.rb +233 -233
  1252. data/spec/functional/root_alias_spec.rb +78 -78
  1253. data/spec/functional/run_lock_spec.rb +473 -473
  1254. data/spec/functional/shell_spec.rb +146 -146
  1255. data/spec/functional/tiny_server_spec.rb +79 -79
  1256. data/spec/functional/util/.DS_Store +0 -0
  1257. data/spec/functional/util/path_helper_spec.rb +37 -37
  1258. data/spec/functional/util/powershell/cmdlet_spec.rb +111 -111
  1259. data/spec/functional/version_spec.rb +35 -35
  1260. data/spec/functional/win32/crypto_spec.rb +54 -54
  1261. data/spec/functional/win32/registry_spec.rb +624 -624
  1262. data/spec/functional/win32/security_spec.rb +206 -206
  1263. data/spec/functional/win32/service_manager_spec.rb +220 -220
  1264. data/spec/functional/win32/sid_spec.rb +55 -55
  1265. data/spec/functional/win32/version_info_spec.rb +50 -50
  1266. data/spec/functional/win32/versions_spec.rb +115 -115
  1267. data/spec/integration/.DS_Store +0 -0
  1268. data/spec/integration/client/client_spec.rb +732 -732
  1269. data/spec/integration/client/exit_code_spec.rb +142 -142
  1270. data/spec/integration/client/ipv6_spec.rb +134 -134
  1271. data/spec/integration/knife/chef_fs_data_store_spec.rb +556 -556
  1272. data/spec/integration/knife/chef_repo_path_spec.rb +961 -959
  1273. data/spec/integration/knife/chef_repository_file_system_spec.rb +199 -199
  1274. data/spec/integration/knife/chefignore_spec.rb +300 -300
  1275. data/spec/integration/knife/client_bulk_delete_spec.rb +130 -130
  1276. data/spec/integration/knife/client_create_spec.rb +69 -69
  1277. data/spec/integration/knife/client_delete_spec.rb +63 -63
  1278. data/spec/integration/knife/client_key_create_spec.rb +65 -65
  1279. data/spec/integration/knife/client_key_delete_spec.rb +42 -42
  1280. data/spec/integration/knife/client_key_list_spec.rb +60 -60
  1281. data/spec/integration/knife/client_key_show_spec.rb +44 -44
  1282. data/spec/integration/knife/client_list_spec.rb +48 -48
  1283. data/spec/integration/knife/client_show_spec.rb +36 -36
  1284. data/spec/integration/knife/common_options_spec.rb +173 -173
  1285. data/spec/integration/knife/config_get_profile_spec.rb +112 -112
  1286. data/spec/integration/knife/config_get_spec.rb +183 -183
  1287. data/spec/integration/knife/config_list_profiles_spec.rb +188 -188
  1288. data/spec/integration/knife/config_use_profile_spec.rb +100 -100
  1289. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
  1290. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -64
  1291. data/spec/integration/knife/cookbook_download_spec.rb +71 -71
  1292. data/spec/integration/knife/cookbook_list_spec.rb +54 -54
  1293. data/spec/integration/knife/cookbook_show_spec.rb +148 -148
  1294. data/spec/integration/knife/cookbook_upload_spec.rb +90 -90
  1295. data/spec/integration/knife/data_bag_create_spec.rb +124 -124
  1296. data/spec/integration/knife/data_bag_delete_spec.rb +58 -58
  1297. data/spec/integration/knife/data_bag_edit_spec.rb +104 -104
  1298. data/spec/integration/knife/data_bag_from_file_spec.rb +115 -115
  1299. data/spec/integration/knife/data_bag_list_spec.rb +43 -43
  1300. data/spec/integration/knife/data_bag_show_spec.rb +94 -94
  1301. data/spec/integration/knife/delete_spec.rb +1017 -1017
  1302. data/spec/integration/knife/deps_spec.rb +702 -702
  1303. data/spec/integration/knife/diff_spec.rb +602 -602
  1304. data/spec/integration/knife/download_spec.rb +1333 -1333
  1305. data/spec/integration/knife/environment_compare_spec.rb +74 -74
  1306. data/spec/integration/knife/environment_create_spec.rb +40 -40
  1307. data/spec/integration/knife/environment_delete_spec.rb +36 -36
  1308. data/spec/integration/knife/environment_from_file_spec.rb +115 -115
  1309. data/spec/integration/knife/environment_list_spec.rb +41 -41
  1310. data/spec/integration/knife/environment_show_spec.rb +76 -76
  1311. data/spec/integration/knife/list_spec.rb +1059 -1059
  1312. data/spec/integration/knife/node_bulk_delete_spec.rb +51 -51
  1313. data/spec/integration/knife/node_create_spec.rb +46 -46
  1314. data/spec/integration/knife/node_delete_spec.rb +47 -47
  1315. data/spec/integration/knife/node_environment_set_spec.rb +45 -45
  1316. data/spec/integration/knife/node_from_file_spec.rb +58 -58
  1317. data/spec/integration/knife/node_list_spec.rb +44 -44
  1318. data/spec/integration/knife/node_run_list_add_spec.rb +53 -53
  1319. data/spec/integration/knife/node_run_list_remove_spec.rb +35 -35
  1320. data/spec/integration/knife/node_run_list_set_spec.rb +40 -40
  1321. data/spec/integration/knife/node_show_spec.rb +35 -35
  1322. data/spec/integration/knife/raw_spec.rb +248 -248
  1323. data/spec/integration/knife/redirection_spec.rb +54 -54
  1324. data/spec/integration/knife/role_bulk_delete_spec.rb +51 -51
  1325. data/spec/integration/knife/role_create_spec.rb +40 -40
  1326. data/spec/integration/knife/role_delete_spec.rb +47 -47
  1327. data/spec/integration/knife/role_from_file_spec.rb +95 -95
  1328. data/spec/integration/knife/role_list_spec.rb +44 -44
  1329. data/spec/integration/knife/role_show_spec.rb +50 -50
  1330. data/spec/integration/knife/search_node_spec.rb +39 -39
  1331. data/spec/integration/knife/serve_spec.rb +93 -93
  1332. data/spec/integration/knife/show_spec.rb +167 -167
  1333. data/spec/integration/knife/upload_spec.rb +1540 -1540
  1334. data/spec/integration/recipes/accumulator_spec.rb +232 -232
  1335. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +171 -171
  1336. data/spec/integration/recipes/lwrp_spec.rb +53 -53
  1337. data/spec/integration/recipes/noop_resource_spec.rb +24 -24
  1338. data/spec/integration/recipes/notifies_spec.rb +394 -394
  1339. data/spec/integration/recipes/notifying_block_spec.rb +111 -111
  1340. data/spec/integration/recipes/provider_choice.rb +37 -37
  1341. data/spec/integration/recipes/recipe_dsl_spec.rb +1373 -1373
  1342. data/spec/integration/recipes/remote_directory.rb +74 -74
  1343. data/spec/integration/recipes/resource_action_spec.rb +504 -504
  1344. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +552 -552
  1345. data/spec/integration/recipes/resource_load_spec.rb +192 -192
  1346. data/spec/integration/recipes/unified_mode_spec.rb +876 -0
  1347. data/spec/integration/solo/solo_spec.rb +217 -217
  1348. data/spec/rcov.opts +2 -2
  1349. data/spec/scripts/ssl-serve.rb +47 -47
  1350. data/spec/spec_helper.rb +332 -328
  1351. data/spec/stress/.DS_Store +0 -0
  1352. data/spec/stress/win32/file_spec.rb +37 -37
  1353. data/spec/stress/win32/memory_spec.rb +22 -22
  1354. data/spec/stress/win32/security_spec.rb +69 -69
  1355. data/spec/support/.DS_Store +0 -0
  1356. data/spec/support/chef_helpers.rb +115 -115
  1357. data/spec/support/key_helpers.rb +104 -104
  1358. data/spec/support/lib/chef/provider/easy.rb +35 -35
  1359. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -29
  1360. data/spec/support/lib/chef/provider/snakeoil.rb +42 -42
  1361. data/spec/support/lib/chef/resource/cat.rb +39 -39
  1362. data/spec/support/lib/chef/resource/one_two_three_four.rb +36 -36
  1363. data/spec/support/lib/chef/resource/openldap_includer.rb +28 -28
  1364. data/spec/support/lib/chef/resource/with_state.rb +30 -30
  1365. data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
  1366. data/spec/support/lib/chef/resource/zen_master.rb +40 -40
  1367. data/spec/support/lib/library_load_order.rb +20 -20
  1368. data/spec/support/matchers/leak.rb +98 -98
  1369. data/spec/support/mock/constant.rb +52 -52
  1370. data/spec/support/mock/platform.rb +25 -25
  1371. data/spec/support/platform_helpers.rb +276 -268
  1372. data/spec/support/platforms/prof/gc.rb +51 -51
  1373. data/spec/support/platforms/prof/win32.rb +45 -45
  1374. data/spec/support/platforms/win32/spec_service.rb +59 -59
  1375. data/spec/support/shared/context/client.rb +305 -305
  1376. data/spec/support/shared/context/config.rb +21 -21
  1377. data/spec/support/shared/context/win32.rb +34 -34
  1378. data/spec/support/shared/examples/client.rb +104 -104
  1379. data/spec/support/shared/functional/diff_disabled.rb +10 -10
  1380. data/spec/support/shared/functional/directory_resource.rb +178 -178
  1381. data/spec/support/shared/functional/execute_resource.rb +150 -150
  1382. data/spec/support/shared/functional/file_resource.rb +1050 -1050
  1383. data/spec/support/shared/functional/http.rb +248 -248
  1384. data/spec/support/shared/functional/knife.rb +37 -37
  1385. data/spec/support/shared/functional/securable_resource.rb +578 -578
  1386. data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
  1387. data/spec/support/shared/functional/win32_service.rb +57 -57
  1388. data/spec/support/shared/functional/windows_script.rb +272 -272
  1389. data/spec/support/shared/integration/app_server_support.rb +40 -40
  1390. data/spec/support/shared/integration/integration_helper.rb +154 -154
  1391. data/spec/support/shared/integration/knife_support.rb +196 -196
  1392. data/spec/support/shared/matchers/exit_with_code.rb +32 -32
  1393. data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
  1394. data/spec/support/shared/shared_examples.rb +14 -14
  1395. data/spec/support/shared/unit/api_error_inspector.rb +190 -190
  1396. data/spec/support/shared/unit/api_versioning.rb +77 -77
  1397. data/spec/support/shared/unit/application_dot_d.rb +75 -75
  1398. data/spec/support/shared/unit/execute_resource.rb +168 -168
  1399. data/spec/support/shared/unit/file_system_support.rb +69 -69
  1400. data/spec/support/shared/unit/knife_shared.rb +39 -39
  1401. data/spec/support/shared/unit/mock_shellout.rb +49 -49
  1402. data/spec/support/shared/unit/platform_introspector.rb +189 -189
  1403. data/spec/support/shared/unit/provider/file.rb +854 -854
  1404. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +402 -402
  1405. data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
  1406. data/spec/support/shared/unit/script_resource.rb +90 -90
  1407. data/spec/support/shared/unit/user_and_client_shared.rb +114 -114
  1408. data/spec/support/shared/unit/windows_script_resource.rb +80 -80
  1409. data/spec/tiny_server.rb +191 -191
  1410. data/spec/unit/.DS_Store +0 -0
  1411. data/spec/unit/api_client/registration_spec.rb +278 -278
  1412. data/spec/unit/api_client_spec.rb +341 -341
  1413. data/spec/unit/api_client_v1_spec.rb +455 -455
  1414. data/spec/unit/application/apply_spec.rb +113 -113
  1415. data/spec/unit/application/client_spec.rb +559 -559
  1416. data/spec/unit/application/exit_code_spec.rb +144 -144
  1417. data/spec/unit/application/knife_spec.rb +229 -229
  1418. data/spec/unit/application/solo_spec.rb +225 -225
  1419. data/spec/unit/application_spec.rb +486 -486
  1420. data/spec/unit/audit/audit_event_proxy_spec.rb +318 -318
  1421. data/spec/unit/audit/audit_reporter_spec.rb +435 -435
  1422. data/spec/unit/audit/control_group_data_spec.rb +482 -482
  1423. data/spec/unit/audit/logger_spec.rb +42 -42
  1424. data/spec/unit/audit/rspec_formatter_spec.rb +29 -29
  1425. data/spec/unit/audit/runner_spec.rb +144 -144
  1426. data/spec/unit/chef_class_spec.rb +240 -240
  1427. data/spec/unit/chef_fs/config_spec.rb +235 -235
  1428. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +82 -82
  1429. data/spec/unit/chef_fs/data_handler/data_handler_base_spec.rb +65 -65
  1430. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -63
  1431. data/spec/unit/chef_fs/diff_spec.rb +328 -328
  1432. data/spec/unit/chef_fs/file_pattern_spec.rb +512 -512
  1433. data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -34
  1434. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -47
  1435. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +126 -126
  1436. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +175 -175
  1437. data/spec/unit/chef_fs/file_system_spec.rb +148 -148
  1438. data/spec/unit/chef_fs/parallelizer.rb +477 -477
  1439. data/spec/unit/chef_fs/path_util_spec.rb +108 -108
  1440. data/spec/unit/chef_spec.rb +25 -25
  1441. data/spec/unit/client_spec.rb +595 -595
  1442. data/spec/unit/config_fetcher_spec.rb +125 -125
  1443. data/spec/unit/config_spec.rb +31 -31
  1444. data/spec/unit/cookbook/chefignore_spec.rb +49 -49
  1445. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +210 -210
  1446. data/spec/unit/cookbook/file_vendor_spec.rb +123 -123
  1447. data/spec/unit/cookbook/gem_installer_spec.rb +113 -92
  1448. data/spec/unit/cookbook/manifest_v0_spec.rb +133 -133
  1449. data/spec/unit/cookbook/manifest_v2_spec.rb +70 -70
  1450. data/spec/unit/cookbook/metadata_spec.rb +892 -892
  1451. data/spec/unit/cookbook/synchronizer_spec.rb +557 -557
  1452. data/spec/unit/cookbook/syntax_check_spec.rb +226 -226
  1453. data/spec/unit/cookbook_loader_spec.rb +302 -302
  1454. data/spec/unit/cookbook_manifest_spec.rb +228 -228
  1455. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +199 -199
  1456. data/spec/unit/cookbook_spec.rb +62 -62
  1457. data/spec/unit/cookbook_uploader_spec.rb +199 -199
  1458. data/spec/unit/cookbook_version_file_specificity_spec.rb +623 -623
  1459. data/spec/unit/cookbook_version_spec.rb +250 -250
  1460. data/spec/unit/daemon_spec.rb +183 -183
  1461. data/spec/unit/data_bag_item_spec.rb +392 -392
  1462. data/spec/unit/data_bag_spec.rb +260 -260
  1463. data/spec/unit/data_collector/messages/helpers_spec.rb +202 -202
  1464. data/spec/unit/data_collector/messages_spec.rb +329 -329
  1465. data/spec/unit/data_collector/resource_report_spec.rb +145 -145
  1466. data/spec/unit/data_collector_spec.rb +876 -876
  1467. data/spec/unit/decorator/lazy_array_spec.rb +58 -58
  1468. data/spec/unit/decorator/lazy_spec.rb +39 -39
  1469. data/spec/unit/decorator_spec.rb +142 -142
  1470. data/spec/unit/deprecated_spec.rb +65 -65
  1471. data/spec/unit/deprecation_spec.rb +129 -129
  1472. data/spec/unit/digester_spec.rb +49 -49
  1473. data/spec/unit/dsl/audit_spec.rb +43 -43
  1474. data/spec/unit/dsl/data_query_spec.rb +107 -107
  1475. data/spec/unit/dsl/declare_resource_spec.rb +374 -374
  1476. data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
  1477. data/spec/unit/dsl/reboot_pending_spec.rb +87 -87
  1478. data/spec/unit/dsl/recipe_spec.rb +76 -76
  1479. data/spec/unit/dsl/registry_helper_spec.rb +52 -52
  1480. data/spec/unit/dsl/resources_spec.rb +85 -85
  1481. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +96 -96
  1482. data/spec/unit/encrypted_data_bag_item_spec.rb +438 -438
  1483. data/spec/unit/environment_spec.rb +470 -470
  1484. data/spec/unit/event_dispatch/dispatcher_spec.rb +122 -122
  1485. data/spec/unit/event_dispatch/dsl_spec.rb +83 -83
  1486. data/spec/unit/exceptions_spec.rb +132 -132
  1487. data/spec/unit/file_access_control_spec.rb +308 -308
  1488. data/spec/unit/file_cache_spec.rb +114 -114
  1489. data/spec/unit/file_content_management/deploy/cp_spec.rb +44 -44
  1490. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +113 -113
  1491. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
  1492. data/spec/unit/file_content_management/tempfile_spec.rb +115 -115
  1493. data/spec/unit/formatters/base_spec.rb +100 -100
  1494. data/spec/unit/formatters/doc_spec.rb +110 -92
  1495. data/spec/unit/formatters/error_description_spec.rb +141 -141
  1496. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +76 -76
  1497. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +265 -265
  1498. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +126 -126
  1499. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -43
  1500. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +26 -26
  1501. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +26 -26
  1502. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +191 -191
  1503. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +91 -91
  1504. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +155 -155
  1505. data/spec/unit/guard_interpreter_spec.rb +41 -41
  1506. data/spec/unit/handler/json_file_spec.rb +63 -63
  1507. data/spec/unit/handler_spec.rb +302 -302
  1508. data/spec/unit/http/api_versions_spec.rb +82 -82
  1509. data/spec/unit/http/authenticator_spec.rb +125 -125
  1510. data/spec/unit/http/basic_client_spec.rb +72 -72
  1511. data/spec/unit/http/http_request_spec.rb +97 -97
  1512. data/spec/unit/http/json_input_spec.rb +128 -128
  1513. data/spec/unit/http/simple_spec.rb +32 -32
  1514. data/spec/unit/http/socketless_chef_zero_client_spec.rb +174 -174
  1515. data/spec/unit/http/ssl_policies_spec.rb +169 -169
  1516. data/spec/unit/http/validate_content_length_spec.rb +207 -207
  1517. data/spec/unit/http_spec.rb +229 -229
  1518. data/spec/unit/json_compat_spec.rb +73 -73
  1519. data/spec/unit/key_spec.rb +631 -631
  1520. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
  1521. data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
  1522. data/spec/unit/knife/bootstrap_spec.rb +972 -886
  1523. data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
  1524. data/spec/unit/knife/client_create_spec.rb +186 -186
  1525. data/spec/unit/knife/client_delete_spec.rb +99 -99
  1526. data/spec/unit/knife/client_edit_spec.rb +53 -53
  1527. data/spec/unit/knife/client_list_spec.rb +34 -34
  1528. data/spec/unit/knife/client_reregister_spec.rb +62 -62
  1529. data/spec/unit/knife/client_show_spec.rb +52 -52
  1530. data/spec/unit/knife/configure_client_spec.rb +81 -81
  1531. data/spec/unit/knife/configure_spec.rb +190 -190
  1532. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
  1533. data/spec/unit/knife/cookbook_create_spec.rb +42 -42
  1534. data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
  1535. data/spec/unit/knife/cookbook_download_spec.rb +255 -255
  1536. data/spec/unit/knife/cookbook_list_spec.rb +88 -88
  1537. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
  1538. data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
  1539. data/spec/unit/knife/cookbook_show_spec.rb +254 -254
  1540. data/spec/unit/knife/cookbook_test_spec.rb +84 -84
  1541. data/spec/unit/knife/cookbook_upload_spec.rb +331 -331
  1542. data/spec/unit/knife/core/bootstrap_context_spec.rb +324 -324
  1543. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
  1544. data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
  1545. data/spec/unit/knife/core/hashed_command_loader_spec.rb +110 -110
  1546. data/spec/unit/knife/core/node_editor_spec.rb +211 -211
  1547. data/spec/unit/knife/core/object_loader_spec.rb +81 -81
  1548. data/spec/unit/knife/core/subcommand_loader_spec.rb +64 -64
  1549. data/spec/unit/knife/core/ui_spec.rb +639 -639
  1550. data/spec/unit/knife/data_bag_create_spec.rb +175 -175
  1551. data/spec/unit/knife/data_bag_edit_spec.rb +126 -126
  1552. data/spec/unit/knife/data_bag_from_file_spec.rb +173 -173
  1553. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
  1554. data/spec/unit/knife/data_bag_show_spec.rb +138 -138
  1555. data/spec/unit/knife/environment_compare_spec.rb +112 -112
  1556. data/spec/unit/knife/environment_create_spec.rb +91 -91
  1557. data/spec/unit/knife/environment_delete_spec.rb +71 -71
  1558. data/spec/unit/knife/environment_edit_spec.rb +79 -79
  1559. data/spec/unit/knife/environment_from_file_spec.rb +90 -90
  1560. data/spec/unit/knife/environment_list_spec.rb +54 -54
  1561. data/spec/unit/knife/environment_show_spec.rb +52 -52
  1562. data/spec/unit/knife/key_create_spec.rb +223 -223
  1563. data/spec/unit/knife/key_delete_spec.rb +133 -133
  1564. data/spec/unit/knife/key_edit_spec.rb +264 -264
  1565. data/spec/unit/knife/key_helper.rb +74 -74
  1566. data/spec/unit/knife/key_list_spec.rb +216 -216
  1567. data/spec/unit/knife/key_show_spec.rb +126 -126
  1568. data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
  1569. data/spec/unit/knife/node_delete_spec.rb +77 -77
  1570. data/spec/unit/knife/node_edit_spec.rb +116 -116
  1571. data/spec/unit/knife/node_environment_set_spec.rb +56 -56
  1572. data/spec/unit/knife/node_from_file_spec.rb +59 -59
  1573. data/spec/unit/knife/node_list_spec.rb +62 -62
  1574. data/spec/unit/knife/node_policy_set_spec.rb +122 -122
  1575. data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
  1576. data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
  1577. data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
  1578. data/spec/unit/knife/node_show_spec.rb +65 -65
  1579. data/spec/unit/knife/osc_user_create_spec.rb +93 -93
  1580. data/spec/unit/knife/osc_user_delete_spec.rb +44 -44
  1581. data/spec/unit/knife/osc_user_edit_spec.rb +52 -52
  1582. data/spec/unit/knife/osc_user_list_spec.rb +37 -37
  1583. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -58
  1584. data/spec/unit/knife/osc_user_show_spec.rb +46 -46
  1585. data/spec/unit/knife/raw_spec.rb +43 -43
  1586. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
  1587. data/spec/unit/knife/role_create_spec.rb +80 -80
  1588. data/spec/unit/knife/role_delete_spec.rb +67 -67
  1589. data/spec/unit/knife/role_edit_spec.rb +77 -77
  1590. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
  1591. data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
  1592. data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
  1593. data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
  1594. data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
  1595. data/spec/unit/knife/role_from_file_spec.rb +69 -69
  1596. data/spec/unit/knife/role_list_spec.rb +54 -54
  1597. data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
  1598. data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
  1599. data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
  1600. data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
  1601. data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
  1602. data/spec/unit/knife/role_show_spec.rb +59 -59
  1603. data/spec/unit/knife/ssh_spec.rb +496 -496
  1604. data/spec/unit/knife/ssl_check_spec.rb +256 -256
  1605. data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
  1606. data/spec/unit/knife/status_spec.rb +111 -111
  1607. data/spec/unit/knife/supermarket_download_spec.rb +152 -152
  1608. data/spec/unit/knife/supermarket_install_spec.rb +201 -201
  1609. data/spec/unit/knife/supermarket_share_spec.rb +209 -209
  1610. data/spec/unit/knife/supermarket_unshare_spec.rb +78 -78
  1611. data/spec/unit/knife/tag_create_spec.rb +23 -23
  1612. data/spec/unit/knife/tag_delete_spec.rb +25 -25
  1613. data/spec/unit/knife/tag_list_spec.rb +23 -23
  1614. data/spec/unit/knife/user_create_spec.rb +214 -214
  1615. data/spec/unit/knife/user_delete_spec.rb +65 -65
  1616. data/spec/unit/knife/user_edit_spec.rb +66 -66
  1617. data/spec/unit/knife/user_list_spec.rb +36 -36
  1618. data/spec/unit/knife/user_reregister_spec.rb +74 -74
  1619. data/spec/unit/knife/user_show_spec.rb +65 -65
  1620. data/spec/unit/knife_spec.rb +588 -588
  1621. data/spec/unit/log/syslog_spec.rb +51 -51
  1622. data/spec/unit/log/winevt_spec.rb +54 -54
  1623. data/spec/unit/log_spec.rb +24 -24
  1624. data/spec/unit/lwrp_spec.rb +690 -690
  1625. data/spec/unit/mash_spec.rb +51 -51
  1626. data/spec/unit/mixin/api_version_request_handling_spec.rb +126 -126
  1627. data/spec/unit/mixin/checksum_spec.rb +54 -54
  1628. data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -54
  1629. data/spec/unit/mixin/deep_merge_spec.rb +342 -342
  1630. data/spec/unit/mixin/deprecation_spec.rb +57 -57
  1631. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -96
  1632. data/spec/unit/mixin/homebrew_user_spec.rb +96 -96
  1633. data/spec/unit/mixin/lazy_module_include.rb +71 -71
  1634. data/spec/unit/mixin/openssl_helper_spec.rb +857 -857
  1635. data/spec/unit/mixin/params_validate_spec.rb +421 -421
  1636. data/spec/unit/mixin/path_sanity_spec.rb +92 -92
  1637. data/spec/unit/mixin/powershell_exec_spec.rb +43 -43
  1638. data/spec/unit/mixin/powershell_out_spec.rb +94 -94
  1639. data/spec/unit/mixin/powershell_type_coercions_spec.rb +84 -84
  1640. data/spec/unit/mixin/properties_spec.rb +107 -107
  1641. data/spec/unit/mixin/proxified_socket_spec.rb +97 -97
  1642. data/spec/unit/mixin/securable_spec.rb +314 -314
  1643. data/spec/unit/mixin/shell_out_spec.rb +450 -450
  1644. data/spec/unit/mixin/subclass_directive_spec.rb +45 -45
  1645. data/spec/unit/mixin/template_spec.rb +321 -321
  1646. data/spec/unit/mixin/unformatter_spec.rb +61 -61
  1647. data/spec/unit/mixin/uris_spec.rb +57 -57
  1648. data/spec/unit/mixin/user_context_spec.rb +108 -108
  1649. data/spec/unit/mixin/versioned_api_spec.rb +128 -128
  1650. data/spec/unit/mixin/which.rb +160 -160
  1651. data/spec/unit/mixin/windows_architecture_helper_spec.rb +85 -85
  1652. data/spec/unit/mixin/xml_escape_spec.rb +54 -54
  1653. data/spec/unit/monkey_patches/uri_spec.rb +34 -34
  1654. data/spec/unit/monologger_spec.rb +45 -45
  1655. data/spec/unit/node/attribute_spec.rb +1276 -1276
  1656. data/spec/unit/node/immutable_collections_spec.rb +327 -327
  1657. data/spec/unit/node/vivid_mash_spec.rb +353 -353
  1658. data/spec/unit/node_map_spec.rb +242 -242
  1659. data/spec/unit/node_spec.rb +1851 -1851
  1660. data/spec/unit/org_spec.rb +196 -196
  1661. data/spec/unit/platform/query_helpers_spec.rb +207 -207
  1662. data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
  1663. data/spec/unit/policy_builder/expand_node_object_spec.rb +311 -311
  1664. data/spec/unit/policy_builder/policyfile_spec.rb +872 -872
  1665. data/spec/unit/policy_builder_spec.rb +26 -26
  1666. data/spec/unit/property/state_spec.rb +508 -508
  1667. data/spec/unit/property/validation_spec.rb +758 -758
  1668. data/spec/unit/property_spec.rb +1231 -1231
  1669. data/spec/unit/provider/apt_preference_spec.rb +87 -87
  1670. data/spec/unit/provider/apt_repository_spec.rb +254 -254
  1671. data/spec/unit/provider/apt_update_spec.rb +116 -116
  1672. data/spec/unit/provider/cookbook_file/content_spec.rb +39 -39
  1673. data/spec/unit/provider/cookbook_file_spec.rb +59 -59
  1674. data/spec/unit/provider/cron/unix_spec.rb +144 -144
  1675. data/spec/unit/provider/cron_spec.rb +1084 -1084
  1676. data/spec/unit/provider/directory_spec.rb +300 -300
  1677. data/spec/unit/provider/dsc_resource_spec.rb +343 -343
  1678. data/spec/unit/provider/dsc_script_spec.rb +173 -173
  1679. data/spec/unit/provider/execute_spec.rb +251 -251
  1680. data/spec/unit/provider/file/content_spec.rb +114 -114
  1681. data/spec/unit/provider/file_spec.rb +57 -57
  1682. data/spec/unit/provider/git_spec.rb +782 -782
  1683. data/spec/unit/provider/group/dscl_spec.rb +339 -339
  1684. data/spec/unit/provider/group/gpasswd_spec.rb +119 -119
  1685. data/spec/unit/provider/group/groupadd_spec.rb +194 -194
  1686. data/spec/unit/provider/group/groupmod_spec.rb +136 -136
  1687. data/spec/unit/provider/group/pw_spec.rb +141 -141
  1688. data/spec/unit/provider/group/suse_spec.rb +90 -90
  1689. data/spec/unit/provider/group/usermod_spec.rb +115 -115
  1690. data/spec/unit/provider/group/windows_spec.rb +124 -124
  1691. data/spec/unit/provider/group_spec.rb +286 -286
  1692. data/spec/unit/provider/http_request_spec.rb +159 -159
  1693. data/spec/unit/provider/ifconfig/aix_spec.rb +180 -180
  1694. data/spec/unit/provider/ifconfig/debian_spec.rb +332 -332
  1695. data/spec/unit/provider/ifconfig/redhat_spec.rb +83 -83
  1696. data/spec/unit/provider/ifconfig_spec.rb +206 -206
  1697. data/spec/unit/provider/launchd_spec.rb +268 -268
  1698. data/spec/unit/provider/link_spec.rb +409 -409
  1699. data/spec/unit/provider/log_spec.rb +94 -94
  1700. data/spec/unit/provider/mdadm_spec.rb +140 -140
  1701. data/spec/unit/provider/mount/aix_spec.rb +277 -277
  1702. data/spec/unit/provider/mount/mount_spec.rb +527 -527
  1703. data/spec/unit/provider/mount/solaris_spec.rb +822 -822
  1704. data/spec/unit/provider/mount/windows_spec.rb +149 -149
  1705. data/spec/unit/provider/mount_spec.rb +191 -191
  1706. data/spec/unit/provider/ohai_spec.rb +84 -84
  1707. data/spec/unit/provider/osx_profile_spec.rb +257 -257
  1708. data/spec/unit/provider/package/apt_spec.rb +610 -610
  1709. data/spec/unit/provider/package/bff_spec.rb +187 -187
  1710. data/spec/unit/provider/package/cab_spec.rb +272 -272
  1711. data/spec/unit/provider/package/chocolatey_spec.rb +507 -507
  1712. data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -29
  1713. data/spec/unit/provider/package/dpkg_spec.rb +287 -287
  1714. data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -274
  1715. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +148 -148
  1716. data/spec/unit/provider/package/freebsd/port_spec.rb +163 -163
  1717. data/spec/unit/provider/package/homebrew_spec.rb +293 -293
  1718. data/spec/unit/provider/package/ips_spec.rb +233 -233
  1719. data/spec/unit/provider/package/macports_spec.rb +203 -203
  1720. data/spec/unit/provider/package/msu_spec.rb +283 -283
  1721. data/spec/unit/provider/package/openbsd_spec.rb +132 -132
  1722. data/spec/unit/provider/package/pacman_spec.rb +194 -194
  1723. data/spec/unit/provider/package/paludis_spec.rb +134 -134
  1724. data/spec/unit/provider/package/portage_spec.rb +179 -179
  1725. data/spec/unit/provider/package/powershell_spec.rb +501 -501
  1726. data/spec/unit/provider/package/rpm_spec.rb +429 -429
  1727. data/spec/unit/provider/package/rubygems_spec.rb +981 -981
  1728. data/spec/unit/provider/package/smartos_spec.rb +110 -110
  1729. data/spec/unit/provider/package/solaris_spec.rb +167 -167
  1730. data/spec/unit/provider/package/windows/exe_spec.rb +201 -201
  1731. data/spec/unit/provider/package/windows/msi_spec.rb +168 -168
  1732. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +78 -78
  1733. data/spec/unit/provider/package/windows_spec.rb +463 -463
  1734. data/spec/unit/provider/package/yum/python_helper_spec.rb +29 -29
  1735. data/spec/unit/provider/package/yum/yum_cache_spec.rb +109 -109
  1736. data/spec/unit/provider/package/zypper_spec.rb +487 -478
  1737. data/spec/unit/provider/package_spec.rb +1013 -1013
  1738. data/spec/unit/provider/powershell_script_spec.rb +116 -116
  1739. data/spec/unit/provider/registry_key_spec.rb +487 -487
  1740. data/spec/unit/provider/remote_directory_spec.rb +236 -236
  1741. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +245 -245
  1742. data/spec/unit/provider/remote_file/content_spec.rb +253 -253
  1743. data/spec/unit/provider/remote_file/fetcher_spec.rb +95 -95
  1744. data/spec/unit/provider/remote_file/ftp_spec.rb +217 -217
  1745. data/spec/unit/provider/remote_file/http_spec.rb +324 -324
  1746. data/spec/unit/provider/remote_file/local_file_spec.rb +105 -105
  1747. data/spec/unit/provider/remote_file/network_file_spec.rb +50 -50
  1748. data/spec/unit/provider/remote_file/sftp_spec.rb +150 -150
  1749. data/spec/unit/provider/remote_file_spec.rb +62 -62
  1750. data/spec/unit/provider/route_spec.rb +270 -270
  1751. data/spec/unit/provider/ruby_block_spec.rb +45 -45
  1752. data/spec/unit/provider/script_spec.rb +157 -157
  1753. data/spec/unit/provider/service/aix_service_spec.rb +195 -195
  1754. data/spec/unit/provider/service/aixinit_service_spec.rb +272 -272
  1755. data/spec/unit/provider/service/arch_service_spec.rb +324 -324
  1756. data/spec/unit/provider/service/debian_service_spec.rb +249 -249
  1757. data/spec/unit/provider/service/freebsd_service_spec.rb +617 -617
  1758. data/spec/unit/provider/service/gentoo_service_spec.rb +144 -144
  1759. data/spec/unit/provider/service/init_service_spec.rb +235 -235
  1760. data/spec/unit/provider/service/insserv_service_spec.rb +75 -75
  1761. data/spec/unit/provider/service/invokercd_service_spec.rb +211 -211
  1762. data/spec/unit/provider/service/macosx_spec.rb +340 -340
  1763. data/spec/unit/provider/service/openbsd_service_spec.rb +549 -549
  1764. data/spec/unit/provider/service/redhat_spec.rb +250 -250
  1765. data/spec/unit/provider/service/simple_service_spec.rb +169 -169
  1766. data/spec/unit/provider/service/solaris_smf_service_spec.rb +292 -292
  1767. data/spec/unit/provider/service/systemd_service_spec.rb +364 -364
  1768. data/spec/unit/provider/service/upstart_service_spec.rb +351 -351
  1769. data/spec/unit/provider/service/windows_spec.rb +910 -910
  1770. data/spec/unit/provider/service_spec.rb +168 -168
  1771. data/spec/unit/provider/subversion_spec.rb +361 -361
  1772. data/spec/unit/provider/systemd_unit_spec.rb +967 -967
  1773. data/spec/unit/provider/template/content_spec.rb +169 -169
  1774. data/spec/unit/provider/template_spec.rb +87 -87
  1775. data/spec/unit/provider/user/aix_spec.rb +96 -96
  1776. data/spec/unit/provider/user/dscl_spec.rb +920 -920
  1777. data/spec/unit/provider/user/linux_spec.rb +74 -74
  1778. data/spec/unit/provider/user/pw_spec.rb +235 -235
  1779. data/spec/unit/provider/user/solaris_spec.rb +177 -177
  1780. data/spec/unit/provider/user/windows_spec.rb +197 -197
  1781. data/spec/unit/provider/user_spec.rb +478 -478
  1782. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
  1783. data/spec/unit/provider/windows_env_spec.rb +400 -400
  1784. data/spec/unit/provider/windows_path_spec.rb +65 -65
  1785. data/spec/unit/provider/windows_task_spec.rb +430 -430
  1786. data/spec/unit/provider/yum_repository_spec.rb +35 -35
  1787. data/spec/unit/provider/zypper_repository_spec.rb +126 -126
  1788. data/spec/unit/provider_resolver_spec.rb +923 -923
  1789. data/spec/unit/provider_spec.rb +201 -201
  1790. data/spec/unit/pure_application_spec.rb +32 -32
  1791. data/spec/unit/recipe_spec.rb +589 -589
  1792. data/spec/unit/resource/apt_package_spec.rb +56 -56
  1793. data/spec/unit/resource/apt_preference_spec.rb +57 -57
  1794. data/spec/unit/resource/apt_repository_spec.rb +92 -92
  1795. data/spec/unit/resource/apt_update_spec.rb +62 -62
  1796. data/spec/unit/resource/bash_spec.rb +45 -45
  1797. data/spec/unit/resource/batch_spec.rb +46 -46
  1798. data/spec/unit/resource/bff_package_spec.rb +51 -51
  1799. data/spec/unit/resource/breakpoint_spec.rb +64 -64
  1800. data/spec/unit/resource/build_essential_spec.rb +43 -43
  1801. data/spec/unit/resource/cab_package_spec.rb +64 -64
  1802. data/spec/unit/resource/chef_gem_spec.rb +125 -125
  1803. data/spec/unit/resource/chef_handler_spec.rb +40 -40
  1804. data/spec/unit/resource/chocolatey_config_spec.rb +98 -98
  1805. data/spec/unit/resource/chocolatey_package_spec.rb +91 -91
  1806. data/spec/unit/resource/chocolatey_source_spec.rb +102 -102
  1807. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
  1808. data/spec/unit/resource/conditional_spec.rb +254 -254
  1809. data/spec/unit/resource/cookbook_file_spec.rb +93 -93
  1810. data/spec/unit/resource/cron_access_spec.rb +36 -36
  1811. data/spec/unit/resource/cron_d_spec.rb +90 -90
  1812. data/spec/unit/resource/cron_spec.rb +173 -173
  1813. data/spec/unit/resource/csh_spec.rb +45 -45
  1814. data/spec/unit/resource/directory_spec.rb +69 -69
  1815. data/spec/unit/resource/dmg_package_spec.rb +39 -39
  1816. data/spec/unit/resource/dnf_package_spec.rb +108 -108
  1817. data/spec/unit/resource/dpkg_package_spec.rb +50 -50
  1818. data/spec/unit/resource/dsc_resource_spec.rb +102 -102
  1819. data/spec/unit/resource/dsc_script_spec.rb +134 -134
  1820. data/spec/unit/resource/execute_spec.rb +277 -277
  1821. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -103
  1822. data/spec/unit/resource/file/verification_spec.rb +147 -147
  1823. data/spec/unit/resource/file_spec.rb +127 -127
  1824. data/spec/unit/resource/freebsd_package_spec.rb +103 -103
  1825. data/spec/unit/resource/gem_package_spec.rb +67 -67
  1826. data/spec/unit/resource/git_spec.rb +62 -62
  1827. data/spec/unit/resource/group_spec.rb +165 -165
  1828. data/spec/unit/resource/homebrew_cask_spec.rb +40 -40
  1829. data/spec/unit/resource/homebrew_package_spec.rb +68 -68
  1830. data/spec/unit/resource/homebrew_tap_spec.rb +44 -44
  1831. data/spec/unit/resource/hostname_spec.rb +47 -47
  1832. data/spec/unit/resource/http_request_spec.rb +65 -65
  1833. data/spec/unit/resource/ifconfig_spec.rb +109 -109
  1834. data/spec/unit/resource/ips_package_spec.rb +54 -54
  1835. data/spec/unit/resource/kernel_module_spec.rb +48 -48
  1836. data/spec/unit/resource/ksh_spec.rb +45 -45
  1837. data/spec/unit/resource/launchd_spec.rb +40 -40
  1838. data/spec/unit/resource/link_spec.rb +124 -124
  1839. data/spec/unit/resource/locale_spec.rb +60 -60
  1840. data/spec/unit/resource/log_spec.rb +64 -64
  1841. data/spec/unit/resource/macos_user_defaults_spec.rb +35 -35
  1842. data/spec/unit/resource/macports_package_spec.rb +51 -51
  1843. data/spec/unit/resource/mdadm_spec.rb +104 -104
  1844. data/spec/unit/resource/mount_spec.rb +178 -178
  1845. data/spec/unit/resource/msu_package_spec.rb +63 -63
  1846. data/spec/unit/resource/ohai_hint_spec.rb +44 -44
  1847. data/spec/unit/resource/ohai_spec.rb +62 -62
  1848. data/spec/unit/resource/openbsd_package_spec.rb +58 -58
  1849. data/spec/unit/resource/openssl_dhparam.rb +61 -61
  1850. data/spec/unit/resource/openssl_ec_private_key_spec.rb +64 -64
  1851. data/spec/unit/resource/openssl_ec_public_key_spec.rb +43 -43
  1852. data/spec/unit/resource/openssl_rsa_private_key_spec.rb +64 -64
  1853. data/spec/unit/resource/openssl_rsa_public_key_spec.rb +43 -43
  1854. data/spec/unit/resource/openssl_x509_certificate_spec.rb +72 -72
  1855. data/spec/unit/resource/openssl_x509_crl_spec.rb +61 -61
  1856. data/spec/unit/resource/openssl_x509_request.rb +68 -68
  1857. data/spec/unit/resource/osx_profile_spec.rb +60 -60
  1858. data/spec/unit/resource/package_spec.rb +108 -108
  1859. data/spec/unit/resource/pacman_package_spec.rb +46 -46
  1860. data/spec/unit/resource/paludis_package_spec.rb +36 -36
  1861. data/spec/unit/resource/perl_spec.rb +44 -44
  1862. data/spec/unit/resource/portage_package_spec.rb +46 -46
  1863. data/spec/unit/resource/powershell_package_source_spec.rb +219 -219
  1864. data/spec/unit/resource/powershell_package_spec.rb +98 -98
  1865. data/spec/unit/resource/powershell_script_spec.rb +136 -136
  1866. data/spec/unit/resource/python_spec.rb +40 -40
  1867. data/spec/unit/resource/reboot_spec.rb +47 -47
  1868. data/spec/unit/resource/registry_key_spec.rb +215 -215
  1869. data/spec/unit/resource/remote_directory_spec.rb +105 -105
  1870. data/spec/unit/resource/remote_file_spec.rb +220 -220
  1871. data/spec/unit/resource/resource_notification_spec.rb +169 -169
  1872. data/spec/unit/resource/rhsm_errata_level_spec.rb +50 -50
  1873. data/spec/unit/resource/rhsm_errata_spec.rb +39 -39
  1874. data/spec/unit/resource/rhsm_register_spec.rb +204 -204
  1875. data/spec/unit/resource/rhsm_repo_spec.rb +64 -64
  1876. data/spec/unit/resource/rhsm_subscription_spec.rb +98 -98
  1877. data/spec/unit/resource/route_spec.rb +95 -95
  1878. data/spec/unit/resource/rpm_package_spec.rb +62 -62
  1879. data/spec/unit/resource/ruby_block_spec.rb +58 -58
  1880. data/spec/unit/resource/ruby_spec.rb +39 -39
  1881. data/spec/unit/resource/scm_spec.rb +173 -173
  1882. data/spec/unit/resource/script_spec.rb +52 -52
  1883. data/spec/unit/resource/service_spec.rb +206 -206
  1884. data/spec/unit/resource/smartos_package_spec.rb +52 -52
  1885. data/spec/unit/resource/solaris_package_spec.rb +54 -54
  1886. data/spec/unit/resource/ssh_known_hosts_entry_spec.rb +55 -55
  1887. data/spec/unit/resource/subversion_spec.rb +91 -91
  1888. data/spec/unit/resource/sudo_spec.rb +99 -99
  1889. data/spec/unit/resource/swap_file_spec.rb +39 -39
  1890. data/spec/unit/resource/sysctl_spec.rb +54 -54
  1891. data/spec/unit/resource/systemd_unit_spec.rb +130 -130
  1892. data/spec/unit/resource/template_spec.rb +222 -222
  1893. data/spec/unit/resource/timezone.rb +39 -39
  1894. data/spec/unit/resource/user_spec.rb +122 -122
  1895. data/spec/unit/resource/windows_ad_join_spec.rb +51 -51
  1896. data/spec/unit/resource/windows_auto_run_spec.rb +50 -50
  1897. data/spec/unit/resource/windows_certificate.rb +83 -83
  1898. data/spec/unit/resource/windows_env_spec.rb +75 -75
  1899. data/spec/unit/resource/windows_feature.rb +64 -64
  1900. data/spec/unit/resource/windows_feature_dism.rb +72 -72
  1901. data/spec/unit/resource/windows_feature_powershell.rb +72 -72
  1902. data/spec/unit/resource/windows_firewall_rule_spec.rb +401 -401
  1903. data/spec/unit/resource/windows_font_spec.rb +43 -43
  1904. data/spec/unit/resource/windows_package_spec.rb +105 -105
  1905. data/spec/unit/resource/windows_pagefile_spec.rb +49 -49
  1906. data/spec/unit/resource/windows_path_spec.rb +40 -40
  1907. data/spec/unit/resource/windows_printer_port_spec.rb +62 -62
  1908. data/spec/unit/resource/windows_printer_spec.rb +52 -52
  1909. data/spec/unit/resource/windows_service_spec.rb +93 -93
  1910. data/spec/unit/resource/windows_share.rb +39 -39
  1911. data/spec/unit/resource/windows_shortcut_spec.rb +38 -38
  1912. data/spec/unit/resource/windows_task_spec.rb +399 -399
  1913. data/spec/unit/resource/windows_workgroup_spec.rb +74 -74
  1914. data/spec/unit/resource/yum_package_spec.rb +150 -150
  1915. data/spec/unit/resource/yum_repository_spec.rb +152 -152
  1916. data/spec/unit/resource/zypper_package_spec.rb +51 -51
  1917. data/spec/unit/resource/zypper_repository_spec.rb +115 -115
  1918. data/spec/unit/resource_builder_spec.rb +1 -1
  1919. data/spec/unit/resource_collection/resource_list_spec.rb +137 -137
  1920. data/spec/unit/resource_collection/resource_set_spec.rb +244 -244
  1921. data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
  1922. data/spec/unit/resource_collection_spec.rb +408 -408
  1923. data/spec/unit/resource_definition_spec.rb +117 -117
  1924. data/spec/unit/resource_inspector_spec.rb +60 -60
  1925. data/spec/unit/resource_reporter_spec.rb +782 -782
  1926. data/spec/unit/resource_resolver_spec.rb +52 -52
  1927. data/spec/unit/resource_spec.rb +1195 -1195
  1928. data/spec/unit/role_spec.rb +358 -358
  1929. data/spec/unit/run_context/child_run_context_spec.rb +133 -133
  1930. data/spec/unit/run_context/cookbook_compiler_spec.rb +224 -224
  1931. data/spec/unit/run_context_spec.rb +241 -241
  1932. data/spec/unit/run_list/run_list_expansion_spec.rb +144 -144
  1933. data/spec/unit/run_list/run_list_item_spec.rb +117 -117
  1934. data/spec/unit/run_list/versioned_recipe_list_spec.rb +197 -197
  1935. data/spec/unit/run_list_spec.rb +312 -312
  1936. data/spec/unit/run_lock_spec.rb +140 -140
  1937. data/spec/unit/run_status_spec.rb +144 -144
  1938. data/spec/unit/runner_spec.rb +398 -398
  1939. data/spec/unit/scan_access_control_spec.rb +183 -183
  1940. data/spec/unit/search/query_spec.rb +283 -283
  1941. data/spec/unit/server_api_spec.rb +124 -124
  1942. data/spec/unit/server_api_versions_spec.rb +66 -66
  1943. data/spec/unit/shell/model_wrapper_spec.rb +96 -96
  1944. data/spec/unit/shell/shell_ext_spec.rb +153 -153
  1945. data/spec/unit/shell/shell_session_spec.rb +250 -250
  1946. data/spec/unit/shell_spec.rb +162 -162
  1947. data/spec/unit/user_spec.rb +275 -275
  1948. data/spec/unit/user_v1_spec.rb +583 -583
  1949. data/spec/unit/util/backup_spec.rb +141 -141
  1950. data/spec/unit/util/diff_spec.rb +576 -576
  1951. data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -193
  1952. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +248 -248
  1953. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +200 -200
  1954. data/spec/unit/util/dsc/resource_store.rb +78 -78
  1955. data/spec/unit/util/editor_spec.rb +152 -152
  1956. data/spec/unit/util/file_edit_spec.rb +224 -224
  1957. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -106
  1958. data/spec/unit/util/powershell/ps_credential_spec.rb +44 -44
  1959. data/spec/unit/util/selinux_spec.rb +157 -157
  1960. data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
  1961. data/spec/unit/util/windows/logon_session_spec.rb +285 -285
  1962. data/spec/unit/version/platform_spec.rb +60 -60
  1963. data/spec/unit/version_class_spec.rb +171 -171
  1964. data/spec/unit/version_constraint/platform_spec.rb +45 -45
  1965. data/spec/unit/version_constraint_spec.rb +179 -179
  1966. data/spec/unit/version_string_spec.rb +79 -79
  1967. data/spec/unit/win32/error_spec.rb +77 -77
  1968. data/spec/unit/win32/link_spec.rb +73 -73
  1969. data/spec/unit/win32/registry_spec.rb +394 -394
  1970. data/spec/unit/win32/security_spec.rb +134 -134
  1971. data/spec/unit/windows_service_spec.rb +118 -118
  1972. data/tasks/.DS_Store +0 -0
  1973. data/tasks/announce.rb +58 -58
  1974. data/tasks/bin/run_external_test +29 -29
  1975. data/tasks/dependencies.rb +58 -58
  1976. data/tasks/maintainers.rb +211 -211
  1977. data/tasks/rspec.rb +90 -90
  1978. data/tasks/templates/prerelease.md.erb +35 -35
  1979. data/tasks/templates/release.md.erb +34 -34
  1980. metadata +34 -6
@@ -1,52 +1,52 @@
1
- #
2
- # Author:: Ranjib Dey
3
- # Copyright:: Copyright 2015-2016, Ranjib Dey <ranjib@linux.com>.
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/resource_resolver"
21
-
22
- describe Chef::ResourceResolver do
23
- it "#resolve" do
24
- expect(described_class.resolve(:execute)).to eq(Chef::Resource::Execute)
25
- end
26
-
27
- it "#list" do
28
- expect(described_class.list(:package)).to_not be_empty
29
- end
30
-
31
- context "instance methods" do
32
- let(:resolver) do
33
- described_class.new(Chef::Node.new, "execute")
34
- end
35
-
36
- it "#resolve" do
37
- expect(resolver.resolve).to eq Chef::Resource::Execute
38
- end
39
-
40
- it "#list" do
41
- expect(resolver.list).to eq [ Chef::Resource::Execute ]
42
- end
43
-
44
- it "#provided_by? returns true when resource class is in the list" do
45
- expect(resolver.provided_by?(Chef::Resource::Execute)).to be_truthy
46
- end
47
-
48
- it "#provided_by? returns false when resource class is not in the list" do
49
- expect(resolver.provided_by?(Chef::Resource::File)).to be_falsey
50
- end
51
- end
52
- end
1
+ #
2
+ # Author:: Ranjib Dey
3
+ # Copyright:: Copyright 2015-2016, Ranjib Dey <ranjib@linux.com>.
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/resource_resolver"
21
+
22
+ describe Chef::ResourceResolver do
23
+ it "#resolve" do
24
+ expect(described_class.resolve(:execute)).to eq(Chef::Resource::Execute)
25
+ end
26
+
27
+ it "#list" do
28
+ expect(described_class.list(:package)).to_not be_empty
29
+ end
30
+
31
+ context "instance methods" do
32
+ let(:resolver) do
33
+ described_class.new(Chef::Node.new, "execute")
34
+ end
35
+
36
+ it "#resolve" do
37
+ expect(resolver.resolve).to eq Chef::Resource::Execute
38
+ end
39
+
40
+ it "#list" do
41
+ expect(resolver.list).to eq [ Chef::Resource::Execute ]
42
+ end
43
+
44
+ it "#provided_by? returns true when resource class is in the list" do
45
+ expect(resolver.provided_by?(Chef::Resource::Execute)).to be_truthy
46
+ end
47
+
48
+ it "#provided_by? returns false when resource class is not in the list" do
49
+ expect(resolver.provided_by?(Chef::Resource::File)).to be_falsey
50
+ end
51
+ end
52
+ end
@@ -1,1195 +1,1195 @@
1
- #
2
- # Author:: Adam Jacob (<adam@chef.io>)
3
- # Author:: Christopher Walters (<cw@chef.io>)
4
- # Author:: Tim Hinderliter (<tim@chef.io>)
5
- # Author:: Seth Chisamore (<schisamo@chef.io>)
6
- # Copyright:: Copyright 2008-2018, Chef Software Inc.
7
- # License:: Apache License, Version 2.0
8
- #
9
- # Licensed under the Apache License, Version 2.0 (the "License");
10
- # you may not use this file except in compliance with the License.
11
- # You may obtain a copy of the License at
12
- #
13
- # http://www.apache.org/licenses/LICENSE-2.0
14
- #
15
- # Unless required by applicable law or agreed to in writing, software
16
- # distributed under the License is distributed on an "AS IS" BASIS,
17
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
- #
21
-
22
- require "spec_helper"
23
-
24
- describe Chef::Resource do
25
- let(:cookbook_repo_path) { File.join(CHEF_SPEC_DATA, "cookbooks") }
26
- let(:cookbook_collection) { Chef::CookbookCollection.new(Chef::CookbookLoader.new(cookbook_repo_path)) }
27
- let(:node) { Chef::Node.new }
28
- let(:events) { Chef::EventDispatch::Dispatcher.new }
29
- let(:run_context) { Chef::RunContext.new(node, cookbook_collection, events) }
30
- let(:resource) { resource_class.new("funk", run_context) }
31
- let(:resource_class) { Chef::Resource }
32
-
33
- it "should mixin shell_out" do
34
- expect(resource.respond_to?(:shell_out)).to be true
35
- end
36
-
37
- it "should mixin shell_out!" do
38
- expect(resource.respond_to?(:shell_out!)).to be true
39
- end
40
-
41
- describe "when inherited" do
42
-
43
- it "adds an entry to a list of subclasses" do
44
- subclass = Class.new(Chef::Resource)
45
- expect(Chef::Resource.resource_classes).to include(subclass)
46
- end
47
-
48
- it "keeps track of subclasses of subclasses" do
49
- subclass = Class.new(Chef::Resource)
50
- subclass_of_subclass = Class.new(subclass)
51
- expect(Chef::Resource.resource_classes).to include(subclass_of_subclass)
52
- end
53
-
54
- end
55
-
56
- describe "when declaring the identity attribute" do
57
- it "has :name as identity attribute by default" do
58
- expect(Chef::Resource.identity_attr).to eq(:name)
59
- end
60
-
61
- it "sets an identity attribute" do
62
- resource_class = Class.new(Chef::Resource)
63
- resource_class.identity_attr(:path)
64
- expect(resource_class.identity_attr).to eq(:path)
65
- end
66
-
67
- it "inherits an identity attribute from a superclass" do
68
- resource_class = Class.new(Chef::Resource)
69
- resource_subclass = Class.new(resource_class)
70
- resource_class.identity_attr(:package_name)
71
- expect(resource_subclass.identity_attr).to eq(:package_name)
72
- end
73
-
74
- it "overrides the identity attribute from a superclass when the identity attr is set" do
75
- resource_class = Class.new(Chef::Resource)
76
- resource_subclass = Class.new(resource_class)
77
- resource_class.identity_attr(:package_name)
78
- resource_subclass.identity_attr(:something_else)
79
- expect(resource_subclass.identity_attr).to eq(:something_else)
80
- end
81
- end
82
-
83
- describe "when no identity attribute has been declared" do
84
- let(:resource_sans_id) { Chef::Resource.new("my-name") }
85
-
86
- # Would rather force identity attributes to be set for everything,
87
- # but that's not plausible for back compat reasons.
88
- it "uses the name as the identity" do
89
- expect(resource_sans_id.identity).to eq("my-name")
90
- end
91
- end
92
-
93
- describe "when an identity attribute has been declared" do
94
- let(:file_resource) do
95
- file_resource_class = Class.new(Chef::Resource) do
96
- identity_attr :path
97
- attr_accessor :path
98
- end
99
-
100
- file_resource = file_resource_class.new("identity-attr-test")
101
- file_resource.path = "/tmp/foo.txt"
102
- file_resource
103
- end
104
-
105
- it "gives the value of its identity attribute" do
106
- expect(file_resource.identity).to eq("/tmp/foo.txt")
107
- end
108
- end
109
-
110
- describe "when declaring state attributes" do
111
- it "has no state_attrs by default" do
112
- expect(Chef::Resource.state_attrs).to be_empty
113
- end
114
-
115
- it "sets a list of state attributes" do
116
- resource_class = Class.new(Chef::Resource)
117
- resource_class.state_attrs(:checksum, :owner, :group, :mode)
118
- expect(resource_class.state_attrs).to match_array([:checksum, :owner, :group, :mode])
119
- end
120
-
121
- it "inherits state attributes from the superclass" do
122
- resource_class = Class.new(Chef::Resource)
123
- resource_subclass = Class.new(resource_class)
124
- resource_class.state_attrs(:checksum, :owner, :group, :mode)
125
- expect(resource_subclass.state_attrs).to match_array([:checksum, :owner, :group, :mode])
126
- end
127
-
128
- it "combines inherited state attributes with non-inherited state attributes" do
129
- resource_class = Class.new(Chef::Resource)
130
- resource_subclass = Class.new(resource_class)
131
- resource_class.state_attrs(:checksum, :owner)
132
- resource_subclass.state_attrs(:group, :mode)
133
- expect(resource_subclass.state_attrs).to match_array([:checksum, :owner, :group, :mode])
134
- end
135
-
136
- end
137
-
138
- describe "when a set of state attributes has been declared" do
139
- let(:file_resource) do
140
- file_resource_class = Class.new(Chef::Resource) do
141
-
142
- state_attrs :checksum, :owner, :group, :mode
143
-
144
- attr_accessor :checksum
145
- attr_accessor :owner
146
- attr_accessor :group
147
- attr_accessor :mode
148
- end
149
-
150
- file_resource = file_resource_class.new("describe-state-test")
151
- file_resource.checksum = "abc123"
152
- file_resource.owner = "root"
153
- file_resource.group = "wheel"
154
- file_resource.mode = "0644"
155
- file_resource
156
- end
157
-
158
- it "describes its state" do
159
- resource_state = file_resource.state_for_resource_reporter
160
- expect(resource_state.keys).to match_array([:checksum, :owner, :group, :mode])
161
- expect(resource_state[:checksum]).to eq("abc123")
162
- expect(resource_state[:owner]).to eq("root")
163
- expect(resource_state[:group]).to eq("wheel")
164
- expect(resource_state[:mode]).to eq("0644")
165
- end
166
- end
167
-
168
- describe "#state_for_resource_reporter" do
169
- context "when a property is marked as sensitive" do
170
- it "suppresses the sensitive property's value" do
171
- resource_class = Class.new(Chef::Resource) { property :foo, String, sensitive: true }
172
- resource = resource_class.new("sensitive_property_tests")
173
- resource.foo = "some value"
174
- expect(resource.state_for_resource_reporter[:foo]).to eq("*sensitive value suppressed*")
175
- end
176
- end
177
-
178
- context "when a property is not marked as sensitive" do
179
- it "does not suppress the property's value" do
180
- resource_class = Class.new(Chef::Resource) { property :foo, String }
181
- resource = resource_class.new("sensitive_property_tests")
182
- resource.foo = "some value"
183
- expect(resource.state_for_resource_reporter[:foo]).to eq("some value")
184
- end
185
- end
186
- end
187
-
188
- describe "load_from" do
189
- let(:prior_resource) do
190
- prior_resource = Chef::Resource.new("funk")
191
- prior_resource.source_line
192
- prior_resource.allowed_actions << :funkytown
193
- prior_resource.action(:funkytown)
194
- prior_resource
195
- end
196
- before(:each) do
197
- resource.allowed_actions << :funkytown
198
- run_context.resource_collection << prior_resource
199
- end
200
-
201
- it "should load the attributes of a prior resource" do
202
- resource.load_from(prior_resource)
203
- end
204
-
205
- it "should not inherit the action from the prior resource" do
206
- resource.load_from(prior_resource)
207
- expect(resource.action).not_to eq(prior_resource.action)
208
- end
209
- end
210
-
211
- describe "name" do
212
- it "should have a name" do
213
- expect(resource.name).to eql("funk")
214
- end
215
-
216
- it "should let you set a new name" do
217
- resource.name "monkey"
218
- expect(resource.name).to eql("monkey")
219
- end
220
-
221
- it "coerces arrays to names" do
222
- expect(resource.name %w{a b}).to eql("a, b")
223
- end
224
-
225
- it "should coerce objects to a string" do
226
- expect(resource.name Object.new).to be_a(String)
227
- end
228
- end
229
-
230
- describe "notifies" do
231
- it "should make notified resources appear in the actions hash" do
232
- run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
233
- resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee")
234
- expect(resource.delayed_notifications.detect { |e| e.resource.name == "coffee" && e.action == :reload }).not_to be_nil
235
- end
236
-
237
- it "should make notified resources be capable of acting immediately" do
238
- run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
239
- resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee"), :immediate
240
- expect(resource.immediate_notifications.detect { |e| e.resource.name == "coffee" && e.action == :reload }).not_to be_nil
241
- end
242
-
243
- it "should raise an exception if told to act in other than :delay or :immediate(ly)" do
244
- run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
245
- expect do
246
- resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee"), :someday
247
- end.to raise_error(ArgumentError)
248
- end
249
-
250
- it "should allow multiple notified resources appear in the actions hash" do
251
- run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
252
- resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee")
253
- expect(resource.delayed_notifications.detect { |e| e.resource.name == "coffee" && e.action == :reload }).not_to be_nil
254
-
255
- run_context.resource_collection << Chef::Resource::ZenMaster.new("beans")
256
- resource.notifies :reload, run_context.resource_collection.find(zen_master: "beans")
257
- expect(resource.delayed_notifications.detect { |e| e.resource.name == "beans" && e.action == :reload }).not_to be_nil
258
- end
259
-
260
- it "creates a notification for a resource that is not yet in the resource collection" do
261
- resource.notifies(:restart, service: "apache")
262
- expected_notification = Chef::Resource::Notification.new({ service: "apache" }, :restart, resource)
263
- expect(resource.delayed_notifications).to include(expected_notification)
264
- end
265
-
266
- it "notifies another resource immediately" do
267
- resource.notifies_immediately(:restart, service: "apache")
268
- expected_notification = Chef::Resource::Notification.new({ service: "apache" }, :restart, resource)
269
- expect(resource.immediate_notifications).to include(expected_notification)
270
- end
271
-
272
- it "notifies a resource to take action at the end of the chef run" do
273
- resource.notifies_delayed(:restart, service: "apache")
274
- expected_notification = Chef::Resource::Notification.new({ service: "apache" }, :restart, resource)
275
- expect(resource.delayed_notifications).to include(expected_notification)
276
- end
277
-
278
- it "notifies a resource with an array for its name via its prettified string name" do
279
- run_context.resource_collection << Chef::Resource::ZenMaster.new(%w{coffee tea})
280
- resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee, tea")
281
- expect(resource.delayed_notifications.detect { |e| e.resource.name == "coffee, tea" && e.action == :reload }).not_to be_nil
282
- end
283
-
284
- it "notifies a resource without a name via a string name with brackets" do
285
- run_context.resource_collection << Chef::Resource::ZenMaster.new("")
286
- resource.notifies :reload, "zen_master[]"
287
- end
288
-
289
- it "notifies a resource without a name via a string name without brackets" do
290
- run_context.resource_collection << Chef::Resource::ZenMaster.new("")
291
- resource.notifies :reload, "zen_master"
292
- expect(resource.delayed_notifications.first.resource).to eql("zen_master")
293
- end
294
-
295
- it "notifies a resource without a name via a hash name with an empty string" do
296
- run_context.resource_collection << Chef::Resource::ZenMaster.new("")
297
- resource.notifies :reload, zen_master: ""
298
- expect(resource.delayed_notifications.first.resource).to eql(zen_master: "")
299
- end
300
- end
301
-
302
- describe "subscribes" do
303
- it "should make resources appear in the actions hash of subscribed nodes" do
304
- run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
305
- zr = run_context.resource_collection.find(zen_master: "coffee")
306
- resource.subscribes :reload, zr
307
- expect(zr.delayed_notifications.detect { |e| e.resource.name == "funk" && e.action == :reload }).not_to be_nil
308
- end
309
-
310
- it "should make resources appear in the actions hash of subscribed nodes" do
311
- run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
312
- zr = run_context.resource_collection.find(zen_master: "coffee")
313
- resource.subscribes :reload, zr
314
- expect(zr.delayed_notifications.detect { |e| e.resource.name == resource.name && e.action == :reload }).not_to be_nil
315
-
316
- run_context.resource_collection << Chef::Resource::ZenMaster.new("bean")
317
- zrb = run_context.resource_collection.find(zen_master: "bean")
318
- zrb.subscribes :reload, zr
319
- expect(zr.delayed_notifications.detect { |e| e.resource.name == resource.name && e.action == :reload }).not_to be_nil
320
- end
321
-
322
- it "should make subscribed resources be capable of acting immediately" do
323
- run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
324
- zr = run_context.resource_collection.find(zen_master: "coffee")
325
- resource.subscribes :reload, zr, :immediately
326
- expect(zr.immediate_notifications.detect { |e| e.resource.name == resource.name && e.action == :reload }).not_to be_nil
327
- end
328
- end
329
-
330
- describe "defined_at" do
331
- it "should correctly parse source_line on unix-like operating systems" do
332
- resource.source_line = "/some/path/to/file.rb:80:in `wombat_tears'"
333
- expect(resource.defined_at).to eq("/some/path/to/file.rb line 80")
334
- end
335
-
336
- it "should correctly parse source_line on Windows" do
337
- resource.source_line = "C:/some/path/to/file.rb:80 in 1`wombat_tears'"
338
- expect(resource.defined_at).to eq("C:/some/path/to/file.rb line 80")
339
- end
340
-
341
- it "should include the cookbook and recipe when it knows it" do
342
- resource.source_line = "/some/path/to/file.rb:80:in `wombat_tears'"
343
- resource.recipe_name = "wombats"
344
- resource.cookbook_name = "animals"
345
- expect(resource.defined_at).to eq("animals::wombats line 80")
346
- end
347
-
348
- it "should recognize dynamically defined resources" do
349
- expect(resource.defined_at).to eq("dynamically defined")
350
- end
351
- end
352
-
353
- describe "to_s" do
354
- it "should become a string like resource_name[name]" do
355
- zm = Chef::Resource::ZenMaster.new("coffee")
356
- expect(zm.to_s).to eql("zen_master[coffee]")
357
- end
358
- end
359
-
360
- describe "to_text" do
361
- it "prints nice message" do
362
- resource_class = Class.new(Chef::Resource) { property :foo, String }
363
- resource = resource_class.new("sensitive_property_tests")
364
- resource.foo = "some value"
365
- expect(resource.to_text).to match(/foo "some value"/)
366
- end
367
-
368
- context "when property is sensitive" do
369
- it "supresses that properties value" do
370
- resource_class = Class.new(Chef::Resource) { property :foo, String, sensitive: true }
371
- resource = resource_class.new("sensitive_property_tests")
372
- resource.foo = "some value"
373
- expect(resource.to_text).to match(/foo "\*sensitive value suppressed\*"/)
374
- end
375
- end
376
-
377
- context "when property is required" do
378
- it "does not propagate vailidation errors" do
379
- resource_class = Class.new(Chef::Resource) { property :foo, String, required: true }
380
- resource = resource_class.new("required_property_tests")
381
- expect { resource.to_text }.to_not raise_error Chef::Exceptions::ValidationFailed
382
- end
383
- end
384
- end
385
-
386
- context "Documentation of resources" do
387
- it "can have a description" do
388
- c = Class.new(Chef::Resource) do
389
- description "my description"
390
- end
391
- expect(c.description).to eq "my description"
392
- end
393
-
394
- it "can say when it was introduced" do
395
- c = Class.new(Chef::Resource) do
396
- introduced "14.0"
397
- end
398
- expect(c.introduced).to eq "14.0"
399
- end
400
-
401
- it "can have some examples" do
402
- c = Class.new(Chef::Resource) do
403
- examples <<~EOH
404
- resource "foo" do
405
- foo foo
406
- end
407
- EOH
408
- end
409
- expect(c.examples).to eq <<~EOH
410
- resource "foo" do
411
- foo foo
412
- end
413
- EOH
414
- end
415
- end
416
-
417
- describe "self.resource_name" do
418
- context "When resource_name is not set" do
419
- it "and there are no provides lines, resource_name is nil" do
420
- c = Class.new(Chef::Resource) do
421
- end
422
-
423
- r = c.new("hi")
424
- r.declared_type = :d
425
- expect(c.resource_name).to be_nil
426
- expect(r.resource_name).to be_nil
427
- expect(r.declared_type).to eq :d
428
- end
429
-
430
- it "and there are no provides lines, resource_name is used" do
431
- c = Class.new(Chef::Resource) do
432
- def initialize(*args, &block)
433
- @resource_name = :blah
434
- super
435
- end
436
- end
437
-
438
- r = c.new("hi")
439
- r.declared_type = :d
440
- expect(c.resource_name).to be_nil
441
- expect(r.resource_name).to eq :blah
442
- expect(r.declared_type).to eq :d
443
- end
444
-
445
- it "and the resource class gets a late-bound name, resource_name is nil" do
446
- c = Class.new(Chef::Resource) do
447
- def self.name
448
- "ResourceSpecNameTest"
449
- end
450
- end
451
-
452
- r = c.new("hi")
453
- r.declared_type = :d
454
- expect(c.resource_name).to be_nil
455
- expect(r.resource_name).to be_nil
456
- expect(r.declared_type).to eq :d
457
- end
458
- end
459
-
460
- it "resource_name without provides is honored" do
461
- c = Class.new(Chef::Resource) do
462
- resource_name "blah"
463
- end
464
-
465
- r = c.new("hi")
466
- r.declared_type = :d
467
- expect(c.resource_name).to eq :blah
468
- expect(r.resource_name).to eq :blah
469
- expect(r.declared_type).to eq :d
470
- end
471
- it "setting class.resource_name with 'resource_name = blah' overrides declared_type" do
472
- c = Class.new(Chef::Resource) do
473
- provides :self_resource_name_test_2
474
- end
475
- c.resource_name = :blah
476
-
477
- r = c.new("hi")
478
- r.declared_type = :d
479
- expect(c.resource_name).to eq :blah
480
- expect(r.resource_name).to eq :blah
481
- expect(r.declared_type).to eq :d
482
- end
483
- it "setting class.resource_name with 'resource_name blah' overrides declared_type" do
484
- c = Class.new(Chef::Resource) do
485
- resource_name :blah
486
- provides :self_resource_name_test_3
487
- end
488
-
489
- r = c.new("hi")
490
- r.declared_type = :d
491
- expect(c.resource_name).to eq :blah
492
- expect(r.resource_name).to eq :blah
493
- expect(r.declared_type).to eq :d
494
- end
495
- end
496
-
497
- describe "to_json" do
498
- it "should serialize to json" do
499
- json = resource.to_json
500
- expect(json).to match(/json_class/)
501
- expect(json).to match(/instance_vars/)
502
- end
503
-
504
- include_examples "to_json equivalent to Chef::JSONCompat.to_json" do
505
- let(:jsonable) { resource }
506
- end
507
- end
508
-
509
- describe "to_hash" do
510
- context "when the resource has a property with a default" do
511
- let(:resource_class) { Class.new(Chef::Resource) { property :a, default: 1 } }
512
- it "should include the default in the hash" do
513
- expect(resource.to_hash.keys.sort).to eq([:a, :allowed_actions, :params, :provider, :updated,
514
- :updated_by_last_action, :before,
515
- :name, :source_line,
516
- :action, :elapsed_time,
517
- :default_guard_interpreter, :guard_interpreter].sort)
518
- expect(resource.to_hash[:name]).to eq "funk"
519
- expect(resource.to_hash[:a]).to eq 1
520
- end
521
- end
522
-
523
- it "should convert to a hash" do
524
- hash = resource.to_hash
525
- expected_keys = [ :allowed_actions, :params, :provider, :updated,
526
- :updated_by_last_action, :before,
527
- :name, :source_line,
528
- :action, :elapsed_time,
529
- :default_guard_interpreter, :guard_interpreter ]
530
- expect(hash.keys - expected_keys).to eq([])
531
- expect(expected_keys - hash.keys).to eq([])
532
- expect(hash[:name]).to eql("funk")
533
- end
534
- end
535
-
536
- describe "self.json_create" do
537
- it "should deserialize itself from json" do
538
- json = Chef::JSONCompat.to_json(resource)
539
- serialized_node = Chef::Resource.from_json(json)
540
- expect(serialized_node).to be_a_kind_of(Chef::Resource)
541
- expect(serialized_node.name).to eql(resource.name)
542
- end
543
- end
544
-
545
- describe "ignore_failure" do
546
- it "should default to throwing an error if a provider fails for a resource" do
547
- expect(resource.ignore_failure).to eq(false)
548
- end
549
-
550
- it "should allow you to set whether a provider should throw exceptions with ignore_failure" do
551
- resource.ignore_failure(true)
552
- expect(resource.ignore_failure).to eq(true)
553
- end
554
-
555
- it "should allow you to set quiet ignore_failure as a symbol" do
556
- resource.ignore_failure(:quiet)
557
- expect(resource.ignore_failure).to eq(:quiet)
558
- end
559
-
560
- it "should allow you to set quiet ignore_failure as a string" do
561
- resource.ignore_failure("quiet")
562
- expect(resource.ignore_failure).to eq("quiet")
563
- end
564
- end
565
-
566
- describe "retries" do
567
- let(:retriable_resource) do
568
- retriable_resource = Chef::Resource::Cat.new("precious", run_context)
569
- retriable_resource.provider = Chef::Provider::SnakeOil
570
- retriable_resource.action = :purr
571
- retriable_resource
572
- end
573
-
574
- before do
575
- node.automatic_attrs[:platform] = "fubuntu"
576
- node.automatic_attrs[:platform_version] = "10.04"
577
- end
578
-
579
- it "should default to not retrying if a provider fails for a resource" do
580
- expect(retriable_resource.retries).to eq(0)
581
- end
582
-
583
- it "should allow you to set how many retries a provider should attempt after a failure" do
584
- retriable_resource.retries(2)
585
- expect(retriable_resource.retries).to eq(2)
586
- end
587
-
588
- it "should default to a retry delay of 2 seconds" do
589
- expect(retriable_resource.retry_delay).to eq(2)
590
- end
591
-
592
- it "should allow you to set the retry delay" do
593
- retriable_resource.retry_delay(10)
594
- expect(retriable_resource.retry_delay).to eq(10)
595
- end
596
-
597
- it "should keep given value of retries intact after the provider fails for a resource" do
598
- retriable_resource.retries(3)
599
- retriable_resource.retry_delay(0) # No need to wait.
600
-
601
- provider = Chef::Provider::SnakeOil.new(retriable_resource, run_context)
602
- allow(Chef::Provider::SnakeOil).to receive(:new).and_return(provider)
603
- allow(provider).to receive(:action_purr).and_raise
604
-
605
- expect(retriable_resource).to receive(:sleep).exactly(3).times
606
- expect { retriable_resource.run_action(:purr) }.to raise_error(RuntimeError)
607
- expect(retriable_resource.retries).to eq(3)
608
- end
609
-
610
- it "should not rescue from non-StandardError exceptions" do
611
- retriable_resource.retries(3)
612
- retriable_resource.retry_delay(0) # No need to wait.
613
-
614
- provider = Chef::Provider::SnakeOil.new(retriable_resource, run_context)
615
- allow(Chef::Provider::SnakeOil).to receive(:new).and_return(provider)
616
- allow(provider).to receive(:action_purr).and_raise(LoadError)
617
-
618
- expect(retriable_resource).not_to receive(:sleep)
619
- expect { retriable_resource.run_action(:purr) }.to raise_error(LoadError)
620
- end
621
- end
622
-
623
- it "runs an action by finding its provider, loading the current resource and then running the action" do
624
- skip
625
- end
626
-
627
- describe "when updated by a provider" do
628
- before do
629
- resource.updated_by_last_action(true)
630
- end
631
-
632
- it "records that it was updated" do
633
- expect(resource).to be_updated
634
- end
635
-
636
- it "records that the last action updated the resource" do
637
- expect(resource).to be_updated_by_last_action
638
- end
639
-
640
- describe "and then run again without being updated" do
641
- before do
642
- resource.updated_by_last_action(false)
643
- end
644
-
645
- it "reports that it is updated" do
646
- expect(resource).to be_updated
647
- end
648
-
649
- it "reports that it was not updated by the last action" do
650
- expect(resource).not_to be_updated_by_last_action
651
- end
652
-
653
- end
654
-
655
- end
656
-
657
- describe "when invoking its action" do
658
- let(:resource) do
659
- resource = Chef::Resource.new("provided", run_context)
660
- resource.provider = Chef::Provider::SnakeOil
661
- resource
662
- end
663
- before do
664
- node.automatic_attrs[:platform] = "fubuntu"
665
- node.automatic_attrs[:platform_version] = "10.04"
666
- end
667
-
668
- it "does not run only_if if no only_if command is given" do
669
- expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate)
670
- resource.only_if.clear
671
- resource.run_action(:purr)
672
- end
673
-
674
- it "runs runs an only_if when one is given" do
675
- snitch_variable = nil
676
- resource.only_if { snitch_variable = true }
677
- expect(resource.only_if.first.positivity).to eq(:only_if)
678
- # Chef::Mixin::Command.should_receive(:only_if).with(true, {}).and_return(false)
679
- resource.run_action(:purr)
680
- expect(snitch_variable).to be_truthy
681
- end
682
-
683
- it "runs multiple only_if conditionals" do
684
- snitch_var1, snitch_var2 = nil, nil
685
- resource.only_if { snitch_var1 = 1 }
686
- resource.only_if { snitch_var2 = 2 }
687
- resource.run_action(:purr)
688
- expect(snitch_var1).to eq(1)
689
- expect(snitch_var2).to eq(2)
690
- end
691
-
692
- it "accepts command options for only_if conditionals" do
693
- expect_any_instance_of(Chef::Resource::Conditional).to receive(:evaluate_command).at_least(1).times
694
- resource.only_if("true", cwd: "/tmp")
695
- expect(resource.only_if.first.command_opts).to eq({ cwd: "/tmp" })
696
- resource.run_action(:purr)
697
- end
698
-
699
- it "runs not_if as a command when it is a string" do
700
- expect_any_instance_of(Chef::Resource::Conditional).to receive(:evaluate_command).at_least(1).times
701
- resource.not_if "pwd"
702
- resource.run_action(:purr)
703
- end
704
-
705
- it "runs not_if as a block when it is a ruby block" do
706
- expect_any_instance_of(Chef::Resource::Conditional).to receive(:evaluate_block).at_least(1).times
707
- resource.not_if { puts "foo" }
708
- resource.run_action(:purr)
709
- end
710
-
711
- it "does not run not_if if no not_if command is given" do
712
- expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate)
713
- resource.not_if.clear
714
- resource.run_action(:purr)
715
- end
716
-
717
- it "accepts command options for not_if conditionals" do
718
- resource.not_if("pwd" , cwd: "/tmp")
719
- expect(resource.not_if.first.command_opts).to eq({ cwd: "/tmp" })
720
- end
721
-
722
- it "accepts multiple not_if conditionals" do
723
- snitch_var1, snitch_var2 = true, true
724
- resource.not_if { snitch_var1 = nil }
725
- resource.not_if { snitch_var2 = false }
726
- resource.run_action(:purr)
727
- expect(snitch_var1).to be_nil
728
- expect(snitch_var2).to be_falsey
729
- end
730
-
731
- it "reports 0 elapsed time if actual elapsed time is < 0" do
732
- expected = Time.now
733
- allow(Time).to receive(:now).and_return(expected, expected - 1)
734
- resource.run_action(:purr)
735
- expect(resource.elapsed_time).to eq(0)
736
- end
737
-
738
- describe "guard_interpreter attribute" do
739
- it "should be set to :default by default" do
740
- expect(resource.guard_interpreter).to eq(:default)
741
- end
742
-
743
- it "if set to :default should return :default when read" do
744
- resource.guard_interpreter(:default)
745
- expect(resource.guard_interpreter).to eq(:default)
746
- end
747
-
748
- it "should raise Chef::Exceptions::ValidationFailed on an attempt to set the guard_interpreter attribute to something other than a Symbol" do
749
- expect { resource.guard_interpreter("command_dot_com") }.to raise_error(Chef::Exceptions::ValidationFailed)
750
- end
751
-
752
- it "should not raise an exception when setting the guard interpreter attribute to a Symbol" do
753
- allow(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:new).and_return(nil)
754
- expect { resource.guard_interpreter(:command_dot_com) }.not_to raise_error
755
- end
756
- end
757
- end
758
-
759
- describe "should_skip?" do
760
- before do
761
- resource = Chef::Resource::Cat.new("sugar", run_context)
762
- end
763
-
764
- it "should return false by default" do
765
- expect(resource.should_skip?(:purr)).to be_falsey
766
- end
767
-
768
- it "should return false when only_if is met" do
769
- resource.only_if { true }
770
- expect(resource.should_skip?(:purr)).to be_falsey
771
- end
772
-
773
- it "should return true when only_if is not met" do
774
- resource.only_if { false }
775
- expect(resource.should_skip?(:purr)).to be_truthy
776
- end
777
-
778
- it "should return true when not_if is met" do
779
- resource.not_if { true }
780
- expect(resource.should_skip?(:purr)).to be_truthy
781
- end
782
-
783
- it "should return false when not_if is not met" do
784
- resource.not_if { false }
785
- expect(resource.should_skip?(:purr)).to be_falsey
786
- end
787
-
788
- it "should return true when only_if is met but also not_if is met" do
789
- resource.only_if { true }
790
- resource.not_if { true }
791
- expect(resource.should_skip?(:purr)).to be_truthy
792
- end
793
-
794
- it "should return false when only_if is met and also not_if is not met" do
795
- resource.only_if { true }
796
- resource.not_if { false }
797
- expect(resource.should_skip?(:purr)).to be_falsey
798
- end
799
-
800
- it "should return true when one of multiple only_if's is not met" do
801
- resource.only_if { true }
802
- resource.only_if { false }
803
- resource.only_if { true }
804
- expect(resource.should_skip?(:purr)).to be_truthy
805
- end
806
-
807
- it "should return true when one of multiple not_if's is met" do
808
- resource.not_if { false }
809
- resource.not_if { true }
810
- resource.not_if { false }
811
- expect(resource.should_skip?(:purr)).to be_truthy
812
- end
813
-
814
- it "should return false when all of multiple only_if's are met" do
815
- resource.only_if { true }
816
- resource.only_if { true }
817
- resource.only_if { true }
818
- expect(resource.should_skip?(:purr)).to be_falsey
819
- end
820
-
821
- it "should return false when all of multiple not_if's are not met" do
822
- resource.not_if { false }
823
- resource.not_if { false }
824
- resource.not_if { false }
825
- expect(resource.should_skip?(:purr)).to be_falsey
826
- end
827
-
828
- it "should return true when action is :nothing" do
829
- expect(resource.should_skip?(:nothing)).to be_truthy
830
- end
831
-
832
- it "should return true when action is :nothing ignoring only_if/not_if conditionals" do
833
- resource.only_if { true }
834
- resource.not_if { false }
835
- expect(resource.should_skip?(:nothing)).to be_truthy
836
- end
837
-
838
- it "should print \"skipped due to action :nothing\" message for doc formatter when action is :nothing" do
839
- fdoc = Chef::Formatters.new(:doc, STDOUT, STDERR)
840
- allow(run_context).to receive(:events).and_return(fdoc)
841
- expect(fdoc).to receive(:puts).with(" (skipped due to action :nothing)", anything())
842
- resource.should_skip?(:nothing)
843
- end
844
-
845
- end
846
-
847
- describe "when resource action is :nothing" do
848
- let(:resource1) do
849
- resource1 = Chef::Resource::Cat.new("sugar", run_context)
850
- resource1.action = :nothing
851
- resource1
852
- end
853
- before do
854
- node.automatic_attrs[:platform] = "fubuntu"
855
- node.automatic_attrs[:platform_version] = "10.04"
856
- end
857
-
858
- it "should not run only_if/not_if conditionals (CHEF-972)" do
859
- snitch_var1 = 0
860
- resource1.only_if { snitch_var1 = 1 }
861
- resource1.not_if { snitch_var1 = 2 }
862
- resource1.run_action(:nothing)
863
- expect(snitch_var1).to eq(0)
864
- end
865
-
866
- it "should run only_if/not_if conditionals when notified to run another action (CHEF-972)" do
867
- snitch_var1 = snitch_var2 = 0
868
- runner = Chef::Runner.new(run_context)
869
-
870
- Chef::Provider::SnakeOil.provides :cat
871
-
872
- resource1.only_if { snitch_var1 = 1 }
873
- resource1.not_if { snitch_var2 = 2 }
874
- resource2 = Chef::Resource::Cat.new("coffee", run_context)
875
- resource2.notifies :purr, resource1
876
- resource2.action = :purr
877
-
878
- run_context.resource_collection << resource1
879
- run_context.resource_collection << resource2
880
- runner.converge
881
-
882
- expect(snitch_var1).to eq(1)
883
- expect(snitch_var2).to eq(2)
884
- end
885
- end
886
-
887
- describe "building the platform map" do
888
-
889
- let(:klz) { Class.new(Chef::Resource) }
890
-
891
- before do
892
- Chef::Resource::Klz = klz
893
- end
894
-
895
- after do
896
- Chef::Resource.send(:remove_const, :Klz)
897
- end
898
-
899
- it "adds mappings for a single platform" do
900
- expect(Chef.resource_handler_map).to receive(:set).with(
901
- :dinobot, Chef::Resource::Klz, { platform: ["autobots"] }
902
- )
903
- klz.provides :dinobot, platform: ["autobots"]
904
- end
905
-
906
- it "adds mappings for multiple platforms" do
907
- expect(Chef.resource_handler_map).to receive(:set).with(
908
- :energy, Chef::Resource::Klz, { platform: %w{autobots decepticons} }
909
- )
910
- klz.provides :energy, platform: %w{autobots decepticons}
911
- end
912
-
913
- it "adds mappings for all platforms" do
914
- expect(Chef.resource_handler_map).to receive(:set).with(
915
- :tape_deck, Chef::Resource::Klz, {}
916
- )
917
- klz.provides :tape_deck
918
- end
919
-
920
- end
921
-
922
- describe "resource_for_node" do
923
- describe "lookups from the platform map" do
924
- let(:klz1) { Class.new(Chef::Resource) }
925
-
926
- before(:each) do
927
- Chef::Resource::Klz1 = klz1
928
- node = Chef::Node.new
929
- node.name("bumblebee")
930
- node.automatic[:platform] = "autobots"
931
- node.automatic[:platform_version] = "6.1"
932
- Object.const_set("Soundwave", klz1)
933
- klz1.provides :soundwave
934
- end
935
-
936
- after(:each) do
937
- Object.send(:remove_const, :Soundwave)
938
- Chef::Resource.send(:remove_const, :Klz1)
939
- end
940
-
941
- it "returns a resource by short_name if nothing else matches" do
942
- expect(Chef::Resource.resource_for_node(:soundwave, node)).to eql(klz1)
943
- end
944
- end
945
-
946
- describe "lookups from the platform map" do
947
- let(:klz2) { Class.new(Chef::Resource) }
948
-
949
- before(:each) do
950
- Chef::Resource::Klz2 = klz2
951
- node.name("bumblebee")
952
- node.automatic[:platform] = "autobots"
953
- node.automatic[:platform_version] = "6.1"
954
- klz2.provides :dinobot, platform: ["autobots"]
955
- Object.const_set("Grimlock", klz2)
956
- klz2.provides :grimlock
957
- end
958
-
959
- after(:each) do
960
- Object.send(:remove_const, :Grimlock)
961
- Chef::Resource.send(:remove_const, :Klz2)
962
- end
963
-
964
- it "returns a resource by short_name and node" do
965
- expect(Chef::Resource.resource_for_node(:dinobot, node)).to eql(klz2)
966
- end
967
- end
968
-
969
- describe "chef_version constraints and the platform map" do
970
- let(:klz3) { Class.new(Chef::Resource) }
971
-
972
- it "doesn't wire up the provides when chef_version is < 1" do
973
- klz3.provides :bulbasaur, chef_version: "< 1.0" # this should be false
974
- expect { Chef::Resource.resource_for_node(:bulbasaur, node) }.to raise_error(Chef::Exceptions::NoSuchResourceType)
975
- end
976
-
977
- it "wires up the provides when chef_version is > 1" do
978
- klz3.provides :bulbasaur, chef_version: "> 1.0" # this should be true
979
- expect(Chef::Resource.resource_for_node(:bulbasaur, node)).to eql(klz3)
980
- end
981
-
982
- it "wires up the default when chef_version is < 1" do
983
- klz3.chef_version_for_provides("< 1.0") # this should be false
984
- klz3.provides :bulbasaur
985
- expect { Chef::Resource.resource_for_node(:bulbasaur, node) }.to raise_error(Chef::Exceptions::NoSuchResourceType)
986
- end
987
-
988
- it "wires up the default when chef_version is > 1" do
989
- klz3.chef_version_for_provides("> 1.0") # this should be true
990
- klz3.provides :bulbasaur
991
- expect(Chef::Resource.resource_for_node(:bulbasaur, node)).to eql(klz3)
992
- end
993
- end
994
-
995
- end
996
-
997
- describe "when creating notifications" do
998
-
999
- describe "with a string resource spec" do
1000
-
1001
- it "creates a delayed notification when timing is not specified" do
1002
- resource.notifies(:run, "execute[foo]")
1003
- expect(run_context.delayed_notification_collection.size).to eq(1)
1004
- end
1005
-
1006
- it "creates a delayed notification when :delayed is not specified" do
1007
- resource.notifies(:run, "execute[foo]", :delayed)
1008
- expect(run_context.delayed_notification_collection.size).to eq(1)
1009
- end
1010
-
1011
- it "creates an immediate notification when :immediate is specified" do
1012
- resource.notifies(:run, "execute[foo]", :immediate)
1013
- expect(run_context.immediate_notification_collection.size).to eq(1)
1014
- end
1015
-
1016
- it "creates an immediate notification when :immediately is specified" do
1017
- resource.notifies(:run, "execute[foo]", :immediately)
1018
- expect(run_context.immediate_notification_collection.size).to eq(1)
1019
- end
1020
-
1021
- describe "with a syntax error in the resource spec" do
1022
-
1023
- it "raises an exception immmediately" do
1024
- expect do
1025
- resource.notifies(:run, "typo[missing-closing-bracket")
1026
- end.to raise_error(Chef::Exceptions::InvalidResourceSpecification)
1027
- end
1028
- end
1029
- end
1030
-
1031
- describe "with a resource reference" do
1032
- let(:notified_resource) { Chef::Resource.new("punk", run_context) }
1033
-
1034
- it "creates a delayed notification when timing is not specified" do
1035
- resource.notifies(:run, notified_resource)
1036
- expect(run_context.delayed_notification_collection.size).to eq(1)
1037
- end
1038
-
1039
- it "creates a delayed notification when :delayed is not specified" do
1040
- resource.notifies(:run, notified_resource, :delayed)
1041
- expect(run_context.delayed_notification_collection.size).to eq(1)
1042
- end
1043
-
1044
- it "creates an immediate notification when :immediate is specified" do
1045
- resource.notifies(:run, notified_resource, :immediate)
1046
- expect(run_context.immediate_notification_collection.size).to eq(1)
1047
- end
1048
-
1049
- it "creates an immediate notification when :immediately is specified" do
1050
- resource.notifies(:run, notified_resource, :immediately)
1051
- expect(run_context.immediate_notification_collection.size).to eq(1)
1052
- end
1053
- end
1054
-
1055
- end
1056
-
1057
- describe "resource sensitive attribute" do
1058
- let(:resource_file) { Chef::Resource::File.new("/nonexistent/CHEF-5098/file", run_context) }
1059
- let(:action) { :create }
1060
-
1061
- def compiled_resource_data(resource, action, err)
1062
- error_inspector = Chef::Formatters::ErrorInspectors::ResourceFailureInspector.new(resource, action, err)
1063
- description = Chef::Formatters::ErrorDescription.new("test")
1064
- error_inspector.add_explanation(description)
1065
- Chef::Log.info("descrtiption: #{description.inspect},error_inspector: #{error_inspector}")
1066
- description.sections[1]["Compiled Resource:"]
1067
- end
1068
-
1069
- it "set to false by default" do
1070
- expect(resource.sensitive).to be_falsey
1071
- end
1072
-
1073
- it "when set to false should show compiled resource for failed resource" do
1074
- expect { resource_file.run_action(action) }.to raise_error { |err|
1075
- expect(compiled_resource_data(resource_file, action, err)).to match 'path "/nonexistent/CHEF-5098/file"'
1076
- }
1077
- end
1078
-
1079
- it "when set to true should show compiled resource for failed resource" do
1080
- resource_file.sensitive true
1081
- expect { resource_file.run_action(action) }.to raise_error { |err|
1082
- expect(compiled_resource_data(resource_file, action, err)).to eql("suppressed sensitive resource output")
1083
- }
1084
- end
1085
-
1086
- end
1087
-
1088
- describe "#action" do
1089
- let(:resource_class) do
1090
- Class.new(described_class) do
1091
- allowed_actions(%i{one two})
1092
- end
1093
- end
1094
- let(:resource) { resource_class.new("test", nil) }
1095
- subject { resource.action }
1096
-
1097
- context "with a no action" do
1098
- it { is_expected.to eq [:nothing] }
1099
- end
1100
-
1101
- context "with a default action" do
1102
- let(:resource_class) do
1103
- Class.new(described_class) do
1104
- default_action(:one)
1105
- end
1106
- end
1107
- it { is_expected.to eq [:one] }
1108
- end
1109
-
1110
- context "with a symbol action" do
1111
- before { resource.action(:one) }
1112
- it { is_expected.to eq [:one] }
1113
- end
1114
-
1115
- context "with a string action" do
1116
- before { resource.action("two") }
1117
- it { is_expected.to eq [:two] }
1118
- end
1119
-
1120
- context "with an array action" do
1121
- before { resource.action([:two, :one]) }
1122
- it { is_expected.to eq [:two, :one] }
1123
- end
1124
-
1125
- context "with an assignment" do
1126
- before { resource.action = :one }
1127
- it { is_expected.to eq [:one] }
1128
- end
1129
-
1130
- context "with an array assignment" do
1131
- before { resource.action = [:two, :one] }
1132
- it { is_expected.to eq [:two, :one] }
1133
- end
1134
-
1135
- context "with an invalid action" do
1136
- it { expect { resource.action(:three) }.to raise_error Chef::Exceptions::ValidationFailed }
1137
- end
1138
-
1139
- context "with an invalid assignment action" do
1140
- it { expect { resource.action = :three }.to raise_error Chef::Exceptions::ValidationFailed }
1141
- end
1142
- end
1143
-
1144
- describe ".default_action" do
1145
- let(:default_action) {}
1146
- let(:resource_class) do
1147
- actions = default_action
1148
- Class.new(described_class) do
1149
- default_action(actions) if actions
1150
- end
1151
- end
1152
- subject { resource_class.default_action }
1153
-
1154
- context "with no default actions" do
1155
- it { is_expected.to eq [:nothing] }
1156
- end
1157
-
1158
- context "with a symbol default action" do
1159
- let(:default_action) { :one }
1160
- it { is_expected.to eq [:one] }
1161
- end
1162
-
1163
- context "with a string default action" do
1164
- let(:default_action) { "one" }
1165
- it { is_expected.to eq [:one] }
1166
- end
1167
-
1168
- context "with an array default action" do
1169
- let(:default_action) { [:two, :one] }
1170
- it { is_expected.to eq [:two, :one] }
1171
- end
1172
- end
1173
-
1174
- describe ".preview_resource" do
1175
- let(:klass) { Class.new(Chef::Resource) }
1176
-
1177
- before do
1178
- allow(Chef::DSL::Resources).to receive(:add_resource_dsl).with(:test_resource)
1179
- end
1180
-
1181
- it "defaults to false" do
1182
- expect(klass.preview_resource).to eq false
1183
- end
1184
-
1185
- it "can be set to true" do
1186
- klass.preview_resource(true)
1187
- expect(klass.preview_resource).to eq true
1188
- end
1189
-
1190
- it "does not affect provides by default" do
1191
- expect(Chef.resource_handler_map).to receive(:set).with(:test_resource, klass, { canonical: true })
1192
- klass.resource_name(:test_resource)
1193
- end
1194
- end
1195
- end
1
+ #
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Author:: Christopher Walters (<cw@chef.io>)
4
+ # Author:: Tim Hinderliter (<tim@chef.io>)
5
+ # Author:: Seth Chisamore (<schisamo@chef.io>)
6
+ # Copyright:: Copyright 2008-2018, Chef Software Inc.
7
+ # License:: Apache License, Version 2.0
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+
22
+ require "spec_helper"
23
+
24
+ describe Chef::Resource do
25
+ let(:cookbook_repo_path) { File.join(CHEF_SPEC_DATA, "cookbooks") }
26
+ let(:cookbook_collection) { Chef::CookbookCollection.new(Chef::CookbookLoader.new(cookbook_repo_path)) }
27
+ let(:node) { Chef::Node.new }
28
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
29
+ let(:run_context) { Chef::RunContext.new(node, cookbook_collection, events) }
30
+ let(:resource) { resource_class.new("funk", run_context) }
31
+ let(:resource_class) { Chef::Resource }
32
+
33
+ it "should mixin shell_out" do
34
+ expect(resource.respond_to?(:shell_out)).to be true
35
+ end
36
+
37
+ it "should mixin shell_out!" do
38
+ expect(resource.respond_to?(:shell_out!)).to be true
39
+ end
40
+
41
+ describe "when inherited" do
42
+
43
+ it "adds an entry to a list of subclasses" do
44
+ subclass = Class.new(Chef::Resource)
45
+ expect(Chef::Resource.resource_classes).to include(subclass)
46
+ end
47
+
48
+ it "keeps track of subclasses of subclasses" do
49
+ subclass = Class.new(Chef::Resource)
50
+ subclass_of_subclass = Class.new(subclass)
51
+ expect(Chef::Resource.resource_classes).to include(subclass_of_subclass)
52
+ end
53
+
54
+ end
55
+
56
+ describe "when declaring the identity attribute" do
57
+ it "has :name as identity attribute by default" do
58
+ expect(Chef::Resource.identity_attr).to eq(:name)
59
+ end
60
+
61
+ it "sets an identity attribute" do
62
+ resource_class = Class.new(Chef::Resource)
63
+ resource_class.identity_attr(:path)
64
+ expect(resource_class.identity_attr).to eq(:path)
65
+ end
66
+
67
+ it "inherits an identity attribute from a superclass" do
68
+ resource_class = Class.new(Chef::Resource)
69
+ resource_subclass = Class.new(resource_class)
70
+ resource_class.identity_attr(:package_name)
71
+ expect(resource_subclass.identity_attr).to eq(:package_name)
72
+ end
73
+
74
+ it "overrides the identity attribute from a superclass when the identity attr is set" do
75
+ resource_class = Class.new(Chef::Resource)
76
+ resource_subclass = Class.new(resource_class)
77
+ resource_class.identity_attr(:package_name)
78
+ resource_subclass.identity_attr(:something_else)
79
+ expect(resource_subclass.identity_attr).to eq(:something_else)
80
+ end
81
+ end
82
+
83
+ describe "when no identity attribute has been declared" do
84
+ let(:resource_sans_id) { Chef::Resource.new("my-name") }
85
+
86
+ # Would rather force identity attributes to be set for everything,
87
+ # but that's not plausible for back compat reasons.
88
+ it "uses the name as the identity" do
89
+ expect(resource_sans_id.identity).to eq("my-name")
90
+ end
91
+ end
92
+
93
+ describe "when an identity attribute has been declared" do
94
+ let(:file_resource) do
95
+ file_resource_class = Class.new(Chef::Resource) do
96
+ identity_attr :path
97
+ attr_accessor :path
98
+ end
99
+
100
+ file_resource = file_resource_class.new("identity-attr-test")
101
+ file_resource.path = "/tmp/foo.txt"
102
+ file_resource
103
+ end
104
+
105
+ it "gives the value of its identity attribute" do
106
+ expect(file_resource.identity).to eq("/tmp/foo.txt")
107
+ end
108
+ end
109
+
110
+ describe "when declaring state attributes" do
111
+ it "has no state_attrs by default" do
112
+ expect(Chef::Resource.state_attrs).to be_empty
113
+ end
114
+
115
+ it "sets a list of state attributes" do
116
+ resource_class = Class.new(Chef::Resource)
117
+ resource_class.state_attrs(:checksum, :owner, :group, :mode)
118
+ expect(resource_class.state_attrs).to match_array([:checksum, :owner, :group, :mode])
119
+ end
120
+
121
+ it "inherits state attributes from the superclass" do
122
+ resource_class = Class.new(Chef::Resource)
123
+ resource_subclass = Class.new(resource_class)
124
+ resource_class.state_attrs(:checksum, :owner, :group, :mode)
125
+ expect(resource_subclass.state_attrs).to match_array([:checksum, :owner, :group, :mode])
126
+ end
127
+
128
+ it "combines inherited state attributes with non-inherited state attributes" do
129
+ resource_class = Class.new(Chef::Resource)
130
+ resource_subclass = Class.new(resource_class)
131
+ resource_class.state_attrs(:checksum, :owner)
132
+ resource_subclass.state_attrs(:group, :mode)
133
+ expect(resource_subclass.state_attrs).to match_array([:checksum, :owner, :group, :mode])
134
+ end
135
+
136
+ end
137
+
138
+ describe "when a set of state attributes has been declared" do
139
+ let(:file_resource) do
140
+ file_resource_class = Class.new(Chef::Resource) do
141
+
142
+ state_attrs :checksum, :owner, :group, :mode
143
+
144
+ attr_accessor :checksum
145
+ attr_accessor :owner
146
+ attr_accessor :group
147
+ attr_accessor :mode
148
+ end
149
+
150
+ file_resource = file_resource_class.new("describe-state-test")
151
+ file_resource.checksum = "abc123"
152
+ file_resource.owner = "root"
153
+ file_resource.group = "wheel"
154
+ file_resource.mode = "0644"
155
+ file_resource
156
+ end
157
+
158
+ it "describes its state" do
159
+ resource_state = file_resource.state_for_resource_reporter
160
+ expect(resource_state.keys).to match_array([:checksum, :owner, :group, :mode])
161
+ expect(resource_state[:checksum]).to eq("abc123")
162
+ expect(resource_state[:owner]).to eq("root")
163
+ expect(resource_state[:group]).to eq("wheel")
164
+ expect(resource_state[:mode]).to eq("0644")
165
+ end
166
+ end
167
+
168
+ describe "#state_for_resource_reporter" do
169
+ context "when a property is marked as sensitive" do
170
+ it "suppresses the sensitive property's value" do
171
+ resource_class = Class.new(Chef::Resource) { property :foo, String, sensitive: true }
172
+ resource = resource_class.new("sensitive_property_tests")
173
+ resource.foo = "some value"
174
+ expect(resource.state_for_resource_reporter[:foo]).to eq("*sensitive value suppressed*")
175
+ end
176
+ end
177
+
178
+ context "when a property is not marked as sensitive" do
179
+ it "does not suppress the property's value" do
180
+ resource_class = Class.new(Chef::Resource) { property :foo, String }
181
+ resource = resource_class.new("sensitive_property_tests")
182
+ resource.foo = "some value"
183
+ expect(resource.state_for_resource_reporter[:foo]).to eq("some value")
184
+ end
185
+ end
186
+ end
187
+
188
+ describe "load_from" do
189
+ let(:prior_resource) do
190
+ prior_resource = Chef::Resource.new("funk")
191
+ prior_resource.source_line
192
+ prior_resource.allowed_actions << :funkytown
193
+ prior_resource.action(:funkytown)
194
+ prior_resource
195
+ end
196
+ before(:each) do
197
+ resource.allowed_actions << :funkytown
198
+ run_context.resource_collection << prior_resource
199
+ end
200
+
201
+ it "should load the attributes of a prior resource" do
202
+ resource.load_from(prior_resource)
203
+ end
204
+
205
+ it "should not inherit the action from the prior resource" do
206
+ resource.load_from(prior_resource)
207
+ expect(resource.action).not_to eq(prior_resource.action)
208
+ end
209
+ end
210
+
211
+ describe "name" do
212
+ it "should have a name" do
213
+ expect(resource.name).to eql("funk")
214
+ end
215
+
216
+ it "should let you set a new name" do
217
+ resource.name "monkey"
218
+ expect(resource.name).to eql("monkey")
219
+ end
220
+
221
+ it "coerces arrays to names" do
222
+ expect(resource.name %w{a b}).to eql("a, b")
223
+ end
224
+
225
+ it "should coerce objects to a string" do
226
+ expect(resource.name Object.new).to be_a(String)
227
+ end
228
+ end
229
+
230
+ describe "notifies" do
231
+ it "should make notified resources appear in the actions hash" do
232
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
233
+ resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee")
234
+ expect(resource.delayed_notifications.detect { |e| e.resource.name == "coffee" && e.action == :reload }).not_to be_nil
235
+ end
236
+
237
+ it "should make notified resources be capable of acting immediately" do
238
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
239
+ resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee"), :immediate
240
+ expect(resource.immediate_notifications.detect { |e| e.resource.name == "coffee" && e.action == :reload }).not_to be_nil
241
+ end
242
+
243
+ it "should raise an exception if told to act in other than :delay or :immediate(ly)" do
244
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
245
+ expect do
246
+ resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee"), :someday
247
+ end.to raise_error(ArgumentError)
248
+ end
249
+
250
+ it "should allow multiple notified resources appear in the actions hash" do
251
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
252
+ resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee")
253
+ expect(resource.delayed_notifications.detect { |e| e.resource.name == "coffee" && e.action == :reload }).not_to be_nil
254
+
255
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("beans")
256
+ resource.notifies :reload, run_context.resource_collection.find(zen_master: "beans")
257
+ expect(resource.delayed_notifications.detect { |e| e.resource.name == "beans" && e.action == :reload }).not_to be_nil
258
+ end
259
+
260
+ it "creates a notification for a resource that is not yet in the resource collection" do
261
+ resource.notifies(:restart, service: "apache")
262
+ expected_notification = Chef::Resource::Notification.new({ service: "apache" }, :restart, resource)
263
+ expect(resource.delayed_notifications).to include(expected_notification)
264
+ end
265
+
266
+ it "notifies another resource immediately" do
267
+ resource.notifies_immediately(:restart, service: "apache")
268
+ expected_notification = Chef::Resource::Notification.new({ service: "apache" }, :restart, resource)
269
+ expect(resource.immediate_notifications).to include(expected_notification)
270
+ end
271
+
272
+ it "notifies a resource to take action at the end of the chef run" do
273
+ resource.notifies_delayed(:restart, service: "apache")
274
+ expected_notification = Chef::Resource::Notification.new({ service: "apache" }, :restart, resource)
275
+ expect(resource.delayed_notifications).to include(expected_notification)
276
+ end
277
+
278
+ it "notifies a resource with an array for its name via its prettified string name" do
279
+ run_context.resource_collection << Chef::Resource::ZenMaster.new(%w{coffee tea})
280
+ resource.notifies :reload, run_context.resource_collection.find(zen_master: "coffee, tea")
281
+ expect(resource.delayed_notifications.detect { |e| e.resource.name == "coffee, tea" && e.action == :reload }).not_to be_nil
282
+ end
283
+
284
+ it "notifies a resource without a name via a string name with brackets" do
285
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("")
286
+ resource.notifies :reload, "zen_master[]"
287
+ end
288
+
289
+ it "notifies a resource without a name via a string name without brackets" do
290
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("")
291
+ resource.notifies :reload, "zen_master"
292
+ expect(resource.delayed_notifications.first.resource).to eql("zen_master")
293
+ end
294
+
295
+ it "notifies a resource without a name via a hash name with an empty string" do
296
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("")
297
+ resource.notifies :reload, zen_master: ""
298
+ expect(resource.delayed_notifications.first.resource).to eql(zen_master: "")
299
+ end
300
+ end
301
+
302
+ describe "subscribes" do
303
+ it "should make resources appear in the actions hash of subscribed nodes" do
304
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
305
+ zr = run_context.resource_collection.find(zen_master: "coffee")
306
+ resource.subscribes :reload, zr
307
+ expect(zr.delayed_notifications.detect { |e| e.resource.name == "funk" && e.action == :reload }).not_to be_nil
308
+ end
309
+
310
+ it "should make resources appear in the actions hash of subscribed nodes" do
311
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
312
+ zr = run_context.resource_collection.find(zen_master: "coffee")
313
+ resource.subscribes :reload, zr
314
+ expect(zr.delayed_notifications.detect { |e| e.resource.name == resource.name && e.action == :reload }).not_to be_nil
315
+
316
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("bean")
317
+ zrb = run_context.resource_collection.find(zen_master: "bean")
318
+ zrb.subscribes :reload, zr
319
+ expect(zr.delayed_notifications.detect { |e| e.resource.name == resource.name && e.action == :reload }).not_to be_nil
320
+ end
321
+
322
+ it "should make subscribed resources be capable of acting immediately" do
323
+ run_context.resource_collection << Chef::Resource::ZenMaster.new("coffee")
324
+ zr = run_context.resource_collection.find(zen_master: "coffee")
325
+ resource.subscribes :reload, zr, :immediately
326
+ expect(zr.immediate_notifications.detect { |e| e.resource.name == resource.name && e.action == :reload }).not_to be_nil
327
+ end
328
+ end
329
+
330
+ describe "defined_at" do
331
+ it "should correctly parse source_line on unix-like operating systems" do
332
+ resource.source_line = "/some/path/to/file.rb:80:in `wombat_tears'"
333
+ expect(resource.defined_at).to eq("/some/path/to/file.rb line 80")
334
+ end
335
+
336
+ it "should correctly parse source_line on Windows" do
337
+ resource.source_line = "C:/some/path/to/file.rb:80 in 1`wombat_tears'"
338
+ expect(resource.defined_at).to eq("C:/some/path/to/file.rb line 80")
339
+ end
340
+
341
+ it "should include the cookbook and recipe when it knows it" do
342
+ resource.source_line = "/some/path/to/file.rb:80:in `wombat_tears'"
343
+ resource.recipe_name = "wombats"
344
+ resource.cookbook_name = "animals"
345
+ expect(resource.defined_at).to eq("animals::wombats line 80")
346
+ end
347
+
348
+ it "should recognize dynamically defined resources" do
349
+ expect(resource.defined_at).to eq("dynamically defined")
350
+ end
351
+ end
352
+
353
+ describe "to_s" do
354
+ it "should become a string like resource_name[name]" do
355
+ zm = Chef::Resource::ZenMaster.new("coffee")
356
+ expect(zm.to_s).to eql("zen_master[coffee]")
357
+ end
358
+ end
359
+
360
+ describe "to_text" do
361
+ it "prints nice message" do
362
+ resource_class = Class.new(Chef::Resource) { property :foo, String }
363
+ resource = resource_class.new("sensitive_property_tests")
364
+ resource.foo = "some value"
365
+ expect(resource.to_text).to match(/foo "some value"/)
366
+ end
367
+
368
+ context "when property is sensitive" do
369
+ it "supresses that properties value" do
370
+ resource_class = Class.new(Chef::Resource) { property :foo, String, sensitive: true }
371
+ resource = resource_class.new("sensitive_property_tests")
372
+ resource.foo = "some value"
373
+ expect(resource.to_text).to match(/foo "\*sensitive value suppressed\*"/)
374
+ end
375
+ end
376
+
377
+ context "when property is required" do
378
+ it "does not propagate vailidation errors" do
379
+ resource_class = Class.new(Chef::Resource) { property :foo, String, required: true }
380
+ resource = resource_class.new("required_property_tests")
381
+ expect { resource.to_text }.to_not raise_error Chef::Exceptions::ValidationFailed
382
+ end
383
+ end
384
+ end
385
+
386
+ context "Documentation of resources" do
387
+ it "can have a description" do
388
+ c = Class.new(Chef::Resource) do
389
+ description "my description"
390
+ end
391
+ expect(c.description).to eq "my description"
392
+ end
393
+
394
+ it "can say when it was introduced" do
395
+ c = Class.new(Chef::Resource) do
396
+ introduced "14.0"
397
+ end
398
+ expect(c.introduced).to eq "14.0"
399
+ end
400
+
401
+ it "can have some examples" do
402
+ c = Class.new(Chef::Resource) do
403
+ examples <<~EOH
404
+ resource "foo" do
405
+ foo foo
406
+ end
407
+ EOH
408
+ end
409
+ expect(c.examples).to eq <<~EOH
410
+ resource "foo" do
411
+ foo foo
412
+ end
413
+ EOH
414
+ end
415
+ end
416
+
417
+ describe "self.resource_name" do
418
+ context "When resource_name is not set" do
419
+ it "and there are no provides lines, resource_name is nil" do
420
+ c = Class.new(Chef::Resource) do
421
+ end
422
+
423
+ r = c.new("hi")
424
+ r.declared_type = :d
425
+ expect(c.resource_name).to be_nil
426
+ expect(r.resource_name).to be_nil
427
+ expect(r.declared_type).to eq :d
428
+ end
429
+
430
+ it "and there are no provides lines, resource_name is used" do
431
+ c = Class.new(Chef::Resource) do
432
+ def initialize(*args, &block)
433
+ @resource_name = :blah
434
+ super
435
+ end
436
+ end
437
+
438
+ r = c.new("hi")
439
+ r.declared_type = :d
440
+ expect(c.resource_name).to be_nil
441
+ expect(r.resource_name).to eq :blah
442
+ expect(r.declared_type).to eq :d
443
+ end
444
+
445
+ it "and the resource class gets a late-bound name, resource_name is nil" do
446
+ c = Class.new(Chef::Resource) do
447
+ def self.name
448
+ "ResourceSpecNameTest"
449
+ end
450
+ end
451
+
452
+ r = c.new("hi")
453
+ r.declared_type = :d
454
+ expect(c.resource_name).to be_nil
455
+ expect(r.resource_name).to be_nil
456
+ expect(r.declared_type).to eq :d
457
+ end
458
+ end
459
+
460
+ it "resource_name without provides is honored" do
461
+ c = Class.new(Chef::Resource) do
462
+ resource_name "blah"
463
+ end
464
+
465
+ r = c.new("hi")
466
+ r.declared_type = :d
467
+ expect(c.resource_name).to eq :blah
468
+ expect(r.resource_name).to eq :blah
469
+ expect(r.declared_type).to eq :d
470
+ end
471
+ it "setting class.resource_name with 'resource_name = blah' overrides declared_type" do
472
+ c = Class.new(Chef::Resource) do
473
+ provides :self_resource_name_test_2
474
+ end
475
+ c.resource_name = :blah
476
+
477
+ r = c.new("hi")
478
+ r.declared_type = :d
479
+ expect(c.resource_name).to eq :blah
480
+ expect(r.resource_name).to eq :blah
481
+ expect(r.declared_type).to eq :d
482
+ end
483
+ it "setting class.resource_name with 'resource_name blah' overrides declared_type" do
484
+ c = Class.new(Chef::Resource) do
485
+ resource_name :blah
486
+ provides :self_resource_name_test_3
487
+ end
488
+
489
+ r = c.new("hi")
490
+ r.declared_type = :d
491
+ expect(c.resource_name).to eq :blah
492
+ expect(r.resource_name).to eq :blah
493
+ expect(r.declared_type).to eq :d
494
+ end
495
+ end
496
+
497
+ describe "to_json" do
498
+ it "should serialize to json" do
499
+ json = resource.to_json
500
+ expect(json).to match(/json_class/)
501
+ expect(json).to match(/instance_vars/)
502
+ end
503
+
504
+ include_examples "to_json equivalent to Chef::JSONCompat.to_json" do
505
+ let(:jsonable) { resource }
506
+ end
507
+ end
508
+
509
+ describe "to_hash" do
510
+ context "when the resource has a property with a default" do
511
+ let(:resource_class) { Class.new(Chef::Resource) { property :a, default: 1 } }
512
+ it "should include the default in the hash" do
513
+ expect(resource.to_hash.keys.sort).to eq([:a, :allowed_actions, :params, :provider, :updated,
514
+ :updated_by_last_action, :before,
515
+ :name, :source_line,
516
+ :action, :elapsed_time,
517
+ :default_guard_interpreter, :guard_interpreter].sort)
518
+ expect(resource.to_hash[:name]).to eq "funk"
519
+ expect(resource.to_hash[:a]).to eq 1
520
+ end
521
+ end
522
+
523
+ it "should convert to a hash" do
524
+ hash = resource.to_hash
525
+ expected_keys = [ :allowed_actions, :params, :provider, :updated,
526
+ :updated_by_last_action, :before,
527
+ :name, :source_line,
528
+ :action, :elapsed_time,
529
+ :default_guard_interpreter, :guard_interpreter ]
530
+ expect(hash.keys - expected_keys).to eq([])
531
+ expect(expected_keys - hash.keys).to eq([])
532
+ expect(hash[:name]).to eql("funk")
533
+ end
534
+ end
535
+
536
+ describe "self.json_create" do
537
+ it "should deserialize itself from json" do
538
+ json = Chef::JSONCompat.to_json(resource)
539
+ serialized_node = Chef::Resource.from_json(json)
540
+ expect(serialized_node).to be_a_kind_of(Chef::Resource)
541
+ expect(serialized_node.name).to eql(resource.name)
542
+ end
543
+ end
544
+
545
+ describe "ignore_failure" do
546
+ it "should default to throwing an error if a provider fails for a resource" do
547
+ expect(resource.ignore_failure).to eq(false)
548
+ end
549
+
550
+ it "should allow you to set whether a provider should throw exceptions with ignore_failure" do
551
+ resource.ignore_failure(true)
552
+ expect(resource.ignore_failure).to eq(true)
553
+ end
554
+
555
+ it "should allow you to set quiet ignore_failure as a symbol" do
556
+ resource.ignore_failure(:quiet)
557
+ expect(resource.ignore_failure).to eq(:quiet)
558
+ end
559
+
560
+ it "should allow you to set quiet ignore_failure as a string" do
561
+ resource.ignore_failure("quiet")
562
+ expect(resource.ignore_failure).to eq("quiet")
563
+ end
564
+ end
565
+
566
+ describe "retries" do
567
+ let(:retriable_resource) do
568
+ retriable_resource = Chef::Resource::Cat.new("precious", run_context)
569
+ retriable_resource.provider = Chef::Provider::SnakeOil
570
+ retriable_resource.action = :purr
571
+ retriable_resource
572
+ end
573
+
574
+ before do
575
+ node.automatic_attrs[:platform] = "fubuntu"
576
+ node.automatic_attrs[:platform_version] = "10.04"
577
+ end
578
+
579
+ it "should default to not retrying if a provider fails for a resource" do
580
+ expect(retriable_resource.retries).to eq(0)
581
+ end
582
+
583
+ it "should allow you to set how many retries a provider should attempt after a failure" do
584
+ retriable_resource.retries(2)
585
+ expect(retriable_resource.retries).to eq(2)
586
+ end
587
+
588
+ it "should default to a retry delay of 2 seconds" do
589
+ expect(retriable_resource.retry_delay).to eq(2)
590
+ end
591
+
592
+ it "should allow you to set the retry delay" do
593
+ retriable_resource.retry_delay(10)
594
+ expect(retriable_resource.retry_delay).to eq(10)
595
+ end
596
+
597
+ it "should keep given value of retries intact after the provider fails for a resource" do
598
+ retriable_resource.retries(3)
599
+ retriable_resource.retry_delay(0) # No need to wait.
600
+
601
+ provider = Chef::Provider::SnakeOil.new(retriable_resource, run_context)
602
+ allow(Chef::Provider::SnakeOil).to receive(:new).and_return(provider)
603
+ allow(provider).to receive(:action_purr).and_raise
604
+
605
+ expect(retriable_resource).to receive(:sleep).exactly(3).times
606
+ expect { retriable_resource.run_action(:purr) }.to raise_error(RuntimeError)
607
+ expect(retriable_resource.retries).to eq(3)
608
+ end
609
+
610
+ it "should not rescue from non-StandardError exceptions" do
611
+ retriable_resource.retries(3)
612
+ retriable_resource.retry_delay(0) # No need to wait.
613
+
614
+ provider = Chef::Provider::SnakeOil.new(retriable_resource, run_context)
615
+ allow(Chef::Provider::SnakeOil).to receive(:new).and_return(provider)
616
+ allow(provider).to receive(:action_purr).and_raise(LoadError)
617
+
618
+ expect(retriable_resource).not_to receive(:sleep)
619
+ expect { retriable_resource.run_action(:purr) }.to raise_error(LoadError)
620
+ end
621
+ end
622
+
623
+ it "runs an action by finding its provider, loading the current resource and then running the action" do
624
+ skip
625
+ end
626
+
627
+ describe "when updated by a provider" do
628
+ before do
629
+ resource.updated_by_last_action(true)
630
+ end
631
+
632
+ it "records that it was updated" do
633
+ expect(resource).to be_updated
634
+ end
635
+
636
+ it "records that the last action updated the resource" do
637
+ expect(resource).to be_updated_by_last_action
638
+ end
639
+
640
+ describe "and then run again without being updated" do
641
+ before do
642
+ resource.updated_by_last_action(false)
643
+ end
644
+
645
+ it "reports that it is updated" do
646
+ expect(resource).to be_updated
647
+ end
648
+
649
+ it "reports that it was not updated by the last action" do
650
+ expect(resource).not_to be_updated_by_last_action
651
+ end
652
+
653
+ end
654
+
655
+ end
656
+
657
+ describe "when invoking its action" do
658
+ let(:resource) do
659
+ resource = Chef::Resource.new("provided", run_context)
660
+ resource.provider = Chef::Provider::SnakeOil
661
+ resource
662
+ end
663
+ before do
664
+ node.automatic_attrs[:platform] = "fubuntu"
665
+ node.automatic_attrs[:platform_version] = "10.04"
666
+ end
667
+
668
+ it "does not run only_if if no only_if command is given" do
669
+ expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate)
670
+ resource.only_if.clear
671
+ resource.run_action(:purr)
672
+ end
673
+
674
+ it "runs runs an only_if when one is given" do
675
+ snitch_variable = nil
676
+ resource.only_if { snitch_variable = true }
677
+ expect(resource.only_if.first.positivity).to eq(:only_if)
678
+ # Chef::Mixin::Command.should_receive(:only_if).with(true, {}).and_return(false)
679
+ resource.run_action(:purr)
680
+ expect(snitch_variable).to be_truthy
681
+ end
682
+
683
+ it "runs multiple only_if conditionals" do
684
+ snitch_var1, snitch_var2 = nil, nil
685
+ resource.only_if { snitch_var1 = 1 }
686
+ resource.only_if { snitch_var2 = 2 }
687
+ resource.run_action(:purr)
688
+ expect(snitch_var1).to eq(1)
689
+ expect(snitch_var2).to eq(2)
690
+ end
691
+
692
+ it "accepts command options for only_if conditionals" do
693
+ expect_any_instance_of(Chef::Resource::Conditional).to receive(:evaluate_command).at_least(1).times
694
+ resource.only_if("true", cwd: "/tmp")
695
+ expect(resource.only_if.first.command_opts).to eq({ cwd: "/tmp" })
696
+ resource.run_action(:purr)
697
+ end
698
+
699
+ it "runs not_if as a command when it is a string" do
700
+ expect_any_instance_of(Chef::Resource::Conditional).to receive(:evaluate_command).at_least(1).times
701
+ resource.not_if "pwd"
702
+ resource.run_action(:purr)
703
+ end
704
+
705
+ it "runs not_if as a block when it is a ruby block" do
706
+ expect_any_instance_of(Chef::Resource::Conditional).to receive(:evaluate_block).at_least(1).times
707
+ resource.not_if { puts "foo" }
708
+ resource.run_action(:purr)
709
+ end
710
+
711
+ it "does not run not_if if no not_if command is given" do
712
+ expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate)
713
+ resource.not_if.clear
714
+ resource.run_action(:purr)
715
+ end
716
+
717
+ it "accepts command options for not_if conditionals" do
718
+ resource.not_if("pwd" , cwd: "/tmp")
719
+ expect(resource.not_if.first.command_opts).to eq({ cwd: "/tmp" })
720
+ end
721
+
722
+ it "accepts multiple not_if conditionals" do
723
+ snitch_var1, snitch_var2 = true, true
724
+ resource.not_if { snitch_var1 = nil }
725
+ resource.not_if { snitch_var2 = false }
726
+ resource.run_action(:purr)
727
+ expect(snitch_var1).to be_nil
728
+ expect(snitch_var2).to be_falsey
729
+ end
730
+
731
+ it "reports 0 elapsed time if actual elapsed time is < 0" do
732
+ expected = Time.now
733
+ allow(Time).to receive(:now).and_return(expected, expected - 1)
734
+ resource.run_action(:purr)
735
+ expect(resource.elapsed_time).to eq(0)
736
+ end
737
+
738
+ describe "guard_interpreter attribute" do
739
+ it "should be set to :default by default" do
740
+ expect(resource.guard_interpreter).to eq(:default)
741
+ end
742
+
743
+ it "if set to :default should return :default when read" do
744
+ resource.guard_interpreter(:default)
745
+ expect(resource.guard_interpreter).to eq(:default)
746
+ end
747
+
748
+ it "should raise Chef::Exceptions::ValidationFailed on an attempt to set the guard_interpreter attribute to something other than a Symbol" do
749
+ expect { resource.guard_interpreter("command_dot_com") }.to raise_error(Chef::Exceptions::ValidationFailed)
750
+ end
751
+
752
+ it "should not raise an exception when setting the guard interpreter attribute to a Symbol" do
753
+ allow(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:new).and_return(nil)
754
+ expect { resource.guard_interpreter(:command_dot_com) }.not_to raise_error
755
+ end
756
+ end
757
+ end
758
+
759
+ describe "should_skip?" do
760
+ before do
761
+ resource = Chef::Resource::Cat.new("sugar", run_context)
762
+ end
763
+
764
+ it "should return false by default" do
765
+ expect(resource.should_skip?(:purr)).to be_falsey
766
+ end
767
+
768
+ it "should return false when only_if is met" do
769
+ resource.only_if { true }
770
+ expect(resource.should_skip?(:purr)).to be_falsey
771
+ end
772
+
773
+ it "should return true when only_if is not met" do
774
+ resource.only_if { false }
775
+ expect(resource.should_skip?(:purr)).to be_truthy
776
+ end
777
+
778
+ it "should return true when not_if is met" do
779
+ resource.not_if { true }
780
+ expect(resource.should_skip?(:purr)).to be_truthy
781
+ end
782
+
783
+ it "should return false when not_if is not met" do
784
+ resource.not_if { false }
785
+ expect(resource.should_skip?(:purr)).to be_falsey
786
+ end
787
+
788
+ it "should return true when only_if is met but also not_if is met" do
789
+ resource.only_if { true }
790
+ resource.not_if { true }
791
+ expect(resource.should_skip?(:purr)).to be_truthy
792
+ end
793
+
794
+ it "should return false when only_if is met and also not_if is not met" do
795
+ resource.only_if { true }
796
+ resource.not_if { false }
797
+ expect(resource.should_skip?(:purr)).to be_falsey
798
+ end
799
+
800
+ it "should return true when one of multiple only_if's is not met" do
801
+ resource.only_if { true }
802
+ resource.only_if { false }
803
+ resource.only_if { true }
804
+ expect(resource.should_skip?(:purr)).to be_truthy
805
+ end
806
+
807
+ it "should return true when one of multiple not_if's is met" do
808
+ resource.not_if { false }
809
+ resource.not_if { true }
810
+ resource.not_if { false }
811
+ expect(resource.should_skip?(:purr)).to be_truthy
812
+ end
813
+
814
+ it "should return false when all of multiple only_if's are met" do
815
+ resource.only_if { true }
816
+ resource.only_if { true }
817
+ resource.only_if { true }
818
+ expect(resource.should_skip?(:purr)).to be_falsey
819
+ end
820
+
821
+ it "should return false when all of multiple not_if's are not met" do
822
+ resource.not_if { false }
823
+ resource.not_if { false }
824
+ resource.not_if { false }
825
+ expect(resource.should_skip?(:purr)).to be_falsey
826
+ end
827
+
828
+ it "should return true when action is :nothing" do
829
+ expect(resource.should_skip?(:nothing)).to be_truthy
830
+ end
831
+
832
+ it "should return true when action is :nothing ignoring only_if/not_if conditionals" do
833
+ resource.only_if { true }
834
+ resource.not_if { false }
835
+ expect(resource.should_skip?(:nothing)).to be_truthy
836
+ end
837
+
838
+ it "should print \"skipped due to action :nothing\" message for doc formatter when action is :nothing" do
839
+ fdoc = Chef::Formatters.new(:doc, STDOUT, STDERR)
840
+ allow(run_context).to receive(:events).and_return(fdoc)
841
+ expect(fdoc).to receive(:puts).with(" (skipped due to action :nothing)", anything())
842
+ resource.should_skip?(:nothing)
843
+ end
844
+
845
+ end
846
+
847
+ describe "when resource action is :nothing" do
848
+ let(:resource1) do
849
+ resource1 = Chef::Resource::Cat.new("sugar", run_context)
850
+ resource1.action = :nothing
851
+ resource1
852
+ end
853
+ before do
854
+ node.automatic_attrs[:platform] = "fubuntu"
855
+ node.automatic_attrs[:platform_version] = "10.04"
856
+ end
857
+
858
+ it "should not run only_if/not_if conditionals (CHEF-972)" do
859
+ snitch_var1 = 0
860
+ resource1.only_if { snitch_var1 = 1 }
861
+ resource1.not_if { snitch_var1 = 2 }
862
+ resource1.run_action(:nothing)
863
+ expect(snitch_var1).to eq(0)
864
+ end
865
+
866
+ it "should run only_if/not_if conditionals when notified to run another action (CHEF-972)" do
867
+ snitch_var1 = snitch_var2 = 0
868
+ runner = Chef::Runner.new(run_context)
869
+
870
+ Chef::Provider::SnakeOil.provides :cat
871
+
872
+ resource1.only_if { snitch_var1 = 1 }
873
+ resource1.not_if { snitch_var2 = 2 }
874
+ resource2 = Chef::Resource::Cat.new("coffee", run_context)
875
+ resource2.notifies :purr, resource1
876
+ resource2.action = :purr
877
+
878
+ run_context.resource_collection << resource1
879
+ run_context.resource_collection << resource2
880
+ runner.converge
881
+
882
+ expect(snitch_var1).to eq(1)
883
+ expect(snitch_var2).to eq(2)
884
+ end
885
+ end
886
+
887
+ describe "building the platform map" do
888
+
889
+ let(:klz) { Class.new(Chef::Resource) }
890
+
891
+ before do
892
+ Chef::Resource::Klz = klz
893
+ end
894
+
895
+ after do
896
+ Chef::Resource.send(:remove_const, :Klz)
897
+ end
898
+
899
+ it "adds mappings for a single platform" do
900
+ expect(Chef.resource_handler_map).to receive(:set).with(
901
+ :dinobot, Chef::Resource::Klz, { platform: ["autobots"] }
902
+ )
903
+ klz.provides :dinobot, platform: ["autobots"]
904
+ end
905
+
906
+ it "adds mappings for multiple platforms" do
907
+ expect(Chef.resource_handler_map).to receive(:set).with(
908
+ :energy, Chef::Resource::Klz, { platform: %w{autobots decepticons} }
909
+ )
910
+ klz.provides :energy, platform: %w{autobots decepticons}
911
+ end
912
+
913
+ it "adds mappings for all platforms" do
914
+ expect(Chef.resource_handler_map).to receive(:set).with(
915
+ :tape_deck, Chef::Resource::Klz, {}
916
+ )
917
+ klz.provides :tape_deck
918
+ end
919
+
920
+ end
921
+
922
+ describe "resource_for_node" do
923
+ describe "lookups from the platform map" do
924
+ let(:klz1) { Class.new(Chef::Resource) }
925
+
926
+ before(:each) do
927
+ Chef::Resource::Klz1 = klz1
928
+ node = Chef::Node.new
929
+ node.name("bumblebee")
930
+ node.automatic[:platform] = "autobots"
931
+ node.automatic[:platform_version] = "6.1"
932
+ Object.const_set("Soundwave", klz1)
933
+ klz1.provides :soundwave
934
+ end
935
+
936
+ after(:each) do
937
+ Object.send(:remove_const, :Soundwave)
938
+ Chef::Resource.send(:remove_const, :Klz1)
939
+ end
940
+
941
+ it "returns a resource by short_name if nothing else matches" do
942
+ expect(Chef::Resource.resource_for_node(:soundwave, node)).to eql(klz1)
943
+ end
944
+ end
945
+
946
+ describe "lookups from the platform map" do
947
+ let(:klz2) { Class.new(Chef::Resource) }
948
+
949
+ before(:each) do
950
+ Chef::Resource::Klz2 = klz2
951
+ node.name("bumblebee")
952
+ node.automatic[:platform] = "autobots"
953
+ node.automatic[:platform_version] = "6.1"
954
+ klz2.provides :dinobot, platform: ["autobots"]
955
+ Object.const_set("Grimlock", klz2)
956
+ klz2.provides :grimlock
957
+ end
958
+
959
+ after(:each) do
960
+ Object.send(:remove_const, :Grimlock)
961
+ Chef::Resource.send(:remove_const, :Klz2)
962
+ end
963
+
964
+ it "returns a resource by short_name and node" do
965
+ expect(Chef::Resource.resource_for_node(:dinobot, node)).to eql(klz2)
966
+ end
967
+ end
968
+
969
+ describe "chef_version constraints and the platform map" do
970
+ let(:klz3) { Class.new(Chef::Resource) }
971
+
972
+ it "doesn't wire up the provides when chef_version is < 1" do
973
+ klz3.provides :bulbasaur, chef_version: "< 1.0" # this should be false
974
+ expect { Chef::Resource.resource_for_node(:bulbasaur, node) }.to raise_error(Chef::Exceptions::NoSuchResourceType)
975
+ end
976
+
977
+ it "wires up the provides when chef_version is > 1" do
978
+ klz3.provides :bulbasaur, chef_version: "> 1.0" # this should be true
979
+ expect(Chef::Resource.resource_for_node(:bulbasaur, node)).to eql(klz3)
980
+ end
981
+
982
+ it "wires up the default when chef_version is < 1" do
983
+ klz3.chef_version_for_provides("< 1.0") # this should be false
984
+ klz3.provides :bulbasaur
985
+ expect { Chef::Resource.resource_for_node(:bulbasaur, node) }.to raise_error(Chef::Exceptions::NoSuchResourceType)
986
+ end
987
+
988
+ it "wires up the default when chef_version is > 1" do
989
+ klz3.chef_version_for_provides("> 1.0") # this should be true
990
+ klz3.provides :bulbasaur
991
+ expect(Chef::Resource.resource_for_node(:bulbasaur, node)).to eql(klz3)
992
+ end
993
+ end
994
+
995
+ end
996
+
997
+ describe "when creating notifications" do
998
+
999
+ describe "with a string resource spec" do
1000
+
1001
+ it "creates a delayed notification when timing is not specified" do
1002
+ resource.notifies(:run, "execute[foo]")
1003
+ expect(run_context.delayed_notification_collection.size).to eq(1)
1004
+ end
1005
+
1006
+ it "creates a delayed notification when :delayed is not specified" do
1007
+ resource.notifies(:run, "execute[foo]", :delayed)
1008
+ expect(run_context.delayed_notification_collection.size).to eq(1)
1009
+ end
1010
+
1011
+ it "creates an immediate notification when :immediate is specified" do
1012
+ resource.notifies(:run, "execute[foo]", :immediate)
1013
+ expect(run_context.immediate_notification_collection.size).to eq(1)
1014
+ end
1015
+
1016
+ it "creates an immediate notification when :immediately is specified" do
1017
+ resource.notifies(:run, "execute[foo]", :immediately)
1018
+ expect(run_context.immediate_notification_collection.size).to eq(1)
1019
+ end
1020
+
1021
+ describe "with a syntax error in the resource spec" do
1022
+
1023
+ it "raises an exception immmediately" do
1024
+ expect do
1025
+ resource.notifies(:run, "typo[missing-closing-bracket")
1026
+ end.to raise_error(Chef::Exceptions::InvalidResourceSpecification)
1027
+ end
1028
+ end
1029
+ end
1030
+
1031
+ describe "with a resource reference" do
1032
+ let(:notified_resource) { Chef::Resource.new("punk", run_context) }
1033
+
1034
+ it "creates a delayed notification when timing is not specified" do
1035
+ resource.notifies(:run, notified_resource)
1036
+ expect(run_context.delayed_notification_collection.size).to eq(1)
1037
+ end
1038
+
1039
+ it "creates a delayed notification when :delayed is not specified" do
1040
+ resource.notifies(:run, notified_resource, :delayed)
1041
+ expect(run_context.delayed_notification_collection.size).to eq(1)
1042
+ end
1043
+
1044
+ it "creates an immediate notification when :immediate is specified" do
1045
+ resource.notifies(:run, notified_resource, :immediate)
1046
+ expect(run_context.immediate_notification_collection.size).to eq(1)
1047
+ end
1048
+
1049
+ it "creates an immediate notification when :immediately is specified" do
1050
+ resource.notifies(:run, notified_resource, :immediately)
1051
+ expect(run_context.immediate_notification_collection.size).to eq(1)
1052
+ end
1053
+ end
1054
+
1055
+ end
1056
+
1057
+ describe "resource sensitive attribute" do
1058
+ let(:resource_file) { Chef::Resource::File.new("/nonexistent/CHEF-5098/file", run_context) }
1059
+ let(:action) { :create }
1060
+
1061
+ def compiled_resource_data(resource, action, err)
1062
+ error_inspector = Chef::Formatters::ErrorInspectors::ResourceFailureInspector.new(resource, action, err)
1063
+ description = Chef::Formatters::ErrorDescription.new("test")
1064
+ error_inspector.add_explanation(description)
1065
+ Chef::Log.info("descrtiption: #{description.inspect},error_inspector: #{error_inspector}")
1066
+ description.sections[1]["Compiled Resource:"]
1067
+ end
1068
+
1069
+ it "set to false by default" do
1070
+ expect(resource.sensitive).to be_falsey
1071
+ end
1072
+
1073
+ it "when set to false should show compiled resource for failed resource" do
1074
+ expect { resource_file.run_action(action) }.to raise_error { |err|
1075
+ expect(compiled_resource_data(resource_file, action, err)).to match 'path "/nonexistent/CHEF-5098/file"'
1076
+ }
1077
+ end
1078
+
1079
+ it "when set to true should show compiled resource for failed resource" do
1080
+ resource_file.sensitive true
1081
+ expect { resource_file.run_action(action) }.to raise_error { |err|
1082
+ expect(compiled_resource_data(resource_file, action, err)).to eql("suppressed sensitive resource output")
1083
+ }
1084
+ end
1085
+
1086
+ end
1087
+
1088
+ describe "#action" do
1089
+ let(:resource_class) do
1090
+ Class.new(described_class) do
1091
+ allowed_actions(%i{one two})
1092
+ end
1093
+ end
1094
+ let(:resource) { resource_class.new("test", nil) }
1095
+ subject { resource.action }
1096
+
1097
+ context "with a no action" do
1098
+ it { is_expected.to eq [:nothing] }
1099
+ end
1100
+
1101
+ context "with a default action" do
1102
+ let(:resource_class) do
1103
+ Class.new(described_class) do
1104
+ default_action(:one)
1105
+ end
1106
+ end
1107
+ it { is_expected.to eq [:one] }
1108
+ end
1109
+
1110
+ context "with a symbol action" do
1111
+ before { resource.action(:one) }
1112
+ it { is_expected.to eq [:one] }
1113
+ end
1114
+
1115
+ context "with a string action" do
1116
+ before { resource.action("two") }
1117
+ it { is_expected.to eq [:two] }
1118
+ end
1119
+
1120
+ context "with an array action" do
1121
+ before { resource.action([:two, :one]) }
1122
+ it { is_expected.to eq [:two, :one] }
1123
+ end
1124
+
1125
+ context "with an assignment" do
1126
+ before { resource.action = :one }
1127
+ it { is_expected.to eq [:one] }
1128
+ end
1129
+
1130
+ context "with an array assignment" do
1131
+ before { resource.action = [:two, :one] }
1132
+ it { is_expected.to eq [:two, :one] }
1133
+ end
1134
+
1135
+ context "with an invalid action" do
1136
+ it { expect { resource.action(:three) }.to raise_error Chef::Exceptions::ValidationFailed }
1137
+ end
1138
+
1139
+ context "with an invalid assignment action" do
1140
+ it { expect { resource.action = :three }.to raise_error Chef::Exceptions::ValidationFailed }
1141
+ end
1142
+ end
1143
+
1144
+ describe ".default_action" do
1145
+ let(:default_action) {}
1146
+ let(:resource_class) do
1147
+ actions = default_action
1148
+ Class.new(described_class) do
1149
+ default_action(actions) if actions
1150
+ end
1151
+ end
1152
+ subject { resource_class.default_action }
1153
+
1154
+ context "with no default actions" do
1155
+ it { is_expected.to eq [:nothing] }
1156
+ end
1157
+
1158
+ context "with a symbol default action" do
1159
+ let(:default_action) { :one }
1160
+ it { is_expected.to eq [:one] }
1161
+ end
1162
+
1163
+ context "with a string default action" do
1164
+ let(:default_action) { "one" }
1165
+ it { is_expected.to eq [:one] }
1166
+ end
1167
+
1168
+ context "with an array default action" do
1169
+ let(:default_action) { [:two, :one] }
1170
+ it { is_expected.to eq [:two, :one] }
1171
+ end
1172
+ end
1173
+
1174
+ describe ".preview_resource" do
1175
+ let(:klass) { Class.new(Chef::Resource) }
1176
+
1177
+ before do
1178
+ allow(Chef::DSL::Resources).to receive(:add_resource_dsl).with(:test_resource)
1179
+ end
1180
+
1181
+ it "defaults to false" do
1182
+ expect(klass.preview_resource).to eq false
1183
+ end
1184
+
1185
+ it "can be set to true" do
1186
+ klass.preview_resource(true)
1187
+ expect(klass.preview_resource).to eq true
1188
+ end
1189
+
1190
+ it "does not affect provides by default" do
1191
+ expect(Chef.resource_handler_map).to receive(:set).with(:test_resource, klass, { canonical: true })
1192
+ klass.resource_name(:test_resource)
1193
+ end
1194
+ end
1195
+ end