chef 16.3.38-universal-mingw32 → 16.5.64-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 (405) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +2 -2
  4. data/bin/knife +1 -1
  5. data/chef-universal-mingw32.gemspec +0 -1
  6. data/chef.gemspec +2 -1
  7. data/distro/templates/powershell/chef/chef.psm1.erb +18 -18
  8. data/ext/win32-eventlog/Rakefile +2 -2
  9. data/ext/win32-eventlog/chef-log.man.erb +4 -4
  10. data/lib/chef/action_collection.rb +4 -0
  11. data/lib/chef/api_client/registration.rb +2 -2
  12. data/lib/chef/application.rb +19 -17
  13. data/lib/chef/application/apply.rb +17 -12
  14. data/lib/chef/application/base.rb +26 -23
  15. data/lib/chef/application/client.rb +10 -4
  16. data/lib/chef/application/exit_code.rb +13 -4
  17. data/lib/chef/application/knife.rb +22 -11
  18. data/lib/chef/application/solo.rb +2 -1
  19. data/lib/chef/application/windows_service.rb +39 -39
  20. data/lib/chef/application/windows_service_manager.rb +6 -6
  21. data/lib/chef/chef_class.rb +0 -1
  22. data/lib/chef/chef_fs/chef_fs_data_store.rb +54 -54
  23. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
  24. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +8 -8
  25. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
  26. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
  27. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  28. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
  29. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  30. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  31. data/lib/chef/chef_fs/knife.rb +2 -2
  32. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  33. data/lib/chef/client.rb +21 -22
  34. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  35. data/lib/chef/cookbook/synchronizer.rb +2 -2
  36. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  37. data/lib/chef/cookbook_uploader.rb +1 -1
  38. data/lib/chef/data_collector.rb +6 -5
  39. data/lib/chef/data_collector/config_validation.rb +22 -13
  40. data/lib/chef/data_collector/run_end_message.rb +13 -3
  41. data/lib/chef/data_collector/run_start_message.rb +1 -1
  42. data/lib/chef/deprecated.rb +1 -1
  43. data/lib/chef/deprecation/warnings.rb +2 -2
  44. data/lib/chef/digester.rb +2 -2
  45. data/lib/chef/dsl/chef_vault.rb +1 -1
  46. data/lib/chef/dsl/data_query.rb +2 -2
  47. data/lib/chef/dsl/platform_introspection.rb +9 -9
  48. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  49. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  50. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  51. data/lib/chef/environment.rb +4 -4
  52. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  53. data/lib/chef/exceptions.rb +5 -5
  54. data/lib/chef/file_access_control/windows.rb +5 -1
  55. data/lib/chef/file_content_management/tempfile.rb +9 -9
  56. data/lib/chef/formatters/doc.rb +7 -6
  57. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  58. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  59. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  60. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  61. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  62. data/lib/chef/formatters/minimal.rb +5 -4
  63. data/lib/chef/handler.rb +2 -0
  64. data/lib/chef/http.rb +15 -13
  65. data/lib/chef/http/auth_credentials.rb +5 -1
  66. data/lib/chef/http/authenticator.rb +3 -1
  67. data/lib/chef/http/basic_client.rb +4 -2
  68. data/lib/chef/http/decompressor.rb +1 -1
  69. data/lib/chef/http/http_request.rb +7 -5
  70. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  71. data/lib/chef/http/ssl_policies.rb +1 -1
  72. data/lib/chef/json_compat.rb +2 -2
  73. data/lib/chef/knife.rb +4 -4
  74. data/lib/chef/knife/bootstrap.rb +18 -16
  75. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  76. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  77. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
  78. data/lib/chef/knife/client_create.rb +3 -3
  79. data/lib/chef/knife/config_get.rb +8 -97
  80. data/lib/chef/knife/config_get_profile.rb +9 -9
  81. data/lib/chef/knife/config_list.rb +139 -0
  82. data/lib/chef/knife/config_list_profiles.rb +8 -98
  83. data/lib/chef/knife/config_show.rb +127 -0
  84. data/lib/chef/knife/config_use.rb +61 -0
  85. data/lib/chef/knife/config_use_profile.rb +9 -24
  86. data/lib/chef/knife/configure.rb +4 -2
  87. data/lib/chef/knife/cookbook_download.rb +1 -1
  88. data/lib/chef/knife/cookbook_metadata.rb +1 -1
  89. data/lib/chef/knife/cookbook_upload.rb +23 -23
  90. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  91. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  92. data/lib/chef/knife/core/hashed_command_loader.rb +2 -2
  93. data/lib/chef/knife/core/object_loader.rb +1 -1
  94. data/lib/chef/knife/core/windows_bootstrap_context.rb +42 -34
  95. data/lib/chef/knife/delete.rb +15 -15
  96. data/lib/chef/knife/exec.rb +4 -4
  97. data/lib/chef/knife/node_show.rb +2 -2
  98. data/lib/chef/knife/serve.rb +3 -3
  99. data/lib/chef/knife/ssh.rb +22 -7
  100. data/lib/chef/knife/ssl_check.rb +3 -3
  101. data/lib/chef/knife/status.rb +2 -2
  102. data/lib/chef/knife/user_create.rb +2 -2
  103. data/lib/chef/knife/xargs.rb +19 -19
  104. data/lib/chef/knife/yaml_convert.rb +1 -1
  105. data/lib/chef/local_mode.rb +2 -2
  106. data/lib/chef/log/syslog.rb +2 -2
  107. data/lib/chef/log/winevt.rb +2 -2
  108. data/lib/chef/mixin/checksum.rb +0 -1
  109. data/lib/chef/mixin/deep_merge.rb +35 -18
  110. data/lib/chef/mixin/openssl_helper.rb +4 -5
  111. data/lib/chef/mixin/shell_out.rb +1 -1
  112. data/lib/chef/mixin/template.rb +2 -2
  113. data/lib/chef/mixin/uris.rb +2 -2
  114. data/lib/chef/mixin/versioned_api.rb +1 -2
  115. data/lib/chef/mixin/which.rb +1 -1
  116. data/lib/chef/monkey_patches/net_http.rb +4 -4
  117. data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
  118. data/lib/chef/node/attribute.rb +2 -4
  119. data/lib/chef/node_map.rb +2 -2
  120. data/lib/chef/platform/service_helpers.rb +1 -1
  121. data/lib/chef/policy_builder/policyfile.rb +2 -2
  122. data/lib/chef/property.rb +1 -1
  123. data/lib/chef/provider.rb +0 -4
  124. data/lib/chef/provider/cron/unix.rb +0 -2
  125. data/lib/chef/provider/file.rb +2 -2
  126. data/lib/chef/provider/git.rb +5 -5
  127. data/lib/chef/provider/group.rb +0 -2
  128. data/lib/chef/provider/group/suse.rb +5 -5
  129. data/lib/chef/provider/ifconfig.rb +1 -4
  130. data/lib/chef/provider/launchd.rb +2 -2
  131. data/lib/chef/provider/mount.rb +0 -2
  132. data/lib/chef/provider/mount/linux.rb +63 -0
  133. data/lib/chef/provider/package.rb +0 -2
  134. data/lib/chef/provider/package/rubygems.rb +22 -19
  135. data/lib/chef/provider/package/snap.rb +1 -2
  136. data/lib/chef/provider/package/windows.rb +2 -2
  137. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +12 -10
  138. data/lib/chef/provider/package/zypper.rb +1 -1
  139. data/lib/chef/provider/powershell_script.rb +21 -5
  140. data/lib/chef/provider/remote_file/content.rb +3 -0
  141. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  142. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  143. data/lib/chef/provider/route.rb +2 -6
  144. data/lib/chef/provider/service/arch.rb +1 -1
  145. data/lib/chef/provider/service/debian.rb +1 -1
  146. data/lib/chef/provider/service/gentoo.rb +2 -2
  147. data/lib/chef/provider/service/macosx.rb +4 -4
  148. data/lib/chef/provider/service/openbsd.rb +1 -4
  149. data/lib/chef/provider/service/redhat.rb +2 -2
  150. data/lib/chef/provider/service/upstart.rb +1 -1
  151. data/lib/chef/provider/service/windows.rb +10 -10
  152. data/lib/chef/provider/systemd_unit.rb +0 -2
  153. data/lib/chef/provider/template/content.rb +1 -0
  154. data/lib/chef/provider/template_finder.rb +2 -10
  155. data/lib/chef/provider/user/dscl.rb +5 -5
  156. data/lib/chef/provider/user/mac.rb +10 -10
  157. data/lib/chef/provider/windows_task.rb +1 -5
  158. data/lib/chef/provider/zypper_repository.rb +2 -3
  159. data/lib/chef/provider_resolver.rb +1 -1
  160. data/lib/chef/providers.rb +1 -1
  161. data/lib/chef/recipe.rb +2 -2
  162. data/lib/chef/resource.rb +7 -11
  163. data/lib/chef/resource/apt_repository.rb +2 -11
  164. data/lib/chef/resource/bff_package.rb +22 -0
  165. data/lib/chef/resource/breakpoint.rb +57 -2
  166. data/lib/chef/resource/build_essential.rb +1 -1
  167. data/lib/chef/resource/cab_package.rb +29 -0
  168. data/lib/chef/resource/chef_client_cron.rb +32 -25
  169. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  170. data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
  171. data/lib/chef/resource/chef_client_systemd_timer.rb +26 -19
  172. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  173. data/lib/chef/resource/chef_gem.rb +10 -10
  174. data/lib/chef/resource/chef_handler.rb +148 -4
  175. data/lib/chef/resource/chef_sleep.rb +2 -2
  176. data/lib/chef/resource/chef_vault_secret.rb +14 -14
  177. data/lib/chef/resource/cookbook_file.rb +2 -2
  178. data/lib/chef/resource/cron/cron_d.rb +0 -1
  179. data/lib/chef/resource/dnf_package.rb +2 -2
  180. data/lib/chef/resource/dsc_resource.rb +0 -1
  181. data/lib/chef/resource/dsc_script.rb +2 -2
  182. data/lib/chef/resource/execute.rb +8 -9
  183. data/lib/chef/resource/file.rb +4 -4
  184. data/lib/chef/resource/gem_package.rb +5 -5
  185. data/lib/chef/resource/homebrew_package.rb +3 -3
  186. data/lib/chef/resource/homebrew_update.rb +7 -7
  187. data/lib/chef/resource/hostname.rb +19 -19
  188. data/lib/chef/resource/launchd.rb +2 -1
  189. data/lib/chef/resource/locale.rb +2 -2
  190. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  191. data/lib/chef/resource/notify_group.rb +0 -1
  192. data/lib/chef/resource/ohai.rb +46 -3
  193. data/lib/chef/resource/ohai_hint.rb +33 -0
  194. data/lib/chef/resource/openssl_dhparam.rb +29 -5
  195. data/lib/chef/resource/openssl_ec_private_key.rb +8 -3
  196. data/lib/chef/resource/openssl_ec_public_key.rb +4 -2
  197. data/lib/chef/resource/openssl_rsa_private_key.rb +8 -3
  198. data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
  199. data/lib/chef/resource/openssl_x509_certificate.rb +38 -35
  200. data/lib/chef/resource/openssl_x509_crl.rb +21 -10
  201. data/lib/chef/resource/openssl_x509_request.rb +37 -36
  202. data/lib/chef/resource/osx_profile.rb +292 -6
  203. data/lib/chef/resource/plist.rb +1 -1
  204. data/lib/chef/resource/powershell_package_source.rb +6 -6
  205. data/lib/chef/resource/powershell_script.rb +24 -30
  206. data/lib/chef/resource/reboot.rb +2 -2
  207. data/lib/chef/resource/remote_file.rb +3 -3
  208. data/lib/chef/resource/rhsm_register.rb +22 -10
  209. data/lib/chef/resource/ruby_block.rb +2 -2
  210. data/lib/chef/resource/scm/subversion.rb +2 -2
  211. data/lib/chef/resource/service.rb +3 -3
  212. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  213. data/lib/chef/resource/sudo.rb +1 -1
  214. data/lib/chef/resource/support/cron.d.erb +1 -1
  215. data/lib/chef/resource/support/cron_access.erb +1 -1
  216. data/lib/chef/resource/support/sudoer.erb +1 -1
  217. data/lib/chef/resource/support/ulimit.erb +1 -1
  218. data/lib/chef/resource/sysctl.rb +6 -10
  219. data/lib/chef/resource/systemd_unit.rb +2 -2
  220. data/lib/chef/resource/template.rb +2 -2
  221. data/lib/chef/resource/timezone.rb +112 -73
  222. data/lib/chef/resource/windows_ad_join.rb +12 -3
  223. data/lib/chef/resource/windows_audit_policy.rb +3 -0
  224. data/lib/chef/resource/windows_auto_run.rb +2 -0
  225. data/lib/chef/resource/windows_certificate.rb +8 -4
  226. data/lib/chef/resource/windows_dfs_folder.rb +2 -0
  227. data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
  228. data/lib/chef/resource/windows_dfs_server.rb +2 -0
  229. data/lib/chef/resource/windows_dns_record.rb +10 -7
  230. data/lib/chef/resource/windows_dns_zone.rb +12 -7
  231. data/lib/chef/resource/windows_feature.rb +2 -0
  232. data/lib/chef/resource/windows_feature_dism.rb +10 -0
  233. data/lib/chef/resource/windows_feature_powershell.rb +14 -2
  234. data/lib/chef/resource/windows_firewall_profile.rb +24 -20
  235. data/lib/chef/resource/windows_firewall_rule.rb +5 -3
  236. data/lib/chef/resource/windows_font.rb +3 -1
  237. data/lib/chef/resource/windows_package.rb +28 -5
  238. data/lib/chef/resource/windows_pagefile.rb +4 -0
  239. data/lib/chef/resource/windows_printer.rb +22 -21
  240. data/lib/chef/resource/windows_printer_port.rb +20 -17
  241. data/lib/chef/resource/windows_security_policy.rb +2 -0
  242. data/lib/chef/resource/windows_share.rb +5 -3
  243. data/lib/chef/resource/windows_shortcut.rb +2 -0
  244. data/lib/chef/resource/windows_uac.rb +2 -0
  245. data/lib/chef/resource/windows_user_privilege.rb +54 -53
  246. data/lib/chef/resource/windows_workgroup.rb +5 -6
  247. data/lib/chef/resource/yum_package.rb +2 -2
  248. data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
  249. data/lib/chef/resources.rb +3 -1
  250. data/lib/chef/role.rb +2 -2
  251. data/lib/chef/run_context.rb +2 -2
  252. data/lib/chef/run_context/cookbook_compiler.rb +21 -21
  253. data/lib/chef/run_lock.rb +2 -2
  254. data/lib/chef/run_status.rb +2 -6
  255. data/lib/chef/search/query.rb +4 -5
  256. data/lib/chef/server_api_versions.rb +4 -0
  257. data/lib/chef/shell.rb +32 -27
  258. data/lib/chef/shell/ext.rb +11 -11
  259. data/lib/chef/shell/shell_session.rb +2 -2
  260. data/lib/chef/train_transport.rb +5 -104
  261. data/lib/chef/util/backup.rb +1 -1
  262. data/lib/chef/util/diff.rb +14 -14
  263. data/lib/chef/util/powershell/cmdlet.rb +4 -2
  264. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  265. data/lib/chef/util/threaded_job_queue.rb +0 -2
  266. data/lib/chef/version.rb +1 -1
  267. data/lib/chef/win32/crypto.rb +1 -1
  268. data/lib/chef/win32/file.rb +2 -2
  269. data/lib/chef/win32/file/version_info.rb +5 -5
  270. data/lib/chef/win32/registry.rb +1 -2
  271. data/spec/data/shef-config.rb +1 -1
  272. data/spec/data/ssl/chef-rspec.cert +15 -15
  273. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  274. data/spec/functional/resource/aix_service_spec.rb +2 -2
  275. data/spec/functional/resource/aixinit_service_spec.rb +8 -8
  276. data/spec/functional/resource/bff_spec.rb +2 -2
  277. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  278. data/spec/functional/resource/dsc_resource_spec.rb +1 -1
  279. data/spec/functional/resource/dsc_script_spec.rb +0 -1
  280. data/spec/functional/resource/group_spec.rb +6 -6
  281. data/spec/functional/resource/insserv_spec.rb +5 -5
  282. data/spec/functional/resource/link_spec.rb +20 -20
  283. data/spec/functional/resource/powershell_script_spec.rb +4 -4
  284. data/spec/functional/resource/rpm_spec.rb +2 -2
  285. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  286. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  287. data/spec/functional/resource/windows_certificate_spec.rb +3 -3
  288. data/spec/functional/resource/windows_font_spec.rb +49 -0
  289. data/spec/functional/resource/windows_security_policy_spec.rb +0 -3
  290. data/spec/functional/resource/windows_task_spec.rb +13 -13
  291. data/spec/functional/run_lock_spec.rb +24 -24
  292. data/spec/functional/version_spec.rb +3 -3
  293. data/spec/functional/win32/registry_spec.rb +8 -8
  294. data/spec/functional/win32/service_manager_spec.rb +1 -1
  295. data/spec/integration/client/client_spec.rb +4 -4
  296. data/spec/integration/client/exit_code_spec.rb +3 -2
  297. data/spec/integration/client/ipv6_spec.rb +1 -1
  298. data/spec/integration/knife/common_options_spec.rb +12 -12
  299. data/spec/integration/knife/config_list_spec.rb +220 -0
  300. data/spec/integration/knife/config_show_spec.rb +192 -0
  301. data/spec/integration/knife/config_use_spec.rb +198 -0
  302. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  303. data/spec/integration/knife/diff_spec.rb +3 -1
  304. data/spec/integration/knife/download_spec.rb +3 -1
  305. data/spec/integration/knife/serve_spec.rb +5 -5
  306. data/spec/integration/knife/upload_spec.rb +3 -1
  307. data/spec/integration/ohai/ohai_spec.rb +61 -0
  308. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  309. data/spec/integration/recipes/remote_directory.rb +1 -1
  310. data/spec/integration/solo/solo_spec.rb +5 -5
  311. data/spec/spec_helper.rb +12 -9
  312. data/spec/stress/win32/file_spec.rb +1 -1
  313. data/spec/support/chef_helpers.rb +2 -2
  314. data/spec/support/matchers/leak.rb +2 -2
  315. data/spec/support/platform_helpers.rb +17 -35
  316. data/spec/support/platforms/win32/spec_service.rb +1 -1
  317. data/spec/support/shared/functional/directory_resource.rb +1 -1
  318. data/spec/support/shared/functional/execute_resource.rb +1 -1
  319. data/spec/support/shared/functional/file_resource.rb +20 -20
  320. data/spec/support/shared/functional/securable_resource.rb +108 -27
  321. data/spec/support/shared/functional/win32_service.rb +2 -2
  322. data/spec/support/shared/functional/windows_script.rb +3 -3
  323. data/spec/support/shared/integration/integration_helper.rb +22 -52
  324. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  325. data/spec/support/shared/unit/script_resource.rb +6 -20
  326. data/spec/support/shared/unit/windows_script_resource.rb +15 -28
  327. data/spec/tiny_server.rb +0 -1
  328. data/spec/unit/application/client_spec.rb +2 -2
  329. data/spec/unit/application/exit_code_spec.rb +10 -0
  330. data/spec/unit/application_spec.rb +4 -6
  331. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  332. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  333. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  334. data/spec/unit/cookbook_spec.rb +2 -2
  335. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  336. data/spec/unit/data_collector_spec.rb +28 -113
  337. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  338. data/spec/unit/environment_spec.rb +7 -7
  339. data/spec/unit/file_access_control_spec.rb +1 -1
  340. data/spec/unit/http/api_versions_spec.rb +19 -1
  341. data/spec/unit/knife/bootstrap_spec.rb +20 -20
  342. data/spec/unit/knife/cookbook_download_spec.rb +4 -4
  343. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
  344. data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
  345. data/spec/unit/knife/core/ui_spec.rb +1 -0
  346. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +21 -12
  347. data/spec/unit/knife/ssh_spec.rb +2 -2
  348. data/spec/unit/knife/supermarket_share_spec.rb +1 -1
  349. data/spec/unit/lwrp_spec.rb +3 -3
  350. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  351. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  352. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  353. data/spec/unit/mixin/securable_spec.rb +2 -2
  354. data/spec/unit/mixin/template_spec.rb +30 -30
  355. data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
  356. data/spec/unit/node/immutable_collections_spec.rb +8 -4
  357. data/spec/unit/node_spec.rb +5 -5
  358. data/spec/unit/provider/mount/linux_spec.rb +97 -0
  359. data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
  360. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  361. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  362. data/spec/unit/provider/powershell_script_spec.rb +11 -4
  363. data/spec/unit/provider/remote_directory_spec.rb +9 -9
  364. data/spec/unit/provider/route_spec.rb +0 -2
  365. data/spec/unit/provider/service/arch_service_spec.rb +3 -2
  366. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  367. data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
  368. data/spec/unit/provider/service/macosx_spec.rb +3 -3
  369. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  370. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  371. data/spec/unit/provider_resolver_spec.rb +6 -6
  372. data/spec/unit/recipe_spec.rb +1 -1
  373. data/spec/unit/resource/batch_spec.rb +6 -6
  374. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  375. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  376. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  377. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  378. data/spec/unit/resource/execute_spec.rb +113 -118
  379. data/spec/unit/resource/launchd_spec.rb +8 -0
  380. data/spec/unit/resource/osx_profile_spec.rb +299 -0
  381. data/spec/unit/resource/powershell_script_spec.rb +11 -29
  382. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  383. data/spec/unit/resource/script_spec.rb +6 -1
  384. data/spec/unit/resource/timezone_spec.rb +63 -0
  385. data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
  386. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  387. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  388. data/spec/unit/role_spec.rb +11 -11
  389. data/spec/unit/run_lock_spec.rb +5 -1
  390. data/spec/unit/runner_spec.rb +1 -2
  391. data/spec/unit/server_api_spec.rb +43 -16
  392. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  393. data/spec/unit/shell/shell_session_spec.rb +35 -64
  394. data/spec/unit/shell_spec.rb +16 -19
  395. data/spec/unit/train_transport_spec.rb +14 -13
  396. data/spec/unit/util/selinux_spec.rb +2 -0
  397. data/tasks/rspec.rb +1 -3
  398. metadata +42 -33
  399. data/lib/chef/dist.rb +0 -68
  400. data/lib/chef/provider/osx_profile.rb +0 -255
  401. data/spec/integration/knife/config_get_profile_spec.rb +0 -113
  402. data/spec/integration/knife/config_get_spec.rb +0 -191
  403. data/spec/integration/knife/config_list_profiles_spec.rb +0 -218
  404. data/spec/integration/knife/config_use_profile_spec.rb +0 -154
  405. data/spec/unit/provider/osx_profile_spec.rb +0 -255
@@ -387,8 +387,9 @@ describe Chef::Provider::Package::Rubygems do
387
387
  before(:each) do
388
388
  # We choose detect omnibus via RbConfig::CONFIG['bindir'] in Chef::Provider::Package::Rubygems.new
389
389
  allow(RbConfig::CONFIG).to receive(:[]).with("bindir").and_return(bindir)
390
- # Rubygems uses this interally
390
+ # Rubygems uses these two interally
391
391
  allow(RbConfig::CONFIG).to receive(:[]).with("arch").and_call_original
392
+ allow(RbConfig::CONFIG).to receive(:[]).with("ruby_install_name").and_call_original
392
393
  allow(File).to receive(:executable?).and_return false
393
394
  allow(File).to receive(:executable?).with("#{bindir}/gem").and_return true
394
395
  # XXX: we can't stub the provider object directly here because referencing it will create it and that
@@ -467,6 +468,7 @@ describe Chef::Provider::Package::Rubygems do
467
468
  it "searches for a gem binary when running on Omnibus on Unix" do
468
469
  platform_mock :unix do
469
470
  allow(ENV).to receive(:[]).with("PATH").and_return("/usr/bin:/usr/sbin:/opt/chef/embedded/bin")
471
+ allow(ENV).to receive(:[]).with("PATHEXT").and_return(nil)
470
472
  allow(File).to receive(:executable?).with("/usr/bin/gem").and_return(false)
471
473
  allow(File).to receive(:executable?).with("/usr/sbin/gem").and_return(true)
472
474
  allow(File).to receive(:executable?).with("/opt/chef/embedded/bin/gem").and_return(true) # should not get here
@@ -480,6 +482,7 @@ describe Chef::Provider::Package::Rubygems do
480
482
  it "searches for a gem binary when running on Omnibus on Windows" do
481
483
  platform_mock :windows do
482
484
  allow(ENV).to receive(:[]).with("PATH").and_return('C:\windows\system32;C:\windows;C:\Ruby186\bin')
485
+ allow(ENV).to receive(:[]).with("PATHEXT").and_return(nil)
483
486
  allow(File).to receive(:executable?).with('C:\\windows\\system32/gem').and_return(false)
484
487
  allow(File).to receive(:executable?).with('C:\\windows/gem').and_return(false)
485
488
  allow(File).to receive(:executable?).with('C:\\Ruby186\\bin/gem').and_return(true)
@@ -30,14 +30,21 @@ describe Chef::Provider::PowershellScript, "action_run" do
30
30
  Chef::Provider::PowershellScript.new(new_resource, run_context)
31
31
  end
32
32
 
33
- context "when setting interpreter flags" do
33
+ describe "#command" do
34
34
  before(:each) do
35
35
  allow(provider).to receive(:basepath).and_return("C:\\Windows\\system32")
36
+ allow(ChefUtils).to receive(:windows?).and_return(true)
36
37
  end
37
38
 
38
- it "sets the -File flag as the last flag" do
39
- flags = provider.command.split(" ").keep_if { |flag| flag =~ /^-/ }
40
- expect(flags.pop).to eq("-File")
39
+ it "includes the user's flags after the default flags when building the command" do
40
+ new_resource.flags = "-InputFormat Fabulous"
41
+ provider.send(:script_file_path=, "C:\\Temp\\Script.ps1")
42
+
43
+ expected = <<~CMD.strip
44
+ "C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe" -NoLogo -NonInteractive -NoProfile -ExecutionPolicy Bypass -InputFormat None -InputFormat Fabulous -File "C:\\Temp\\Script.ps1"
45
+ CMD
46
+
47
+ expect(provider.command).to eq(expected)
41
48
  end
42
49
  end
43
50
  end
@@ -201,17 +201,17 @@ describe Chef::Provider::RemoteDirectory do
201
201
  @fclass = Chef::CFCCheck.new
202
202
 
203
203
  Dir.mktmpdir do |tmp_dir|
204
- begin
205
- @fclass.file_class.symlink(tmp_dir.dup, symlinked_dir_path)
206
- expect(::File.exist?(symlinked_dir_path)).to be_truthy
207
204
 
208
- @provider.run_action
205
+ @fclass.file_class.symlink(tmp_dir.dup, symlinked_dir_path)
206
+ expect(::File.exist?(symlinked_dir_path)).to be_truthy
207
+
208
+ @provider.run_action
209
+
210
+ expect(::File.exist?(symlinked_dir_path)).to be_falsey
211
+ expect(::File.exist?(tmp_dir)).to be_truthy
212
+ rescue Chef::Exceptions::Win32APIError
213
+ skip "This must be run as an Administrator to create symlinks"
209
214
 
210
- expect(::File.exist?(symlinked_dir_path)).to be_falsey
211
- expect(::File.exist?(tmp_dir)).to be_truthy
212
- rescue Chef::Exceptions::Win32APIError
213
- skip "This must be run as an Administrator to create symlinks"
214
- end
215
215
  end
216
216
  end
217
217
  end
@@ -230,8 +230,6 @@ describe Chef::Provider::Route do
230
230
  @provider.generate_config
231
231
  end
232
232
 
233
- end
234
- %w{ rhel fedora amazon }.each do |platform_family|
235
233
  it "should write a default route file on #{platform_family} platform family" do
236
234
  @node.automatic_attrs[:platform_family] = platform_family
237
235
 
@@ -37,7 +37,8 @@ describe Chef::Provider::Service::Arch, "load_current_resource" do
37
37
 
38
38
  @provider = Chef::Provider::Service::Arch.new(@new_resource, @run_context)
39
39
 
40
- allow(::File).to receive(:exists?).with("/etc/rc.conf").and_return(true)
40
+ allow(::File).to receive(:exist?).with("/etc/rc.d/chef").and_return(false)
41
+ allow(::File).to receive(:exist?).with("/etc/rc.conf").and_return(true)
41
42
  allow(::File).to receive(:read).with("/etc/rc.conf").and_return("DAEMONS=(network apache sshd)")
42
43
  end
43
44
 
@@ -106,7 +107,7 @@ describe Chef::Provider::Service::Arch, "load_current_resource" do
106
107
  end
107
108
 
108
109
  it "should fail if file /etc/rc.conf does not exist" do
109
- allow(::File).to receive(:exists?).with("/etc/rc.conf").and_return(false)
110
+ allow(::File).to receive(:exist?).with("/etc/rc.conf").and_return(false)
110
111
  expect { @provider.load_current_resource }.to raise_error(Chef::Exceptions::Service)
111
112
  end
112
113
 
@@ -47,7 +47,7 @@ describe Chef::Provider::Service::Debian do
47
47
 
48
48
  describe "load_current_resource" do
49
49
  it "ensures /usr/sbin/update-rc.d is available" do
50
- expect(File).to receive(:exists?).with("/usr/sbin/update-rc.d") .and_return(false)
50
+ expect(File).to receive(:exist?).with("/usr/sbin/update-rc.d").and_return(false)
51
51
 
52
52
  @provider.define_resource_requirements
53
53
  expect do
@@ -32,16 +32,16 @@ describe Chef::Provider::Service::Gentoo do
32
32
  allow(Chef::Resource::Service).to receive(:new).and_return(@current_resource)
33
33
  @status = double("Status", exitstatus: 0, stdout: @stdout)
34
34
  allow(@provider).to receive(:shell_out).and_return(@status)
35
- allow(File).to receive(:exists?).with("/etc/init.d/chef").and_return(true)
36
- allow(File).to receive(:exists?).with("/sbin/rc-update").and_return(true)
37
- allow(File).to receive(:exists?).with("/etc/runlevels/default/chef").and_return(false)
35
+ allow(File).to receive(:exist?).with("/etc/init.d/chef").and_return(true)
36
+ allow(File).to receive(:exist?).with("/sbin/rc-update").and_return(true)
37
+ allow(File).to receive(:exist?).with("/etc/runlevels/default/chef").and_return(false)
38
38
  allow(File).to receive(:readable?).with("/etc/runlevels/default/chef").and_return(false)
39
39
  end
40
40
  # new test: found_enabled state
41
41
  #
42
42
  describe "load_current_resource" do
43
43
  it "should raise Chef::Exceptions::Service if /sbin/rc-update does not exist" do
44
- expect(File).to receive(:exists?).with("/sbin/rc-update").and_return(false)
44
+ expect(File).to receive(:exist?).with("/sbin/rc-update").and_return(false)
45
45
  @provider.define_resource_requirements
46
46
  expect { @provider.process_resource_requirements }.to raise_error(Chef::Exceptions::Service)
47
47
  end
@@ -65,7 +65,7 @@ describe Chef::Provider::Service::Gentoo do
65
65
 
66
66
  describe "and the file exists and is readable" do
67
67
  before do
68
- allow(File).to receive(:exists?).with("/etc/runlevels/default/chef").and_return(true)
68
+ allow(File).to receive(:exist?).with("/etc/runlevels/default/chef").and_return(true)
69
69
  allow(File).to receive(:readable?).with("/etc/runlevels/default/chef").and_return(true)
70
70
  end
71
71
  it "should set enabled to true" do
@@ -76,7 +76,7 @@ describe Chef::Provider::Service::Gentoo do
76
76
 
77
77
  describe "and the file exists but is not readable" do
78
78
  before do
79
- allow(File).to receive(:exists?).with("/etc/runlevels/default/chef").and_return(true)
79
+ allow(File).to receive(:exist?).with("/etc/runlevels/default/chef").and_return(true)
80
80
  allow(File).to receive(:readable?).with("/etc/runlevels/default/chef").and_return(false)
81
81
  end
82
82
 
@@ -88,7 +88,7 @@ describe Chef::Provider::Service::Gentoo do
88
88
 
89
89
  describe "and the file does not exist" do
90
90
  before do
91
- allow(File).to receive(:exists?).with("/etc/runlevels/default/chef").and_return(false)
91
+ allow(File).to receive(:exist?).with("/etc/runlevels/default/chef").and_return(false)
92
92
  allow(File).to receive(:readable?).with("/etc/runlevels/default/chef").and_return("foobarbaz")
93
93
  end
94
94
 
@@ -83,7 +83,7 @@ describe Chef::Provider::Service::Macosx do
83
83
  .with(/(#{su_cmd} '#{cmd}'|#{cmd})/, default_env: false)
84
84
  .and_return(double("Status",
85
85
  stdout: launchctl_stdout, exitstatus: 0))
86
- allow(File).to receive(:exists?).and_return([true], [])
86
+ allow(File).to receive(:exist?).and_return([true], [])
87
87
  allow(provider).to receive(:shell_out!)
88
88
  .with(/plutil -convert xml1 -o/, default_env: false)
89
89
  .and_return(double("Status", stdout: plutil_stdout))
@@ -109,7 +109,7 @@ describe Chef::Provider::Service::Macosx do
109
109
 
110
110
  before do
111
111
  allow(Dir).to receive(:glob).and_return([])
112
- allow(File).to receive(:exists?).and_return([true], [])
112
+ allow(File).to receive(:exist?).and_return([true], [])
113
113
  allow(provider).to receive(:shell_out!)
114
114
  .with(/plutil -convert xml1 -o/)
115
115
  .and_raise(Mixlib::ShellOut::ShellCommandFailed)
@@ -165,7 +165,7 @@ describe Chef::Provider::Service::Macosx do
165
165
  describe "running unsupported actions" do
166
166
  before do
167
167
  allow(Dir).to receive(:glob).and_return([(plist).to_s], [])
168
- allow(File).to receive(:exists?).and_return([true], [])
168
+ allow(File).to receive(:exist?).and_return([true], [])
169
169
  end
170
170
  it "should throw an exception when reload action is attempted" do
171
171
  expect { provider.run_action(:reload) }.to raise_error(Chef::Exceptions::UnsupportedAction)
@@ -21,7 +21,7 @@ require "ostruct"
21
21
 
22
22
  shared_examples_for "define_resource_requirements_common" do
23
23
  it "should raise an error if /sbin/chkconfig does not exist" do
24
- allow(File).to receive(:exists?).with("/sbin/chkconfig").and_return(false)
24
+ allow(File).to receive(:exist?).with("/sbin/chkconfig").and_return(false)
25
25
  allow(@provider).to receive(:shell_out).with("/sbin/service chef status").and_raise(Errno::ENOENT)
26
26
  allow(@provider).to receive(:shell_out!).with("/sbin/chkconfig --list chef", returns: [0, 1]).and_raise(Errno::ENOENT)
27
27
  @provider.load_current_resource
@@ -55,7 +55,7 @@ describe "Chef::Provider::Service::Redhat" do
55
55
  @provider = Chef::Provider::Service::Redhat.new(@new_resource, @run_context)
56
56
  @provider.action = :start
57
57
  allow(Chef::Resource::Service).to receive(:new).and_return(@current_resource)
58
- allow(File).to receive(:exists?).with("/sbin/chkconfig").and_return(true)
58
+ allow(File).to receive(:exist?).with("/sbin/chkconfig").and_return(true)
59
59
  end
60
60
 
61
61
  describe "while not in why run mode" do
@@ -74,7 +74,7 @@ describe Chef::Provider::Service::Upstart do
74
74
  @status = double("Status", exitstatus: 0, stdout: "", stderr: "")
75
75
  allow(@provider).to receive(:shell_out).and_return(@status)
76
76
 
77
- allow(::File).to receive(:exists?).and_return(true)
77
+ allow(::File).to receive(:exist?).and_return(true)
78
78
  allow(::File).to receive(:open).and_return(true)
79
79
  end
80
80
 
@@ -181,13 +181,13 @@ describe Chef::Provider::Service::Upstart do
181
181
  end
182
182
 
183
183
  it "should assume disable when no job configuration file is found" do
184
- allow(::File).to receive(:exists?).and_return(false)
184
+ allow(::File).to receive(:exist?).and_return(false)
185
185
  expect(@current_resource).to receive(:running).with(false)
186
186
  @provider.load_current_resource
187
187
  end
188
188
 
189
189
  it "should track state when the upstart configuration file fails to load" do
190
- expect(File).to receive(:exists?).and_return false
190
+ expect(File).to receive(:exist?).and_return false
191
191
  @provider.load_current_resource
192
192
  expect(@provider.instance_variable_get("@config_file_found")).to eq(false)
193
193
  end
@@ -54,11 +54,11 @@ describe Chef::ProviderResolver do
54
54
 
55
55
  let(:provider_resolver) { Chef::ProviderResolver.new(node, resource, action) }
56
56
  let(:resolved_provider) do
57
- begin
58
- resource ? resource.provider_for_action(action).class : nil
59
- rescue Chef::Exceptions::ProviderNotFound
60
- nil
61
- end
57
+
58
+ resource ? resource.provider_for_action(action).class : nil
59
+ rescue Chef::Exceptions::ProviderNotFound
60
+ nil
61
+
62
62
  end
63
63
 
64
64
  let(:service_name) { "test" }
@@ -722,7 +722,7 @@ describe Chef::ProviderResolver do
722
722
  %w{mac_os_x mac_os_x_server} => {
723
723
  group: [ Chef::Resource::Group, Chef::Provider::Group::Dscl ],
724
724
  package: [ Chef::Resource::HomebrewPackage, Chef::Provider::Package::Homebrew ],
725
- osx_profile: [ Chef::Resource::OsxProfile, Chef::Provider::OsxProfile],
725
+ osx_profile: [ Chef::Resource::OsxProfile],
726
726
  user: [ Chef::Resource::User::DsclUser, Chef::Provider::User::Dscl ],
727
727
 
728
728
  "mac_os_x" => {
@@ -25,7 +25,7 @@ require "chef/platform/resource_priority_map"
25
25
  describe Chef::Recipe do
26
26
 
27
27
  let(:cookbook_collection) do
28
- cookbook_repo = File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "cookbooks"))
28
+ cookbook_repo = File.expand_path(File.join(__dir__, "..", "data", "cookbooks"))
29
29
  cookbook_loader = Chef::CookbookLoader.new(cookbook_repo)
30
30
  cookbook_loader.load_cookbooks
31
31
  Chef::CookbookCollection.new(cookbook_loader)
@@ -19,24 +19,24 @@
19
19
  require "spec_helper"
20
20
 
21
21
  describe Chef::Resource::Batch do
22
- let(:node) { Chef::Node.new }
23
22
 
24
- before(:each) do
23
+ let(:resource) do
24
+ node = Chef::Node.new
25
25
  node.default["kernel"] = {}
26
26
  node.default["kernel"][:machine] = :x86_64.to_s
27
27
  node.automatic[:os] = "windows"
28
28
 
29
29
  run_context = Chef::RunContext.new(node, nil, nil)
30
- @resource = Chef::Resource::Batch.new("batch_unit_test", run_context)
30
+ Chef::Resource::Batch.new("batch_unit_test", run_context)
31
31
  end
32
32
 
33
33
  it "creates a new Chef::Resource::Batch" do
34
- expect(@resource).to be_a_kind_of(Chef::Resource::Batch)
34
+ expect(resource).to be_a_kind_of(Chef::Resource::Batch)
35
35
  end
36
36
 
37
37
  context "windows script" do
38
- let(:resource_instance) { @resource }
39
- let(:resource_instance_name ) { @resource.command }
38
+ let(:windows_script_resource) { resource }
39
+ let(:resource_instance_name ) { resource.command }
40
40
  let(:resource_name) { :batch }
41
41
  let(:interpreter_file_name) { "cmd.exe" }
42
42
 
@@ -29,6 +29,11 @@ describe Chef::Resource::ChefClientCron do
29
29
  expect(resource.action).to eql([:add])
30
30
  end
31
31
 
32
+ it "supports :add and :remove actions" do
33
+ expect { resource.action :add }.not_to raise_error
34
+ expect { resource.action :remove }.not_to raise_error
35
+ end
36
+
32
37
  it "coerces splay to an Integer" do
33
38
  resource.splay "10"
34
39
  expect(resource.splay).to eql(10)
@@ -42,6 +47,19 @@ describe Chef::Resource::ChefClientCron do
42
47
  expect(resource.chef_binary_path).to eql("/opt/chef/bin/chef-client")
43
48
  end
44
49
 
50
+ it "raises an error if nice is less than -20" do
51
+ expect { resource.nice(-21) }.to raise_error(Chef::Exceptions::ValidationFailed)
52
+ end
53
+
54
+ it "raises an error if nice is greater than 19" do
55
+ expect { resource.nice(20) }.to raise_error(Chef::Exceptions::ValidationFailed)
56
+ end
57
+
58
+ it "coerces nice to an Integer" do
59
+ resource.nice "10"
60
+ expect(resource.nice).to eql(10)
61
+ end
62
+
45
63
  it "log_directory is /Library/Logs/Chef on macOS systems" do
46
64
  node.automatic_attrs[:platform_family] = "mac_os_x"
47
65
  node.automatic_attrs[:platform] = "mac_os_x"
@@ -53,11 +71,6 @@ describe Chef::Resource::ChefClientCron do
53
71
  expect(resource.log_directory).to eql("/var/log/chef")
54
72
  end
55
73
 
56
- it "supports :add and :remove actions" do
57
- expect { resource.action :add }.not_to raise_error
58
- expect { resource.action :remove }.not_to raise_error
59
- end
60
-
61
74
  describe "#splay_sleep_time" do
62
75
  it "uses shard_seed attribute if present" do
63
76
  node.automatic_attrs[:shard_seed] = "73399073"
@@ -71,7 +84,7 @@ describe Chef::Resource::ChefClientCron do
71
84
  end
72
85
  end
73
86
 
74
- describe "#cron_command" do
87
+ describe "#client_command" do
75
88
  before do
76
89
  allow(provider).to receive(:splay_sleep_time).and_return("123")
77
90
  end
@@ -79,57 +92,65 @@ describe Chef::Resource::ChefClientCron do
79
92
  let(:root_path) { windows? ? "C:\\chef/client.rb" : "/etc/chef/client.rb" }
80
93
 
81
94
  it "creates a valid command if using all default properties" do
82
- expect(provider.cron_command).to eql(
95
+ expect(provider.client_command).to eql(
83
96
  "/bin/sleep 123; /opt/chef/bin/chef-client -c #{root_path} -L /var/log/chef/client.log"
84
97
  )
85
98
  end
86
99
 
87
100
  it "uses daemon_options if set" do
88
101
  resource.daemon_options ["--foo 1", "--bar 2"]
89
- expect(provider.cron_command).to eql(
102
+ expect(provider.client_command).to eql(
90
103
  "/bin/sleep 123; /opt/chef/bin/chef-client --foo 1 --bar 2 -c #{root_path} -L /var/log/chef/client.log"
91
104
  )
92
105
  end
93
106
 
94
107
  it "uses custom config dir if set" do
95
108
  resource.config_directory "/etc/some_other_dir"
96
- expect(provider.cron_command).to eql("/bin/sleep 123; /opt/chef/bin/chef-client -c /etc/some_other_dir/client.rb -L /var/log/chef/client.log")
109
+ expect(provider.client_command).to eql("/bin/sleep 123; /opt/chef/bin/chef-client -c /etc/some_other_dir/client.rb -L /var/log/chef/client.log")
97
110
  end
98
111
 
99
112
  it "uses custom log files / paths if set" do
100
113
  resource.log_file_name "my-client.log"
101
114
  resource.log_directory "/var/log/my-chef/"
102
- expect(provider.cron_command).to eql(
115
+ expect(provider.client_command).to eql(
103
116
  "/bin/sleep 123; /opt/chef/bin/chef-client -c #{root_path} -L /var/log/my-chef/my-client.log"
104
117
  )
105
118
  end
106
119
 
107
120
  it "uses mailto if set" do
108
121
  resource.mailto "bob@example.com"
109
- expect(provider.cron_command).to eql(
122
+ expect(provider.client_command).to eql(
110
123
  "/bin/sleep 123; /opt/chef/bin/chef-client -c #{root_path} -L /var/log/chef/client.log || echo \"Chef Infra Client execution failed\""
111
124
  )
112
125
  end
113
126
 
114
127
  it "uses custom chef-client binary if set" do
115
128
  resource.chef_binary_path "/usr/local/bin/chef-client"
116
- expect(provider.cron_command).to eql(
129
+ expect(provider.client_command).to eql(
117
130
  "/bin/sleep 123; /usr/local/bin/chef-client -c #{root_path} -L /var/log/chef/client.log"
118
131
  )
119
132
  end
120
133
 
121
134
  it "appends to the log file appending if set to false" do
122
135
  resource.append_log_file false
123
- expect(provider.cron_command).to eql(
136
+ expect(provider.client_command).to eql(
124
137
  "/bin/sleep 123; /opt/chef/bin/chef-client -c #{root_path} > /var/log/chef/client.log 2>&1"
125
138
  )
126
139
  end
127
140
 
128
141
  it "sets the license acceptance flag if set" do
129
142
  resource.accept_chef_license true
130
- expect(provider.cron_command).to eql(
143
+ expect(provider.client_command).to eql(
131
144
  "/bin/sleep 123; /opt/chef/bin/chef-client -c #{root_path} --chef-license accept -L /var/log/chef/client.log"
132
145
  )
133
146
  end
147
+
148
+ it "uses nice if set" do
149
+ allow(provider).to receive(:which).with("nice").and_return("/usr/bin/nice")
150
+ resource.nice(-15)
151
+ expect(provider.client_command).to eql(
152
+ "/bin/sleep 123; /usr/bin/nice -n -15 /opt/chef/bin/chef-client -c #{root_path} -L /var/log/chef/client.log"
153
+ )
154
+ end
134
155
  end
135
156
  end
@@ -0,0 +1,127 @@
1
+ #
2
+ # Author:: Tim Smith (<tsmith@chef.io>)
3
+ # Copyright:: Copyright (c) Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require "spec_helper"
20
+
21
+ describe Chef::Resource::ChefClientLaunchd do
22
+ let(:node) { Chef::Node.new }
23
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
24
+ let(:run_context) { Chef::RunContext.new(node, {}, events) }
25
+ let(:resource) { Chef::Resource::ChefClientLaunchd.new("fakey_fakerton", run_context) }
26
+ let(:provider) { resource.provider_for_action(:enable) }
27
+
28
+ it "sets the default action as :enable" do
29
+ expect(resource.action).to eql([:enable])
30
+ end
31
+
32
+ it "supports :enable and :disable actions" do
33
+ expect { resource.action :enable }.not_to raise_error
34
+ expect { resource.action :disable }.not_to raise_error
35
+ end
36
+
37
+ it "coerces splay to an Integer" do
38
+ resource.splay "10"
39
+ expect(resource.splay).to eql(10)
40
+ end
41
+
42
+ it "raises an error if splay is not a positive number" do
43
+ expect { resource.splay("-10") }.to raise_error(Chef::Exceptions::ValidationFailed)
44
+ end
45
+
46
+ it "builds a default value for chef_binary_path dist values" do
47
+ expect(resource.chef_binary_path).to eql("/opt/chef/bin/chef-client")
48
+ end
49
+
50
+ it "raises an error if interval is not a positive number" do
51
+ expect { resource.interval("-10") }.to raise_error(Chef::Exceptions::ValidationFailed)
52
+ end
53
+
54
+ it "coerces interval to an Integer" do
55
+ resource.interval "10"
56
+ expect(resource.interval).to eql(10)
57
+ end
58
+
59
+ it "raises an error if nice is less than -20" do
60
+ expect { resource.nice(-21) }.to raise_error(Chef::Exceptions::ValidationFailed)
61
+ end
62
+
63
+ it "raises an error if nice is greater than 19" do
64
+ expect { resource.nice(20) }.to raise_error(Chef::Exceptions::ValidationFailed)
65
+ end
66
+
67
+ it "coerces nice to an Integer" do
68
+ resource.nice "10"
69
+ expect(resource.nice).to eql(10)
70
+ end
71
+
72
+ describe "#splay_sleep_time" do
73
+ it "uses shard_seed attribute if present" do
74
+ node.automatic_attrs[:shard_seed] = "73399073"
75
+ expect(provider.splay_sleep_time(300)).to satisfy { |v| v >= 0 && v <= 300 }
76
+ end
77
+
78
+ it "uses a hex conversion of a md5 hash of the splay if present" do
79
+ node.automatic_attrs[:shard_seed] = nil
80
+ allow(node).to receive(:name).and_return("test_node")
81
+ expect(provider.splay_sleep_time(300)).to satisfy { |v| v >= 0 && v <= 300 }
82
+ end
83
+ end
84
+
85
+ describe "#client_command" do
86
+ before do
87
+ allow(provider).to receive(:splay_sleep_time).and_return("123")
88
+ end
89
+
90
+ let(:root_path) { windows? ? "C:\\chef/client.rb" : "/etc/chef/client.rb" }
91
+
92
+ it "creates a valid command if using all default properties" do
93
+ expect(provider.client_command).to eql(
94
+ "/bin/sleep 123; /opt/chef/bin/chef-client -c #{root_path} -L /Library/Logs/Chef/client.log"
95
+ )
96
+ end
97
+
98
+ it "adds custom daemon options from daemon_options property" do
99
+ resource.daemon_options %w{foo bar}
100
+ expect(provider.client_command).to eql(
101
+ "/bin/sleep 123; /opt/chef/bin/chef-client foo bar -c #{root_path} -L /Library/Logs/Chef/client.log"
102
+ )
103
+ end
104
+
105
+ it "adds license acceptance flags if the property is set" do
106
+ resource.accept_chef_license true
107
+ expect(provider.client_command).to eql(
108
+ "/bin/sleep 123; /opt/chef/bin/chef-client -c #{root_path} -L /Library/Logs/Chef/client.log --chef-license accept"
109
+ )
110
+ end
111
+
112
+ it "uses custom config dir if set" do
113
+ resource.config_directory "/etc/some_other_dir"
114
+ expect(provider.client_command).to eql(
115
+ "/bin/sleep 123; /opt/chef/bin/chef-client -c /etc/some_other_dir/client.rb -L /Library/Logs/Chef/client.log"
116
+ )
117
+ end
118
+
119
+ it "uses custom log files / paths if set" do
120
+ resource.log_file_name "my-client.log"
121
+ resource.log_directory "/var/log/my-chef/"
122
+ expect(provider.client_command).to eql(
123
+ "/bin/sleep 123; /opt/chef/bin/chef-client -c #{root_path} -L /var/log/my-chef/my-client.log"
124
+ )
125
+ end
126
+ end
127
+ end