chef 12.0.0.alpha.2-x86-mingw32 → 12.0.0.rc.0-x86-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.
- 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/ext/win32-eventlog/Rakefile +50 -0
- data/ext/win32-eventlog/chef-log.man +26 -0
- 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 +303 -196
- 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
@@ -28,7 +28,7 @@ describe Chef::Provider::Package::Paludis do
|
|
28
28
|
@run_context = Chef::RunContext.new(@node, {}, @events)
|
29
29
|
@new_resource = Chef::Resource::Package.new("net/ntp")
|
30
30
|
@current_resource = Chef::Resource::Package.new("net/ntp")
|
31
|
-
Chef::Resource::Package.
|
31
|
+
allow(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
|
32
32
|
@provider = Chef::Provider::Package::Paludis.new(@new_resource, @run_context)
|
33
33
|
|
34
34
|
@stdin = StringIO.new
|
@@ -47,19 +47,19 @@ PKG_STATUS
|
|
47
47
|
|
48
48
|
context "when loading current resource" do
|
49
49
|
it "should create a current resource with the name of the new_resource" do
|
50
|
-
@provider.
|
51
|
-
Chef::Resource::Package.
|
50
|
+
expect(@provider).to receive(:shell_out!).and_return(@shell_out)
|
51
|
+
expect(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
|
52
52
|
@provider.load_current_resource
|
53
53
|
end
|
54
54
|
|
55
55
|
it "should set the current resources package name to the new resources package name" do
|
56
|
-
@provider.
|
57
|
-
@current_resource.
|
56
|
+
expect(@provider).to receive(:shell_out!).and_return(@shell_out)
|
57
|
+
expect(@current_resource).to receive(:package_name).with(@new_resource.package_name)
|
58
58
|
@provider.load_current_resource
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should run pkg info with the package name" do
|
62
|
-
@provider.
|
62
|
+
expect(@provider).to receive(:shell_out!).with("cave -L warning print-ids -M none -m \"#{@new_resource.package_name}\" -f \"%c/%p %v %r\n\"").and_return(@shell_out)
|
63
63
|
@provider.load_current_resource
|
64
64
|
end
|
65
65
|
|
@@ -72,28 +72,28 @@ user/ntp 0 accounts
|
|
72
72
|
user/ntp 0 installed-accounts
|
73
73
|
net/ntp 4.2.6_p5-r1 installed
|
74
74
|
INSTALLED
|
75
|
-
@provider.
|
75
|
+
expect(@provider).to receive(:shell_out!).and_return(@shell_out)
|
76
76
|
@provider.load_current_resource
|
77
|
-
@current_resource.version.
|
78
|
-
@provider.candidate_version.
|
77
|
+
expect(@current_resource.version).to eq("4.2.6_p5-r1")
|
78
|
+
expect(@provider.candidate_version).to eql("4.2.6_p5-r2")
|
79
79
|
end
|
80
80
|
|
81
81
|
it "should return the current resource" do
|
82
|
-
@provider.
|
83
|
-
@provider.load_current_resource.
|
82
|
+
expect(@provider).to receive(:shell_out!).and_return(@shell_out)
|
83
|
+
expect(@provider.load_current_resource).to eql(@current_resource)
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
87
|
context "when installing a package" do
|
88
88
|
it "should run pkg install with the package name and version" do
|
89
|
-
@provider.
|
89
|
+
expect(@provider).to receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
|
90
90
|
@provider.install_package("net/ntp", "4.2.6_p5-r2")
|
91
91
|
end
|
92
92
|
|
93
93
|
|
94
94
|
it "should run pkg install with the package name and version and options if specified" do
|
95
|
-
@provider.
|
96
|
-
@new_resource.
|
95
|
+
expect(@provider).to receive(:shell_out!).with("cave -L warning resolve -x --preserve-world \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
|
96
|
+
allow(@new_resource).to receive(:options).and_return("--preserve-world")
|
97
97
|
@provider.install_package("net/ntp", "4.2.6_p5-r2")
|
98
98
|
end
|
99
99
|
|
@@ -102,7 +102,7 @@ INSTALLED
|
|
102
102
|
sys-process/lsof 4.87 arbor
|
103
103
|
sys-process/lsof 4.87 x86_64
|
104
104
|
PKG_STATUS
|
105
|
-
@provider.
|
105
|
+
expect(@provider).to receive(:shell_out!).with("cave -L warning resolve -x \"=sys-process/lsof-4.87\"", {:timeout=>@new_resource.timeout})
|
106
106
|
@provider.install_package("sys-process/lsof", "4.87")
|
107
107
|
end
|
108
108
|
|
@@ -111,23 +111,23 @@ PKG_STATUS
|
|
111
111
|
sys-process/lsof 4.87 arbor
|
112
112
|
sys-process/lsof 4.87 x86_64
|
113
113
|
PKG_STATUS
|
114
|
-
@provider.
|
114
|
+
expect(@provider).to receive(:shell_out!).and_return(@shell_out)
|
115
115
|
@provider.load_current_resource
|
116
|
-
@current_resource.version.
|
117
|
-
@provider.candidate_version.
|
116
|
+
expect(@current_resource.version).to be_nil
|
117
|
+
expect(@provider.candidate_version).to eql("4.87")
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
121
|
context "when upgrading a package" do
|
122
122
|
it "should run pkg install with the package name and version" do
|
123
|
-
@provider.
|
123
|
+
expect(@provider).to receive(:shell_out!).with("cave -L warning resolve -x \"=net/ntp-4.2.6_p5-r2\"", {:timeout=>@new_resource.timeout})
|
124
124
|
@provider.upgrade_package("net/ntp", "4.2.6_p5-r2")
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
128
|
context "when uninstalling a package" do
|
129
129
|
it "should run pkg uninstall with the package name and version" do
|
130
|
-
@provider.
|
130
|
+
expect(@provider).to receive(:shell_out!).with("cave -L warning uninstall -x \"=net/ntp-4.2.6_p5-r2\"")
|
131
131
|
@provider.remove_package("net/ntp", "4.2.6_p5-r2")
|
132
132
|
end
|
133
133
|
|
@@ -27,73 +27,73 @@ describe Chef::Provider::Package::Portage, "load_current_resource" do
|
|
27
27
|
@current_resource = Chef::Resource::Package.new("dev-util/git")
|
28
28
|
|
29
29
|
@provider = Chef::Provider::Package::Portage.new(@new_resource, @run_context)
|
30
|
-
Chef::Resource::Package.
|
30
|
+
allow(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "when determining the current state of the package" do
|
34
34
|
|
35
35
|
it "should create a current resource with the name of new_resource" do
|
36
|
-
::Dir.
|
37
|
-
Chef::Resource::Package.
|
36
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0"])
|
37
|
+
expect(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
|
38
38
|
@provider.load_current_resource
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should set the current resource package name to the new resource package name" do
|
42
|
-
::Dir.
|
43
|
-
@current_resource.
|
42
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0"])
|
43
|
+
expect(@current_resource).to receive(:package_name).with(@new_resource.package_name)
|
44
44
|
@provider.load_current_resource
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should return a current resource with the correct version if the package is found" do
|
48
|
-
::Dir.
|
48
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-foobar-0.9", "/var/db/pkg/dev-util/git-1.0.0"])
|
49
49
|
@provider.load_current_resource
|
50
|
-
@provider.current_resource.version.
|
50
|
+
expect(@provider.current_resource.version).to eq("1.0.0")
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should return a current resource with the correct version if the package is found with revision" do
|
54
|
-
::Dir.
|
54
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0-r1"])
|
55
55
|
@provider.load_current_resource
|
56
|
-
@provider.current_resource.version.
|
56
|
+
expect(@provider.current_resource.version).to eq("1.0.0-r1")
|
57
57
|
end
|
58
58
|
|
59
59
|
it "should return a current resource with a nil version if the package is not found" do
|
60
|
-
::Dir.
|
60
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/notgit-1.0.0"])
|
61
61
|
@provider.load_current_resource
|
62
|
-
@provider.current_resource.version.
|
62
|
+
expect(@provider.current_resource.version).to be_nil
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should return a package name match from /var/db/pkg/* if a category isn't specified and a match is found" do
|
66
|
-
::Dir.
|
66
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/git-foobar-0.9", "/var/db/pkg/dev-util/git-1.0.0"])
|
67
67
|
@provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
|
68
68
|
@provider.load_current_resource
|
69
|
-
@provider.current_resource.version.
|
69
|
+
expect(@provider.current_resource.version).to eq("1.0.0")
|
70
70
|
end
|
71
71
|
|
72
72
|
it "should return a current resource with a nil version if a category isn't specified and a name match from /var/db/pkg/* is not found" do
|
73
|
-
::Dir.
|
73
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/notgit-1.0.0"])
|
74
74
|
@provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
|
75
75
|
@provider.load_current_resource
|
76
|
-
@provider.current_resource.version.
|
76
|
+
expect(@provider.current_resource.version).to be_nil
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should throw an exception if a category isn't specified and multiple packages are found" do
|
80
|
-
::Dir.
|
80
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/funny-words/git-1.0.0"])
|
81
81
|
@provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
|
82
|
-
|
82
|
+
expect { @provider.load_current_resource }.to raise_error(Chef::Exceptions::Package)
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should return a current resource with a nil version if a category is specified and multiple packages are found" do
|
86
|
-
::Dir.
|
86
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/dev-util/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/funny-words/git-1.0.0"])
|
87
87
|
@provider = Chef::Provider::Package::Portage.new(@new_resource, @run_context)
|
88
88
|
@provider.load_current_resource
|
89
|
-
@provider.current_resource.version.
|
89
|
+
expect(@provider.current_resource.version).to be_nil
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should return a current resource with a nil version if a category is not specified and multiple packages from the same category are found" do
|
93
|
-
::Dir.
|
93
|
+
allow(::Dir).to receive(:[]).with("/var/db/pkg/*/git-*").and_return(["/var/db/pkg/dev-util/git-1.0.0", "/var/db/pkg/dev-util/git-1.0.1"])
|
94
94
|
@provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
|
95
95
|
@provider.load_current_resource
|
96
|
-
@provider.current_resource.version.
|
96
|
+
expect(@provider.current_resource.version).to be_nil
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -102,14 +102,14 @@ describe Chef::Provider::Package::Portage, "load_current_resource" do
|
|
102
102
|
describe Chef::Provider::Package::Portage, "candidate_version" do
|
103
103
|
it "should return the candidate_version variable if already set" do
|
104
104
|
@provider.candidate_version = "1.0.0"
|
105
|
-
@provider.
|
105
|
+
expect(@provider).not_to receive(:popen4)
|
106
106
|
@provider.candidate_version
|
107
107
|
end
|
108
108
|
|
109
109
|
it "should throw an exception if the exitstatus is not 0" do
|
110
110
|
@status = double("Status", :exitstatus => 1)
|
111
|
-
@provider.
|
112
|
-
|
111
|
+
allow(@provider).to receive(:popen4).and_return(@status)
|
112
|
+
expect { @provider.candidate_version }.to raise_error(Chef::Exceptions::Package)
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should find the candidate_version if a category is specifed and there are no duplicates" do
|
@@ -144,8 +144,8 @@ Searching...
|
|
144
144
|
EOF
|
145
145
|
|
146
146
|
@status = double("Status", :exitstatus => 0)
|
147
|
-
@provider.
|
148
|
-
@provider.candidate_version.
|
147
|
+
expect(@provider).to receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
|
148
|
+
expect(@provider.candidate_version).to eq("1.6.0.6")
|
149
149
|
end
|
150
150
|
|
151
151
|
it "should find the candidate_version if a category is not specifed and there are no duplicates" do
|
@@ -181,8 +181,8 @@ EOF
|
|
181
181
|
|
182
182
|
@status = double("Status", :exitstatus => 0)
|
183
183
|
@provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
|
184
|
-
@provider.
|
185
|
-
@provider.candidate_version.
|
184
|
+
expect(@provider).to receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
|
185
|
+
expect(@provider.candidate_version).to eq("1.6.0.6")
|
186
186
|
end
|
187
187
|
|
188
188
|
it "should throw an exception if a category is not specified and there are duplicates" do
|
@@ -226,8 +226,8 @@ EOF
|
|
226
226
|
|
227
227
|
@status = double("Status", :exitstatus => 0)
|
228
228
|
@provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
|
229
|
-
@provider.
|
230
|
-
|
229
|
+
expect(@provider).to receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
|
230
|
+
expect { @provider.candidate_version }.to raise_error(Chef::Exceptions::Package)
|
231
231
|
end
|
232
232
|
|
233
233
|
it "should find the candidate_version if a category is specifed and there are category duplicates" do
|
@@ -271,25 +271,25 @@ EOF
|
|
271
271
|
|
272
272
|
@status = double("Status", :exitstatus => 0)
|
273
273
|
@provider = Chef::Provider::Package::Portage.new(@new_resource, @run_context)
|
274
|
-
@provider.
|
275
|
-
@provider.candidate_version.
|
274
|
+
expect(@provider).to receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
|
275
|
+
expect(@provider.candidate_version).to eq("1.6.0.6")
|
276
276
|
end
|
277
277
|
end
|
278
278
|
|
279
279
|
describe Chef::Provider::Package::Portage, "install_package" do
|
280
280
|
it "should install a normally versioned package using portage" do
|
281
|
-
@provider.
|
281
|
+
expect(@provider).to receive(:shell_out!).with("emerge -g --color n --nospinner --quiet =dev-util/git-1.0.0")
|
282
282
|
@provider.install_package("dev-util/git", "1.0.0")
|
283
283
|
end
|
284
284
|
|
285
285
|
it "should install a tilde versioned package using portage" do
|
286
|
-
@provider.
|
286
|
+
expect(@provider).to receive(:shell_out!).with("emerge -g --color n --nospinner --quiet ~dev-util/git-1.0.0")
|
287
287
|
@provider.install_package("dev-util/git", "~1.0.0")
|
288
288
|
end
|
289
289
|
|
290
290
|
it "should add options to the emerge command when specified" do
|
291
|
-
@provider.
|
292
|
-
@new_resource.
|
291
|
+
expect(@provider).to receive(:shell_out!).with("emerge -g --color n --nospinner --quiet --oneshot =dev-util/git-1.0.0")
|
292
|
+
allow(@new_resource).to receive(:options).and_return("--oneshot")
|
293
293
|
|
294
294
|
@provider.install_package("dev-util/git", "1.0.0")
|
295
295
|
end
|
@@ -297,12 +297,12 @@ EOF
|
|
297
297
|
|
298
298
|
describe Chef::Provider::Package::Portage, "remove_package" do
|
299
299
|
it "should un-emerge the package with no version specified" do
|
300
|
-
@provider.
|
300
|
+
expect(@provider).to receive(:shell_out!).with("emerge --unmerge --color n --nospinner --quiet dev-util/git")
|
301
301
|
@provider.remove_package("dev-util/git", nil)
|
302
302
|
end
|
303
303
|
|
304
304
|
it "should un-emerge the package with a version specified" do
|
305
|
-
@provider.
|
305
|
+
expect(@provider).to receive(:shell_out!).with("emerge --unmerge --color n --nospinner --quiet =dev-util/git-1.0.0")
|
306
306
|
@provider.remove_package("dev-util/git", "1.0.0")
|
307
307
|
end
|
308
308
|
end
|
@@ -30,55 +30,55 @@ describe Chef::Provider::Package::Rpm do
|
|
30
30
|
@provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
|
31
31
|
|
32
32
|
@status = double("Status", :exitstatus => 0)
|
33
|
-
::File.
|
33
|
+
allow(::File).to receive(:exists?).and_return(true)
|
34
34
|
end
|
35
35
|
|
36
36
|
describe "when determining the current state of the package" do
|
37
37
|
|
38
38
|
it "should create a current resource with the name of new_resource" do
|
39
|
-
@provider.
|
39
|
+
allow(@provider).to receive(:popen4).and_return(@status)
|
40
40
|
@provider.load_current_resource
|
41
|
-
@provider.current_resource.name.
|
41
|
+
expect(@provider.current_resource.name).to eq("ImageMagick-c++")
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should set the current reource package name to the new resource package name" do
|
45
|
-
@provider.
|
45
|
+
allow(@provider).to receive(:popen4).and_return(@status)
|
46
46
|
@provider.load_current_resource
|
47
|
-
@provider.current_resource.package_name.
|
47
|
+
expect(@provider.current_resource.package_name).to eq('ImageMagick-c++')
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should raise an exception if a source is supplied but not found" do
|
51
|
-
::File.
|
52
|
-
|
51
|
+
allow(::File).to receive(:exists?).and_return(false)
|
52
|
+
expect { @provider.run_action(:any) }.to raise_error(Chef::Exceptions::Package)
|
53
53
|
end
|
54
54
|
|
55
55
|
it "should get the source package version from rpm if provided" do
|
56
56
|
@stdout = StringIO.new("ImageMagick-c++ 6.5.4.7-7.el6_5")
|
57
|
-
@provider.
|
58
|
-
@provider.
|
57
|
+
expect(@provider).to receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
58
|
+
expect(@provider).to receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' ImageMagick-c++").and_return(@status)
|
59
59
|
@provider.load_current_resource
|
60
|
-
@provider.current_resource.package_name.
|
61
|
-
@provider.new_resource.version.
|
60
|
+
expect(@provider.current_resource.package_name).to eq("ImageMagick-c++")
|
61
|
+
expect(@provider.new_resource.version).to eq("6.5.4.7-7.el6_5")
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should return the current version installed if found by rpm" do
|
65
65
|
@stdout = StringIO.new("ImageMagick-c++ 6.5.4.7-7.el6_5")
|
66
|
-
@provider.
|
67
|
-
@provider.
|
66
|
+
expect(@provider).to receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm").and_return(@status)
|
67
|
+
expect(@provider).to receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' ImageMagick-c++").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
68
68
|
@provider.load_current_resource
|
69
|
-
@provider.current_resource.version.
|
69
|
+
expect(@provider.current_resource.version).to eq("6.5.4.7-7.el6_5")
|
70
70
|
end
|
71
71
|
|
72
72
|
it "should raise an exception if the source is not set but we are installing" do
|
73
73
|
new_resource = Chef::Resource::Package.new("ImageMagick-c++")
|
74
74
|
provider = Chef::Provider::Package::Rpm.new(new_resource, @run_context)
|
75
|
-
|
75
|
+
expect { provider.run_action(:any) }.to raise_error(Chef::Exceptions::Package)
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should raise an exception if rpm fails to run" do
|
79
79
|
status = double("Status", :exitstatus => -1)
|
80
|
-
@provider.
|
81
|
-
|
80
|
+
allow(@provider).to receive(:popen4).and_return(status)
|
81
|
+
expect { @provider.run_action(:any) }.to raise_error(Chef::Exceptions::Package)
|
82
82
|
end
|
83
83
|
|
84
84
|
it "should not detect the package name as version when not installed" do
|
@@ -87,10 +87,10 @@ describe Chef::Provider::Package::Rpm do
|
|
87
87
|
@new_resource = Chef::Resource::Package.new("openssh-askpass")
|
88
88
|
@new_resource.source 'openssh-askpass'
|
89
89
|
@provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
|
90
|
-
@provider.
|
91
|
-
@provider.
|
90
|
+
expect(@provider).to receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
91
|
+
expect(@provider).to receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_return(@status)
|
92
92
|
@provider.load_current_resource
|
93
|
-
@provider.current_resource.version.
|
93
|
+
expect(@provider.current_resource.version).to be_nil
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
@@ -102,54 +102,54 @@ describe Chef::Provider::Package::Rpm do
|
|
102
102
|
|
103
103
|
describe "when installing or upgrading" do
|
104
104
|
it "should run rpm -i with the package source to install" do
|
105
|
-
@provider.
|
105
|
+
expect(@provider).to receive(:shell_out!).with("rpm -i /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
106
106
|
@provider.install_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
|
107
107
|
end
|
108
108
|
|
109
109
|
it "should run rpm -U with the package source to upgrade" do
|
110
110
|
@current_resource.version("21.4-19.el5")
|
111
|
-
@provider.
|
111
|
+
expect(@provider).to receive(:shell_out!).with("rpm -U /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
112
112
|
@provider.upgrade_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should install package if missing and set to upgrade" do
|
116
116
|
@current_resource.version("ImageMagick-c++")
|
117
|
-
@provider.
|
117
|
+
expect(@provider).to receive(:shell_out!).with("rpm -U /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
118
118
|
@provider.upgrade_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
|
119
119
|
end
|
120
120
|
|
121
121
|
it "should install from a path when the package is a path and the source is nil" do
|
122
122
|
@new_resource = Chef::Resource::Package.new("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
123
123
|
@provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
|
124
|
-
@new_resource.source.
|
124
|
+
expect(@new_resource.source).to eq("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
125
125
|
@current_resource = Chef::Resource::Package.new("ImageMagick-c++")
|
126
126
|
@provider.current_resource = @current_resource
|
127
|
-
@provider.
|
127
|
+
expect(@provider).to receive(:shell_out!).with("rpm -i /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
128
128
|
@provider.install_package("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm", "6.5.4.7-7.el6_5")
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should uprgrade from a path when the package is a path and the source is nil" do
|
132
132
|
@new_resource = Chef::Resource::Package.new("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
133
133
|
@provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
|
134
|
-
@new_resource.source.
|
134
|
+
expect(@new_resource.source).to eq("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
135
135
|
@current_resource = Chef::Resource::Package.new("ImageMagick-c++")
|
136
136
|
@current_resource.version("21.4-19.el5")
|
137
137
|
@provider.current_resource = @current_resource
|
138
|
-
@provider.
|
138
|
+
expect(@provider).to receive(:shell_out!).with("rpm -U /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
139
139
|
@provider.upgrade_package("/tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm", "6.5.4.7-7.el6_5")
|
140
140
|
end
|
141
141
|
|
142
142
|
it "installs with custom options specified in the resource" do
|
143
143
|
@provider.candidate_version = '11'
|
144
144
|
@new_resource.options("--dbpath /var/lib/rpm")
|
145
|
-
@provider.
|
145
|
+
expect(@provider).to receive(:shell_out!).with("rpm --dbpath /var/lib/rpm -i /tmp/ImageMagick-c++-6.5.4.7-7.el6_5.x86_64.rpm")
|
146
146
|
@provider.install_package(@new_resource.name, @provider.candidate_version)
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
150
|
describe "when removing the package" do
|
151
151
|
it "should run rpm -e to remove the package" do
|
152
|
-
@provider.
|
152
|
+
expect(@provider).to receive(:shell_out!).with("rpm -e ImageMagick-c++-6.5.4.7-7.el6_5")
|
153
153
|
@provider.remove_package("ImageMagick-c++", "6.5.4.7-7.el6_5")
|
154
154
|
end
|
155
155
|
end
|
@@ -39,23 +39,23 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it "determines the gem paths from the in memory rubygems" do
|
42
|
-
@gem_env.gem_paths.
|
42
|
+
expect(@gem_env.gem_paths).to eq(Gem.path)
|
43
43
|
end
|
44
44
|
|
45
45
|
it "determines the installed versions of gems from Gem.source_index" do
|
46
46
|
gems = [gemspec('rspec-core', Gem::Version.new('1.2.9')), gemspec('rspec-core', Gem::Version.new('1.3.0'))]
|
47
47
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.0')
|
48
|
-
Gem::Specification.
|
48
|
+
expect(Gem::Specification).to receive(:find_all_by_name).with('rspec-core', Gem::Dependency.new('rspec-core').requirement).and_return(gems)
|
49
49
|
else
|
50
|
-
Gem.source_index.
|
50
|
+
expect(Gem.source_index).to receive(:search).with(Gem::Dependency.new('rspec-core', nil)).and_return(gems)
|
51
51
|
end
|
52
|
-
@gem_env.installed_versions(Gem::Dependency.new('rspec-core', nil)).
|
52
|
+
expect(@gem_env.installed_versions(Gem::Dependency.new('rspec-core', nil))).to eq(gems)
|
53
53
|
end
|
54
54
|
|
55
55
|
it "determines the installed versions of gems from the source index (part2: the unmockening)" do
|
56
56
|
expected = ['rspec-core', Gem::Version.new(RSpec::Core::Version::STRING)]
|
57
57
|
actual = @gem_env.installed_versions(Gem::Dependency.new('rspec-core', nil)).map { |spec| [spec.name, spec.version] }
|
58
|
-
actual.
|
58
|
+
expect(actual).to include(expected)
|
59
59
|
end
|
60
60
|
|
61
61
|
it "yields to a block with an alternate source list set" do
|
@@ -68,8 +68,8 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
|
|
68
68
|
end
|
69
69
|
rescue RuntimeError
|
70
70
|
end
|
71
|
-
sources_in_block.
|
72
|
-
Gem.sources.
|
71
|
+
expect(sources_in_block).to eq(%w{http://gems.example.org})
|
72
|
+
expect(Gem.sources).to eq(normal_sources)
|
73
73
|
end
|
74
74
|
|
75
75
|
it "it doesnt alter the gem sources if none are set" do
|
@@ -82,29 +82,29 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
|
|
82
82
|
end
|
83
83
|
rescue RuntimeError
|
84
84
|
end
|
85
|
-
sources_in_block.
|
86
|
-
Gem.sources.
|
85
|
+
expect(sources_in_block).to eq(normal_sources)
|
86
|
+
expect(Gem.sources).to eq(normal_sources)
|
87
87
|
end
|
88
88
|
|
89
89
|
it "finds a matching gem candidate version" do
|
90
90
|
dep = Gem::Dependency.new('rspec', '>= 0')
|
91
91
|
dep_installer = Gem::DependencyInstaller.new
|
92
|
-
@gem_env.
|
92
|
+
allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
|
93
93
|
latest = [[gemspec("rspec", Gem::Version.new("1.3.0")), "http://rubygems.org/"]]
|
94
|
-
dep_installer.
|
95
|
-
@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0')).
|
94
|
+
expect(dep_installer).to receive(:find_gems_with_sources).with(dep).and_return(latest)
|
95
|
+
expect(@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0'))).to eq(Gem::Version.new('1.3.0'))
|
96
96
|
end
|
97
97
|
|
98
98
|
it "finds a matching gem candidate version on rubygems 2.0.0+" do
|
99
99
|
dep = Gem::Dependency.new('rspec', '>= 0')
|
100
100
|
dep_installer = Gem::DependencyInstaller.new
|
101
|
-
@gem_env.
|
101
|
+
allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
|
102
102
|
best_gem = double("best gem match", :spec => gemspec("rspec", Gem::Version.new("1.3.0")), :source => "https://rubygems.org")
|
103
103
|
available_set = double("Gem::AvailableSet test double")
|
104
|
-
available_set.
|
105
|
-
available_set.
|
106
|
-
dep_installer.
|
107
|
-
@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0')).
|
104
|
+
expect(available_set).to receive(:pick_best!)
|
105
|
+
expect(available_set).to receive(:set).and_return([best_gem])
|
106
|
+
expect(dep_installer).to receive(:find_gems_with_sources).with(dep).and_return(available_set)
|
107
|
+
expect(@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0'))).to eq(Gem::Version.new('1.3.0'))
|
108
108
|
end
|
109
109
|
|
110
110
|
context "when rubygems was upgraded from 1.8->2.0" do
|
@@ -121,7 +121,7 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
|
|
121
121
|
Gem.const_set(:Format, Object.new)
|
122
122
|
@remove_gem_format = true
|
123
123
|
end
|
124
|
-
Gem::Package.
|
124
|
+
allow(Gem::Package).to receive(:respond_to?).with(:open).and_return(false)
|
125
125
|
end
|
126
126
|
|
127
127
|
after do
|
@@ -132,8 +132,8 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
|
|
132
132
|
|
133
133
|
it "finds a matching gem candidate version on rubygems 2.0+ with some rubygems 1.8 code loaded" do
|
134
134
|
package = double("Gem::Package", :spec => "a gemspec from package")
|
135
|
-
Gem::Package.
|
136
|
-
@gem_env.spec_from_file("/path/to/package.gem").
|
135
|
+
expect(Gem::Package).to receive(:new).with("/path/to/package.gem").and_return(package)
|
136
|
+
expect(@gem_env.spec_from_file("/path/to/package.gem")).to eq("a gemspec from package")
|
137
137
|
end
|
138
138
|
|
139
139
|
end
|
@@ -142,54 +142,54 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
|
|
142
142
|
dep = Gem::Dependency.new('rspec', '>= 0')
|
143
143
|
latest = []
|
144
144
|
dep_installer = Gem::DependencyInstaller.new
|
145
|
-
@gem_env.
|
146
|
-
dep_installer.
|
147
|
-
@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0')).
|
145
|
+
allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
|
146
|
+
expect(dep_installer).to receive(:find_gems_with_sources).with(dep).and_return(latest)
|
147
|
+
expect(@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0'))).to be_nil
|
148
148
|
end
|
149
149
|
|
150
150
|
it "finds a matching candidate version from a .gem file when the path to the gem is supplied" do
|
151
151
|
location = CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem'
|
152
|
-
@gem_env.candidate_version_from_file(Gem::Dependency.new('chef-integration-test', '>= 0'), location).
|
153
|
-
@gem_env.candidate_version_from_file(Gem::Dependency.new('chef-integration-test', '>= 0.2.0'), location).
|
152
|
+
expect(@gem_env.candidate_version_from_file(Gem::Dependency.new('chef-integration-test', '>= 0'), location)).to eq(Gem::Version.new('0.1.0'))
|
153
|
+
expect(@gem_env.candidate_version_from_file(Gem::Dependency.new('chef-integration-test', '>= 0.2.0'), location)).to be_nil
|
154
154
|
end
|
155
155
|
|
156
156
|
it "finds a matching gem from a specific gemserver when explicit sources are given" do
|
157
157
|
dep = Gem::Dependency.new('rspec', '>= 0')
|
158
158
|
latest = [[gemspec("rspec", Gem::Version.new("1.3.0")), "http://rubygems.org/"]]
|
159
159
|
|
160
|
-
@gem_env.
|
160
|
+
expect(@gem_env).to receive(:with_gem_sources).with('http://gems.example.com').and_yield
|
161
161
|
dep_installer = Gem::DependencyInstaller.new
|
162
|
-
@gem_env.
|
163
|
-
dep_installer.
|
164
|
-
@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>=0'), 'http://gems.example.com').
|
162
|
+
allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
|
163
|
+
expect(dep_installer).to receive(:find_gems_with_sources).with(dep).and_return(latest)
|
164
|
+
expect(@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>=0'), 'http://gems.example.com')).to eq(Gem::Version.new('1.3.0'))
|
165
165
|
end
|
166
166
|
|
167
167
|
it "installs a gem with a hash of options for the dependency installer" do
|
168
168
|
dep_installer = Gem::DependencyInstaller.new
|
169
|
-
@gem_env.
|
170
|
-
@gem_env.
|
171
|
-
dep_installer.
|
169
|
+
expect(@gem_env).to receive(:dependency_installer).with(:install_dir => '/foo/bar').and_return(dep_installer)
|
170
|
+
expect(@gem_env).to receive(:with_gem_sources).with('http://gems.example.com').and_yield
|
171
|
+
expect(dep_installer).to receive(:install).with(Gem::Dependency.new('rspec', '>= 0'))
|
172
172
|
@gem_env.install(Gem::Dependency.new('rspec', '>= 0'), :install_dir => '/foo/bar', :sources => ['http://gems.example.com'])
|
173
173
|
end
|
174
174
|
|
175
175
|
it "builds an uninstaller for a gem with options set to avoid requiring user input" do
|
176
176
|
# default options for uninstaller should be:
|
177
177
|
# :ignore => true, :executables => true
|
178
|
-
Gem::Uninstaller.
|
178
|
+
expect(Gem::Uninstaller).to receive(:new).with('rspec', :ignore => true, :executables => true)
|
179
179
|
@gem_env.uninstaller('rspec')
|
180
180
|
end
|
181
181
|
|
182
182
|
it "uninstalls all versions of a gem" do
|
183
183
|
uninstaller = double('gem uninstaller')
|
184
|
-
uninstaller.
|
185
|
-
@gem_env.
|
184
|
+
expect(uninstaller).to receive(:uninstall)
|
185
|
+
expect(@gem_env).to receive(:uninstaller).with('rspec', :all => true).and_return(uninstaller)
|
186
186
|
@gem_env.uninstall('rspec')
|
187
187
|
end
|
188
188
|
|
189
189
|
it "uninstalls a specific version of a gem" do
|
190
190
|
uninstaller = double('gem uninstaller')
|
191
|
-
uninstaller.
|
192
|
-
@gem_env.
|
191
|
+
expect(uninstaller).to receive(:uninstall)
|
192
|
+
expect(@gem_env).to receive(:uninstaller).with('rspec', :version => '1.2.3').and_return(uninstaller)
|
193
193
|
@gem_env.uninstall('rspec', '1.2.3')
|
194
194
|
end
|
195
195
|
|
@@ -207,35 +207,35 @@ describe Chef::Provider::Package::Rubygems::AlternateGemEnvironment do
|
|
207
207
|
it "determines the gem paths from shelling out to gem env" do
|
208
208
|
gem_env_output = ['/path/to/gems', '/another/path/to/gems'].join(File::PATH_SEPARATOR)
|
209
209
|
shell_out_result = OpenStruct.new(:stdout => gem_env_output)
|
210
|
-
@gem_env.
|
211
|
-
@gem_env.gem_paths.
|
210
|
+
expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env gempath').and_return(shell_out_result)
|
211
|
+
expect(@gem_env.gem_paths).to eq(['/path/to/gems', '/another/path/to/gems'])
|
212
212
|
end
|
213
213
|
|
214
214
|
it "caches the gempaths by gem_binary" do
|
215
215
|
gem_env_output = ['/path/to/gems', '/another/path/to/gems'].join(File::PATH_SEPARATOR)
|
216
216
|
shell_out_result = OpenStruct.new(:stdout => gem_env_output)
|
217
|
-
@gem_env.
|
217
|
+
expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env gempath').and_return(shell_out_result)
|
218
218
|
expected = ['/path/to/gems', '/another/path/to/gems']
|
219
|
-
@gem_env.gem_paths.
|
220
|
-
Chef::Provider::Package::Rubygems::AlternateGemEnvironment.gempath_cache['/usr/weird/bin/gem'].
|
219
|
+
expect(@gem_env.gem_paths).to eq(['/path/to/gems', '/another/path/to/gems'])
|
220
|
+
expect(Chef::Provider::Package::Rubygems::AlternateGemEnvironment.gempath_cache['/usr/weird/bin/gem']).to eq(expected)
|
221
221
|
end
|
222
222
|
|
223
223
|
it "uses the cached result for gem paths when available" do
|
224
224
|
gem_env_output = ['/path/to/gems', '/another/path/to/gems'].join(File::PATH_SEPARATOR)
|
225
225
|
shell_out_result = OpenStruct.new(:stdout => gem_env_output)
|
226
|
-
@gem_env.
|
226
|
+
expect(@gem_env).not_to receive(:shell_out!)
|
227
227
|
expected = ['/path/to/gems', '/another/path/to/gems']
|
228
228
|
Chef::Provider::Package::Rubygems::AlternateGemEnvironment.gempath_cache['/usr/weird/bin/gem']= expected
|
229
|
-
@gem_env.gem_paths.
|
229
|
+
expect(@gem_env.gem_paths).to eq(['/path/to/gems', '/another/path/to/gems'])
|
230
230
|
end
|
231
231
|
|
232
232
|
it "builds the gems source index from the gem paths" do
|
233
|
-
@gem_env.
|
233
|
+
allow(@gem_env).to receive(:gem_paths).and_return(['/path/to/gems', '/another/path/to/gems'])
|
234
234
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.0')
|
235
235
|
@gem_env.gem_specification
|
236
|
-
Gem::Specification.dirs.
|
236
|
+
expect(Gem::Specification.dirs).to eq([ '/path/to/gems/specifications', '/another/path/to/gems/specifications' ])
|
237
237
|
else
|
238
|
-
Gem::SourceIndex.
|
238
|
+
expect(Gem::SourceIndex).to receive(:from_gems_in).with('/path/to/gems/specifications', '/another/path/to/gems/specifications')
|
239
239
|
@gem_env.gem_source_index
|
240
240
|
end
|
241
241
|
end
|
@@ -244,17 +244,17 @@ describe Chef::Provider::Package::Rubygems::AlternateGemEnvironment do
|
|
244
244
|
gems = [gemspec('rspec', Gem::Version.new('1.2.9')), gemspec('rspec', Gem::Version.new('1.3.0'))]
|
245
245
|
rspec_dep = Gem::Dependency.new('rspec', nil)
|
246
246
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.8.0')
|
247
|
-
@gem_env.
|
248
|
-
@gem_env.gem_specification.
|
247
|
+
allow(@gem_env).to receive(:gem_specification).and_return(Gem::Specification)
|
248
|
+
expect(@gem_env.gem_specification).to receive(:find_all_by_name).with(rspec_dep.name, rspec_dep.requirement).and_return(gems)
|
249
249
|
else
|
250
|
-
@gem_env.
|
251
|
-
@gem_env.gem_source_index.
|
250
|
+
allow(@gem_env).to receive(:gem_source_index).and_return(Gem.source_index)
|
251
|
+
expect(@gem_env.gem_source_index).to receive(:search).with(rspec_dep).and_return(gems)
|
252
252
|
end
|
253
|
-
@gem_env.installed_versions(Gem::Dependency.new('rspec', nil)).
|
253
|
+
expect(@gem_env.installed_versions(Gem::Dependency.new('rspec', nil))).to eq(gems)
|
254
254
|
end
|
255
255
|
|
256
256
|
it "determines the installed versions of gems from the source index (part2: the unmockening)" do
|
257
|
-
$stdout.
|
257
|
+
allow($stdout).to receive(:write)
|
258
258
|
path_to_gem = if windows?
|
259
259
|
`where gem`.split[1]
|
260
260
|
else
|
@@ -264,7 +264,7 @@ describe Chef::Provider::Package::Rubygems::AlternateGemEnvironment do
|
|
264
264
|
gem_env = Chef::Provider::Package::Rubygems::AlternateGemEnvironment.new(path_to_gem)
|
265
265
|
expected = ['rspec-core', Gem::Version.new(RSpec::Core::Version::STRING)]
|
266
266
|
actual = gem_env.installed_versions(Gem::Dependency.new('rspec-core', nil)).map { |s| [s.name, s.version] }
|
267
|
-
actual.
|
267
|
+
expect(actual).to include(expected)
|
268
268
|
end
|
269
269
|
|
270
270
|
it "detects when the target gem environment is the jruby platform" do
|
@@ -295,18 +295,18 @@ RubyGems Environment:
|
|
295
295
|
- http://rubygems.org/
|
296
296
|
- http://gems.github.com/
|
297
297
|
JRUBY_GEM_ENV
|
298
|
-
@gem_env.
|
298
|
+
expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env').and_return(double('jruby_gem_env', :stdout => gem_env_out))
|
299
299
|
expected = ['ruby', Gem::Platform.new('universal-java-1.6')]
|
300
|
-
@gem_env.gem_platforms.
|
300
|
+
expect(@gem_env.gem_platforms).to eq(expected)
|
301
301
|
# it should also cache the result
|
302
|
-
Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem'].
|
302
|
+
expect(Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem']).to eq(expected)
|
303
303
|
end
|
304
304
|
|
305
305
|
it "uses the cached result for gem platforms if available" do
|
306
|
-
@gem_env.
|
306
|
+
expect(@gem_env).not_to receive(:shell_out!)
|
307
307
|
expected = ['ruby', Gem::Platform.new('universal-java-1.6')]
|
308
308
|
Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem']= expected
|
309
|
-
@gem_env.gem_platforms.
|
309
|
+
expect(@gem_env.gem_platforms).to eq(expected)
|
310
310
|
end
|
311
311
|
|
312
312
|
it "uses the current gem platforms when the target env is not jruby" do
|
@@ -337,9 +337,9 @@ RubyGems Environment:
|
|
337
337
|
- http://rubygems.org/
|
338
338
|
- http://gems.github.com/
|
339
339
|
RBX_GEM_ENV
|
340
|
-
@gem_env.
|
341
|
-
@gem_env.gem_platforms.
|
342
|
-
Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem'].
|
340
|
+
expect(@gem_env).to receive(:shell_out!).with('/usr/weird/bin/gem env').and_return(double('rbx_gem_env', :stdout => gem_env_out))
|
341
|
+
expect(@gem_env.gem_platforms).to eq(Gem.platforms)
|
342
|
+
expect(Chef::Provider::Package::Rubygems::AlternateGemEnvironment.platform_cache['/usr/weird/bin/gem']).to eq(Gem.platforms)
|
343
343
|
end
|
344
344
|
|
345
345
|
it "yields to a block while masquerading as a different gems platform" do
|
@@ -352,288 +352,302 @@ RBX_GEM_ENV
|
|
352
352
|
end
|
353
353
|
rescue RuntimeError
|
354
354
|
end
|
355
|
-
platforms_in_block.
|
356
|
-
Gem.platforms.
|
355
|
+
expect(platforms_in_block).to eq(['ruby', Gem::Platform.new('sparc64-java-1.7')])
|
356
|
+
expect(Gem.platforms).to eq(original_platforms)
|
357
357
|
end
|
358
358
|
|
359
359
|
end
|
360
360
|
|
361
361
|
describe Chef::Provider::Package::Rubygems do
|
362
|
+
let(:target_version) { nil }
|
363
|
+
|
362
364
|
before(:each) do
|
363
365
|
@node = Chef::Node.new
|
364
366
|
@new_resource = Chef::Resource::GemPackage.new("rspec-core")
|
365
|
-
@spec_version = @new_resource.version
|
367
|
+
@spec_version = @new_resource.version(target_version)
|
366
368
|
@events = Chef::EventDispatch::Dispatcher.new
|
367
369
|
@run_context = Chef::RunContext.new(@node, {}, @events)
|
368
370
|
|
369
371
|
# We choose detect omnibus via RbConfig::CONFIG['bindir'] in Chef::Provider::Package::Rubygems.new
|
370
|
-
RbConfig::CONFIG.
|
372
|
+
allow(RbConfig::CONFIG).to receive(:[]).with('bindir').and_return("/usr/bin/ruby")
|
371
373
|
@provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
|
372
374
|
end
|
373
375
|
|
374
|
-
|
375
|
-
|
376
|
-
Gem.instance_variable_get(:@configuration).should_not be_nil
|
377
|
-
end
|
376
|
+
describe "when new_resource version is nil" do
|
377
|
+
let(:target_version) { nil }
|
378
378
|
|
379
|
-
|
380
|
-
|
379
|
+
it "target_version_already_installed? should return false so that we can search for candidates" do
|
380
|
+
@provider.load_current_resource
|
381
|
+
expect(@provider.target_version_already_installed?).to be_false
|
382
|
+
end
|
381
383
|
end
|
382
384
|
|
383
|
-
|
384
|
-
|
385
|
-
provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
|
386
|
-
provider.gem_env.gem_binary_location.should == '/usr/weird/bin/gem'
|
387
|
-
end
|
385
|
+
describe "when new_resource version is current rspec version" do
|
386
|
+
let(:target_version) { RSpec::Core::Version::STRING }
|
388
387
|
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
ENV.stub(:[]).with('PATH').and_return("/usr/bin:/usr/sbin:/opt/chef/embedded/bin")
|
393
|
-
File.stub(:exists?).with('/usr/bin/gem').and_return(false)
|
394
|
-
File.stub(:exists?).with('/usr/sbin/gem').and_return(true)
|
395
|
-
File.stub(:exists?).with('/opt/chef/embedded/bin/gem').and_return(true) # should not get here
|
396
|
-
provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
|
397
|
-
provider.gem_env.gem_binary_location.should == '/usr/sbin/gem'
|
388
|
+
it "triggers a gem configuration load so a later one will not stomp its config values" do
|
389
|
+
# ugly, is there a better way?
|
390
|
+
expect(Gem.instance_variable_get(:@configuration)).not_to be_nil
|
398
391
|
end
|
399
|
-
end
|
400
392
|
|
401
|
-
|
402
|
-
|
403
|
-
RbConfig::CONFIG.stub(:[]).with('bindir').and_return("d:/opscode/chef/embedded/bin")
|
404
|
-
ENV.stub(:[]).with('PATH').and_return('C:\windows\system32;C:\windows;C:\Ruby186\bin;d:\opscode\chef\embedded\bin')
|
405
|
-
File.stub(:exists?).with('C:\\windows\\system32\\gem').and_return(false)
|
406
|
-
File.stub(:exists?).with('C:\\windows\\gem').and_return(false)
|
407
|
-
File.stub(:exists?).with('C:\\Ruby186\\bin\\gem').and_return(true)
|
408
|
-
File.stub(:exists?).with('d:\\opscode\\chef\\bin\\gem').and_return(false) # should not get here
|
409
|
-
File.stub(:exists?).with('d:\\opscode\\chef\\embedded\\bin\\gem').and_return(false) # should not get here
|
410
|
-
provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
|
411
|
-
provider.gem_env.gem_binary_location.should == 'C:\Ruby186\bin\gem'
|
393
|
+
it "uses the CurrentGemEnvironment implementation when no gem_binary_path is provided" do
|
394
|
+
expect(@provider.gem_env).to be_a_kind_of(Chef::Provider::Package::Rubygems::CurrentGemEnvironment)
|
412
395
|
end
|
413
|
-
end
|
414
396
|
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
it "converts the new resource into a gem dependency" do
|
422
|
-
@provider.gem_dependency.should == Gem::Dependency.new('rspec-core', @spec_version)
|
423
|
-
@new_resource.version('~> 1.2.0')
|
424
|
-
@provider.gem_dependency.should == Gem::Dependency.new('rspec-core', '~> 1.2.0')
|
425
|
-
end
|
397
|
+
it "uses the AlternateGemEnvironment implementation when a gem_binary_path is provided" do
|
398
|
+
@new_resource.gem_binary('/usr/weird/bin/gem')
|
399
|
+
provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
|
400
|
+
expect(provider.gem_env.gem_binary_location).to eq('/usr/weird/bin/gem')
|
401
|
+
end
|
426
402
|
|
427
|
-
|
403
|
+
it "searches for a gem binary when running on Omnibus on Unix" do
|
404
|
+
platform_mock :unix do
|
405
|
+
allow(RbConfig::CONFIG).to receive(:[]).with('bindir').and_return("/opt/chef/embedded/bin")
|
406
|
+
allow(ENV).to receive(:[]).with('PATH').and_return("/usr/bin:/usr/sbin:/opt/chef/embedded/bin")
|
407
|
+
allow(File).to receive(:exists?).with('/usr/bin/gem').and_return(false)
|
408
|
+
allow(File).to receive(:exists?).with('/usr/sbin/gem').and_return(true)
|
409
|
+
allow(File).to receive(:exists?).with('/opt/chef/embedded/bin/gem').and_return(true) # should not get here
|
410
|
+
provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
|
411
|
+
expect(provider.gem_env.gem_binary_location).to eq('/usr/sbin/gem')
|
412
|
+
end
|
413
|
+
end
|
428
414
|
|
429
|
-
it "
|
430
|
-
|
431
|
-
|
415
|
+
it "searches for a gem binary when running on Omnibus on Windows" do
|
416
|
+
platform_mock :windows do
|
417
|
+
allow(RbConfig::CONFIG).to receive(:[]).with('bindir').and_return("d:/opscode/chef/embedded/bin")
|
418
|
+
allow(ENV).to receive(:[]).with('PATH').and_return('C:\windows\system32;C:\windows;C:\Ruby186\bin;d:\opscode\chef\embedded\bin')
|
419
|
+
allow(File).to receive(:exists?).with('C:\\windows\\system32\\gem').and_return(false)
|
420
|
+
allow(File).to receive(:exists?).with('C:\\windows\\gem').and_return(false)
|
421
|
+
allow(File).to receive(:exists?).with('C:\\Ruby186\\bin\\gem').and_return(true)
|
422
|
+
allow(File).to receive(:exists?).with('d:\\opscode\\chef\\bin\\gem').and_return(false) # should not get here
|
423
|
+
allow(File).to receive(:exists?).with('d:\\opscode\\chef\\embedded\\bin\\gem').and_return(false) # should not get here
|
424
|
+
provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
|
425
|
+
expect(provider.gem_env.gem_binary_location).to eq('C:\Ruby186\bin\gem')
|
426
|
+
end
|
432
427
|
end
|
433
428
|
|
434
|
-
it "
|
435
|
-
@new_resource.
|
436
|
-
@
|
437
|
-
@
|
429
|
+
it "smites you when you try to use a hash of install options with an explicit gem binary" do
|
430
|
+
@new_resource.gem_binary('/foo/bar')
|
431
|
+
@new_resource.options(:fail => :burger)
|
432
|
+
expect {Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)}.to raise_error(ArgumentError)
|
438
433
|
end
|
439
434
|
|
440
|
-
it "
|
441
|
-
@
|
442
|
-
@
|
443
|
-
@provider.
|
435
|
+
it "converts the new resource into a gem dependency" do
|
436
|
+
expect(@provider.gem_dependency).to eq(Gem::Dependency.new('rspec-core', @spec_version))
|
437
|
+
@new_resource.version('~> 1.2.0')
|
438
|
+
expect(@provider.gem_dependency).to eq(Gem::Dependency.new('rspec-core', '~> 1.2.0'))
|
444
439
|
end
|
445
440
|
|
446
|
-
|
441
|
+
describe "when determining the currently installed version" do
|
447
442
|
|
448
|
-
|
443
|
+
it "sets the current version to the version specified by the new resource if that version is installed" do
|
444
|
+
@provider.load_current_resource
|
445
|
+
expect(@provider.current_resource.version).to eq(@spec_version)
|
446
|
+
end
|
449
447
|
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
448
|
+
it "sets the current version to the highest installed version if the requested version is not installed" do
|
449
|
+
@new_resource.version('9000.0.2')
|
450
|
+
@provider.load_current_resource
|
451
|
+
expect(@provider.current_resource.version).to eq(@spec_version)
|
452
|
+
end
|
454
453
|
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
and_return(version)
|
461
|
-
@provider.candidate_version.should == @spec_version
|
462
|
-
end
|
454
|
+
it "leaves the current version at nil if the package is not installed" do
|
455
|
+
@new_resource.package_name("no-such-gem-should-exist-with-this-name")
|
456
|
+
@provider.load_current_resource
|
457
|
+
expect(@provider.current_resource.version).to be_nil
|
458
|
+
end
|
463
459
|
|
464
|
-
it "parses the gem's specification if the requested source is a file" do
|
465
|
-
@new_resource.package_name('chef-integration-test')
|
466
|
-
@new_resource.version('>= 0')
|
467
|
-
@new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
468
|
-
@provider.candidate_version.should == '0.1.0'
|
469
460
|
end
|
470
461
|
|
471
|
-
|
472
|
-
|
473
|
-
describe "when installing a gem" do
|
474
|
-
before do
|
475
|
-
@current_resource = Chef::Resource::GemPackage.new('rspec-core')
|
476
|
-
@provider.current_resource = @current_resource
|
477
|
-
@gem_dep = Gem::Dependency.new('rspec-core', @spec_version)
|
478
|
-
@provider.stub(:load_current_resource)
|
479
|
-
end
|
462
|
+
describe "when determining the candidate version to install" do
|
480
463
|
|
481
|
-
|
482
|
-
|
483
|
-
@provider.
|
484
|
-
@provider.action_install.should be_true
|
464
|
+
it "does not query for available versions when the current version is the target version" do
|
465
|
+
@provider.current_resource = @new_resource.dup
|
466
|
+
expect(@provider.candidate_version).to be_nil
|
485
467
|
end
|
486
468
|
|
487
|
-
it "
|
488
|
-
@new_resource.source('http://
|
489
|
-
|
490
|
-
@provider.gem_env.
|
491
|
-
|
469
|
+
it "determines the candidate version by querying the remote gem servers" do
|
470
|
+
@new_resource.source('http://mygems.example.com')
|
471
|
+
version = Gem::Version.new(@spec_version)
|
472
|
+
expect(@provider.gem_env).to receive(:candidate_version_from_remote).
|
473
|
+
with(Gem::Dependency.new('rspec-core', @spec_version), "http://mygems.example.com").
|
474
|
+
and_return(version)
|
475
|
+
expect(@provider.candidate_version).to eq(@spec_version)
|
492
476
|
end
|
493
477
|
|
494
|
-
it "
|
478
|
+
it "parses the gem's specification if the requested source is a file" do
|
479
|
+
@new_resource.package_name('chef-integration-test')
|
480
|
+
@new_resource.version('>= 0')
|
495
481
|
@new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
496
|
-
@provider.
|
497
|
-
@provider.action_install.should be_true
|
482
|
+
expect(@provider.candidate_version).to eq('0.1.0')
|
498
483
|
end
|
499
484
|
|
500
|
-
|
501
|
-
|
502
|
-
|
485
|
+
end
|
486
|
+
|
487
|
+
describe "when installing a gem" do
|
488
|
+
before do
|
489
|
+
@current_resource = Chef::Resource::GemPackage.new('rspec-core')
|
503
490
|
@provider.current_resource = @current_resource
|
504
|
-
@
|
505
|
-
@provider.
|
506
|
-
@provider.action_install.should be_true
|
491
|
+
@gem_dep = Gem::Dependency.new('rspec-core', @spec_version)
|
492
|
+
allow(@provider).to receive(:load_current_resource)
|
507
493
|
end
|
508
494
|
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
@provider.action_install.should be_true
|
515
|
-
end
|
495
|
+
describe "in the current gem environment" do
|
496
|
+
it "installs the gem via the gems api when no explicit options are used" do
|
497
|
+
expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil)
|
498
|
+
expect(@provider.action_install).to be_true
|
499
|
+
end
|
516
500
|
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
501
|
+
it "installs the gem via the gems api when a remote source is provided" do
|
502
|
+
@new_resource.source('http://gems.example.org')
|
503
|
+
sources = ['http://gems.example.org']
|
504
|
+
expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => sources)
|
505
|
+
expect(@provider.action_install).to be_true
|
506
|
+
end
|
523
507
|
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
508
|
+
it "installs the gem from file via the gems api when no explicit options are used" do
|
509
|
+
@new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
510
|
+
expect(@provider.gem_env).to receive(:install).with(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
511
|
+
expect(@provider.action_install).to be_true
|
512
|
+
end
|
529
513
|
|
530
|
-
|
531
|
-
|
532
|
-
@
|
514
|
+
it "installs the gem from file via the gems api when the package is a path and the source is nil" do
|
515
|
+
@new_resource = Chef::Resource::GemPackage.new(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
516
|
+
@provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
|
517
|
+
@provider.current_resource = @current_resource
|
518
|
+
expect(@new_resource.source).to eq(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
519
|
+
expect(@provider.gem_env).to receive(:install).with(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
520
|
+
expect(@provider.action_install).to be_true
|
533
521
|
end
|
534
522
|
|
535
|
-
|
536
|
-
|
537
|
-
|
523
|
+
# this catches 'gem_package "foo"' when "./foo" is a file in the cwd, and instead of installing './foo' it fetches the remote gem
|
524
|
+
it "installs the gem via the gems api, when the package has no file separator characters in it, but a matching file exists in cwd" do
|
525
|
+
allow(::File).to receive(:exists?).and_return(true)
|
526
|
+
@new_resource.package_name('rspec-core')
|
527
|
+
expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil)
|
528
|
+
expect(@provider.action_install).to be_true
|
529
|
+
end
|
530
|
+
|
531
|
+
it "installs the gem by shelling out when options are provided as a String" do
|
532
|
+
@new_resource.options('-i /alt/install/location')
|
533
|
+
expected ="gem install rspec-core -q --no-rdoc --no-ri -v \"#{@spec_version}\" -i /alt/install/location"
|
534
|
+
expect(@provider).to receive(:shell_out!).with(expected, :env => nil)
|
535
|
+
expect(@provider.action_install).to be_true
|
538
536
|
end
|
539
|
-
end
|
540
|
-
describe "at version specified with comparison operator" do
|
541
|
-
it "skips install if current version satisifies requested version" do
|
542
|
-
@current_resource.stub(:version).and_return("2.3.3")
|
543
|
-
@new_resource.stub(:version).and_return(">=2.3.0")
|
544
537
|
|
545
|
-
|
546
|
-
@
|
538
|
+
it "installs the gem via the gems api when options are given as a Hash" do
|
539
|
+
@new_resource.options(:install_dir => '/alt/install/location')
|
540
|
+
expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil, :install_dir => '/alt/install/location')
|
541
|
+
expect(@provider.action_install).to be_true
|
547
542
|
end
|
548
543
|
|
549
|
-
|
550
|
-
|
551
|
-
|
544
|
+
describe "at a specific version" do
|
545
|
+
before do
|
546
|
+
@gem_dep = Gem::Dependency.new('rspec-core', @spec_version)
|
547
|
+
end
|
552
548
|
|
553
|
-
|
554
|
-
|
549
|
+
it "installs the gem via the gems api" do
|
550
|
+
expect(@provider.gem_env).to receive(:install).with(@gem_dep, :sources => nil)
|
551
|
+
expect(@provider.action_install).to be_true
|
552
|
+
end
|
553
|
+
end
|
554
|
+
describe "at version specified with comparison operator" do
|
555
|
+
it "skips install if current version satisifies requested version" do
|
556
|
+
allow(@current_resource).to receive(:version).and_return("2.3.3")
|
557
|
+
allow(@new_resource).to receive(:version).and_return(">=2.3.0")
|
558
|
+
|
559
|
+
expect(@provider.gem_env).not_to receive(:install)
|
560
|
+
@provider.action_install
|
561
|
+
end
|
562
|
+
|
563
|
+
it "allows user to specify gem version with fuzzy operator" do
|
564
|
+
allow(@current_resource).to receive(:version).and_return("2.3.3")
|
565
|
+
allow(@new_resource).to receive(:version).and_return("~>2.3.0")
|
566
|
+
|
567
|
+
expect(@provider.gem_env).not_to receive(:install)
|
568
|
+
@provider.action_install
|
569
|
+
end
|
555
570
|
end
|
556
571
|
end
|
557
|
-
end
|
558
572
|
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
573
|
+
describe "in an alternate gem environment" do
|
574
|
+
it "installs the gem by shelling out to gem install" do
|
575
|
+
@new_resource.gem_binary('/usr/weird/bin/gem')
|
576
|
+
expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem install rspec-core -q --no-rdoc --no-ri -v \"#{@spec_version}\"", :env=>nil)
|
577
|
+
expect(@provider.action_install).to be_true
|
578
|
+
end
|
565
579
|
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
580
|
+
it "installs the gem from file by shelling out to gem install" do
|
581
|
+
@new_resource.gem_binary('/usr/weird/bin/gem')
|
582
|
+
@new_resource.source(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
583
|
+
@new_resource.version('>= 0')
|
584
|
+
expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem install #{CHEF_SPEC_DATA}/gems/chef-integration-test-0.1.0.gem -q --no-rdoc --no-ri -v \">= 0\"", :env=>nil)
|
585
|
+
expect(@provider.action_install).to be_true
|
586
|
+
end
|
573
587
|
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
588
|
+
it "installs the gem from file by shelling out to gem install when the package is a path and the source is nil" do
|
589
|
+
@new_resource = Chef::Resource::GemPackage.new(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
590
|
+
@provider = Chef::Provider::Package::Rubygems.new(@new_resource, @run_context)
|
591
|
+
@provider.current_resource = @current_resource
|
592
|
+
@new_resource.gem_binary('/usr/weird/bin/gem')
|
593
|
+
@new_resource.version('>= 0')
|
594
|
+
expect(@new_resource.source).to eq(CHEF_SPEC_DATA + '/gems/chef-integration-test-0.1.0.gem')
|
595
|
+
expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem install #{CHEF_SPEC_DATA}/gems/chef-integration-test-0.1.0.gem -q --no-rdoc --no-ri -v \">= 0\"", :env=>nil)
|
596
|
+
expect(@provider.action_install).to be_true
|
597
|
+
end
|
583
598
|
end
|
584
|
-
end
|
585
|
-
|
586
|
-
end
|
587
599
|
|
588
|
-
describe "when uninstalling a gem" do
|
589
|
-
before do
|
590
|
-
@new_resource = Chef::Resource::GemPackage.new("rspec")
|
591
|
-
@current_resource = @new_resource.dup
|
592
|
-
@current_resource.version('1.2.3')
|
593
|
-
@provider.new_resource = @new_resource
|
594
|
-
@provider.current_resource = @current_resource
|
595
600
|
end
|
596
601
|
|
597
|
-
describe "
|
598
|
-
|
599
|
-
|
600
|
-
@
|
601
|
-
@
|
602
|
-
|
603
|
-
@provider.
|
604
|
-
@provider.action_remove
|
602
|
+
describe "when uninstalling a gem" do
|
603
|
+
before do
|
604
|
+
@new_resource = Chef::Resource::GemPackage.new("rspec")
|
605
|
+
@current_resource = @new_resource.dup
|
606
|
+
@current_resource.version('1.2.3')
|
607
|
+
@provider.new_resource = @new_resource
|
608
|
+
@provider.current_resource = @current_resource
|
605
609
|
end
|
606
610
|
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
611
|
+
describe "in the current gem environment" do
|
612
|
+
it "uninstalls via the api when no explicit options are used" do
|
613
|
+
# pre-reqs for action_remove to actually remove the package:
|
614
|
+
expect(@provider.new_resource.version).to be_nil
|
615
|
+
expect(@provider.current_resource.version).not_to be_nil
|
616
|
+
# the behavior we're testing:
|
617
|
+
expect(@provider.gem_env).to receive(:uninstall).with('rspec', nil)
|
618
|
+
@provider.action_remove
|
619
|
+
end
|
616
620
|
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
621
|
+
it "uninstalls via the api when options are given as a Hash" do
|
622
|
+
# pre-reqs for action_remove to actually remove the package:
|
623
|
+
expect(@provider.new_resource.version).to be_nil
|
624
|
+
expect(@provider.current_resource.version).not_to be_nil
|
625
|
+
# the behavior we're testing:
|
626
|
+
@new_resource.options(:install_dir => '/alt/install/location')
|
627
|
+
expect(@provider.gem_env).to receive(:uninstall).with('rspec', nil, :install_dir => '/alt/install/location')
|
628
|
+
@provider.action_remove
|
629
|
+
end
|
630
|
+
|
631
|
+
it "uninstalls via the gem command when options are given as a String" do
|
632
|
+
@new_resource.options('-i /alt/install/location')
|
633
|
+
expect(@provider).to receive(:shell_out!).with("gem uninstall rspec -q -x -I -a -i /alt/install/location", :env=>nil)
|
634
|
+
@provider.action_remove
|
635
|
+
end
|
622
636
|
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
637
|
+
it "uninstalls a specific version of a gem when a version is provided" do
|
638
|
+
@new_resource.version('1.2.3')
|
639
|
+
expect(@provider.gem_env).to receive(:uninstall).with('rspec', '1.2.3')
|
640
|
+
@provider.action_remove
|
641
|
+
end
|
627
642
|
end
|
628
|
-
end
|
629
643
|
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
644
|
+
describe "in an alternate gem environment" do
|
645
|
+
it "uninstalls via the gem command" do
|
646
|
+
@new_resource.gem_binary('/usr/weird/bin/gem')
|
647
|
+
expect(@provider).to receive(:shell_out!).with("/usr/weird/bin/gem uninstall rspec -q -x -I -a", :env=>nil)
|
648
|
+
@provider.action_remove
|
649
|
+
end
|
635
650
|
end
|
636
651
|
end
|
637
652
|
end
|
638
653
|
end
|
639
|
-
|