chef 16.10.8-universal-mingw32 → 17.0.242-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.
- checksums.yaml +4 -4
- data/Gemfile +9 -10
- data/README.md +1 -1
- data/Rakefile +13 -2
- data/chef-universal-mingw32.gemspec +1 -1
- data/chef.gemspec +7 -9
- data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.Wrapper.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/Newtonsoft.Json.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +153 -149
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Diagnostics.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Management.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Utility.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.ConsoleHost.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.CoreCLR.Eventing.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.MarkdownRender.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Security.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Management.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Runtime.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Newtonsoft.Json.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.Messages.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Common.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Management.Automation.dll +0 -0
- data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Pkcs.dll +0 -0
- data/distro/ruby_bin_folder/x86/Chef.PowerShell.dll +0 -0
- data/distro/ruby_bin_folder/x86/Chef.Powershell.Wrapper.dll +0 -0
- data/distro/ruby_bin_folder/x86/Newtonsoft.Json.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +153 -149
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Diagnostics.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Management.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Utility.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.ConsoleHost.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.CoreCLR.Eventing.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.MarkdownRender.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Security.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Management.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Runtime.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Newtonsoft.Json.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.Messages.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Common.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Management.Automation.dll +0 -0
- data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Pkcs.dll +0 -0
- data/lib/chef/application/base.rb +1 -1
- data/lib/chef/applications.rb +0 -1
- data/lib/chef/chef_fs/command_line.rb +5 -2
- data/lib/chef/chef_fs/file_system.rb +9 -10
- data/lib/chef/client.rb +2 -2
- data/lib/chef/compliance/default_attributes.rb +10 -5
- data/lib/chef/compliance/fetcher/automate.rb +15 -11
- data/lib/chef/compliance/reporter/automate.rb +17 -7
- data/lib/chef/compliance/reporter/chef_server_automate.rb +11 -6
- data/lib/chef/compliance/reporter/cli.rb +77 -0
- data/lib/chef/compliance/reporter/compliance_enforcer.rb +4 -0
- data/lib/chef/compliance/reporter/json_file.rb +8 -1
- data/lib/chef/compliance/runner.rb +71 -28
- data/lib/chef/cookbook/synchronizer.rb +3 -5
- data/lib/chef/cookbook_loader.rb +2 -4
- data/lib/chef/cookbook_uploader.rb +0 -1
- data/lib/chef/data_bag_item.rb +11 -2
- data/lib/chef/delayed_evaluator.rb +4 -0
- data/lib/chef/deprecated.rb +4 -0
- data/lib/chef/dsl/chef_vault.rb +6 -6
- data/lib/chef/dsl/reboot_pending.rb +1 -2
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
- data/lib/chef/group.rb +75 -0
- data/lib/chef/mixin/get_source_from_package.rb +1 -1
- data/lib/chef/node/attribute.rb +6 -4
- data/lib/chef/node/immutable_collections.rb +13 -0
- data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
- data/lib/chef/org.rb +3 -2
- data/lib/chef/property.rb +18 -0
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/provider/cron.rb +1 -1
- data/lib/chef/provider/execute.rb +2 -1
- data/lib/chef/provider/file.rb +2 -2
- data/lib/chef/provider/git.rb +5 -7
- data/lib/chef/provider/group/groupadd.rb +3 -3
- data/lib/chef/provider/group/groupmod.rb +3 -3
- data/lib/chef/provider/group/pw.rb +3 -3
- data/lib/chef/provider/ifconfig.rb +2 -2
- data/lib/chef/provider/link.rb +2 -2
- data/lib/chef/provider/mount.rb +12 -7
- data/lib/chef/provider/mount/aix.rb +3 -3
- data/lib/chef/provider/mount/mount.rb +6 -6
- data/lib/chef/provider/mount/windows.rb +1 -1
- data/lib/chef/provider/package.rb +17 -21
- data/lib/chef/provider/package/apt.rb +27 -1
- data/lib/chef/provider/package/deb.rb +3 -3
- data/lib/chef/provider/package/dnf/dnf_helper.py +5 -1
- data/lib/chef/provider/package/portage.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +11 -17
- data/lib/chef/provider/package/windows.rb +2 -4
- data/lib/chef/provider/package/yum/yum_helper.py +5 -1
- data/lib/chef/provider/route.rb +2 -2
- data/lib/chef/provider/service.rb +6 -6
- data/lib/chef/provider/service/aixinit.rb +1 -1
- data/lib/chef/provider/service/debian.rb +1 -1
- data/lib/chef/provider/service/freebsd.rb +15 -21
- data/lib/chef/provider/service/macosx.rb +7 -7
- data/lib/chef/provider/service/systemd.rb +43 -14
- data/lib/chef/provider/service/upstart.rb +2 -13
- data/lib/chef/provider/service/windows.rb +12 -12
- data/lib/chef/provider/subversion.rb +10 -12
- data/lib/chef/provider/systemd_unit.rb +36 -10
- data/lib/chef/provider/template/content.rb +2 -6
- data/lib/chef/provider/user.rb +2 -2
- data/lib/chef/provider/user/dscl.rb +1 -1
- data/lib/chef/provider/user/mac.rb +17 -20
- data/lib/chef/provider/user/pw.rb +1 -1
- data/lib/chef/provider/user/windows.rb +1 -1
- data/lib/chef/provider/zypper_repository.rb +2 -2
- data/lib/chef/providers.rb +0 -1
- data/lib/chef/resource/alternatives.rb +6 -6
- data/lib/chef/resource/apt_package.rb +1 -1
- data/lib/chef/resource/apt_preference.rb +2 -2
- data/lib/chef/resource/apt_repository.rb +6 -6
- data/lib/chef/resource/apt_update.rb +3 -2
- data/lib/chef/resource/archive_file.rb +2 -3
- data/lib/chef/resource/breakpoint.rb +1 -1
- data/lib/chef/resource/build_essential.rb +2 -6
- data/lib/chef/resource/chef_client_config.rb +2 -2
- data/lib/chef/resource/chef_client_cron.rb +5 -5
- data/lib/chef/resource/chef_client_launchd.rb +4 -4
- data/lib/chef/resource/chef_client_scheduled_task.rb +1 -1
- data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
- data/lib/chef/resource/chef_handler.rb +3 -7
- data/lib/chef/resource/chef_sleep.rb +1 -1
- data/lib/chef/resource/chef_vault_secret.rb +3 -8
- data/lib/chef/resource/chocolatey_config.rb +2 -6
- data/lib/chef/resource/chocolatey_feature.rb +2 -6
- data/lib/chef/resource/chocolatey_source.rb +4 -10
- data/lib/chef/resource/cron/_cron_shared.rb +2 -2
- data/lib/chef/resource/cron_access.rb +2 -4
- data/lib/chef/resource/dmg_package.rb +6 -10
- data/lib/chef/resource/dpkg_package.rb +1 -1
- data/lib/chef/resource/execute.rb +6 -1
- data/lib/chef/resource/file.rb +1 -1
- data/lib/chef/resource/group.rb +2 -2
- data/lib/chef/resource/homebrew_cask.rb +2 -6
- data/lib/chef/resource/homebrew_tap.rb +2 -6
- data/lib/chef/resource/hostname.rb +21 -17
- data/lib/chef/resource/http_request.rb +1 -1
- data/lib/chef/resource/kernel_module.rb +6 -17
- data/lib/chef/resource/locale.rb +2 -3
- data/lib/chef/resource/lwrp_base.rb +4 -0
- data/lib/chef/resource/macos_userdefaults.rb +10 -14
- data/lib/chef/resource/mdadm.rb +53 -7
- data/lib/chef/resource/mount.rb +2 -1
- data/lib/chef/resource/openssl_ec_private_key.rb +2 -2
- data/lib/chef/resource/openssl_rsa_private_key.rb +1 -1
- data/lib/chef/resource/openssl_x509_certificate.rb +2 -2
- data/lib/chef/resource/plist.rb +7 -7
- data/lib/chef/resource/powershell_script.rb +1 -1
- data/lib/chef/resource/remote_file.rb +1 -1
- data/lib/chef/resource/rhsm_errata.rb +16 -1
- data/lib/chef/resource/rhsm_errata_level.rb +10 -1
- data/lib/chef/resource/rhsm_register.rb +12 -6
- data/lib/chef/resource/rhsm_repo.rb +2 -6
- data/lib/chef/resource/rhsm_subscription.rb +2 -6
- data/lib/chef/resource/scm/git.rb +1 -1
- data/lib/chef/resource/sudo.rb +6 -6
- data/lib/chef/resource/sysctl.rb +2 -6
- data/lib/chef/resource/systemd_unit.rb +2 -2
- data/lib/chef/resource/template.rb +1 -1
- data/lib/chef/resource/timezone.rb +1 -3
- data/lib/chef/resource/user/mac_user.rb +1 -1
- data/lib/chef/resource/user_ulimit.rb +2 -2
- data/lib/chef/resource/windows_ad_join.rb +2 -6
- data/lib/chef/resource/windows_audit_policy.rb +1 -1
- data/lib/chef/resource/windows_auto_run.rb +2 -5
- data/lib/chef/resource/windows_certificate.rb +207 -73
- data/lib/chef/resource/windows_dfs_folder.rb +2 -6
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -6
- data/lib/chef/resource/windows_dfs_server.rb +1 -3
- data/lib/chef/resource/windows_dns_record.rb +2 -6
- data/lib/chef/resource/windows_dns_zone.rb +2 -6
- data/lib/chef/resource/windows_env.rb +5 -4
- data/lib/chef/resource/windows_feature.rb +3 -9
- data/lib/chef/resource/windows_feature_dism.rb +2 -6
- data/lib/chef/resource/windows_feature_powershell.rb +3 -3
- data/lib/chef/resource/windows_firewall_profile.rb +4 -4
- data/lib/chef/resource/windows_firewall_rule.rb +2 -5
- data/lib/chef/resource/windows_font.rb +2 -4
- data/lib/chef/resource/windows_pagefile.rb +2 -6
- data/lib/chef/resource/windows_path.rb +2 -2
- data/lib/chef/resource/windows_printer.rb +4 -4
- data/lib/chef/resource/windows_printer_port.rb +6 -6
- data/lib/chef/resource/windows_security_policy.rb +53 -40
- data/lib/chef/resource/windows_share.rb +14 -21
- data/lib/chef/resource/windows_shortcut.rb +4 -6
- data/lib/chef/resource/windows_task.rb +17 -5
- data/lib/chef/resource/windows_uac.rb +1 -1
- data/lib/chef/resource/windows_user_privilege.rb +4 -4
- data/lib/chef/resource/windows_workgroup.rb +1 -2
- data/lib/chef/resources.rb +0 -1
- data/lib/chef/user.rb +0 -1
- data/lib/chef/user_v1.rb +3 -4
- data/lib/chef/util/dsc/configuration_generator.rb +1 -0
- data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/registry.rb +4 -2
- data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
- data/spec/data/lwrp/resources/bar.rb +2 -0
- data/spec/data/lwrp/resources/buck_passer.rb +1 -0
- data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
- data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
- data/spec/data/lwrp/resources/foo.rb +2 -0
- data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
- data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
- data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
- data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
- data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
- data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
- data/spec/data/lwrp_override/resources/foo.rb +1 -0
- data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
- data/spec/data/rubygems.org/sexp_processor-info +49 -0
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
- data/spec/functional/dsl/registry_helper_spec.rb +1 -1
- data/spec/functional/resource/aixinit_service_spec.rb +7 -7
- data/spec/functional/resource/apt_package_spec.rb +1 -1
- data/spec/functional/resource/chocolatey_package_spec.rb +13 -0
- data/spec/functional/resource/cron_spec.rb +1 -1
- data/spec/functional/resource/dnf_package_spec.rb +4 -1
- data/spec/functional/resource/registry_spec.rb +8 -8
- data/spec/functional/resource/user/mac_user_spec.rb +2 -2
- data/spec/functional/resource/windows_certificate_spec.rb +92 -35
- data/spec/functional/version_spec.rb +1 -1
- data/spec/functional/win32/registry_spec.rb +1 -1
- data/spec/integration/client/client_spec.rb +5 -2
- data/spec/integration/client/exit_code_spec.rb +1 -1
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/compliance/compliance_spec.rb +3 -2
- data/spec/integration/ohai/ohai_spec.rb +7 -6
- data/spec/integration/recipes/accumulator_spec.rb +13 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
- data/spec/integration/recipes/lwrp_spec.rb +3 -1
- data/spec/integration/recipes/notifies_spec.rb +15 -1
- data/spec/integration/recipes/notifying_block_spec.rb +2 -1
- data/spec/integration/recipes/recipe_dsl_spec.rb +9 -9
- data/spec/integration/recipes/unified_mode_spec.rb +1 -1
- data/spec/integration/recipes/use_partial_spec.rb +4 -1
- data/spec/spec_helper.rb +11 -13
- data/spec/support/chef_helpers.rb +0 -16
- data/spec/support/lib/chef/resource/with_state.rb +0 -1
- data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
- data/spec/support/lib/chef/resource/zen_master.rb +0 -1
- data/spec/support/matchers/leak.rb +7 -9
- data/spec/support/platform_helpers.rb +5 -8
- data/spec/support/shared/integration/integration_helper.rb +0 -1
- data/spec/support/shared/unit/provider/file.rb +14 -0
- data/spec/support/shared/unit/script_resource.rb +2 -2
- data/spec/unit/application/solo_spec.rb +2 -2
- data/spec/unit/chef_fs/diff_spec.rb +1 -1
- data/spec/unit/chef_fs/file_system_spec.rb +1 -1
- data/spec/unit/compliance/fetcher/automate_spec.rb +5 -13
- data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
- data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +20 -0
- data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +1 -0
- data/spec/unit/compliance/runner_spec.rb +84 -9
- data/spec/unit/data_bag_item_spec.rb +1 -6
- data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
- data/spec/unit/dsl/registry_helper_spec.rb +1 -1
- data/spec/unit/lwrp_spec.rb +1 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -3
- data/spec/unit/node/attribute_spec.rb +1 -1
- data/spec/unit/node_spec.rb +78 -0
- data/spec/unit/org_group_spec.rb +45 -0
- data/spec/unit/property_spec.rb +23 -22
- data/spec/unit/provider/cron_spec.rb +1 -1
- data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
- data/spec/unit/provider/group/groupmod_spec.rb +2 -2
- data/spec/unit/provider/group/pw_spec.rb +2 -2
- data/spec/unit/provider/group_spec.rb +1 -1
- data/spec/unit/provider/mount/mount_spec.rb +52 -0
- data/spec/unit/provider/package/apt_spec.rb +84 -18
- data/spec/unit/provider/package/deb_spec.rb +3 -3
- data/spec/unit/provider/package/rubygems_spec.rb +21 -33
- data/spec/unit/provider/service/arch_service_spec.rb +1 -0
- data/spec/unit/provider/service/debian_service_spec.rb +1 -0
- data/spec/unit/provider/service/macosx_spec.rb +5 -5
- data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
- data/spec/unit/provider/service/upstart_service_spec.rb +0 -29
- data/spec/unit/provider/service/windows_spec.rb +2 -2
- data/spec/unit/provider/subversion_spec.rb +2 -2
- data/spec/unit/provider/systemd_unit_spec.rb +79 -60
- data/spec/unit/provider/zypper_repository_spec.rb +2 -2
- data/spec/unit/provider_spec.rb +0 -8
- data/spec/unit/resource/chef_client_cron_spec.rb +8 -8
- data/spec/unit/resource/powershell_script_spec.rb +2 -2
- data/spec/unit/resource/windows_task_spec.rb +1 -1
- data/spec/unit/user_spec.rb +1 -1
- data/spec/unit/user_v1_spec.rb +6 -4
- data/tasks/rspec.rb +16 -8
- metadata +25 -386
- data/bin/knife +0 -24
- data/lib/chef/application/knife.rb +0 -234
- data/lib/chef/application/windows_service.rb +0 -338
- data/lib/chef/application/windows_service_manager.rb +0 -205
- data/lib/chef/chef_fs/knife.rb +0 -160
- data/lib/chef/chef_fs/parallelizer.rb +0 -102
- data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
- data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
- data/lib/chef/knife.rb +0 -665
- data/lib/chef/knife/acl_add.rb +0 -57
- data/lib/chef/knife/acl_base.rb +0 -183
- data/lib/chef/knife/acl_bulk_add.rb +0 -78
- data/lib/chef/knife/acl_bulk_remove.rb +0 -83
- data/lib/chef/knife/acl_remove.rb +0 -62
- data/lib/chef/knife/acl_show.rb +0 -56
- data/lib/chef/knife/bootstrap.rb +0 -1192
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
- data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
- data/lib/chef/knife/bootstrap/templates/README.md +0 -11
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
- data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
- data/lib/chef/knife/client_bulk_delete.rb +0 -104
- data/lib/chef/knife/client_create.rb +0 -101
- data/lib/chef/knife/client_delete.rb +0 -62
- data/lib/chef/knife/client_edit.rb +0 -52
- data/lib/chef/knife/client_key_create.rb +0 -73
- data/lib/chef/knife/client_key_delete.rb +0 -80
- data/lib/chef/knife/client_key_edit.rb +0 -83
- data/lib/chef/knife/client_key_list.rb +0 -73
- data/lib/chef/knife/client_key_show.rb +0 -80
- data/lib/chef/knife/client_list.rb +0 -41
- data/lib/chef/knife/client_reregister.rb +0 -58
- data/lib/chef/knife/client_show.rb +0 -48
- data/lib/chef/knife/config_get.rb +0 -39
- data/lib/chef/knife/config_get_profile.rb +0 -37
- data/lib/chef/knife/config_list.rb +0 -139
- data/lib/chef/knife/config_list_profiles.rb +0 -37
- data/lib/chef/knife/config_show.rb +0 -127
- data/lib/chef/knife/config_use.rb +0 -61
- data/lib/chef/knife/config_use_profile.rb +0 -47
- data/lib/chef/knife/configure.rb +0 -150
- data/lib/chef/knife/configure_client.rb +0 -48
- data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
- data/lib/chef/knife/cookbook_delete.rb +0 -151
- data/lib/chef/knife/cookbook_download.rb +0 -142
- data/lib/chef/knife/cookbook_list.rb +0 -47
- data/lib/chef/knife/cookbook_metadata.rb +0 -106
- data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
- data/lib/chef/knife/cookbook_show.rb +0 -98
- data/lib/chef/knife/cookbook_upload.rb +0 -292
- data/lib/chef/knife/core/bootstrap_context.rb +0 -264
- data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
- data/lib/chef/knife/core/formatting_options.rb +0 -49
- data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
- data/lib/chef/knife/core/generic_presenter.rb +0 -232
- data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
- data/lib/chef/knife/core/node_editor.rb +0 -130
- data/lib/chef/knife/core/node_presenter.rb +0 -133
- data/lib/chef/knife/core/object_loader.rb +0 -115
- data/lib/chef/knife/core/status_presenter.rb +0 -147
- data/lib/chef/knife/core/subcommand_loader.rb +0 -203
- data/lib/chef/knife/core/text_formatter.rb +0 -85
- data/lib/chef/knife/core/ui.rb +0 -338
- data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -406
- data/lib/chef/knife/data_bag_create.rb +0 -81
- data/lib/chef/knife/data_bag_delete.rb +0 -49
- data/lib/chef/knife/data_bag_edit.rb +0 -74
- data/lib/chef/knife/data_bag_from_file.rb +0 -113
- data/lib/chef/knife/data_bag_list.rb +0 -42
- data/lib/chef/knife/data_bag_secret_options.rb +0 -122
- data/lib/chef/knife/data_bag_show.rb +0 -69
- data/lib/chef/knife/delete.rb +0 -125
- data/lib/chef/knife/deps.rb +0 -156
- data/lib/chef/knife/diff.rb +0 -83
- data/lib/chef/knife/download.rb +0 -84
- data/lib/chef/knife/edit.rb +0 -88
- data/lib/chef/knife/environment_compare.rb +0 -128
- data/lib/chef/knife/environment_create.rb +0 -52
- data/lib/chef/knife/environment_delete.rb +0 -44
- data/lib/chef/knife/environment_edit.rb +0 -44
- data/lib/chef/knife/environment_from_file.rb +0 -84
- data/lib/chef/knife/environment_list.rb +0 -41
- data/lib/chef/knife/environment_show.rb +0 -47
- data/lib/chef/knife/exec.rb +0 -99
- data/lib/chef/knife/group_add.rb +0 -55
- data/lib/chef/knife/group_create.rb +0 -49
- data/lib/chef/knife/group_destroy.rb +0 -53
- data/lib/chef/knife/group_list.rb +0 -43
- data/lib/chef/knife/group_remove.rb +0 -56
- data/lib/chef/knife/group_show.rb +0 -49
- data/lib/chef/knife/key_create.rb +0 -112
- data/lib/chef/knife/key_create_base.rb +0 -50
- data/lib/chef/knife/key_delete.rb +0 -55
- data/lib/chef/knife/key_edit.rb +0 -118
- data/lib/chef/knife/key_edit_base.rb +0 -55
- data/lib/chef/knife/key_list.rb +0 -90
- data/lib/chef/knife/key_list_base.rb +0 -45
- data/lib/chef/knife/key_show.rb +0 -53
- data/lib/chef/knife/list.rb +0 -177
- data/lib/chef/knife/node_bulk_delete.rb +0 -75
- data/lib/chef/knife/node_create.rb +0 -47
- data/lib/chef/knife/node_delete.rb +0 -46
- data/lib/chef/knife/node_edit.rb +0 -70
- data/lib/chef/knife/node_environment_set.rb +0 -53
- data/lib/chef/knife/node_from_file.rb +0 -51
- data/lib/chef/knife/node_list.rb +0 -44
- data/lib/chef/knife/node_policy_set.rb +0 -79
- data/lib/chef/knife/node_run_list_add.rb +0 -104
- data/lib/chef/knife/node_run_list_remove.rb +0 -67
- data/lib/chef/knife/node_run_list_set.rb +0 -66
- data/lib/chef/knife/node_show.rb +0 -63
- data/lib/chef/knife/null.rb +0 -12
- data/lib/chef/knife/raw.rb +0 -123
- data/lib/chef/knife/recipe_list.rb +0 -32
- data/lib/chef/knife/rehash.rb +0 -50
- data/lib/chef/knife/role_bulk_delete.rb +0 -66
- data/lib/chef/knife/role_create.rb +0 -53
- data/lib/chef/knife/role_delete.rb +0 -46
- data/lib/chef/knife/role_edit.rb +0 -45
- data/lib/chef/knife/role_env_run_list_add.rb +0 -87
- data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
- data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
- data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
- data/lib/chef/knife/role_env_run_list_set.rb +0 -70
- data/lib/chef/knife/role_from_file.rb +0 -51
- data/lib/chef/knife/role_list.rb +0 -42
- data/lib/chef/knife/role_run_list_add.rb +0 -87
- data/lib/chef/knife/role_run_list_clear.rb +0 -55
- data/lib/chef/knife/role_run_list_remove.rb +0 -56
- data/lib/chef/knife/role_run_list_replace.rb +0 -60
- data/lib/chef/knife/role_run_list_set.rb +0 -69
- data/lib/chef/knife/role_show.rb +0 -48
- data/lib/chef/knife/search.rb +0 -194
- data/lib/chef/knife/serve.rb +0 -65
- data/lib/chef/knife/show.rb +0 -72
- data/lib/chef/knife/ssh.rb +0 -645
- data/lib/chef/knife/ssl_check.rb +0 -284
- data/lib/chef/knife/ssl_fetch.rb +0 -161
- data/lib/chef/knife/status.rb +0 -95
- data/lib/chef/knife/supermarket_download.rb +0 -121
- data/lib/chef/knife/supermarket_install.rb +0 -192
- data/lib/chef/knife/supermarket_list.rb +0 -76
- data/lib/chef/knife/supermarket_search.rb +0 -53
- data/lib/chef/knife/supermarket_share.rb +0 -166
- data/lib/chef/knife/supermarket_show.rb +0 -66
- data/lib/chef/knife/supermarket_unshare.rb +0 -61
- data/lib/chef/knife/tag_create.rb +0 -52
- data/lib/chef/knife/tag_delete.rb +0 -60
- data/lib/chef/knife/tag_list.rb +0 -47
- data/lib/chef/knife/upload.rb +0 -86
- data/lib/chef/knife/user_create.rb +0 -107
- data/lib/chef/knife/user_delete.rb +0 -44
- data/lib/chef/knife/user_dissociate.rb +0 -42
- data/lib/chef/knife/user_edit.rb +0 -52
- data/lib/chef/knife/user_invite_add.rb +0 -43
- data/lib/chef/knife/user_invite_list.rb +0 -34
- data/lib/chef/knife/user_invite_rescind.rb +0 -63
- data/lib/chef/knife/user_key_create.rb +0 -73
- data/lib/chef/knife/user_key_delete.rb +0 -80
- data/lib/chef/knife/user_key_edit.rb +0 -83
- data/lib/chef/knife/user_key_list.rb +0 -73
- data/lib/chef/knife/user_key_show.rb +0 -80
- data/lib/chef/knife/user_list.rb +0 -42
- data/lib/chef/knife/user_reregister.rb +0 -59
- data/lib/chef/knife/user_show.rb +0 -48
- data/lib/chef/knife/xargs.rb +0 -282
- data/lib/chef/knife/yaml_convert.rb +0 -91
- data/lib/chef/resource/user/dscl_user.rb +0 -35
- data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
- data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
- data/spec/data/knife_subcommand/test_explicit_category.rb +0 -7
- data/spec/data/knife_subcommand/test_name_mapping.rb +0 -4
- data/spec/data/knife_subcommand/test_yourself.rb +0 -21
- data/spec/functional/knife/configure_spec.rb +0 -33
- data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
- data/spec/functional/knife/exec_spec.rb +0 -55
- data/spec/functional/knife/rehash_spec.rb +0 -39
- data/spec/functional/knife/smoke_test.rb +0 -42
- data/spec/functional/knife/ssh_spec.rb +0 -352
- data/spec/functional/resource/user/dscl_spec.rb +0 -188
- data/spec/functional/resource/windows_service_spec.rb +0 -105
- data/spec/functional/win32/service_manager_spec.rb +0 -220
- data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
- data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
- data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
- data/spec/integration/knife/chefignore_spec.rb +0 -301
- data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
- data/spec/integration/knife/client_create_spec.rb +0 -70
- data/spec/integration/knife/client_delete_spec.rb +0 -64
- data/spec/integration/knife/client_key_create_spec.rb +0 -66
- data/spec/integration/knife/client_key_delete_spec.rb +0 -43
- data/spec/integration/knife/client_key_list_spec.rb +0 -61
- data/spec/integration/knife/client_key_show_spec.rb +0 -45
- data/spec/integration/knife/client_list_spec.rb +0 -49
- data/spec/integration/knife/client_show_spec.rb +0 -37
- data/spec/integration/knife/common_options_spec.rb +0 -174
- data/spec/integration/knife/config_list_spec.rb +0 -220
- data/spec/integration/knife/config_show_spec.rb +0 -192
- data/spec/integration/knife/config_use_spec.rb +0 -198
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
- data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
- data/spec/integration/knife/cookbook_download_spec.rb +0 -72
- data/spec/integration/knife/cookbook_list_spec.rb +0 -55
- data/spec/integration/knife/cookbook_show_spec.rb +0 -149
- data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
- data/spec/integration/knife/data_bag_create_spec.rb +0 -125
- data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
- data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
- data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
- data/spec/integration/knife/data_bag_list_spec.rb +0 -44
- data/spec/integration/knife/data_bag_show_spec.rb +0 -95
- data/spec/integration/knife/delete_spec.rb +0 -1018
- data/spec/integration/knife/deps_spec.rb +0 -703
- data/spec/integration/knife/diff_spec.rb +0 -605
- data/spec/integration/knife/download_spec.rb +0 -1336
- data/spec/integration/knife/environment_compare_spec.rb +0 -75
- data/spec/integration/knife/environment_create_spec.rb +0 -41
- data/spec/integration/knife/environment_delete_spec.rb +0 -37
- data/spec/integration/knife/environment_from_file_spec.rb +0 -116
- data/spec/integration/knife/environment_list_spec.rb +0 -42
- data/spec/integration/knife/environment_show_spec.rb +0 -77
- data/spec/integration/knife/list_spec.rb +0 -1060
- data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
- data/spec/integration/knife/node_create_spec.rb +0 -47
- data/spec/integration/knife/node_delete_spec.rb +0 -48
- data/spec/integration/knife/node_environment_set_spec.rb +0 -46
- data/spec/integration/knife/node_from_file_spec.rb +0 -59
- data/spec/integration/knife/node_list_spec.rb +0 -45
- data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
- data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
- data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
- data/spec/integration/knife/node_show_spec.rb +0 -36
- data/spec/integration/knife/raw_spec.rb +0 -297
- data/spec/integration/knife/redirection_spec.rb +0 -64
- data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
- data/spec/integration/knife/role_create_spec.rb +0 -41
- data/spec/integration/knife/role_delete_spec.rb +0 -48
- data/spec/integration/knife/role_from_file_spec.rb +0 -96
- data/spec/integration/knife/role_list_spec.rb +0 -45
- data/spec/integration/knife/role_show_spec.rb +0 -51
- data/spec/integration/knife/search_node_spec.rb +0 -40
- data/spec/integration/knife/serve_spec.rb +0 -92
- data/spec/integration/knife/show_spec.rb +0 -197
- data/spec/integration/knife/upload_spec.rb +0 -1617
- data/spec/support/shared/functional/knife.rb +0 -37
- data/spec/support/shared/functional/win32_service.rb +0 -57
- data/spec/support/shared/integration/knife_support.rb +0 -192
- data/spec/support/shared/unit/knife_shared.rb +0 -39
- data/spec/unit/application/knife_spec.rb +0 -241
- data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
- data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
- data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
- data/spec/unit/knife/bootstrap_spec.rb +0 -2220
- data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
- data/spec/unit/knife/client_create_spec.rb +0 -169
- data/spec/unit/knife/client_delete_spec.rb +0 -99
- data/spec/unit/knife/client_edit_spec.rb +0 -53
- data/spec/unit/knife/client_list_spec.rb +0 -34
- data/spec/unit/knife/client_reregister_spec.rb +0 -62
- data/spec/unit/knife/client_show_spec.rb +0 -52
- data/spec/unit/knife/configure_client_spec.rb +0 -81
- data/spec/unit/knife/configure_spec.rb +0 -190
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
- data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
- data/spec/unit/knife/cookbook_download_spec.rb +0 -255
- data/spec/unit/knife/cookbook_list_spec.rb +0 -88
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
- data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
- data/spec/unit/knife/cookbook_show_spec.rb +0 -253
- data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
- data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
- data/spec/unit/knife/core/node_editor_spec.rb +0 -211
- data/spec/unit/knife/core/object_loader_spec.rb +0 -81
- data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
- data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
- data/spec/unit/knife/core/ui_spec.rb +0 -656
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
- data/spec/unit/knife/data_bag_create_spec.rb +0 -175
- data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
- data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
- data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
- data/spec/unit/knife/data_bag_show_spec.rb +0 -139
- data/spec/unit/knife/environment_compare_spec.rb +0 -112
- data/spec/unit/knife/environment_create_spec.rb +0 -91
- data/spec/unit/knife/environment_delete_spec.rb +0 -71
- data/spec/unit/knife/environment_edit_spec.rb +0 -79
- data/spec/unit/knife/environment_from_file_spec.rb +0 -90
- data/spec/unit/knife/environment_list_spec.rb +0 -54
- data/spec/unit/knife/environment_show_spec.rb +0 -52
- data/spec/unit/knife/key_create_spec.rb +0 -223
- data/spec/unit/knife/key_delete_spec.rb +0 -133
- data/spec/unit/knife/key_edit_spec.rb +0 -264
- data/spec/unit/knife/key_helper.rb +0 -74
- data/spec/unit/knife/key_list_spec.rb +0 -216
- data/spec/unit/knife/key_show_spec.rb +0 -126
- data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
- data/spec/unit/knife/node_delete_spec.rb +0 -77
- data/spec/unit/knife/node_edit_spec.rb +0 -116
- data/spec/unit/knife/node_environment_set_spec.rb +0 -61
- data/spec/unit/knife/node_from_file_spec.rb +0 -59
- data/spec/unit/knife/node_list_spec.rb +0 -62
- data/spec/unit/knife/node_policy_set_spec.rb +0 -122
- data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
- data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
- data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
- data/spec/unit/knife/node_show_spec.rb +0 -65
- data/spec/unit/knife/raw_spec.rb +0 -43
- data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
- data/spec/unit/knife/role_create_spec.rb +0 -80
- data/spec/unit/knife/role_delete_spec.rb +0 -67
- data/spec/unit/knife/role_edit_spec.rb +0 -77
- data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
- data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
- data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
- data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
- data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
- data/spec/unit/knife/role_from_file_spec.rb +0 -69
- data/spec/unit/knife/role_list_spec.rb +0 -54
- data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
- data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
- data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
- data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
- data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
- data/spec/unit/knife/role_show_spec.rb +0 -59
- data/spec/unit/knife/ssh_spec.rb +0 -403
- data/spec/unit/knife/ssl_check_spec.rb +0 -256
- data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
- data/spec/unit/knife/status_spec.rb +0 -112
- data/spec/unit/knife/supermarket_download_spec.rb +0 -152
- data/spec/unit/knife/supermarket_install_spec.rb +0 -202
- data/spec/unit/knife/supermarket_list_spec.rb +0 -70
- data/spec/unit/knife/supermarket_search_spec.rb +0 -85
- data/spec/unit/knife/supermarket_share_spec.rb +0 -208
- data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
- data/spec/unit/knife/tag_create_spec.rb +0 -23
- data/spec/unit/knife/tag_delete_spec.rb +0 -25
- data/spec/unit/knife/tag_list_spec.rb +0 -23
- data/spec/unit/knife/user_create_spec.rb +0 -184
- data/spec/unit/knife/user_delete_spec.rb +0 -46
- data/spec/unit/knife/user_edit_spec.rb +0 -48
- data/spec/unit/knife/user_list_spec.rb +0 -36
- data/spec/unit/knife/user_reregister_spec.rb +0 -56
- data/spec/unit/knife/user_show_spec.rb +0 -46
- data/spec/unit/knife_spec.rb +0 -634
- data/spec/unit/provider/user/dscl_spec.rb +0 -699
- data/spec/unit/windows_service_spec.rb +0 -118
@@ -1,211 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Jordan Running (<jr@chef.io>)
|
3
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
require "spec_helper"
|
20
|
-
require "chef/knife/core/node_editor"
|
21
|
-
|
22
|
-
describe Chef::Knife::NodeEditor do
|
23
|
-
let(:node_data) do
|
24
|
-
{ "name" => "test_node",
|
25
|
-
"chef_environment" => "production",
|
26
|
-
"automatic" => { "foo" => "bar" },
|
27
|
-
"default" => { "alpha" => { "bravo" => "charlie", "delta" => "echo" } },
|
28
|
-
"normal" => { "alpha" => { "bravo" => "hotel" }, "tags" => [] },
|
29
|
-
"override" => { "alpha" => { "bravo" => "foxtrot", "delta" => "golf" } },
|
30
|
-
"policy_name" => nil,
|
31
|
-
"policy_group" => nil,
|
32
|
-
"run_list" => %w{role[comedy] role[drama] recipe[mystery]},
|
33
|
-
}
|
34
|
-
end
|
35
|
-
|
36
|
-
let(:node) { Chef::Node.from_hash(node_data) }
|
37
|
-
|
38
|
-
let(:ui) { double "ui" }
|
39
|
-
let(:base_config) { { editor: "cat" } }
|
40
|
-
let(:config) { base_config.merge(all_attributes: false) }
|
41
|
-
|
42
|
-
subject { described_class.new(node, ui, config) }
|
43
|
-
|
44
|
-
describe "#view" do
|
45
|
-
it "returns a Hash with only the name, chef_environment, normal, " +
|
46
|
-
"policy_name, policy_group, and run_list properties" do
|
47
|
-
expected = node_data.select do |key,|
|
48
|
-
%w{ name chef_environment normal
|
49
|
-
policy_name policy_group run_list }.include?(key)
|
50
|
-
end
|
51
|
-
|
52
|
-
expect(subject.view).to eq(expected)
|
53
|
-
end
|
54
|
-
|
55
|
-
context "when config[:all_attributes] == true" do
|
56
|
-
let(:config) { base_config.merge(all_attributes: true) }
|
57
|
-
|
58
|
-
it "returns a Hash with all of the node's properties" do
|
59
|
-
expect(subject.view).to eq(node_data)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe "#apply_updates" do
|
65
|
-
context "when the node name is changed" do
|
66
|
-
before(:each) do
|
67
|
-
allow(ui).to receive(:warn)
|
68
|
-
allow(ui).to receive(:confirm).and_return(true)
|
69
|
-
end
|
70
|
-
|
71
|
-
it "emits a warning and prompts for confirmation" do
|
72
|
-
data = subject.view.merge("name" => "foo_new_name_node")
|
73
|
-
updated_node = subject.apply_updates(data)
|
74
|
-
|
75
|
-
expect(ui).to have_received(:warn)
|
76
|
-
.with "Changing the name of a node results in a new node being " +
|
77
|
-
"created, test_node will not be modified or removed."
|
78
|
-
|
79
|
-
expect(ui).to have_received(:confirm)
|
80
|
-
.with("Proceed with creation of new node")
|
81
|
-
|
82
|
-
expect(updated_node).to be_a(Chef::Node)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context "when config[:all_attributes] == false" do
|
87
|
-
let(:config) { base_config.merge(all_attributes: false) }
|
88
|
-
|
89
|
-
let(:updated_data) do
|
90
|
-
subject.view.merge(
|
91
|
-
"normal" => { "alpha" => { "bravo" => "hotel2" }, "tags" => [ "xyz" ] },
|
92
|
-
"policy_name" => "mypolicy",
|
93
|
-
"policy_group" => "prod",
|
94
|
-
"run_list" => %w{role[drama] recipe[mystery]}
|
95
|
-
)
|
96
|
-
end
|
97
|
-
|
98
|
-
it "returns a node with run_list and normal_attrs changed" do
|
99
|
-
updated_node = subject.apply_updates(updated_data)
|
100
|
-
expect(updated_node).to be_a(Chef::Node)
|
101
|
-
|
102
|
-
# Expected to have been changed
|
103
|
-
expect(updated_node.normal_attrs).to eql(updated_data["normal"])
|
104
|
-
expect(updated_node.policy_name).to eql(updated_data["policy_name"])
|
105
|
-
expect(updated_node.policy_group).to eql(updated_data["policy_group"])
|
106
|
-
expect(updated_node.chef_environment).to eql(updated_data["policy_group"])
|
107
|
-
expect(updated_node.run_list.map(&:to_s)).to eql(updated_data["run_list"])
|
108
|
-
|
109
|
-
# Expected not to have changed
|
110
|
-
expect(updated_node.default_attrs).to eql(node.default_attrs)
|
111
|
-
expect(updated_node.override_attrs).to eql(node.override_attrs)
|
112
|
-
expect(updated_node.automatic_attrs).to eql(node.automatic_attrs)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
context "when config[:all_attributes] == true" do
|
117
|
-
let(:config) { base_config.merge(all_attributes: true) }
|
118
|
-
|
119
|
-
let(:updated_data) do
|
120
|
-
subject.view.merge(
|
121
|
-
"default" => { "alpha" => { "bravo" => "charlie2", "delta" => "echo2" } },
|
122
|
-
"normal" => { "alpha" => { "bravo" => "hotel2" }, "tags" => [ "xyz" ] },
|
123
|
-
"override" => { "alpha" => { "bravo" => "foxtrot2", "delta" => "golf2" } },
|
124
|
-
"policy_name" => "mypolicy",
|
125
|
-
"policy_group" => "prod",
|
126
|
-
"run_list" => %w{role[drama] recipe[mystery]}
|
127
|
-
)
|
128
|
-
end
|
129
|
-
|
130
|
-
it "returns a node with all editable properties changed" do
|
131
|
-
updated_node = subject.apply_updates(updated_data)
|
132
|
-
expect(updated_node).to be_a(Chef::Node)
|
133
|
-
|
134
|
-
expect(updated_node.chef_environment).to eql(updated_data["policy_group"])
|
135
|
-
expect(updated_node.automatic_attrs).to eql(updated_data["automatic"])
|
136
|
-
expect(updated_node.normal_attrs).to eql(updated_data["normal"])
|
137
|
-
expect(updated_node.default_attrs).to eql(updated_data["default"])
|
138
|
-
expect(updated_node.override_attrs).to eql(updated_data["override"])
|
139
|
-
expect(updated_node.policy_name).to eql(updated_data["policy_name"])
|
140
|
-
expect(updated_node.policy_group).to eql(updated_data["policy_group"])
|
141
|
-
expect(updated_node.run_list.map(&:to_s)).to eql(updated_data["run_list"])
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
describe "#updated?" do
|
147
|
-
context "before the node has been edited" do
|
148
|
-
it "returns false" do
|
149
|
-
expect(subject.updated?).to be false
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
context "after the node has been edited" do
|
154
|
-
context "and changes were made" do
|
155
|
-
let(:updated_data) do
|
156
|
-
subject.view.merge(
|
157
|
-
"default" => { "alpha" => { "bravo" => "charlie2", "delta" => "echo2" } },
|
158
|
-
"normal" => { "alpha" => { "bravo" => "hotel2" }, "tags" => [ "xyz" ] },
|
159
|
-
"override" => { "alpha" => { "bravo" => "foxtrot2", "delta" => "golf2" } },
|
160
|
-
"policy_name" => "mypolicy",
|
161
|
-
"policy_group" => "prod",
|
162
|
-
"run_list" => %w{role[drama] recipe[mystery]}
|
163
|
-
)
|
164
|
-
end
|
165
|
-
|
166
|
-
context "and changes affect only editable properties" do
|
167
|
-
before(:each) do
|
168
|
-
allow(ui).to receive(:edit_hash)
|
169
|
-
.with(subject.view)
|
170
|
-
.and_return(updated_data)
|
171
|
-
|
172
|
-
subject.edit_node
|
173
|
-
end
|
174
|
-
|
175
|
-
it "returns an array of the changed property names" do
|
176
|
-
expect(subject.updated?).to eql %w{ chef_environment normal policy_name policy_group run_list }
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
context "and the changes include non-editable properties" do
|
181
|
-
before(:each) do
|
182
|
-
data = updated_data.merge("bad_property" => "bad_value")
|
183
|
-
|
184
|
-
allow(ui).to receive(:edit_hash)
|
185
|
-
.with(subject.view)
|
186
|
-
.and_return(data)
|
187
|
-
|
188
|
-
subject.edit_node
|
189
|
-
end
|
190
|
-
|
191
|
-
it "returns an array of property names that doesn't include " +
|
192
|
-
"the non-editable properties" do
|
193
|
-
expect(subject.updated?).to eql %w{ chef_environment normal policy_name policy_group run_list }
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
context "and changes were not made" do
|
199
|
-
before(:each) do
|
200
|
-
allow(ui).to receive(:edit_hash)
|
201
|
-
.with(subject.view)
|
202
|
-
.and_return(subject.view.dup)
|
203
|
-
|
204
|
-
subject.edit_node
|
205
|
-
end
|
206
|
-
|
207
|
-
it { is_expected.not_to be_updated }
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Daniel DeLeo (<dan@chef.io>)
|
3
|
-
# Author:: Juanje Ojeda (<juanje.ojeda@gmail.com>)
|
4
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
#
|
19
|
-
|
20
|
-
require "spec_helper"
|
21
|
-
require "chef/knife/core/object_loader"
|
22
|
-
|
23
|
-
describe Chef::Knife::Core::ObjectLoader do
|
24
|
-
before(:each) do
|
25
|
-
@knife = Chef::Knife.new
|
26
|
-
@stdout = StringIO.new
|
27
|
-
allow(@knife.ui).to receive(:stdout).and_return(@stdout)
|
28
|
-
Dir.chdir(File.join(CHEF_SPEC_DATA, "object_loader"))
|
29
|
-
end
|
30
|
-
|
31
|
-
shared_examples_for "Chef object" do |chef_class|
|
32
|
-
it "should create a #{chef_class} object" do
|
33
|
-
expect(@object).to be_a_kind_of(chef_class)
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should has a attribute 'name'" do
|
37
|
-
expect(@object.name).to eql("test")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
{
|
42
|
-
"nodes" => Chef::Node,
|
43
|
-
"roles" => Chef::Role,
|
44
|
-
"environments" => Chef::Environment,
|
45
|
-
}.each do |repo_location, chef_class|
|
46
|
-
|
47
|
-
describe "when the file is a #{chef_class}" do
|
48
|
-
before do
|
49
|
-
@loader = Chef::Knife::Core::ObjectLoader.new(chef_class, @knife.ui)
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "when the file is a Ruby" do
|
53
|
-
before do
|
54
|
-
@object = @loader.load_from(repo_location, "test.rb")
|
55
|
-
end
|
56
|
-
|
57
|
-
it_behaves_like "Chef object", chef_class
|
58
|
-
end
|
59
|
-
|
60
|
-
# NOTE: This is check for the bug described at CHEF-2352
|
61
|
-
describe "when the file is a JSON" do
|
62
|
-
describe "and it has defined 'json_class'" do
|
63
|
-
before do
|
64
|
-
@object = @loader.load_from(repo_location, "test_json_class.json")
|
65
|
-
end
|
66
|
-
|
67
|
-
it_behaves_like "Chef object", chef_class
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "and it has not defined 'json_class'" do
|
71
|
-
before do
|
72
|
-
@object = @loader.load_from(repo_location, "test.json")
|
73
|
-
end
|
74
|
-
|
75
|
-
it_behaves_like "Chef object", chef_class
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
2
|
-
# License:: Apache License, Version 2.0
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
# See the License for the specific language governing permissions and
|
14
|
-
# limitations under the License.
|
15
|
-
#
|
16
|
-
|
17
|
-
require "spec_helper"
|
18
|
-
|
19
|
-
describe Chef::Knife::Core::StatusPresenter do
|
20
|
-
describe "#summarize_json" do
|
21
|
-
let(:presenter) { Chef::Knife::Core::StatusPresenter.new(double(:ui), double(:config, :[] => "")) }
|
22
|
-
|
23
|
-
let(:node) do
|
24
|
-
Chef::Node.new.tap do |n|
|
25
|
-
n.automatic_attrs["name"] = "my_node"
|
26
|
-
n.automatic_attrs["ipaddress"] = "127.0.0.1"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
let(:result) { JSON.parse(presenter.summarize_json([node])).first }
|
31
|
-
|
32
|
-
it "uses the first of public_ipv4_addrs when present" do
|
33
|
-
node.automatic_attrs["cloud"] = { "public_ipv4_addrs" => ["2.2.2.2"] }
|
34
|
-
|
35
|
-
expect(result["ip"]).to eq("2.2.2.2")
|
36
|
-
end
|
37
|
-
|
38
|
-
it "falls back to ipaddress when public_ipv4_addrs is empty" do
|
39
|
-
node.automatic_attrs["cloud"] = { "public_ipv4_addrs" => [] }
|
40
|
-
|
41
|
-
expect(result["ip"]).to eq("127.0.0.1")
|
42
|
-
end
|
43
|
-
|
44
|
-
it "falls back to ipaddress when cloud attributes are empty" do
|
45
|
-
node.automatic_attrs["cloud"] = {}
|
46
|
-
|
47
|
-
expect(result["ip"]).to eq("127.0.0.1")
|
48
|
-
end
|
49
|
-
|
50
|
-
it "falls back to ipaddress when cloud attributes is not present" do
|
51
|
-
expect(result["ip"]).to eq("127.0.0.1")
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
3
|
-
# License:: Apache License, Version 2.0
|
4
|
-
#
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
# you may not use this file except in compliance with the License.
|
7
|
-
# You may obtain a copy of the License at
|
8
|
-
#
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
#
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
# See the License for the specific language governing permissions and
|
15
|
-
# limitations under the License.
|
16
|
-
#
|
17
|
-
|
18
|
-
require "spec_helper"
|
19
|
-
|
20
|
-
describe Chef::Knife::SubcommandLoader do
|
21
|
-
let(:loader) { Chef::Knife::SubcommandLoader.new(File.join(CHEF_SPEC_DATA, "knife-site-subcommands")) }
|
22
|
-
let(:home) { File.join(CHEF_SPEC_DATA, "knife-home") }
|
23
|
-
let(:plugin_dir) { File.join(home, ".chef", "plugins", "knife") }
|
24
|
-
|
25
|
-
before do
|
26
|
-
allow(ChefUtils).to receive(:windows?) { false }
|
27
|
-
Chef::Util::PathHelper.class_variable_set(:@@home_dir, home)
|
28
|
-
end
|
29
|
-
|
30
|
-
after do
|
31
|
-
Chef::Util::PathHelper.class_variable_set(:@@home_dir, nil)
|
32
|
-
end
|
33
|
-
|
34
|
-
let(:config_dir) { File.join(CHEF_SPEC_DATA, "knife-site-subcommands") }
|
35
|
-
|
36
|
-
describe "#for_config" do
|
37
|
-
context "when ~/.chef/plugin_manifest.json exists" do
|
38
|
-
before do
|
39
|
-
allow(File).to receive(:exist?).with(File.join(home, ".chef", "plugin_manifest.json")).and_return(true)
|
40
|
-
end
|
41
|
-
|
42
|
-
it "creates a HashedCommandLoader with the manifest has _autogenerated_command_paths" do
|
43
|
-
allow(File).to receive(:read).with(File.join(home, ".chef", "plugin_manifest.json")).and_return("{ \"_autogenerated_command_paths\": {}}")
|
44
|
-
expect(Chef::Knife::SubcommandLoader.for_config(config_dir)).to be_a Chef::Knife::SubcommandLoader::HashedCommandLoader
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "when ~/.chef/plugin_manifest.json does not exist" do
|
49
|
-
before do
|
50
|
-
allow(File).to receive(:exist?).with(File.join(home, ".chef", "plugin_manifest.json")).and_return(false)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "creates a GemGlobLoader" do
|
54
|
-
expect(Chef::Knife::SubcommandLoader.for_config(config_dir)).to be_a Chef::Knife::SubcommandLoader::GemGlobLoader
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "#gem_glob_loader" do
|
60
|
-
it "always creates a GemGlobLoader" do
|
61
|
-
expect(Chef::Knife::SubcommandLoader.gem_glob_loader(config_dir)).to be_a Chef::Knife::SubcommandLoader::GemGlobLoader
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -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
|