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
@@ -17,30 +17,18 @@
17
17
  #
18
18
 
19
19
  require "spec_helper"
20
- require "chef/mixin/shell_out"
21
20
  require "tmpdir"
22
- require "shellwords"
23
21
 
24
22
  # Deploy relies heavily on symlinks, so it doesn't work on windows.
25
23
  describe Chef::Resource::Git, requires_git: true do
26
- include Chef::Mixin::ShellOut
27
- let(:file_cache_path) { Dir.mktmpdir }
24
+ include RecipeDSLHelper
25
+
28
26
  # Some versions of git complains when the deploy directory is
29
27
  # already created. Here we intentionally don't create the deploy
30
28
  # directory beforehand.
31
29
  let(:base_dir_path) { Dir.mktmpdir }
32
30
  let(:deploy_directory) { File.join(base_dir_path, make_tmpname("git_base")) }
33
31
 
34
- let(:node) do
35
- Chef::Node.new.tap do |n|
36
- n.name "rspec-test"
37
- n.consume_external_attrs(@ohai.data, {})
38
- end
39
- end
40
-
41
- let(:event_dispatch) { Chef::EventDispatch::Dispatcher.new }
42
- let(:run_context) { Chef::RunContext.new(node, {}, event_dispatch) }
43
-
44
32
  # These tests use git's bundle feature, which is a way to export an entire
45
33
  # git repo (or subset of commits) as a single file.
46
34
  #
@@ -64,33 +52,31 @@ describe Chef::Resource::Git, requires_git: true do
64
52
  let(:rev_testing) { "972d153654503bccec29f630c5dd369854a561e8" }
65
53
  let(:rev_head) { "d294fbfd05aa7709ad9a9b8ef6343b17d355bf5f" }
66
54
 
67
- let(:git_user_config) do
68
- <<~E
69
- [user]
70
- name = frodoTbaggins
71
- email = frodo@shire.org
72
- E
73
- end
74
-
75
55
  before(:each) do
76
- Chef::Log.level = :warn # silence git command live streams
77
- @old_file_cache_path = Chef::Config[:file_cache_path]
78
- shell_out!("git clone \"#{git_bundle_repo}\" example", cwd: origin_repo_dir)
79
- File.open("#{origin_repo}/.git/config", "a+") { |f| f.print(git_user_config) }
80
- Chef::Config[:file_cache_path] = file_cache_path
56
+ shell_out!("git", "clone", git_bundle_repo, "example", cwd: origin_repo_dir)
57
+ File.open("#{origin_repo}/.git/config", "a+") do |f|
58
+ f.print <<~EOF
59
+ [user]
60
+ name = frodoTbaggins
61
+ email = frodo@shire.org
62
+ EOF
63
+ end
81
64
  end
82
65
 
83
66
  after(:each) do
84
- Chef::Config[:file_cache_path] = @old_file_cache_path
85
67
  FileUtils.remove_entry_secure deploy_directory if File.exist?(deploy_directory)
86
68
  FileUtils.remove_entry_secure base_dir_path
87
- FileUtils.remove_entry_secure file_cache_path
88
69
  FileUtils.remove_entry_secure origin_repo_dir
89
70
  end
90
71
 
91
- before(:all) do
92
- @ohai = Ohai::System.new
93
- @ohai.all_plugins(%w{platform os})
72
+ def expect_revision_to_be(revision, version)
73
+ rev_ver = shell_out!("git", "rev-parse", revision, cwd: deploy_directory).stdout.strip
74
+ expect(rev_ver).to eq(version)
75
+ end
76
+
77
+ def expect_branch_to_be(branch)
78
+ head_branch = shell_out!("git name-rev --name-only HEAD", cwd: deploy_directory).stdout.strip
79
+ expect(head_branch).to eq(branch)
94
80
  end
95
81
 
96
82
  context "working with pathes with special characters" do
@@ -102,156 +88,220 @@ describe Chef::Resource::Git, requires_git: true do
102
88
  end
103
89
 
104
90
  it "clones a repository with a space in the path" do
105
- Chef::Resource::Git.new(deploy_directory, run_context).tap do |r|
106
- r.repository "#{path_with_spaces}/example-repo.gitbundle"
107
- end.run_action(:sync)
91
+ repo = "#{path_with_spaces}/example-repo.gitbundle"
92
+ git(deploy_directory) do
93
+ repository repo
94
+ end.should_be_updated
95
+ expect_revision_to_be("HEAD", rev_head)
108
96
  end
109
97
  end
110
98
 
111
99
  context "when deploying from an annotated tag" do
112
- let(:basic_git_resource) do
113
- Chef::Resource::Git.new(deploy_directory, run_context).tap do |r|
114
- r.repository origin_repo
115
- r.revision "v1.0.0"
116
- end
117
- end
118
-
119
- # We create a copy of the basic_git_resource so that we can run
120
- # the resource again and verify that it doesn't update.
121
- let(:copy_git_resource) do
122
- Chef::Resource::Git.new(deploy_directory, run_context).tap do |r|
123
- r.repository origin_repo
124
- r.revision "v1.0.0"
125
- end
126
- end
127
-
128
100
  it "checks out the revision pointed to by the tag commit, not the tag commit itself" do
129
- basic_git_resource.run_action(:sync)
130
- head_rev = shell_out!("git rev-parse HEAD", cwd: deploy_directory, returns: [0]).stdout.strip
131
- expect(head_rev).to eq(v1_commit)
101
+ git deploy_directory do
102
+ repository origin_repo
103
+ revision "v1.0.0"
104
+ end.should_be_updated
105
+ expect_revision_to_be("HEAD", v1_commit)
106
+ expect_branch_to_be("tags/v1.0.0^0") # detached
132
107
  # also verify the tag commit itself is what we expect as an extra sanity check
133
- rev = shell_out!("git rev-parse v1.0.0", cwd: deploy_directory, returns: [0]).stdout.strip
134
- expect(rev).to eq(v1_tag)
108
+ expect_revision_to_be("v1.0.0", v1_tag)
135
109
  end
136
110
 
137
111
  it "doesn't update if up-to-date" do
138
- # this used to fail because we didn't resolve the annotated tag
139
- # properly to the pointed to commit.
140
- basic_git_resource.run_action(:sync)
141
- head_rev = shell_out!("git rev-parse HEAD", cwd: deploy_directory, returns: [0]).stdout.strip
142
- expect(head_rev).to eq(v1_commit)
143
-
144
- copy_git_resource.run_action(:sync)
145
- expect(copy_git_resource).not_to be_updated
112
+ git deploy_directory do
113
+ repository origin_repo
114
+ revision "v1.0.0"
115
+ end.should_be_updated
116
+ git deploy_directory do
117
+ repository origin_repo
118
+ revision "v1.0.0"
119
+ expect_branch_to_be("tags/v1.0.0^0") # detached
120
+ end.should_not_be_updated
146
121
  end
147
122
  end
148
123
 
149
124
  context "when deploying from a SHA revision" do
150
- let(:basic_git_resource) do
151
- Chef::Resource::Git.new(deploy_directory, run_context).tap do |r|
152
- r.repository git_bundle_repo
153
- end
125
+ it "checks out the expected revision ed18" do
126
+ git deploy_directory do
127
+ repository git_bundle_repo
128
+ revision rev_foo
129
+ end.should_be_updated
130
+ expect_revision_to_be("HEAD", rev_foo)
131
+ expect_branch_to_be("master~1") # detached
154
132
  end
155
133
 
156
- # We create a copy of the basic_git_resource so that we can run
157
- # the resource again and verify that it doesn't update.
158
- let(:copy_git_resource) do
159
- Chef::Resource::Git.new(deploy_directory, run_context).tap do |r|
160
- r.repository origin_repo
161
- end
162
- end
163
-
164
- it "checks out the expected revision ed18" do
165
- basic_git_resource.revision rev_foo
166
- basic_git_resource.run_action(:sync)
167
- head_rev = shell_out!("git rev-parse HEAD", cwd: deploy_directory, returns: [0]).stdout.strip
168
- expect(head_rev).to eq(rev_foo)
134
+ it "checks out the expected revision ed18 to a local branch" do
135
+ git deploy_directory do
136
+ repository git_bundle_repo
137
+ revision rev_foo
138
+ checkout_branch "deploy"
139
+ end.should_be_updated
140
+ expect_revision_to_be("HEAD", rev_foo)
141
+ expect_branch_to_be("deploy") # detached
169
142
  end
170
143
 
171
144
  it "doesn't update if up-to-date" do
172
- basic_git_resource.revision rev_foo
173
- basic_git_resource.run_action(:sync)
174
- head_rev = shell_out!("git rev-parse HEAD", cwd: deploy_directory, returns: [0]).stdout.strip
175
- expect(head_rev).to eq(rev_foo)
176
-
177
- copy_git_resource.revision rev_foo
178
- copy_git_resource.run_action(:sync)
179
- expect(copy_git_resource).not_to be_updated
145
+ git deploy_directory do
146
+ repository git_bundle_repo
147
+ revision rev_foo
148
+ end.should_be_updated
149
+ expect_revision_to_be("HEAD", rev_foo)
150
+
151
+ git deploy_directory do
152
+ repository origin_repo
153
+ revision rev_foo
154
+ end.should_not_be_updated
155
+ expect_branch_to_be("master~1") # detached
180
156
  end
181
157
 
182
158
  it "checks out the expected revision 972d" do
183
- basic_git_resource.revision rev_testing
184
- basic_git_resource.run_action(:sync)
185
- head_rev = shell_out!("git rev-parse HEAD", cwd: deploy_directory, returns: [0]).stdout.strip
186
- expect(head_rev).to eq(rev_testing)
159
+ git deploy_directory do
160
+ repository git_bundle_repo
161
+ revision rev_testing
162
+ end.should_be_updated
163
+ expect_revision_to_be("HEAD", rev_testing)
164
+ expect_branch_to_be("master~2") # detached
165
+ end
166
+
167
+ it "checks out the expected revision 972d to a local branch" do
168
+ git deploy_directory do
169
+ repository git_bundle_repo
170
+ revision rev_testing
171
+ checkout_branch "deploy"
172
+ end.should_be_updated
173
+ expect_revision_to_be("HEAD", rev_testing)
174
+ expect_branch_to_be("deploy")
187
175
  end
188
176
  end
189
177
 
190
178
  context "when deploying from a revision named 'HEAD'" do
191
- let(:basic_git_resource) do
192
- Chef::Resource::Git.new(deploy_directory, run_context).tap do |r|
193
- r.repository origin_repo
194
- r.revision "HEAD"
195
- end
179
+ it "checks out the expected revision" do
180
+ git deploy_directory do
181
+ repository origin_repo
182
+ revision "HEAD"
183
+ end.should_be_updated
184
+ expect_revision_to_be("HEAD", rev_head)
185
+ expect_branch_to_be("master")
196
186
  end
197
187
 
198
- it "checks out the expected revision" do
199
- basic_git_resource.run_action(:sync)
200
- head_rev = shell_out!("git rev-parse HEAD", cwd: deploy_directory, returns: [0]).stdout.strip
201
- expect(head_rev).to eq(rev_head)
188
+ it "checks out the expected revision, and is idempotent" do
189
+ git deploy_directory do
190
+ repository origin_repo
191
+ revision "HEAD"
192
+ end.should_be_updated
193
+ git deploy_directory do
194
+ repository origin_repo
195
+ revision "HEAD"
196
+ end.should_not_be_updated
197
+ expect_revision_to_be("HEAD", rev_head)
198
+ expect_branch_to_be("master")
199
+ end
200
+
201
+ it "checks out the expected revision to a local branch" do
202
+ git deploy_directory do
203
+ repository origin_repo
204
+ revision "HEAD"
205
+ checkout_branch "deploy"
206
+ end.should_be_updated
207
+ expect_revision_to_be("HEAD", rev_head)
208
+ expect_branch_to_be("deploy")
202
209
  end
203
210
  end
204
211
 
205
212
  context "when deploying from the default revision" do
206
- let(:basic_git_resource) do
207
- Chef::Resource::Git.new(deploy_directory, run_context).tap do |r|
208
- r.repository origin_repo
209
- # use default
210
- end
213
+ it "checks out HEAD as the default revision" do
214
+ git deploy_directory do
215
+ repository origin_repo
216
+ end.should_be_updated
217
+ expect_revision_to_be("HEAD", rev_head)
218
+ expect_branch_to_be("master")
211
219
  end
212
220
 
213
- it "checks out HEAD as the default revision" do
214
- basic_git_resource.run_action(:sync)
215
- head_rev = shell_out!("git rev-parse HEAD", cwd: deploy_directory, returns: [0]).stdout.strip
216
- expect(head_rev).to eq(rev_head)
221
+ it "checks out HEAD as the default revision, and is idempotent" do
222
+ git deploy_directory do
223
+ repository origin_repo
224
+ end.should_be_updated
225
+ git deploy_directory do
226
+ repository origin_repo
227
+ end.should_not_be_updated
228
+ expect_revision_to_be("HEAD", rev_head)
229
+ expect_branch_to_be("master")
230
+ end
231
+
232
+ it "checks out HEAD as the default revision to a local branch" do
233
+ git deploy_directory do
234
+ repository origin_repo
235
+ checkout_branch "deploy"
236
+ end.should_be_updated
237
+ expect_revision_to_be("HEAD", rev_head)
238
+ expect_branch_to_be("deploy")
217
239
  end
218
240
  end
219
241
 
220
242
  context "when dealing with a repo with a degenerate tag named 'HEAD'" do
221
243
  before do
222
- shell_out!("git tag -m\"degenerate tag\" HEAD ed181b3419b6f489bedab282348162a110d6d3a1",
223
- cwd: origin_repo)
244
+ shell_out!("git", "tag", "-m\"degenerate tag\"", "HEAD", "ed181b3419b6f489bedab282348162a110d6d3a1", cwd: origin_repo)
224
245
  end
225
246
 
226
- let(:basic_git_resource) do
227
- Chef::Resource::Git.new(deploy_directory, run_context).tap do |r|
228
- r.repository origin_repo
229
- r.revision "HEAD"
230
- end
247
+ it "checks out the (master) HEAD revision and ignores the tag" do
248
+ git deploy_directory do
249
+ repository origin_repo
250
+ revision "HEAD"
251
+ end.should_be_updated
252
+ expect_revision_to_be("HEAD", rev_head)
253
+ expect_branch_to_be("master")
231
254
  end
232
255
 
233
- let(:git_resource_default_rev) do
234
- Chef::Resource::Git.new(deploy_directory, run_context).tap do |r|
235
- r.repository origin_repo
236
- # use default of revision
237
- end
256
+ it "checks out the (master) HEAD revision and ignores the tag, and is idempotent" do
257
+ git deploy_directory do
258
+ repository origin_repo
259
+ revision "HEAD"
260
+ end.should_be_updated
261
+ git deploy_directory do
262
+ repository origin_repo
263
+ revision "HEAD"
264
+ end.should_not_be_updated
265
+ expect_revision_to_be("HEAD", rev_head)
266
+ expect_branch_to_be("master")
238
267
  end
239
268
 
240
- it "checks out the (master) HEAD revision and ignores the tag" do
241
- basic_git_resource.run_action(:sync)
242
- head_rev = shell_out!("git rev-parse HEAD",
243
- cwd: deploy_directory,
244
- returns: [0]).stdout.strip
245
- expect(head_rev).to eq(rev_head)
269
+ it "checks out the (master) HEAD revision and ignores the tag to a local branch" do
270
+ git deploy_directory do
271
+ repository origin_repo
272
+ revision "HEAD"
273
+ checkout_branch "deploy"
274
+ end.should_be_updated
275
+ expect_revision_to_be("HEAD", rev_head)
276
+ expect_branch_to_be("deploy")
246
277
  end
247
278
 
248
279
  it "checks out the (master) HEAD revision when no revision is specified (ignores tag)" do
249
- git_resource_default_rev.run_action(:sync)
250
- head_rev = shell_out!("git rev-parse HEAD",
251
- cwd: deploy_directory,
252
- returns: [0]).stdout.strip
253
- expect(head_rev).to eq(rev_head)
280
+ git deploy_directory do
281
+ repository origin_repo
282
+ end.should_be_updated
283
+ expect_revision_to_be("HEAD", rev_head)
284
+ expect_branch_to_be("master")
285
+ end
286
+
287
+ it "checks out the (master) HEAD revision when no revision is specified (ignores tag), and is idempotent" do
288
+ git deploy_directory do
289
+ repository origin_repo
290
+ end.should_be_updated
291
+ git deploy_directory do
292
+ repository origin_repo
293
+ end.should_not_be_updated
294
+ expect_revision_to_be("HEAD", rev_head)
295
+ expect_branch_to_be("master")
254
296
  end
255
297
 
298
+ it "checks out the (master) HEAD revision when no revision is specified (ignores tag) to a local branch" do
299
+ git deploy_directory do
300
+ repository origin_repo
301
+ checkout_branch "deploy"
302
+ end.should_be_updated
303
+ expect_revision_to_be("HEAD", rev_head)
304
+ expect_branch_to_be("deploy")
305
+ end
256
306
  end
257
307
  end
@@ -22,7 +22,7 @@ require "functional/resource/base"
22
22
  require "chef/mixin/shell_out"
23
23
  require "fileutils"
24
24
 
25
- describe Chef::Resource::Service, :requires_root, :sles11 do
25
+ describe Chef::Resource::Service, :requires_root, :opensuse do
26
26
 
27
27
  include Chef::Mixin::ShellOut
28
28
 
@@ -0,0 +1,232 @@
1
+ #
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "spec_helper"
19
+
20
+ # Deploy relies heavily on symlinks, so it doesn't work on windows.
21
+ describe Chef::Resource::Launchd, :macos_only, requires_root: true do
22
+ include RecipeDSLHelper
23
+
24
+ before(:each) do
25
+ shell_out("launchctl unload -wF /Library/LaunchDaemons/io.chef.testing.fake.plist")
26
+ FileUtils.rm_f "/Library/LaunchDaemons/io.chef.testing.fake.plist"
27
+ end
28
+
29
+ after(:each) do
30
+ shell_out("launchctl unload -wF /Library/LaunchDaemons/io.chef.testing.fake.plist")
31
+ FileUtils.rm_f "/Library/LaunchDaemons/io.chef.testing.fake.plist"
32
+ end
33
+
34
+ context ":enable" do
35
+ it "enables a service" do
36
+ launchd "io.chef.testing.fake" do
37
+ program_arguments [
38
+ "/bin/sleep",
39
+ "60",
40
+ ]
41
+ run_at_load true
42
+ type "daemon"
43
+ action :enable
44
+ end.should_be_updated
45
+ expect(File.exist?("/Library/LaunchDaemons/io.chef.testing.fake.plist")).to be true
46
+ expect(shell_out!("launchctl list io.chef.testing.fake").stdout).to match('"PID" = \d+')
47
+ expect(shell_out!("launchctl list io.chef.testing.fake").stdout).not_to match('"PID" = 0')
48
+ end
49
+
50
+ it "should be idempotent" do
51
+ launchd "io.chef.testing.fake" do
52
+ program_arguments [
53
+ "/bin/sleep",
54
+ "60",
55
+ ]
56
+ run_at_load true
57
+ type "daemon"
58
+ action :enable
59
+ end.should_be_updated
60
+ launchd "io.chef.testing.fake" do
61
+ program_arguments [
62
+ "/bin/sleep",
63
+ "60",
64
+ ]
65
+ run_at_load true
66
+ type "daemon"
67
+ action :enable
68
+ end.should_not_be_updated
69
+ end
70
+ end
71
+
72
+ context ":create" do
73
+ it "creates a service" do
74
+ launchd "io.chef.testing.fake" do
75
+ program_arguments [
76
+ "/bin/sleep",
77
+ "60",
78
+ ]
79
+ run_at_load true
80
+ type "daemon"
81
+ action :create
82
+ end.should_be_updated
83
+ expect(File.exist?("/Library/LaunchDaemons/io.chef.testing.fake.plist")).to be true
84
+ expect(shell_out("launchctl list io.chef.testing.fake").exitstatus).not_to eql(0)
85
+ end
86
+
87
+ it "should be idempotent" do
88
+ launchd "io.chef.testing.fake" do
89
+ program_arguments [
90
+ "/bin/sleep",
91
+ "60",
92
+ ]
93
+ run_at_load true
94
+ type "daemon"
95
+ action :create
96
+ end.should_be_updated
97
+ launchd "io.chef.testing.fake" do
98
+ program_arguments [
99
+ "/bin/sleep",
100
+ "60",
101
+ ]
102
+ run_at_load true
103
+ type "daemon"
104
+ action :create
105
+ end.should_not_be_updated
106
+ end
107
+ end
108
+
109
+ context ":create_if_missing" do
110
+ it "creates a service if it is missing" do
111
+ launchd "io.chef.testing.fake" do
112
+ program_arguments [
113
+ "/bin/sleep",
114
+ "60",
115
+ ]
116
+ run_at_load true
117
+ type "daemon"
118
+ action :create_if_missing
119
+ end.should_be_updated
120
+ expect(File.exist?("/Library/LaunchDaemons/io.chef.testing.fake.plist")).to be true
121
+ expect(shell_out("launchctl list io.chef.testing.fake").exitstatus).not_to eql(0)
122
+ end
123
+ it "is idempotent" do
124
+ launchd "io.chef.testing.fake" do
125
+ program_arguments [
126
+ "/bin/sleep",
127
+ "60",
128
+ ]
129
+ run_at_load true
130
+ type "daemon"
131
+ action :create_if_missing
132
+ end.should_be_updated
133
+ launchd "io.chef.testing.fake" do
134
+ program_arguments [
135
+ "/bin/sleep",
136
+ "60",
137
+ ]
138
+ run_at_load true
139
+ type "daemon"
140
+ action :create_if_missing
141
+ end.should_not_be_updated
142
+ end
143
+ end
144
+
145
+ context ":delete" do
146
+ it "deletes a service" do
147
+ launchd "io.chef.testing.fake" do
148
+ program_arguments [
149
+ "/bin/sleep",
150
+ "60",
151
+ ]
152
+ run_at_load true
153
+ type "daemon"
154
+ action :enable
155
+ end
156
+ launchd "io.chef.testing.fake" do
157
+ type "daemon"
158
+ action :delete
159
+ end.should_be_updated
160
+ expect(File.exist?("/Library/LaunchDaemons/io.chef.testing.fake.plist")).to be false
161
+ expect(shell_out("launchctl list io.chef.testing.fake").exitstatus).not_to eql(0)
162
+ end
163
+ it "is idempotent" do
164
+ launchd "io.chef.testing.fake" do
165
+ program_arguments [
166
+ "/bin/sleep",
167
+ "60",
168
+ ]
169
+ run_at_load true
170
+ type "daemon"
171
+ action :enable
172
+ end
173
+ launchd "io.chef.testing.fake" do
174
+ type "daemon"
175
+ action :delete
176
+ end.should_be_updated
177
+ launchd "io.chef.testing.fake" do
178
+ type "daemon"
179
+ action :delete
180
+ end.should_not_be_updated
181
+ end
182
+ it "works if the file does not exist" do
183
+ launchd "io.chef.testing.fake" do
184
+ type "daemon"
185
+ action :delete
186
+ end.should_not_be_updated
187
+ end
188
+ end
189
+
190
+ context ":disable" do
191
+ it "deletes a service" do
192
+ launchd "io.chef.testing.fake" do
193
+ program_arguments [
194
+ "/bin/sleep",
195
+ "1",
196
+ ]
197
+ type "daemon"
198
+ action :enable
199
+ end
200
+ launchd "io.chef.testing.fake" do
201
+ type "daemon"
202
+ action :disable
203
+ end.should_be_updated
204
+ expect(File.exist?("/Library/LaunchDaemons/io.chef.testing.fake.plist")).to be true
205
+ expect(shell_out("launchctl list io.chef.testing.fake").exitstatus).not_to eql(0)
206
+ end
207
+ it "is idempotent" do
208
+ launchd "io.chef.testing.fake" do
209
+ program_arguments [
210
+ "/bin/sleep",
211
+ "1",
212
+ ]
213
+ type "daemon"
214
+ action :enable
215
+ end
216
+ launchd "io.chef.testing.fake" do
217
+ type "daemon"
218
+ action :disable
219
+ end.should_be_updated
220
+ launchd "io.chef.testing.fake" do
221
+ type "daemon"
222
+ action :disable
223
+ end.should_not_be_updated
224
+ end
225
+ it "should work if the plist does not exist" do
226
+ launchd "io.chef.testing.fake" do
227
+ type "daemon"
228
+ action :disable
229
+ end.should_not_be_updated
230
+ end
231
+ end
232
+ end