chef 12.0.0.alpha.2 → 12.0.0.rc.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CONTRIBUTING.md +9 -0
- data/README.md +1 -1
- data/Rakefile +12 -0
- data/bin/chef-service-manager +1 -1
- data/bin/chef-windows-service +35 -0
- data/distro/common/html/_sources/ctl_chef_server.txt +307 -10
- data/distro/common/html/ctl_chef_client.html +3 -7
- data/distro/common/html/ctl_chef_server.html +609 -41
- data/distro/common/html/ctl_chef_shell.html +2 -2
- data/distro/common/html/ctl_chef_solo.html +1 -1
- data/distro/common/html/index.html +13 -13
- data/distro/common/html/knife.html +10 -10
- data/distro/common/html/knife_bootstrap.html +8 -8
- data/distro/common/html/knife_client.html +12 -12
- data/distro/common/html/knife_common_options.html +7 -7
- data/distro/common/html/knife_configure.html +3 -3
- data/distro/common/html/knife_cookbook.html +19 -19
- data/distro/common/html/knife_cookbook_site.html +28 -28
- data/distro/common/html/knife_data_bag.html +28 -13
- data/distro/common/html/knife_delete.html +2 -2
- data/distro/common/html/knife_deps.html +3 -3
- data/distro/common/html/knife_diff.html +4 -4
- data/distro/common/html/knife_download.html +3 -3
- data/distro/common/html/knife_edit.html +2 -2
- data/distro/common/html/knife_environment.html +14 -14
- data/distro/common/html/knife_exec.html +11 -11
- data/distro/common/html/knife_index_rebuild.html +2 -2
- data/distro/common/html/knife_list.html +3 -3
- data/distro/common/html/knife_node.html +23 -23
- data/distro/common/html/knife_raw.html +4 -4
- data/distro/common/html/knife_recipe_list.html +3 -3
- data/distro/common/html/knife_role.html +11 -11
- data/distro/common/html/knife_search.html +4 -4
- data/distro/common/html/knife_serve.html +3 -3
- data/distro/common/html/knife_show.html +3 -3
- data/distro/common/html/knife_ssh.html +7 -7
- data/distro/common/html/knife_ssl_check.html +7 -7
- data/distro/common/html/knife_ssl_fetch.html +9 -9
- data/distro/common/html/knife_status.html +3 -3
- data/distro/common/html/knife_tag.html +9 -9
- data/distro/common/html/knife_upload.html +3 -3
- data/distro/common/html/knife_user.html +9 -9
- data/distro/common/html/knife_using.html +11 -11
- data/distro/common/html/knife_xargs.html +14 -5
- data/distro/common/html/search.html +2 -2
- data/distro/common/html/searchindex.js +1 -1
- data/distro/common/man/man1/chef-shell.1 +2 -2
- data/distro/common/man/man1/knife-bootstrap.1 +7 -7
- data/distro/common/man/man1/knife-client.1 +10 -10
- data/distro/common/man/man1/knife-configure.1 +5 -5
- data/distro/common/man/man1/knife-cookbook-site.1 +24 -24
- data/distro/common/man/man1/knife-cookbook.1 +12 -12
- data/distro/common/man/man1/knife-data-bag.1 +34 -10
- data/distro/common/man/man1/knife-delete.1 +5 -5
- data/distro/common/man/man1/knife-deps.1 +5 -5
- data/distro/common/man/man1/knife-diff.1 +7 -7
- data/distro/common/man/man1/knife-download.1 +5 -5
- data/distro/common/man/man1/knife-edit.1 +5 -5
- data/distro/common/man/man1/knife-environment.1 +11 -11
- data/distro/common/man/man1/knife-exec.1 +11 -11
- data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
- data/distro/common/man/man1/knife-list.1 +5 -5
- data/distro/common/man/man1/knife-node.1 +16 -16
- data/distro/common/man/man1/knife-raw.1 +6 -6
- data/distro/common/man/man1/knife-recipe-list.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +7 -7
- data/distro/common/man/man1/knife-search.1 +6 -6
- data/distro/common/man/man1/knife-serve.1 +6 -6
- data/distro/common/man/man1/knife-show.1 +5 -5
- data/distro/common/man/man1/knife-ssh.1 +9 -9
- data/distro/common/man/man1/knife-ssl-check.1 +7 -7
- data/distro/common/man/man1/knife-ssl-fetch.1 +9 -9
- data/distro/common/man/man1/knife-status.1 +5 -5
- data/distro/common/man/man1/knife-tag.1 +8 -8
- data/distro/common/man/man1/knife-upload.1 +5 -5
- data/distro/common/man/man1/knife-user.1 +8 -8
- data/distro/common/man/man1/knife-xargs.1 +36 -10
- data/distro/common/man/man1/knife.1 +14 -14
- data/distro/common/man/man8/chef-client.8 +3 -10
- data/distro/common/man/man8/chef-solo.8 +1 -1
- data/lib/chef/application.rb +313 -241
- data/lib/chef/application/apply.rb +10 -8
- data/lib/chef/application/client.rb +58 -33
- data/lib/chef/application/solo.rb +33 -12
- data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
- data/lib/chef/chef_fs/command_line.rb +1 -1
- data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +2 -1
- data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -1
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +2 -1
- data/lib/chef/client.rb +18 -48
- data/lib/chef/config.rb +43 -11
- data/lib/chef/cookbook/cookbook_version_loader.rb +14 -7
- data/lib/chef/cookbook/metadata.rb +81 -38
- data/lib/chef/cookbook/syntax_check.rb +18 -52
- data/lib/chef/cookbook_loader.rb +1 -1
- data/lib/chef/cookbook_version.rb +58 -39
- data/lib/chef/data_bag.rb +2 -2
- data/lib/chef/deprecation/provider/file.rb +2 -1
- data/lib/chef/dsl/data_query.rb +2 -29
- data/lib/chef/dsl/recipe.rb +8 -22
- data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
- data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +1 -1
- data/lib/chef/event_loggers/base.rb +62 -0
- data/lib/chef/event_loggers/windows_eventlog.rb +104 -0
- data/lib/chef/exceptions.rb +18 -1
- data/lib/chef/file_cache.rb +3 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +15 -6
- data/lib/chef/http.rb +20 -13
- data/lib/chef/http/ssl_policies.rb +2 -1
- data/lib/chef/json_compat.rb +9 -3
- data/lib/chef/knife.rb +2 -1
- data/lib/chef/knife/bootstrap.rb +12 -18
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
- data/lib/chef/knife/cookbook_create.rb +1 -1
- data/lib/chef/knife/cookbook_site_share.rb +43 -8
- data/lib/chef/knife/core/bootstrap_context.rb +6 -11
- data/lib/chef/knife/core/object_loader.rb +5 -5
- data/lib/chef/knife/core/status_presenter.rb +156 -0
- data/lib/chef/knife/core/subcommand_loader.rb +6 -5
- data/lib/chef/knife/core/ui.rb +4 -4
- data/lib/chef/knife/data_bag_create.rb +7 -32
- data/lib/chef/knife/data_bag_edit.rb +24 -43
- data/lib/chef/knife/data_bag_from_file.rb +6 -31
- data/lib/chef/knife/data_bag_secret_options.rb +142 -0
- data/lib/chef/knife/data_bag_show.rb +19 -33
- data/lib/chef/knife/node_from_file.rb +9 -8
- data/lib/chef/knife/ssh.rb +0 -7
- data/lib/chef/knife/ssl_check.rb +70 -6
- data/lib/chef/knife/status.rb +11 -58
- data/lib/chef/mixin/command/unix.rb +2 -2
- data/lib/chef/mixin/convert_to_class_name.rb +54 -0
- data/lib/chef/mixin/descendants_tracker.rb +82 -0
- data/lib/chef/mixin/homebrew_user.rb +68 -0
- data/lib/chef/mixin/shell_out.rb +0 -4
- data/lib/chef/mixin/windows_architecture_helper.rb +16 -0
- data/lib/chef/mixin/windows_env_helper.rb +56 -0
- data/lib/chef/node.rb +2 -2
- data/lib/chef/node_map.rb +146 -0
- data/lib/chef/platform/provider_mapping.rb +11 -39
- data/lib/chef/platform/provider_priority_map.rb +80 -0
- data/lib/chef/platform/query_helpers.rb +5 -1
- data/lib/chef/platform/service_helpers.rb +113 -0
- data/lib/chef/provider.rb +24 -0
- data/lib/chef/provider/breakpoint.rb +2 -0
- data/lib/chef/provider/cookbook_file.rb +2 -0
- data/lib/chef/provider/cron.rb +1 -1
- data/lib/chef/provider/cron/unix.rb +13 -9
- data/lib/chef/provider/deploy.rb +3 -2
- data/lib/chef/provider/deploy/revision.rb +4 -2
- data/lib/chef/provider/deploy/timestamped.rb +2 -0
- data/lib/chef/provider/directory.rb +2 -0
- data/lib/chef/provider/dsc_script.rb +179 -0
- data/lib/chef/provider/env.rb +25 -10
- data/lib/chef/provider/env/windows.rb +9 -16
- data/lib/chef/provider/erl_call.rb +2 -0
- data/lib/chef/provider/execute.rb +5 -2
- data/lib/chef/provider/file.rb +2 -0
- data/lib/chef/provider/git.rb +51 -23
- data/lib/chef/provider/group/dscl.rb +2 -2
- data/lib/chef/provider/group/pw.rb +9 -13
- data/lib/chef/provider/http_request.rb +2 -0
- data/lib/chef/provider/link.rb +3 -0
- data/lib/chef/provider/log.rb +2 -0
- data/lib/chef/provider/lwrp_base.rb +11 -9
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/package/aix.rb +2 -0
- data/lib/chef/provider/package/apt.rb +2 -0
- data/lib/chef/provider/package/dpkg.rb +2 -0
- data/lib/chef/provider/package/easy_install.rb +2 -0
- data/lib/chef/provider/package/freebsd/pkg.rb +2 -1
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
- data/lib/chef/provider/package/freebsd/port.rb +1 -9
- data/lib/chef/provider/package/homebrew.rb +127 -0
- data/lib/chef/provider/package/ips.rb +2 -0
- data/lib/chef/provider/package/macports.rb +3 -0
- data/lib/chef/provider/package/pacman.rb +5 -4
- data/lib/chef/provider/package/paludis.rb +4 -2
- data/lib/chef/provider/package/portage.rb +4 -1
- data/lib/chef/provider/package/rpm.rb +2 -0
- data/lib/chef/provider/package/rubygems.rb +4 -0
- data/lib/chef/provider/package/smartos.rb +2 -0
- data/lib/chef/provider/package/solaris.rb +2 -0
- data/lib/chef/provider/package/windows.rb +5 -2
- data/lib/chef/provider/package/yum.rb +2 -0
- data/lib/chef/provider/powershell_script.rb +3 -1
- data/lib/chef/provider/remote_directory.rb +25 -10
- data/lib/chef/provider/route.rb +2 -0
- data/lib/chef/provider/ruby_block.rb +2 -0
- data/lib/chef/provider/script.rb +6 -0
- data/lib/chef/provider/service/aix.rb +128 -0
- data/lib/chef/provider/service/aixinit.rb +117 -0
- data/lib/chef/provider/service/arch.rb +6 -0
- data/lib/chef/provider/service/debian.rb +35 -29
- data/lib/chef/provider/service/freebsd.rb +7 -1
- data/lib/chef/provider/service/gentoo.rb +5 -1
- data/lib/chef/provider/service/init.rb +2 -0
- data/lib/chef/provider/service/insserv.rb +15 -8
- data/lib/chef/provider/service/invokercd.rb +6 -0
- data/lib/chef/provider/service/macosx.rb +4 -1
- data/lib/chef/provider/service/redhat.rb +9 -3
- data/lib/chef/provider/service/simple.rb +2 -0
- data/lib/chef/provider/service/solaris.rb +2 -0
- data/lib/chef/provider/service/systemd.rb +7 -0
- data/lib/chef/provider/service/upstart.rb +7 -0
- data/lib/chef/provider/service/windows.rb +5 -0
- data/lib/chef/provider/subversion.rb +2 -0
- data/lib/chef/provider/template.rb +1 -0
- data/lib/chef/provider/user/dscl.rb +3 -2
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +2 -0
- data/lib/chef/provider_resolver.rb +103 -0
- data/lib/chef/providers.rb +6 -2
- data/lib/chef/recipe.rb +2 -0
- data/lib/chef/resource.rb +69 -78
- data/lib/chef/resource/apt_package.rb +3 -1
- data/lib/chef/resource/bash.rb +1 -0
- data/lib/chef/resource/bff_package.rb +0 -1
- data/lib/chef/resource/breakpoint.rb +1 -1
- data/lib/chef/resource/chef_gem.rb +1 -2
- data/lib/chef/resource/conditional.rb +26 -6
- data/lib/chef/resource/cookbook_file.rb +2 -3
- data/lib/chef/resource/csh.rb +1 -0
- data/lib/chef/resource/deploy.rb +0 -1
- data/lib/chef/resource/deploy_revision.rb +6 -1
- data/lib/chef/resource/directory.rb +1 -2
- data/lib/chef/resource/dpkg_package.rb +2 -1
- data/lib/chef/resource/dsc_script.rb +125 -0
- data/lib/chef/resource/easy_install_package.rb +2 -1
- data/lib/chef/resource/erl_call.rb +1 -0
- data/lib/chef/resource/execute.rb +26 -9
- data/lib/chef/resource/file.rb +1 -3
- data/lib/chef/resource/freebsd_package.rb +10 -23
- data/lib/chef/resource/gem_package.rb +2 -1
- data/lib/chef/resource/git.rb +2 -1
- data/lib/chef/resource/homebrew_package.rb +46 -0
- data/lib/chef/resource/http_request.rb +1 -0
- data/lib/chef/resource/ips_package.rb +3 -1
- data/lib/chef/resource/link.rb +1 -2
- data/lib/chef/resource/log.rb +4 -0
- data/lib/chef/resource/lwrp_base.rb +24 -15
- data/lib/chef/resource/macports_package.rb +3 -1
- data/lib/chef/resource/pacman_package.rb +2 -1
- data/lib/chef/resource/paludis_package.rb +3 -1
- data/lib/chef/resource/perl.rb +1 -0
- data/lib/chef/resource/powershell_script.rb +0 -2
- data/lib/chef/resource/python.rb +1 -1
- data/lib/chef/resource/remote_directory.rb +1 -2
- data/lib/chef/resource/remote_file.rb +1 -1
- data/lib/chef/resource/rpm_package.rb +2 -1
- data/lib/chef/resource/ruby.rb +1 -0
- data/lib/chef/resource/ruby_block.rb +3 -0
- data/lib/chef/resource/script.rb +2 -25
- data/lib/chef/resource/service.rb +0 -4
- data/lib/chef/resource/smartos_package.rb +3 -4
- data/lib/chef/resource/solaris_package.rb +7 -1
- data/lib/chef/resource/subversion.rb +0 -1
- data/lib/chef/resource/template.rb +2 -3
- data/lib/chef/resource/timestamped_deploy.rb +1 -2
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
- data/lib/chef/resource/windows_package.rb +3 -4
- data/lib/chef/resource/windows_script.rb +3 -0
- data/lib/chef/resource/windows_service.rb +2 -2
- data/lib/chef/resource/yum_package.rb +3 -1
- data/lib/chef/resource_collection.rb +50 -227
- data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
- data/lib/chef/resource_collection/resource_list.rb +89 -0
- data/lib/chef/resource_collection/resource_set.rb +170 -0
- data/lib/chef/resources.rb +2 -0
- data/lib/chef/role.rb +1 -1
- data/lib/chef/run_context.rb +5 -1
- data/lib/chef/shell/ext.rb +1 -1
- data/lib/chef/util/backup.rb +3 -2
- data/lib/chef/util/dsc/configuration_generator.rb +115 -0
- data/lib/chef/util/dsc/lcm_output_parser.rb +133 -0
- data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
- data/lib/chef/util/dsc/resource_info.rb +26 -0
- data/lib/chef/util/path_helper.rb +12 -0
- data/lib/chef/util/powershell/cmdlet.rb +136 -0
- data/lib/chef/util/powershell/cmdlet_result.rb +46 -0
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/system.rb +9 -0
- data/lib/chef/win32/version.rb +2 -0
- data/spec/.DS_Store +0 -0
- data/spec/data/.DS_Store +0 -0
- data/spec/data/bootstrap/test-hints.erb +1 -1
- data/spec/data/bootstrap/test.erb +1 -1
- data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
- data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
- data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
- data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
- data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
- data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
- data/spec/data/lwrp/.DS_Store +0 -0
- data/spec/data/lwrp/providers/.DS_Store +0 -0
- data/spec/data/lwrp/providers/buck_passer.rb +9 -2
- data/spec/data/lwrp/resources/.DS_Store +0 -0
- data/spec/data/lwrp/resources/foo.rb +3 -2
- data/spec/data/lwrp_override/.DS_Store +0 -0
- data/spec/data/lwrp_override/providers/.DS_Store +0 -0
- data/spec/data/lwrp_override/providers/buck_passer.rb +5 -10
- data/spec/data/lwrp_override/resources/.DS_Store +0 -0
- data/spec/data/lwrp_override/resources/foo.rb +4 -3
- data/spec/functional/assets/chefinittest +34 -0
- data/spec/functional/assets/testchefsubsys +11 -0
- data/spec/functional/dsl/reboot_pending_spec.rb +19 -16
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +82 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
- data/spec/functional/knife/exec_spec.rb +1 -1
- data/spec/functional/resource/aix_service_spec.rb +136 -0
- data/spec/functional/resource/aixinit_service_spec.rb +211 -0
- data/spec/functional/resource/base.rb +1 -0
- data/spec/functional/resource/batch_spec.rb +4 -11
- data/spec/functional/resource/cron_spec.rb +7 -1
- data/spec/functional/resource/dsc_script_spec.rb +382 -0
- data/spec/functional/resource/env_spec.rb +54 -0
- data/spec/functional/resource/execute_spec.rb +113 -0
- data/spec/functional/resource/file_spec.rb +2 -0
- data/spec/functional/resource/group_spec.rb +7 -4
- data/spec/functional/resource/powershell_spec.rb +198 -185
- data/spec/functional/resource/rpm_spec.rb +5 -4
- data/spec/functional/resource/user/dscl_spec.rb +2 -1
- data/spec/functional/util/path_helper_spec.rb +37 -0
- data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
- data/spec/integration/client/client_spec.rb +1 -1
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
- data/spec/integration/knife/chef_repo_path_spec.rb +1 -1
- data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
- data/spec/integration/knife/chefignore_spec.rb +1 -1
- data/spec/integration/knife/common_options_spec.rb +1 -1
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
- data/spec/integration/knife/delete_spec.rb +1 -1
- data/spec/integration/knife/deps_spec.rb +1 -1
- data/spec/integration/knife/diff_spec.rb +1 -1
- data/spec/integration/knife/download_spec.rb +1 -1
- data/spec/integration/knife/list_spec.rb +1 -1
- data/spec/integration/knife/raw_spec.rb +1 -1
- data/spec/integration/knife/redirection_spec.rb +1 -1
- data/spec/integration/knife/serve_spec.rb +1 -1
- data/spec/integration/knife/show_spec.rb +1 -1
- data/spec/integration/knife/upload_spec.rb +4 -3
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
- data/spec/spec_helper.rb +15 -0
- data/spec/support/chef_helpers.rb +1 -0
- data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
- data/spec/support/lib/chef/resource/zen_follower.rb +1 -7
- data/spec/support/platform_helpers.rb +28 -0
- data/spec/support/shared/functional/file_resource.rb +6 -0
- data/spec/support/shared/functional/windows_script.rb +118 -0
- data/spec/support/shared/integration/integration_helper.rb +5 -2
- data/spec/support/shared/matchers/exit_with_code.rb +28 -0
- data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
- data/spec/support/shared/shared_examples.rb +14 -0
- data/spec/support/shared/unit/execute_resource.rb +0 -7
- data/spec/support/shared/unit/resource/static_provider_resolution.rb +71 -0
- data/spec/support/shared/unit/script_resource.rb +1 -1
- data/spec/support/shared/unit/windows_script_resource.rb +35 -2
- data/spec/tiny_server.rb +1 -2
- data/spec/unit/api_client_spec.rb +5 -1
- data/spec/unit/application/{apply.rb → apply_spec.rb} +13 -5
- data/spec/unit/application/client_spec.rb +106 -13
- data/spec/unit/application/solo_spec.rb +25 -1
- data/spec/unit/client_spec.rb +1 -26
- data/spec/unit/config_fetcher_spec.rb +2 -1
- data/spec/unit/config_spec.rb +91 -2
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +8 -0
- data/spec/unit/cookbook/metadata_spec.rb +43 -6
- data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
- data/spec/unit/cookbook_loader_spec.rb +4 -2
- data/spec/unit/cookbook_version_spec.rb +83 -2
- data/spec/unit/data_bag_item_spec.rb +5 -1
- data/spec/unit/data_bag_spec.rb +6 -1
- data/spec/unit/dsl/data_query_spec.rb +8 -110
- data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +16 -23
- data/spec/unit/environment_spec.rb +6 -2
- data/spec/unit/exceptions_spec.rb +6 -0
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +16 -15
- data/spec/unit/json_compat_spec.rb +12 -2
- data/spec/unit/knife/bootstrap_spec.rb +16 -63
- data/spec/unit/knife/cookbook_site_share_spec.rb +59 -6
- data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -37
- data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -1
- data/spec/unit/knife/core/ui_spec.rb +28 -0
- data/spec/unit/knife/data_bag_create_spec.rb +63 -71
- data/spec/unit/knife/data_bag_edit_spec.rb +83 -49
- data/spec/unit/knife/data_bag_from_file_spec.rb +104 -126
- data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
- data/spec/unit/knife/data_bag_show_spec.rb +74 -72
- data/spec/unit/knife/environment_from_file_spec.rb +3 -2
- data/spec/unit/knife/ssl_check_spec.rb +46 -1
- data/spec/unit/knife/status_spec.rb +1 -2
- data/spec/unit/knife_spec.rb +18 -1
- data/spec/unit/lwrp_spec.rb +29 -8
- data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
- data/spec/unit/node_map_spec.rb +155 -0
- data/spec/unit/node_spec.rb +11 -0
- data/spec/unit/platform/query_helpers_spec.rb +23 -0
- data/spec/unit/platform_spec.rb +23 -0
- data/spec/unit/provider/breakpoint_spec.rb +9 -9
- data/spec/unit/provider/cookbook_file/content_spec.rb +3 -3
- data/spec/unit/provider/cookbook_file_spec.rb +1 -1
- data/spec/unit/provider/cron/unix_spec.rb +78 -60
- data/spec/unit/provider/cron_spec.rb +175 -175
- data/spec/unit/provider/deploy/revision_spec.rb +22 -21
- data/spec/unit/provider/deploy/timestamped_spec.rb +3 -3
- data/spec/unit/provider/deploy_spec.rb +231 -230
- data/spec/unit/provider/directory_spec.rb +55 -55
- data/spec/unit/provider/dsc_script_spec.rb +174 -0
- data/spec/unit/provider/env/windows_spec.rb +70 -34
- data/spec/unit/provider/env_spec.rb +95 -49
- data/spec/unit/provider/erl_call_spec.rb +9 -9
- data/spec/unit/provider/execute_spec.rb +43 -27
- data/spec/unit/provider/file/content_spec.rb +9 -9
- data/spec/unit/provider/file_spec.rb +1 -1
- data/spec/unit/provider/git_spec.rb +221 -159
- data/spec/unit/provider/group/dscl_spec.rb +64 -63
- data/spec/unit/provider/group/gpasswd_spec.rb +14 -14
- data/spec/unit/provider/group/groupadd_spec.rb +33 -33
- data/spec/unit/provider/group/groupmod_spec.rb +23 -23
- data/spec/unit/provider/group/pw_spec.rb +21 -21
- data/spec/unit/provider/group/usermod_spec.rb +20 -20
- data/spec/unit/provider/group/windows_spec.rb +15 -15
- data/spec/unit/provider/group_spec.rb +76 -76
- data/spec/unit/provider/http_request_spec.rb +30 -30
- data/spec/unit/provider/ifconfig/aix_spec.rb +20 -20
- data/spec/unit/provider/ifconfig/debian_spec.rb +25 -9
- data/spec/unit/provider/ifconfig/redhat_spec.rb +13 -13
- data/spec/unit/provider/ifconfig_spec.rb +43 -43
- data/spec/unit/provider/link_spec.rb +60 -60
- data/spec/unit/provider/log_spec.rb +0 -4
- data/spec/unit/provider/mdadm_spec.rb +23 -23
- data/spec/unit/provider/mount/aix_spec.rb +17 -17
- data/spec/unit/provider/mount/mount_spec.rb +115 -119
- data/spec/unit/provider/mount/solaris_spec.rb +72 -72
- data/spec/unit/provider/mount/windows_spec.rb +24 -24
- data/spec/unit/provider/ohai_spec.rb +11 -11
- data/spec/unit/provider/package/aix_spec.rb +34 -34
- data/spec/unit/provider/package/apt_spec.rb +36 -36
- data/spec/unit/provider/package/dpkg_spec.rb +27 -27
- data/spec/unit/provider/package/easy_install_spec.rb +16 -16
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +53 -53
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +24 -24
- data/spec/unit/provider/package/freebsd/port_spec.rb +45 -35
- data/spec/unit/provider/package/homebrew_spec.rb +266 -0
- data/spec/unit/provider/package/ips_spec.rb +34 -34
- data/spec/unit/provider/package/macports_spec.rb +49 -49
- data/spec/unit/provider/package/pacman_spec.rb +35 -39
- data/spec/unit/provider/package/paludis_spec.rb +20 -20
- data/spec/unit/provider/package/portage_spec.rb +38 -38
- data/spec/unit/provider/package/rpm_spec.rb +29 -29
- data/spec/unit/provider/package/rubygems_spec.rb +284 -270
- data/spec/unit/provider/package/smartos_spec.rb +15 -15
- data/spec/unit/provider/package/solaris_spec.rb +35 -35
- data/spec/unit/provider/package/windows/msi_spec.rb +3 -3
- data/spec/unit/provider/package/windows_spec.rb +6 -6
- data/spec/unit/provider/package/yum_spec.rb +416 -416
- data/spec/unit/provider/package/zypper_spec.rb +47 -47
- data/spec/unit/provider/package_spec.rb +107 -107
- data/spec/unit/provider/powershell_spec.rb +1 -1
- data/spec/unit/provider/registry_key_spec.rb +61 -61
- data/spec/unit/provider/remote_directory_spec.rb +36 -36
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +24 -24
- data/spec/unit/provider/remote_file/content_spec.rb +45 -45
- data/spec/unit/provider/remote_file/fetcher_spec.rb +9 -9
- data/spec/unit/provider/remote_file/ftp_spec.rb +32 -32
- data/spec/unit/provider/remote_file/http_spec.rb +44 -44
- data/spec/unit/provider/remote_file/local_file_spec.rb +9 -9
- data/spec/unit/provider/remote_file_spec.rb +3 -3
- data/spec/unit/provider/route_spec.rb +63 -63
- data/spec/unit/provider/ruby_block_spec.rb +4 -4
- data/spec/unit/provider/script_spec.rb +12 -12
- data/spec/unit/provider/service/aix_service_spec.rb +181 -0
- data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
- data/spec/unit/provider/service/arch_service_spec.rb +48 -48
- data/spec/unit/provider/service/debian_service_spec.rb +40 -40
- data/spec/unit/provider/service/gentoo_service_spec.rb +28 -28
- data/spec/unit/provider/service/init_service_spec.rb +39 -39
- data/spec/unit/provider/service/insserv_service_spec.rb +8 -8
- data/spec/unit/provider/service/invokercd_service_spec.rb +35 -35
- data/spec/unit/provider/service/macosx_spec.rb +49 -49
- data/spec/unit/provider/service/redhat_spec.rb +27 -27
- data/spec/unit/provider/service/simple_service_spec.rb +28 -28
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +43 -46
- data/spec/unit/provider/service/systemd_service_spec.rb +63 -63
- data/spec/unit/provider/service/upstart_service_spec.rb +78 -78
- data/spec/unit/provider/service/windows_spec.rb +92 -92
- data/spec/unit/provider/service_spec.rb +40 -40
- data/spec/unit/provider/subversion_spec.rb +80 -80
- data/spec/unit/provider/template/content_spec.rb +9 -9
- data/spec/unit/provider/template_spec.rb +6 -6
- data/spec/unit/provider/user/dscl_spec.rb +170 -167
- data/spec/unit/provider/user/pw_spec.rb +48 -48
- data/spec/unit/provider/user/solaris_spec.rb +8 -8
- data/spec/unit/provider/user/useradd_spec.rb +1 -1
- data/spec/unit/provider/user/windows_spec.rb +26 -26
- data/spec/unit/provider/user_spec.rb +72 -72
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +4 -4
- data/spec/unit/provider_resolver_spec.rb +387 -0
- data/spec/unit/recipe_spec.rb +33 -12
- data/spec/unit/resource/apt_package_spec.rb +10 -13
- data/spec/unit/resource/bash_spec.rb +4 -4
- data/spec/unit/resource/batch_spec.rb +1 -1
- data/spec/unit/resource/breakpoint_spec.rb +11 -7
- data/spec/unit/resource/chef_gem_spec.rb +8 -15
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
- data/spec/unit/resource/conditional_spec.rb +35 -16
- data/spec/unit/resource/cookbook_file_spec.rb +13 -13
- data/spec/unit/resource/cron_spec.rb +37 -37
- data/spec/unit/resource/csh_spec.rb +4 -4
- data/spec/unit/resource/deploy_revision_spec.rb +13 -18
- data/spec/unit/resource/deploy_spec.rb +60 -55
- data/spec/unit/resource/directory_spec.rb +18 -18
- data/spec/unit/resource/dpkg_package_spec.rb +8 -14
- data/spec/unit/resource/dsc_script_spec.rb +98 -0
- data/spec/unit/resource/easy_install_package_spec.rb +9 -18
- data/spec/unit/resource/env_spec.rb +12 -12
- data/spec/unit/resource/erl_call_spec.rb +11 -11
- data/spec/unit/resource/execute_spec.rb +5 -0
- data/spec/unit/resource/file_spec.rb +29 -29
- data/spec/unit/resource/freebsd_package_spec.rb +11 -12
- data/spec/unit/resource/gem_package_spec.rb +8 -15
- data/spec/unit/resource/git_spec.rb +12 -8
- data/spec/unit/resource/group_spec.rb +27 -27
- data/spec/unit/resource/homebrew_package_spec.rb +50 -0
- data/spec/unit/resource/http_request_spec.rb +6 -6
- data/spec/unit/resource/ifconfig_spec.rb +8 -8
- data/spec/unit/resource/ips_package_spec.rb +10 -13
- data/spec/unit/resource/link_spec.rb +25 -25
- data/spec/unit/resource/log_spec.rb +9 -9
- data/spec/unit/resource/macports_package_spec.rb +8 -13
- data/spec/unit/resource/mdadm_spec.rb +18 -18
- data/spec/unit/resource/mount_spec.rb +45 -45
- data/spec/unit/resource/ohai_spec.rb +7 -7
- data/spec/unit/resource/package_spec.rb +12 -12
- data/spec/unit/resource/pacman_package_spec.rb +8 -14
- data/spec/unit/resource/perl_spec.rb +4 -4
- data/spec/unit/resource/portage_package_spec.rb +3 -3
- data/spec/unit/resource/powershell_spec.rb +7 -7
- data/spec/unit/resource/python_spec.rb +4 -4
- data/spec/unit/resource/registry_key_spec.rb +32 -32
- data/spec/unit/resource/remote_directory_spec.rb +17 -17
- data/spec/unit/resource/remote_file_spec.rb +41 -41
- data/spec/unit/resource/route_spec.rb +19 -19
- data/spec/unit/resource/rpm_package_spec.rb +9 -13
- data/spec/unit/resource/ruby_block_spec.rb +8 -8
- data/spec/unit/resource/ruby_spec.rb +4 -4
- data/spec/unit/resource/scm_spec.rb +40 -40
- data/spec/unit/resource/script_spec.rb +2 -2
- data/spec/unit/resource/service_spec.rb +37 -47
- data/spec/unit/resource/smartos_package_spec.rb +10 -15
- data/spec/unit/resource/solaris_package_spec.rb +13 -28
- data/spec/unit/resource/subversion_spec.rb +16 -12
- data/spec/unit/resource/template_spec.rb +35 -35
- data/spec/unit/resource/timestamped_deploy_spec.rb +30 -4
- data/spec/unit/resource/user_spec.rb +23 -23
- data/spec/unit/resource/windows_package_spec.rb +17 -10
- data/spec/unit/resource/windows_service_spec.rb +9 -6
- data/spec/unit/resource/yum_package_spec.rb +16 -21
- data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
- data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
- data/spec/unit/resource_collection_spec.rb +73 -92
- data/spec/unit/resource_definition_spec.rb +38 -40
- data/spec/unit/resource_reporter_spec.rb +3 -3
- data/spec/unit/resource_spec.rb +68 -33
- data/spec/unit/rest_spec.rb +83 -76
- data/spec/unit/role_spec.rb +5 -0
- data/spec/unit/run_list_spec.rb +5 -1
- data/spec/unit/runner_spec.rb +245 -238
- data/spec/unit/shell/shell_ext_spec.rb +1 -1
- data/spec/unit/user_spec.rb +5 -1
- data/spec/unit/util/dsc/configuration_generator_spec.rb +171 -0
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +169 -0
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
- data/spec/unit/util/path_helper_spec.rb +23 -1
- data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
- data/spec/unit/workstation_config_loader_spec.rb +1 -1
- metadata +257 -191
- checksums.yaml +0 -7
- data/distro/README +0 -2
- data/distro/arch/etc/conf.d/chef-client.conf +0 -5
- data/distro/arch/etc/conf.d/chef-expander.conf +0 -8
- data/distro/arch/etc/conf.d/chef-server-webui.conf +0 -10
- data/distro/arch/etc/conf.d/chef-server.conf +0 -10
- data/distro/arch/etc/conf.d/chef-solr.conf +0 -8
- data/distro/arch/etc/rc.d/chef-client +0 -90
- data/distro/arch/etc/rc.d/chef-expander +0 -78
- data/distro/arch/etc/rc.d/chef-server +0 -78
- data/distro/arch/etc/rc.d/chef-server-webui +0 -78
- data/distro/arch/etc/rc.d/chef-solr +0 -78
- data/distro/debian/etc/default/chef-client +0 -4
- data/distro/debian/etc/default/chef-expander +0 -8
- data/distro/debian/etc/default/chef-server +0 -9
- data/distro/debian/etc/default/chef-server-webui +0 -9
- data/distro/debian/etc/default/chef-solr +0 -8
- data/distro/debian/etc/init.d/chef-client +0 -212
- data/distro/debian/etc/init.d/chef-expander +0 -176
- data/distro/debian/etc/init.d/chef-server +0 -122
- data/distro/debian/etc/init.d/chef-server-webui +0 -123
- data/distro/debian/etc/init.d/chef-solr +0 -176
- data/distro/debian/etc/init/chef-client.conf +0 -17
- data/distro/debian/etc/init/chef-expander.conf +0 -17
- data/distro/debian/etc/init/chef-server-webui.conf +0 -17
- data/distro/debian/etc/init/chef-server.conf +0 -17
- data/distro/debian/etc/init/chef-solr.conf +0 -17
- data/distro/redhat/etc/init.d/chef-client +0 -121
- data/distro/redhat/etc/init.d/chef-expander +0 -104
- data/distro/redhat/etc/init.d/chef-server +0 -112
- data/distro/redhat/etc/init.d/chef-server-webui +0 -112
- data/distro/redhat/etc/init.d/chef-solr +0 -104
- data/distro/redhat/etc/logrotate.d/chef-client +0 -8
- data/distro/redhat/etc/logrotate.d/chef-expander +0 -8
- data/distro/redhat/etc/logrotate.d/chef-server +0 -8
- data/distro/redhat/etc/logrotate.d/chef-server-webui +0 -8
- data/distro/redhat/etc/logrotate.d/chef-solr +0 -8
- data/distro/redhat/etc/sysconfig/chef-client +0 -15
- data/distro/redhat/etc/sysconfig/chef-expander +0 -7
- data/distro/redhat/etc/sysconfig/chef-server +0 -14
- data/distro/redhat/etc/sysconfig/chef-server-webui +0 -14
- data/distro/redhat/etc/sysconfig/chef-solr +0 -8
- data/distro/windows/service_manager.rb +0 -20
- data/lib/chef/resource_platform_map.rb +0 -151
- data/spec/support/shared/matchers.rb +0 -17
- data/spec/unit/resource_platform_map_spec.rb +0 -164
@@ -421,7 +421,7 @@ describe Chef::ResourceReporter do
|
|
421
421
|
|
422
422
|
it "includes the run_list" do
|
423
423
|
@report.should have_key("run_list")
|
424
|
-
@report["run_list"].should == @run_status.node.run_list
|
424
|
+
@report["run_list"].should == Chef::JSONCompat.to_json(@run_status.node.run_list)
|
425
425
|
end
|
426
426
|
|
427
427
|
it "includes the end_time" do
|
@@ -484,7 +484,7 @@ describe Chef::ResourceReporter do
|
|
484
484
|
|
485
485
|
it "includes the exception trace in the event data" do
|
486
486
|
@report["data"]["exception"].should have_key("backtrace")
|
487
|
-
@report["data"]["exception"]["backtrace"].should == @backtrace
|
487
|
+
@report["data"]["exception"]["backtrace"].should == Chef::JSONCompat.to_json(@backtrace)
|
488
488
|
end
|
489
489
|
|
490
490
|
it "includes the error inspector output in the event data" do
|
@@ -701,7 +701,7 @@ describe Chef::ResourceReporter do
|
|
701
701
|
})
|
702
702
|
data_stream = Zlib::GzipReader.new(StringIO.new(data))
|
703
703
|
data = data_stream.read
|
704
|
-
data.should eq(@expected_data
|
704
|
+
data.should eq(Chef::JSONCompat.to_json(@expected_data))
|
705
705
|
response
|
706
706
|
end
|
707
707
|
|
data/spec/unit/resource_spec.rb
CHANGED
@@ -174,12 +174,12 @@ describe Chef::Resource do
|
|
174
174
|
end
|
175
175
|
|
176
176
|
it "should load the attributes of a prior resource" do
|
177
|
-
@resource.load_prior_resource
|
177
|
+
@resource.load_prior_resource(@resource.resource_name, @resource.name)
|
178
178
|
@resource.supports.should == { :funky => true }
|
179
179
|
end
|
180
180
|
|
181
181
|
it "should not inherit the action from the prior resource" do
|
182
|
-
@resource.load_prior_resource
|
182
|
+
@resource.load_prior_resource(@resource.resource_name, @resource.name)
|
183
183
|
@resource.action.should_not == @prior_resource.action
|
184
184
|
end
|
185
185
|
end
|
@@ -336,6 +336,10 @@ describe Chef::Resource do
|
|
336
336
|
json.should =~ /json_class/
|
337
337
|
json.should =~ /instance_vars/
|
338
338
|
end
|
339
|
+
|
340
|
+
include_examples "to_json equalivent to Chef::JSONCompat.to_json" do
|
341
|
+
let(:jsonable) { @resource }
|
342
|
+
end
|
339
343
|
end
|
340
344
|
|
341
345
|
describe "to_hash" do
|
@@ -345,7 +349,7 @@ describe Chef::Resource do
|
|
345
349
|
:updated_by_last_action, :before, :supports,
|
346
350
|
:noop, :ignore_failure, :name, :source_line,
|
347
351
|
:action, :retries, :retry_delay, :elapsed_time,
|
348
|
-
:guard_interpreter, :sensitive ]
|
352
|
+
:default_guard_interpreter, :guard_interpreter, :sensitive ]
|
349
353
|
(hash.keys - expected_keys).should == []
|
350
354
|
(expected_keys - hash.keys).should == []
|
351
355
|
hash[:name].should eql("funk")
|
@@ -354,7 +358,7 @@ describe Chef::Resource do
|
|
354
358
|
|
355
359
|
describe "self.json_create" do
|
356
360
|
it "should deserialize itself from json" do
|
357
|
-
json = @resource
|
361
|
+
json = Chef::JSONCompat.to_json(@resource)
|
358
362
|
serialized_node = Chef::JSONCompat.from_json(json)
|
359
363
|
serialized_node.should be_a_kind_of(Chef::Resource)
|
360
364
|
serialized_node.name.should eql(@resource.name)
|
@@ -390,22 +394,44 @@ describe Chef::Resource do
|
|
390
394
|
end
|
391
395
|
|
392
396
|
describe "retries" do
|
397
|
+
before do
|
398
|
+
@retriable_resource = Chef::Resource::Cat.new("precious", @run_context)
|
399
|
+
@retriable_resource.provider = Chef::Provider::SnakeOil
|
400
|
+
@retriable_resource.action = :purr
|
401
|
+
|
402
|
+
@node.automatic_attrs[:platform] = "fubuntu"
|
403
|
+
@node.automatic_attrs[:platform_version] = '10.04'
|
404
|
+
end
|
405
|
+
|
393
406
|
it "should default to not retrying if a provider fails for a resource" do
|
394
|
-
@
|
407
|
+
@retriable_resource.retries.should == 0
|
395
408
|
end
|
396
409
|
|
397
410
|
it "should allow you to set how many retries a provider should attempt after a failure" do
|
398
|
-
@
|
399
|
-
@
|
411
|
+
@retriable_resource.retries(2)
|
412
|
+
@retriable_resource.retries.should == 2
|
400
413
|
end
|
401
414
|
|
402
415
|
it "should default to a retry delay of 2 seconds" do
|
403
|
-
@
|
416
|
+
@retriable_resource.retry_delay.should == 2
|
404
417
|
end
|
405
418
|
|
406
419
|
it "should allow you to set the retry delay" do
|
407
|
-
@
|
408
|
-
@
|
420
|
+
@retriable_resource.retry_delay(10)
|
421
|
+
@retriable_resource.retry_delay.should == 10
|
422
|
+
end
|
423
|
+
|
424
|
+
it "should keep given value of retries intact after the provider fails for a resource" do
|
425
|
+
@retriable_resource.retries(3)
|
426
|
+
@retriable_resource.retry_delay(0) # No need to wait.
|
427
|
+
|
428
|
+
provider = Chef::Provider::SnakeOil.new(@retriable_resource, @run_context)
|
429
|
+
Chef::Provider::SnakeOil.stub(:new).and_return(provider)
|
430
|
+
provider.stub(:action_purr).and_raise
|
431
|
+
|
432
|
+
@retriable_resource.should_receive(:sleep).exactly(3).times
|
433
|
+
expect { @retriable_resource.run_action(:purr) }.to raise_error
|
434
|
+
@retriable_resource.retries.should == 3
|
409
435
|
end
|
410
436
|
end
|
411
437
|
|
@@ -464,7 +490,8 @@ describe Chef::Resource do
|
|
464
490
|
end
|
465
491
|
|
466
492
|
it "does not run only_if if no only_if command is given" do
|
467
|
-
|
493
|
+
expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate)
|
494
|
+
@resource.only_if.clear
|
468
495
|
@resource.run_action(:purr)
|
469
496
|
end
|
470
497
|
|
@@ -506,6 +533,8 @@ describe Chef::Resource do
|
|
506
533
|
end
|
507
534
|
|
508
535
|
it "does not run not_if if no not_if command is given" do
|
536
|
+
expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate)
|
537
|
+
@resource.not_if.clear
|
509
538
|
@resource.run_action(:purr)
|
510
539
|
end
|
511
540
|
|
@@ -551,7 +580,6 @@ describe Chef::Resource do
|
|
551
580
|
expect { resource.guard_interpreter(:command_dot_com) }.not_to raise_error
|
552
581
|
end
|
553
582
|
end
|
554
|
-
|
555
583
|
end
|
556
584
|
|
557
585
|
describe "should_skip?" do
|
@@ -664,24 +692,33 @@ describe Chef::Resource do
|
|
664
692
|
|
665
693
|
describe "building the platform map" do
|
666
694
|
|
695
|
+
let(:klz) { Class.new(Chef::Resource) }
|
696
|
+
|
697
|
+
before do
|
698
|
+
Chef::Resource::Klz = klz
|
699
|
+
end
|
700
|
+
|
701
|
+
after do
|
702
|
+
Chef::Resource.send(:remove_const, :Klz)
|
703
|
+
end
|
704
|
+
|
667
705
|
it 'adds mappings for a single platform' do
|
668
|
-
|
669
|
-
|
670
|
-
:platform => :autobots, :short_name => :dinobot, :resource => klz
|
706
|
+
expect(Chef::Resource.node_map).to receive(:set).with(
|
707
|
+
:dinobot, Chef::Resource::Klz, { platform: ['autobots'] }
|
671
708
|
)
|
672
|
-
klz.provides :dinobot, :
|
709
|
+
klz.provides :dinobot, platform: ['autobots']
|
673
710
|
end
|
674
711
|
|
675
712
|
it 'adds mappings for multiple platforms' do
|
676
|
-
|
677
|
-
|
678
|
-
|
713
|
+
expect(Chef::Resource.node_map).to receive(:set).with(
|
714
|
+
:energy, Chef::Resource::Klz, { platform: ['autobots', 'decepticons']}
|
715
|
+
)
|
716
|
+
klz.provides :energy, platform: ['autobots', 'decepticons']
|
679
717
|
end
|
680
718
|
|
681
719
|
it 'adds mappings for all platforms' do
|
682
|
-
|
683
|
-
|
684
|
-
:short_name => :tape_deck, :resource => klz
|
720
|
+
expect(Chef::Resource.node_map).to receive(:set).with(
|
721
|
+
:tape_deck, Chef::Resource::Klz, {}
|
685
722
|
)
|
686
723
|
klz.provides :tape_deck
|
687
724
|
end
|
@@ -689,28 +726,26 @@ describe Chef::Resource do
|
|
689
726
|
end
|
690
727
|
|
691
728
|
describe "lookups from the platform map" do
|
729
|
+
let(:klz1) { Class.new(Chef::Resource) }
|
730
|
+
let(:klz2) { Class.new(Chef::Resource) }
|
692
731
|
|
693
732
|
before(:each) do
|
733
|
+
Chef::Resource::Klz1 = klz1
|
734
|
+
Chef::Resource::Klz2 = klz2
|
694
735
|
@node = Chef::Node.new
|
695
736
|
@node.name("bumblebee")
|
696
737
|
@node.automatic[:platform] = "autobots"
|
697
738
|
@node.automatic[:platform_version] = "6.1"
|
698
|
-
Object.const_set('Soundwave',
|
699
|
-
|
739
|
+
Object.const_set('Soundwave', klz1)
|
740
|
+
klz2.provides :dinobot, :on_platforms => ['autobots']
|
741
|
+
Object.const_set('Grimlock', klz2)
|
700
742
|
end
|
701
743
|
|
702
744
|
after(:each) do
|
703
745
|
Object.send(:remove_const, :Soundwave)
|
704
746
|
Object.send(:remove_const, :Grimlock)
|
705
|
-
|
706
|
-
|
707
|
-
describe "resource_for_platform" do
|
708
|
-
it 'return a resource by short_name and platform' do
|
709
|
-
Chef::Resource.resource_for_platform(:dinobot,'autobots','6.1').should eql(Grimlock)
|
710
|
-
end
|
711
|
-
it "returns a resource by short_name if nothing else matches" do
|
712
|
-
Chef::Resource.resource_for_node(:soundwave, @node).should eql(Soundwave)
|
713
|
-
end
|
747
|
+
Chef::Resource.send(:remove_const, :Klz1)
|
748
|
+
Chef::Resource.send(:remove_const, :Klz2)
|
714
749
|
end
|
715
750
|
|
716
751
|
describe "resource_for_node" do
|
data/spec/unit/rest_spec.rb
CHANGED
@@ -62,8 +62,8 @@ describe Chef::REST do
|
|
62
62
|
let(:request_id) {"1234"}
|
63
63
|
|
64
64
|
let(:rest) do
|
65
|
-
Chef::REST::CookieJar.
|
66
|
-
Chef::RequestID.instance.
|
65
|
+
allow(Chef::REST::CookieJar).to receive(:instance).and_return({})
|
66
|
+
allow(Chef::RequestID.instance).to receive(:request_id).and_return(request_id)
|
67
67
|
rest = Chef::REST.new(base_url, nil, nil)
|
68
68
|
Chef::REST::CookieJar.instance.clear
|
69
69
|
rest
|
@@ -81,9 +81,9 @@ describe Chef::REST do
|
|
81
81
|
content_length = middlewares.find_index { |e| e.is_a? Chef::HTTP::ValidateContentLength }
|
82
82
|
decompressor = middlewares.find_index { |e| e.is_a? Chef::HTTP::Decompressor }
|
83
83
|
|
84
|
-
content_length.
|
85
|
-
decompressor.
|
86
|
-
(decompressor < content_length).
|
84
|
+
expect(content_length).not_to be_nil
|
85
|
+
expect(decompressor).not_to be_nil
|
86
|
+
expect(decompressor < content_length).to be_true
|
87
87
|
end
|
88
88
|
|
89
89
|
it "should allow the options hash to be frozen" do
|
@@ -102,43 +102,43 @@ describe Chef::REST do
|
|
102
102
|
end
|
103
103
|
|
104
104
|
it "makes a :GET request with the composed url object" do
|
105
|
-
rest.
|
105
|
+
expect(rest).to receive(:send_http_request).
|
106
106
|
with(:GET, monkey_uri, standard_read_headers, false).
|
107
107
|
and_return([1,2,3])
|
108
|
-
rest.
|
109
|
-
rest.
|
108
|
+
expect(rest).to receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
|
109
|
+
expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
|
110
110
|
rest.get_rest("monkey")
|
111
111
|
end
|
112
112
|
|
113
113
|
it "makes a :GET reqest for a streaming download with the composed url" do
|
114
|
-
rest.
|
114
|
+
expect(rest).to receive(:streaming_request).with('monkey', {})
|
115
115
|
rest.get_rest("monkey", true)
|
116
116
|
end
|
117
117
|
|
118
118
|
it "makes a :DELETE request with the composed url object" do
|
119
|
-
rest.
|
119
|
+
expect(rest).to receive(:send_http_request).
|
120
120
|
with(:DELETE, monkey_uri, standard_read_headers, false).
|
121
121
|
and_return([1,2,3])
|
122
|
-
rest.
|
123
|
-
rest.
|
122
|
+
expect(rest).to receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
|
123
|
+
expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
|
124
124
|
rest.delete_rest("monkey")
|
125
125
|
end
|
126
126
|
|
127
127
|
it "makes a :POST request with the composed url object and data" do
|
128
|
-
rest.
|
128
|
+
expect(rest).to receive(:send_http_request).
|
129
129
|
with(:POST, monkey_uri, standard_write_headers, "\"data\"").
|
130
130
|
and_return([1,2,3])
|
131
|
-
rest.
|
132
|
-
rest.
|
131
|
+
expect(rest).to receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
|
132
|
+
expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
|
133
133
|
rest.post_rest("monkey", "data")
|
134
134
|
end
|
135
135
|
|
136
136
|
it "makes a :PUT request with the composed url object and data" do
|
137
|
-
rest.
|
137
|
+
expect(rest).to receive(:send_http_request).
|
138
138
|
with(:PUT, monkey_uri, standard_write_headers, "\"data\"").
|
139
139
|
and_return([1,2,3])
|
140
|
-
rest.
|
141
|
-
rest.
|
140
|
+
expect(rest).to receive(:apply_response_middleware).with(1,2,3).and_return([1,2,3])
|
141
|
+
expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
|
142
142
|
rest.put_rest("monkey", "data")
|
143
143
|
end
|
144
144
|
end
|
@@ -162,13 +162,13 @@ describe Chef::REST do
|
|
162
162
|
|
163
163
|
auth_headers = standard_write_headers.merge({"auth_done"=>"yep"})
|
164
164
|
|
165
|
-
rest.authenticator.
|
165
|
+
expect(rest.authenticator).to receive(:handle_request).
|
166
166
|
with(:POST, monkey_uri, standard_write_headers, data).
|
167
167
|
and_return([:POST, monkey_uri, auth_headers, data])
|
168
|
-
rest.
|
168
|
+
expect(rest).to receive(:send_http_request).
|
169
169
|
with(:POST, monkey_uri, auth_headers, data).
|
170
170
|
and_return([1,2,3])
|
171
|
-
rest.
|
171
|
+
expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
|
172
172
|
rest.raw_http_request(:POST, monkey_uri, standard_write_headers, data)
|
173
173
|
end
|
174
174
|
|
@@ -176,10 +176,10 @@ describe Chef::REST do
|
|
176
176
|
data = "\"secure data\""
|
177
177
|
method, uri, auth_headers, d = rest.authenticator.handle_request(:POST, monkey_uri, standard_write_headers, data)
|
178
178
|
|
179
|
-
rest.
|
179
|
+
expect(rest).to receive(:send_http_request).
|
180
180
|
with(:POST, monkey_uri, auth_headers, data).
|
181
181
|
and_return([1,2,3])
|
182
|
-
rest.
|
182
|
+
expect(rest).to receive('success_response?'.to_sym).with(1).and_return(true)
|
183
183
|
rest.raw_http_request(:POST, monkey_uri, standard_write_headers, data)
|
184
184
|
end
|
185
185
|
end
|
@@ -241,8 +241,8 @@ describe Chef::REST do
|
|
241
241
|
|
242
242
|
let(:http_response) do
|
243
243
|
http_response = Net::HTTPSuccess.new("1.1", "200", "successful rest req")
|
244
|
-
http_response.
|
245
|
-
http_response.
|
244
|
+
allow(http_response).to receive(:read_body)
|
245
|
+
allow(http_response).to receive(:body).and_return(body)
|
246
246
|
http_response["Content-Length"] = body.bytesize.to_s
|
247
247
|
http_response
|
248
248
|
end
|
@@ -255,14 +255,14 @@ describe Chef::REST do
|
|
255
255
|
|
256
256
|
let!(:http_client) do
|
257
257
|
http_client = Net::HTTP.new(url.host, url.port)
|
258
|
-
http_client.
|
258
|
+
allow(http_client).to receive(:request).and_yield(http_response).and_return(http_response)
|
259
259
|
http_client
|
260
260
|
end
|
261
261
|
|
262
262
|
let(:rest) do
|
263
|
-
Net::HTTP.
|
264
|
-
Chef::REST::CookieJar.
|
265
|
-
Chef::RequestID.instance.
|
263
|
+
allow(Net::HTTP).to receive(:new).and_return(http_client)
|
264
|
+
allow(Chef::REST::CookieJar).to receive(:instance).and_return({})
|
265
|
+
allow(Chef::RequestID.instance).to receive(:request_id).and_return(request_id)
|
266
266
|
rest = Chef::REST.new(base_url, nil, nil)
|
267
267
|
Chef::REST::CookieJar.instance.clear
|
268
268
|
rest
|
@@ -300,16 +300,16 @@ describe Chef::REST do
|
|
300
300
|
end
|
301
301
|
|
302
302
|
before do
|
303
|
-
Net::HTTP::Get.
|
303
|
+
allow(Net::HTTP::Get).to receive(:new).and_return(request_mock)
|
304
304
|
end
|
305
305
|
|
306
306
|
it "should always include the X-Chef-Version header" do
|
307
|
-
Net::HTTP::Get.
|
307
|
+
expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
|
308
308
|
rest.request(:GET, url, {})
|
309
309
|
end
|
310
310
|
|
311
311
|
it "should always include the X-Remote-Request-Id header" do
|
312
|
-
Net::HTTP::Get.
|
312
|
+
expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
|
313
313
|
rest.request(:GET, url, {})
|
314
314
|
end
|
315
315
|
|
@@ -323,7 +323,7 @@ describe Chef::REST do
|
|
323
323
|
# CHEF-3140
|
324
324
|
context "when configured to disable compression" do
|
325
325
|
let(:rest) do
|
326
|
-
Net::HTTP.
|
326
|
+
allow(Net::HTTP).to receive(:new).and_return(http_client)
|
327
327
|
Chef::REST.new(base_url, nil, nil, :disable_gzip => true)
|
328
328
|
end
|
329
329
|
|
@@ -334,7 +334,7 @@ describe Chef::REST do
|
|
334
334
|
it "does not decompress a response encoded as gzip" do
|
335
335
|
http_response.add_field("content-encoding", "gzip")
|
336
336
|
request = Net::HTTP::Get.new(url.path)
|
337
|
-
Net::HTTP::Get.
|
337
|
+
expect(Net::HTTP::Get).to receive(:new).and_return(request)
|
338
338
|
# will raise a Zlib error if incorrect
|
339
339
|
expect(rest.request(:GET, url, {})).to eq("ninja")
|
340
340
|
end
|
@@ -359,28 +359,28 @@ describe Chef::REST do
|
|
359
359
|
it "should set them on the http request" do
|
360
360
|
url_string = an_instance_of(String)
|
361
361
|
header_hash = hash_including(custom_headers)
|
362
|
-
Net::HTTP::Get.
|
362
|
+
expect(Net::HTTP::Get).to receive(:new).with(url_string, header_hash)
|
363
363
|
rest.request(:GET, url, {})
|
364
364
|
end
|
365
365
|
end
|
366
366
|
|
367
367
|
context "when setting cookies" do
|
368
368
|
let(:rest) do
|
369
|
-
Net::HTTP.
|
369
|
+
allow(Net::HTTP).to receive(:new).and_return(http_client)
|
370
370
|
Chef::REST::CookieJar.instance["#{url.host}:#{url.port}"] = "cookie monster"
|
371
|
-
Chef::RequestID.instance.
|
371
|
+
allow(Chef::RequestID.instance).to receive(:request_id).and_return(request_id)
|
372
372
|
rest = Chef::REST.new(base_url, nil, nil)
|
373
373
|
rest
|
374
374
|
end
|
375
375
|
|
376
376
|
it "should set the cookie for this request if one exists for the given host:port" do
|
377
|
-
Net::HTTP::Get.
|
377
|
+
expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", base_headers.merge('Cookie' => "cookie monster")).and_return(request_mock)
|
378
378
|
rest.request(:GET, url, {})
|
379
379
|
end
|
380
380
|
end
|
381
381
|
|
382
382
|
it "should build a new HTTP GET request" do
|
383
|
-
Net::HTTP::Get.
|
383
|
+
expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
|
384
384
|
rest.request(:GET, url, {})
|
385
385
|
end
|
386
386
|
|
@@ -388,7 +388,7 @@ describe Chef::REST do
|
|
388
388
|
request = Net::HTTP::Post.new(url.path)
|
389
389
|
expected_headers = base_headers.merge("Content-Type" => 'application/json', 'Content-Length' => '13')
|
390
390
|
|
391
|
-
Net::HTTP::Post.
|
391
|
+
expect(Net::HTTP::Post).to receive(:new).with("/?foo=bar", expected_headers).and_return(request)
|
392
392
|
rest.request(:POST, url, {}, {:one=>:two})
|
393
393
|
expect(request.body).to eq('{"one":"two"}')
|
394
394
|
end
|
@@ -396,13 +396,13 @@ describe Chef::REST do
|
|
396
396
|
it "should build a new HTTP PUT request" do
|
397
397
|
request = Net::HTTP::Put.new(url.path)
|
398
398
|
expected_headers = base_headers.merge("Content-Type" => 'application/json', 'Content-Length' => '13')
|
399
|
-
Net::HTTP::Put.
|
399
|
+
expect(Net::HTTP::Put).to receive(:new).with("/?foo=bar",expected_headers).and_return(request)
|
400
400
|
rest.request(:PUT, url, {}, {:one=>:two})
|
401
401
|
expect(request.body).to eq('{"one":"two"}')
|
402
402
|
end
|
403
403
|
|
404
404
|
it "should build a new HTTP DELETE request" do
|
405
|
-
Net::HTTP::Delete.
|
405
|
+
expect(Net::HTTP::Delete).to receive(:new).with("/?foo=bar", base_headers).and_return(request_mock)
|
406
406
|
rest.request(:DELETE, url)
|
407
407
|
end
|
408
408
|
|
@@ -440,7 +440,7 @@ describe Chef::REST do
|
|
440
440
|
resp_code = Net::HTTPResponse::CODE_TO_OBJ.keys.detect { |k| Net::HTTPResponse::CODE_TO_OBJ[k] == resp_cls }
|
441
441
|
http_response = Net::HTTPFound.new("1.1", resp_code, "bob is somewhere else again")
|
442
442
|
http_response.add_field("location", url.path)
|
443
|
-
http_response.
|
443
|
+
allow(http_response).to receive(:read_body)
|
444
444
|
http_response
|
445
445
|
end
|
446
446
|
it "should call request again" do
|
@@ -457,7 +457,7 @@ describe Chef::REST do
|
|
457
457
|
context "when the response is 304 NotModified" do
|
458
458
|
let (:http_response) do
|
459
459
|
http_response = Net::HTTPNotModified.new("1.1", "304", "it's the same as when you asked 5 minutes ago")
|
460
|
-
http_response.
|
460
|
+
allow(http_response).to receive(:read_body)
|
461
461
|
http_response
|
462
462
|
end
|
463
463
|
|
@@ -480,13 +480,13 @@ describe Chef::REST do
|
|
480
480
|
let(:http_response) do
|
481
481
|
http_response = Net::HTTPServerError.new("1.1", "500", "drooling from inside of mouth")
|
482
482
|
http_response.add_field("content-type", "application/json")
|
483
|
-
http_response.
|
484
|
-
http_response.
|
483
|
+
allow(http_response).to receive(:body).and_return('{ "error":[ "Ears get sore!", "Not even four" ] }')
|
484
|
+
allow(http_response).to receive(:read_body)
|
485
485
|
http_response
|
486
486
|
end
|
487
487
|
|
488
488
|
it "should show the JSON error message" do
|
489
|
-
rest.
|
489
|
+
allow(rest).to receive(:sleep)
|
490
490
|
|
491
491
|
expect {rest.request(:GET, url)}.to raise_error(Net::HTTPFatalError)
|
492
492
|
expect(log_stringio.string).to match(Regexp.escape('INFO: HTTP Request Returned 500 drooling from inside of mouth: Ears get sore!, Not even four'))
|
@@ -502,17 +502,21 @@ describe Chef::REST do
|
|
502
502
|
gzipped_body = Zlib::Deflate.deflate(unzipped_body)
|
503
503
|
gzipped_body.force_encoding(Encoding::BINARY) if "strings".respond_to?(:force_encoding)
|
504
504
|
|
505
|
-
http_response.
|
506
|
-
http_response.
|
505
|
+
allow(http_response).to receive(:body).and_return gzipped_body
|
506
|
+
allow(http_response).to receive(:read_body)
|
507
507
|
http_response
|
508
508
|
end
|
509
|
-
it "decompresses the JSON error message" do
|
510
|
-
rest.stub(:sleep)
|
511
|
-
rest.stub(:http_retry_count).and_return(0)
|
512
509
|
|
510
|
+
before do
|
511
|
+
allow(rest).to receive(:sleep)
|
512
|
+
allow(rest).to receive(:http_retry_count).and_return(0)
|
513
|
+
end
|
514
|
+
|
515
|
+
it "decompresses the JSON error message" do
|
513
516
|
expect {rest.request(:GET, url)}.to raise_error(Net::HTTPFatalError)
|
514
517
|
expect(log_stringio.string).to match(Regexp.escape('INFO: HTTP Request Returned 500 drooling from inside of mouth: Ears get sore!, Not even four'))
|
515
518
|
end
|
519
|
+
|
516
520
|
it "fails when the compressed body is truncated" do
|
517
521
|
http_response["Content-Length"] = (body.bytesize + 99).to_s
|
518
522
|
expect {rest.request(:GET, url)}.to raise_error(Chef::Exceptions::ContentLengthMismatch)
|
@@ -522,13 +526,16 @@ describe Chef::REST do
|
|
522
526
|
context "on a generic unsuccessful request" do
|
523
527
|
let(:http_response) do
|
524
528
|
http_response = Net::HTTPServerError.new("1.1", "500", "drooling from inside of mouth")
|
525
|
-
http_response.
|
526
|
-
http_response.
|
529
|
+
allow(http_response).to receive(:body)
|
530
|
+
allow(http_response).to receive(:read_body)
|
527
531
|
http_response
|
528
532
|
end
|
529
|
-
|
530
|
-
|
533
|
+
|
534
|
+
it "retries then throws an exception" do
|
535
|
+
allow(rest).to receive(:sleep)
|
531
536
|
expect {rest.request(:GET, url)}.to raise_error(Net::HTTPFatalError)
|
537
|
+
count = Chef::Config[:http_retry_count]
|
538
|
+
expect(log_stringio.string).to match(Regexp.escape("ERROR: Server returned error 500 for #{url}, retrying #{count}/#{count}"))
|
532
539
|
end
|
533
540
|
end
|
534
541
|
end
|
@@ -542,8 +549,8 @@ describe Chef::REST do
|
|
542
549
|
let(:http_response) do
|
543
550
|
http_response = Net::HTTPSuccess.new("1.1",'200', "it-works")
|
544
551
|
|
545
|
-
http_response.
|
546
|
-
http_response.
|
552
|
+
allow(http_response).to receive(:read_body)
|
553
|
+
expect(http_response).not_to receive(:body)
|
547
554
|
http_response["Content-Length"] = "0" # call set_content_length (in test), if otherwise
|
548
555
|
http_response
|
549
556
|
end
|
@@ -557,8 +564,8 @@ describe Chef::REST do
|
|
557
564
|
end
|
558
565
|
|
559
566
|
before do
|
560
|
-
Tempfile.
|
561
|
-
Net::HTTP::Get.
|
567
|
+
allow(Tempfile).to receive(:new).with("chef-rest").and_return(tempfile)
|
568
|
+
allow(Net::HTTP::Get).to receive(:new).and_return(request_mock)
|
562
569
|
end
|
563
570
|
|
564
571
|
after do
|
@@ -572,7 +579,7 @@ describe Chef::REST do
|
|
572
579
|
'Host' => host_header,
|
573
580
|
'X-REMOTE-REQUEST-ID'=> request_id
|
574
581
|
}
|
575
|
-
Net::HTTP::Get.
|
582
|
+
expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", expected_headers).and_return(request_mock)
|
576
583
|
rest.streaming_request(url, {})
|
577
584
|
end
|
578
585
|
|
@@ -583,7 +590,7 @@ describe Chef::REST do
|
|
583
590
|
'Host' => host_header,
|
584
591
|
'X-REMOTE-REQUEST-ID'=> request_id
|
585
592
|
}
|
586
|
-
Net::HTTP::Get.
|
593
|
+
expect(Net::HTTP::Get).to receive(:new).with("/?foo=bar", expected_headers).and_return(request_mock)
|
587
594
|
rest.streaming_request(url, {})
|
588
595
|
end
|
589
596
|
|
@@ -592,7 +599,7 @@ describe Chef::REST do
|
|
592
599
|
end
|
593
600
|
|
594
601
|
it "writes the response body to a tempfile" do
|
595
|
-
http_response.
|
602
|
+
allow(http_response).to receive(:read_body).and_yield("real").and_yield("ultimate").and_yield("power")
|
596
603
|
set_content_length
|
597
604
|
rest.streaming_request(url, {})
|
598
605
|
expect(IO.read(tempfile.path).chomp).to eq("realultimatepower")
|
@@ -604,7 +611,7 @@ describe Chef::REST do
|
|
604
611
|
end
|
605
612
|
|
606
613
|
it "yields the tempfile containing the streamed response body and then unlinks it when given a block" do
|
607
|
-
http_response.
|
614
|
+
allow(http_response).to receive(:read_body).and_yield("real").and_yield("ultimate").and_yield("power")
|
608
615
|
set_content_length
|
609
616
|
tempfile_path = nil
|
610
617
|
rest.streaming_request(url, {}) do |tempfile|
|
@@ -617,24 +624,24 @@ describe Chef::REST do
|
|
617
624
|
|
618
625
|
it "does not raise a divide by zero exception if the content's actual size is 0" do
|
619
626
|
http_response['Content-Length'] = "5"
|
620
|
-
http_response.
|
627
|
+
allow(http_response).to receive(:read_body).and_yield('')
|
621
628
|
expect { rest.streaming_request(url, {}) }.to raise_error(Chef::Exceptions::ContentLengthMismatch)
|
622
629
|
end
|
623
630
|
|
624
631
|
it "does not raise a divide by zero exception when the Content-Length is 0" do
|
625
632
|
http_response['Content-Length'] = "0"
|
626
|
-
http_response.
|
633
|
+
allow(http_response).to receive(:read_body).and_yield("ninja")
|
627
634
|
expect { rest.streaming_request(url, {}) }.to raise_error(Chef::Exceptions::ContentLengthMismatch)
|
628
635
|
end
|
629
636
|
|
630
637
|
it "it raises an exception when the download is truncated" do
|
631
638
|
http_response["Content-Length"] = (body.bytesize + 99).to_s
|
632
|
-
http_response.
|
639
|
+
allow(http_response).to receive(:read_body).and_yield("ninja")
|
633
640
|
expect { rest.streaming_request(url, {}) }.to raise_error(Chef::Exceptions::ContentLengthMismatch)
|
634
641
|
end
|
635
642
|
|
636
643
|
it "fetches a file and yields the tempfile it is streamed to" do
|
637
|
-
http_response.
|
644
|
+
allow(http_response).to receive(:read_body).and_yield("real").and_yield("ultimate").and_yield("power")
|
638
645
|
set_content_length
|
639
646
|
tempfile_path = nil
|
640
647
|
rest.fetch("cookbooks/a_cookbook") do |tempfile|
|
@@ -647,32 +654,32 @@ describe Chef::REST do
|
|
647
654
|
it "closes and unlinks the tempfile if there is an error while streaming the content to the tempfile" do
|
648
655
|
path = tempfile.path
|
649
656
|
expect(path).not_to be_nil
|
650
|
-
tempfile.
|
657
|
+
allow(tempfile).to receive(:write).and_raise(IOError)
|
651
658
|
rest.fetch("cookbooks/a_cookbook") {|tmpfile| "shouldn't get here"}
|
652
659
|
expect(File.exists?(path)).to be_false
|
653
660
|
end
|
654
661
|
|
655
662
|
it "closes and unlinks the tempfile when the response is a redirect" do
|
656
663
|
tempfile = double("A tempfile", :path => "/tmp/ragefist", :close => true, :binmode => true)
|
657
|
-
tempfile.
|
658
|
-
Tempfile.
|
664
|
+
expect(tempfile).to receive(:close!).at_least(1).times
|
665
|
+
allow(Tempfile).to receive(:new).with("chef-rest").and_return(tempfile)
|
659
666
|
|
660
667
|
redirect = Net::HTTPFound.new("1.1", "302", "bob is taking care of that one for me today")
|
661
668
|
redirect.add_field("location", url.path)
|
662
|
-
redirect.
|
669
|
+
allow(redirect).to receive(:read_body)
|
663
670
|
|
664
|
-
http_client.
|
665
|
-
http_client.
|
671
|
+
expect(http_client).to receive(:request).and_yield(redirect).and_return(redirect)
|
672
|
+
expect(http_client).to receive(:request).and_yield(http_response).and_return(http_response)
|
666
673
|
rest.fetch("cookbooks/a_cookbook") {|tmpfile| "shouldn't get here"}
|
667
674
|
end
|
668
675
|
|
669
676
|
it "passes the original block to the redirected request" do
|
670
677
|
http_redirect = Net::HTTPFound.new("1.1", "302", "bob is taking care of that one for me today")
|
671
678
|
http_redirect.add_field("location","/that-thing-is-here-now")
|
672
|
-
http_redirect.
|
679
|
+
allow(http_redirect).to receive(:read_body)
|
673
680
|
|
674
681
|
block_called = false
|
675
|
-
http_client.
|
682
|
+
allow(http_client).to receive(:request).and_yield(http_response).and_return(http_redirect, http_response)
|
676
683
|
rest.fetch("cookbooks/a_cookbook") do |tmpfile|
|
677
684
|
block_called = true
|
678
685
|
end
|