chef 16.16.13 → 17.0.242

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 (638) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -13
  3. data/README.md +1 -1
  4. data/Rakefile +2 -2
  5. data/chef-universal-mingw32.gemspec +1 -1
  6. data/chef.gemspec +6 -8
  7. data/lib/chef/application/base.rb +1 -1
  8. data/lib/chef/applications.rb +0 -1
  9. data/lib/chef/chef_fs/command_line.rb +5 -2
  10. data/lib/chef/chef_fs/file_system.rb +9 -10
  11. data/lib/chef/client.rb +2 -2
  12. data/lib/chef/compliance/default_attributes.rb +4 -3
  13. data/lib/chef/compliance/fetcher/automate.rb +0 -7
  14. data/lib/chef/compliance/reporter/automate.rb +17 -7
  15. data/lib/chef/compliance/reporter/chef_server_automate.rb +11 -6
  16. data/lib/chef/compliance/reporter/cli.rb +77 -0
  17. data/lib/chef/compliance/reporter/compliance_enforcer.rb +4 -0
  18. data/lib/chef/compliance/reporter/json_file.rb +8 -1
  19. data/lib/chef/compliance/runner.rb +65 -27
  20. data/lib/chef/cookbook/gem_installer.rb +1 -5
  21. data/lib/chef/cookbook/synchronizer.rb +3 -5
  22. data/lib/chef/cookbook_loader.rb +2 -4
  23. data/lib/chef/cookbook_uploader.rb +0 -1
  24. data/lib/chef/cookbook_version.rb +4 -26
  25. data/lib/chef/data_bag_item.rb +11 -2
  26. data/lib/chef/data_collector/run_end_message.rb +1 -1
  27. data/lib/chef/delayed_evaluator.rb +4 -0
  28. data/lib/chef/deprecated.rb +6 -12
  29. data/lib/chef/dsl/chef_vault.rb +6 -6
  30. data/lib/chef/dsl/reboot_pending.rb +1 -2
  31. data/lib/chef/exceptions.rb +0 -3
  32. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
  33. data/lib/chef/formatters/error_mapper.rb +2 -2
  34. data/lib/chef/group.rb +75 -0
  35. data/lib/chef/http.rb +5 -5
  36. data/lib/chef/mixin/get_source_from_package.rb +1 -1
  37. data/lib/chef/node/attribute.rb +6 -4
  38. data/lib/chef/node/immutable_collections.rb +13 -0
  39. data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
  40. data/lib/chef/node.rb +19 -20
  41. data/lib/chef/org.rb +3 -2
  42. data/lib/chef/policy_builder/policyfile.rb +0 -5
  43. data/lib/chef/property.rb +18 -0
  44. data/lib/chef/provider/cron.rb +1 -1
  45. data/lib/chef/provider/execute.rb +2 -1
  46. data/lib/chef/provider/file.rb +1 -1
  47. data/lib/chef/provider/git.rb +5 -7
  48. data/lib/chef/provider/group/dscl.rb +1 -1
  49. data/lib/chef/provider/group/groupadd.rb +3 -3
  50. data/lib/chef/provider/group/groupmod.rb +3 -3
  51. data/lib/chef/provider/group/pw.rb +3 -3
  52. data/lib/chef/provider/ifconfig.rb +2 -2
  53. data/lib/chef/provider/link.rb +2 -2
  54. data/lib/chef/provider/mount/aix.rb +3 -3
  55. data/lib/chef/provider/mount/mount.rb +5 -5
  56. data/lib/chef/provider/mount/windows.rb +1 -1
  57. data/lib/chef/provider/mount.rb +5 -5
  58. data/lib/chef/provider/package/apt.rb +27 -1
  59. data/lib/chef/provider/package/deb.rb +3 -3
  60. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  61. data/lib/chef/provider/package/portage.rb +2 -2
  62. data/lib/chef/provider/package/powershell.rb +0 -5
  63. data/lib/chef/provider/package/rubygems.rb +9 -15
  64. data/lib/chef/provider/package/windows.rb +2 -4
  65. data/lib/chef/provider/package/yum/yum_helper.py +1 -1
  66. data/lib/chef/provider/package.rb +17 -21
  67. data/lib/chef/provider/route.rb +2 -2
  68. data/lib/chef/provider/service/aixinit.rb +1 -1
  69. data/lib/chef/provider/service/debian.rb +1 -1
  70. data/lib/chef/provider/service/freebsd.rb +15 -21
  71. data/lib/chef/provider/service/macosx.rb +4 -4
  72. data/lib/chef/provider/service/systemd.rb +43 -14
  73. data/lib/chef/provider/service/upstart.rb +2 -13
  74. data/lib/chef/provider/service/windows.rb +12 -12
  75. data/lib/chef/provider/service.rb +6 -6
  76. data/lib/chef/provider/subversion.rb +10 -12
  77. data/lib/chef/provider/systemd_unit.rb +36 -10
  78. data/lib/chef/provider/template/content.rb +3 -7
  79. data/lib/chef/provider/user/dscl.rb +1 -1
  80. data/lib/chef/provider/user/mac.rb +17 -20
  81. data/lib/chef/provider/user/pw.rb +1 -1
  82. data/lib/chef/provider/user/windows.rb +1 -1
  83. data/lib/chef/provider/user.rb +2 -2
  84. data/lib/chef/provider/zypper_repository.rb +2 -2
  85. data/lib/chef/provider.rb +1 -1
  86. data/lib/chef/providers.rb +0 -1
  87. data/lib/chef/resource/alternatives.rb +6 -6
  88. data/lib/chef/resource/apt_package.rb +1 -1
  89. data/lib/chef/resource/apt_preference.rb +2 -2
  90. data/lib/chef/resource/apt_repository.rb +6 -6
  91. data/lib/chef/resource/apt_update.rb +3 -2
  92. data/lib/chef/resource/archive_file.rb +2 -3
  93. data/lib/chef/resource/breakpoint.rb +1 -1
  94. data/lib/chef/resource/build_essential.rb +2 -6
  95. data/lib/chef/resource/chef_client_config.rb +2 -2
  96. data/lib/chef/resource/chef_client_cron.rb +4 -4
  97. data/lib/chef/resource/chef_client_launchd.rb +3 -3
  98. data/lib/chef/resource/chef_client_scheduled_task.rb +1 -1
  99. data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
  100. data/lib/chef/resource/chef_handler.rb +3 -7
  101. data/lib/chef/resource/chef_sleep.rb +1 -1
  102. data/lib/chef/resource/chef_vault_secret.rb +3 -8
  103. data/lib/chef/resource/chocolatey_config.rb +2 -6
  104. data/lib/chef/resource/chocolatey_feature.rb +2 -6
  105. data/lib/chef/resource/chocolatey_source.rb +4 -10
  106. data/lib/chef/resource/cron/_cron_shared.rb +2 -2
  107. data/lib/chef/resource/cron_access.rb +2 -4
  108. data/lib/chef/resource/dmg_package.rb +6 -10
  109. data/lib/chef/resource/dpkg_package.rb +1 -1
  110. data/lib/chef/resource/execute.rb +6 -1
  111. data/lib/chef/resource/file.rb +1 -1
  112. data/lib/chef/resource/group.rb +2 -2
  113. data/lib/chef/resource/homebrew_cask.rb +5 -15
  114. data/lib/chef/resource/homebrew_tap.rb +2 -6
  115. data/lib/chef/resource/hostname.rb +21 -17
  116. data/lib/chef/resource/http_request.rb +1 -1
  117. data/lib/chef/resource/kernel_module.rb +6 -17
  118. data/lib/chef/resource/locale.rb +2 -3
  119. data/lib/chef/resource/lwrp_base.rb +4 -0
  120. data/lib/chef/resource/macos_userdefaults.rb +10 -14
  121. data/lib/chef/resource/mdadm.rb +53 -7
  122. data/lib/chef/resource/mount.rb +3 -2
  123. data/lib/chef/resource/openssl_ec_private_key.rb +2 -2
  124. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -1
  125. data/lib/chef/resource/openssl_x509_certificate.rb +2 -2
  126. data/lib/chef/resource/plist.rb +7 -7
  127. data/lib/chef/resource/powershell_script.rb +1 -1
  128. data/lib/chef/resource/remote_file.rb +1 -1
  129. data/lib/chef/resource/rhsm_errata.rb +16 -1
  130. data/lib/chef/resource/rhsm_errata_level.rb +10 -1
  131. data/lib/chef/resource/rhsm_register.rb +12 -6
  132. data/lib/chef/resource/rhsm_repo.rb +2 -6
  133. data/lib/chef/resource/rhsm_subscription.rb +7 -11
  134. data/lib/chef/resource/scm/git.rb +1 -1
  135. data/lib/chef/resource/sudo.rb +6 -6
  136. data/lib/chef/resource/support/client.erb +0 -6
  137. data/lib/chef/resource/sysctl.rb +2 -6
  138. data/lib/chef/resource/systemd_unit.rb +3 -3
  139. data/lib/chef/resource/template.rb +1 -1
  140. data/lib/chef/resource/timezone.rb +1 -3
  141. data/lib/chef/resource/user/mac_user.rb +1 -1
  142. data/lib/chef/resource/user_ulimit.rb +2 -3
  143. data/lib/chef/resource/windows_ad_join.rb +2 -6
  144. data/lib/chef/resource/windows_audit_policy.rb +1 -1
  145. data/lib/chef/resource/windows_auto_run.rb +2 -5
  146. data/lib/chef/resource/windows_certificate.rb +207 -73
  147. data/lib/chef/resource/windows_dfs_folder.rb +2 -6
  148. data/lib/chef/resource/windows_dfs_namespace.rb +2 -6
  149. data/lib/chef/resource/windows_dfs_server.rb +1 -3
  150. data/lib/chef/resource/windows_dns_record.rb +2 -6
  151. data/lib/chef/resource/windows_dns_zone.rb +2 -6
  152. data/lib/chef/resource/windows_env.rb +5 -4
  153. data/lib/chef/resource/windows_feature.rb +3 -9
  154. data/lib/chef/resource/windows_feature_dism.rb +2 -6
  155. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  156. data/lib/chef/resource/windows_firewall_profile.rb +4 -4
  157. data/lib/chef/resource/windows_firewall_rule.rb +2 -5
  158. data/lib/chef/resource/windows_font.rb +2 -4
  159. data/lib/chef/resource/windows_pagefile.rb +2 -6
  160. data/lib/chef/resource/windows_path.rb +2 -2
  161. data/lib/chef/resource/windows_printer.rb +4 -4
  162. data/lib/chef/resource/windows_printer_port.rb +6 -6
  163. data/lib/chef/resource/windows_security_policy.rb +9 -12
  164. data/lib/chef/resource/windows_share.rb +14 -21
  165. data/lib/chef/resource/windows_shortcut.rb +4 -6
  166. data/lib/chef/resource/windows_task.rb +17 -5
  167. data/lib/chef/resource/windows_uac.rb +2 -4
  168. data/lib/chef/resource/windows_user_privilege.rb +5 -5
  169. data/lib/chef/resource/windows_workgroup.rb +1 -2
  170. data/lib/chef/resources.rb +0 -1
  171. data/lib/chef/user.rb +0 -1
  172. data/lib/chef/user_v1.rb +3 -4
  173. data/lib/chef/util/dsc/configuration_generator.rb +1 -0
  174. data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
  175. data/lib/chef/version.rb +1 -1
  176. data/lib/chef/win32/api.rb +2 -9
  177. data/lib/chef/win32/registry.rb +4 -2
  178. data/lib/chef/win32/version.rb +1 -2
  179. data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
  180. data/spec/data/lwrp/resources/bar.rb +2 -0
  181. data/spec/data/lwrp/resources/buck_passer.rb +1 -0
  182. data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
  183. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
  184. data/spec/data/lwrp/resources/foo.rb +2 -0
  185. data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
  186. data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
  187. data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
  188. data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
  189. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
  190. data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
  191. data/spec/data/lwrp_override/resources/foo.rb +1 -0
  192. data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
  193. data/spec/data/rubygems.org/sexp_processor-info +49 -0
  194. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  195. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  196. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  197. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  198. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  199. data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
  200. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
  201. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  202. data/spec/functional/dsl/registry_helper_spec.rb +1 -1
  203. data/spec/functional/resource/aixinit_service_spec.rb +7 -7
  204. data/spec/functional/resource/apt_package_spec.rb +1 -1
  205. data/spec/functional/resource/chocolatey_package_spec.rb +13 -0
  206. data/spec/functional/resource/dnf_package_spec.rb +4 -1
  207. data/spec/functional/resource/group_spec.rb +1 -5
  208. data/spec/functional/resource/link_spec.rb +0 -8
  209. data/spec/functional/resource/registry_spec.rb +8 -8
  210. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  211. data/spec/functional/resource/windows_certificate_spec.rb +92 -35
  212. data/spec/functional/version_spec.rb +1 -1
  213. data/spec/functional/win32/registry_spec.rb +1 -1
  214. data/spec/integration/client/client_spec.rb +5 -2
  215. data/spec/integration/client/exit_code_spec.rb +1 -1
  216. data/spec/integration/client/ipv6_spec.rb +1 -1
  217. data/spec/integration/compliance/compliance_spec.rb +1 -1
  218. data/spec/integration/ohai/ohai_spec.rb +7 -6
  219. data/spec/integration/recipes/accumulator_spec.rb +13 -1
  220. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
  221. data/spec/integration/recipes/lwrp_spec.rb +3 -1
  222. data/spec/integration/recipes/notifies_spec.rb +15 -1
  223. data/spec/integration/recipes/notifying_block_spec.rb +2 -1
  224. data/spec/integration/recipes/recipe_dsl_spec.rb +9 -9
  225. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  226. data/spec/integration/recipes/use_partial_spec.rb +4 -1
  227. data/spec/spec_helper.rb +10 -13
  228. data/spec/support/chef_helpers.rb +0 -16
  229. data/spec/support/lib/chef/resource/with_state.rb +0 -1
  230. data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
  231. data/spec/support/lib/chef/resource/zen_master.rb +0 -1
  232. data/spec/support/matchers/leak.rb +7 -9
  233. data/spec/support/platform_helpers.rb +1 -8
  234. data/spec/support/shared/integration/integration_helper.rb +0 -1
  235. data/spec/support/shared/unit/script_resource.rb +2 -2
  236. data/spec/unit/application/solo_spec.rb +2 -2
  237. data/spec/unit/chef_fs/diff_spec.rb +1 -1
  238. data/spec/unit/chef_fs/file_system_spec.rb +1 -1
  239. data/spec/unit/compliance/fetcher/automate_spec.rb +0 -16
  240. data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
  241. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +20 -0
  242. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +1 -0
  243. data/spec/unit/compliance/runner_spec.rb +30 -4
  244. data/spec/unit/cookbook_version_spec.rb +0 -52
  245. data/spec/unit/data_bag_item_spec.rb +1 -6
  246. data/spec/unit/data_collector_spec.rb +1 -47
  247. data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
  248. data/spec/unit/dsl/registry_helper_spec.rb +1 -1
  249. data/spec/unit/lwrp_spec.rb +1 -1
  250. data/spec/unit/mixin/params_validate_spec.rb +4 -3
  251. data/spec/unit/node/attribute_spec.rb +1 -1
  252. data/spec/unit/node_spec.rb +78 -0
  253. data/spec/unit/org_group_spec.rb +45 -0
  254. data/spec/unit/policy_builder/policyfile_spec.rb +1 -11
  255. data/spec/unit/property_spec.rb +23 -22
  256. data/spec/unit/provider/cron_spec.rb +1 -1
  257. data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
  258. data/spec/unit/provider/group/groupmod_spec.rb +2 -2
  259. data/spec/unit/provider/group/pw_spec.rb +2 -2
  260. data/spec/unit/provider/group_spec.rb +1 -1
  261. data/spec/unit/provider/package/apt_spec.rb +84 -18
  262. data/spec/unit/provider/package/deb_spec.rb +3 -3
  263. data/spec/unit/provider/package/powershell_spec.rb +12 -74
  264. data/spec/unit/provider/package/rubygems_spec.rb +18 -30
  265. data/spec/unit/provider/service/arch_service_spec.rb +1 -0
  266. data/spec/unit/provider/service/debian_service_spec.rb +1 -0
  267. data/spec/unit/provider/service/macosx_spec.rb +2 -2
  268. data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
  269. data/spec/unit/provider/service/upstart_service_spec.rb +0 -29
  270. data/spec/unit/provider/service/windows_spec.rb +2 -2
  271. data/spec/unit/provider/subversion_spec.rb +2 -2
  272. data/spec/unit/provider/systemd_unit_spec.rb +79 -60
  273. data/spec/unit/provider/zypper_repository_spec.rb +2 -2
  274. data/spec/unit/provider_spec.rb +0 -8
  275. data/spec/unit/resource/homebrew_cask_spec.rb +11 -29
  276. data/spec/unit/resource/mount_spec.rb +0 -10
  277. data/spec/unit/resource/powershell_script_spec.rb +2 -2
  278. data/spec/unit/resource/rhsm_subscription_spec.rb +3 -50
  279. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  280. data/spec/unit/resource/user_ulimit_spec.rb +1 -14
  281. data/spec/unit/resource/windows_task_spec.rb +1 -1
  282. data/spec/unit/user_spec.rb +1 -1
  283. data/spec/unit/user_v1_spec.rb +6 -4
  284. data/tasks/rspec.rb +15 -7
  285. metadata +17 -380
  286. data/bin/knife +0 -24
  287. data/lib/chef/application/knife.rb +0 -234
  288. data/lib/chef/application/windows_service.rb +0 -338
  289. data/lib/chef/application/windows_service_manager.rb +0 -205
  290. data/lib/chef/chef_fs/knife.rb +0 -160
  291. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
  292. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
  293. data/lib/chef/chef_fs/parallelizer.rb +0 -102
  294. data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
  295. data/lib/chef/knife/acl_add.rb +0 -57
  296. data/lib/chef/knife/acl_base.rb +0 -183
  297. data/lib/chef/knife/acl_bulk_add.rb +0 -78
  298. data/lib/chef/knife/acl_bulk_remove.rb +0 -83
  299. data/lib/chef/knife/acl_remove.rb +0 -62
  300. data/lib/chef/knife/acl_show.rb +0 -56
  301. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
  302. data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
  303. data/lib/chef/knife/bootstrap/templates/README.md +0 -11
  304. data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
  305. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
  306. data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
  307. data/lib/chef/knife/bootstrap.rb +0 -1192
  308. data/lib/chef/knife/client_bulk_delete.rb +0 -104
  309. data/lib/chef/knife/client_create.rb +0 -101
  310. data/lib/chef/knife/client_delete.rb +0 -62
  311. data/lib/chef/knife/client_edit.rb +0 -52
  312. data/lib/chef/knife/client_key_create.rb +0 -73
  313. data/lib/chef/knife/client_key_delete.rb +0 -80
  314. data/lib/chef/knife/client_key_edit.rb +0 -83
  315. data/lib/chef/knife/client_key_list.rb +0 -73
  316. data/lib/chef/knife/client_key_show.rb +0 -80
  317. data/lib/chef/knife/client_list.rb +0 -41
  318. data/lib/chef/knife/client_reregister.rb +0 -58
  319. data/lib/chef/knife/client_show.rb +0 -48
  320. data/lib/chef/knife/config_get.rb +0 -39
  321. data/lib/chef/knife/config_get_profile.rb +0 -37
  322. data/lib/chef/knife/config_list.rb +0 -139
  323. data/lib/chef/knife/config_list_profiles.rb +0 -37
  324. data/lib/chef/knife/config_show.rb +0 -127
  325. data/lib/chef/knife/config_use.rb +0 -61
  326. data/lib/chef/knife/config_use_profile.rb +0 -47
  327. data/lib/chef/knife/configure.rb +0 -150
  328. data/lib/chef/knife/configure_client.rb +0 -48
  329. data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
  330. data/lib/chef/knife/cookbook_delete.rb +0 -151
  331. data/lib/chef/knife/cookbook_download.rb +0 -142
  332. data/lib/chef/knife/cookbook_list.rb +0 -47
  333. data/lib/chef/knife/cookbook_metadata.rb +0 -106
  334. data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
  335. data/lib/chef/knife/cookbook_show.rb +0 -98
  336. data/lib/chef/knife/cookbook_upload.rb +0 -292
  337. data/lib/chef/knife/core/bootstrap_context.rb +0 -264
  338. data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
  339. data/lib/chef/knife/core/formatting_options.rb +0 -49
  340. data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
  341. data/lib/chef/knife/core/generic_presenter.rb +0 -232
  342. data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
  343. data/lib/chef/knife/core/node_editor.rb +0 -130
  344. data/lib/chef/knife/core/node_presenter.rb +0 -133
  345. data/lib/chef/knife/core/object_loader.rb +0 -115
  346. data/lib/chef/knife/core/status_presenter.rb +0 -147
  347. data/lib/chef/knife/core/subcommand_loader.rb +0 -203
  348. data/lib/chef/knife/core/text_formatter.rb +0 -85
  349. data/lib/chef/knife/core/ui.rb +0 -338
  350. data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -405
  351. data/lib/chef/knife/data_bag_create.rb +0 -81
  352. data/lib/chef/knife/data_bag_delete.rb +0 -49
  353. data/lib/chef/knife/data_bag_edit.rb +0 -74
  354. data/lib/chef/knife/data_bag_from_file.rb +0 -113
  355. data/lib/chef/knife/data_bag_list.rb +0 -42
  356. data/lib/chef/knife/data_bag_secret_options.rb +0 -122
  357. data/lib/chef/knife/data_bag_show.rb +0 -69
  358. data/lib/chef/knife/delete.rb +0 -125
  359. data/lib/chef/knife/deps.rb +0 -156
  360. data/lib/chef/knife/diff.rb +0 -83
  361. data/lib/chef/knife/download.rb +0 -84
  362. data/lib/chef/knife/edit.rb +0 -88
  363. data/lib/chef/knife/environment_compare.rb +0 -128
  364. data/lib/chef/knife/environment_create.rb +0 -52
  365. data/lib/chef/knife/environment_delete.rb +0 -44
  366. data/lib/chef/knife/environment_edit.rb +0 -44
  367. data/lib/chef/knife/environment_from_file.rb +0 -84
  368. data/lib/chef/knife/environment_list.rb +0 -41
  369. data/lib/chef/knife/environment_show.rb +0 -47
  370. data/lib/chef/knife/exec.rb +0 -99
  371. data/lib/chef/knife/group_add.rb +0 -55
  372. data/lib/chef/knife/group_create.rb +0 -49
  373. data/lib/chef/knife/group_destroy.rb +0 -53
  374. data/lib/chef/knife/group_list.rb +0 -43
  375. data/lib/chef/knife/group_remove.rb +0 -56
  376. data/lib/chef/knife/group_show.rb +0 -49
  377. data/lib/chef/knife/key_create.rb +0 -112
  378. data/lib/chef/knife/key_create_base.rb +0 -50
  379. data/lib/chef/knife/key_delete.rb +0 -55
  380. data/lib/chef/knife/key_edit.rb +0 -118
  381. data/lib/chef/knife/key_edit_base.rb +0 -55
  382. data/lib/chef/knife/key_list.rb +0 -90
  383. data/lib/chef/knife/key_list_base.rb +0 -45
  384. data/lib/chef/knife/key_show.rb +0 -53
  385. data/lib/chef/knife/list.rb +0 -177
  386. data/lib/chef/knife/node_bulk_delete.rb +0 -75
  387. data/lib/chef/knife/node_create.rb +0 -47
  388. data/lib/chef/knife/node_delete.rb +0 -46
  389. data/lib/chef/knife/node_edit.rb +0 -70
  390. data/lib/chef/knife/node_environment_set.rb +0 -53
  391. data/lib/chef/knife/node_from_file.rb +0 -51
  392. data/lib/chef/knife/node_list.rb +0 -44
  393. data/lib/chef/knife/node_policy_set.rb +0 -79
  394. data/lib/chef/knife/node_run_list_add.rb +0 -104
  395. data/lib/chef/knife/node_run_list_remove.rb +0 -67
  396. data/lib/chef/knife/node_run_list_set.rb +0 -66
  397. data/lib/chef/knife/node_show.rb +0 -63
  398. data/lib/chef/knife/null.rb +0 -12
  399. data/lib/chef/knife/raw.rb +0 -123
  400. data/lib/chef/knife/recipe_list.rb +0 -32
  401. data/lib/chef/knife/rehash.rb +0 -50
  402. data/lib/chef/knife/role_bulk_delete.rb +0 -66
  403. data/lib/chef/knife/role_create.rb +0 -53
  404. data/lib/chef/knife/role_delete.rb +0 -46
  405. data/lib/chef/knife/role_edit.rb +0 -45
  406. data/lib/chef/knife/role_env_run_list_add.rb +0 -87
  407. data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
  408. data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
  409. data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
  410. data/lib/chef/knife/role_env_run_list_set.rb +0 -70
  411. data/lib/chef/knife/role_from_file.rb +0 -51
  412. data/lib/chef/knife/role_list.rb +0 -42
  413. data/lib/chef/knife/role_run_list_add.rb +0 -87
  414. data/lib/chef/knife/role_run_list_clear.rb +0 -55
  415. data/lib/chef/knife/role_run_list_remove.rb +0 -56
  416. data/lib/chef/knife/role_run_list_replace.rb +0 -60
  417. data/lib/chef/knife/role_run_list_set.rb +0 -69
  418. data/lib/chef/knife/role_show.rb +0 -48
  419. data/lib/chef/knife/search.rb +0 -194
  420. data/lib/chef/knife/serve.rb +0 -65
  421. data/lib/chef/knife/show.rb +0 -72
  422. data/lib/chef/knife/ssh.rb +0 -645
  423. data/lib/chef/knife/ssl_check.rb +0 -284
  424. data/lib/chef/knife/ssl_fetch.rb +0 -161
  425. data/lib/chef/knife/status.rb +0 -95
  426. data/lib/chef/knife/supermarket_download.rb +0 -121
  427. data/lib/chef/knife/supermarket_install.rb +0 -192
  428. data/lib/chef/knife/supermarket_list.rb +0 -76
  429. data/lib/chef/knife/supermarket_search.rb +0 -53
  430. data/lib/chef/knife/supermarket_share.rb +0 -166
  431. data/lib/chef/knife/supermarket_show.rb +0 -66
  432. data/lib/chef/knife/supermarket_unshare.rb +0 -61
  433. data/lib/chef/knife/tag_create.rb +0 -52
  434. data/lib/chef/knife/tag_delete.rb +0 -60
  435. data/lib/chef/knife/tag_list.rb +0 -47
  436. data/lib/chef/knife/upload.rb +0 -86
  437. data/lib/chef/knife/user_create.rb +0 -107
  438. data/lib/chef/knife/user_delete.rb +0 -44
  439. data/lib/chef/knife/user_dissociate.rb +0 -42
  440. data/lib/chef/knife/user_edit.rb +0 -52
  441. data/lib/chef/knife/user_invite_add.rb +0 -43
  442. data/lib/chef/knife/user_invite_list.rb +0 -34
  443. data/lib/chef/knife/user_invite_rescind.rb +0 -63
  444. data/lib/chef/knife/user_key_create.rb +0 -73
  445. data/lib/chef/knife/user_key_delete.rb +0 -80
  446. data/lib/chef/knife/user_key_edit.rb +0 -83
  447. data/lib/chef/knife/user_key_list.rb +0 -73
  448. data/lib/chef/knife/user_key_show.rb +0 -80
  449. data/lib/chef/knife/user_list.rb +0 -42
  450. data/lib/chef/knife/user_reregister.rb +0 -59
  451. data/lib/chef/knife/user_show.rb +0 -48
  452. data/lib/chef/knife/xargs.rb +0 -282
  453. data/lib/chef/knife/yaml_convert.rb +0 -91
  454. data/lib/chef/knife.rb +0 -665
  455. data/lib/chef/resource/user/dscl_user.rb +0 -35
  456. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  457. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  458. data/spec/data/knife_subcommand/test_explicit_category.rb +0 -7
  459. data/spec/data/knife_subcommand/test_name_mapping.rb +0 -4
  460. data/spec/data/knife_subcommand/test_yourself.rb +0 -21
  461. data/spec/functional/knife/configure_spec.rb +0 -33
  462. data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
  463. data/spec/functional/knife/exec_spec.rb +0 -55
  464. data/spec/functional/knife/rehash_spec.rb +0 -39
  465. data/spec/functional/knife/smoke_test.rb +0 -42
  466. data/spec/functional/knife/ssh_spec.rb +0 -352
  467. data/spec/functional/resource/user/dscl_spec.rb +0 -188
  468. data/spec/functional/resource/windows_service_spec.rb +0 -105
  469. data/spec/functional/win32/service_manager_spec.rb +0 -220
  470. data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
  471. data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
  472. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
  473. data/spec/integration/knife/chefignore_spec.rb +0 -301
  474. data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
  475. data/spec/integration/knife/client_create_spec.rb +0 -70
  476. data/spec/integration/knife/client_delete_spec.rb +0 -64
  477. data/spec/integration/knife/client_key_create_spec.rb +0 -66
  478. data/spec/integration/knife/client_key_delete_spec.rb +0 -43
  479. data/spec/integration/knife/client_key_list_spec.rb +0 -61
  480. data/spec/integration/knife/client_key_show_spec.rb +0 -45
  481. data/spec/integration/knife/client_list_spec.rb +0 -49
  482. data/spec/integration/knife/client_show_spec.rb +0 -37
  483. data/spec/integration/knife/common_options_spec.rb +0 -174
  484. data/spec/integration/knife/config_list_spec.rb +0 -220
  485. data/spec/integration/knife/config_show_spec.rb +0 -192
  486. data/spec/integration/knife/config_use_spec.rb +0 -198
  487. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
  488. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
  489. data/spec/integration/knife/cookbook_download_spec.rb +0 -72
  490. data/spec/integration/knife/cookbook_list_spec.rb +0 -55
  491. data/spec/integration/knife/cookbook_show_spec.rb +0 -149
  492. data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
  493. data/spec/integration/knife/data_bag_create_spec.rb +0 -125
  494. data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
  495. data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
  496. data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
  497. data/spec/integration/knife/data_bag_list_spec.rb +0 -44
  498. data/spec/integration/knife/data_bag_show_spec.rb +0 -95
  499. data/spec/integration/knife/delete_spec.rb +0 -1018
  500. data/spec/integration/knife/deps_spec.rb +0 -703
  501. data/spec/integration/knife/diff_spec.rb +0 -605
  502. data/spec/integration/knife/download_spec.rb +0 -1336
  503. data/spec/integration/knife/environment_compare_spec.rb +0 -75
  504. data/spec/integration/knife/environment_create_spec.rb +0 -41
  505. data/spec/integration/knife/environment_delete_spec.rb +0 -37
  506. data/spec/integration/knife/environment_from_file_spec.rb +0 -116
  507. data/spec/integration/knife/environment_list_spec.rb +0 -42
  508. data/spec/integration/knife/environment_show_spec.rb +0 -77
  509. data/spec/integration/knife/list_spec.rb +0 -1060
  510. data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
  511. data/spec/integration/knife/node_create_spec.rb +0 -47
  512. data/spec/integration/knife/node_delete_spec.rb +0 -48
  513. data/spec/integration/knife/node_environment_set_spec.rb +0 -46
  514. data/spec/integration/knife/node_from_file_spec.rb +0 -59
  515. data/spec/integration/knife/node_list_spec.rb +0 -45
  516. data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
  517. data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
  518. data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
  519. data/spec/integration/knife/node_show_spec.rb +0 -36
  520. data/spec/integration/knife/raw_spec.rb +0 -297
  521. data/spec/integration/knife/redirection_spec.rb +0 -64
  522. data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
  523. data/spec/integration/knife/role_create_spec.rb +0 -41
  524. data/spec/integration/knife/role_delete_spec.rb +0 -48
  525. data/spec/integration/knife/role_from_file_spec.rb +0 -96
  526. data/spec/integration/knife/role_list_spec.rb +0 -45
  527. data/spec/integration/knife/role_show_spec.rb +0 -51
  528. data/spec/integration/knife/search_node_spec.rb +0 -40
  529. data/spec/integration/knife/serve_spec.rb +0 -92
  530. data/spec/integration/knife/show_spec.rb +0 -197
  531. data/spec/integration/knife/upload_spec.rb +0 -1617
  532. data/spec/support/shared/functional/knife.rb +0 -37
  533. data/spec/support/shared/functional/win32_service.rb +0 -57
  534. data/spec/support/shared/integration/knife_support.rb +0 -192
  535. data/spec/support/shared/unit/knife_shared.rb +0 -39
  536. data/spec/unit/application/knife_spec.rb +0 -241
  537. data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
  538. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
  539. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
  540. data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
  541. data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
  542. data/spec/unit/knife/bootstrap_spec.rb +0 -2220
  543. data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
  544. data/spec/unit/knife/client_create_spec.rb +0 -169
  545. data/spec/unit/knife/client_delete_spec.rb +0 -99
  546. data/spec/unit/knife/client_edit_spec.rb +0 -53
  547. data/spec/unit/knife/client_list_spec.rb +0 -34
  548. data/spec/unit/knife/client_reregister_spec.rb +0 -62
  549. data/spec/unit/knife/client_show_spec.rb +0 -52
  550. data/spec/unit/knife/configure_client_spec.rb +0 -81
  551. data/spec/unit/knife/configure_spec.rb +0 -190
  552. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
  553. data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
  554. data/spec/unit/knife/cookbook_download_spec.rb +0 -255
  555. data/spec/unit/knife/cookbook_list_spec.rb +0 -88
  556. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
  557. data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
  558. data/spec/unit/knife/cookbook_show_spec.rb +0 -253
  559. data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
  560. data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
  561. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
  562. data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
  563. data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
  564. data/spec/unit/knife/core/node_editor_spec.rb +0 -211
  565. data/spec/unit/knife/core/object_loader_spec.rb +0 -81
  566. data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
  567. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
  568. data/spec/unit/knife/core/ui_spec.rb +0 -656
  569. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
  570. data/spec/unit/knife/data_bag_create_spec.rb +0 -175
  571. data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
  572. data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
  573. data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
  574. data/spec/unit/knife/data_bag_show_spec.rb +0 -139
  575. data/spec/unit/knife/environment_compare_spec.rb +0 -112
  576. data/spec/unit/knife/environment_create_spec.rb +0 -91
  577. data/spec/unit/knife/environment_delete_spec.rb +0 -71
  578. data/spec/unit/knife/environment_edit_spec.rb +0 -79
  579. data/spec/unit/knife/environment_from_file_spec.rb +0 -90
  580. data/spec/unit/knife/environment_list_spec.rb +0 -54
  581. data/spec/unit/knife/environment_show_spec.rb +0 -52
  582. data/spec/unit/knife/key_create_spec.rb +0 -223
  583. data/spec/unit/knife/key_delete_spec.rb +0 -133
  584. data/spec/unit/knife/key_edit_spec.rb +0 -264
  585. data/spec/unit/knife/key_helper.rb +0 -74
  586. data/spec/unit/knife/key_list_spec.rb +0 -216
  587. data/spec/unit/knife/key_show_spec.rb +0 -126
  588. data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
  589. data/spec/unit/knife/node_delete_spec.rb +0 -77
  590. data/spec/unit/knife/node_edit_spec.rb +0 -116
  591. data/spec/unit/knife/node_environment_set_spec.rb +0 -61
  592. data/spec/unit/knife/node_from_file_spec.rb +0 -59
  593. data/spec/unit/knife/node_list_spec.rb +0 -62
  594. data/spec/unit/knife/node_policy_set_spec.rb +0 -122
  595. data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
  596. data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
  597. data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
  598. data/spec/unit/knife/node_show_spec.rb +0 -65
  599. data/spec/unit/knife/raw_spec.rb +0 -43
  600. data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
  601. data/spec/unit/knife/role_create_spec.rb +0 -80
  602. data/spec/unit/knife/role_delete_spec.rb +0 -67
  603. data/spec/unit/knife/role_edit_spec.rb +0 -77
  604. data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
  605. data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
  606. data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
  607. data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
  608. data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
  609. data/spec/unit/knife/role_from_file_spec.rb +0 -69
  610. data/spec/unit/knife/role_list_spec.rb +0 -54
  611. data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
  612. data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
  613. data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
  614. data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
  615. data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
  616. data/spec/unit/knife/role_show_spec.rb +0 -59
  617. data/spec/unit/knife/ssh_spec.rb +0 -403
  618. data/spec/unit/knife/ssl_check_spec.rb +0 -256
  619. data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
  620. data/spec/unit/knife/status_spec.rb +0 -112
  621. data/spec/unit/knife/supermarket_download_spec.rb +0 -152
  622. data/spec/unit/knife/supermarket_install_spec.rb +0 -202
  623. data/spec/unit/knife/supermarket_list_spec.rb +0 -70
  624. data/spec/unit/knife/supermarket_search_spec.rb +0 -85
  625. data/spec/unit/knife/supermarket_share_spec.rb +0 -208
  626. data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
  627. data/spec/unit/knife/tag_create_spec.rb +0 -23
  628. data/spec/unit/knife/tag_delete_spec.rb +0 -25
  629. data/spec/unit/knife/tag_list_spec.rb +0 -23
  630. data/spec/unit/knife/user_create_spec.rb +0 -184
  631. data/spec/unit/knife/user_delete_spec.rb +0 -46
  632. data/spec/unit/knife/user_edit_spec.rb +0 -48
  633. data/spec/unit/knife/user_list_spec.rb +0 -36
  634. data/spec/unit/knife/user_reregister_spec.rb +0 -56
  635. data/spec/unit/knife/user_show_spec.rb +0 -46
  636. data/spec/unit/knife_spec.rb +0 -634
  637. data/spec/unit/provider/user/dscl_spec.rb +0 -699
  638. data/spec/unit/windows_service_spec.rb +0 -118
@@ -1,656 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@chef.io>)
3
- # Author:: Tim Hinderliter (<tim@chef.io>)
4
- # Author:: Daniel DeLeo (<dan@chef.io>)
5
- # Author:: John Keiser (<jkeiser@chef.io>)
6
- # Copyright:: Copyright (c) Chef Software Inc.
7
- # License:: Apache License, Version 2.0
8
- #
9
- # Licensed under the Apache License, Version 2.0 (the "License");
10
- # you may not use this file except in compliance with the License.
11
- # You may obtain a copy of the License at
12
- #
13
- # http://www.apache.org/licenses/LICENSE-2.0
14
- #
15
- # Unless required by applicable law or agreed to in writing, software
16
- # distributed under the License is distributed on an "AS IS" BASIS,
17
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
- #
21
-
22
- require "spec_helper"
23
-
24
- describe Chef::Knife::UI do
25
- before do
26
- @out, @err, @in = StringIO.new, StringIO.new, StringIO.new
27
- @config = {
28
- verbosity: 0,
29
- yes: nil,
30
- format: "summary",
31
- field_separator: ".",
32
- }
33
- @ui = Chef::Knife::UI.new(@out, @err, @in, @config)
34
- end
35
-
36
- class TestObject < OpenStruct
37
- def self.from_hash(hsh)
38
- new(hsh)
39
- end
40
- end
41
-
42
- describe "edit" do
43
- ruby_for_json = { "foo" => "bar" }
44
- ruby_from_json = TestObject.from_hash(ruby_for_json)
45
- json_from_ruby = "{\n \"foo\": \"bar\"\n}"
46
- json_from_editor = "{\n \"bar\": \"foo\"\n}"
47
- ruby_from_editor = TestObject.from_hash({ "bar" => "foo" })
48
- my_editor = "veeeye"
49
- temp_path = "/tmp/bar/baz"
50
-
51
- let(:subject) { @ui.edit_data(ruby_for_json, parse_output, object_class: klass) }
52
- let(:parse_output) { false }
53
- let(:klass) { nil }
54
-
55
- context "when editing is disabled" do
56
- before do
57
- @ui.config[:disable_editing] = true
58
- stub_const("Tempfile", double) # Tempfiles should never be invoked
59
- end
60
- context "when parse_output is false" do
61
- it "returns pretty json string" do
62
- expect(subject).to eql(json_from_ruby)
63
- end
64
- end
65
- context "when parse_output is true" do
66
- let(:parse_output) { true }
67
- let(:klass) { TestObject }
68
- it "returns a ruby object" do
69
- expect(subject).to eql(ruby_from_json)
70
- end
71
- context "but no object class is provided" do
72
- let(:klass) { nil }
73
- it "raises an error" do
74
- expect { subject }.to raise_error ArgumentError,
75
- /Please pass in the object class to hydrate or use #edit_hash/
76
- end
77
- end
78
- end
79
- end
80
-
81
- context "when editing is enabled" do
82
- before do
83
- @ui.config[:disable_editing] = false
84
- @ui.config[:editor] = my_editor
85
- @mock = double("Tempfile")
86
- expect(@mock).to receive(:sync=).with(true)
87
- expect(@mock).to receive(:puts).with(json_from_ruby)
88
- expect(@mock).to receive(:close)
89
- expect(@mock).to receive(:path).at_least(:once).and_return(temp_path)
90
- expect(Tempfile).to receive(:open).with([ "knife-edit-", ".json" ]).and_yield(@mock)
91
- end
92
- context "and the editor works" do
93
- before do
94
- expect(@ui).to receive(:system).with("#{my_editor} #{temp_path}").and_return(true)
95
- expect(IO).to receive(:read).with(temp_path).and_return(json_from_editor)
96
- end
97
-
98
- context "when parse_output is false" do
99
- it "returns an edited pretty json string" do
100
- expect(subject).to eql(json_from_editor)
101
- end
102
- end
103
- context "when parse_output is true" do
104
- let(:parse_output) { true }
105
- let(:klass) { TestObject }
106
- it "returns an edited ruby object" do
107
- expect(subject).to eql(ruby_from_editor)
108
- end
109
- end
110
- end
111
- context "when running the editor fails with nil" do
112
- before do
113
- expect(@ui).to receive(:system).with("#{my_editor} #{temp_path}").and_return(nil)
114
- expect(IO).not_to receive(:read)
115
- end
116
- it "throws an exception" do
117
- expect { subject }.to raise_error(RuntimeError)
118
- end
119
- end
120
- context "when running the editor fails with false" do
121
- before do
122
- expect(@ui).to receive(:system).with("#{my_editor} #{temp_path}").and_return(false)
123
- expect(IO).not_to receive(:read)
124
- end
125
- it "throws an exception" do
126
- expect { subject }.to raise_error(RuntimeError)
127
- end
128
- end
129
- end
130
- context "when editing and not stubbing Tempfile (semi-functional test)" do
131
- before do
132
- @ui.config[:disable_editing] = false
133
- @ui.config[:editor] = my_editor
134
- @tempfile = Tempfile.new([ "knife-edit-", ".json" ])
135
- expect(Tempfile).to receive(:open).with([ "knife-edit-", ".json" ]).and_yield(@tempfile)
136
- end
137
-
138
- context "and the editor works" do
139
- before do
140
- expect(@ui).to receive(:system).with("#{my_editor} #{@tempfile.path}").and_return(true)
141
- expect(IO).to receive(:read).with(@tempfile.path).and_return(json_from_editor)
142
- end
143
-
144
- context "when parse_output is false" do
145
- it "returns an edited pretty json string" do
146
- expect(subject).to eql(json_from_editor)
147
- end
148
- it "the tempfile should have mode 0600", :unix_only do
149
- # XXX: this looks odd because we're really testing Tempfile.new here
150
- expect(File.stat(@tempfile.path).mode & 0777).to eql(0600)
151
- expect(subject).to eql(json_from_editor)
152
- end
153
- end
154
-
155
- context "when parse_output is true" do
156
- let(:parse_output) { true }
157
- let(:klass) { TestObject }
158
- it "returns an edited ruby object" do
159
- expect(subject).to eql(ruby_from_editor)
160
- end
161
- it "the tempfile should have mode 0600", :unix_only do
162
- # XXX: this looks odd because we're really testing Tempfile.new here
163
- expect(File.stat(@tempfile.path).mode & 0777).to eql(0600)
164
- expect(subject).to eql(ruby_from_editor)
165
- end
166
- end
167
- end
168
- end
169
- end
170
-
171
- describe "format_list_for_display" do
172
- it "should print the full hash if --with-uri is true" do
173
- @ui.config[:with_uri] = true
174
- expect(@ui.format_list_for_display({ marcy: :playground })).to eq({ marcy: :playground })
175
- end
176
-
177
- it "should print only the keys if --with-uri is false" do
178
- @ui.config[:with_uri] = false
179
- expect(@ui.format_list_for_display({ marcy: :playground })).to eq([ :marcy ])
180
- end
181
- end
182
-
183
- shared_examples "an output mehthod handling IO exceptions" do |method|
184
- it "should throw Errno::EIO exceptions" do
185
- allow(@out).to receive(:puts).and_raise(Errno::EIO)
186
- allow(@err).to receive(:puts).and_raise(Errno::EIO)
187
- expect { @ui.send(method, "hi") }.to raise_error(Errno::EIO)
188
- end
189
-
190
- it "should ignore Errno::EPIPE exceptions (CHEF-3516)" do
191
- allow(@out).to receive(:puts).and_raise(Errno::EPIPE)
192
- allow(@err).to receive(:puts).and_raise(Errno::EPIPE)
193
- expect { @ui.send(method, "hi") }.to raise_error(SystemExit)
194
- end
195
-
196
- it "should throw Errno::EPIPE exceptions with -VV (CHEF-3516)" do
197
- @config[:verbosity] = 2
198
- allow(@out).to receive(:puts).and_raise(Errno::EPIPE)
199
- allow(@err).to receive(:puts).and_raise(Errno::EPIPE)
200
- expect { @ui.send(method, "hi") }.to raise_error(Errno::EPIPE)
201
- end
202
- end
203
-
204
- describe "output" do
205
- it_behaves_like "an output mehthod handling IO exceptions", :output
206
-
207
- it "formats strings appropriately" do
208
- @ui.output("hi")
209
- expect(@out.string).to eq("hi\n")
210
- end
211
-
212
- it "formats hashes appropriately" do
213
- @ui.output({ "hi" => "a", "lo" => "b" })
214
- expect(@out.string).to eq <<~EOM
215
- hi: a
216
- lo: b
217
- EOM
218
- end
219
-
220
- it "formats empty hashes appropriately" do
221
- @ui.output({})
222
- expect(@out.string).to eq("\n")
223
- end
224
-
225
- it "formats arrays appropriately" do
226
- @ui.output(%w{a b})
227
- expect(@out.string).to eq <<~EOM
228
- a
229
- b
230
- EOM
231
- end
232
-
233
- it "formats empty arrays appropriately" do
234
- @ui.output([ ])
235
- expect(@out.string).to eq("\n")
236
- end
237
-
238
- it "formats single-member arrays appropriately" do
239
- @ui.output([ "a" ])
240
- expect(@out.string).to eq("a\n")
241
- end
242
-
243
- it "formats nested single-member arrays appropriately" do
244
- @ui.output([ [ "a" ] ])
245
- expect(@out.string).to eq("a\n")
246
- end
247
-
248
- it "formats nested arrays appropriately" do
249
- @ui.output([ %w{a b}, %w{c d}])
250
- expect(@out.string).to eq <<~EOM
251
- a
252
- b
253
-
254
- c
255
- d
256
- EOM
257
- end
258
-
259
- it "formats nested arrays with single- and empty subarrays appropriately" do
260
- @ui.output([ %w{a b}, [ "c" ], [], %w{d e}])
261
- expect(@out.string).to eq <<~EOM
262
- a
263
- b
264
-
265
- c
266
-
267
-
268
- d
269
- e
270
- EOM
271
- end
272
-
273
- it "formats arrays of hashes with extra lines in between for readability" do
274
- @ui.output([ { "a" => "b", "c" => "d" }, { "x" => "y" }, { "m" => "n", "o" => "p" }])
275
- expect(@out.string).to eq <<~EOM
276
- a: b
277
- c: d
278
-
279
- x: y
280
-
281
- m: n
282
- o: p
283
- EOM
284
- end
285
-
286
- it "formats hashes with empty array members appropriately" do
287
- @ui.output({ "a" => [], "b" => "c" })
288
- expect(@out.string).to eq <<~EOM
289
- a:
290
- b: c
291
- EOM
292
- end
293
-
294
- it "formats hashes with single-member array values appropriately" do
295
- @ui.output({ "a" => [ "foo" ], "b" => "c" })
296
- expect(@out.string).to eq <<~EOM
297
- a: foo
298
- b: c
299
- EOM
300
- end
301
-
302
- it "formats hashes with array members appropriately" do
303
- @ui.output({ "a" => %w{foo bar}, "b" => "c" })
304
- expect(@out.string).to eq <<~EOM
305
- a:
306
- foo
307
- bar
308
- b: c
309
- EOM
310
- end
311
-
312
- it "formats hashes with single-member nested array values appropriately" do
313
- @ui.output({ "a" => [ [ "foo" ] ], "b" => "c" })
314
- expect(@out.string).to eq <<~EOM
315
- a:
316
- foo
317
- b: c
318
- EOM
319
- end
320
-
321
- it "formats hashes with nested array values appropriately" do
322
- @ui.output({ "a" => [ %w{foo bar}, %w{baz bjork} ], "b" => "c" })
323
- # XXX: using a HEREDOC at this point results in a line with required spaces which auto-whitespace removal settings
324
- # on editors will remove and will break this test.
325
- expect(@out.string).to eq("a:\n foo\n bar\n \n baz\n bjork\nb: c\n")
326
- end
327
-
328
- it "formats hashes with hash values appropriately" do
329
- @ui.output({ "a" => { "aa" => "bb", "cc" => "dd" }, "b" => "c" })
330
- expect(@out.string).to eq <<~EOM
331
- a:
332
- aa: bb
333
- cc: dd
334
- b: c
335
- EOM
336
- end
337
-
338
- it "formats hashes with empty hash values appropriately" do
339
- @ui.output({ "a" => {}, "b" => "c" })
340
- expect(@out.string).to eq <<~EOM
341
- a:
342
- b: c
343
- EOM
344
- end
345
- end
346
-
347
- describe "warn" do
348
- it_behaves_like "an output mehthod handling IO exceptions", :warn
349
- end
350
-
351
- describe "error" do
352
- it_behaves_like "an output mehthod handling IO exceptions", :warn
353
- end
354
-
355
- describe "fatal" do
356
- it_behaves_like "an output mehthod handling IO exceptions", :warn
357
- end
358
-
359
- describe "format_for_display" do
360
- it "should return the raw data" do
361
- input = { gi: :go }
362
- expect(@ui.format_for_display(input)).to eq(input)
363
- end
364
-
365
- describe "with --attribute passed" do
366
- it "should return the deeply nested attribute" do
367
- input = { "gi" => { "go" => "ge" }, "id" => "sample-data-bag-item" }
368
- @ui.config[:attribute] = "gi.go"
369
- expect(@ui.format_for_display(input)).to eq({ "sample-data-bag-item" => { "gi.go" => "ge" } })
370
- end
371
-
372
- it "should return multiple attributes" do
373
- input = { "gi" => "go", "hi" => "ho", "id" => "sample-data-bag-item" }
374
- @ui.config[:attribute] = %w{gi hi}
375
- expect(@ui.format_for_display(input)).to eq({ "sample-data-bag-item" => { "gi" => "go", "hi" => "ho" } })
376
- end
377
-
378
- it "should handle attributes named the same as methods" do
379
- input = { "keys" => "values", "hi" => "ho", "id" => "sample-data-bag-item" }
380
- @ui.config[:attribute] = "keys"
381
- expect(@ui.format_for_display(input)).to eq({ "sample-data-bag-item" => { "keys" => "values" } })
382
- end
383
-
384
- it "should handle nested attributes named the same as methods" do
385
- input = { "keys" => { "keys" => "values" }, "hi" => "ho", "id" => "sample-data-bag-item" }
386
- @ui.config[:attribute] = "keys.keys"
387
- expect(@ui.format_for_display(input)).to eq({ "sample-data-bag-item" => { "keys.keys" => "values" } })
388
- end
389
-
390
- it "should return the name attribute" do
391
- input = Chef::Node.new
392
- input.name("chef.localdomain")
393
- @ui.config[:attribute] = "name"
394
- expect(@ui.format_for_display(input)).to eq( { "chef.localdomain" => { "name" => "chef.localdomain" } })
395
- end
396
-
397
- it "should return a 'class' attribute and not the node.class" do
398
- input = Chef::Node.new
399
- input.default["class"] = "classy!"
400
- @ui.config[:attribute] = "class"
401
- expect(@ui.format_for_display(input)).to eq( { nil => { "class" => "classy!" } } )
402
- end
403
-
404
- it "should return the chef_environment attribute" do
405
- input = Chef::Node.new
406
- input.chef_environment = "production-partner-load-integration-preview-testing"
407
- @ui.config[:attribute] = "chef_environment"
408
- expect(@ui.format_for_display(input)).to eq( { nil => { "chef_environment" => "production-partner-load-integration-preview-testing" } } )
409
- end
410
-
411
- it "works with arrays" do
412
- input = Chef::Node.new
413
- input.default["array"] = %w{zero one two}
414
- @ui.config[:attribute] = "array.1"
415
- expect(@ui.format_for_display(input)).to eq( { nil => { "array.1" => "one" } } )
416
- end
417
-
418
- it "returns nil when given an attribute path that isn't a name or attribute" do
419
- input = { "keys" => { "keys" => "values" }, "hi" => "ho", "id" => "sample-data-bag-item" }
420
- non_existing_path = "nope.nada.nothingtoseehere"
421
- @ui.config[:attribute] = non_existing_path
422
- expect(@ui.format_for_display(input)).to eq({ "sample-data-bag-item" => { non_existing_path => nil } })
423
- end
424
-
425
- describe "when --field-separator is passed" do
426
- it "honors that separator" do
427
- input = { "keys" => { "with spaces" => { "open" => { "doors" => { "with many.dots" => "when asked" } } } } }
428
- @ui.config[:field_separator] = ";"
429
- @ui.config[:attribute] = "keys;with spaces;open;doors;with many.dots"
430
- expect(@ui.format_for_display(input)).to eq({ nil => { "keys;with spaces;open;doors;with many.dots" => "when asked" } })
431
- end
432
- end
433
- end
434
-
435
- describe "with --run-list passed" do
436
- it "should return the run list" do
437
- input = Chef::Node.new
438
- input.name("sample-node")
439
- input.run_list("role[monkey]", "role[churchmouse]")
440
- @ui.config[:run_list] = true
441
- response = @ui.format_for_display(input)
442
- expect(response["sample-node"]["run_list"][0]).to eq("role[monkey]")
443
- expect(response["sample-node"]["run_list"][1]).to eq("role[churchmouse]")
444
- end
445
- end
446
- end
447
-
448
- describe "format_cookbook_list_for_display" do
449
- before(:each) do
450
- @item = {
451
- "cookbook_name" => {
452
- "url" => "http://url/cookbooks/cookbook",
453
- "versions" => [
454
- { "version" => "3.0.0", "url" => "http://url/cookbooks/3.0.0" },
455
- { "version" => "2.0.0", "url" => "http://url/cookbooks/2.0.0" },
456
- { "version" => "1.0.0", "url" => "http://url/cookbooks/1.0.0" },
457
- ],
458
- },
459
- }
460
- end
461
-
462
- it "should return an array of the cookbooks with versions" do
463
- expected_response = [ "cookbook_name 3.0.0 2.0.0 1.0.0" ]
464
- response = @ui.format_cookbook_list_for_display(@item)
465
- expect(response).to eq(expected_response)
466
- end
467
-
468
- describe "with --with-uri" do
469
- it "should return the URIs" do
470
- response = {
471
- "cookbook_name" => {
472
- "1.0.0" => "http://url/cookbooks/1.0.0",
473
- "2.0.0" => "http://url/cookbooks/2.0.0",
474
- "3.0.0" => "http://url/cookbooks/3.0.0" },
475
- }
476
- @ui.config[:with_uri] = true
477
- expect(@ui.format_cookbook_list_for_display(@item)).to eq(response)
478
- end
479
- end
480
-
481
- context "when running on Windows" do
482
- before(:each) do
483
- stdout = double("StringIO", tty?: true)
484
- allow(@ui).to receive(:stdout).and_return(stdout)
485
- allow(ChefUtils).to receive(:windows?) { true }
486
- Chef::Config.reset
487
- end
488
-
489
- after(:each) do
490
- Chef::Config.reset
491
- end
492
-
493
- it "should have color set to true if knife config has color explicitly set to true" do
494
- Chef::Config[:color] = true
495
- @ui.config[:color] = true
496
- expect(@ui.color?).to eql(true)
497
- end
498
-
499
- it "should have color set to false if knife config has color explicitly set to false" do
500
- Chef::Config[:color] = false
501
- expect(@ui.color?).to eql(false)
502
- end
503
-
504
- it "should not have color set to false by default" do
505
- expect(@ui.color?).to eql(false)
506
- end
507
- end
508
- end
509
-
510
- describe "color" do
511
- context "when ui.color? => true" do
512
- it "returns colored output" do
513
- skip "doesn't work on systems that don't correctly have terminals setup for color"
514
- expect(@ui).to receive(:color?).and_return(true)
515
- expect(@ui.color("a_bus_is", :yellow)).to eql("\e[33ma_bus_is\e[0m")
516
- end
517
- end
518
-
519
- context "when ui.color? => false" do
520
- it "returns plain output" do
521
- expect(@ui).to receive(:color?).and_return(false)
522
- expect(@ui.color("a_bus_is", :yellow)).to eql("a_bus_is")
523
- end
524
- end
525
- end
526
-
527
- describe "confirm" do
528
- let(:stdout) { StringIO.new }
529
- let(:output) { stdout.string }
530
-
531
- let(:question) { "monkeys rule" }
532
- let(:answer) { "y" }
533
-
534
- let(:default_choice) { nil }
535
- let(:append_instructions) { true }
536
-
537
- def run_confirm
538
- allow(@ui).to receive(:stdout).and_return(stdout)
539
- allow(@ui.stdin).to receive(:readline).and_return(answer)
540
- @ui.confirm(question, append_instructions, default_choice)
541
- end
542
-
543
- def run_confirm_without_exit
544
- allow(@ui).to receive(:stdout).and_return(stdout)
545
- allow(@ui.stdin).to receive(:readline).and_return(answer)
546
- @ui.confirm_without_exit(question, append_instructions, default_choice)
547
- end
548
-
549
- shared_examples_for "confirm with positive answer" do
550
- it "confirm should return true" do
551
- expect(run_confirm).to be_truthy
552
- end
553
-
554
- it "confirm_without_exit should return true" do
555
- expect(run_confirm_without_exit).to be_truthy
556
- end
557
- end
558
-
559
- shared_examples_for "confirm with negative answer" do
560
- it "confirm should exit 3" do
561
- expect do
562
- run_confirm
563
- end.to raise_error(SystemExit) { |e| expect(e.status).to eq(3) }
564
- end
565
-
566
- it "confirm_without_exit should return false" do
567
- expect(run_confirm_without_exit).to be_falsey
568
- end
569
- end
570
-
571
- describe "with default choice set to true" do
572
- let(:default_choice) { true }
573
-
574
- it "should show 'Y/n' in the instructions" do
575
- run_confirm
576
- expect(output).to include("Y/n")
577
- end
578
-
579
- describe "with empty answer" do
580
- let(:answer) { "" }
581
-
582
- it_behaves_like "confirm with positive answer"
583
- end
584
-
585
- describe "with answer N " do
586
- let(:answer) { "N" }
587
-
588
- it_behaves_like "confirm with negative answer"
589
- end
590
- end
591
-
592
- describe "with default choice set to false" do
593
- let(:default_choice) { false }
594
-
595
- it "should show 'y/N' in the instructions" do
596
- run_confirm
597
- expect(output).to include("y/N")
598
- end
599
-
600
- describe "with empty answer" do
601
- let(:answer) { "" }
602
-
603
- it_behaves_like "confirm with negative answer"
604
- end
605
-
606
- describe "with answer N " do
607
- let(:answer) { "Y" }
608
-
609
- it_behaves_like "confirm with positive answer"
610
- end
611
- end
612
-
613
- %w{Y y}.each do |answer|
614
- describe "with answer #{answer}" do
615
- let(:answer) { answer }
616
-
617
- it_behaves_like "confirm with positive answer"
618
- end
619
- end
620
-
621
- %w{N n}.each do |answer|
622
- describe "with answer #{answer}" do
623
- let(:answer) { answer }
624
-
625
- it_behaves_like "confirm with negative answer"
626
- end
627
- end
628
-
629
- describe "with --y or --yes passed" do
630
- it "should return true" do
631
- @ui.config[:yes] = true
632
- expect(run_confirm).to be_truthy
633
- expect(output).to eq("")
634
- end
635
- end
636
- end
637
-
638
- describe "when asking for free-form user input" do
639
- it "asks a question and returns the answer provided by the user" do
640
- out = StringIO.new
641
- allow(@ui).to receive(:stdout).and_return(out)
642
- allow(@ui).to receive(:stdin).and_return(StringIO.new("http://mychefserver.example.com\n"))
643
- expect(@ui.ask_question("your chef server URL?")).to eq("http://mychefserver.example.com")
644
- expect(out.string).to eq("your chef server URL?")
645
- end
646
-
647
- it "suggests a default setting and returns the default when the user's response only contains whitespace" do
648
- out = StringIO.new
649
- allow(@ui).to receive(:stdout).and_return(out)
650
- allow(@ui).to receive(:stdin).and_return(StringIO.new(" \n"))
651
- expect(@ui.ask_question("your chef server URL? ", default: "http://localhost:4000")).to eq("http://localhost:4000")
652
- expect(out.string).to eq("your chef server URL? [http://localhost:4000] ")
653
- end
654
- end
655
-
656
- end