chef 12.18.31 → 13.0.118

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 (611) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +15 -11
  3. data/README.md +13 -13
  4. data/Rakefile +1 -19
  5. data/VERSION +1 -1
  6. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +1 -1
  7. data/acceptance/Gemfile +8 -5
  8. data/acceptance/Gemfile.lock +90 -81
  9. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +1 -1
  10. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +1 -1
  11. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +4 -0
  12. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +9 -8
  13. data/chef-universal-mingw32.gemspec +2 -3
  14. data/chef.gemspec +8 -7
  15. data/lib/chef/api_client.rb +8 -15
  16. data/lib/chef/api_client_v1.rb +9 -11
  17. data/lib/chef/application/apply.rb +8 -10
  18. data/lib/chef/application/client.rb +1 -1
  19. data/lib/chef/application/exit_code.rb +11 -82
  20. data/lib/chef/application/knife.rb +2 -2
  21. data/lib/chef/application/solo.rb +0 -1
  22. data/lib/chef/application/windows_service.rb +36 -37
  23. data/lib/chef/application/windows_service_manager.rb +1 -1
  24. data/lib/chef/application.rb +15 -25
  25. data/lib/chef/audit/audit_event_proxy.rb +2 -2
  26. data/lib/chef/audit/control_group_data.rb +1 -1
  27. data/lib/chef/blacklist.rb +81 -0
  28. data/lib/chef/chef_class.rb +1 -0
  29. data/lib/chef/chef_fs/chef_fs_data_store.rb +6 -8
  30. data/lib/chef/chef_fs/command_line.rb +15 -16
  31. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  32. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  33. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  34. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  35. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  36. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  37. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  38. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
  39. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  40. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
  41. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  42. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +2 -2
  43. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +6 -2
  44. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +18 -32
  45. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
  46. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +5 -1
  47. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
  48. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
  49. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
  50. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
  51. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
  52. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +29 -26
  53. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +5 -1
  54. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
  55. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
  56. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +13 -16
  57. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
  58. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
  59. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
  60. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
  61. data/lib/chef/chef_fs/file_system.rb +1 -1
  62. data/lib/chef/chef_fs/parallelizer.rb +9 -11
  63. data/lib/chef/client.rb +47 -11
  64. data/lib/chef/config_fetcher.rb +4 -4
  65. data/lib/chef/constants.rb +1 -1
  66. data/lib/chef/cookbook/cookbook_version_loader.rb +26 -115
  67. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  68. data/lib/chef/cookbook/gem_installer.rb +10 -6
  69. data/lib/chef/cookbook/manifest_v0.rb +68 -0
  70. data/lib/chef/cookbook/manifest_v2.rb +41 -0
  71. data/lib/chef/cookbook/metadata.rb +25 -134
  72. data/lib/chef/cookbook/remote_file_vendor.rb +3 -3
  73. data/lib/chef/cookbook/synchronizer.rb +24 -21
  74. data/lib/chef/cookbook/syntax_check.rb +1 -1
  75. data/lib/chef/cookbook_manifest.rb +91 -65
  76. data/lib/chef/cookbook_site_streaming_uploader.rb +7 -9
  77. data/lib/chef/cookbook_uploader.rb +1 -1
  78. data/lib/chef/cookbook_version.rb +69 -157
  79. data/lib/chef/data_bag.rb +1 -7
  80. data/lib/chef/data_bag_item.rb +5 -10
  81. data/lib/chef/data_collector/messages.rb +2 -0
  82. data/lib/chef/data_collector/resource_report.rb +32 -4
  83. data/lib/chef/data_collector.rb +3 -4
  84. data/lib/chef/decorator/unchain.rb +0 -16
  85. data/lib/chef/decorator.rb +1 -1
  86. data/lib/chef/deprecated.rb +53 -19
  87. data/lib/chef/dsl/audit.rb +2 -2
  88. data/lib/chef/dsl/declare_resource.rb +11 -17
  89. data/lib/chef/dsl/platform_introspection.rb +29 -31
  90. data/lib/chef/dsl/reboot_pending.rb +1 -1
  91. data/lib/chef/dsl/recipe.rb +1 -4
  92. data/lib/chef/dsl/resources.rb +4 -13
  93. data/lib/chef/encrypted_data_bag_item.rb +2 -2
  94. data/lib/chef/environment.rb +9 -16
  95. data/lib/chef/event_dispatch/base.rb +16 -0
  96. data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
  97. data/lib/chef/exceptions.rb +6 -10
  98. data/lib/chef/file_access_control/unix.rb +14 -14
  99. data/lib/chef/file_access_control/windows.rb +1 -1
  100. data/lib/chef/formatters/error_description.rb +18 -1
  101. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
  102. data/lib/chef/formatters/error_mapper.rb +6 -6
  103. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +4 -2
  104. data/lib/chef/http/api_versions.rb +54 -0
  105. data/lib/chef/http/authenticator.rb +15 -6
  106. data/lib/chef/http/json_output.rb +4 -1
  107. data/lib/chef/http/socketless_chef_zero_client.rb +1 -0
  108. data/lib/chef/http/validate_content_length.rb +2 -2
  109. data/lib/chef/http.rb +39 -0
  110. data/lib/chef/json_compat.rb +7 -103
  111. data/lib/chef/key.rb +5 -10
  112. data/lib/chef/knife/bootstrap/templates/chef-full.erb +6 -6
  113. data/lib/chef/knife/bootstrap.rb +6 -0
  114. data/lib/chef/knife/configure.rb +1 -3
  115. data/lib/chef/knife/configure_client.rb +1 -3
  116. data/lib/chef/knife/cookbook_create.rb +1 -434
  117. data/lib/chef/knife/cookbook_download.rb +3 -4
  118. data/lib/chef/knife/cookbook_show.rb +7 -3
  119. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  120. data/lib/chef/knife/core/bootstrap_context.rb +8 -7
  121. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  122. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  123. data/lib/chef/knife/core/status_presenter.rb +1 -1
  124. data/lib/chef/knife/core/subcommand_loader.rb +2 -32
  125. data/lib/chef/knife/core/ui.rb +20 -27
  126. data/lib/chef/knife/data_bag_create.rb +6 -4
  127. data/lib/chef/knife/data_bag_secret_options.rb +1 -1
  128. data/lib/chef/knife/deps.rb +32 -34
  129. data/lib/chef/knife/edit.rb +1 -1
  130. data/lib/chef/knife/help.rb +1 -1
  131. data/lib/chef/knife/list.rb +1 -1
  132. data/lib/chef/knife/search.rb +9 -20
  133. data/lib/chef/knife/ssh.rb +62 -36
  134. data/lib/chef/knife/ssl_check.rb +1 -1
  135. data/lib/chef/knife/user_delete.rb +1 -1
  136. data/lib/chef/knife/xargs.rb +1 -1
  137. data/lib/chef/knife.rb +6 -7
  138. data/lib/chef/mash.rb +1 -1
  139. data/lib/chef/mixin/create_path.rb +3 -5
  140. data/lib/chef/mixin/from_file.rb +2 -2
  141. data/lib/chef/mixin/get_source_from_package.rb +2 -2
  142. data/lib/chef/mixin/notifying_block.rb +7 -9
  143. data/lib/chef/mixin/params_validate.rb +9 -8
  144. data/lib/chef/mixin/path_sanity.rb +17 -19
  145. data/lib/chef/mixin/securable.rb +1 -1
  146. data/lib/chef/mixin/shell_out.rb +33 -29
  147. data/lib/chef/mixin/unformatter.rb +2 -2
  148. data/lib/chef/mixin/uris.rb +4 -6
  149. data/lib/chef/mixin/versioned_api.rb +84 -0
  150. data/lib/chef/mixin/which.rb +25 -8
  151. data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
  152. data/lib/chef/mixin/xml_escape.rb +3 -5
  153. data/lib/chef/mixins.rb +0 -1
  154. data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
  155. data/lib/chef/node/attribute.rb +9 -32
  156. data/lib/chef/node/attribute_collections.rb +1 -19
  157. data/lib/chef/node/common_api.rb +5 -7
  158. data/lib/chef/node/immutable_collections.rb +42 -38
  159. data/lib/chef/node/mixin/immutablize_array.rb +1 -1
  160. data/lib/chef/node/mixin/immutablize_hash.rb +1 -1
  161. data/lib/chef/node.rb +21 -20
  162. data/lib/chef/node_map.rb +2 -5
  163. data/lib/chef/org.rb +10 -17
  164. data/lib/chef/platform/provider_mapping.rb +2 -169
  165. data/lib/chef/platform/query_helpers.rb +1 -1
  166. data/lib/chef/platform/rebooter.rb +1 -2
  167. data/lib/chef/policy_builder/expand_node_object.rb +3 -29
  168. data/lib/chef/policy_builder/policyfile.rb +8 -6
  169. data/lib/chef/property.rb +66 -80
  170. data/lib/chef/provider/apt_repository.rb +6 -10
  171. data/lib/chef/provider/apt_update.rb +1 -7
  172. data/lib/chef/provider/batch.rb +1 -1
  173. data/lib/chef/provider/breakpoint.rb +2 -2
  174. data/lib/chef/provider/cookbook_file.rb +3 -9
  175. data/lib/chef/provider/cron.rb +42 -60
  176. data/lib/chef/provider/deploy/revision.rb +3 -5
  177. data/lib/chef/provider/deploy.rb +82 -88
  178. data/lib/chef/provider/directory.rb +33 -37
  179. data/lib/chef/provider/dsc_resource.rb +23 -11
  180. data/lib/chef/provider/dsc_script.rb +1 -5
  181. data/lib/chef/provider/env/windows.rb +5 -1
  182. data/lib/chef/provider/env.rb +32 -30
  183. data/lib/chef/provider/erl_call.rb +15 -47
  184. data/lib/chef/provider/execute.rb +7 -8
  185. data/lib/chef/provider/file.rb +49 -61
  186. data/lib/chef/provider/git.rb +56 -60
  187. data/lib/chef/provider/group.rb +1 -7
  188. data/lib/chef/provider/http_request.rb +37 -41
  189. data/lib/chef/provider/ifconfig/redhat.rb +1 -1
  190. data/lib/chef/provider/ifconfig.rb +0 -6
  191. data/lib/chef/provider/launchd.rb +6 -2
  192. data/lib/chef/provider/link.rb +51 -55
  193. data/lib/chef/provider/log.rb +3 -7
  194. data/lib/chef/provider/lwrp_base.rb +0 -9
  195. data/lib/chef/provider/mdadm.rb +25 -33
  196. data/lib/chef/provider/mount/aix.rb +2 -2
  197. data/lib/chef/provider/mount/mount.rb +2 -2
  198. data/lib/chef/provider/mount.rb +1 -5
  199. data/lib/chef/provider/noop.rb +1 -1
  200. data/lib/chef/provider/ohai.rb +1 -7
  201. data/lib/chef/provider/osx_profile.rb +24 -29
  202. data/lib/chef/provider/package/aix.rb +55 -53
  203. data/lib/chef/provider/package/apt.rb +15 -13
  204. data/lib/chef/provider/package/cab.rb +48 -20
  205. data/lib/chef/provider/package/chocolatey.rb +9 -10
  206. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  207. data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
  208. data/lib/chef/provider/package/dnf/version.rb +1 -1
  209. data/lib/chef/provider/package/dnf.rb +21 -19
  210. data/lib/chef/provider/package/dpkg.rb +8 -9
  211. data/lib/chef/provider/package/freebsd/base.rb +10 -10
  212. data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
  213. data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
  214. data/lib/chef/provider/package/freebsd/port.rb +7 -7
  215. data/lib/chef/provider/package/homebrew.rb +11 -10
  216. data/lib/chef/provider/package/ips.rb +18 -24
  217. data/lib/chef/provider/package/macports.rb +23 -23
  218. data/lib/chef/provider/package/msu.rb +11 -12
  219. data/lib/chef/provider/package/openbsd.rb +25 -22
  220. data/lib/chef/provider/package/pacman.rb +16 -17
  221. data/lib/chef/provider/package/paludis.rb +26 -27
  222. data/lib/chef/provider/package/portage.rb +22 -23
  223. data/lib/chef/provider/package/powershell.rb +17 -17
  224. data/lib/chef/provider/package/rpm.rb +25 -26
  225. data/lib/chef/provider/package/rubygems.rb +64 -62
  226. data/lib/chef/provider/package/smartos.rb +16 -16
  227. data/lib/chef/provider/package/solaris.rb +44 -45
  228. data/lib/chef/provider/package/windows/exe.rb +6 -6
  229. data/lib/chef/provider/package/windows/msi.rb +7 -7
  230. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -3
  231. data/lib/chef/provider/package/windows.rb +3 -3
  232. data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
  233. data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
  234. data/lib/chef/provider/package/yum.rb +319 -269
  235. data/lib/chef/provider/package/zypper.rb +10 -20
  236. data/lib/chef/provider/package.rb +71 -63
  237. data/lib/chef/provider/powershell_script.rb +15 -7
  238. data/lib/chef/provider/reboot.rb +10 -14
  239. data/lib/chef/provider/registry_key.rb +39 -43
  240. data/lib/chef/provider/remote_directory.rb +3 -15
  241. data/lib/chef/provider/remote_file.rb +3 -9
  242. data/lib/chef/provider/route.rb +1 -7
  243. data/lib/chef/provider/ruby_block.rb +4 -8
  244. data/lib/chef/provider/script.rb +42 -6
  245. data/lib/chef/provider/service/aix.rb +1 -5
  246. data/lib/chef/provider/service/debian.rb +15 -21
  247. data/lib/chef/provider/service/freebsd.rb +0 -1
  248. data/lib/chef/provider/service/gentoo.rb +0 -1
  249. data/lib/chef/provider/service/init.rb +0 -1
  250. data/lib/chef/provider/service/insserv.rb +2 -2
  251. data/lib/chef/provider/service/openbsd.rb +0 -1
  252. data/lib/chef/provider/service/redhat.rb +2 -2
  253. data/lib/chef/provider/service/simple.rb +0 -5
  254. data/lib/chef/provider/service/solaris.rb +5 -4
  255. data/lib/chef/provider/service/systemd.rb +1 -1
  256. data/lib/chef/provider/service/upstart.rb +10 -12
  257. data/lib/chef/provider/service/windows.rb +1 -5
  258. data/lib/chef/provider/service.rb +51 -58
  259. data/lib/chef/provider/subversion.rb +40 -46
  260. data/lib/chef/provider/systemd_unit.rb +2 -0
  261. data/lib/chef/provider/template/content.rb +24 -1
  262. data/lib/chef/provider/template.rb +3 -9
  263. data/lib/chef/provider/user/dscl.rb +3 -3
  264. data/lib/chef/provider/user/linux.rb +6 -5
  265. data/lib/chef/provider/user/pw.rb +4 -10
  266. data/lib/chef/provider/user/solaris.rb +2 -2
  267. data/lib/chef/provider/user/useradd.rb +5 -5
  268. data/lib/chef/provider/user.rb +43 -59
  269. data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
  270. data/lib/chef/provider/windows_task.rb +418 -0
  271. data/lib/chef/provider/yum_repository.rb +3 -6
  272. data/lib/chef/provider.rb +63 -115
  273. data/lib/chef/provider_resolver.rb +8 -34
  274. data/lib/chef/providers.rb +1 -1
  275. data/lib/chef/recipe.rb +9 -1
  276. data/lib/chef/resource/action_class.rb +13 -17
  277. data/lib/chef/resource/apt_repository.rb +0 -1
  278. data/lib/chef/resource/apt_update.rb +3 -1
  279. data/lib/chef/resource/chef_gem.rb +4 -11
  280. data/lib/chef/resource/chocolatey_package.rb +4 -1
  281. data/lib/chef/resource/dnf_package.rb +6 -3
  282. data/lib/chef/resource/dsc_resource.rb +9 -1
  283. data/lib/chef/resource/execute.rb +66 -19
  284. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
  285. data/lib/chef/resource/file/verification.rb +2 -7
  286. data/lib/chef/resource/freebsd_package.rb +1 -1
  287. data/lib/chef/resource/gem_package.rb +16 -2
  288. data/lib/chef/resource/launchd.rb +3 -3
  289. data/lib/chef/resource/lwrp_base.rb +0 -2
  290. data/lib/chef/resource/mount.rb +5 -12
  291. data/lib/chef/resource/package.rb +2 -2
  292. data/lib/chef/resource/powershell_script.rb +1 -1
  293. data/lib/chef/resource/registry_key.rb +1 -1
  294. data/lib/chef/resource/script.rb +8 -34
  295. data/lib/chef/resource/service.rb +15 -13
  296. data/lib/chef/resource/systemd_unit.rb +5 -0
  297. data/lib/chef/resource/user/aix_user.rb +1 -1
  298. data/lib/chef/resource/user/dscl_user.rb +1 -1
  299. data/lib/chef/resource/user/linux_user.rb +1 -10
  300. data/lib/chef/resource/user/pw_user.rb +1 -1
  301. data/lib/chef/resource/user/solaris_user.rb +1 -1
  302. data/lib/chef/resource/user/windows_user.rb +1 -1
  303. data/lib/chef/resource/user.rb +1 -19
  304. data/lib/chef/resource/windows_package.rb +4 -1
  305. data/lib/chef/resource/windows_task.rb +237 -0
  306. data/lib/chef/resource/yum_package.rb +13 -4
  307. data/lib/chef/resource/yum_repository.rb +0 -1
  308. data/lib/chef/resource/zypper_package.rb +2 -0
  309. data/lib/chef/resource.rb +90 -202
  310. data/lib/chef/resource_builder.rb +1 -65
  311. data/lib/chef/resource_collection/resource_collection_serialization.rb +11 -4
  312. data/lib/chef/resource_collection/resource_list.rb +6 -0
  313. data/lib/chef/resource_collection/resource_set.rb +44 -17
  314. data/lib/chef/resource_collection.rb +10 -0
  315. data/lib/chef/resource_reporter.rb +1 -1
  316. data/lib/chef/resource_resolver.rb +1 -25
  317. data/lib/chef/resources.rb +1 -1
  318. data/lib/chef/role.rb +0 -6
  319. data/lib/chef/run_context/cookbook_compiler.rb +49 -5
  320. data/lib/chef/run_context.rb +4 -25
  321. data/lib/chef/run_list/run_list_item.rb +1 -1
  322. data/lib/chef/run_list/versioned_recipe_list.rb +14 -12
  323. data/lib/chef/search/query.rb +26 -31
  324. data/lib/chef/server_api.rb +2 -0
  325. data/lib/chef/{resource/easy_install_package.rb → server_api_versions.rb} +18 -10
  326. data/lib/chef/shell/ext.rb +3 -3
  327. data/lib/chef/shell/shell_session.rb +14 -4
  328. data/lib/chef/shell.rb +32 -7
  329. data/lib/chef/user.rb +9 -16
  330. data/lib/chef/user_v1.rb +9 -16
  331. data/lib/chef/util/diff.rb +1 -1
  332. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
  333. data/lib/chef/util/selinux.rb +1 -1
  334. data/lib/chef/util/windows/net_group.rb +18 -30
  335. data/lib/chef/util/windows/net_use.rb +7 -11
  336. data/lib/chef/util/windows/net_user.rb +12 -18
  337. data/lib/chef/util/windows/volume.rb +9 -15
  338. data/lib/chef/version.rb +1 -1
  339. data/lib/chef/version_class.rb +1 -1
  340. data/lib/chef/win32/api/file.rb +25 -31
  341. data/lib/chef/win32/api/installer.rb +2 -2
  342. data/lib/chef/win32/api.rb +4 -6
  343. data/lib/chef/win32/file.rb +4 -6
  344. data/lib/chef/win32/registry.rb +9 -9
  345. data/lib/chef/win32/security/acl.rb +2 -2
  346. data/lib/chef/win32/security/sid.rb +5 -0
  347. data/lib/chef/win32/security.rb +2 -2
  348. data/lib/chef/win32/unicode.rb +2 -2
  349. data/lib/chef/win32/version.rb +1 -1
  350. data/lib/chef.rb +1 -2
  351. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -0
  352. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  353. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  354. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  355. data/spec/data/lwrp/providers/inline_compiler.rb +0 -2
  356. data/spec/data/lwrp/resources/buck_passer.rb +5 -0
  357. data/spec/data/lwrp/resources/buck_passer_2.rb +3 -0
  358. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -0
  359. data/spec/data/lwrp/resources/inline_compiler.rb +3 -0
  360. data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -0
  361. data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -0
  362. data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -0
  363. data/spec/data/prefer_metadata_json/metadata.json +51 -0
  364. data/spec/data/prefer_metadata_json/metadata.rb +6 -0
  365. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  366. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -0
  367. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -0
  368. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -0
  369. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -0
  370. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -0
  371. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -0
  372. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -0
  373. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -0
  374. data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -0
  375. data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -0
  376. data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -0
  377. data/spec/data/shef-config.rb +11 -10
  378. data/spec/functional/knife/ssh_spec.rb +34 -6
  379. data/spec/functional/rebooter_spec.rb +1 -0
  380. data/spec/functional/resource/bash_spec.rb +11 -45
  381. data/spec/functional/resource/batch_spec.rb +5 -1
  382. data/spec/functional/resource/cron_spec.rb +2 -2
  383. data/spec/functional/resource/dsc_script_spec.rb +2 -4
  384. data/spec/functional/resource/execute_spec.rb +17 -0
  385. data/spec/functional/resource/link_spec.rb +3 -3
  386. data/spec/functional/resource/template_spec.rb +33 -0
  387. data/spec/functional/resource/user/dscl_spec.rb +2 -4
  388. data/spec/functional/root_alias_spec.rb +78 -0
  389. data/spec/functional/shell_spec.rb +38 -40
  390. data/spec/integration/client/client_spec.rb +109 -16
  391. data/spec/integration/client/exit_code_spec.rb +1 -105
  392. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -97
  393. data/spec/integration/knife/cookbook_download_spec.rb +0 -24
  394. data/spec/integration/knife/cookbook_show_spec.rb +12 -23
  395. data/spec/integration/knife/deps_spec.rb +5 -9
  396. data/spec/integration/knife/search_node_spec.rb +39 -0
  397. data/spec/integration/knife/serve_spec.rb +58 -22
  398. data/spec/integration/knife/upload_spec.rb +3 -11
  399. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +7 -11
  400. data/spec/integration/recipes/notifies_spec.rb +60 -0
  401. data/spec/integration/recipes/recipe_dsl_spec.rb +76 -226
  402. data/spec/integration/recipes/resource_action_spec.rb +37 -30
  403. data/spec/spec_helper.rb +7 -0
  404. data/spec/support/chef_helpers.rb +5 -7
  405. data/spec/support/platform_helpers.rb +10 -3
  406. data/spec/support/platforms/prof/gc.rb +4 -6
  407. data/spec/support/shared/context/client.rb +9 -2
  408. data/spec/support/shared/functional/execute_resource.rb +150 -0
  409. data/spec/support/shared/functional/windows_script.rb +74 -4
  410. data/spec/support/shared/integration/knife_support.rb +1 -1
  411. data/spec/support/shared/unit/execute_resource.rb +37 -9
  412. data/spec/support/shared/unit/provider/file.rb +10 -0
  413. data/spec/support/shared/unit/script_resource.rb +1 -9
  414. data/spec/unit/application/exit_code_spec.rb +4 -89
  415. data/spec/unit/application_spec.rb +39 -29
  416. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +1 -1
  417. data/spec/unit/client_spec.rb +72 -31
  418. data/spec/unit/config_fetcher_spec.rb +2 -2
  419. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +31 -19
  420. data/spec/unit/cookbook/file_vendor_spec.rb +20 -9
  421. data/spec/unit/cookbook/gem_installer_spec.rb +85 -0
  422. data/spec/unit/cookbook/manifest_v0_spec.rb +133 -0
  423. data/spec/unit/cookbook/manifest_v2_spec.rb +70 -0
  424. data/spec/unit/cookbook/metadata_spec.rb +29 -108
  425. data/spec/unit/cookbook/synchronizer_spec.rb +5 -6
  426. data/spec/unit/cookbook/syntax_check_spec.rb +9 -2
  427. data/spec/unit/cookbook_loader_spec.rb +17 -19
  428. data/spec/unit/cookbook_manifest_spec.rb +12 -44
  429. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -4
  430. data/spec/unit/cookbook_spec.rb +10 -14
  431. data/spec/unit/cookbook_uploader_spec.rb +1 -1
  432. data/spec/unit/cookbook_version_file_specificity_spec.rb +55 -28
  433. data/spec/unit/cookbook_version_spec.rb +19 -128
  434. data/spec/unit/data_bag_item_spec.rb +4 -0
  435. data/spec/unit/data_collector/messages_spec.rb +137 -0
  436. data/spec/unit/data_collector/resource_report_spec.rb +145 -0
  437. data/spec/unit/deprecation_spec.rb +0 -14
  438. data/spec/unit/encrypted_data_bag_item_spec.rb +6 -6
  439. data/spec/unit/formatters/error_description_spec.rb +52 -7
  440. data/spec/unit/http/api_versions_spec.rb +79 -0
  441. data/spec/unit/http/authenticator_spec.rb +20 -0
  442. data/spec/unit/http/socketless_chef_zero_client_spec.rb +2 -1
  443. data/spec/unit/json_compat_spec.rb +0 -32
  444. data/spec/unit/knife/bootstrap_spec.rb +34 -0
  445. data/spec/unit/knife/configure_client_spec.rb +0 -2
  446. data/spec/unit/knife/cookbook_create_spec.rb +1 -220
  447. data/spec/unit/knife/cookbook_download_spec.rb +46 -28
  448. data/spec/unit/knife/cookbook_show_spec.rb +42 -9
  449. data/spec/unit/knife/core/bootstrap_context_spec.rb +17 -0
  450. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +1 -1
  451. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -6
  452. data/spec/unit/knife/core/ui_spec.rb +21 -11
  453. data/spec/unit/knife/data_bag_create_spec.rb +65 -45
  454. data/spec/unit/knife/ssh_spec.rb +34 -36
  455. data/spec/unit/knife_spec.rb +2 -2
  456. data/spec/unit/lwrp_spec.rb +38 -127
  457. data/spec/unit/mixin/path_sanity_spec.rb +7 -7
  458. data/spec/unit/mixin/shell_out_spec.rb +18 -84
  459. data/spec/unit/mixin/versioned_api_spec.rb +128 -0
  460. data/spec/unit/mixin/which.rb +160 -0
  461. data/spec/unit/node/attribute_spec.rb +65 -33
  462. data/spec/unit/node/immutable_collections_spec.rb +104 -1
  463. data/spec/unit/node_map_spec.rb +1 -23
  464. data/spec/unit/node_spec.rb +81 -98
  465. data/spec/unit/policy_builder/expand_node_object_spec.rb +2 -27
  466. data/spec/unit/policy_builder/policyfile_spec.rb +12 -12
  467. data/spec/unit/property/validation_spec.rb +51 -69
  468. data/spec/unit/property_spec.rb +105 -125
  469. data/spec/unit/provider/apt_repository_spec.rb +33 -27
  470. data/spec/unit/provider/cron_spec.rb +15 -39
  471. data/spec/unit/provider/deploy_spec.rb +1 -1
  472. data/spec/unit/provider/directory_spec.rb +10 -0
  473. data/spec/unit/provider/dsc_resource_spec.rb +175 -0
  474. data/spec/unit/provider/erl_call_spec.rb +5 -13
  475. data/spec/unit/provider/execute_spec.rb +3 -14
  476. data/spec/unit/provider/launchd_spec.rb +2 -2
  477. data/spec/unit/provider/package/aix_spec.rb +22 -22
  478. data/spec/unit/provider/package/apt_spec.rb +37 -27
  479. data/spec/unit/provider/package/cab_spec.rb +59 -5
  480. data/{lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb → spec/unit/provider/package/dnf/python_helper_spec.rb} +10 -15
  481. data/spec/unit/provider/package/dpkg_spec.rb +16 -16
  482. data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
  483. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  484. data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
  485. data/spec/unit/provider/package/homebrew_spec.rb +9 -9
  486. data/spec/unit/provider/package/ips_spec.rb +37 -31
  487. data/spec/unit/provider/package/macports_spec.rb +10 -10
  488. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  489. data/spec/unit/provider/package/pacman_spec.rb +6 -6
  490. data/spec/unit/provider/package/paludis_spec.rb +7 -7
  491. data/spec/unit/provider/package/portage_spec.rb +6 -7
  492. data/spec/unit/provider/package/rpm_spec.rb +23 -23
  493. data/spec/unit/provider/package/rubygems_spec.rb +135 -46
  494. data/spec/unit/provider/package/solaris_spec.rb +15 -15
  495. data/spec/unit/provider/package/windows/msi_spec.rb +1 -1
  496. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +25 -0
  497. data/spec/unit/provider/package/windows_spec.rb +2 -1
  498. data/spec/unit/provider/package/yum_spec.rb +58 -50
  499. data/spec/unit/provider/package/zypper_spec.rb +54 -97
  500. data/spec/unit/provider/package_spec.rb +8 -0
  501. data/spec/unit/provider/powershell_script_spec.rb +14 -4
  502. data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
  503. data/spec/unit/provider/route_spec.rb +7 -1
  504. data/spec/unit/provider/script_spec.rb +49 -6
  505. data/spec/unit/provider/service/debian_service_spec.rb +14 -20
  506. data/spec/unit/provider/service/solaris_smf_service_spec.rb +37 -1
  507. data/spec/unit/provider/service/upstart_service_spec.rb +12 -25
  508. data/spec/unit/provider/subversion_spec.rb +2 -2
  509. data/spec/unit/provider/user/linux_spec.rb +5 -43
  510. data/spec/unit/provider/user/pw_spec.rb +7 -27
  511. data/spec/unit/provider/windows_task_spec.rb +392 -0
  512. data/spec/unit/provider_resolver_spec.rb +0 -1
  513. data/spec/unit/provider_spec.rb +10 -3
  514. data/spec/unit/recipe_spec.rb +3 -172
  515. data/spec/unit/resource/chef_gem_spec.rb +16 -62
  516. data/spec/unit/resource/conditional_spec.rb +4 -4
  517. data/spec/unit/resource/cookbook_file_spec.rb +2 -2
  518. data/spec/unit/resource/cron_spec.rb +1 -1
  519. data/spec/unit/resource/deploy_spec.rb +4 -4
  520. data/spec/unit/resource/directory_spec.rb +2 -2
  521. data/spec/unit/resource/dsc_resource_spec.rb +6 -0
  522. data/spec/unit/resource/env_spec.rb +1 -1
  523. data/spec/unit/resource/execute_spec.rb +215 -1
  524. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
  525. data/spec/unit/resource/file/verification_spec.rb +8 -14
  526. data/spec/unit/resource/file_spec.rb +3 -3
  527. data/spec/unit/resource/freebsd_package_spec.rb +2 -2
  528. data/spec/unit/resource/group_spec.rb +2 -2
  529. data/spec/unit/resource/ifconfig_spec.rb +1 -1
  530. data/spec/unit/resource/link_spec.rb +2 -2
  531. data/spec/unit/resource/mdadm_spec.rb +1 -1
  532. data/spec/unit/resource/mount_spec.rb +3 -3
  533. data/spec/unit/resource/ohai_spec.rb +1 -1
  534. data/spec/unit/resource/package_spec.rb +14 -4
  535. data/spec/unit/resource/registry_key_spec.rb +2 -2
  536. data/spec/unit/resource/remote_directory_spec.rb +2 -2
  537. data/spec/unit/resource/remote_file_spec.rb +2 -2
  538. data/spec/unit/resource/route_spec.rb +1 -1
  539. data/spec/unit/resource/scm_spec.rb +2 -2
  540. data/spec/unit/resource/script_spec.rb +1 -1
  541. data/spec/unit/resource/service_spec.rb +25 -5
  542. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  543. data/spec/unit/resource/template_spec.rb +2 -2
  544. data/spec/unit/resource/user_spec.rb +6 -6
  545. data/spec/unit/resource/windows_task_spec.rb +213 -0
  546. data/spec/unit/resource/yum_package_spec.rb +42 -1
  547. data/spec/unit/resource_collection/resource_set_spec.rb +46 -1
  548. data/spec/unit/resource_collection_spec.rb +4 -3
  549. data/spec/unit/resource_reporter_spec.rb +6 -6
  550. data/spec/unit/resource_spec.rb +55 -71
  551. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -3
  552. data/spec/unit/run_list/versioned_recipe_list_spec.rb +7 -4
  553. data/spec/unit/runner_spec.rb +10 -28
  554. data/spec/unit/search/query_spec.rb +32 -34
  555. data/spec/unit/server_api_versions_spec.rb +44 -0
  556. data/spec/unit/shell/shell_session_spec.rb +33 -2
  557. data/spec/unit/util/selinux_spec.rb +3 -14
  558. data/spec/unit/win32/error_spec.rb +67 -0
  559. data/spec/unit/win32/security_spec.rb +66 -0
  560. data/tasks/bundle.rb +36 -52
  561. data/tasks/changelog.rb +1 -1
  562. data/tasks/dependencies.rb +54 -52
  563. data/tasks/version.rb +41 -0
  564. metadata +91 -76
  565. data/lib/chef/deprecation/mixin/template.rb +0 -48
  566. data/lib/chef/deprecation/provider/cookbook_file.rb +0 -54
  567. data/lib/chef/deprecation/provider/file.rb +0 -198
  568. data/lib/chef/deprecation/provider/remote_directory.rb +0 -52
  569. data/lib/chef/deprecation/provider/remote_file.rb +0 -85
  570. data/lib/chef/deprecation/provider/template.rb +0 -63
  571. data/lib/chef/dsl/method_missing.rb +0 -75
  572. data/lib/chef/knife/cookbook_site_vendor.rb +0 -46
  573. data/lib/chef/knife/core/custom_manifest_loader.rb +0 -69
  574. data/lib/chef/mixin/command/unix.rb +0 -220
  575. data/lib/chef/mixin/command/windows.rb +0 -71
  576. data/lib/chef/mixin/command.rb +0 -194
  577. data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
  578. data/lib/chef/provider/package/easy_install.rb +0 -135
  579. data/lib/chef/rest.rb +0 -210
  580. data/lib/chef/shell_out.rb +0 -13
  581. data/lib/chef/tasks/chef_repo.rake +0 -200
  582. data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +0 -5
  583. data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +0 -20
  584. data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +0 -5
  585. data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +0 -5
  586. data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +0 -20
  587. data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +0 -20
  588. data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +0 -20
  589. data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +0 -20
  590. data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +0 -20
  591. data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +0 -20
  592. data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +0 -20
  593. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +0 -5
  594. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +0 -5
  595. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +0 -6
  596. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +0 -5
  597. data/spec/functional/rest_spec.rb +0 -95
  598. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +0 -41
  599. data/spec/unit/lib_backcompat_spec.rb +0 -34
  600. data/spec/unit/mixin/command_spec.rb +0 -107
  601. data/spec/unit/platform_spec.rb +0 -242
  602. data/spec/unit/provider/package/easy_install_spec.rb +0 -114
  603. data/spec/unit/resource/easy_install_package_spec.rb +0 -39
  604. data/spec/unit/rest/auth_credentials_spec.rb +0 -292
  605. data/spec/unit/rest_spec.rb +0 -753
  606. data/spec/unit/shell_out_spec.rb +0 -18
  607. data/tasks/bin/bundle-platform +0 -20
  608. data/tasks/bin/bundle-platform.bat +0 -2
  609. data/tasks/bin/bundler_patch.rb +0 -27
  610. data/tasks/bin/gem-version-diff +0 -37
  611. data/tasks/bundle_util.rb +0 -110
@@ -71,12 +71,8 @@ describe Chef::Provider::Service::Upstart do
71
71
  @current_resource = Chef::Resource::Service.new("rsyslog")
72
72
  allow(Chef::Resource::Service).to receive(:new).and_return(@current_resource)
73
73
 
74
- @status = double("Status", :exitstatus => 0)
75
- allow(@provider).to receive(:popen4).and_return(@status)
76
- @stdin = StringIO.new
77
- @stdout = StringIO.new
78
- @stderr = StringIO.new
79
- @pid = double("PID")
74
+ @status = double("Status", exitstatus: 0, stdout: "", stderr: "")
75
+ allow(@provider).to receive(:shell_out).and_return(@status)
80
76
 
81
77
  allow(::File).to receive(:exists?).and_return(true)
82
78
  allow(::File).to receive(:open).and_return(true)
@@ -100,28 +96,25 @@ describe Chef::Provider::Service::Upstart do
100
96
  end
101
97
 
102
98
  it "should run '/sbin/status rsyslog'" do
103
- expect(@provider).to receive(:popen4).with("/sbin/status rsyslog").and_return(@status)
99
+ expect(@provider).to receive(:shell_out).with("/sbin/status rsyslog").and_return(@status)
104
100
  @provider.load_current_resource
105
101
  end
106
102
 
107
103
  describe "when the status command uses the new format" do
108
104
  it "should set running to true if the goal state is 'start'" do
109
- @stdout = StringIO.new("rsyslog start/running")
110
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
105
+ expect(@status).to receive(:stdout).and_return("rsyslog start/running")
111
106
  @provider.load_current_resource
112
107
  expect(@current_resource.running).to be_truthy
113
108
  end
114
109
 
115
110
  it "should set running to true if the goal state is 'start' but current state is not 'running'" do
116
- @stdout = StringIO.new("rsyslog start/starting")
117
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
111
+ expect(@status).to receive(:stdout).and_return("rsyslog start/starting")
118
112
  @provider.load_current_resource
119
113
  expect(@current_resource.running).to be_truthy
120
114
  end
121
115
 
122
116
  it "should set running to false if the goal state is 'stop'" do
123
- @stdout = StringIO.new("rsyslog stop/waiting")
124
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
117
+ expect(@status).to receive(:stdout).and_return("rsyslog stop/waiting")
125
118
  @provider.load_current_resource
126
119
  expect(@current_resource.running).to be_falsey
127
120
  end
@@ -129,22 +122,19 @@ describe Chef::Provider::Service::Upstart do
129
122
 
130
123
  describe "when the status command uses the new format with an instance" do
131
124
  it "should set running to true if the goal state is 'start'" do
132
- @stdout = StringIO.new("rsyslog (test) start/running, process 100")
133
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
125
+ expect(@status).to receive(:stdout).and_return("rsyslog (test) start/running, process 100")
134
126
  @provider.load_current_resource
135
127
  expect(@current_resource.running).to be_truthy
136
128
  end
137
129
 
138
130
  it "should set running to true if the goal state is 'start' but current state is not 'running'" do
139
- @stdout = StringIO.new("rsyslog (test) start/starting, process 100")
140
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
131
+ expect(@status).to receive(:stdout).and_return("rsyslog (test) start/starting, process 100")
141
132
  @provider.load_current_resource
142
133
  expect(@current_resource.running).to be_truthy
143
134
  end
144
135
 
145
136
  it "should set running to false if the goal state is 'stop'" do
146
- @stdout = StringIO.new("rsyslog (test) stop/waiting, process 100")
147
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
137
+ expect(@status).to receive(:stdout).and_return("rsyslog (test) stop/waiting, process 100")
148
138
  @provider.load_current_resource
149
139
  expect(@current_resource.running).to be_falsey
150
140
  end
@@ -152,22 +142,19 @@ describe Chef::Provider::Service::Upstart do
152
142
 
153
143
  describe "when the status command uses the old format" do
154
144
  it "should set running to true if the goal state is 'start'" do
155
- @stdout = StringIO.new("rsyslog (start) running, process 32225")
156
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
145
+ expect(@status).to receive(:stdout).and_return("rsyslog (start) running, process 32225")
157
146
  @provider.load_current_resource
158
147
  expect(@current_resource.running).to be_truthy
159
148
  end
160
149
 
161
150
  it "should set running to true if the goal state is 'start' but current state is not 'running'" do
162
- @stdout = StringIO.new("rsyslog (start) starting, process 32225")
163
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
151
+ expect(@status).to receive(:stdout).and_return("rsyslog (start) starting, process 32225")
164
152
  @provider.load_current_resource
165
153
  expect(@current_resource.running).to be_truthy
166
154
  end
167
155
 
168
156
  it "should set running to false if the goal state is 'stop'" do
169
- @stdout = StringIO.new("rsyslog (stop) waiting")
170
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
157
+ expect(@status).to receive(:stdout).and_return("rsyslog (stop) waiting")
171
158
  @provider.load_current_resource
172
159
  expect(@current_resource.running).to be_falsey
173
160
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Daniel DeLeo (<dan@kallistec.com>)
3
- # Copyright:: Copyright 2008-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -43,7 +43,7 @@ describe Chef::Provider::Subversion do
43
43
  ENV.update(@original_env)
44
44
  end
45
45
 
46
- it "converts resource attributes to options for run_command and popen4" do
46
+ it "converts resource attributes to options for shell_out" do
47
47
  expect(@provider.run_options).to eq({})
48
48
  @resource.user "deployninja"
49
49
  expect(@provider.run_options).to eq({ :user => "deployninja" })
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
3
  # Author:: Daniel DeLeo (<dan@chef.io>)
4
- # Copyright:: Copyright 2008-2016, Chef Software Inc.
4
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
5
5
  #
6
6
  # License:: Apache License, Version 2.0
7
7
  #
@@ -45,56 +45,18 @@ describe Chef::Provider::User::Linux do
45
45
  @current_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context)
46
46
  end
47
47
 
48
- it "supports manage_home does not exist", chef: ">= 13" do
49
- expect( @new_resource.supports.key?(:manage_home) ).to be false
48
+ it "throws an error when trying to set supports manage_home: true" do
49
+ expect { @new_resource.supports( manage_home: true ) }.to raise_error(NoMethodError)
50
50
  end
51
51
 
52
- it "supports non_unique does not exist", chef: ">= 13" do
53
- expect( @new_resource.supports.key?(:non_unique) ).to be false
54
- end
55
-
56
- # supports is a method on the superclass so can't totally be removed, but we should aggressively NOP it to decisively break it
57
- it "disables the supports API", chef: ">= 13" do
58
- @new_resource.supports( manage_home: true )
59
- expect( @new_resource.supports.key?(:manage_home) ).to be false
60
- end
61
-
62
- it "sets supports manage_home to false" do
63
- expect( @new_resource.supports[:manage_home] ).to be false
64
- end
65
-
66
- it "sets supports non-unique to false" do
67
- expect( @new_resource.supports[:non_unique] ).to be false
68
- end
69
-
70
- it "throws a deprecation warning on setting supports[:non_unique]" do
71
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
72
- expect(Chef).to receive(:deprecated).with(:supports_property, "supports { non_unique: true } on the user resource is deprecated and will be removed in Chef 13, set non_unique true instead")
73
- @new_resource.supports( non_unique: true )
74
- end
75
-
76
- it "throws a deprecation warning on setting supports[:manage_home]" do
77
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
78
- expect(Chef).to receive(:deprecated).with(:supports_property, "supports { manage_home: true } on the user resource is deprecated and will be removed in Chef 13, set manage_home true instead")
79
- @new_resource.supports( manage_home: true )
52
+ it "throws an error when trying to set supports non_unique: true" do
53
+ expect { @new_resource.supports( non_unique: true ) }.to raise_error(NoMethodError)
80
54
  end
81
55
 
82
56
  it "defaults manage_home to false" do
83
57
  expect( @new_resource.manage_home ).to be false
84
58
  end
85
59
 
86
- it "supports[:manage_home] (incorectly) acts like manage_home" do
87
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
88
- @new_resource.supports(manage_home: true)
89
- expect( provider.useradd_options ).to eql(["-m"])
90
- end
91
-
92
- it "supports[:manage_home] does not change behavior of manage_home: false", chef: ">= 13" do
93
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
94
- @new_resource.supports(manage_home: true)
95
- expect( provider.useradd_options ).to eql(["-M"])
96
- end
97
-
98
60
  it "by default manage_home is false and we use -M" do
99
61
  expect( provider.useradd_options ).to eql(["-M"])
100
62
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Stephen Haynes (<sh@nomitor.com>)
3
- # Copyright:: Copyright 2008-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -32,9 +32,7 @@ describe Chef::Provider::User::Pw do
32
32
  @new_resource.shell "/usr/bin/zsh"
33
33
  @new_resource.password "abracadabra"
34
34
 
35
- # XXX: rip out in Chef-13
36
- Chef::Config[:treat_deprecation_warnings_as_errors] = false
37
- @new_resource.supports manage_home: true
35
+ @new_resource.manage_home true
38
36
 
39
37
  @current_resource = Chef::Resource::User::PwUser.new("adam")
40
38
  @current_resource.comment "Adam Jacob"
@@ -67,12 +65,6 @@ describe Chef::Provider::User::Pw do
67
65
  allow(@new_resource).to receive(attribute).and_return("hola")
68
66
  expect(@provider.set_options).to eql([ @new_resource.username, option, @new_resource.send(attribute), "-m"])
69
67
  end
70
-
71
- it "should set the option for #{attribute} if the new resources #{attribute} is not null, without homedir management" do
72
- allow(@new_resource).to receive(:supports).and_return(manage_home: false)
73
- allow(@new_resource).to receive(attribute).and_return("hola")
74
- expect(@provider.set_options).to eql([@new_resource.username, option, @new_resource.send(attribute)])
75
- end
76
68
  end
77
69
 
78
70
  it "should combine all the possible options" do
@@ -123,7 +115,7 @@ describe Chef::Provider::User::Pw do
123
115
 
124
116
  describe "remove_user" do
125
117
  it "should run pw userdel with the new resources user name" do
126
- @new_resource.supports manage_home: false
118
+ @new_resource.manage_home false
127
119
  expect(@provider).to receive(:shell_out!).with("pw", "userdel", @new_resource.username).and_return(true)
128
120
  @provider.remove_user
129
121
  end
@@ -163,11 +155,7 @@ describe Chef::Provider::User::Pw do
163
155
  describe "when modifying the password" do
164
156
  before(:each) do
165
157
  @status = double("Status", exitstatus: 0)
166
- allow(@provider).to receive(:popen4).and_return(@status)
167
- @pid = nil
168
- @stdin = nil
169
- @stdout = nil
170
- @stderr = nil
158
+ allow(@provider).to receive(:shell_out!).and_return(@status)
171
159
  end
172
160
 
173
161
  describe "and the new password has not been specified" do
@@ -214,24 +202,16 @@ describe Chef::Provider::User::Pw do
214
202
  end
215
203
 
216
204
  it "should run pw usermod with the username and the option -H 0" do
217
- expect(@provider).to receive(:popen4).with("pw usermod adam -H 0", waitlast: true).and_return(@status)
218
- @provider.modify_password
219
- end
220
-
221
- it "should send the new password to the stdin of pw usermod" do
222
- @stdin = StringIO.new
223
- allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
205
+ expect(@provider).to receive(:shell_out!).with("pw usermod adam -H 0", { :input => "abracadabra" }).and_return(@status)
224
206
  @provider.modify_password
225
- expect(@stdin.string).to eq("abracadabra\n")
226
207
  end
227
208
 
228
209
  it "should raise an exception if pw usermod fails" do
229
- expect(@status).to receive(:exitstatus).and_return(1)
230
- expect { @provider.modify_password }.to raise_error(Chef::Exceptions::User)
210
+ expect(@provider).to receive(:shell_out!).and_raise(Mixlib::ShellOut::ShellCommandFailed)
211
+ expect { @provider.modify_password }.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
231
212
  end
232
213
 
233
214
  it "should not raise an exception if pw usermod succeeds" do
234
- expect(@status).to receive(:exitstatus).and_return(0)
235
215
  expect { @provider.modify_password }.not_to raise_error
236
216
  end
237
217
  end
@@ -0,0 +1,392 @@
1
+ #
2
+ # Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>)
3
+ # Copyright:: Copyright 2008-2016, Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require "spec_helper"
20
+
21
+ describe Chef::Provider::WindowsTask do
22
+ let(:new_resource) { Chef::Resource::WindowsTask.new("sample_task") }
23
+
24
+ let(:provider) do
25
+ node = Chef::Node.new
26
+ events = Chef::EventDispatch::Dispatcher.new
27
+ run_context = Chef::RunContext.new(node, {}, events)
28
+ Chef::Provider::WindowsTask.new(new_resource, run_context)
29
+ end
30
+
31
+ let(:task_hash) do
32
+ {
33
+ :"" => "",
34
+ :Folder => "\\",
35
+ :HostName => "NIMISHA-PC",
36
+ :TaskName => "\\sample_task",
37
+ :NextRunTime => "3/30/2017 2:42:00 PM",
38
+ :Status => "Ready",
39
+ :LogonMode => "Interactive/Background",
40
+ :LastRunTime => "3/30/2017 2:27:00 PM",
41
+ :LastResult => "1",
42
+ :Author => "Administrator",
43
+ :TaskToRun => "chef-client",
44
+ :StartIn => "N/A",
45
+ :Comment => "N/A",
46
+ :ScheduledTaskState => "Enabled",
47
+ :IdleTime => "Disabled",
48
+ :PowerManagement => "Stop On Battery Mode, No Start On Batteries",
49
+ :RunAsUser => "SYSTEM",
50
+ :DeleteTaskIfNotRescheduled => "Enabled",
51
+ :StopTaskIfRunsXHoursandXMins => "72:00:00",
52
+ :Schedule => "Scheduling data is not available in this format.",
53
+ :ScheduleType => "One Time Only, Minute",
54
+ :StartTime => "1:12:00 PM",
55
+ :StartDate => "3/30/2017",
56
+ :EndDate => "N/A",
57
+ :Days => "N/A",
58
+ :Months => "N/A",
59
+ :"Repeat:Every" => "0 Hour(s), 15 Minute(s)",
60
+ :"Repeat:Until:Time" => "None",
61
+ :"Repeat:Until:Duration" => "Disabled",
62
+ :"Repeat:StopIfStillRunning" => "Disabled",
63
+ :run_level => "HighestAvailable",
64
+ :repetition_interval => "PT15M",
65
+ :execution_time_limit => "PT72H",
66
+ }
67
+ end
68
+
69
+ let(:task_xml) do
70
+ "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\r\r\n<Task version=\"1.2\" xmlns=\"http://schemas.microsoft.com/windows/2004/02/mit/task\">\r\r\n <RegistrationInfo>\r\r\n <Date>2017-03-31T15:34:44</Date>\r\r\n <Author>Administrator</Author>\r\r\n </RegistrationInfo>\r\r\n<Triggers>\r\r\n <TimeTrigger>\r\r\n <Repetition>\r\r\n <Interval>PT15M</Interval>\r\r\n <StopAtDurationEnd>false</StopAtDurationEnd>\r\r\n </Repetition>\r\r\n <StartBoundary>2017-03-31T15:34:00</StartBoundary>\r\r\n <Enabled>true</Enabled>\r\r\n </TimeTrigger>\r\r\n </Triggers>\r\r\n <Principals>\r\r\n <Principal id=\"Author\">\r\r\n <RunLevel>HighestAvailable</RunLevel>\r\r\n <UserId>S-1-5-18</UserId>\r\r\n </Principal>\r\r\n </Principals>\r\r\n <Settings>\r\r\n <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>\r\r\n <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>\r\r\n <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>\r\r\n <AllowHardTerminate>true</AllowHardTerminate>\r\r\n <StartWhenAvailable>false</StartWhenAvailable>\r\r\n <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>\r\r\n <IdleSettings>\r\r\n <Duration>PT10M</Duration>\r\r\n<WaitTimeout>PT1H</WaitTimeout>\r\r\n <StopOnIdleEnd>true</StopOnIdleEnd>\r\r\n <RestartOnIdle>false</RestartOnIdle>\r\r\n </IdleSettings>\r\r\n <AllowStartOnDemand>true</AllowStartOnDemand>\r\r\n <Enabled>true</Enabled>\r\r\n <Hidden>false</Hidden>\r\r\n<RunOnlyIfIdle>false</RunOnlyIfIdle>\r\r\n <WakeToRun>false</WakeToRun>\r\r\n <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>\r\r\n<Priority>7</Priority>\r\r\n </Settings>\r\r\n <Actions Context=\"Author\">\r\r\n <Exec>\r\r\n <Command>chef-client</Command>\r\r\n </Exec>\r\r\n </Actions>\r\r\n</Task>"
71
+ end
72
+
73
+ describe "#load_current_resource" do
74
+ it "returns a current_resource" do
75
+ allow(provider).to receive(:load_task_hash)
76
+ expect(provider.load_current_resource).to be_kind_of(Chef::Resource::WindowsTask)
77
+ end
78
+
79
+ context "if the given task name already exists" do
80
+ before do
81
+ allow(provider).to receive(:load_task_hash).and_return({ :TaskName => "\\sample_task" })
82
+ end
83
+
84
+ it "calls set_current_resource" do
85
+ expect(provider).to receive(:set_current_resource)
86
+ provider.load_current_resource
87
+ end
88
+ end
89
+
90
+ it "sets the attributes of current_resource" do
91
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
92
+ current_resource = provider.load_current_resource
93
+ expect(current_resource.exists).to be(true)
94
+ expect(current_resource.command).to eq("chef-client")
95
+ expect(current_resource.user).to eq("SYSTEM")
96
+ expect(current_resource.run_level).to eq(:highest)
97
+ expect(current_resource.frequency).to eq(:minute)
98
+ expect(current_resource.frequency_modifier).to eq(15)
99
+ expect(current_resource.execution_time_limit).to eq("PT72H")
100
+ expect(current_resource.enabled).to be(true)
101
+ end
102
+ end
103
+
104
+ describe "#action_create" do
105
+ it "doesn't create the same task if it's already existing" do
106
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
107
+ provider.load_current_resource
108
+ allow(provider).to receive(:task_need_update?).and_return(false)
109
+ provider.run_action(:create)
110
+ expect(new_resource).not_to be_updated_by_last_action
111
+ end
112
+
113
+ context "when task is not existing" do
114
+ before do
115
+ allow(provider).to receive(:load_task_hash)
116
+ provider.load_current_resource
117
+ end
118
+
119
+ it "creates the task if it's not already existing" do
120
+ allow(provider).to receive(:task_need_update?).and_return(true)
121
+ expect(provider).to receive(:run_schtasks).with("CREATE", { "F" => "", "SC" => :hourly, "MO" => 1, "TR" => nil, "RU" => "SYSTEM" })
122
+ provider.run_action(:create)
123
+ expect(new_resource).to be_updated_by_last_action
124
+ end
125
+
126
+ it "updates the task XML if random_delay is provided" do
127
+ new_resource.random_delay "20"
128
+ allow(provider).to receive(:task_need_update?).and_return(true)
129
+ expect(provider).to receive(:run_schtasks).with("CREATE", { "F" => "", "SC" => :hourly, "MO" => 1, "TR" => nil, "RU" => "SYSTEM" })
130
+ expect(provider).to receive(:update_task_xml)
131
+ provider.run_action(:create)
132
+ expect(new_resource).to be_updated_by_last_action
133
+ end
134
+
135
+ it "updates the task XML if execution_time_limit is provided" do
136
+ new_resource.execution_time_limit "20"
137
+ allow(provider).to receive(:task_need_update?).and_return(true)
138
+ expect(provider).to receive(:run_schtasks).with("CREATE", { "F" => "", "SC" => :hourly, "MO" => 1, "TR" => nil, "RU" => "SYSTEM" })
139
+ expect(provider).to receive(:update_task_xml)
140
+ provider.run_action(:create)
141
+ expect(new_resource).to be_updated_by_last_action
142
+ end
143
+ end
144
+ end
145
+
146
+ describe "#action_run" do
147
+ it "does nothing if the task doesn't exist" do
148
+ allow(provider).to receive(:load_task_hash)
149
+ provider.load_current_resource
150
+ provider.run_action(:run)
151
+ expect(new_resource).not_to be_updated_by_last_action
152
+ end
153
+
154
+ context "when the task exists" do
155
+ it "does nothing if the task is already running" do
156
+ task_hash[:Status] = "Running"
157
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
158
+ provider.load_current_resource
159
+ provider.run_action(:run)
160
+ expect(new_resource).not_to be_updated_by_last_action
161
+ end
162
+
163
+ it "runs the task" do
164
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
165
+ provider.load_current_resource
166
+ expect(provider).to receive(:run_schtasks).with("RUN")
167
+ provider.run_action(:run)
168
+ expect(new_resource).to be_updated_by_last_action
169
+ end
170
+ end
171
+ end
172
+
173
+ describe "#action_delete" do
174
+ it "deletes the task if it exists" do
175
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
176
+ provider.load_current_resource
177
+ expect(provider).to receive(:run_schtasks).with("DELETE", { "F" => "" })
178
+ provider.run_action(:delete)
179
+ expect(new_resource).to be_updated_by_last_action
180
+ end
181
+
182
+ it "does nothing if the task doesn't exist" do
183
+ allow(provider).to receive(:load_task_hash)
184
+ provider.load_current_resource
185
+ provider.run_action(:delete)
186
+ expect(new_resource).not_to be_updated_by_last_action
187
+ end
188
+ end
189
+
190
+ describe "#action_end" do
191
+ it "does nothing if the task doesn't exist" do
192
+ allow(provider).to receive(:load_task_hash)
193
+ provider.load_current_resource
194
+ provider.run_action(:end)
195
+ expect(new_resource).not_to be_updated_by_last_action
196
+ end
197
+
198
+ context "when the task exists" do
199
+ it "does nothing if the task is not running" do
200
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
201
+ provider.load_current_resource
202
+ provider.run_action(:end)
203
+ expect(new_resource).not_to be_updated_by_last_action
204
+ end
205
+
206
+ it "ends the task if it's running" do
207
+ task_hash[:Status] = "Running"
208
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
209
+ provider.load_current_resource
210
+ expect(provider).to receive(:run_schtasks).with("END")
211
+ provider.run_action(:end)
212
+ expect(new_resource).to be_updated_by_last_action
213
+ end
214
+ end
215
+ end
216
+
217
+ describe "#action_enable" do
218
+ it "raises error if the task doesn't exist" do
219
+ allow(provider).to receive(:load_task_hash)
220
+ provider.load_current_resource
221
+ expect { provider.run_action(:enable) }.to raise_error(Errno::ENOENT)
222
+ end
223
+
224
+ context "when the task exists" do
225
+ it "does nothing if the task is already enabled" do
226
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
227
+ provider.load_current_resource
228
+ provider.run_action(:enable)
229
+ expect(new_resource).not_to be_updated_by_last_action
230
+ end
231
+
232
+ it "enables the task if it exists" do
233
+ task_hash[:ScheduledTaskState] = "Disabled"
234
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
235
+ provider.load_current_resource
236
+ expect(provider).to receive(:run_schtasks).with("CHANGE", { "ENABLE" => "" })
237
+ provider.run_action(:enable)
238
+ expect(new_resource).to be_updated_by_last_action
239
+ end
240
+ end
241
+ end
242
+
243
+ describe "#action_disable" do
244
+ it "does nothing if the task doesn't exist" do
245
+ allow(provider).to receive(:load_task_hash)
246
+ provider.load_current_resource
247
+ provider.run_action(:disable)
248
+ expect(new_resource).not_to be_updated_by_last_action
249
+ end
250
+
251
+ context "when the task exists" do
252
+ it "disables the task if it's enabled" do
253
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
254
+ provider.load_current_resource
255
+ expect(provider).to receive(:run_schtasks).with("CHANGE", { "DISABLE" => "" })
256
+ provider.run_action(:disable)
257
+ expect(new_resource).to be_updated_by_last_action
258
+ end
259
+
260
+ it "does nothing if the task is already disabled" do
261
+ task_hash[:ScheduledTaskState] = "Disabled"
262
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
263
+ provider.load_current_resource
264
+ provider.run_action(:disable)
265
+ expect(new_resource).not_to be_updated_by_last_action
266
+ end
267
+ end
268
+ end
269
+
270
+ describe "#run_schtasks" do
271
+ before do
272
+ @task_action = "CREATE"
273
+ @options = { "F" => "", "SC" => :minute, "MO" => 15, "TR" => "chef-client", "RU" => "SYSTEM", "RL" => "HIGHEST" }
274
+ @cmd = "schtasks /CREATE /TN \"sample_task\" /F /SC \"minute\" /MO \"15\" /TR \"chef-client\" /RU \"SYSTEM\" /RL \"HIGHEST\" "
275
+ end
276
+
277
+ it "forms the command properly from the given options" do
278
+ expect(provider).to receive(:shell_out!).with(@cmd, { :returns => [0] })
279
+ provider.send(:run_schtasks, @task_action, @options)
280
+ end
281
+ end
282
+
283
+ describe "#task_need_update?" do
284
+ context "when task doesn't exist" do
285
+ before do
286
+ allow(provider).to receive(:load_task_hash)
287
+ provider.load_current_resource
288
+ end
289
+
290
+ it "returns true" do
291
+ new_resource.command "chef-client"
292
+ expect(provider.send(:task_need_update?)).to be(true)
293
+ end
294
+ end
295
+
296
+ context "when the task exists" do
297
+ before do
298
+ allow(provider).to receive(:load_task_hash).and_return(task_hash)
299
+ provider.load_current_resource
300
+
301
+ new_resource.command "chef-client"
302
+ new_resource.run_level :highest
303
+ new_resource.frequency :minute
304
+ new_resource.frequency_modifier 15
305
+ new_resource.user "SYSTEM"
306
+ new_resource.execution_time_limit "PT72H"
307
+ end
308
+
309
+ context "when no attributes are modified" do
310
+ it "returns false" do
311
+ expect(provider.send(:task_need_update?)).to be(false)
312
+ end
313
+ end
314
+
315
+ context "when frequency_modifier is updated" do
316
+ it "returns true" do
317
+ new_resource.frequency_modifier 25
318
+ expect(provider.send(:task_need_update?)).to be(true)
319
+ end
320
+ end
321
+
322
+ context "when months are updated" do
323
+ it "returns true" do
324
+ new_resource.months "JAN"
325
+ expect(provider.send(:task_need_update?)).to be(true)
326
+ end
327
+ end
328
+ end
329
+ end
330
+
331
+ describe "#update_task_xml" do
332
+ before do
333
+ new_resource.command "chef-client"
334
+ new_resource.run_level :highest
335
+ new_resource.frequency :minute
336
+ new_resource.frequency_modifier 15
337
+ new_resource.user "SYSTEM"
338
+ new_resource.random_delay "20"
339
+ end
340
+
341
+ it "does nothing if the task doesn't exist" do
342
+ task_xml = double("xml", :exitstatus => 1)
343
+ allow(provider).to receive(:powershell_out).and_return(task_xml)
344
+ output = provider.send(:update_task_xml, ["random_delay"])
345
+ expect(output).to be(nil)
346
+ end
347
+
348
+ it "updates the task XML if random_delay is passed" do
349
+ shell_out_obj = double("xml", :exitstatus => 0, :stdout => task_xml)
350
+ allow(provider).to receive(:powershell_out).and_return(shell_out_obj)
351
+ expect(::File).to receive(:join)
352
+ expect(::File).to receive(:open)
353
+ expect(::File).to receive(:delete)
354
+ expect(provider).to receive(:run_schtasks).twice
355
+ output = provider.send(:update_task_xml, ["random_delay"])
356
+ end
357
+ end
358
+
359
+ describe "#load_task_hash" do
360
+ it "returns false if the task doesn't exist" do
361
+ allow(provider).to receive_message_chain(:powershell_out, :stdout, :force_encoding).and_return("")
362
+ allow(provider).to receive(:load_task_xml)
363
+ expect(provider.send(:load_task_hash, "chef-client")).to be(false)
364
+ end
365
+
366
+ it "returns task hash if the task exists" do
367
+ powershell_output = "\r\nFolder: \\\r\nHostName: NIMISHA-PC\r\nTaskName: \\chef-client\r\n"
368
+ task_h = { :"" => "", :Folder => "\\", :HostName => "NIMISHA-PC", :TaskName => "\\chef-client" }
369
+ allow(provider).to receive_message_chain(:powershell_out, :stdout, :force_encoding).and_return(powershell_output)
370
+ allow(provider).to receive(:load_task_xml).with("chef-client")
371
+ expect(provider.send(:load_task_hash, "chef-client")).to eq(task_h)
372
+ end
373
+ end
374
+
375
+ describe "#frequency_modifier_allowed" do
376
+ it "returns true for frequency :hourly" do
377
+ new_resource.frequency :hourly
378
+ expect(provider.send(:frequency_modifier_allowed)).to be(true)
379
+ end
380
+
381
+ it "returns true for frequency :monthly if frequency_modifier is THIRD" do
382
+ new_resource.frequency :monthly
383
+ new_resource.frequency_modifier "THIRD"
384
+ expect(provider.send(:frequency_modifier_allowed)).to be(true)
385
+ end
386
+
387
+ it "returns false for frequency :once" do
388
+ new_resource.frequency :once
389
+ expect(provider.send(:frequency_modifier_allowed)).to be(false)
390
+ end
391
+ end
392
+ end
@@ -561,7 +561,6 @@ describe Chef::ProviderResolver do
561
561
  deploy: [ Chef::Resource::Deploy, Chef::Provider::Deploy::Timestamped ],
562
562
  deploy_revision: [ Chef::Resource::DeployRevision, Chef::Provider::Deploy::Revision ],
563
563
  directory: [ Chef::Resource::Directory, Chef::Provider::Directory ],
564
- easy_install_package: [ Chef::Resource::EasyInstallPackage, Chef::Provider::Package::EasyInstall ],
565
564
  erl_call: [ Chef::Resource::ErlCall, Chef::Provider::ErlCall ],
566
565
  execute: [ Chef::Resource::Execute, Chef::Provider::Execute ],
567
566
  file: [ Chef::Resource::File, Chef::Provider::File ],