chef 15.11.3-universal-mingw32 → 16.1.16-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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -7
  3. data/README.md +1 -1
  4. data/Rakefile +44 -16
  5. data/chef.gemspec +6 -4
  6. data/distro/powershell/chef/chef.psm1 +3 -3
  7. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  8. data/lib/chef/action_collection.rb +16 -5
  9. data/lib/chef/application.rb +33 -54
  10. data/lib/chef/application/apply.rb +18 -1
  11. data/lib/chef/application/base.rb +8 -3
  12. data/lib/chef/application/knife.rb +1 -1
  13. data/lib/chef/chef_class.rb +4 -4
  14. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
  17. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +3 -3
  18. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  19. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  20. data/lib/chef/chef_fs/path_utils.rb +3 -3
  21. data/lib/chef/client.rb +16 -14
  22. data/lib/chef/config.rb +1 -1
  23. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  24. data/lib/chef/cookbook/gem_installer.rb +1 -1
  25. data/lib/chef/cookbook/metadata.rb +45 -22
  26. data/lib/chef/cookbook_loader.rb +1 -1
  27. data/lib/chef/cookbook_manifest.rb +1 -1
  28. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  29. data/lib/chef/cookbook_version.rb +38 -3
  30. data/lib/chef/data_collector.rb +1 -1
  31. data/lib/chef/data_collector/error_handlers.rb +1 -1
  32. data/lib/chef/data_collector/run_end_message.rb +7 -1
  33. data/lib/chef/decorator/lazy_array.rb +2 -2
  34. data/lib/chef/deprecated.rb +4 -0
  35. data/lib/chef/digester.rb +4 -4
  36. data/lib/chef/dist.rb +8 -0
  37. data/lib/chef/dsl/chef_vault.rb +84 -0
  38. data/lib/chef/dsl/declare_resource.rb +7 -5
  39. data/lib/chef/dsl/platform_introspection.rb +3 -2
  40. data/lib/chef/dsl/recipe.rb +7 -12
  41. data/lib/chef/dsl/universal.rb +3 -7
  42. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  43. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  44. data/lib/chef/event_dispatch/base.rb +3 -0
  45. data/lib/chef/formatters/base.rb +1 -1
  46. data/lib/chef/formatters/doc.rb +1 -1
  47. data/lib/chef/formatters/indentable_output_stream.rb +7 -16
  48. data/lib/chef/http.rb +1 -1
  49. data/lib/chef/http/decompressor.rb +1 -1
  50. data/lib/chef/http/http_request.rb +3 -2
  51. data/lib/chef/json_compat.rb +1 -1
  52. data/lib/chef/key.rb +1 -1
  53. data/lib/chef/knife.rb +2 -4
  54. data/lib/chef/knife/acl_add.rb +57 -0
  55. data/lib/chef/knife/acl_base.rb +183 -0
  56. data/lib/chef/knife/acl_bulk_add.rb +78 -0
  57. data/lib/chef/knife/acl_bulk_remove.rb +83 -0
  58. data/lib/chef/knife/acl_remove.rb +62 -0
  59. data/lib/chef/knife/acl_show.rb +56 -0
  60. data/lib/chef/knife/bootstrap.rb +84 -90
  61. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +2 -2
  62. data/lib/chef/knife/bootstrap/client_builder.rb +2 -2
  63. data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
  64. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +12 -12
  65. data/lib/chef/knife/core/bootstrap_context.rb +63 -60
  66. data/lib/chef/knife/core/generic_presenter.rb +4 -3
  67. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  68. data/lib/chef/knife/core/node_presenter.rb +2 -2
  69. data/lib/chef/knife/core/status_presenter.rb +5 -5
  70. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  71. data/lib/chef/knife/core/ui.rb +17 -1
  72. data/lib/chef/knife/core/windows_bootstrap_context.rb +44 -42
  73. data/lib/chef/knife/data_bag_secret_options.rb +18 -45
  74. data/lib/chef/knife/group_add.rb +55 -0
  75. data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
  76. data/lib/chef/knife/group_destroy.rb +53 -0
  77. data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
  78. data/lib/chef/knife/group_remove.rb +56 -0
  79. data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
  80. data/lib/chef/knife/key_create_base.rb +1 -1
  81. data/lib/chef/knife/key_edit_base.rb +1 -1
  82. data/lib/chef/knife/ssh.rb +12 -31
  83. data/lib/chef/knife/status.rb +3 -3
  84. data/lib/chef/knife/supermarket_download.rb +1 -2
  85. data/lib/chef/knife/supermarket_install.rb +2 -3
  86. data/lib/chef/knife/supermarket_list.rb +1 -2
  87. data/lib/chef/knife/supermarket_search.rb +1 -2
  88. data/lib/chef/knife/supermarket_share.rb +1 -2
  89. data/lib/chef/knife/supermarket_show.rb +1 -2
  90. data/lib/chef/knife/supermarket_unshare.rb +1 -2
  91. data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
  92. data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
  93. data/lib/chef/knife/user_invite_list.rb +34 -0
  94. data/lib/chef/knife/user_invite_rescind.rb +63 -0
  95. data/lib/chef/knife/yaml_convert.rb +91 -0
  96. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  97. data/lib/chef/mixin/checksum.rb +0 -1
  98. data/lib/chef/mixin/openssl_helper.rb +4 -4
  99. data/lib/chef/mixin/powershell_exec.rb +10 -1
  100. data/lib/chef/mixin/powershell_out.rb +1 -1
  101. data/lib/chef/mixin/properties.rb +16 -2
  102. data/lib/chef/mixin/shell_out.rb +1 -5
  103. data/lib/chef/monkey_patches/net_http.rb +0 -4
  104. data/lib/chef/node.rb +18 -6
  105. data/lib/chef/node/attribute.rb +2 -2
  106. data/lib/chef/node/immutable_collections.rb +1 -1
  107. data/lib/chef/node/mixin/immutablize_array.rb +4 -0
  108. data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
  109. data/lib/chef/node_map.rb +5 -31
  110. data/lib/chef/platform/priority_map.rb +4 -4
  111. data/lib/chef/platform/query_helpers.rb +6 -34
  112. data/lib/chef/policy_builder/policyfile.rb +1 -1
  113. data/lib/chef/powershell.rb +14 -0
  114. data/lib/chef/property.rb +24 -6
  115. data/lib/chef/provider.rb +40 -6
  116. data/lib/chef/provider/cron.rb +2 -2
  117. data/lib/chef/provider/directory.rb +3 -3
  118. data/lib/chef/provider/dsc_resource.rb +1 -1
  119. data/lib/chef/provider/dsc_script.rb +1 -1
  120. data/lib/chef/provider/execute.rb +3 -9
  121. data/lib/chef/provider/file.rb +6 -6
  122. data/lib/chef/provider/git.rb +84 -27
  123. data/lib/chef/provider/group.rb +4 -4
  124. data/lib/chef/provider/http_request.rb +6 -6
  125. data/lib/chef/provider/ifconfig.rb +4 -4
  126. data/lib/chef/provider/launchd.rb +45 -64
  127. data/lib/chef/provider/link.rb +2 -2
  128. data/lib/chef/provider/mount.rb +5 -5
  129. data/lib/chef/provider/osx_profile.rb +7 -3
  130. data/lib/chef/provider/package.rb +2 -2
  131. data/lib/chef/provider/package/cab.rb +5 -6
  132. data/lib/chef/provider/package/chocolatey.rb +1 -3
  133. data/lib/chef/provider/package/dnf.rb +66 -10
  134. data/lib/chef/provider/package/dnf/dnf_helper.py +85 -26
  135. data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
  136. data/lib/chef/provider/package/dnf/version.rb +5 -1
  137. data/lib/chef/provider/package/dpkg.rb +1 -1
  138. data/lib/chef/provider/package/freebsd/base.rb +2 -1
  139. data/lib/chef/provider/package/homebrew.rb +107 -43
  140. data/lib/chef/provider/package/macports.rb +0 -2
  141. data/lib/chef/provider/package/msu.rb +4 -1
  142. data/lib/chef/provider/package/pacman.rb +25 -34
  143. data/lib/chef/provider/package/portage.rb +1 -0
  144. data/lib/chef/provider/package/powershell.rb +1 -1
  145. data/lib/chef/provider/package/rubygems.rb +30 -3
  146. data/lib/chef/provider/package/windows.rb +29 -53
  147. data/lib/chef/provider/package/windows/msi.rb +2 -2
  148. data/lib/chef/provider/package/yum.rb +1 -9
  149. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  150. data/lib/chef/provider/package/zypper.rb +0 -1
  151. data/lib/chef/provider/powershell_script.rb +5 -11
  152. data/lib/chef/provider/registry_key.rb +4 -4
  153. data/lib/chef/provider/remote_directory.rb +5 -5
  154. data/lib/chef/provider/remote_file/ftp.rb +3 -2
  155. data/lib/chef/provider/remote_file/local_file.rb +2 -1
  156. data/lib/chef/provider/remote_file/sftp.rb +3 -2
  157. data/lib/chef/provider/route.rb +5 -3
  158. data/lib/chef/provider/ruby_block.rb +1 -1
  159. data/lib/chef/provider/script.rb +2 -2
  160. data/lib/chef/provider/service.rb +8 -8
  161. data/lib/chef/provider/service/aixinit.rb +1 -1
  162. data/lib/chef/provider/service/arch.rb +1 -1
  163. data/lib/chef/provider/service/debian.rb +30 -28
  164. data/lib/chef/provider/service/macosx.rb +16 -10
  165. data/lib/chef/provider/service/systemd.rb +12 -12
  166. data/lib/chef/provider/service/upstart.rb +1 -1
  167. data/lib/chef/provider/service/windows.rb +5 -11
  168. data/lib/chef/provider/subversion.rb +25 -5
  169. data/lib/chef/provider/systemd_unit.rb +26 -25
  170. data/lib/chef/provider/user.rb +6 -6
  171. data/lib/chef/provider/user/aix.rb +1 -1
  172. data/lib/chef/provider/user/dscl.rb +6 -6
  173. data/lib/chef/provider/user/mac.rb +20 -15
  174. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  175. data/lib/chef/provider/windows_env.rb +3 -3
  176. data/lib/chef/provider/windows_script.rb +2 -2
  177. data/lib/chef/provider/windows_task.rb +10 -10
  178. data/lib/chef/providers.rb +0 -6
  179. data/lib/chef/recipe.rb +36 -0
  180. data/lib/chef/resource.rb +44 -57
  181. data/lib/chef/resource/action_class.rb +24 -22
  182. data/lib/chef/resource/alternatives.rb +210 -0
  183. data/lib/chef/resource/apt_package.rb +33 -3
  184. data/lib/chef/resource/apt_preference.rb +103 -7
  185. data/lib/chef/resource/apt_repository.rb +357 -18
  186. data/lib/chef/resource/apt_update.rb +58 -5
  187. data/lib/chef/resource/archive_file.rb +6 -5
  188. data/lib/chef/resource/bash.rb +3 -1
  189. data/lib/chef/resource/batch.rb +1 -1
  190. data/lib/chef/resource/bff_package.rb +10 -2
  191. data/lib/chef/resource/breakpoint.rb +1 -2
  192. data/lib/chef/resource/build_essential.rb +49 -51
  193. data/lib/chef/resource/cab_package.rb +9 -2
  194. data/lib/chef/resource/chef_client_cron.rb +228 -0
  195. data/lib/chef/resource/chef_client_scheduled_task.rb +201 -0
  196. data/lib/chef/resource/chef_client_systemd_timer.rb +180 -0
  197. data/lib/chef/resource/chef_gem.rb +15 -18
  198. data/lib/chef/resource/chef_handler.rb +5 -4
  199. data/lib/chef/resource/chef_sleep.rb +7 -5
  200. data/lib/chef/resource/chef_vault_secret.rb +135 -0
  201. data/lib/chef/resource/chocolatey_config.rb +8 -4
  202. data/lib/chef/resource/chocolatey_feature.rb +7 -4
  203. data/lib/chef/resource/chocolatey_package.rb +7 -4
  204. data/lib/chef/resource/chocolatey_source.rb +7 -4
  205. data/lib/chef/resource/cookbook_file.rb +4 -3
  206. data/lib/chef/resource/cron.rb +34 -80
  207. data/lib/chef/resource/cron_access.rb +10 -6
  208. data/lib/chef/resource/cron_d.rb +44 -95
  209. data/lib/chef/resource/csh.rb +3 -1
  210. data/lib/chef/resource/directory.rb +3 -3
  211. data/lib/chef/resource/dmg_package.rb +22 -19
  212. data/lib/chef/resource/dnf_package.rb +3 -4
  213. data/lib/chef/resource/dpkg_package.rb +3 -2
  214. data/lib/chef/resource/dsc_resource.rb +6 -4
  215. data/lib/chef/resource/dsc_script.rb +3 -2
  216. data/lib/chef/resource/execute.rb +15 -14
  217. data/lib/chef/resource/file.rb +14 -9
  218. data/lib/chef/resource/freebsd_package.rb +3 -2
  219. data/lib/chef/resource/gem_package.rb +19 -11
  220. data/lib/chef/resource/group.rb +5 -2
  221. data/lib/chef/resource/helpers/cron_validations.rb +98 -0
  222. data/lib/chef/resource/homebrew_cask.rb +3 -2
  223. data/lib/chef/resource/homebrew_package.rb +5 -3
  224. data/lib/chef/resource/homebrew_tap.rb +3 -2
  225. data/lib/chef/resource/hostname.rb +26 -20
  226. data/lib/chef/resource/http_request.rb +1 -2
  227. data/lib/chef/resource/ifconfig.rb +8 -8
  228. data/lib/chef/resource/ips_package.rb +11 -3
  229. data/lib/chef/resource/kernel_module.rb +30 -30
  230. data/lib/chef/resource/ksh.rb +3 -1
  231. data/lib/chef/resource/launchd.rb +3 -3
  232. data/lib/chef/resource/link.rb +5 -27
  233. data/lib/chef/resource/locale.rb +60 -26
  234. data/lib/chef/resource/log.rb +13 -2
  235. data/lib/chef/resource/lwrp_base.rb +1 -1
  236. data/lib/chef/resource/macos_userdefaults.rb +18 -10
  237. data/lib/chef/resource/macosx_service.rb +3 -2
  238. data/lib/chef/resource/macports_package.rb +10 -2
  239. data/lib/chef/resource/mdadm.rb +63 -3
  240. data/lib/chef/resource/mount.rb +4 -1
  241. data/lib/chef/resource/msu_package.rb +19 -2
  242. data/lib/chef/resource/notify_group.rb +8 -3
  243. data/lib/chef/resource/ohai.rb +20 -4
  244. data/lib/chef/resource/ohai_hint.rb +4 -13
  245. data/lib/chef/resource/openbsd_package.rb +10 -2
  246. data/lib/chef/resource/openssl_dhparam.rb +11 -2
  247. data/lib/chef/resource/openssl_ec_private_key.rb +24 -2
  248. data/lib/chef/resource/openssl_ec_public_key.rb +22 -2
  249. data/lib/chef/resource/openssl_rsa_private_key.rb +21 -2
  250. data/lib/chef/resource/openssl_rsa_public_key.rb +23 -2
  251. data/lib/chef/resource/openssl_x509_certificate.rb +38 -2
  252. data/lib/chef/resource/openssl_x509_crl.rb +13 -2
  253. data/lib/chef/resource/openssl_x509_request.rb +38 -2
  254. data/lib/chef/resource/osx_profile.rb +4 -3
  255. data/lib/chef/resource/package.rb +3 -2
  256. data/lib/chef/resource/pacman_package.rb +3 -2
  257. data/lib/chef/resource/paludis_package.rb +13 -4
  258. data/lib/chef/resource/perl.rb +3 -1
  259. data/lib/chef/resource/plist.rb +207 -0
  260. data/lib/chef/resource/portage_package.rb +14 -4
  261. data/lib/chef/resource/powershell_package.rb +2 -4
  262. data/lib/chef/resource/powershell_package_source.rb +4 -2
  263. data/lib/chef/resource/powershell_script.rb +8 -18
  264. data/lib/chef/resource/python.rb +3 -1
  265. data/lib/chef/resource/reboot.rb +1 -2
  266. data/lib/chef/resource/registry_key.rb +2 -3
  267. data/lib/chef/resource/remote_directory.rb +3 -1
  268. data/lib/chef/resource/remote_file.rb +3 -2
  269. data/lib/chef/resource/rhsm_errata.rb +1 -4
  270. data/lib/chef/resource/rhsm_errata_level.rb +1 -2
  271. data/lib/chef/resource/rhsm_register.rb +3 -3
  272. data/lib/chef/resource/rhsm_repo.rb +4 -3
  273. data/lib/chef/resource/rhsm_subscription.rb +5 -4
  274. data/lib/chef/resource/route.rb +6 -2
  275. data/lib/chef/resource/rpm_package.rb +13 -3
  276. data/lib/chef/resource/ruby.rb +3 -1
  277. data/lib/chef/resource/ruby_block.rb +2 -5
  278. data/lib/chef/resource/scm/_scm.rb +49 -0
  279. data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
  280. data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +10 -7
  281. data/lib/chef/resource/script.rb +7 -4
  282. data/lib/chef/resource/service.rb +7 -8
  283. data/lib/chef/resource/smartos_package.rb +10 -2
  284. data/lib/chef/resource/snap_package.rb +4 -2
  285. data/lib/chef/resource/solaris_package.rb +10 -2
  286. data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
  287. data/lib/chef/resource/sudo.rb +11 -11
  288. data/lib/chef/resource/support/cron.d.erb +1 -1
  289. data/lib/chef/resource/support/cron_access.erb +1 -1
  290. data/lib/chef/resource/support/sudoer.erb +1 -2
  291. data/lib/chef/resource/support/ulimit.erb +41 -0
  292. data/lib/chef/resource/swap_file.rb +7 -5
  293. data/lib/chef/resource/sysctl.rb +63 -4
  294. data/lib/chef/resource/systemd_unit.rb +6 -4
  295. data/lib/chef/resource/template.rb +0 -1
  296. data/lib/chef/resource/timezone.rb +8 -19
  297. data/lib/chef/resource/user.rb +3 -5
  298. data/lib/chef/resource/user/aix_user.rb +0 -2
  299. data/lib/chef/resource/user/dscl_user.rb +1 -1
  300. data/lib/chef/resource/user/linux_user.rb +0 -2
  301. data/lib/chef/resource/user/mac_user.rb +1 -1
  302. data/lib/chef/resource/user/pw_user.rb +0 -2
  303. data/lib/chef/resource/user/solaris_user.rb +0 -2
  304. data/lib/chef/resource/user/windows_user.rb +0 -2
  305. data/lib/chef/resource/user_ulimit.rb +116 -0
  306. data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
  307. data/lib/chef/resource/windows_ad_join.rb +20 -7
  308. data/lib/chef/resource/windows_auto_run.rb +2 -3
  309. data/lib/chef/resource/windows_certificate.rb +3 -3
  310. data/lib/chef/resource/windows_dfs_folder.rb +1 -2
  311. data/lib/chef/resource/windows_dfs_namespace.rb +1 -2
  312. data/lib/chef/resource/windows_dfs_server.rb +2 -3
  313. data/lib/chef/resource/windows_dns_record.rb +0 -1
  314. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  315. data/lib/chef/resource/windows_env.rb +12 -4
  316. data/lib/chef/resource/windows_feature.rb +59 -4
  317. data/lib/chef/resource/windows_feature_dism.rb +24 -24
  318. data/lib/chef/resource/windows_feature_powershell.rb +44 -78
  319. data/lib/chef/resource/windows_firewall_rule.rb +121 -8
  320. data/lib/chef/resource/windows_font.rb +10 -2
  321. data/lib/chef/resource/windows_package.rb +76 -7
  322. data/lib/chef/resource/windows_pagefile.rb +31 -4
  323. data/lib/chef/resource/windows_path.rb +18 -2
  324. data/lib/chef/resource/windows_printer.rb +26 -7
  325. data/lib/chef/resource/windows_printer_port.rb +29 -2
  326. data/lib/chef/resource/windows_script.rb +3 -4
  327. data/lib/chef/resource/windows_security_policy.rb +119 -0
  328. data/lib/chef/resource/windows_service.rb +46 -32
  329. data/lib/chef/resource/windows_share.rb +22 -6
  330. data/lib/chef/resource/windows_shortcut.rb +13 -3
  331. data/lib/chef/resource/windows_task.rb +129 -16
  332. data/lib/chef/resource/windows_uac.rb +20 -2
  333. data/lib/chef/resource/windows_user_privilege.rb +199 -0
  334. data/lib/chef/resource/windows_workgroup.rb +19 -4
  335. data/lib/chef/resource/yum_package.rb +91 -7
  336. data/lib/chef/resource/yum_repository.rb +30 -12
  337. data/lib/chef/resource/zypper_package.rb +32 -5
  338. data/lib/chef/resource/zypper_repository.rb +19 -6
  339. data/lib/chef/resource_builder.rb +8 -0
  340. data/lib/chef/resource_inspector.rb +3 -2
  341. data/lib/chef/resource_resolver.rb +7 -14
  342. data/lib/chef/resources.rb +11 -3
  343. data/lib/chef/run_context/cookbook_compiler.rb +29 -5
  344. data/lib/chef/scan_access_control.rb +1 -1
  345. data/lib/chef/shell.rb +22 -0
  346. data/lib/chef/shell/ext.rb +1 -1
  347. data/lib/chef/version.rb +1 -1
  348. data/lib/chef/win32/api.rb +2 -2
  349. data/lib/chef/win32/api/error.rb +3 -1
  350. data/lib/chef/win32/api/file.rb +1 -1
  351. data/lib/chef/win32/api/net.rb +1 -0
  352. data/lib/chef/win32/api/security.rb +6 -0
  353. data/lib/chef/win32/file.rb +1 -9
  354. data/lib/chef/win32/mutex.rb +1 -1
  355. data/lib/chef/win32/net.rb +1 -0
  356. data/lib/chef/win32/security.rb +40 -2
  357. data/lib/chef/win32/security/sid.rb +4 -4
  358. data/spec/functional/assets/inittest +8 -7
  359. data/spec/functional/knife/ssh_spec.rb +23 -19
  360. data/spec/functional/resource/cron_spec.rb +10 -29
  361. data/spec/functional/resource/dnf_package_spec.rb +441 -156
  362. data/spec/functional/resource/git_spec.rb +184 -134
  363. data/spec/functional/resource/insserv_spec.rb +1 -1
  364. data/spec/functional/resource/launchd_spec.rb +232 -0
  365. data/spec/functional/resource/link_spec.rb +3 -3
  366. data/spec/functional/resource/locale_spec.rb +13 -2
  367. data/spec/functional/resource/msu_package_spec.rb +5 -2
  368. data/spec/functional/resource/powershell_script_spec.rb +7 -68
  369. data/spec/functional/resource/remote_file_spec.rb +1 -1
  370. data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
  371. data/spec/functional/resource/windows_task_spec.rb +4 -4
  372. data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
  373. data/spec/functional/run_lock_spec.rb +1 -1
  374. data/spec/functional/shell_spec.rb +1 -1
  375. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  376. data/spec/functional/version_spec.rb +1 -1
  377. data/spec/functional/win32/registry_spec.rb +0 -6
  378. data/spec/functional/win32/security_spec.rb +22 -0
  379. data/spec/integration/client/client_spec.rb +123 -2
  380. data/spec/integration/knife/cookbook_show_spec.rb +28 -26
  381. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  382. data/spec/integration/knife/raw_spec.rb +34 -6
  383. data/spec/integration/knife/redirection_spec.rb +2 -2
  384. data/spec/integration/knife/show_spec.rb +32 -3
  385. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +3 -3
  386. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  387. data/spec/integration/recipes/notifies_spec.rb +49 -20
  388. data/spec/integration/recipes/notifying_block_spec.rb +8 -5
  389. data/spec/integration/recipes/provider_choice.rb +2 -0
  390. data/spec/integration/recipes/recipe_dsl_spec.rb +45 -143
  391. data/spec/integration/recipes/resource_action_spec.rb +16 -11
  392. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -1
  393. data/spec/integration/recipes/resource_load_spec.rb +133 -12
  394. data/spec/integration/recipes/use_partial_spec.rb +112 -0
  395. data/spec/integration/solo/solo_spec.rb +3 -3
  396. data/spec/spec_helper.rb +18 -3
  397. data/spec/support/chef_helpers.rb +2 -2
  398. data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
  399. data/spec/support/platform_helpers.rb +2 -20
  400. data/spec/support/recipe_dsl_helper.rb +83 -0
  401. data/spec/support/shared/functional/http.rb +2 -2
  402. data/spec/support/shared/functional/windows_script.rb +3 -16
  403. data/spec/support/shared/integration/knife_support.rb +9 -6
  404. data/spec/support/shared/unit/mock_shellout.rb +1 -1
  405. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  406. data/spec/unit/application/apply_spec.rb +3 -0
  407. data/spec/unit/application/client_spec.rb +5 -1
  408. data/spec/unit/application_spec.rb +1 -2
  409. data/spec/unit/client_spec.rb +7 -5
  410. data/spec/unit/cookbook/gem_installer_spec.rb +2 -2
  411. data/spec/unit/cookbook/metadata_spec.rb +38 -19
  412. data/spec/unit/data_collector_spec.rb +39 -18
  413. data/spec/unit/file_access_control_spec.rb +1 -1
  414. data/spec/unit/json_compat_spec.rb +1 -1
  415. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
  416. data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
  417. data/spec/unit/knife/bootstrap_spec.rb +20 -38
  418. data/spec/unit/knife/cookbook_show_spec.rb +1 -0
  419. data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
  420. data/spec/unit/knife/core/ui_spec.rb +16 -0
  421. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +9 -63
  422. data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
  423. data/spec/unit/knife/ssh_spec.rb +8 -111
  424. data/spec/unit/knife/status_spec.rb +1 -1
  425. data/spec/unit/knife_spec.rb +18 -0
  426. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  427. data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
  428. data/spec/unit/mixin/shell_out_spec.rb +25 -31
  429. data/spec/unit/node/attribute_spec.rb +3 -3
  430. data/spec/unit/node_spec.rb +24 -0
  431. data/spec/unit/platform/query_helpers_spec.rb +0 -143
  432. data/spec/unit/property/state_spec.rb +12 -7
  433. data/spec/unit/property/validation_spec.rb +25 -1
  434. data/spec/unit/property_spec.rb +12 -9
  435. data/spec/unit/provider/apt_preference_spec.rb +14 -10
  436. data/spec/unit/provider/apt_repository_spec.rb +34 -36
  437. data/spec/unit/provider/apt_update_spec.rb +12 -11
  438. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  439. data/spec/unit/provider/cron_spec.rb +2 -2
  440. data/spec/unit/provider/directory_spec.rb +4 -15
  441. data/spec/unit/provider/file_spec.rb +4 -4
  442. data/spec/unit/provider/git_spec.rb +41 -1
  443. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  444. data/spec/unit/provider/launchd_spec.rb +8 -50
  445. data/spec/unit/provider/link_spec.rb +0 -1
  446. data/spec/unit/provider/log_spec.rb +3 -3
  447. data/spec/unit/provider/mdadm_spec.rb +3 -3
  448. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
  449. data/spec/unit/provider/package/homebrew_spec.rb +280 -174
  450. data/spec/unit/provider/package/pacman_spec.rb +65 -147
  451. data/spec/unit/provider/package/portage_spec.rb +2 -2
  452. data/spec/unit/provider/package/powershell_spec.rb +3 -2
  453. data/spec/unit/provider/package/rubygems_spec.rb +211 -26
  454. data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
  455. data/spec/unit/provider/powershell_script_spec.rb +21 -61
  456. data/spec/unit/provider/remote_file_spec.rb +3 -4
  457. data/spec/unit/provider/service/debian_service_spec.rb +34 -13
  458. data/spec/unit/provider/service/macosx_spec.rb +210 -214
  459. data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
  460. data/spec/unit/provider/subversion_spec.rb +4 -2
  461. data/spec/unit/provider/template_spec.rb +3 -4
  462. data/spec/unit/provider/zypper_repository_spec.rb +17 -17
  463. data/spec/unit/provider_resolver_spec.rb +4 -4
  464. data/spec/unit/recipe_spec.rb +68 -0
  465. data/spec/unit/resource/alternatives_spec.rb +120 -0
  466. data/spec/unit/resource/apt_preference_spec.rb +0 -18
  467. data/spec/unit/resource/apt_repository_spec.rb +0 -18
  468. data/spec/unit/resource/apt_update_spec.rb +0 -18
  469. data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
  470. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
  471. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
  472. data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
  473. data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
  474. data/spec/unit/resource/cron_d_spec.rb +6 -48
  475. data/spec/unit/resource/cron_spec.rb +4 -10
  476. data/spec/unit/resource/gem_package_spec.rb +3 -3
  477. data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
  478. data/spec/unit/resource/link_spec.rb +0 -4
  479. data/spec/unit/resource/locale_spec.rb +0 -34
  480. data/spec/unit/resource/msu_package_spec.rb +4 -0
  481. data/spec/unit/resource/ohai_spec.rb +56 -2
  482. data/spec/unit/resource/plist_spec.rb +130 -0
  483. data/spec/unit/resource/powershell_script_spec.rb +0 -5
  484. data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
  485. data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
  486. data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
  487. data/spec/unit/resource/service_spec.rb +4 -0
  488. data/spec/unit/resource/user_spec.rb +2 -2
  489. data/spec/unit/resource/user_ulimit_spec.rb +53 -0
  490. data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
  491. data/spec/unit/resource/windows_feature_powershell_spec.rb +2 -17
  492. data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
  493. data/spec/unit/resource/windows_package_spec.rb +14 -0
  494. data/spec/unit/resource/windows_service_spec.rb +9 -0
  495. data/spec/unit/resource_reporter_spec.rb +2 -6
  496. data/spec/unit/resource_spec.rb +10 -3
  497. data/spec/unit/run_lock_spec.rb +1 -1
  498. data/spec/unit/scan_access_control_spec.rb +1 -1
  499. data/spec/unit/search/query_spec.rb +1 -1
  500. data/spec/unit/win32/registry_spec.rb +1 -1
  501. data/tasks/rspec.rb +6 -14
  502. metadata +92 -37
  503. data/lib/chef/dsl/core.rb +0 -52
  504. data/lib/chef/knife/cookbook_site_share.rb +0 -41
  505. data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
  506. data/lib/chef/provider/apt_preference.rb +0 -93
  507. data/lib/chef/provider/apt_repository.rb +0 -358
  508. data/lib/chef/provider/apt_update.rb +0 -79
  509. data/lib/chef/provider/log.rb +0 -43
  510. data/lib/chef/provider/mdadm.rb +0 -85
  511. data/lib/chef/provider/ohai.rb +0 -45
  512. data/lib/chef/resource/git.rb +0 -37
  513. data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -126,7 +126,7 @@ describe Chef::Provider::Package::Windows::Exe do
126
126
  it "removes installed package and quotes uninstall string" do
127
127
  new_resource.timeout = 300
128
128
  allow(::File).to receive(:exist?).with("uninst_dir/uninst_file").and_return(true)
129
- expect(provider).to receive(:shell_out!).with(%r{start \"\" /wait \"uninst_dir/uninst_file\" /S /NCRC & exit %%%%ERRORLEVEL%%%%}, default_env: false, timeout: 300, returns: [0])
129
+ expect(provider).to receive(:shell_out!).with(%r{start \"\" /wait \"uninst_dir/uninst_file\" /S /NCRC & exit %%%%ERRORLEVEL%%%%}, default_env: false, timeout: 300, returns: [0, 3010])
130
130
  provider.remove_package
131
131
  end
132
132
  end
@@ -53,73 +53,33 @@ describe Chef::Provider::PowershellScript, "action_run" do
53
53
  end
54
54
 
55
55
  context "when setting interpreter flags" do
56
- context "on nano" do
57
- before(:each) do
58
- allow(Chef::Platform).to receive(:windows_nano_server?).and_return(true)
59
- allow(provider).to receive(:is_forced_32bit).and_return(false)
60
- os_info_double = double("os_info")
61
- allow(provider.run_context.node["kernel"]).to receive(:[]).with("os_info").and_return(os_info_double)
62
- allow(os_info_double).to receive(:[]).with("system_directory").and_return("C:\\Windows\\system32")
63
- end
64
-
65
- it "sets the -Command flag as the last flag" do
66
- flags = provider.command.split(" ").keep_if { |flag| flag =~ /^-/ }
67
- expect(flags.pop).to eq("-Command")
68
- end
56
+ before(:each) do
57
+ allow(provider).to receive(:is_forced_32bit).and_return(false)
58
+ os_info_double = double("os_info")
59
+ allow(provider.run_context.node["kernel"]).to receive(:[]).with("os_info").and_return(os_info_double)
60
+ allow(os_info_double).to receive(:[]).with("system_directory").and_return("C:\\Windows\\system32")
69
61
  end
70
62
 
71
- context "not on nano" do
72
- before(:each) do
73
- allow(Chef::Platform).to receive(:windows_nano_server?).and_return(false)
74
- allow(provider).to receive(:is_forced_32bit).and_return(false)
75
- os_info_double = double("os_info")
76
- allow(provider.run_context.node["kernel"]).to receive(:[]).with("os_info").and_return(os_info_double)
77
- allow(os_info_double).to receive(:[]).with("system_directory").and_return("C:\\Windows\\system32")
78
- end
79
-
80
- it "sets the -File flag as the last flag" do
81
- flags = provider.command.split(" ").keep_if { |flag| flag =~ /^-/ }
82
- expect(flags.pop).to eq("-File")
83
- end
84
-
85
- let(:execution_policy_flag) do
86
- provider_flags = provider.flags.split(" ")
87
- # Last occurance of "executionpolicy"
88
- execution_policy_index = provider_flags.map(&:downcase).rindex("-executionpolicy")
63
+ it "sets the -File flag as the last flag" do
64
+ flags = provider.command.split(" ").keep_if { |flag| flag =~ /^-/ }
65
+ expect(flags.pop).to eq("-File")
66
+ end
89
67
 
90
- execution_policy_index ? provider_flags[execution_policy_index + 1] : nil
91
- end
68
+ let(:execution_policy_flag) do
69
+ provider_flags = provider.flags.split(" ")
70
+ # Last occurance of "executionpolicy"
71
+ execution_policy_index = provider_flags.map(&:downcase).rindex("-executionpolicy")
92
72
 
93
- context "when running with an unspecified PowerShell version" do
94
- let(:powershell_version) { nil }
95
- it "sets default -ExecutionPolicy flag to 'Unrestricted'" do
96
- expect(execution_policy_flag.downcase).to eq("unrestricted".downcase)
97
- end
98
- it "sets user defined -ExecutionPolicy flag to 'RemoteSigned'" do
99
- set_user_defined_flag
100
- expect(execution_policy_flag.downcase).to eq("RemoteSigned".downcase)
101
- end
102
- end
73
+ execution_policy_index ? provider_flags[execution_policy_index + 1] : nil
74
+ end
103
75
 
104
- { "2.0" => "Unrestricted",
105
- "2.5" => "Unrestricted",
106
- "3.0" => "Bypass",
107
- "3.6" => "Bypass",
108
- "4.0" => "Bypass",
109
- "5.0" => "Bypass" }.each do |version_policy|
110
- let(:powershell_version) { version_policy[0].to_f }
111
- context "when running PowerShell version #{version_policy[0]}" do
112
- let(:powershell_version) { version_policy[0].to_f }
76
+ it "sets default -ExecutionPolicy flag to 'Bypass'" do
77
+ expect(execution_policy_flag).to eq("Bypass")
78
+ end
113
79
 
114
- it "sets default -ExecutionPolicy flag to '#{version_policy[1]}'" do
115
- expect(execution_policy_flag.downcase).to eq(version_policy[1].downcase)
116
- end
117
- it "sets user defined -ExecutionPolicy flag to 'RemoteSigned'" do
118
- set_user_defined_flag
119
- expect(execution_policy_flag.downcase).to eq("RemoteSigned".downcase)
120
- end
121
- end
122
- end
80
+ it "sets user defined -ExecutionPolicy flag to 'RemoteSigned'" do
81
+ set_user_defined_flag
82
+ expect(execution_policy_flag).to eq("RemoteSigned")
123
83
  end
124
84
  end
125
85
  end
@@ -34,10 +34,9 @@ describe Chef::Provider::RemoteFile do
34
34
  content = double("Chef::Provider::File::Content::RemoteFile")
35
35
  end
36
36
 
37
- let(:node) { double("Chef::Node") }
38
- let(:events) { double("Chef::Events").as_null_object } # mock all the methods
39
- let(:logger) { double("Mixlib::Log::Child").as_null_object }
40
- let(:run_context) { double("Chef::RunContext", node: node, events: events, logger: logger) }
37
+ let(:node) { Chef::Node.new }
38
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
39
+ let(:run_context) { Chef::RunContext.new(node, {}, events) }
41
40
  let(:enclosing_directory) do
42
41
  canonicalize_path(File.expand_path(File.join(CHEF_SPEC_DATA, "templates")))
43
42
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: AJ Christensen (<aj@hjksolutions.com>)
3
- # Copyright:: Copyright 2008-2016, HJK Solutions, LLC
3
+ # Copyright:: Copyright (c) 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");
@@ -183,21 +183,21 @@ describe Chef::Provider::Service::Debian do
183
183
  describe "enable_service" do
184
184
  let(:service_name) { @new_resource.service_name }
185
185
  context "when the service doesn't set a priority" do
186
- it "calls update-rc.d 'service_name' defaults" do
186
+ it "assumes default priority 20 and calls update-rc.d remove => defaults 20 80" do
187
187
  expect_commands(@provider, [
188
188
  "/usr/sbin/update-rc.d -f #{service_name} remove",
189
- "/usr/sbin/update-rc.d #{service_name} defaults",
189
+ "/usr/sbin/update-rc.d #{service_name} defaults 20 80",
190
190
  ])
191
191
  @provider.enable_service
192
192
  end
193
193
  end
194
194
 
195
- context "when the service sets a simple priority" do
195
+ context "when the service sets a simple priority 75" do
196
196
  before do
197
197
  @new_resource.priority(75)
198
198
  end
199
199
 
200
- it "calls update-rc.d 'service_name' defaults" do
200
+ it "calls update-rc.d remove => defaults 75 25" do
201
201
  expect_commands(@provider, [
202
202
  "/usr/sbin/update-rc.d -f #{service_name} remove",
203
203
  "/usr/sbin/update-rc.d #{service_name} defaults 75 25",
@@ -206,15 +206,17 @@ describe Chef::Provider::Service::Debian do
206
206
  end
207
207
  end
208
208
 
209
- context "when the service sets complex priorities" do
209
+ context "when the service sets complex priorities using Hash" do
210
210
  before do
211
211
  @new_resource.priority(2 => [:start, 20], 3 => [:stop, 55])
212
212
  end
213
213
 
214
- it "calls update-rc.d 'service_name' with those priorities" do
214
+ it "calls update-rc.d remove => defaults => enable|disable <runlevel>" do
215
215
  expect_commands(@provider, [
216
216
  "/usr/sbin/update-rc.d -f #{service_name} remove",
217
- "/usr/sbin/update-rc.d #{service_name} start 20 2 . stop 55 3 . ",
217
+ "/usr/sbin/update-rc.d #{service_name} defaults",
218
+ "/usr/sbin/update-rc.d #{service_name} enable 2",
219
+ "/usr/sbin/update-rc.d #{service_name} disable 3",
218
220
  ])
219
221
  @provider.enable_service
220
222
  end
@@ -223,25 +225,44 @@ describe Chef::Provider::Service::Debian do
223
225
 
224
226
  describe "disable_service" do
225
227
  let(:service_name) { @new_resource.service_name }
228
+
226
229
  context "when the service doesn't set a priority" do
227
- it "calls update-rc.d -f 'service_name' remove + stop with default priority" do
230
+ it "calls update-rc.d remove => defaults => disable" do
228
231
  expect_commands(@provider, [
229
232
  "/usr/sbin/update-rc.d -f #{service_name} remove",
230
- "/usr/sbin/update-rc.d -f #{service_name} stop 80 2 3 4 5 .",
233
+ "/usr/sbin/update-rc.d #{service_name} defaults",
234
+ "/usr/sbin/update-rc.d #{service_name} disable",
231
235
  ])
232
236
  @provider.disable_service
233
237
  end
234
238
  end
235
239
 
236
- context "when the service sets a simple priority" do
240
+ context "when the service sets a simple priority 75" do
237
241
  before do
238
242
  @new_resource.priority(75)
239
243
  end
240
244
 
241
- it "calls update-rc.d -f 'service_name' remove + stop with the specified priority" do
245
+ it "ignores priority and calls update-rc.d remove => defaults => disable" do
242
246
  expect_commands(@provider, [
243
247
  "/usr/sbin/update-rc.d -f #{service_name} remove",
244
- "/usr/sbin/update-rc.d -f #{service_name} stop #{100 - @new_resource.priority} 2 3 4 5 .",
248
+ "/usr/sbin/update-rc.d #{service_name} defaults",
249
+ "/usr/sbin/update-rc.d #{service_name} disable",
250
+ ])
251
+ @provider.disable_service
252
+ end
253
+ end
254
+
255
+ context "when the service sets complex priorities using Hash" do
256
+ before do
257
+ @new_resource.priority(2 => [:start, 20], 3 => [:stop, 55])
258
+ end
259
+
260
+ it "ignores priority and calls update-rc.d remove => defaults => enable|disable <runlevel>" do
261
+ expect_commands(@provider, [
262
+ "/usr/sbin/update-rc.d -f #{service_name} remove",
263
+ "/usr/sbin/update-rc.d #{service_name} defaults",
264
+ "/usr/sbin/update-rc.d #{service_name} enable 2",
265
+ "/usr/sbin/update-rc.d #{service_name} disable 3",
245
266
  ])
246
267
  @provider.disable_service
247
268
  end
@@ -1,6 +1,7 @@
1
1
  #
2
2
  # Author:: Igor Afonov <afonov@gmail.com>
3
3
  # Copyright:: Copyright 2011-2016, Igor Afonov
4
+ # Copyright:: Copyright (c) Chef Software Inc.
4
5
  # License:: Apache License, Version 2.0
5
6
  #
6
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -61,276 +62,271 @@ describe Chef::Provider::Service::Macosx do
61
62
 
62
63
  %w{Daemon Agent}.each do |service_type|
63
64
  ["redis-server", "io.redis.redis-server"].each do |service_name|
64
- ["10.9", "10.10", "10.11"].each do |platform_version|
65
- let(:plist) { "/Library/LaunchDaemons/io.redis.redis-server.plist" }
66
- let(:session) { StringIO.new }
67
- if service_type == "Agent"
68
- let(:plist) { "/Library/LaunchAgents/io.redis.redis-server.plist" }
69
- let(:session) { "-S Aqua " }
70
- let(:su_cmd) { "su -l igor -c" }
71
- if platform_version == "10.9"
72
- let(:su_cmd) { "su igor -c" }
73
- end
74
- end
75
- let(:service_label) { "io.redis.redis-server" }
76
- before do
77
- allow(run_context).to receive(:logger).and_return(logger)
78
- allow(Dir).to receive(:glob).and_return([plist], [])
79
- @stat = double("File::Stat", { uid: 501 })
80
- allow(File).to receive(:stat).and_return(@stat)
81
- @getpwuid = double("Etc::Passwd", { name: "mikedodge04" })
82
- allow(Etc).to receive(:getpwuid).and_return(@getpwuid)
83
- allow(node).to receive(:[]).with("platform_version").and_return(platform_version)
84
- cmd = "launchctl list #{service_label}"
85
- allow(provider).to receive(:shell_out)
86
- .with(/(#{su_cmd} '#{cmd}'|#{cmd})/, default_env: false)
87
- .and_return(double("Status",
88
- stdout: launchctl_stdout, exitstatus: 0))
89
- allow(File).to receive(:exists?).and_return([true], [])
90
- allow(provider).to receive(:shell_out!)
91
- .with(/plutil -convert xml1 -o/, default_env: false)
92
- .and_return(double("Status", stdout: plutil_stdout))
93
- end
65
+ let(:plist) { "/Library/LaunchDaemons/io.redis.redis-server.plist" }
66
+ let(:session) { StringIO.new }
67
+ if service_type == "Agent"
68
+ let(:plist) { "/Library/LaunchAgents/io.redis.redis-server.plist" }
69
+ let(:session) { "-S Aqua " }
70
+ let(:su_cmd) { "su -l igor -c" }
71
+ end
72
+ let(:service_label) { "io.redis.redis-server" }
73
+ before do
74
+ allow(run_context).to receive(:logger).and_return(logger)
75
+ allow(Dir).to receive(:glob).and_return([plist], [])
76
+ @stat = double("File::Stat", { uid: 501 })
77
+ allow(File).to receive(:stat).and_return(@stat)
78
+ @getpwuid = double("Etc::Passwd", { name: "mikedodge04" })
79
+ allow(Etc).to receive(:getpwuid).and_return(@getpwuid)
80
+ allow(node).to receive(:[]).with("platform_version").and_return("10.11.1")
81
+ cmd = "launchctl list #{service_label}"
82
+ allow(provider).to receive(:shell_out)
83
+ .with(/(#{su_cmd} '#{cmd}'|#{cmd})/, default_env: false)
84
+ .and_return(double("Status",
85
+ stdout: launchctl_stdout, exitstatus: 0))
86
+ allow(File).to receive(:exists?).and_return([true], [])
87
+ allow(provider).to receive(:shell_out!)
88
+ .with(/plutil -convert xml1 -o/, default_env: false)
89
+ .and_return(double("Status", stdout: plutil_stdout))
90
+ end
94
91
 
95
- context "#{service_name} that is a #{service_type} running Osx #{platform_version}" do
96
- let(:new_resource) { Chef::Resource::MacosxService.new(service_name) }
97
- let!(:current_resource) { Chef::Resource::MacosxService.new(service_name) }
92
+ context "#{service_name} that is a #{service_type}" do
93
+ let(:new_resource) { Chef::Resource::MacosxService.new(service_name) }
94
+ let!(:current_resource) { Chef::Resource::MacosxService.new(service_name) }
98
95
 
99
- describe "#load_current_resource" do
96
+ describe "#load_current_resource" do
100
97
 
101
- # CHEF-5223 "you can't glob for a file that hasn't been converged
102
- # onto the node yet."
103
- context "when the plist doesn't exist" do
98
+ # CHEF-5223 "you can't glob for a file that hasn't been converged
99
+ # onto the node yet."
100
+ context "when the plist doesn't exist" do
104
101
 
105
- def run_resource_setup_for_action(action)
106
- new_resource.action(action)
107
- provider.action = action
108
- provider.load_current_resource
109
- provider.define_resource_requirements
110
- provider.process_resource_requirements
111
- end
102
+ def run_resource_setup_for_action(action)
103
+ new_resource.action(action)
104
+ provider.action = action
105
+ provider.load_current_resource
106
+ provider.define_resource_requirements
107
+ provider.process_resource_requirements
108
+ end
112
109
 
113
- before do
114
- allow(Dir).to receive(:glob).and_return([])
115
- allow(File).to receive(:exists?).and_return([true], [])
116
- allow(provider).to receive(:shell_out!)
117
- .with(/plutil -convert xml1 -o/)
118
- .and_raise(Mixlib::ShellOut::ShellCommandFailed)
119
- end
110
+ before do
111
+ allow(Dir).to receive(:glob).and_return([])
112
+ allow(File).to receive(:exists?).and_return([true], [])
113
+ allow(provider).to receive(:shell_out!)
114
+ .with(/plutil -convert xml1 -o/)
115
+ .and_raise(Mixlib::ShellOut::ShellCommandFailed)
116
+ end
120
117
 
121
- it "works for action :nothing" do
122
- expect { run_resource_setup_for_action(:nothing) }.not_to raise_error
123
- end
118
+ it "works for action :nothing" do
119
+ expect { run_resource_setup_for_action(:nothing) }.not_to raise_error
120
+ end
124
121
 
125
- it "works for action :start" do
126
- expect { run_resource_setup_for_action(:start) }.not_to raise_error
127
- end
122
+ it "works for action :start" do
123
+ expect { run_resource_setup_for_action(:start) }.not_to raise_error
124
+ end
128
125
 
129
- it "errors if action is :enable" do
130
- expect { run_resource_setup_for_action(:enable) }.to raise_error(Chef::Exceptions::Service)
131
- end
126
+ it "errors if action is :enable" do
127
+ expect { run_resource_setup_for_action(:enable) }.to raise_error(Chef::Exceptions::Service)
128
+ end
132
129
 
133
- it "errors if action is :disable" do
134
- expect { run_resource_setup_for_action(:disable) }.to raise_error(Chef::Exceptions::Service)
135
- end
130
+ it "errors if action is :disable" do
131
+ expect { run_resource_setup_for_action(:disable) }.to raise_error(Chef::Exceptions::Service)
136
132
  end
133
+ end
137
134
 
138
- context "when launchctl returns pid in service list" do
139
- let(:launchctl_stdout) { StringIO.new <<~SVC_LIST }
140
- {
141
- "LimitLoadToSessionType" = "System";
142
- "Label" = "io.redis.redis-server";
143
- "TimeOut" = 30;
144
- "OnDemand" = false;
145
- "LastExitStatus" = 0;
146
- "PID" = 62803;
147
- "Program" = "do_some.sh";
148
- "ProgramArguments" = (
149
- "path/to/do_something.sh";
150
- "-f";
151
- );
152
- };
153
- SVC_LIST
135
+ context "when launchctl returns pid in service list" do
136
+ let(:launchctl_stdout) { StringIO.new <<~SVC_LIST }
137
+ {
138
+ "LimitLoadToSessionType" = "System";
139
+ "Label" = "io.redis.redis-server";
140
+ "TimeOut" = 30;
141
+ "OnDemand" = false;
142
+ "LastExitStatus" = 0;
143
+ "PID" = 62803;
144
+ "Program" = "do_some.sh";
145
+ "ProgramArguments" = (
146
+ "path/to/do_something.sh";
147
+ "-f";
148
+ );
149
+ };
150
+ SVC_LIST
154
151
 
155
- before do
156
- provider.load_current_resource
157
- end
152
+ before do
153
+ provider.load_current_resource
154
+ end
158
155
 
159
- it "sets resource running state to true" do
160
- expect(provider.current_resource.running).to be_truthy
161
- end
156
+ it "sets resource running state to true" do
157
+ expect(provider.current_resource.running).to be_truthy
158
+ end
162
159
 
163
- it "sets resouce enabled state to true" do
164
- expect(provider.current_resource.enabled).to be_truthy
165
- end
160
+ it "sets resouce enabled state to true" do
161
+ expect(provider.current_resource.enabled).to be_truthy
166
162
  end
163
+ end
167
164
 
168
- describe "running unsupported actions" do
169
- before do
170
- allow(Dir).to receive(:glob).and_return([(plist).to_s], [])
171
- allow(File).to receive(:exists?).and_return([true], [])
172
- end
173
- it "should throw an exception when reload action is attempted" do
174
- expect { provider.run_action(:reload) }.to raise_error(Chef::Exceptions::UnsupportedAction)
175
- end
165
+ describe "running unsupported actions" do
166
+ before do
167
+ allow(Dir).to receive(:glob).and_return([(plist).to_s], [])
168
+ allow(File).to receive(:exists?).and_return([true], [])
176
169
  end
177
- context "when launchctl returns empty service pid" do
178
- let(:launchctl_stdout) { StringIO.new <<~SVC_LIST }
179
- {
180
- "LimitLoadToSessionType" = "System";
181
- "Label" = "io.redis.redis-server";
182
- "TimeOut" = 30;
183
- "OnDemand" = false;
184
- "LastExitStatus" = 0;
185
- "Program" = "do_some.sh";
186
- "ProgramArguments" = (
187
- "path/to/do_something.sh";
188
- "-f";
189
- );
190
- };
191
- SVC_LIST
170
+ it "should throw an exception when reload action is attempted" do
171
+ expect { provider.run_action(:reload) }.to raise_error(Chef::Exceptions::UnsupportedAction)
172
+ end
173
+ end
174
+ context "when launchctl returns empty service pid" do
175
+ let(:launchctl_stdout) { StringIO.new <<~SVC_LIST }
176
+ {
177
+ "LimitLoadToSessionType" = "System";
178
+ "Label" = "io.redis.redis-server";
179
+ "TimeOut" = 30;
180
+ "OnDemand" = false;
181
+ "LastExitStatus" = 0;
182
+ "Program" = "do_some.sh";
183
+ "ProgramArguments" = (
184
+ "path/to/do_something.sh";
185
+ "-f";
186
+ );
187
+ };
188
+ SVC_LIST
192
189
 
193
- before do
194
- provider.load_current_resource
195
- end
190
+ before do
191
+ provider.load_current_resource
192
+ end
196
193
 
197
- it "sets resource running state to false" do
198
- expect(provider.current_resource.running).to be_falsey
199
- end
194
+ it "sets resource running state to false" do
195
+ expect(provider.current_resource.running).to be_falsey
196
+ end
200
197
 
201
- it "sets resouce enabled state to true" do
202
- expect(provider.current_resource.enabled).to be_truthy
203
- end
198
+ it "sets resouce enabled state to true" do
199
+ expect(provider.current_resource.enabled).to be_truthy
204
200
  end
201
+ end
205
202
 
206
- context "when launchctl doesn't return service entry at all" do
207
- let(:launchctl_stdout) { StringIO.new <<~SVC_LIST }
208
- Could not find service "io.redis.redis-server" in domain for system
209
- SVC_LIST
203
+ context "when launchctl doesn't return service entry at all" do
204
+ let(:launchctl_stdout) { StringIO.new <<~SVC_LIST }
205
+ Could not find service "io.redis.redis-server" in domain for system
206
+ SVC_LIST
210
207
 
211
- it "sets service running state to false" do
208
+ it "sets service running state to false" do
209
+ provider.load_current_resource
210
+ expect(provider.current_resource.running).to be_falsey
211
+ end
212
+
213
+ context "and plist for service is not available" do
214
+ before do
215
+ allow(Dir).to receive(:glob).and_return([])
212
216
  provider.load_current_resource
213
- expect(provider.current_resource.running).to be_falsey
214
217
  end
215
218
 
216
- context "and plist for service is not available" do
217
- before do
218
- allow(Dir).to receive(:glob).and_return([])
219
- provider.load_current_resource
220
- end
221
-
222
- it "sets resouce enabled state to false" do
223
- expect(provider.current_resource.enabled).to be_falsey
224
- end
219
+ it "sets resouce enabled state to false" do
220
+ expect(provider.current_resource.enabled).to be_falsey
225
221
  end
222
+ end
226
223
 
227
- context "and plist for service is available" do
228
- before do
229
- allow(Dir).to receive(:glob).and_return([(plist).to_s], [])
230
- provider.load_current_resource
231
- end
224
+ context "and plist for service is available" do
225
+ before do
226
+ allow(Dir).to receive(:glob).and_return([(plist).to_s], [])
227
+ provider.load_current_resource
228
+ end
232
229
 
233
- it "sets resouce enabled state to true" do
234
- expect(provider.current_resource.enabled).to be_truthy
235
- end
230
+ it "sets resouce enabled state to true" do
231
+ expect(provider.current_resource.enabled).to be_truthy
236
232
  end
233
+ end
237
234
 
238
- describe "and several plists match service name" do
239
- it "throws exception" do
240
- allow(Dir).to receive(:glob).and_return([(plist).to_s,
241
- "/Users/wtf/something.plist"])
242
- provider.load_current_resource
243
- provider.define_resource_requirements
244
- expect { provider.process_resource_requirements }.to raise_error(Chef::Exceptions::Service)
245
- end
235
+ describe "and several plists match service name" do
236
+ it "throws exception" do
237
+ allow(Dir).to receive(:glob).and_return([(plist).to_s,
238
+ "/Users/wtf/something.plist"])
239
+ provider.load_current_resource
240
+ provider.define_resource_requirements
241
+ expect { provider.process_resource_requirements }.to raise_error(Chef::Exceptions::Service)
246
242
  end
247
243
  end
248
244
  end
249
- describe "#start_service" do
250
- before do
251
- allow(Chef::Resource::MacosxService).to receive(:new).and_return(current_resource)
252
- provider.load_current_resource
253
- allow(current_resource).to receive(:running).and_return(false)
254
- end
245
+ end
246
+ describe "#start_service" do
247
+ before do
248
+ allow(Chef::Resource::MacosxService).to receive(:new).and_return(current_resource)
249
+ provider.load_current_resource
250
+ allow(current_resource).to receive(:running).and_return(false)
251
+ end
255
252
 
256
- it "calls the start command if one is specified and service is not running" do
257
- allow(new_resource).to receive(:start_command).and_return("cowsay dirty")
253
+ it "calls the start command if one is specified and service is not running" do
254
+ allow(new_resource).to receive(:start_command).and_return("cowsay dirty")
258
255
 
259
- expect(provider).to receive(:shell_out!).with("cowsay dirty", default_env: false)
260
- provider.start_service
261
- end
256
+ expect(provider).to receive(:shell_out!).with("cowsay dirty", default_env: false)
257
+ provider.start_service
258
+ end
262
259
 
263
- it "shows warning message if service is already running" do
264
- allow(current_resource).to receive(:running).and_return(true)
265
- expect(logger).to receive(:trace).with("macosx_service[#{service_name}] already running, not starting")
260
+ it "shows warning message if service is already running" do
261
+ allow(current_resource).to receive(:running).and_return(true)
262
+ expect(logger).to receive(:trace).with("macosx_service[#{service_name}] already running, not starting")
266
263
 
267
- provider.start_service
268
- end
264
+ provider.start_service
265
+ end
269
266
 
270
- it "starts service via launchctl if service found" do
271
- cmd = "launchctl load -w " + session + plist
272
- expect(provider).to receive(:shell_out)
273
- .with(/(#{su_cmd} .#{cmd}.|#{cmd})/, default_env: false)
274
- .and_return(0)
267
+ it "starts service via launchctl if service found" do
268
+ cmd = "launchctl load -w " + session + plist
269
+ expect(provider).to receive(:shell_out)
270
+ .with(/(#{su_cmd} .#{cmd}.|#{cmd})/, default_env: false)
271
+ .and_return(0)
275
272
 
276
- provider.start_service
277
- end
273
+ provider.start_service
278
274
  end
275
+ end
279
276
 
280
- describe "#stop_service" do
281
- before do
282
- allow(Chef::Resource::MacosxService).to receive(:new).and_return(current_resource)
277
+ describe "#stop_service" do
278
+ before do
279
+ allow(Chef::Resource::MacosxService).to receive(:new).and_return(current_resource)
283
280
 
284
- provider.load_current_resource
285
- allow(current_resource).to receive(:running).and_return(true)
286
- end
281
+ provider.load_current_resource
282
+ allow(current_resource).to receive(:running).and_return(true)
283
+ end
287
284
 
288
- it "calls the stop command if one is specified and service is running" do
289
- allow(new_resource).to receive(:stop_command).and_return("kill -9 123")
285
+ it "calls the stop command if one is specified and service is running" do
286
+ allow(new_resource).to receive(:stop_command).and_return("kill -9 123")
290
287
 
291
- expect(provider).to receive(:shell_out!).with("kill -9 123", default_env: false)
292
- provider.stop_service
293
- end
288
+ expect(provider).to receive(:shell_out!).with("kill -9 123", default_env: false)
289
+ provider.stop_service
290
+ end
294
291
 
295
- it "shows warning message if service is not running" do
296
- allow(current_resource).to receive(:running).and_return(false)
297
- expect(logger).to receive(:trace).with("macosx_service[#{service_name}] not running, not stopping")
292
+ it "shows warning message if service is not running" do
293
+ allow(current_resource).to receive(:running).and_return(false)
294
+ expect(logger).to receive(:trace).with("macosx_service[#{service_name}] not running, not stopping")
298
295
 
299
- provider.stop_service
300
- end
296
+ provider.stop_service
297
+ end
301
298
 
302
- it "stops the service via launchctl if service found" do
303
- cmd = "launchctl unload -w " + plist
304
- expect(provider).to receive(:shell_out)
305
- .with(/(#{su_cmd} .#{cmd}.|#{cmd})/, default_env: false)
306
- .and_return(0)
299
+ it "stops the service via launchctl if service found" do
300
+ cmd = "launchctl unload -w " + plist
301
+ expect(provider).to receive(:shell_out)
302
+ .with(/(#{su_cmd} .#{cmd}.|#{cmd})/, default_env: false)
303
+ .and_return(0)
307
304
 
308
- provider.stop_service
309
- end
305
+ provider.stop_service
310
306
  end
307
+ end
311
308
 
312
- describe "#restart_service" do
313
- before do
314
- allow(Chef::Resource::Service).to receive(:new).and_return(current_resource)
309
+ describe "#restart_service" do
310
+ before do
311
+ allow(Chef::Resource::Service).to receive(:new).and_return(current_resource)
315
312
 
316
- provider.load_current_resource
317
- allow(current_resource).to receive(:running).and_return(true)
318
- allow(provider).to receive(:sleep)
319
- end
313
+ provider.load_current_resource
314
+ allow(current_resource).to receive(:running).and_return(true)
315
+ allow(provider).to receive(:sleep)
316
+ end
320
317
 
321
- it "issues a command if given" do
322
- allow(new_resource).to receive(:restart_command).and_return("reload that thing")
318
+ it "issues a command if given" do
319
+ allow(new_resource).to receive(:restart_command).and_return("reload that thing")
323
320
 
324
- expect(provider).to receive(:shell_out!).with("reload that thing", default_env: false)
325
- provider.restart_service
326
- end
321
+ expect(provider).to receive(:shell_out!).with("reload that thing", default_env: false)
322
+ provider.restart_service
323
+ end
327
324
 
328
- it "stops and then starts service" do
329
- expect(provider).to receive(:unload_service)
330
- expect(provider).to receive(:load_service)
325
+ it "stops and then starts service" do
326
+ expect(provider).to receive(:unload_service)
327
+ expect(provider).to receive(:load_service)
331
328
 
332
- provider.restart_service
333
- end
329
+ provider.restart_service
334
330
  end
335
331
  end
336
332
  end