chef 12.13.37-universal-mingw32 → 12.14.60-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 (338) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +48 -95
  3. data/Gemfile +6 -1
  4. data/README.md +9 -11
  5. data/VERSION +1 -1
  6. data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +0 -1
  7. data/acceptance/Gemfile +4 -7
  8. data/acceptance/Gemfile.lock +59 -92
  9. data/acceptance/basics/test/integration/helpers/serverspec/Gemfile +8 -0
  10. data/acceptance/data-collector/test/integration/helpers/serverspec/Gemfile +8 -0
  11. data/acceptance/fips/test/integration/fips-integration/serverspec/Gemfile +6 -0
  12. data/acceptance/fips/test/integration/fips-unit-functional/serverspec/Gemfile +4 -0
  13. data/chef.gemspec +3 -2
  14. data/lib/chef/application/client.rb +4 -4
  15. data/lib/chef/application/solo.rb +2 -2
  16. data/lib/chef/chef_fs/command_line.rb +36 -34
  17. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +2 -2
  18. data/lib/chef/chef_fs/file_pattern.rb +1 -1
  19. data/lib/chef/chef_fs/file_system.rb +139 -137
  20. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +2 -6
  21. data/lib/chef/cookbook/cookbook_version_loader.rb +27 -22
  22. data/lib/chef/cookbook/metadata.rb +1 -1
  23. data/lib/chef/cookbook/synchronizer.rb +3 -3
  24. data/lib/chef/cookbook_site_streaming_uploader.rb +3 -3
  25. data/lib/chef/cookbook_uploader.rb +1 -1
  26. data/lib/chef/cookbook_version.rb +6 -6
  27. data/lib/chef/dsl/powershell.rb +1 -1
  28. data/lib/chef/event_dispatch/base.rb +2 -2
  29. data/lib/chef/exceptions.rb +1 -1
  30. data/lib/chef/file_cache.rb +1 -1
  31. data/lib/chef/formatters/base.rb +2 -2
  32. data/lib/chef/formatters/doc.rb +2 -2
  33. data/lib/chef/http.rb +48 -18
  34. data/lib/chef/http/auth_credentials.rb +1 -1
  35. data/lib/chef/http/basic_client.rb +11 -2
  36. data/lib/chef/http/socketless_chef_zero_client.rb +2 -2
  37. data/lib/chef/key.rb +55 -56
  38. data/lib/chef/knife.rb +70 -61
  39. data/lib/chef/knife/client_delete.rb +2 -2
  40. data/lib/chef/knife/cookbook_bulk_delete.rb +1 -1
  41. data/lib/chef/knife/cookbook_show.rb +1 -1
  42. data/lib/chef/knife/core/gem_glob_loader.rb +3 -3
  43. data/lib/chef/knife/search.rb +2 -2
  44. data/lib/chef/knife/ssh.rb +19 -21
  45. data/lib/chef/knife/status.rb +2 -2
  46. data/lib/chef/mixin/command/unix.rb +2 -2
  47. data/lib/chef/mixin/powershell_type_coercions.rb +1 -1
  48. data/lib/chef/mixin/properties.rb +3 -0
  49. data/lib/chef/mixin/securable.rb +2 -2
  50. data/lib/chef/mixin/shell_out.rb +30 -0
  51. data/lib/chef/mixin/uris.rb +2 -1
  52. data/lib/chef/mixin/windows_architecture_helper.rb +3 -4
  53. data/lib/chef/monkey_patches/webrick-utils.rb +2 -2
  54. data/lib/chef/monologger.rb +1 -1
  55. data/lib/chef/node.rb +2 -2
  56. data/lib/chef/node/attribute.rb +3 -3
  57. data/lib/chef/platform/provider_mapping.rb +5 -2
  58. data/lib/chef/property.rb +14 -3
  59. data/lib/chef/provider/apt_repository.rb +3 -7
  60. data/lib/chef/provider/apt_update.rb +4 -6
  61. data/lib/chef/provider/cron.rb +1 -2
  62. data/lib/chef/provider/dsc_script.rb +4 -4
  63. data/lib/chef/provider/group/usermod.rb +1 -1
  64. data/lib/chef/provider/link.rb +10 -3
  65. data/lib/chef/provider/osx_profile.rb +10 -10
  66. data/lib/chef/provider/package.rb +2 -12
  67. data/lib/chef/provider/package/rubygems.rb +17 -16
  68. data/lib/chef/provider/package/windows.rb +2 -0
  69. data/lib/chef/provider/package/windows/exe.rb +1 -1
  70. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +0 -2
  71. data/lib/chef/provider/package/yum/rpm_utils.rb +8 -8
  72. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  73. data/lib/chef/provider/remote_file/ftp.rb +2 -2
  74. data/lib/chef/provider/remote_file/sftp.rb +2 -2
  75. data/lib/chef/provider/service/debian.rb +2 -2
  76. data/lib/chef/provider/service/simple.rb +4 -3
  77. data/lib/chef/provider/service/solaris.rb +1 -1
  78. data/lib/chef/provider/service/systemd.rb +2 -2
  79. data/lib/chef/provider/service/upstart.rb +8 -5
  80. data/lib/chef/provider/support/yum_repo.erb +125 -0
  81. data/lib/chef/provider/systemd_unit.rb +11 -2
  82. data/lib/chef/provider/template_finder.rb +1 -1
  83. data/lib/chef/provider/user.rb +20 -16
  84. data/lib/chef/provider/user/aix.rb +5 -2
  85. data/lib/chef/provider/user/dscl.rb +1 -0
  86. data/lib/chef/provider/user/linux.rb +128 -0
  87. data/lib/chef/provider/user/pw.rb +2 -1
  88. data/lib/chef/provider/user/solaris.rb +3 -2
  89. data/lib/chef/provider/user/useradd.rb +5 -4
  90. data/lib/chef/provider/user/windows.rb +1 -1
  91. data/lib/chef/provider/windows_script.rb +5 -2
  92. data/lib/chef/provider/yum_repository.rb +121 -0
  93. data/lib/chef/providers.rb +4 -2
  94. data/lib/chef/resource.rb +7 -9
  95. data/lib/chef/resource/conditional.rb +9 -1
  96. data/lib/chef/resource/launchd.rb +1 -1
  97. data/lib/chef/resource/user.rb +3 -3
  98. data/lib/chef/resource/user/aix_user.rb +31 -0
  99. data/lib/chef/resource/user/dscl_user.rb +31 -0
  100. data/lib/chef/resource/user/linux_user.rb +51 -0
  101. data/lib/chef/resource/user/pw_user.rb +31 -0
  102. data/lib/chef/resource/user/solaris_user.rb +31 -0
  103. data/lib/chef/resource/user/windows_user.rb +31 -0
  104. data/lib/chef/resource/yum_package.rb +13 -12
  105. data/lib/chef/resource/yum_repository.rb +76 -0
  106. data/lib/chef/resource_builder.rb +1 -1
  107. data/lib/chef/resource_collection/stepable_iterator.rb +1 -3
  108. data/lib/chef/resource_reporter.rb +5 -5
  109. data/lib/chef/resources.rb +7 -0
  110. data/lib/chef/run_context.rb +5 -3
  111. data/lib/chef/run_context/cookbook_compiler.rb +3 -2
  112. data/lib/chef/run_list.rb +2 -2
  113. data/lib/chef/search/query.rb +11 -8
  114. data/lib/chef/shell/ext.rb +2 -2
  115. data/lib/chef/shell/shell_session.rb +1 -1
  116. data/lib/chef/util/dsc/configuration_generator.rb +1 -1
  117. data/lib/chef/util/powershell/cmdlet.rb +5 -2
  118. data/lib/chef/util/selinux.rb +1 -1
  119. data/lib/chef/version.rb +1 -1
  120. data/lib/chef/version_class.rb +2 -2
  121. data/lib/chef/version_constraint.rb +2 -2
  122. data/lib/chef/win32/api/error.rb +2 -2
  123. data/lib/chef/win32/api/net.rb +1 -1
  124. data/lib/chef/win32/eventlog.rb +1 -1
  125. data/lib/chef/win32/net.rb +1 -1
  126. data/lib/chef/win32/security/sid.rb +1 -1
  127. data/spec/functional/assets/testchefsubsys +2 -3
  128. data/spec/functional/event_loggers/windows_eventlog_spec.rb +11 -8
  129. data/spec/functional/file_content_management/deploy_strategies_spec.rb +1 -1
  130. data/spec/functional/http/simple_spec.rb +2 -2
  131. data/spec/functional/knife/cookbook_delete_spec.rb +5 -5
  132. data/spec/functional/knife/exec_spec.rb +6 -6
  133. data/spec/functional/knife/ssh_spec.rb +4 -4
  134. data/spec/functional/notifications_spec.rb +2 -2
  135. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  136. data/spec/functional/rebooter_spec.rb +5 -5
  137. data/spec/functional/resource/bash_spec.rb +2 -2
  138. data/spec/functional/resource/deploy_revision_spec.rb +1 -1
  139. data/spec/functional/resource/dpkg_package_spec.rb +2 -2
  140. data/spec/functional/resource/dsc_resource_spec.rb +5 -5
  141. data/spec/functional/resource/dsc_script_spec.rb +27 -22
  142. data/spec/functional/resource/env_spec.rb +4 -4
  143. data/spec/functional/resource/execute_spec.rb +4 -4
  144. data/spec/functional/resource/group_spec.rb +20 -8
  145. data/spec/functional/resource/link_spec.rb +34 -0
  146. data/spec/functional/resource/ohai_spec.rb +6 -6
  147. data/spec/functional/resource/reboot_spec.rb +2 -2
  148. data/spec/functional/resource/remote_file_spec.rb +16 -7
  149. data/spec/functional/resource/user/dscl_spec.rb +3 -3
  150. data/spec/functional/resource/user/useradd_spec.rb +32 -26
  151. data/spec/functional/resource/windows_service_spec.rb +15 -15
  152. data/spec/functional/rest_spec.rb +2 -2
  153. data/spec/functional/run_lock_spec.rb +9 -9
  154. data/spec/functional/tiny_server_spec.rb +9 -8
  155. data/spec/functional/win32/crypto_spec.rb +1 -1
  156. data/spec/functional/win32/security_spec.rb +8 -8
  157. data/spec/integration/client/client_spec.rb +6 -4
  158. data/spec/integration/knife/chef_repo_path_spec.rb +70 -1
  159. data/spec/integration/knife/upload_spec.rb +1 -1
  160. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +6 -6
  161. data/spec/integration/recipes/noop_resource_spec.rb +4 -4
  162. data/spec/integration/recipes/provider_choice.rb +3 -3
  163. data/spec/integration/recipes/recipe_dsl_spec.rb +318 -317
  164. data/spec/integration/recipes/resource_action_spec.rb +50 -54
  165. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +34 -34
  166. data/spec/integration/recipes/resource_load_spec.rb +24 -24
  167. data/spec/integration/solo/solo_spec.rb +21 -30
  168. data/spec/scripts/ssl-serve.rb +1 -1
  169. data/spec/spec_helper.rb +1 -0
  170. data/spec/stress/win32/security_spec.rb +4 -4
  171. data/spec/support/chef_helpers.rb +22 -0
  172. data/spec/support/platform_helpers.rb +5 -1
  173. data/spec/support/shared/context/client.rb +3 -2
  174. data/spec/support/shared/functional/file_resource.rb +5 -4
  175. data/spec/support/shared/functional/http.rb +16 -16
  176. data/spec/support/shared/functional/securable_resource.rb +5 -5
  177. data/spec/support/shared/functional/win32_service.rb +5 -7
  178. data/spec/support/shared/integration/app_server_support.rb +1 -3
  179. data/spec/support/shared/integration/knife_support.rb +0 -2
  180. data/spec/support/shared/shared_examples.rb +2 -2
  181. data/spec/support/shared/unit/api_versioning.rb +2 -2
  182. data/spec/support/shared/unit/application_dot_d.rb +9 -6
  183. data/spec/support/shared/unit/provider/file.rb +2 -2
  184. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +49 -80
  185. data/spec/support/shared/unit/resource/static_provider_resolution.rb +2 -2
  186. data/spec/support/shared/unit/script_resource.rb +4 -4
  187. data/spec/support/shared/unit/user_and_client_shared.rb +4 -4
  188. data/spec/tiny_server.rb +51 -66
  189. data/spec/unit/api_client_v1_spec.rb +2 -2
  190. data/spec/unit/application_spec.rb +1 -1
  191. data/spec/unit/audit/audit_event_proxy_spec.rb +34 -27
  192. data/spec/unit/audit/audit_reporter_spec.rb +32 -23
  193. data/spec/unit/audit/control_group_data_spec.rb +19 -14
  194. data/spec/unit/chef_class_spec.rb +1 -1
  195. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +1 -1
  196. data/spec/unit/chef_fs/diff_spec.rb +4 -4
  197. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +4 -4
  198. data/spec/unit/chef_fs/file_system_spec.rb +2 -2
  199. data/spec/unit/chef_fs/parallelizer.rb +5 -7
  200. data/spec/unit/cookbook/metadata_spec.rb +98 -98
  201. data/spec/unit/cookbook/synchronizer_spec.rb +7 -0
  202. data/spec/unit/cookbook_loader_spec.rb +24 -24
  203. data/spec/unit/cookbook_version_file_specificity_spec.rb +8 -8
  204. data/spec/unit/daemon_spec.rb +1 -1
  205. data/spec/unit/data_bag_item_spec.rb +18 -18
  206. data/spec/unit/data_bag_spec.rb +2 -2
  207. data/spec/unit/data_collector/messages/helpers_spec.rb +9 -9
  208. data/spec/unit/data_collector/messages_spec.rb +2 -2
  209. data/spec/unit/data_collector_spec.rb +19 -19
  210. data/spec/unit/dsl/audit_spec.rb +3 -3
  211. data/spec/unit/dsl/data_query_spec.rb +3 -2
  212. data/spec/unit/dsl/declare_resource_spec.rb +10 -10
  213. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +3 -2
  214. data/spec/unit/encrypted_data_bag_item_spec.rb +3 -2
  215. data/spec/unit/environment_spec.rb +6 -6
  216. data/spec/unit/event_dispatch/dispatcher_spec.rb +2 -2
  217. data/spec/unit/file_access_control_spec.rb +3 -3
  218. data/spec/unit/file_content_management/tempfile_spec.rb +2 -2
  219. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +2 -2
  220. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +2 -2
  221. data/spec/unit/http/basic_client_spec.rb +20 -0
  222. data/spec/unit/http/validate_content_length_spec.rb +8 -8
  223. data/spec/unit/http_spec.rb +14 -0
  224. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +2 -2
  225. data/spec/unit/knife/bootstrap/client_builder_spec.rb +2 -2
  226. data/spec/unit/knife/bootstrap_spec.rb +8 -6
  227. data/spec/unit/knife/client_bulk_delete_spec.rb +8 -8
  228. data/spec/unit/knife/client_edit_spec.rb +2 -2
  229. data/spec/unit/knife/configure_client_spec.rb +2 -2
  230. data/spec/unit/knife/cookbook_metadata_spec.rb +4 -4
  231. data/spec/unit/knife/cookbook_site_install_spec.rb +6 -5
  232. data/spec/unit/knife/cookbook_site_share_spec.rb +2 -2
  233. data/spec/unit/knife/core/hashed_command_loader_spec.rb +5 -4
  234. data/spec/unit/knife/core/node_editor_spec.rb +3 -3
  235. data/spec/unit/knife/core/ui_spec.rb +2 -2
  236. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -3
  237. data/spec/unit/knife/data_bag_show_spec.rb +3 -2
  238. data/spec/unit/knife/key_create_spec.rb +14 -14
  239. data/spec/unit/knife/key_delete_spec.rb +2 -2
  240. data/spec/unit/knife/key_edit_spec.rb +16 -16
  241. data/spec/unit/knife/key_list_spec.rb +6 -6
  242. data/spec/unit/knife/key_show_spec.rb +4 -4
  243. data/spec/unit/knife/status_spec.rb +3 -2
  244. data/spec/unit/knife/user_create_spec.rb +4 -4
  245. data/spec/unit/knife_spec.rb +7 -6
  246. data/spec/unit/lwrp_spec.rb +6 -6
  247. data/spec/unit/mixin/api_version_request_handling_spec.rb +2 -2
  248. data/spec/unit/mixin/command_spec.rb +17 -14
  249. data/spec/unit/mixin/deprecation_spec.rb +1 -1
  250. data/spec/unit/mixin/homebrew_user_spec.rb +2 -2
  251. data/spec/unit/mixin/params_validate_spec.rb +53 -52
  252. data/spec/unit/mixin/powershell_out_spec.rb +2 -2
  253. data/spec/unit/mixin/powershell_type_coercions_spec.rb +2 -2
  254. data/spec/unit/mixin/shell_out_spec.rb +1 -1
  255. data/spec/unit/mixin/xml_escape_spec.rb +3 -3
  256. data/spec/unit/node_spec.rb +2 -2
  257. data/spec/unit/platform/query_helpers_spec.rb +3 -3
  258. data/spec/unit/property_spec.rb +4 -4
  259. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  260. data/spec/unit/provider/cron/unix_spec.rb +4 -4
  261. data/spec/unit/provider/cron_spec.rb +2 -2
  262. data/spec/unit/provider/deploy_spec.rb +8 -8
  263. data/spec/unit/provider/dsc_resource_spec.rb +11 -10
  264. data/spec/unit/provider/dsc_script_spec.rb +9 -9
  265. data/spec/unit/provider/env/windows_spec.rb +8 -8
  266. data/spec/unit/provider/file/content_spec.rb +6 -6
  267. data/spec/unit/provider/file_spec.rb +4 -4
  268. data/spec/unit/provider/launchd_spec.rb +2 -1
  269. data/spec/unit/provider/link_spec.rb +155 -0
  270. data/spec/unit/provider/mount/mount_spec.rb +5 -5
  271. data/spec/unit/provider/mount/solaris_spec.rb +48 -48
  272. data/spec/unit/provider/osx_profile_spec.rb +6 -0
  273. data/spec/unit/provider/package/chocolatey_spec.rb +4 -4
  274. data/spec/unit/provider/package/freebsd/port_spec.rb +4 -4
  275. data/spec/unit/provider/package/rubygems_spec.rb +50 -44
  276. data/spec/unit/provider/package/windows/exe_spec.rb +9 -0
  277. data/spec/unit/provider/package/yum_spec.rb +61 -60
  278. data/spec/unit/provider/package_spec.rb +2 -2
  279. data/spec/unit/provider/powershell_script_spec.rb +4 -4
  280. data/spec/unit/provider/remote_directory_spec.rb +1 -1
  281. data/spec/unit/provider/remote_file/ftp_spec.rb +4 -4
  282. data/spec/unit/provider/remote_file/local_file_spec.rb +4 -2
  283. data/spec/unit/provider/remote_file/sftp_spec.rb +4 -4
  284. data/spec/unit/provider/remote_file_spec.rb +4 -4
  285. data/spec/unit/provider/script_spec.rb +4 -4
  286. data/spec/unit/provider/service/debian_service_spec.rb +4 -4
  287. data/spec/unit/provider/service/freebsd_service_spec.rb +12 -8
  288. data/spec/unit/provider/service/openbsd_service_spec.rb +12 -8
  289. data/spec/unit/provider/service/systemd_service_spec.rb +4 -4
  290. data/spec/unit/provider/service/upstart_service_spec.rb +27 -12
  291. data/spec/unit/provider/service/windows_spec.rb +10 -10
  292. data/spec/unit/provider/systemd_unit_spec.rb +2 -2
  293. data/spec/unit/provider/template/content_spec.rb +8 -8
  294. data/spec/unit/provider/template_spec.rb +8 -8
  295. data/spec/unit/provider/user/dscl_spec.rb +51 -51
  296. data/spec/unit/provider/user/linux_spec.rb +76 -0
  297. data/spec/unit/provider/user/pw_spec.rb +3 -6
  298. data/spec/unit/provider/user/solaris_spec.rb +5 -5
  299. data/spec/unit/provider/user/windows_spec.rb +3 -3
  300. data/spec/unit/provider/user_spec.rb +2 -2
  301. data/spec/unit/provider/yum_repository_spec.rb +35 -0
  302. data/spec/unit/provider_resolver_spec.rb +306 -264
  303. data/spec/unit/recipe_spec.rb +8 -7
  304. data/spec/unit/resource/apt_repository_spec.rb +4 -4
  305. data/spec/unit/resource/apt_update_spec.rb +4 -4
  306. data/spec/unit/resource/conditional_spec.rb +46 -0
  307. data/spec/unit/resource/dsc_resource_spec.rb +8 -8
  308. data/spec/unit/resource/dsc_script_spec.rb +4 -4
  309. data/spec/unit/resource/freebsd_package_spec.rb +6 -6
  310. data/spec/unit/resource/launchd_spec.rb +3 -2
  311. data/spec/unit/resource/osx_profile_spec.rb +3 -2
  312. data/spec/unit/resource/remote_file_spec.rb +6 -6
  313. data/spec/unit/resource/service_spec.rb +14 -14
  314. data/spec/unit/resource/user_spec.rb +1 -1
  315. data/spec/unit/resource/yum_repository_spec.rb +49 -0
  316. data/spec/unit/resource_collection_spec.rb +4 -4
  317. data/spec/unit/resource_definition_spec.rb +11 -11
  318. data/spec/unit/resource_reporter_spec.rb +4 -4
  319. data/spec/unit/resource_resolver_spec.rb +6 -6
  320. data/spec/unit/resource_spec.rb +36 -16
  321. data/spec/unit/run_context/child_run_context_spec.rb +4 -4
  322. data/spec/unit/run_context/cookbook_compiler_spec.rb +43 -1
  323. data/spec/unit/run_context_spec.rb +8 -8
  324. data/spec/unit/run_list/run_list_expansion_spec.rb +2 -2
  325. data/spec/unit/runner_spec.rb +2 -2
  326. data/spec/unit/search/query_spec.rb +15 -14
  327. data/spec/unit/user_v1_spec.rb +8 -8
  328. data/spec/unit/util/dsc/configuration_generator_spec.rb +12 -12
  329. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +12 -9
  330. data/spec/unit/util/dsc/resource_store.rb +8 -6
  331. data/spec/unit/util/editor_spec.rb +6 -6
  332. data/spec/unit/util/powershell/cmdlet_spec.rb +10 -10
  333. data/tasks/bin/bundle-platform +1 -0
  334. data/tasks/bin/bundler_patch.rb +27 -0
  335. data/tasks/cbgb.rb +2 -2
  336. data/tasks/maintainers.rb +2 -2
  337. metadata +37 -8
  338. data/spec/unit/provider/user/useradd_spec.rb +0 -51
@@ -55,13 +55,13 @@ shared_examples_for "user or client create" do
55
55
  end
56
56
 
57
57
  context "when chef_key is returned by the server" do
58
- let(:chef_key) {
58
+ let(:chef_key) do
59
59
  {
60
60
  "chef_key" => {
61
61
  "public_key" => "some_public_key",
62
62
  },
63
63
  }
64
- }
64
+ end
65
65
 
66
66
  it "puts the public key into the objectr returned by create" do
67
67
  expect(rest_v1).to receive(:post).with(url, payload).and_return(payload.merge(chef_key))
@@ -70,14 +70,14 @@ shared_examples_for "user or client create" do
70
70
  end
71
71
 
72
72
  context "when private_key is returned in chef_key" do
73
- let(:chef_key) {
73
+ let(:chef_key) do
74
74
  {
75
75
  "chef_key" => {
76
76
  "public_key" => "some_public_key",
77
77
  "private_key" => "some_private_key",
78
78
  },
79
79
  }
80
- }
80
+ end
81
81
 
82
82
  it "puts the private key into the object returned by create" do
83
83
  expect(rest_v1).to receive(:post).with(url, payload).and_return(payload.merge(chef_key))
@@ -20,97 +20,82 @@ require "rubygems"
20
20
  require "webrick"
21
21
  require "webrick/https"
22
22
  require "rack"
23
- #require 'thin'
23
+ require "thread"
24
24
  require "singleton"
25
25
  require "open-uri"
26
26
  require "chef/config"
27
27
 
28
28
  module TinyServer
29
29
 
30
- class Server < Rack::Server
31
-
32
- attr_writer :app
33
-
34
- def self.setup(options = nil, &block)
35
- tiny_app = new(options)
36
- app_code = Rack::Builder.new(&block).to_app
37
- tiny_app.app = app_code
38
- tiny_app
39
- end
40
-
41
- def shutdown
42
- server.shutdown
43
- end
44
- end
45
-
46
30
  class Manager
47
31
 
48
32
  # 5 == debug, 3 == warning
49
33
  LOGGER = WEBrick::Log.new(STDOUT, 3)
50
34
  DEFAULT_OPTIONS = {
51
- :server => "webrick",
52
- :Port => 9000,
53
- :Host => "localhost",
54
- :environment => :none,
55
- :Logger => LOGGER,
56
- :AccessLog => [] # Remove this option to enable the access log when debugging.
35
+ Port: 9000,
36
+ Host: "localhost",
37
+ Logger: LOGGER,
38
+ # SSLEnable: options[:ssl],
39
+ # SSLCertName: [ [ 'CN', WEBrick::Utils::getservername ] ],
40
+ AccessLog: [], # Remove this option to enable the access log when debugging.
57
41
  }
58
42
 
59
- def initialize(options = nil)
60
- @options = options ? DEFAULT_OPTIONS.merge(options) : DEFAULT_OPTIONS
43
+ def initialize(**options)
44
+ @options = DEFAULT_OPTIONS.merge(options)
61
45
  @creator = caller.first
62
46
  end
63
47
 
64
- def start
48
+ attr_reader :options
49
+ attr_reader :creator
50
+ attr_reader :server
51
+
52
+ def start(timeout = 5)
53
+ raise "Server already started!" if server
54
+
55
+ # Create the server (but don't start yet)
56
+ start_queue = Queue.new
57
+ @server = create_server(StartCallback: proc { start_queue << true })
58
+
65
59
  @server_thread = Thread.new do
66
- @server = Server.setup(@options) do
67
- run API.instance
68
- end
69
- @old_handler = trap(:INT, "EXIT")
70
- @server.start
60
+ # Ensure any exceptions will cause the main rspec thread to fail too
61
+ Thread.current.abort_on_exception = true
62
+ server.start
71
63
  end
72
- block_until_started
73
- trap(:INT, @old_handler)
74
- end
75
64
 
76
- def url
77
- "http://localhost:#{@options[:Port]}"
65
+ # Wait for the StartCallback to tell us we've started
66
+ Timeout.timeout(timeout) do
67
+ start_queue.pop
68
+ end
78
69
  end
79
70
 
80
- def block_until_started
81
- 200.times do
82
- if started? && !@server.nil?
83
- return true
71
+ def stop(timeout = 5)
72
+ if server
73
+ server.shutdown
74
+ @server = nil
75
+ end
76
+
77
+ if server_thread
78
+ begin
79
+ # Wait for a normal shutdown
80
+ server_thread.join(timeout)
81
+ rescue
82
+ # If it wouldn't shut down normally, kill it.
83
+ server_thread.kill
84
+ server_thread.join(timeout)
84
85
  end
86
+ @server_thread = nil
85
87
  end
86
- raise "ivar weirdness" if started? && @server.nil?
87
- raise "TinyServer failed to boot :/"
88
- end
89
-
90
- def started?
91
- open(url)
92
- true
93
- rescue OpenURI::HTTPError
94
- true
95
- rescue Errno::ECONNREFUSED, EOFError, Errno::ECONNRESET => e
96
- sleep 0.1
97
- true
98
- # If the host has ":::1 localhost" in its hosts file and if IPv6
99
- # is not enabled we can get NetworkUnreachable exception...
100
- rescue Errno::ENETUNREACH, Net::ReadTimeout, IO::EAGAINWaitReadable,
101
- Errno::EHOSTUNREACH => e
102
- sleep 0.1
103
- false
104
- end
105
-
106
- def stop
107
- # yes, this is terrible.
108
- @server.shutdown
109
- @server_thread.kill
110
- @server_thread.join
111
- @server_thread = nil
112
88
  end
113
89
 
90
+ private
91
+
92
+ attr_reader :server_thread
93
+
94
+ def create_server(**extra_options)
95
+ server = WEBrick::HTTPServer.new(**options, **extra_options)
96
+ server.mount("/", Rack::Handler::WEBrick, API.instance)
97
+ server
98
+ end
114
99
  end
115
100
 
116
101
  class API
@@ -326,13 +326,13 @@ describe Chef::ApiClientV1 do
326
326
  describe "Versioned API Interactions" do
327
327
  let(:response_406) { OpenStruct.new(:code => "406") }
328
328
  let(:exception_406) { Net::HTTPServerException.new("406 Not Acceptable", response_406) }
329
- let(:payload) {
329
+ let(:payload) do
330
330
  {
331
331
  :name => "some_name",
332
332
  :validator => true,
333
333
  :admin => true,
334
334
  }
335
- }
335
+ end
336
336
 
337
337
  before do
338
338
  @client = Chef::ApiClientV1.new
@@ -361,7 +361,7 @@ describe Chef::Application do
361
361
  end
362
362
  end
363
363
 
364
- context 'when called with an Array-like argument (#size)' do
364
+ context "when called with an Array-like argument (#size)" do
365
365
  before do
366
366
  allow(app).to receive(:fork_chef_client).and_return(true)
367
367
  allow(app).to receive(:run_with_graceful_exit_option).and_return(true)
@@ -34,8 +34,9 @@ describe Chef::Audit::AuditEventProxy do
34
34
  describe "#example_group_started" do
35
35
 
36
36
  let(:description) { "poots" }
37
- let(:group) { double("ExampleGroup", :parent_groups => parents,
38
- :description => description) }
37
+ let(:group) do
38
+ double("ExampleGroup", :parent_groups => parents,
39
+ :description => description) end
39
40
  let(:notification) { double("Notification", :group => group) }
40
41
 
41
42
  context "when notified from a top-level example group" do
@@ -120,35 +121,36 @@ describe Chef::Audit::AuditEventProxy do
120
121
 
121
122
  let(:examples) { [example] }
122
123
 
123
- let(:example) { double("Example", :metadata => metadata,
124
- :description => example_description,
125
- :full_description => full_description, :exception => nil) }
124
+ let(:example) do
125
+ double("Example", :metadata => metadata,
126
+ :description => example_description,
127
+ :full_description => full_description, :exception => nil) end
126
128
 
127
- let(:metadata) {
129
+ let(:metadata) do
128
130
  {
129
131
  :described_class => described_class,
130
132
  :example_group => example_group,
131
133
  :line_number => line,
132
134
  }
133
- }
135
+ end
134
136
 
135
- let(:example_group) {
137
+ let(:example_group) do
136
138
  {
137
139
  :description => group_description,
138
140
  :parent_example_group => parent_group,
139
141
  }
140
- }
142
+ end
141
143
 
142
- let(:parent_group) {
144
+ let(:parent_group) do
143
145
  {
144
146
  :description => control_group_name,
145
147
  :parent_example_group => nil,
146
148
  }
147
- }
149
+ end
148
150
 
149
151
  let(:line) { 27 }
150
152
 
151
- let(:control_data) {
153
+ let(:control_data) do
152
154
  {
153
155
  :name => example_description,
154
156
  :desc => full_description,
@@ -157,7 +159,7 @@ describe Chef::Audit::AuditEventProxy do
157
159
  :context => context,
158
160
  :line_number => line,
159
161
  }
160
- }
162
+ end
161
163
 
162
164
  shared_examples "built control" do
163
165
 
@@ -218,12 +220,14 @@ describe Chef::Audit::AuditEventProxy do
218
220
  let(:control_group_name) { "application ports" }
219
221
  let(:group_description) { "#{resource_type} #{resource_name}" }
220
222
  let(:example_description) { "should not be listening" }
221
- let(:full_description) { [control_group_name, group_description,
222
- example_description].join(" ") }
223
+ let(:full_description) do
224
+ [control_group_name, group_description,
225
+ example_description].join(" ") end
223
226
 
224
227
  # Metadata fields
225
- let(:described_class) { double("Serverspec::Type::Port",
226
- :class => "Serverspec::Type::Port", :name => resource_name) }
228
+ let(:described_class) do
229
+ double("Serverspec::Type::Port",
230
+ :class => "Serverspec::Type::Port", :name => resource_name) end
227
231
 
228
232
  # Control data fields
229
233
  let(:resource_type) { "Port" }
@@ -246,8 +250,9 @@ describe Chef::Audit::AuditEventProxy do
246
250
  let(:control_group_name) { "application ports" }
247
251
  let(:group_description) { "port 111" }
248
252
  let(:example_description) { "is not listening" }
249
- let(:full_description) { [control_group_name, group_description,
250
- example_description].join(" ") }
253
+ let(:full_description) do
254
+ [control_group_name, group_description,
255
+ example_description].join(" ") end
251
256
 
252
257
  # Metadata fields
253
258
  let(:described_class) { nil }
@@ -276,27 +281,29 @@ describe Chef::Audit::AuditEventProxy do
276
281
  let(:outer_group_description) { "File \"tmp/audit\"" }
277
282
  let(:group_description) { "#{resource_type} #{resource_name}" }
278
283
  let(:example_description) { "is a file" }
279
- let(:full_description) { [control_group_name, outer_group_description,
280
- group_description, example_description].join(" ") }
284
+ let(:full_description) do
285
+ [control_group_name, outer_group_description,
286
+ group_description, example_description].join(" ") end
281
287
 
282
288
  # Metadata parts
283
- let(:described_class) { double("Serverspec::Type::File",
284
- :class => "Serverspec::Type::File", :name => resource_name) }
289
+ let(:described_class) do
290
+ double("Serverspec::Type::File",
291
+ :class => "Serverspec::Type::File", :name => resource_name) end
285
292
 
286
293
  # Example group parts
287
- let(:parent_group) {
294
+ let(:parent_group) do
288
295
  {
289
296
  :description => outer_group_description,
290
297
  :parent_example_group => control_group,
291
298
  }
292
- }
299
+ end
293
300
 
294
- let(:control_group) {
301
+ let(:control_group) do
295
302
  {
296
303
  :description => control_group_name,
297
304
  :parent_example_group => nil,
298
305
  }
299
- }
306
+ end
300
307
 
301
308
  # Control data parts
302
309
  let(:resource_type) { "File" }
@@ -28,8 +28,9 @@ describe Chef::Audit::AuditReporter do
28
28
  let(:run_id) { 0 }
29
29
  let(:start_time) { Time.new(2014, 12, 3, 9, 31, 05, "-08:00") }
30
30
  let(:end_time) { Time.new(2014, 12, 3, 9, 36, 14, "-08:00") }
31
- let(:run_status) { instance_double(Chef::RunStatus, :node => node, :run_id => run_id,
32
- :start_time => start_time, :end_time => end_time) }
31
+ let(:run_status) do
32
+ instance_double(Chef::RunStatus, :node => node, :run_id => run_id,
33
+ :start_time => start_time, :end_time => end_time) end
33
34
 
34
35
  describe "#audit_phase_start" do
35
36
 
@@ -85,9 +86,10 @@ describe Chef::Audit::AuditReporter do
85
86
 
86
87
  context "when audit phase failed" do
87
88
 
88
- let(:audit_error) { double("AuditError", :class => "Chef::Exceptions::AuditError",
89
- :message => "Audit phase failed with error message: derpderpderp",
90
- :backtrace => ["/path/recipe.rb:57", "/path/library.rb:106"]) }
89
+ let(:audit_error) do
90
+ double("AuditError", :class => "Chef::Exceptions::AuditError",
91
+ :message => "Audit phase failed with error message: derpderpderp",
92
+ :backtrace => ["/path/recipe.rb:57", "/path/library.rb:106"]) end
91
93
 
92
94
  before do
93
95
  reporter.instance_variable_set(:@audit_phase_error, audit_error)
@@ -233,13 +235,15 @@ EOM
233
235
  let(:audit_data) { Chef::Audit::AuditData.new(node.name, run_id) }
234
236
  let(:run_data) { audit_data.to_hash }
235
237
 
236
- let(:audit_error) { double("AuditError", :class => "Chef::Exceptions::AuditError",
237
- :message => "Audit phase failed with error message: derpderpderp",
238
- :backtrace => ["/path/recipe.rb:57", "/path/library.rb:106"]) }
238
+ let(:audit_error) do
239
+ double("AuditError", :class => "Chef::Exceptions::AuditError",
240
+ :message => "Audit phase failed with error message: derpderpderp",
241
+ :backtrace => ["/path/recipe.rb:57", "/path/library.rb:106"]) end
239
242
 
240
- let(:run_error) { double("RunError", :class => "Chef::Exceptions::RunError",
241
- :message => "This error shouldn't be reported.",
242
- :backtrace => ["fix it", "fix it", "fix it"]) }
243
+ let(:run_error) do
244
+ double("RunError", :class => "Chef::Exceptions::RunError",
245
+ :message => "This error shouldn't be reported.",
246
+ :backtrace => ["fix it", "fix it", "fix it"]) end
243
247
 
244
248
  before do
245
249
  allow(reporter).to receive(:auditing_enabled?).and_return(true)
@@ -276,23 +280,27 @@ EOM
276
280
 
277
281
  shared_context "audit data" do
278
282
 
279
- let(:control_group_foo) { instance_double(Chef::Audit::ControlGroupData,
280
- :metadata => double("foo metadata")) }
281
- let(:control_group_bar) { instance_double(Chef::Audit::ControlGroupData,
282
- :metadata => double("bar metadata")) }
283
+ let(:control_group_foo) do
284
+ instance_double(Chef::Audit::ControlGroupData,
285
+ :metadata => double("foo metadata")) end
286
+ let(:control_group_bar) do
287
+ instance_double(Chef::Audit::ControlGroupData,
288
+ :metadata => double("bar metadata")) end
283
289
 
284
- let(:ordered_control_groups) {
290
+ let(:ordered_control_groups) do
285
291
  {
286
292
  "foo" => control_group_foo,
287
293
  "bar" => control_group_bar,
288
294
  }
289
- }
295
+ end
290
296
 
291
- let(:audit_data) { instance_double(Chef::Audit::AuditData,
292
- :add_control_group => true) }
297
+ let(:audit_data) do
298
+ instance_double(Chef::Audit::AuditData,
299
+ :add_control_group => true) end
293
300
 
294
- let(:run_context) { instance_double(Chef::RunContext,
295
- :audits => ordered_control_groups) }
301
+ let(:run_context) do
302
+ instance_double(Chef::RunContext,
303
+ :audits => ordered_control_groups) end
296
304
 
297
305
  before do
298
306
  allow(reporter).to receive(:ordered_control_groups).and_return(ordered_control_groups)
@@ -340,8 +348,9 @@ EOM
340
348
  include_context "audit data"
341
349
 
342
350
  let(:name) { "bat" }
343
- let(:control_group) { instance_double(Chef::Audit::ControlGroupData,
344
- :metadata => double("metadata")) }
351
+ let(:control_group) do
352
+ instance_double(Chef::Audit::ControlGroupData,
353
+ :metadata => double("metadata")) end
345
354
 
346
355
  before do
347
356
  allow(Chef::Audit::ControlGroupData).to receive(:new).
@@ -122,9 +122,10 @@ describe Chef::Audit::ControlData do
122
122
  let(:context) { nil }
123
123
  let(:line_number) { 27 }
124
124
 
125
- let(:control_data) { described_class.new(name: name,
126
- resource_type: resource_type, resource_name: resource_name,
127
- context: context, line_number: line_number) }
125
+ let(:control_data) do
126
+ described_class.new(name: name,
127
+ resource_type: resource_type, resource_name: resource_name,
128
+ context: context, line_number: line_number) end
128
129
 
129
130
  describe "#to_hash" do
130
131
 
@@ -171,7 +172,7 @@ describe Chef::Audit::ControlGroupData do
171
172
  let(:context) { nil }
172
173
  let(:line_number) { 0 }
173
174
 
174
- let(:control_data) {
175
+ let(:control_data) do
175
176
  {
176
177
  :name => name,
177
178
  :resource_type => resource_type,
@@ -179,16 +180,17 @@ describe Chef::Audit::ControlGroupData do
179
180
  :context => context,
180
181
  :line_number => line_number,
181
182
  }
182
- }
183
+ end
183
184
 
184
185
  end
185
186
 
186
187
  shared_context "control" do
187
188
  include_context "control data"
188
189
 
189
- let(:control) { Chef::Audit::ControlData.new(name: name,
190
- resource_type: resource_type, resource_name: resource_name,
191
- context: context, line_number: line_number) }
190
+ let(:control) do
191
+ Chef::Audit::ControlData.new(name: name,
192
+ resource_type: resource_type, resource_name: resource_name,
193
+ context: context, line_number: line_number) end
192
194
 
193
195
  before do
194
196
  allow(Chef::Audit::ControlData).to receive(:new).
@@ -436,15 +438,18 @@ describe Chef::Audit::ControlGroupData do
436
438
  let(:control_hash_2) { { :line_number => 13 } }
437
439
  let(:control_hash_3) { { :line_number => 35 } }
438
440
 
439
- let(:control_1) { double("control 1",
441
+ let(:control_1) do
442
+ double("control 1",
440
443
  :line_number => control_hash_1[:line_number],
441
- :to_hash => control_hash_1) }
442
- let(:control_2) { double("control 2",
444
+ :to_hash => control_hash_1) end
445
+ let(:control_2) do
446
+ double("control 2",
443
447
  :line_number => control_hash_2[:line_number],
444
- :to_hash => control_hash_2) }
445
- let(:control_3) { double("control 3",
448
+ :to_hash => control_hash_2) end
449
+ let(:control_3) do
450
+ double("control 3",
446
451
  :line_number => control_hash_3[:line_number],
447
- :to_hash => control_hash_3) }
452
+ :to_hash => control_hash_3) end
448
453
 
449
454
  let(:control_list) { [control_1, control_2, control_3] }
450
455
  let(:ordered_control_hashes) { [control_hash_2, control_hash_1, control_hash_3] }