chef 10.28.2-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.
- checksums.yaml +7 -0
- data/LICENSE +201 -0
- data/README.rdoc +177 -0
- data/Rakefile +128 -0
- data/bin/chef-client +26 -0
- data/bin/chef-solo +25 -0
- data/bin/knife +26 -0
- data/bin/shef +34 -0
- data/distro/README +2 -0
- data/distro/arch/etc/conf.d/chef-client.conf +5 -0
- data/distro/arch/etc/conf.d/chef-expander.conf +8 -0
- data/distro/arch/etc/conf.d/chef-server-webui.conf +10 -0
- data/distro/arch/etc/conf.d/chef-server.conf +10 -0
- data/distro/arch/etc/conf.d/chef-solr.conf +8 -0
- data/distro/arch/etc/rc.d/chef-client +90 -0
- data/distro/arch/etc/rc.d/chef-expander +78 -0
- data/distro/arch/etc/rc.d/chef-server +78 -0
- data/distro/arch/etc/rc.d/chef-server-webui +78 -0
- data/distro/arch/etc/rc.d/chef-solr +78 -0
- data/distro/common/html/chef-client.8.html +145 -0
- data/distro/common/html/chef-expander.8.html +164 -0
- data/distro/common/html/chef-expanderctl.8.html +146 -0
- data/distro/common/html/chef-server-webui.8.html +185 -0
- data/distro/common/html/chef-server.8.html +182 -0
- data/distro/common/html/chef-solo.8.html +185 -0
- data/distro/common/html/chef-solr.8.html +165 -0
- data/distro/common/html/knife-bootstrap.1.html +241 -0
- data/distro/common/html/knife-client.1.html +219 -0
- data/distro/common/html/knife-configure.1.html +170 -0
- data/distro/common/html/knife-cookbook-site.1.html +241 -0
- data/distro/common/html/knife-cookbook.1.html +381 -0
- data/distro/common/html/knife-data-bag.1.html +235 -0
- data/distro/common/html/knife-environment.1.html +265 -0
- data/distro/common/html/knife-exec.1.html +134 -0
- data/distro/common/html/knife-index.1.html +125 -0
- data/distro/common/html/knife-node.1.html +250 -0
- data/distro/common/html/knife-recipe.1.html +92 -0
- data/distro/common/html/knife-role.1.html +200 -0
- data/distro/common/html/knife-search.1.html +288 -0
- data/distro/common/html/knife-ssh.1.html +156 -0
- data/distro/common/html/knife-status.1.html +128 -0
- data/distro/common/html/knife-tag.1.html +137 -0
- data/distro/common/html/knife.1.html +320 -0
- data/distro/common/html/shef.1.html +283 -0
- data/distro/common/man/man1/knife-bootstrap.1 +201 -0
- data/distro/common/man/man1/knife-client.1 +99 -0
- data/distro/common/man/man1/knife-configure.1 +88 -0
- data/distro/common/man/man1/knife-cookbook-site.1 +145 -0
- data/distro/common/man/man1/knife-cookbook.1 +332 -0
- data/distro/common/man/man1/knife-data-bag.1 +123 -0
- data/distro/common/man/man1/knife-environment.1 +168 -0
- data/distro/common/man/man1/knife-exec.1 +46 -0
- data/distro/common/man/man1/knife-index.1 +29 -0
- data/distro/common/man/man1/knife-node.1 +134 -0
- data/distro/common/man/man1/knife-role.1 +88 -0
- data/distro/common/man/man1/knife-search.1 +280 -0
- data/distro/common/man/man1/knife-ssh.1 +79 -0
- data/distro/common/man/man1/knife-status.1 +29 -0
- data/distro/common/man/man1/knife-tag.1 +43 -0
- data/distro/common/man/man1/knife.1 +288 -0
- data/distro/common/man/man1/shef.1 +256 -0
- data/distro/common/man/man8/chef-client.8 +104 -0
- data/distro/common/man/man8/chef-expander.8 +97 -0
- data/distro/common/man/man8/chef-expanderctl.8 +62 -0
- data/distro/common/man/man8/chef-server-webui.8 +155 -0
- data/distro/common/man/man8/chef-server.8 +147 -0
- data/distro/common/man/man8/chef-solo.8 +126 -0
- data/distro/common/man/man8/chef-solr.8 +122 -0
- data/distro/common/markdown/README +3 -0
- data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -0
- data/distro/common/markdown/man1/knife-client.mkd +103 -0
- data/distro/common/markdown/man1/knife-configure.mkd +70 -0
- data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -0
- data/distro/common/markdown/man1/knife-cookbook.mkd +263 -0
- data/distro/common/markdown/man1/knife-data-bag.mkd +121 -0
- data/distro/common/markdown/man1/knife-environment.mkd +151 -0
- data/distro/common/markdown/man1/knife-exec.mkd +37 -0
- data/distro/common/markdown/man1/knife-index.mkd +30 -0
- data/distro/common/markdown/man1/knife-node.mkd +130 -0
- data/distro/common/markdown/man1/knife-role.mkd +85 -0
- data/distro/common/markdown/man1/knife-search.mkd +180 -0
- data/distro/common/markdown/man1/knife-ssh.mkd +69 -0
- data/distro/common/markdown/man1/knife-status.mkd +36 -0
- data/distro/common/markdown/man1/knife-tag.mkd +39 -0
- data/distro/common/markdown/man1/knife.mkd +218 -0
- data/distro/common/markdown/man1/shef.mkd +189 -0
- data/distro/common/markdown/man8/chef-client.mkd +74 -0
- data/distro/common/markdown/man8/chef-expander.mkd +82 -0
- data/distro/common/markdown/man8/chef-expanderctl.mkd +58 -0
- data/distro/common/markdown/man8/chef-server-webui.mkd +121 -0
- data/distro/common/markdown/man8/chef-server.mkd +121 -0
- data/distro/common/markdown/man8/chef-solo.mkd +107 -0
- data/distro/common/markdown/man8/chef-solr.mkd +89 -0
- data/distro/debian/etc/default/chef-client +5 -0
- data/distro/debian/etc/default/chef-expander +8 -0
- data/distro/debian/etc/default/chef-server +9 -0
- data/distro/debian/etc/default/chef-server-webui +9 -0
- data/distro/debian/etc/default/chef-solr +8 -0
- data/distro/debian/etc/init.d/chef-client +210 -0
- data/distro/debian/etc/init.d/chef-expander +176 -0
- data/distro/debian/etc/init.d/chef-server +122 -0
- data/distro/debian/etc/init.d/chef-server-webui +123 -0
- data/distro/debian/etc/init.d/chef-solr +176 -0
- data/distro/debian/etc/init/chef-client.conf +17 -0
- data/distro/debian/etc/init/chef-expander.conf +17 -0
- data/distro/debian/etc/init/chef-server-webui.conf +17 -0
- data/distro/debian/etc/init/chef-server.conf +17 -0
- data/distro/debian/etc/init/chef-solr.conf +17 -0
- data/distro/redhat/etc/init.d/chef-client +121 -0
- data/distro/redhat/etc/init.d/chef-expander +104 -0
- data/distro/redhat/etc/init.d/chef-server +112 -0
- data/distro/redhat/etc/init.d/chef-server-webui +112 -0
- data/distro/redhat/etc/init.d/chef-solr +104 -0
- data/distro/redhat/etc/logrotate.d/chef-client +8 -0
- data/distro/redhat/etc/logrotate.d/chef-expander +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
- data/distro/redhat/etc/sysconfig/chef-client +15 -0
- data/distro/redhat/etc/sysconfig/chef-expander +7 -0
- data/distro/redhat/etc/sysconfig/chef-server +14 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
- data/distro/redhat/etc/sysconfig/chef-solr +8 -0
- data/distro/windows/service_manager.rb +164 -0
- data/lib/chef.rb +41 -0
- data/lib/chef/api_client.rb +293 -0
- data/lib/chef/application.rb +168 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +322 -0
- data/lib/chef/application/knife.rb +183 -0
- data/lib/chef/application/solo.rb +248 -0
- data/lib/chef/application/windows_service.rb +227 -0
- data/lib/chef/applications.rb +4 -0
- data/lib/chef/certificate.rb +161 -0
- data/lib/chef/checksum.rb +167 -0
- data/lib/chef/checksum/storage.rb +18 -0
- data/lib/chef/checksum/storage/filesystem.rb +56 -0
- data/lib/chef/checksum_cache.rb +190 -0
- data/lib/chef/client.rb +499 -0
- data/lib/chef/config.rb +330 -0
- data/lib/chef/cookbook/chefignore.rb +66 -0
- data/lib/chef/cookbook/cookbook_collection.rb +45 -0
- data/lib/chef/cookbook/cookbook_version_loader.rb +171 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
- data/lib/chef/cookbook/file_vendor.rb +48 -0
- data/lib/chef/cookbook/metadata.rb +629 -0
- data/lib/chef/cookbook/remote_file_vendor.rb +84 -0
- data/lib/chef/cookbook/synchronizer.rb +218 -0
- data/lib/chef/cookbook/syntax_check.rb +136 -0
- data/lib/chef/cookbook_loader.rb +121 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +173 -0
- data/lib/chef/cookbook_version.rb +1081 -0
- data/lib/chef/cookbook_version_selector.rb +168 -0
- data/lib/chef/couchdb.rb +246 -0
- data/lib/chef/daemon.rb +187 -0
- data/lib/chef/data_bag.rb +239 -0
- data/lib/chef/data_bag_item.rb +277 -0
- data/lib/chef/encrypted_data_bag_item.rb +268 -0
- data/lib/chef/environment.rb +458 -0
- data/lib/chef/event_dispatch/base.rb +311 -0
- data/lib/chef/event_dispatch/dispatcher.rb +42 -0
- data/lib/chef/exceptions.rb +192 -0
- data/lib/chef/file_access_control.rb +75 -0
- data/lib/chef/file_access_control/unix.rb +216 -0
- data/lib/chef/file_access_control/windows.rb +310 -0
- data/lib/chef/file_cache.rb +220 -0
- data/lib/chef/formatters/base.rb +247 -0
- data/lib/chef/formatters/doc.rb +236 -0
- data/lib/chef/formatters/error_descriptor.rb +66 -0
- data/lib/chef/formatters/error_inspectors.rb +19 -0
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +111 -0
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +106 -0
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +146 -0
- data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +80 -0
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +125 -0
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +137 -0
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +109 -0
- data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +118 -0
- data/lib/chef/formatters/error_mapper.rb +85 -0
- data/lib/chef/formatters/minimal.rb +235 -0
- data/lib/chef/handler.rb +235 -0
- data/lib/chef/handler/error_report.rb +33 -0
- data/lib/chef/handler/json_file.rb +64 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/index_queue/amqp_client.rb +116 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +109 -0
- data/lib/chef/json_compat.rb +149 -0
- data/lib/chef/knife.rb +537 -0
- data/lib/chef/knife/bootstrap.rb +233 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +62 -0
- data/lib/chef/knife/bootstrap/centos5-gems.erb +62 -0
- data/lib/chef/knife/bootstrap/chef-full.erb +60 -0
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +44 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +53 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +48 -0
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +46 -0
- data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +60 -0
- data/lib/chef/knife/client_bulk_delete.rb +65 -0
- data/lib/chef/knife/client_create.rb +80 -0
- data/lib/chef/knife/client_delete.rb +46 -0
- data/lib/chef/knife/client_edit.rb +45 -0
- data/lib/chef/knife/client_list.rb +42 -0
- data/lib/chef/knife/client_reregister.rb +59 -0
- data/lib/chef/knife/client_show.rb +52 -0
- data/lib/chef/knife/configure.rb +168 -0
- data/lib/chef/knife/configure_client.rb +50 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +72 -0
- data/lib/chef/knife/cookbook_create.rb +447 -0
- data/lib/chef/knife/cookbook_delete.rb +151 -0
- data/lib/chef/knife/cookbook_download.rb +137 -0
- data/lib/chef/knife/cookbook_list.rb +47 -0
- data/lib/chef/knife/cookbook_metadata.rb +107 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
- data/lib/chef/knife/cookbook_show.rb +102 -0
- data/lib/chef/knife/cookbook_site_download.rb +109 -0
- data/lib/chef/knife/cookbook_site_install.rb +164 -0
- data/lib/chef/knife/cookbook_site_list.rb +62 -0
- data/lib/chef/knife/cookbook_site_search.rb +51 -0
- data/lib/chef/knife/cookbook_site_share.rb +114 -0
- data/lib/chef/knife/cookbook_site_show.rb +60 -0
- data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
- data/lib/chef/knife/cookbook_site_vendor.rb +46 -0
- data/lib/chef/knife/cookbook_test.rb +93 -0
- data/lib/chef/knife/cookbook_upload.rb +290 -0
- data/lib/chef/knife/core/bootstrap_context.rb +106 -0
- data/lib/chef/knife/core/cookbook_scm_repo.rb +160 -0
- data/lib/chef/knife/core/generic_presenter.rb +191 -0
- data/lib/chef/knife/core/node_editor.rb +130 -0
- data/lib/chef/knife/core/node_presenter.rb +137 -0
- data/lib/chef/knife/core/object_loader.rb +112 -0
- data/lib/chef/knife/core/subcommand_loader.rb +112 -0
- data/lib/chef/knife/core/text_formatter.rb +100 -0
- data/lib/chef/knife/core/ui.rb +217 -0
- data/lib/chef/knife/data_bag_create.rb +93 -0
- data/lib/chef/knife/data_bag_delete.rb +51 -0
- data/lib/chef/knife/data_bag_edit.rb +94 -0
- data/lib/chef/knife/data_bag_from_file.rb +136 -0
- data/lib/chef/knife/data_bag_list.rb +46 -0
- data/lib/chef/knife/data_bag_show.rb +81 -0
- data/lib/chef/knife/environment_create.rb +53 -0
- data/lib/chef/knife/environment_delete.rb +45 -0
- data/lib/chef/knife/environment_edit.rb +45 -0
- data/lib/chef/knife/environment_from_file.rb +83 -0
- data/lib/chef/knife/environment_list.rb +42 -0
- data/lib/chef/knife/environment_show.rb +46 -0
- data/lib/chef/knife/exec.rb +86 -0
- data/lib/chef/knife/help.rb +103 -0
- data/lib/chef/knife/help_topics.rb +4 -0
- data/lib/chef/knife/index_rebuild.rb +50 -0
- data/lib/chef/knife/node_bulk_delete.rb +80 -0
- data/lib/chef/knife/node_create.rb +50 -0
- data/lib/chef/knife/node_delete.rb +47 -0
- data/lib/chef/knife/node_edit.rb +72 -0
- data/lib/chef/knife/node_from_file.rb +50 -0
- data/lib/chef/knife/node_list.rb +46 -0
- data/lib/chef/knife/node_run_list_add.rb +75 -0
- data/lib/chef/knife/node_run_list_remove.rb +48 -0
- data/lib/chef/knife/node_show.rb +73 -0
- data/lib/chef/knife/recipe_list.rb +32 -0
- data/lib/chef/knife/role_bulk_delete.rb +70 -0
- data/lib/chef/knife/role_create.rb +55 -0
- data/lib/chef/knife/role_delete.rb +47 -0
- data/lib/chef/knife/role_edit.rb +48 -0
- data/lib/chef/knife/role_from_file.rb +56 -0
- data/lib/chef/knife/role_list.rb +43 -0
- data/lib/chef/knife/role_show.rb +54 -0
- data/lib/chef/knife/search.rb +141 -0
- data/lib/chef/knife/ssh.rb +459 -0
- data/lib/chef/knife/status.rb +119 -0
- data/lib/chef/knife/tag_create.rb +52 -0
- data/lib/chef/knife/tag_delete.rb +60 -0
- data/lib/chef/knife/tag_list.rb +47 -0
- data/lib/chef/log.rb +39 -0
- data/lib/chef/mash.rb +225 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command.rb +164 -0
- data/lib/chef/mixin/command/unix.rb +220 -0
- data/lib/chef/mixin/command/windows.rb +76 -0
- data/lib/chef/mixin/convert_to_class_name.rb +65 -0
- data/lib/chef/mixin/create_path.rb +57 -0
- data/lib/chef/mixin/deep_merge.rb +247 -0
- data/lib/chef/mixin/deprecation.rb +65 -0
- data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -0
- data/lib/chef/mixin/file_class.rb +46 -0
- data/lib/chef/mixin/from_file.rb +50 -0
- data/lib/chef/mixin/get_source_from_package.rb +42 -0
- data/lib/chef/mixin/language.rb +249 -0
- data/lib/chef/mixin/language_include_attribute.rb +61 -0
- data/lib/chef/mixin/language_include_recipe.rb +58 -0
- data/lib/chef/mixin/params_validate.rb +238 -0
- data/lib/chef/mixin/path_sanity.rb +67 -0
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +86 -0
- data/lib/chef/mixin/securable.rb +180 -0
- data/lib/chef/mixin/shell_out.rb +69 -0
- data/lib/chef/mixin/template.rb +100 -0
- data/lib/chef/mixin/why_run.rb +332 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +18 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/fileutils.rb +65 -0
- data/lib/chef/monkey_patches/moneta.rb +50 -0
- data/lib/chef/monkey_patches/net_http.rb +22 -0
- data/lib/chef/monkey_patches/numeric.rb +15 -0
- data/lib/chef/monkey_patches/object.rb +9 -0
- data/lib/chef/monkey_patches/regexp.rb +34 -0
- data/lib/chef/monkey_patches/string.rb +49 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/nil_argument.rb +3 -0
- data/lib/chef/node.rb +682 -0
- data/lib/chef/node/attribute.rb +504 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +520 -0
- data/lib/chef/provider.rb +223 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +105 -0
- data/lib/chef/provider/cron.rb +214 -0
- data/lib/chef/provider/cron/solaris.rb +56 -0
- data/lib/chef/provider/deploy.rb +474 -0
- data/lib/chef/provider/deploy/revision.rb +80 -0
- data/lib/chef/provider/deploy/timestamped.rb +32 -0
- data/lib/chef/provider/directory.rb +128 -0
- data/lib/chef/provider/env.rb +152 -0
- data/lib/chef/provider/env/windows.rb +75 -0
- data/lib/chef/provider/erl_call.rb +106 -0
- data/lib/chef/provider/execute.rb +68 -0
- data/lib/chef/provider/file.rb +355 -0
- data/lib/chef/provider/git.rb +260 -0
- data/lib/chef/provider/group.rb +159 -0
- data/lib/chef/provider/group/aix.rb +70 -0
- data/lib/chef/provider/group/dscl.rb +129 -0
- data/lib/chef/provider/group/gpasswd.rb +65 -0
- data/lib/chef/provider/group/groupadd.rb +96 -0
- data/lib/chef/provider/group/groupmod.rb +120 -0
- data/lib/chef/provider/group/pw.rb +93 -0
- data/lib/chef/provider/group/suse.rb +60 -0
- data/lib/chef/provider/group/usermod.rb +68 -0
- data/lib/chef/provider/group/windows.rb +79 -0
- data/lib/chef/provider/http_request.rb +136 -0
- data/lib/chef/provider/ifconfig.rb +214 -0
- data/lib/chef/provider/link.rb +130 -0
- data/lib/chef/provider/log.rb +54 -0
- data/lib/chef/provider/mdadm.rb +92 -0
- data/lib/chef/provider/mount.rb +128 -0
- data/lib/chef/provider/mount/mount.rb +252 -0
- data/lib/chef/provider/mount/windows.rb +81 -0
- data/lib/chef/provider/ohai.rb +47 -0
- data/lib/chef/provider/package.rb +229 -0
- data/lib/chef/provider/package/apt.rb +147 -0
- data/lib/chef/provider/package/dpkg.rb +128 -0
- data/lib/chef/provider/package/easy_install.rb +136 -0
- data/lib/chef/provider/package/freebsd.rb +149 -0
- data/lib/chef/provider/package/ips.rb +101 -0
- data/lib/chef/provider/package/macports.rb +105 -0
- data/lib/chef/provider/package/pacman.rb +111 -0
- data/lib/chef/provider/package/portage.rb +143 -0
- data/lib/chef/provider/package/rpm.rb +121 -0
- data/lib/chef/provider/package/rubygems.rb +580 -0
- data/lib/chef/provider/package/smartos.rb +84 -0
- data/lib/chef/provider/package/solaris.rb +139 -0
- data/lib/chef/provider/package/yum-dump.py +307 -0
- data/lib/chef/provider/package/yum.rb +1261 -0
- data/lib/chef/provider/package/zypper.rb +144 -0
- data/lib/chef/provider/remote_directory.rb +178 -0
- data/lib/chef/provider/remote_file.rb +126 -0
- data/lib/chef/provider/resource_update.rb +55 -0
- data/lib/chef/provider/route.rb +223 -0
- data/lib/chef/provider/ruby_block.rb +39 -0
- data/lib/chef/provider/script.rb +57 -0
- data/lib/chef/provider/service.rb +158 -0
- data/lib/chef/provider/service/arch.rb +113 -0
- data/lib/chef/provider/service/debian.rb +152 -0
- data/lib/chef/provider/service/freebsd.rb +175 -0
- data/lib/chef/provider/service/gentoo.rb +67 -0
- data/lib/chef/provider/service/init.rb +87 -0
- data/lib/chef/provider/service/insserv.rb +52 -0
- data/lib/chef/provider/service/invokercd.rb +35 -0
- data/lib/chef/provider/service/macosx.rb +144 -0
- data/lib/chef/provider/service/redhat.rb +77 -0
- data/lib/chef/provider/service/simple.rb +172 -0
- data/lib/chef/provider/service/solaris.rb +86 -0
- data/lib/chef/provider/service/systemd.rb +115 -0
- data/lib/chef/provider/service/upstart.rb +232 -0
- data/lib/chef/provider/service/windows.rb +163 -0
- data/lib/chef/provider/subversion.rb +214 -0
- data/lib/chef/provider/template.rb +117 -0
- data/lib/chef/provider/user.rb +207 -0
- data/lib/chef/provider/user/dscl.rb +280 -0
- data/lib/chef/provider/user/pw.rb +113 -0
- data/lib/chef/provider/user/solaris.rb +90 -0
- data/lib/chef/provider/user/useradd.rb +153 -0
- data/lib/chef/provider/user/windows.rb +124 -0
- data/lib/chef/providers.rb +101 -0
- data/lib/chef/recipe.rb +129 -0
- data/lib/chef/reserved_names.rb +9 -0
- data/lib/chef/resource.rb +912 -0
- data/lib/chef/resource/apt_package.rb +43 -0
- data/lib/chef/resource/bash.rb +33 -0
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/chef_gem.rb +53 -0
- data/lib/chef/resource/conditional.rb +101 -0
- data/lib/chef/resource/cookbook_file.rb +52 -0
- data/lib/chef/resource/cron.rb +202 -0
- data/lib/chef/resource/csh.rb +33 -0
- data/lib/chef/resource/deploy.rb +403 -0
- data/lib/chef/resource/deploy_revision.rb +40 -0
- data/lib/chef/resource/directory.rb +65 -0
- data/lib/chef/resource/dpkg_package.rb +34 -0
- data/lib/chef/resource/easy_install_package.rb +57 -0
- data/lib/chef/resource/env.rb +63 -0
- data/lib/chef/resource/erl_call.rb +86 -0
- data/lib/chef/resource/execute.rb +132 -0
- data/lib/chef/resource/file.rb +96 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/gem_package.rb +53 -0
- data/lib/chef/resource/git.rb +46 -0
- data/lib/chef/resource/group.rb +83 -0
- data/lib/chef/resource/http_request.rb +64 -0
- data/lib/chef/resource/ifconfig.rb +149 -0
- data/lib/chef/resource/ips_package.rb +42 -0
- data/lib/chef/resource/link.rb +92 -0
- data/lib/chef/resource/log.rb +74 -0
- data/lib/chef/resource/macports_package.rb +29 -0
- data/lib/chef/resource/mdadm.rb +105 -0
- data/lib/chef/resource/mount.rb +139 -0
- data/lib/chef/resource/ohai.rb +54 -0
- data/lib/chef/resource/package.rb +84 -0
- data/lib/chef/resource/pacman_package.rb +33 -0
- data/lib/chef/resource/perl.rb +33 -0
- data/lib/chef/resource/portage_package.rb +33 -0
- data/lib/chef/resource/python.rb +33 -0
- data/lib/chef/resource/remote_directory.rb +125 -0
- data/lib/chef/resource/remote_file.rb +90 -0
- data/lib/chef/resource/route.rb +140 -0
- data/lib/chef/resource/rpm_package.rb +34 -0
- data/lib/chef/resource/ruby.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +51 -0
- data/lib/chef/resource/scm.rb +151 -0
- data/lib/chef/resource/script.rb +63 -0
- data/lib/chef/resource/service.rb +164 -0
- data/lib/chef/resource/smartos_package.rb +36 -0
- data/lib/chef/resource/solaris_package.rb +36 -0
- data/lib/chef/resource/subversion.rb +37 -0
- data/lib/chef/resource/template.rb +76 -0
- data/lib/chef/resource/timestamped_deploy.rb +31 -0
- data/lib/chef/resource/user.rb +134 -0
- data/lib/chef/resource/yum_package.rb +63 -0
- data/lib/chef/resource_collection.rb +217 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/resource_definition.rb +67 -0
- data/lib/chef/resource_definition_list.rb +38 -0
- data/lib/chef/resource_platform_map.rb +151 -0
- data/lib/chef/resource_reporter.rb +281 -0
- data/lib/chef/resources.rb +67 -0
- data/lib/chef/rest.rb +510 -0
- data/lib/chef/rest/auth_credentials.rb +73 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +229 -0
- data/lib/chef/role.rb +349 -0
- data/lib/chef/run_context.rb +236 -0
- data/lib/chef/run_list.rb +165 -0
- data/lib/chef/run_list/run_list_expansion.rb +206 -0
- data/lib/chef/run_list/run_list_item.rb +99 -0
- data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
- data/lib/chef/run_status.rb +124 -0
- data/lib/chef/runner.rb +95 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/scan_access_control.rb +135 -0
- data/lib/chef/search/query.rb +65 -0
- data/lib/chef/shef.rb +327 -0
- data/lib/chef/shef/ext.rb +591 -0
- data/lib/chef/shef/model_wrapper.rb +120 -0
- data/lib/chef/shef/shef_rest.rb +28 -0
- data/lib/chef/shef/shef_session.rb +296 -0
- data/lib/chef/shell_out.rb +6 -0
- data/lib/chef/solr_query.rb +187 -0
- data/lib/chef/solr_query/lucene.treetop +150 -0
- data/lib/chef/solr_query/lucene_nodes.rb +285 -0
- data/lib/chef/solr_query/query_transform.rb +65 -0
- data/lib/chef/solr_query/solr_http_request.rb +132 -0
- data/lib/chef/streaming_cookbook_uploader.rb +201 -0
- data/lib/chef/tasks/chef_repo.rake +334 -0
- data/lib/chef/util/file_edit.rb +132 -0
- data/lib/chef/util/windows.rb +56 -0
- data/lib/chef/util/windows/net_group.rb +101 -0
- data/lib/chef/util/windows/net_use.rb +121 -0
- data/lib/chef/util/windows/net_user.rb +198 -0
- data/lib/chef/util/windows/volume.rb +59 -0
- data/lib/chef/version.rb +23 -0
- data/lib/chef/version_class.rb +70 -0
- data/lib/chef/version_constraint.rb +116 -0
- data/lib/chef/webui_user.rb +231 -0
- data/lib/chef/win32/api.rb +364 -0
- data/lib/chef/win32/api/error.rb +921 -0
- data/lib/chef/win32/api/file.rb +535 -0
- data/lib/chef/win32/api/memory.rb +105 -0
- data/lib/chef/win32/api/process.rb +41 -0
- data/lib/chef/win32/api/psapi.rb +51 -0
- data/lib/chef/win32/api/security.rb +341 -0
- data/lib/chef/win32/api/system.rb +192 -0
- data/lib/chef/win32/api/unicode.rb +178 -0
- data/lib/chef/win32/error.rb +73 -0
- data/lib/chef/win32/file.rb +167 -0
- data/lib/chef/win32/file/info.rb +100 -0
- data/lib/chef/win32/handle.rb +55 -0
- data/lib/chef/win32/memory.rb +101 -0
- data/lib/chef/win32/process.rb +84 -0
- data/lib/chef/win32/security.rb +489 -0
- data/lib/chef/win32/security/ace.rb +125 -0
- data/lib/chef/win32/security/acl.rb +101 -0
- data/lib/chef/win32/security/securable_object.rb +109 -0
- data/lib/chef/win32/security/security_descriptor.rb +93 -0
- data/lib/chef/win32/security/sid.rb +199 -0
- data/lib/chef/win32/security/token.rb +64 -0
- data/lib/chef/win32/unicode.rb +43 -0
- data/lib/chef/win32/version.rb +119 -0
- data/spec/data/bad-config.rb +1 -0
- data/spec/data/big_json.json +2 -0
- data/spec/data/big_json_plus_one.json +2 -0
- data/spec/data/bootstrap/test-hints.erb +12 -0
- data/spec/data/bootstrap/test.erb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/README.rdoc +3 -0
- data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz +1 -0
- data/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/recipes/default.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb +1 -0
- data/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb +0 -0
- data/spec/data/checksum/random.txt +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0 +0 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -0
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -0
- data/spec/data/config.rb +6 -0
- data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -0
- data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -0
- data/spec/data/cookbooks/apache2/recipes/default.rb +3 -0
- data/spec/data/cookbooks/borken/recipes/default.rb +2 -0
- data/spec/data/cookbooks/borken/templates/default/borken.erb +2 -0
- data/spec/data/cookbooks/chefignore +8 -0
- data/spec/data/cookbooks/java/files/default/java.response +2 -0
- data/spec/data/cookbooks/openldap/attributes/default.rb +15 -0
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -0
- data/spec/data/cookbooks/openldap/definitions/client.rb +5 -0
- data/spec/data/cookbooks/openldap/definitions/server.rb +5 -0
- data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
- data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +3 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +3 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +3 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +3 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -0
- data/spec/data/cookbooks/openldap/recipes/default.rb +3 -0
- data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -0
- data/spec/data/cookbooks/openldap/recipes/one.rb +15 -0
- data/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -0
- data/spec/data/definitions/test.rb +5 -0
- data/spec/data/environment-config.rb +5 -0
- data/spec/data/fileedit/blank +0 -0
- data/spec/data/fileedit/hosts +4 -0
- data/spec/data/gems/chef-integration-test-0.1.0.gem +0 -0
- data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
- data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
- data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
- data/spec/data/kitchen/chefignore +6 -0
- data/spec/data/kitchen/openldap/attributes/default.rb +3 -0
- data/spec/data/kitchen/openldap/attributes/robinson.rb +3 -0
- data/spec/data/kitchen/openldap/definitions/client.rb +3 -0
- data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +3 -0
- data/spec/data/kitchen/openldap/recipes/gigantor.rb +3 -0
- data/spec/data/kitchen/openldap/recipes/ignoreme.rb +3 -0
- data/spec/data/kitchen/openldap/recipes/woot.rb +3 -0
- data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
- data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
- data/spec/data/knife_subcommand/test_explicit_category.rb +7 -0
- data/spec/data/knife_subcommand/test_name_mapping.rb +4 -0
- data/spec/data/knife_subcommand/test_yourself.rb +13 -0
- data/spec/data/lwrp/providers/buck_passer.rb +3 -0
- data/spec/data/lwrp/providers/buck_passer_2.rb +10 -0
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +16 -0
- data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -0
- data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -0
- data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -0
- data/spec/data/lwrp/resources/bar.rb +1 -0
- data/spec/data/lwrp/resources/foo.rb +3 -0
- data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -0
- data/spec/data/lwrp_const_scoping/resources/conflict.rb +0 -0
- data/spec/data/lwrp_override/providers/buck_passer.rb +10 -0
- data/spec/data/lwrp_override/resources/foo.rb +4 -0
- data/spec/data/metadata/quick_start/metadata.rb +19 -0
- data/spec/data/nodes/default.rb +15 -0
- data/spec/data/nodes/test.example.com.rb +17 -0
- data/spec/data/nodes/test.rb +15 -0
- data/spec/data/object_loader/environments/test.json +5 -0
- data/spec/data/object_loader/environments/test.rb +2 -0
- data/spec/data/object_loader/environments/test_json_class.json +6 -0
- data/spec/data/object_loader/nodes/test.json +5 -0
- data/spec/data/object_loader/nodes/test.rb +2 -0
- data/spec/data/object_loader/nodes/test_json_class.json +6 -0
- data/spec/data/object_loader/roles/test.json +5 -0
- data/spec/data/object_loader/roles/test.rb +2 -0
- data/spec/data/object_loader/roles/test_json_class.json +6 -0
- data/spec/data/old_home_dir/my-dot-emacs +0 -0
- data/spec/data/old_home_dir/my-dot-vim +0 -0
- data/spec/data/recipes/test.rb +7 -0
- data/spec/data/remote_directory_data/remote_dir_file.txt +1 -0
- data/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt +1 -0
- data/spec/data/remote_file/nyan_cat.png +0 -0
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -0
- data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -0
- data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -0
- data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -0
- data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -0
- data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -0
- data/spec/data/run_context/nodes/run_context.rb +5 -0
- data/spec/data/search_queries_to_transform.txt +98 -0
- data/spec/data/ssl/5e707473.0 +18 -0
- data/spec/data/ssl/chef-rspec.cert +27 -0
- data/spec/data/ssl/chef-rspec.key +27 -0
- data/spec/data/ssl/key.pem +15 -0
- data/spec/data/ssl/private_key.pem +27 -0
- data/spec/data/ssl/private_key_with_whitespace.pem +32 -0
- data/spec/data/templates/seattle.txt +1 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +160 -0
- data/spec/functional/knife/exec_spec.rb +60 -0
- data/spec/functional/knife/ssh_spec.rb +268 -0
- data/spec/functional/resource/cookbook_file_spec.rb +75 -0
- data/spec/functional/resource/deploy_revision_spec.rb +515 -0
- data/spec/functional/resource/directory_spec.rb +39 -0
- data/spec/functional/resource/file_spec.rb +69 -0
- data/spec/functional/resource/link_spec.rb +572 -0
- data/spec/functional/resource/remote_directory_spec.rb +114 -0
- data/spec/functional/resource/remote_file_spec.rb +65 -0
- data/spec/functional/resource/template_spec.rb +68 -0
- data/spec/functional/tiny_server_spec.rb +78 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec_helper.rb +82 -0
- data/spec/stress/win32/file_spec.rb +37 -0
- data/spec/stress/win32/memory_spec.rb +22 -0
- data/spec/stress/win32/security_spec.rb +69 -0
- data/spec/support/chef_helpers.rb +65 -0
- data/spec/support/lib/chef/provider/easy.rb +35 -0
- data/spec/support/lib/chef/provider/snakeoil.rb +40 -0
- data/spec/support/lib/chef/resource/cat.rb +41 -0
- data/spec/support/lib/chef/resource/one_two_three_four.rb +43 -0
- data/spec/support/lib/chef/resource/zen_master.rb +46 -0
- data/spec/support/matchers/leak.rb +96 -0
- data/spec/support/mock/constant.rb +52 -0
- data/spec/support/mock/platform.rb +18 -0
- data/spec/support/platform_helpers.rb +39 -0
- data/spec/support/platforms/prof/gc.rb +54 -0
- data/spec/support/platforms/prof/win32.rb +46 -0
- data/spec/support/shared/functional/directory_resource.rb +85 -0
- data/spec/support/shared/functional/file_resource.rb +202 -0
- data/spec/support/shared/functional/knife.rb +37 -0
- data/spec/support/shared/functional/securable_resource.rb +402 -0
- data/spec/support/shared/unit/api_error_inspector.rb +192 -0
- data/spec/tiny_server.rb +202 -0
- data/spec/unit/api_client_spec.rb +257 -0
- data/spec/unit/application/agent_spec.rb +0 -0
- data/spec/unit/application/client_spec.rb +171 -0
- data/spec/unit/application/knife_spec.rb +152 -0
- data/spec/unit/application/server_spec.rb +0 -0
- data/spec/unit/application/solo_spec.rb +167 -0
- data/spec/unit/application_spec.rb +239 -0
- data/spec/unit/certificate_spec.rb +76 -0
- data/spec/unit/checksum/storage/filesystem_spec.rb +69 -0
- data/spec/unit/checksum_cache_spec.rb +209 -0
- data/spec/unit/checksum_spec.rb +94 -0
- data/spec/unit/chef_spec.rb +25 -0
- data/spec/unit/client_spec.rb +290 -0
- data/spec/unit/config_spec.rb +223 -0
- data/spec/unit/cookbook/chefignore_spec.rb +39 -0
- data/spec/unit/cookbook/metadata_spec.rb +627 -0
- data/spec/unit/cookbook/synchronizer_spec.rb +306 -0
- data/spec/unit/cookbook/syntax_check_spec.rb +211 -0
- data/spec/unit/cookbook_loader_spec.rb +145 -0
- data/spec/unit/cookbook_manifest_spec.rb +554 -0
- data/spec/unit/cookbook_spec.rb +101 -0
- data/spec/unit/cookbook_version_spec.rb +406 -0
- data/spec/unit/couchdb_spec.rb +274 -0
- data/spec/unit/daemon_spec.rb +302 -0
- data/spec/unit/data_bag_item_spec.rb +280 -0
- data/spec/unit/data_bag_spec.rb +169 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +293 -0
- data/spec/unit/environment_spec.rb +492 -0
- data/spec/unit/exceptions_spec.rb +74 -0
- data/spec/unit/file_access_control_spec.rb +282 -0
- data/spec/unit/file_cache_spec.rb +114 -0
- data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +202 -0
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +93 -0
- data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -0
- data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +27 -0
- data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +27 -0
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +182 -0
- data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +93 -0
- data/spec/unit/handler/json_file_spec.rb +64 -0
- data/spec/unit/handler_spec.rb +216 -0
- data/spec/unit/index_queue_spec.rb +391 -0
- data/spec/unit/json_compat_spec.rb +61 -0
- data/spec/unit/knife/bootstrap_spec.rb +265 -0
- data/spec/unit/knife/client_bulk_delete_spec.rb +78 -0
- data/spec/unit/knife/client_create_spec.rb +74 -0
- data/spec/unit/knife/client_delete_spec.rb +40 -0
- data/spec/unit/knife/client_edit_spec.rb +40 -0
- data/spec/unit/knife/client_list_spec.rb +34 -0
- data/spec/unit/knife/client_reregister_spec.rb +62 -0
- data/spec/unit/knife/client_show_spec.rb +42 -0
- data/spec/unit/knife/config_file_selection_spec.rb +118 -0
- data/spec/unit/knife/configure_client_spec.rb +83 -0
- data/spec/unit/knife/configure_spec.rb +229 -0
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -0
- data/spec/unit/knife/cookbook_create_spec.rb +271 -0
- data/spec/unit/knife/cookbook_delete_spec.rb +239 -0
- data/spec/unit/knife/cookbook_download_spec.rb +217 -0
- data/spec/unit/knife/cookbook_list_spec.rb +88 -0
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -0
- data/spec/unit/knife/cookbook_metadata_spec.rb +172 -0
- data/spec/unit/knife/cookbook_show_spec.rb +223 -0
- data/spec/unit/knife/cookbook_site_download_spec.rb +151 -0
- data/spec/unit/knife/cookbook_site_install_spec.rb +148 -0
- data/spec/unit/knife/cookbook_site_share_spec.rb +146 -0
- data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -0
- data/spec/unit/knife/cookbook_test_spec.rb +83 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +148 -0
- data/spec/unit/knife/core/bootstrap_context_spec.rb +135 -0
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -0
- data/spec/unit/knife/core/object_loader_spec.rb +81 -0
- data/spec/unit/knife/core/subcommand_loader_spec.rb +54 -0
- data/spec/unit/knife/core/ui_spec.rb +160 -0
- data/spec/unit/knife/data_bag_create_spec.rb +101 -0
- data/spec/unit/knife/data_bag_edit_spec.rb +96 -0
- data/spec/unit/knife/data_bag_from_file_spec.rb +198 -0
- data/spec/unit/knife/data_bag_show_spec.rb +105 -0
- data/spec/unit/knife/environment_create_spec.rb +91 -0
- data/spec/unit/knife/environment_delete_spec.rb +71 -0
- data/spec/unit/knife/environment_edit_spec.rb +79 -0
- data/spec/unit/knife/environment_from_file_spec.rb +89 -0
- data/spec/unit/knife/environment_list_spec.rb +54 -0
- data/spec/unit/knife/environment_show_spec.rb +52 -0
- data/spec/unit/knife/index_rebuild_spec.rb +65 -0
- data/spec/unit/knife/knife_help.rb +92 -0
- data/spec/unit/knife/node_bulk_delete_spec.rb +97 -0
- data/spec/unit/knife/node_delete_spec.rb +68 -0
- data/spec/unit/knife/node_edit_spec.rb +88 -0
- data/spec/unit/knife/node_from_file_spec.rb +59 -0
- data/spec/unit/knife/node_list_spec.rb +63 -0
- data/spec/unit/knife/node_run_list_add_spec.rb +125 -0
- data/spec/unit/knife/node_run_list_remove_spec.rb +73 -0
- data/spec/unit/knife/node_show_spec.rb +48 -0
- data/spec/unit/knife/role_bulk_delete_spec.rb +80 -0
- data/spec/unit/knife/role_create_spec.rb +80 -0
- data/spec/unit/knife/role_delete_spec.rb +67 -0
- data/spec/unit/knife/role_edit_spec.rb +79 -0
- data/spec/unit/knife/role_from_file_spec.rb +69 -0
- data/spec/unit/knife/role_list_spec.rb +56 -0
- data/spec/unit/knife/ssh_spec.rb +293 -0
- data/spec/unit/knife/status_spec.rb +43 -0
- data/spec/unit/knife/tag_create_spec.rb +23 -0
- data/spec/unit/knife/tag_delete_spec.rb +25 -0
- data/spec/unit/knife/tag_list_spec.rb +23 -0
- data/spec/unit/knife_spec.rb +295 -0
- data/spec/unit/log_spec.rb +24 -0
- data/spec/unit/lwrp_spec.rb +256 -0
- data/spec/unit/mash_spec.rb +51 -0
- data/spec/unit/mixin/checksum_spec.rb +41 -0
- data/spec/unit/mixin/command_spec.rb +105 -0
- data/spec/unit/mixin/convert_to_class_name_spec.rb +50 -0
- data/spec/unit/mixin/deep_merge_spec.rb +786 -0
- data/spec/unit/mixin/deprecation_spec.rb +34 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +90 -0
- data/spec/unit/mixin/language_spec.rb +305 -0
- data/spec/unit/mixin/params_validate_spec.rb +405 -0
- data/spec/unit/mixin/path_sanity_spec.rb +80 -0
- data/spec/unit/mixin/securable_spec.rb +254 -0
- data/spec/unit/mixin/shell_out_spec.rb +109 -0
- data/spec/unit/mixin/template_spec.rb +104 -0
- data/spec/unit/mixin/xml_escape_spec.rb +54 -0
- data/spec/unit/monkey_patches/string_spec.rb +37 -0
- data/spec/unit/node/attribute_spec.rb +1033 -0
- data/spec/unit/node_spec.rb +744 -0
- data/spec/unit/openid_registration_spec.rb +153 -0
- data/spec/unit/platform_spec.rb +241 -0
- data/spec/unit/provider/breakpoint_spec.rb +54 -0
- data/spec/unit/provider/cookbook_file_spec.rb +218 -0
- data/spec/unit/provider/cron/solaris_spec.rb +121 -0
- data/spec/unit/provider/cron_spec.rb +812 -0
- data/spec/unit/provider/deploy/revision_spec.rb +103 -0
- data/spec/unit/provider/deploy/timestamped_spec.rb +40 -0
- data/spec/unit/provider/deploy_spec.rb +620 -0
- data/spec/unit/provider/directory_spec.rb +156 -0
- data/spec/unit/provider/env_spec.rb +232 -0
- data/spec/unit/provider/erl_call_spec.rb +86 -0
- data/spec/unit/provider/execute_spec.rb +63 -0
- data/spec/unit/provider/file_spec.rb +505 -0
- data/spec/unit/provider/git_spec.rb +342 -0
- data/spec/unit/provider/group/dscl_spec.rb +294 -0
- data/spec/unit/provider/group/gpasswd_spec.rb +108 -0
- data/spec/unit/provider/group/groupadd_spec.rb +161 -0
- data/spec/unit/provider/group/groupmod_spec.rb +134 -0
- data/spec/unit/provider/group/pw_spec.rb +140 -0
- data/spec/unit/provider/group/usermod_spec.rb +95 -0
- data/spec/unit/provider/group/windows_spec.rb +94 -0
- data/spec/unit/provider/group_spec.rb +259 -0
- data/spec/unit/provider/http_request_spec.rb +178 -0
- data/spec/unit/provider/ifconfig_spec.rb +213 -0
- data/spec/unit/provider/link_spec.rb +252 -0
- data/spec/unit/provider/log_spec.rb +81 -0
- data/spec/unit/provider/mdadm_spec.rb +128 -0
- data/spec/unit/provider/mount/mount_spec.rb +398 -0
- data/spec/unit/provider/mount/windows_spec.rb +134 -0
- data/spec/unit/provider/mount_spec.rb +160 -0
- data/spec/unit/provider/ohai_spec.rb +85 -0
- data/spec/unit/provider/package/apt_spec.rb +352 -0
- data/spec/unit/provider/package/dpkg_spec.rb +216 -0
- data/spec/unit/provider/package/easy_install_spec.rb +112 -0
- data/spec/unit/provider/package/freebsd_spec.rb +259 -0
- data/spec/unit/provider/package/ips_spec.rb +210 -0
- data/spec/unit/provider/package/macports_spec.rb +203 -0
- data/spec/unit/provider/package/pacman_spec.rb +206 -0
- data/spec/unit/provider/package/portage_spec.rb +320 -0
- data/spec/unit/provider/package/rpm_spec.rb +152 -0
- data/spec/unit/provider/package/rubygems_spec.rb +639 -0
- data/spec/unit/provider/package/smartos_spec.rb +83 -0
- data/spec/unit/provider/package/solaris_spec.rb +181 -0
- data/spec/unit/provider/package/yum_spec.rb +1856 -0
- data/spec/unit/provider/package/zypper_spec.rb +159 -0
- data/spec/unit/provider/package_spec.rb +427 -0
- data/spec/unit/provider/remote_directory_spec.rb +222 -0
- data/spec/unit/provider/remote_file_spec.rb +288 -0
- data/spec/unit/provider/route_spec.rb +226 -0
- data/spec/unit/provider/ruby_block_spec.rb +38 -0
- data/spec/unit/provider/script_spec.rb +96 -0
- data/spec/unit/provider/service/arch_service_spec.rb +330 -0
- data/spec/unit/provider/service/debian_service_spec.rb +254 -0
- data/spec/unit/provider/service/freebsd_service_spec.rb +379 -0
- data/spec/unit/provider/service/gentoo_service_spec.rb +144 -0
- data/spec/unit/provider/service/init_service_spec.rb +212 -0
- data/spec/unit/provider/service/insserv_service_spec.rb +76 -0
- data/spec/unit/provider/service/invokercd_service_spec.rb +212 -0
- data/spec/unit/provider/service/macosx_spec.rb +229 -0
- data/spec/unit/provider/service/redhat_spec.rb +156 -0
- data/spec/unit/provider/service/simple_service_spec.rb +171 -0
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +140 -0
- data/spec/unit/provider/service/systemd_service_spec.rb +239 -0
- data/spec/unit/provider/service/upstart_service_spec.rb +314 -0
- data/spec/unit/provider/service/windows_spec.rb +235 -0
- data/spec/unit/provider/service_spec.rb +169 -0
- data/spec/unit/provider/subversion_spec.rb +281 -0
- data/spec/unit/provider/template_spec.rb +196 -0
- data/spec/unit/provider/user/dscl_spec.rb +454 -0
- data/spec/unit/provider/user/pw_spec.rb +235 -0
- data/spec/unit/provider/user/solaris_spec.rb +414 -0
- data/spec/unit/provider/user/useradd_spec.rb +386 -0
- data/spec/unit/provider/user/windows_spec.rb +178 -0
- data/spec/unit/provider/user_spec.rb +468 -0
- data/spec/unit/provider_spec.rb +169 -0
- data/spec/unit/recipe_spec.rb +268 -0
- data/spec/unit/resource/apt_package_spec.rb +43 -0
- data/spec/unit/resource/bash_spec.rb +40 -0
- data/spec/unit/resource/breakpoint_spec.rb +43 -0
- data/spec/unit/resource/chef_gem_spec.rb +49 -0
- data/spec/unit/resource/conditional_spec.rb +147 -0
- data/spec/unit/resource/cookbook_file_spec.rb +89 -0
- data/spec/unit/resource/cron_spec.rb +181 -0
- data/spec/unit/resource/csh_spec.rb +40 -0
- data/spec/unit/resource/deploy_revision_spec.rb +47 -0
- data/spec/unit/resource/deploy_spec.rb +259 -0
- data/spec/unit/resource/directory_spec.rb +82 -0
- data/spec/unit/resource/dpkg_package_spec.rb +38 -0
- data/spec/unit/resource/easy_install_package_spec.rb +48 -0
- data/spec/unit/resource/env_spec.rb +85 -0
- data/spec/unit/resource/erl_call_spec.rb +81 -0
- data/spec/unit/resource/execute_spec.rb +124 -0
- data/spec/unit/resource/file_spec.rb +121 -0
- data/spec/unit/resource/freebsd_package_spec.rb +39 -0
- data/spec/unit/resource/gem_package_spec.rb +49 -0
- data/spec/unit/resource/git_spec.rb +46 -0
- data/spec/unit/resource/group_spec.rb +148 -0
- data/spec/unit/resource/http_request_spec.rb +59 -0
- data/spec/unit/resource/ifconfig_spec.rb +46 -0
- data/spec/unit/resource/ips_package_spec.rb +43 -0
- data/spec/unit/resource/link_spec.rb +118 -0
- data/spec/unit/resource/log_spec.rb +70 -0
- data/spec/unit/resource/macports_package_spec.rb +37 -0
- data/spec/unit/resource/mdadm_spec.rb +102 -0
- data/spec/unit/resource/mount_spec.rb +158 -0
- data/spec/unit/resource/ohai_spec.rb +62 -0
- data/spec/unit/resource/package_spec.rb +80 -0
- data/spec/unit/resource/pacman_package_spec.rb +38 -0
- data/spec/unit/resource/perl_spec.rb +40 -0
- data/spec/unit/resource/portage_package_spec.rb +38 -0
- data/spec/unit/resource/python_spec.rb +40 -0
- data/spec/unit/resource/remote_directory_spec.rb +97 -0
- data/spec/unit/resource/remote_file_spec.rb +125 -0
- data/spec/unit/resource/route_spec.rb +107 -0
- data/spec/unit/resource/rpm_package_spec.rb +38 -0
- data/spec/unit/resource/ruby_block_spec.rb +57 -0
- data/spec/unit/resource/ruby_spec.rb +40 -0
- data/spec/unit/resource/scm_spec.rb +159 -0
- data/spec/unit/resource/script_spec.rb +69 -0
- data/spec/unit/resource/service_spec.rb +165 -0
- data/spec/unit/resource/smartos_package_spec.rb +38 -0
- data/spec/unit/resource/subversion_spec.rb +58 -0
- data/spec/unit/resource/template_spec.rb +108 -0
- data/spec/unit/resource/timestamped_deploy_spec.rb +28 -0
- data/spec/unit/resource/user_spec.rb +122 -0
- data/spec/unit/resource/yum_package_spec.rb +85 -0
- data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -0
- data/spec/unit/resource_collection_spec.rb +257 -0
- data/spec/unit/resource_definition_spec.rb +119 -0
- data/spec/unit/resource_platform_map_spec.rb +164 -0
- data/spec/unit/resource_reporter_spec.rb +591 -0
- data/spec/unit/resource_spec.rb +721 -0
- data/spec/unit/rest/auth_credentials_spec.rb +431 -0
- data/spec/unit/rest_spec.rb +644 -0
- data/spec/unit/role_spec.rb +275 -0
- data/spec/unit/run_context_spec.rb +64 -0
- data/spec/unit/run_list/run_list_expansion_spec.rb +129 -0
- data/spec/unit/run_list/run_list_item_spec.rb +117 -0
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +123 -0
- data/spec/unit/run_list_spec.rb +521 -0
- data/spec/unit/run_status_spec.rb +145 -0
- data/spec/unit/runner_spec.rb +303 -0
- data/spec/unit/scan_access_control_spec.rb +182 -0
- data/spec/unit/search/query_spec.rb +99 -0
- data/spec/unit/shef/model_wrapper_spec.rb +97 -0
- data/spec/unit/shef/shef_ext_spec.rb +153 -0
- data/spec/unit/shef/shef_session_spec.rb +154 -0
- data/spec/unit/shef_spec.rb +161 -0
- data/spec/unit/solr_query/query_transform_spec.rb +454 -0
- data/spec/unit/solr_query/solr_http_request_spec.rb +244 -0
- data/spec/unit/solr_query_spec.rb +203 -0
- data/spec/unit/util/file_edit_spec.rb +135 -0
- data/spec/unit/version_class_spec.rb +172 -0
- data/spec/unit/version_constraint_spec.rb +134 -0
- data/spec/unit/webui_user_spec.rb +238 -0
- data/tasks/rspec.rb +75 -0
- metadata +1548 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Trevor O (trevoro@joyent.com)
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
|
20
|
+
require 'ostruct'
|
21
|
+
|
22
|
+
describe Chef::Provider::Package::SmartOS, "load_current_resource" do
|
23
|
+
before(:each) do
|
24
|
+
@node = Chef::Node.new
|
25
|
+
@events = Chef::EventDispatch::Dispatcher.new
|
26
|
+
@run_context = Chef::RunContext.new(@node, {}, @events)
|
27
|
+
@new_resource = Chef::Resource::Package.new("varnish")
|
28
|
+
@current_resource = Chef::Resource::Package.new("varnish")
|
29
|
+
|
30
|
+
|
31
|
+
@status = mock("Status", :exitstatus => 0)
|
32
|
+
@provider = Chef::Provider::Package::SmartOS.new(@new_resource, @run_context)
|
33
|
+
Chef::Resource::Package.stub!(:new).and_return(@current_resource)
|
34
|
+
@stdin = StringIO.new
|
35
|
+
@stdout = "varnish-2.1.5nb2\n"
|
36
|
+
@stderr = StringIO.new
|
37
|
+
@pid = 10
|
38
|
+
@shell_out = OpenStruct.new(:stdout => @stdout, :stdin => @stdin, :stderr => @stderr, :status => @status, :exitstatus => 0)
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "when loading current resource" do
|
42
|
+
|
43
|
+
it "should create a current resource with the name of the new_resource" do
|
44
|
+
@provider.should_receive(:shell_out!).and_return(@shell_out)
|
45
|
+
Chef::Resource::Package.should_receive(:new).and_return(@current_resource)
|
46
|
+
@provider.load_current_resource
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should set the current resource package name" do
|
50
|
+
@provider.should_receive(:shell_out!).and_return(@shell_out)
|
51
|
+
@current_resource.should_receive(:package_name).with(@new_resource.package_name)
|
52
|
+
@provider.load_current_resource
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should set the installed version if it is installed" do
|
56
|
+
@provider.should_receive(:shell_out!).and_return(@shell_out)
|
57
|
+
@provider.load_current_resource
|
58
|
+
@current_resource.version.should == "2.1.5nb2"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should set the installed version to nil if it's not installed" do
|
62
|
+
out = OpenStruct.new(:stdout => nil)
|
63
|
+
@provider.should_receive(:shell_out!).and_return(out)
|
64
|
+
@provider.load_current_resource
|
65
|
+
@current_resource.version.should == nil
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "when manipulating a resource" do
|
72
|
+
|
73
|
+
it "run pkgin and install the package" do
|
74
|
+
out = OpenStruct.new(:stdout => nil)
|
75
|
+
@provider.should_receive(:shell_out!).with("pkg_info -E \"varnish*\"", {:env => nil, :returns=>[0,1]}).and_return(@shell_out)
|
76
|
+
@provider.should_receive(:shell_out!).with("pkgin -y install varnish-2.1.5nb2", {:env=>nil}).and_return(out)
|
77
|
+
@provider.load_current_resource
|
78
|
+
@provider.install_package("varnish", "2.1.5nb2")
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Toomas Pelberg (<toomasp@gmx.net>)
|
3
|
+
# Copyright:: Copyright (c) 2010 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
require 'spec_helper'
|
19
|
+
|
20
|
+
describe Chef::Provider::Package::Solaris do
|
21
|
+
before(:each) do
|
22
|
+
@node = Chef::Node.new
|
23
|
+
@events = Chef::EventDispatch::Dispatcher.new
|
24
|
+
@run_context = Chef::RunContext.new(@node, {}, @events)
|
25
|
+
|
26
|
+
@new_resource = Chef::Resource::Package.new("SUNWbash")
|
27
|
+
@new_resource.source("/tmp/bash.pkg")
|
28
|
+
|
29
|
+
@provider = Chef::Provider::Package::Solaris.new(@new_resource, @run_context)
|
30
|
+
::File.stub!(:exists?).and_return(true)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "assessing the current package status" do
|
34
|
+
before do
|
35
|
+
@pkginfo =<<-PKGINFO
|
36
|
+
PKGINST: SUNWbash
|
37
|
+
NAME: GNU Bourne-Again shell (bash)
|
38
|
+
CATEGORY: system
|
39
|
+
ARCH: sparc
|
40
|
+
VERSION: 11.10.0,REV=2005.01.08.05.16
|
41
|
+
BASEDIR: /
|
42
|
+
VENDOR: Sun Microsystems, Inc.
|
43
|
+
DESC: GNU Bourne-Again shell (bash) version 3.0
|
44
|
+
PSTAMP: sfw10-patch20070430084444
|
45
|
+
INSTDATE: Nov 04 2009 01:02
|
46
|
+
HOTLINE: Please contact your local service provider
|
47
|
+
PKGINFO
|
48
|
+
|
49
|
+
@status = mock("Status", :exitstatus => 0)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should create a current resource with the name of new_resource" do
|
53
|
+
@provider.stub!(:popen4).and_return(@status)
|
54
|
+
@provider.load_current_resource
|
55
|
+
@provider.current_resource.name.should == "SUNWbash"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should set the current reource package name to the new resource package name" do
|
59
|
+
@provider.stub!(:popen4).and_return(@status)
|
60
|
+
@provider.load_current_resource
|
61
|
+
@provider.current_resource.package_name.should == "SUNWbash"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should raise an exception if a source is supplied but not found" do
|
65
|
+
@provider.stub!(:popen4).and_return(@status)
|
66
|
+
::File.stub!(:exists?).and_return(false)
|
67
|
+
@provider.define_resource_requirements
|
68
|
+
@provider.load_current_resource
|
69
|
+
lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::Package)
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
it "should get the source package version from pkginfo if provided" do
|
74
|
+
@stdout = StringIO.new(@pkginfo)
|
75
|
+
@stdin, @stderr = StringIO.new, StringIO.new
|
76
|
+
@provider.should_receive(:popen4).with("pkginfo -l -d /tmp/bash.pkg SUNWbash").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
77
|
+
@provider.should_receive(:popen4).with("pkginfo -l SUNWbash").and_return(@status)
|
78
|
+
@provider.load_current_resource
|
79
|
+
|
80
|
+
@provider.current_resource.package_name.should == "SUNWbash"
|
81
|
+
@new_resource.version.should == "11.10.0,REV=2005.01.08.05.16"
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should return the current version installed if found by pkginfo" do
|
85
|
+
@stdout = StringIO.new(@pkginfo)
|
86
|
+
@stdin, @stderr = StringIO.new, StringIO.new
|
87
|
+
@provider.should_receive(:popen4).with("pkginfo -l -d /tmp/bash.pkg SUNWbash").and_return(@status)
|
88
|
+
@provider.should_receive(:popen4).with("pkginfo -l SUNWbash").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
89
|
+
@provider.load_current_resource
|
90
|
+
@provider.current_resource.version.should == "11.10.0,REV=2005.01.08.05.16"
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should raise an exception if the source is not set but we are installing" do
|
94
|
+
@new_resource = Chef::Resource::Package.new("SUNWbash")
|
95
|
+
@provider = Chef::Provider::Package::Solaris.new(@new_resource, @run_context)
|
96
|
+
@provider.stub!(:popen4).and_return(@status)
|
97
|
+
lambda { @provider.run_action(:install) }.should raise_error(Chef::Exceptions::Package)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should raise an exception if pkginfo fails to run" do
|
101
|
+
@status = mock("Status", :exitstatus => -1)
|
102
|
+
@provider.stub!(:popen4).and_return(@status)
|
103
|
+
lambda { @provider.load_current_resource }.should raise_error(Chef::Exceptions::Package)
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should return a current resource with a nil version if the package is not found" do
|
107
|
+
@stdout = StringIO.new
|
108
|
+
@provider.should_receive(:popen4).with("pkginfo -l -d /tmp/bash.pkg SUNWbash").and_return(@status)
|
109
|
+
@provider.should_receive(:popen4).with("pkginfo -l SUNWbash").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
110
|
+
@provider.load_current_resource
|
111
|
+
@provider.current_resource.version.should be_nil
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "candidate_version" do
|
116
|
+
it "should return the candidate_version variable if already setup" do
|
117
|
+
@provider.candidate_version = "11.10.0,REV=2005.01.08.05.16"
|
118
|
+
@provider.should_not_receive(:popen4)
|
119
|
+
@provider.candidate_version
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should lookup the candidate_version if the variable is not already set" do
|
123
|
+
@status = mock("Status", :exitstatus => 0)
|
124
|
+
@provider.stub!(:popen4).and_return(@status)
|
125
|
+
@provider.should_receive(:popen4)
|
126
|
+
@provider.candidate_version
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should throw and exception if the exitstatus is not 0" do
|
130
|
+
@status = mock("Status", :exitstatus => 1)
|
131
|
+
@provider.stub!(:popen4).and_return(@status)
|
132
|
+
lambda { @provider.candidate_version }.should raise_error(Chef::Exceptions::Package)
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
describe "install and upgrade" do
|
138
|
+
it "should run pkgadd -n -d with the package source to install" do
|
139
|
+
@provider.should_receive(:run_command_with_systems_locale).with({
|
140
|
+
:command => "pkgadd -n -d /tmp/bash.pkg all"
|
141
|
+
})
|
142
|
+
@provider.install_package("SUNWbash", "11.10.0,REV=2005.01.08.05.16")
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should run pkgadd -n -d when the package is a path to install" do
|
146
|
+
@new_resource = Chef::Resource::Package.new("/tmp/bash.pkg")
|
147
|
+
@provider = Chef::Provider::Package::Solaris.new(@new_resource, @run_context)
|
148
|
+
@new_resource.source.should == "/tmp/bash.pkg"
|
149
|
+
@provider.should_receive(:run_command_with_systems_locale).with({
|
150
|
+
:command => "pkgadd -n -d /tmp/bash.pkg all"
|
151
|
+
})
|
152
|
+
@provider.install_package("/tmp/bash.pkg", "11.10.0,REV=2005.01.08.05.16")
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should run pkgadd -n -a /tmp/myadmin -d with the package options -a /tmp/myadmin" do
|
156
|
+
@new_resource.stub!(:options).and_return("-a /tmp/myadmin")
|
157
|
+
@provider.should_receive(:run_command_with_systems_locale).with({
|
158
|
+
:command => "pkgadd -n -a /tmp/myadmin -d /tmp/bash.pkg all"
|
159
|
+
})
|
160
|
+
@provider.install_package("SUNWbash", "11.10.0,REV=2005.01.08.05.16")
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe "remove" do
|
165
|
+
it "should run pkgrm -n to remove the package" do
|
166
|
+
@provider.should_receive(:run_command_with_systems_locale).with({
|
167
|
+
:command => "pkgrm -n SUNWbash"
|
168
|
+
})
|
169
|
+
@provider.remove_package("SUNWbash", "11.10.0,REV=2005.01.08.05.16")
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should run pkgrm -n -a /tmp/myadmin with options -a /tmp/myadmin" do
|
173
|
+
@new_resource.stub!(:options).and_return("-a /tmp/myadmin")
|
174
|
+
@provider.should_receive(:run_command_with_systems_locale).with({
|
175
|
+
:command => "pkgrm -n -a /tmp/myadmin SUNWbash"
|
176
|
+
})
|
177
|
+
@provider.remove_package("SUNWbash", "11.10.0,REV=2005.01.08.05.16")
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
end
|
@@ -0,0 +1,1856 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'spec_helper'
|
20
|
+
|
21
|
+
describe Chef::Provider::Package::Yum do
|
22
|
+
before(:each) do
|
23
|
+
@node = Chef::Node.new
|
24
|
+
@events = Chef::EventDispatch::Dispatcher.new
|
25
|
+
@run_context = Chef::RunContext.new(@node, {}, @events)
|
26
|
+
@new_resource = Chef::Resource::Package.new('cups')
|
27
|
+
@status = mock("Status", :exitstatus => 0)
|
28
|
+
@yum_cache = mock(
|
29
|
+
'Chef::Provider::Yum::YumCache',
|
30
|
+
:reload_installed => true,
|
31
|
+
:reset => true,
|
32
|
+
:installed_version => "1.2.4-11.18.el5",
|
33
|
+
:candidate_version => "1.2.4-11.18.el5_2.3",
|
34
|
+
:package_available? => true,
|
35
|
+
:version_available? => true,
|
36
|
+
:allow_multi_install => [ "kernel" ],
|
37
|
+
:package_repository => "base",
|
38
|
+
:disable_extra_repo_control => true
|
39
|
+
)
|
40
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
41
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
42
|
+
@pid = mock("PID")
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "when loading the current system state" do
|
46
|
+
it "should create a current resource with the name of the new_resource" do
|
47
|
+
@provider.load_current_resource
|
48
|
+
@provider.current_resource.name.should == "cups"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should set the current resources package name to the new resources package name" do
|
52
|
+
@provider.load_current_resource
|
53
|
+
@provider.current_resource.package_name.should == "cups"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should set the installed version to nil on the current resource if no installed package" do
|
57
|
+
@yum_cache.stub!(:installed_version).and_return(nil)
|
58
|
+
@provider.load_current_resource
|
59
|
+
@provider.current_resource.version.should be_nil
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should set the installed version if yum has one" do
|
63
|
+
@provider.load_current_resource
|
64
|
+
@provider.current_resource.version.should == "1.2.4-11.18.el5"
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should set the candidate version if yum info has one" do
|
68
|
+
@provider.load_current_resource
|
69
|
+
@provider.candidate_version.should eql("1.2.4-11.18.el5_2.3")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should return the current resouce" do
|
73
|
+
@provider.load_current_resource.should eql(@provider.current_resource)
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "when arch in package_name" do
|
77
|
+
it "should set the arch if no existing package_name is found and new_package_name+new_arch is available" do
|
78
|
+
@new_resource = Chef::Resource::YumPackage.new('testing.noarch')
|
79
|
+
@yum_cache = mock(
|
80
|
+
'Chef::Provider::Yum::YumCache'
|
81
|
+
)
|
82
|
+
@yum_cache.stub!(:installed_version) do |package_name, arch|
|
83
|
+
# nothing installed for package_name/new_package_name
|
84
|
+
nil
|
85
|
+
end
|
86
|
+
@yum_cache.stub!(:candidate_version) do |package_name, arch|
|
87
|
+
if package_name == "testing.noarch" || package_name == "testing.more.noarch"
|
88
|
+
nil
|
89
|
+
# candidate for new_package_name
|
90
|
+
elsif package_name == "testing" || package_name == "testing.more"
|
91
|
+
"1.1"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
@yum_cache.stub!(:package_available?).and_return(true)
|
95
|
+
@yum_cache.stub!(:disable_extra_repo_control).and_return(true)
|
96
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
97
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
98
|
+
@provider.load_current_resource
|
99
|
+
@provider.new_resource.package_name.should == "testing"
|
100
|
+
@provider.new_resource.arch.should == "noarch"
|
101
|
+
@provider.arch.should == "noarch"
|
102
|
+
|
103
|
+
@new_resource = Chef::Resource::YumPackage.new('testing.more.noarch')
|
104
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
105
|
+
@provider.load_current_resource
|
106
|
+
@provider.new_resource.package_name.should == "testing.more"
|
107
|
+
@provider.new_resource.arch.should == "noarch"
|
108
|
+
@provider.arch.should == "noarch"
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should not set the arch when an existing package_name is found" do
|
112
|
+
@new_resource = Chef::Resource::YumPackage.new('testing.beta3')
|
113
|
+
@yum_cache = mock(
|
114
|
+
'Chef::Provider::Yum::YumCache'
|
115
|
+
)
|
116
|
+
@yum_cache.stub!(:installed_version) do |package_name, arch|
|
117
|
+
# installed for package_name
|
118
|
+
if package_name == "testing.beta3" || package_name == "testing.beta3.more"
|
119
|
+
"1.1"
|
120
|
+
elsif package_name == "testing" || package_name == "testing.beta3"
|
121
|
+
nil
|
122
|
+
end
|
123
|
+
end
|
124
|
+
@yum_cache.stub!(:candidate_version) do |package_name, arch|
|
125
|
+
# no candidate for package_name/new_package_name
|
126
|
+
nil
|
127
|
+
end
|
128
|
+
@yum_cache.stub!(:package_available?).and_return(true)
|
129
|
+
@yum_cache.stub!(:disable_extra_repo_control).and_return(true)
|
130
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
131
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
132
|
+
# annoying side effect of the fun stub'ing above
|
133
|
+
@provider.load_current_resource
|
134
|
+
@provider.new_resource.package_name.should == "testing.beta3"
|
135
|
+
@provider.new_resource.arch.should == nil
|
136
|
+
@provider.arch.should == nil
|
137
|
+
|
138
|
+
@new_resource = Chef::Resource::YumPackage.new('testing.beta3.more')
|
139
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
140
|
+
@provider.load_current_resource
|
141
|
+
@provider.new_resource.package_name.should == "testing.beta3.more"
|
142
|
+
@provider.new_resource.arch.should == nil
|
143
|
+
@provider.arch.should == nil
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should not set the arch when no existing package_name or new_package_name+new_arch is found" do
|
147
|
+
@new_resource = Chef::Resource::YumPackage.new('testing.beta3')
|
148
|
+
@yum_cache = mock(
|
149
|
+
'Chef::Provider::Yum::YumCache'
|
150
|
+
)
|
151
|
+
@yum_cache.stub!(:installed_version) do |package_name, arch|
|
152
|
+
# nothing installed for package_name/new_package_name
|
153
|
+
nil
|
154
|
+
end
|
155
|
+
@yum_cache.stub!(:candidate_version) do |package_name, arch|
|
156
|
+
# no candidate for package_name/new_package_name
|
157
|
+
nil
|
158
|
+
end
|
159
|
+
@yum_cache.stub!(:package_available?).and_return(true)
|
160
|
+
@yum_cache.stub!(:disable_extra_repo_control).and_return(true)
|
161
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
162
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
163
|
+
@provider.load_current_resource
|
164
|
+
@provider.new_resource.package_name.should == "testing.beta3"
|
165
|
+
@provider.new_resource.arch.should == nil
|
166
|
+
@provider.arch.should == nil
|
167
|
+
|
168
|
+
@new_resource = Chef::Resource::YumPackage.new('testing.beta3.more')
|
169
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
170
|
+
@provider.load_current_resource
|
171
|
+
@provider.new_resource.package_name.should == "testing.beta3.more"
|
172
|
+
@provider.new_resource.arch.should == nil
|
173
|
+
@provider.arch.should == nil
|
174
|
+
end
|
175
|
+
|
176
|
+
it "should ensure it doesn't clobber an existing arch if passed" do
|
177
|
+
@new_resource = Chef::Resource::YumPackage.new('testing.i386')
|
178
|
+
@new_resource.arch("x86_64")
|
179
|
+
@yum_cache = mock(
|
180
|
+
'Chef::Provider::Yum::YumCache'
|
181
|
+
)
|
182
|
+
@yum_cache.stub!(:installed_version) do |package_name, arch|
|
183
|
+
# nothing installed for package_name/new_package_name
|
184
|
+
nil
|
185
|
+
end
|
186
|
+
@yum_cache.stub!(:candidate_version) do |package_name, arch|
|
187
|
+
if package_name == "testing.noarch"
|
188
|
+
nil
|
189
|
+
# candidate for new_package_name
|
190
|
+
elsif package_name == "testing"
|
191
|
+
"1.1"
|
192
|
+
end
|
193
|
+
end.and_return("something")
|
194
|
+
@yum_cache.stub!(:package_available?).and_return(true)
|
195
|
+
@yum_cache.stub!(:disable_extra_repo_control).and_return(true)
|
196
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
197
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
198
|
+
@provider.load_current_resource
|
199
|
+
@provider.new_resource.package_name.should == "testing.i386"
|
200
|
+
@provider.new_resource.arch.should == "x86_64"
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should flush the cache if :before is true" do
|
205
|
+
@new_resource.stub!(:flush_cache).and_return({:after => false, :before => true})
|
206
|
+
@yum_cache.should_receive(:reload).once
|
207
|
+
@provider.load_current_resource
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should flush the cache if :before is false" do
|
211
|
+
@new_resource.stub!(:flush_cache).and_return({:after => false, :before => false})
|
212
|
+
@yum_cache.should_not_receive(:reload)
|
213
|
+
@provider.load_current_resource
|
214
|
+
end
|
215
|
+
|
216
|
+
it "should detect --enablerepo or --disablerepo when passed among options, collect them preserving order and notify the yum cache" do
|
217
|
+
@new_resource.stub!(:options).and_return("--stuff --enablerepo=foo --otherthings --disablerepo=a,b,c --enablerepo=bar")
|
218
|
+
@yum_cache.should_receive(:enable_extra_repo_control).with("--enablerepo=foo --disablerepo=a,b,c --enablerepo=bar")
|
219
|
+
@provider.load_current_resource
|
220
|
+
end
|
221
|
+
|
222
|
+
it "should let the yum cache know extra repos are disabled if --enablerepo or --disablerepo aren't among options" do
|
223
|
+
@new_resource.stub!(:options).and_return("--stuff --otherthings")
|
224
|
+
@yum_cache.should_receive(:disable_extra_repo_control)
|
225
|
+
@provider.load_current_resource
|
226
|
+
end
|
227
|
+
|
228
|
+
it "should let the yum cache know extra repos are disabled if options aren't set" do
|
229
|
+
@new_resource.stub!(:options).and_return(nil)
|
230
|
+
@yum_cache.should_receive(:disable_extra_repo_control)
|
231
|
+
@provider.load_current_resource
|
232
|
+
end
|
233
|
+
|
234
|
+
it "should search provides if package name can't be found then set package_name to match" do
|
235
|
+
@yum_cache = mock(
|
236
|
+
'Chef::Provider::Yum::YumCache',
|
237
|
+
:reload_installed => true,
|
238
|
+
:reset => true,
|
239
|
+
:installed_version => "1.2.4-11.18.el5",
|
240
|
+
:candidate_version => "1.2.4-11.18.el5",
|
241
|
+
:package_available? => false,
|
242
|
+
:version_available? => true,
|
243
|
+
:disable_extra_repo_control => true
|
244
|
+
)
|
245
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
246
|
+
pkg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "1.2.4-11.18.el5", "x86_64", [])
|
247
|
+
@yum_cache.should_receive(:packages_from_require).and_return([pkg])
|
248
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
249
|
+
@provider.load_current_resource
|
250
|
+
@new_resource.package_name.should == "test-package"
|
251
|
+
end
|
252
|
+
|
253
|
+
it "should search provides if package name can't be found, warn about multiple matches, but use the first one" do
|
254
|
+
@yum_cache = mock(
|
255
|
+
'Chef::Provider::Yum::YumCache',
|
256
|
+
:reload_installed => true,
|
257
|
+
:reset => true,
|
258
|
+
:installed_version => "1.2.4-11.18.el5",
|
259
|
+
:candidate_version => "1.2.4-11.18.el5",
|
260
|
+
:package_available? => false,
|
261
|
+
:version_available? => true,
|
262
|
+
:disable_extra_repo_control => true
|
263
|
+
)
|
264
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
265
|
+
pkg_x = Chef::Provider::Package::Yum::RPMPackage.new("test-package-x", "1.2.4-11.18.el5", "x86_64", [])
|
266
|
+
pkg_y = Chef::Provider::Package::Yum::RPMPackage.new("test-package-y", "1.2.6-11.3.el5", "i386", [])
|
267
|
+
@yum_cache.should_receive(:packages_from_require).and_return([pkg_x, pkg_y])
|
268
|
+
Chef::Log.should_receive(:warn).exactly(1).times.with(%r{matched multiple Provides})
|
269
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
270
|
+
@provider.load_current_resource
|
271
|
+
@new_resource.package_name.should == "test-package-x"
|
272
|
+
end
|
273
|
+
|
274
|
+
it "should search provides if no package is available - if no match in installed provides then load the complete set" do
|
275
|
+
@yum_cache = mock(
|
276
|
+
'Chef::Provider::Yum::YumCache',
|
277
|
+
:reload_installed => true,
|
278
|
+
:reset => true,
|
279
|
+
:installed_version => "1.2.4-11.18.el5",
|
280
|
+
:candidate_version => "1.2.4-11.18.el5",
|
281
|
+
:package_available? => false,
|
282
|
+
:version_available? => true,
|
283
|
+
:disable_extra_repo_control => true
|
284
|
+
)
|
285
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
286
|
+
@yum_cache.should_receive(:packages_from_require).twice.and_return([])
|
287
|
+
@yum_cache.should_receive(:reload_provides)
|
288
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
289
|
+
@provider.load_current_resource
|
290
|
+
end
|
291
|
+
|
292
|
+
it "should search provides if no package is available and not load the complete set if action is :remove or :purge" do
|
293
|
+
@yum_cache = mock(
|
294
|
+
'Chef::Provider::Yum::YumCache',
|
295
|
+
:reload_installed => true,
|
296
|
+
:reset => true,
|
297
|
+
:installed_version => "1.2.4-11.18.el5",
|
298
|
+
:candidate_version => "1.2.4-11.18.el5",
|
299
|
+
:package_available? => false,
|
300
|
+
:version_available? => true,
|
301
|
+
:disable_extra_repo_control => true
|
302
|
+
)
|
303
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
304
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
305
|
+
@yum_cache.should_receive(:packages_from_require).once.and_return([])
|
306
|
+
@yum_cache.should_not_receive(:reload_provides)
|
307
|
+
@new_resource.action(:remove)
|
308
|
+
@provider.load_current_resource
|
309
|
+
@yum_cache.should_receive(:packages_from_require).once.and_return([])
|
310
|
+
@yum_cache.should_not_receive(:reload_provides)
|
311
|
+
@new_resource.action(:purge)
|
312
|
+
@provider.load_current_resource
|
313
|
+
end
|
314
|
+
|
315
|
+
it "should search provides if no package is available - if no match in provides leave the name intact" do
|
316
|
+
@yum_cache = mock(
|
317
|
+
'Chef::Provider::Yum::YumCache',
|
318
|
+
:reload_provides => true,
|
319
|
+
:reload_installed => true,
|
320
|
+
:reset => true,
|
321
|
+
:installed_version => "1.2.4-11.18.el5",
|
322
|
+
:candidate_version => "1.2.4-11.18.el5",
|
323
|
+
:package_available? => false,
|
324
|
+
:version_available? => true,
|
325
|
+
:disable_extra_repo_control => true
|
326
|
+
)
|
327
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
328
|
+
@yum_cache.should_receive(:packages_from_require).twice.and_return([])
|
329
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
330
|
+
@provider.load_current_resource
|
331
|
+
@new_resource.package_name.should == "cups"
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
describe "when installing a package" do
|
336
|
+
it "should run yum install with the package name and version" do
|
337
|
+
@provider.load_current_resource
|
338
|
+
Chef::Provider::Package::Yum::RPMUtils.stub!(:rpmvercmp).and_return(-1)
|
339
|
+
@provider.should_receive(:yum_command).with(
|
340
|
+
"yum -d0 -e0 -y install emacs-1.0"
|
341
|
+
)
|
342
|
+
@provider.install_package("emacs", "1.0")
|
343
|
+
end
|
344
|
+
|
345
|
+
it "should run yum localinstall if given a path to an rpm" do
|
346
|
+
@new_resource.stub!(:source).and_return("/tmp/emacs-21.4-20.el5.i386.rpm")
|
347
|
+
@provider.should_receive(:yum_command).with(
|
348
|
+
"yum -d0 -e0 -y localinstall /tmp/emacs-21.4-20.el5.i386.rpm"
|
349
|
+
)
|
350
|
+
@provider.install_package("emacs", "21.4-20.el5")
|
351
|
+
end
|
352
|
+
|
353
|
+
it "should run yum localinstall if given a path to an rpm as the package" do
|
354
|
+
@new_resource = Chef::Resource::Package.new("/tmp/emacs-21.4-20.el5.i386.rpm")
|
355
|
+
::File.stub!(:exists?).and_return(true)
|
356
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
357
|
+
@new_resource.source.should == "/tmp/emacs-21.4-20.el5.i386.rpm"
|
358
|
+
@provider.should_receive(:yum_command).with(
|
359
|
+
"yum -d0 -e0 -y localinstall /tmp/emacs-21.4-20.el5.i386.rpm"
|
360
|
+
)
|
361
|
+
@provider.install_package("/tmp/emacs-21.4-20.el5.i386.rpm", "21.4-20.el5")
|
362
|
+
end
|
363
|
+
|
364
|
+
it "should run yum install with the package name, version and arch" do
|
365
|
+
@provider.load_current_resource
|
366
|
+
@new_resource.stub!(:arch).and_return("i386")
|
367
|
+
Chef::Provider::Package::Yum::RPMUtils.stub!(:rpmvercmp).and_return(-1)
|
368
|
+
@provider.should_receive(:yum_command).with(
|
369
|
+
"yum -d0 -e0 -y install emacs-21.4-20.el5.i386"
|
370
|
+
)
|
371
|
+
@provider.install_package("emacs", "21.4-20.el5")
|
372
|
+
end
|
373
|
+
|
374
|
+
it "installs the package with the options given in the resource" do
|
375
|
+
@provider.load_current_resource
|
376
|
+
@provider.candidate_version = '11'
|
377
|
+
@new_resource.stub!(:options).and_return("--disablerepo epmd")
|
378
|
+
Chef::Provider::Package::Yum::RPMUtils.stub!(:rpmvercmp).and_return(-1)
|
379
|
+
@provider.should_receive(:yum_command).with(
|
380
|
+
"yum -d0 -e0 -y --disablerepo epmd install cups-11"
|
381
|
+
)
|
382
|
+
@provider.install_package(@new_resource.name, @provider.candidate_version)
|
383
|
+
end
|
384
|
+
|
385
|
+
it "should raise an exception if the package is not available" do
|
386
|
+
@yum_cache = mock(
|
387
|
+
'Chef::Provider::Yum::YumCache',
|
388
|
+
:reload_from_cache => true,
|
389
|
+
:reset => true,
|
390
|
+
:installed_version => "1.2.4-11.18.el5",
|
391
|
+
:candidate_version => "1.2.4-11.18.el5_2.3",
|
392
|
+
:package_available? => true,
|
393
|
+
:version_available? => nil,
|
394
|
+
:disable_extra_repo_control => true
|
395
|
+
)
|
396
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
397
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
398
|
+
lambda { @provider.install_package("lolcats", "0.99") }.should raise_error(Chef::Exceptions::Package, %r{Version .* not found})
|
399
|
+
end
|
400
|
+
|
401
|
+
it "should raise an exception if candidate version is older than the installed version and allow_downgrade is false" do
|
402
|
+
@new_resource.stub!(:allow_downgrade).and_return(false)
|
403
|
+
@yum_cache = mock(
|
404
|
+
'Chef::Provider::Yum::YumCache',
|
405
|
+
:reload_installed => true,
|
406
|
+
:reset => true,
|
407
|
+
:installed_version => "1.2.4-11.18.el5",
|
408
|
+
:candidate_version => "1.2.4-11.15.el5",
|
409
|
+
:package_available? => true,
|
410
|
+
:version_available? => true,
|
411
|
+
:allow_multi_install => [ "kernel" ],
|
412
|
+
:disable_extra_repo_control => true
|
413
|
+
)
|
414
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
415
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
416
|
+
@provider.load_current_resource
|
417
|
+
lambda { @provider.install_package("cups", "1.2.4-11.15.el5") }.should raise_error(Chef::Exceptions::Package, %r{is newer than candidate package})
|
418
|
+
end
|
419
|
+
|
420
|
+
it "should not raise an exception if candidate version is older than the installed version and the package is list in yum's installonlypkg option" do
|
421
|
+
@yum_cache = mock(
|
422
|
+
'Chef::Provider::Yum::YumCache',
|
423
|
+
:reload_installed => true,
|
424
|
+
:reset => true,
|
425
|
+
:installed_version => "1.2.4-11.18.el5",
|
426
|
+
:candidate_version => "1.2.4-11.15.el5",
|
427
|
+
:package_available? => true,
|
428
|
+
:version_available? => true,
|
429
|
+
:allow_multi_install => [ "cups" ],
|
430
|
+
:package_repository => "base",
|
431
|
+
:disable_extra_repo_control => true
|
432
|
+
)
|
433
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
434
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
435
|
+
@provider.load_current_resource
|
436
|
+
@provider.should_receive(:yum_command).with(
|
437
|
+
"yum -d0 -e0 -y install cups-1.2.4-11.15.el5"
|
438
|
+
)
|
439
|
+
@provider.install_package("cups", "1.2.4-11.15.el5")
|
440
|
+
end
|
441
|
+
|
442
|
+
it "should run yum downgrade if candidate version is older than the installed version and allow_downgrade is true" do
|
443
|
+
@new_resource.stub!(:allow_downgrade).and_return(true)
|
444
|
+
@yum_cache = mock(
|
445
|
+
'Chef::Provider::Yum::YumCache',
|
446
|
+
:reload_installed => true,
|
447
|
+
:reset => true,
|
448
|
+
:installed_version => "1.2.4-11.18.el5",
|
449
|
+
:candidate_version => "1.2.4-11.15.el5",
|
450
|
+
:package_available? => true,
|
451
|
+
:version_available? => true,
|
452
|
+
:allow_multi_install => [],
|
453
|
+
:package_repository => "base",
|
454
|
+
:disable_extra_repo_control => true
|
455
|
+
)
|
456
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
457
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
458
|
+
@provider.load_current_resource
|
459
|
+
@provider.should_receive(:yum_command).with(
|
460
|
+
"yum -d0 -e0 -y downgrade cups-1.2.4-11.15.el5"
|
461
|
+
)
|
462
|
+
@provider.install_package("cups", "1.2.4-11.15.el5")
|
463
|
+
end
|
464
|
+
|
465
|
+
it "should run yum install then flush the cache if :after is true" do
|
466
|
+
@new_resource.stub!(:flush_cache).and_return({:after => true, :before => false})
|
467
|
+
@provider.load_current_resource
|
468
|
+
Chef::Provider::Package::Yum::RPMUtils.stub!(:rpmvercmp).and_return(-1)
|
469
|
+
@provider.should_receive(:yum_command).with(
|
470
|
+
"yum -d0 -e0 -y install emacs-1.0"
|
471
|
+
)
|
472
|
+
@yum_cache.should_receive(:reload).once
|
473
|
+
@provider.install_package("emacs", "1.0")
|
474
|
+
end
|
475
|
+
|
476
|
+
it "should run yum install then not flush the cache if :after is false" do
|
477
|
+
@new_resource.stub!(:flush_cache).and_return({:after => false, :before => false})
|
478
|
+
@provider.load_current_resource
|
479
|
+
Chef::Provider::Package::Yum::RPMUtils.stub!(:rpmvercmp).and_return(-1)
|
480
|
+
@provider.should_receive(:yum_command).with(
|
481
|
+
"yum -d0 -e0 -y install emacs-1.0"
|
482
|
+
)
|
483
|
+
@yum_cache.should_not_receive(:reload)
|
484
|
+
@provider.install_package("emacs", "1.0")
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
describe "when upgrading a package" do
|
489
|
+
it "should run yum install if the package is installed and a version is given" do
|
490
|
+
@provider.load_current_resource
|
491
|
+
@provider.candidate_version = '11'
|
492
|
+
Chef::Provider::Package::Yum::RPMUtils.stub!(:rpmvercmp).and_return(-1)
|
493
|
+
@provider.should_receive(:yum_command).with(
|
494
|
+
"yum -d0 -e0 -y install cups-11"
|
495
|
+
)
|
496
|
+
@provider.upgrade_package(@new_resource.name, @provider.candidate_version)
|
497
|
+
end
|
498
|
+
|
499
|
+
it "should run yum install if the package is not installed" do
|
500
|
+
@provider.load_current_resource
|
501
|
+
@current_resource = Chef::Resource::Package.new('cups')
|
502
|
+
@provider.candidate_version = '11'
|
503
|
+
Chef::Provider::Package::Yum::RPMUtils.stub!(:rpmvercmp).and_return(-1)
|
504
|
+
@provider.should_receive(:yum_command).with(
|
505
|
+
"yum -d0 -e0 -y install cups-11"
|
506
|
+
)
|
507
|
+
@provider.upgrade_package(@new_resource.name, @provider.candidate_version)
|
508
|
+
end
|
509
|
+
|
510
|
+
it "should raise an exception if candidate version is older than the installed version" do
|
511
|
+
@yum_cache = mock(
|
512
|
+
'Chef::Provider::Yum::YumCache',
|
513
|
+
:reload_installed => true,
|
514
|
+
:reset => true,
|
515
|
+
:installed_version => "1.2.4-11.18.el5",
|
516
|
+
:candidate_version => "1.2.4-11.15.el5",
|
517
|
+
:package_available? => true,
|
518
|
+
:version_available? => true,
|
519
|
+
:allow_multi_install => [ "kernel" ],
|
520
|
+
:disable_extra_repo_control => true
|
521
|
+
)
|
522
|
+
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
523
|
+
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
524
|
+
@provider.load_current_resource
|
525
|
+
lambda { @provider.upgrade_package("cups", "1.2.4-11.15.el5") }.should raise_error(Chef::Exceptions::Package, %r{is newer than candidate package})
|
526
|
+
end
|
527
|
+
|
528
|
+
# Test our little workaround, some crossover into Chef::Provider::Package territory
|
529
|
+
it "should call action_upgrade in the parent if the current resource version is nil" do
|
530
|
+
@yum_cache.stub!(:installed_version).and_return(nil)
|
531
|
+
@provider.load_current_resource
|
532
|
+
@current_resource = Chef::Resource::Package.new('cups')
|
533
|
+
@provider.candidate_version = '11'
|
534
|
+
@provider.should_receive(:upgrade_package).with(
|
535
|
+
"cups",
|
536
|
+
"11"
|
537
|
+
)
|
538
|
+
@provider.action_upgrade
|
539
|
+
end
|
540
|
+
|
541
|
+
it "should call action_upgrade in the parent if the candidate version is nil" do
|
542
|
+
@provider.load_current_resource
|
543
|
+
@current_resource = Chef::Resource::Package.new('cups')
|
544
|
+
@provider.candidate_version = nil
|
545
|
+
@provider.should_not_receive(:upgrade_package)
|
546
|
+
@provider.action_upgrade
|
547
|
+
end
|
548
|
+
|
549
|
+
it "should call action_upgrade in the parent if the candidate is newer" do
|
550
|
+
@provider.load_current_resource
|
551
|
+
@current_resource = Chef::Resource::Package.new('cups')
|
552
|
+
@provider.candidate_version = '11'
|
553
|
+
@provider.should_receive(:upgrade_package).with(
|
554
|
+
"cups",
|
555
|
+
"11"
|
556
|
+
)
|
557
|
+
@provider.action_upgrade
|
558
|
+
end
|
559
|
+
|
560
|
+
it "should not call action_upgrade in the parent if the candidate is older" do
|
561
|
+
@yum_cache.stub!(:installed_version).and_return("12")
|
562
|
+
@provider.load_current_resource
|
563
|
+
@current_resource = Chef::Resource::Package.new('cups')
|
564
|
+
@provider.candidate_version = '11'
|
565
|
+
@provider.should_not_receive(:upgrade_package)
|
566
|
+
@provider.action_upgrade
|
567
|
+
end
|
568
|
+
end
|
569
|
+
|
570
|
+
describe "when removing a package" do
|
571
|
+
it "should run yum remove with the package name" do
|
572
|
+
@provider.should_receive(:yum_command).with(
|
573
|
+
"yum -d0 -e0 -y remove emacs-1.0"
|
574
|
+
)
|
575
|
+
@provider.remove_package("emacs", "1.0")
|
576
|
+
end
|
577
|
+
|
578
|
+
it "should run yum remove with the package name and arch" do
|
579
|
+
@new_resource.stub!(:arch).and_return("x86_64")
|
580
|
+
@provider.should_receive(:yum_command).with(
|
581
|
+
"yum -d0 -e0 -y remove emacs-1.0.x86_64"
|
582
|
+
)
|
583
|
+
@provider.remove_package("emacs", "1.0")
|
584
|
+
end
|
585
|
+
end
|
586
|
+
|
587
|
+
describe "when purging a package" do
|
588
|
+
it "should run yum remove with the package name" do
|
589
|
+
@provider.should_receive(:yum_command).with(
|
590
|
+
"yum -d0 -e0 -y remove emacs-1.0"
|
591
|
+
)
|
592
|
+
@provider.purge_package("emacs", "1.0")
|
593
|
+
end
|
594
|
+
end
|
595
|
+
|
596
|
+
describe "when running yum" do
|
597
|
+
it "should run yum once if it exits with a return code of 0" do
|
598
|
+
@status = mock("Status", :exitstatus => 0)
|
599
|
+
@provider.stub!(:output_of_command).and_return([@status, "", ""])
|
600
|
+
@provider.should_receive(:output_of_command).once.with(
|
601
|
+
"yum -d0 -e0 -y install emacs-1.0",
|
602
|
+
{:timeout => Chef::Config[:yum_timeout]}
|
603
|
+
)
|
604
|
+
@provider.yum_command("yum -d0 -e0 -y install emacs-1.0")
|
605
|
+
end
|
606
|
+
|
607
|
+
it "should run yum once if it exits with a return code > 0 and no scriptlet failures" do
|
608
|
+
@status = mock("Status", :exitstatus => 2)
|
609
|
+
@provider.stub!(:output_of_command).and_return([@status, "failure failure", "problem problem"])
|
610
|
+
@provider.should_receive(:output_of_command).once.with(
|
611
|
+
"yum -d0 -e0 -y install emacs-1.0",
|
612
|
+
{:timeout => Chef::Config[:yum_timeout]}
|
613
|
+
)
|
614
|
+
lambda { @provider.yum_command("yum -d0 -e0 -y install emacs-1.0") }.should raise_error(Chef::Exceptions::Exec)
|
615
|
+
end
|
616
|
+
|
617
|
+
it "should run yum once if it exits with a return code of 1 and %pre scriptlet failures" do
|
618
|
+
@status = mock("Status", :exitstatus => 1)
|
619
|
+
@provider.stub!(:output_of_command).and_return([@status, "error: %pre(demo-1-1.el5.centos.x86_64) scriptlet failed, exit status 2", ""])
|
620
|
+
@provider.should_receive(:output_of_command).once.with(
|
621
|
+
"yum -d0 -e0 -y install emacs-1.0",
|
622
|
+
{:timeout => Chef::Config[:yum_timeout]}
|
623
|
+
)
|
624
|
+
# will still raise an exception, can't stub out the subsequent call
|
625
|
+
lambda { @provider.yum_command("yum -d0 -e0 -y install emacs-1.0") }.should raise_error(Chef::Exceptions::Exec)
|
626
|
+
end
|
627
|
+
|
628
|
+
it "should run yum twice if it exits with a return code of 1 and %post scriptlet failures" do
|
629
|
+
@status = mock("Status", :exitstatus => 1)
|
630
|
+
@provider.stub!(:output_of_command).and_return([@status, "error: %post(demo-1-1.el5.centos.x86_64) scriptlet failed, exit status 2", ""])
|
631
|
+
@provider.should_receive(:output_of_command).twice.with(
|
632
|
+
"yum -d0 -e0 -y install emacs-1.0",
|
633
|
+
{:timeout => Chef::Config[:yum_timeout]}
|
634
|
+
)
|
635
|
+
# will still raise an exception, can't stub out the subsequent call
|
636
|
+
lambda { @provider.yum_command("yum -d0 -e0 -y install emacs-1.0") }.should raise_error(Chef::Exceptions::Exec)
|
637
|
+
end
|
638
|
+
end
|
639
|
+
end
|
640
|
+
|
641
|
+
describe Chef::Provider::Package::Yum::RPMUtils do
|
642
|
+
describe "version_parse" do
|
643
|
+
before do
|
644
|
+
@rpmutils = Chef::Provider::Package::Yum::RPMUtils
|
645
|
+
end
|
646
|
+
|
647
|
+
it "parses known good epoch strings" do
|
648
|
+
[
|
649
|
+
[ "0:3.3", [ 0, "3.3", nil ] ],
|
650
|
+
[ "9:1.7.3", [ 9, "1.7.3", nil ] ],
|
651
|
+
[ "15:20020927", [ 15, "20020927", nil ] ]
|
652
|
+
].each do |x, y|
|
653
|
+
@rpmutils.version_parse(x).should == y
|
654
|
+
end
|
655
|
+
end
|
656
|
+
|
657
|
+
it "parses strange epoch strings" do
|
658
|
+
[
|
659
|
+
[ ":3.3", [ 0, "3.3", nil ] ],
|
660
|
+
[ "-1:1.7.3", [ nil, nil, "1:1.7.3" ] ],
|
661
|
+
[ "-:20020927", [ nil, nil, ":20020927" ] ]
|
662
|
+
].each do |x, y|
|
663
|
+
@rpmutils.version_parse(x).should == y
|
664
|
+
end
|
665
|
+
end
|
666
|
+
|
667
|
+
it "parses known good version strings" do
|
668
|
+
[
|
669
|
+
[ "3.3", [ nil, "3.3", nil ] ],
|
670
|
+
[ "1.7.3", [ nil, "1.7.3", nil ] ],
|
671
|
+
[ "20020927", [ nil, "20020927", nil ] ]
|
672
|
+
].each do |x, y|
|
673
|
+
@rpmutils.version_parse(x).should == y
|
674
|
+
end
|
675
|
+
end
|
676
|
+
|
677
|
+
it "parses strange version strings" do
|
678
|
+
[
|
679
|
+
[ "3..3", [ nil, "3..3", nil ] ],
|
680
|
+
[ "0001.7.3", [ nil, "0001.7.3", nil ] ],
|
681
|
+
[ "20020927,3", [ nil, "20020927,3", nil ] ]
|
682
|
+
].each do |x, y|
|
683
|
+
@rpmutils.version_parse(x).should == y
|
684
|
+
end
|
685
|
+
end
|
686
|
+
|
687
|
+
it "parses known good version release strings" do
|
688
|
+
[
|
689
|
+
[ "3.3-0.pre3.1.60.el5_5.1", [ nil, "3.3", "0.pre3.1.60.el5_5.1" ] ],
|
690
|
+
[ "1.7.3-1jpp.2.el5", [ nil, "1.7.3", "1jpp.2.el5" ] ],
|
691
|
+
[ "20020927-46.el5", [ nil, "20020927", "46.el5" ] ]
|
692
|
+
].each do |x, y|
|
693
|
+
@rpmutils.version_parse(x).should == y
|
694
|
+
end
|
695
|
+
end
|
696
|
+
|
697
|
+
it "parses strange version release strings" do
|
698
|
+
[
|
699
|
+
[ "3.3-", [ nil, "3.3", nil ] ],
|
700
|
+
[ "-1jpp.2.el5", [ nil, nil, "1jpp.2.el5" ] ],
|
701
|
+
[ "-0020020927-46.el5", [ nil, "-0020020927", "46.el5" ] ]
|
702
|
+
].each do |x, y|
|
703
|
+
@rpmutils.version_parse(x).should == y
|
704
|
+
end
|
705
|
+
end
|
706
|
+
end
|
707
|
+
|
708
|
+
describe "rpmvercmp" do
|
709
|
+
before do
|
710
|
+
@rpmutils = Chef::Provider::Package::Yum::RPMUtils
|
711
|
+
end
|
712
|
+
|
713
|
+
it "should validate version compare logic for standard examples" do
|
714
|
+
[
|
715
|
+
# numeric
|
716
|
+
[ "0.0.2", "0.0.1", 1 ],
|
717
|
+
[ "0.2.0", "0.1.0", 1 ],
|
718
|
+
[ "2.0.0", "1.0.0", 1 ],
|
719
|
+
[ "0.0.1", "0.0.1", 0 ],
|
720
|
+
[ "0.0.1", "0.0.2", -1 ],
|
721
|
+
[ "0.1.0", "0.2.0", -1 ],
|
722
|
+
[ "1.0.0", "2.0.0", -1 ],
|
723
|
+
# alpha
|
724
|
+
[ "bb", "aa", 1 ],
|
725
|
+
[ "ab", "aa", 1 ],
|
726
|
+
[ "aa", "aa", 0 ],
|
727
|
+
[ "aa", "bb", -1 ],
|
728
|
+
[ "aa", "ab", -1 ],
|
729
|
+
[ "BB", "AA", 1 ],
|
730
|
+
[ "AA", "AA", 0 ],
|
731
|
+
[ "AA", "BB", -1 ],
|
732
|
+
[ "aa", "AA", 1 ],
|
733
|
+
[ "AA", "aa", -1 ],
|
734
|
+
# alphanumeric
|
735
|
+
[ "0.0.1b", "0.0.1a", 1 ],
|
736
|
+
[ "0.1b.0", "0.1a.0", 1 ],
|
737
|
+
[ "1b.0.0", "1a.0.0", 1 ],
|
738
|
+
[ "0.0.1a", "0.0.1a", 0 ],
|
739
|
+
[ "0.0.1a", "0.0.1b", -1 ],
|
740
|
+
[ "0.1a.0", "0.1b.0", -1 ],
|
741
|
+
[ "1a.0.0", "1b.0.0", -1 ],
|
742
|
+
# alphanumeric against alphanumeric
|
743
|
+
[ "0.0.1", "0.0.a", 1 ],
|
744
|
+
[ "0.1.0", "0.a.0", 1 ],
|
745
|
+
[ "1.0.0", "a.0.0", 1 ],
|
746
|
+
[ "0.0.a", "0.0.a", 0 ],
|
747
|
+
[ "0.0.a", "0.0.1", -1 ],
|
748
|
+
[ "0.a.0", "0.1.0", -1 ],
|
749
|
+
[ "a.0.0", "1.0.0", -1 ],
|
750
|
+
# alphanumeric against numeric
|
751
|
+
[ "0.0.2", "0.0.1a", 1 ],
|
752
|
+
[ "0.0.2a", "0.0.1", 1 ],
|
753
|
+
[ "0.0.1", "0.0.2a", -1 ],
|
754
|
+
[ "0.0.1a", "0.0.2", -1 ],
|
755
|
+
# length
|
756
|
+
[ "0.0.1aa", "0.0.1a", 1 ],
|
757
|
+
[ "0.0.1aa", "0.0.1aa", 0 ],
|
758
|
+
[ "0.0.1a", "0.0.1aa", -1 ],
|
759
|
+
].each do |x, y, result|
|
760
|
+
@rpmutils.rpmvercmp(x,y).should == result
|
761
|
+
end
|
762
|
+
end
|
763
|
+
|
764
|
+
it "should validate version compare logic for strange examples" do
|
765
|
+
[
|
766
|
+
[ "2,0,0", "1.0.0", 1 ],
|
767
|
+
[ "0.0.1", "0,0.1", 0 ],
|
768
|
+
[ "1.0.0", "2,0,0", -1 ],
|
769
|
+
[ "002.0.0", "001.0.0", 1 ],
|
770
|
+
[ "001..0.1", "001..0.0", 1 ],
|
771
|
+
[ "-001..1", "-001..0", 1 ],
|
772
|
+
[ "1.0.1", nil, 1 ],
|
773
|
+
[ nil, nil, 0 ],
|
774
|
+
[ nil, "1.0.1", -1 ],
|
775
|
+
[ "1.0.1", "", 1 ],
|
776
|
+
[ "", "", 0 ],
|
777
|
+
[ "", "1.0.1", -1 ]
|
778
|
+
].each do |x, y, result|
|
779
|
+
@rpmutils.rpmvercmp(x,y).should == result
|
780
|
+
end
|
781
|
+
end
|
782
|
+
|
783
|
+
it "tests isalnum good input" do
|
784
|
+
[ 'a', 'z', 'A', 'Z', '0', '9' ].each do |t|
|
785
|
+
@rpmutils.isalnum(t).should == true
|
786
|
+
end
|
787
|
+
end
|
788
|
+
|
789
|
+
it "tests isalnum bad input" do
|
790
|
+
[ '-', '.', '!', '^', ':', '_' ].each do |t|
|
791
|
+
@rpmutils.isalnum(t).should == false
|
792
|
+
end
|
793
|
+
end
|
794
|
+
|
795
|
+
it "tests isalpha good input" do
|
796
|
+
[ 'a', 'z', 'A', 'Z', ].each do |t|
|
797
|
+
@rpmutils.isalpha(t).should == true
|
798
|
+
end
|
799
|
+
end
|
800
|
+
|
801
|
+
it "tests isalpha bad input" do
|
802
|
+
[ '0', '9', '-', '.', '!', '^', ':', '_' ].each do |t|
|
803
|
+
@rpmutils.isalpha(t).should == false
|
804
|
+
end
|
805
|
+
end
|
806
|
+
|
807
|
+
it "tests isdigit good input" do
|
808
|
+
[ '0', '9', ].each do |t|
|
809
|
+
@rpmutils.isdigit(t).should == true
|
810
|
+
end
|
811
|
+
end
|
812
|
+
|
813
|
+
it "tests isdigit bad input" do
|
814
|
+
[ 'A', 'z', '-', '.', '!', '^', ':', '_' ].each do |t|
|
815
|
+
@rpmutils.isdigit(t).should == false
|
816
|
+
end
|
817
|
+
end
|
818
|
+
end
|
819
|
+
|
820
|
+
end
|
821
|
+
|
822
|
+
describe Chef::Provider::Package::Yum::RPMVersion do
|
823
|
+
describe "new - with parsing" do
|
824
|
+
before do
|
825
|
+
@rpmv = Chef::Provider::Package::Yum::RPMVersion.new("1:1.6.5-9.36.el5")
|
826
|
+
end
|
827
|
+
|
828
|
+
it "should expose evr (name-version-release) available" do
|
829
|
+
@rpmv.e.should == 1
|
830
|
+
@rpmv.v.should == "1.6.5"
|
831
|
+
@rpmv.r.should == "9.36.el5"
|
832
|
+
|
833
|
+
@rpmv.evr.should == "1:1.6.5-9.36.el5"
|
834
|
+
end
|
835
|
+
|
836
|
+
it "should output a version-release string" do
|
837
|
+
@rpmv.to_s.should == "1.6.5-9.36.el5"
|
838
|
+
end
|
839
|
+
end
|
840
|
+
|
841
|
+
describe "new - no parsing" do
|
842
|
+
before do
|
843
|
+
@rpmv = Chef::Provider::Package::Yum::RPMVersion.new("1", "1.6.5", "9.36.el5")
|
844
|
+
end
|
845
|
+
|
846
|
+
it "should expose evr (name-version-release) available" do
|
847
|
+
@rpmv.e.should == 1
|
848
|
+
@rpmv.v.should == "1.6.5"
|
849
|
+
@rpmv.r.should == "9.36.el5"
|
850
|
+
|
851
|
+
@rpmv.evr.should == "1:1.6.5-9.36.el5"
|
852
|
+
end
|
853
|
+
|
854
|
+
it "should output a version-release string" do
|
855
|
+
@rpmv.to_s.should == "1.6.5-9.36.el5"
|
856
|
+
end
|
857
|
+
end
|
858
|
+
|
859
|
+
it "should raise an error unless passed 1 or 3 args" do
|
860
|
+
lambda {
|
861
|
+
Chef::Provider::Package::Yum::RPMVersion.new()
|
862
|
+
}.should raise_error(ArgumentError)
|
863
|
+
lambda {
|
864
|
+
Chef::Provider::Package::Yum::RPMVersion.new("1:1.6.5-9.36.el5")
|
865
|
+
}.should_not raise_error
|
866
|
+
lambda {
|
867
|
+
Chef::Provider::Package::Yum::RPMVersion.new("1:1.6.5-9.36.el5", "extra")
|
868
|
+
}.should raise_error(ArgumentError)
|
869
|
+
lambda {
|
870
|
+
Chef::Provider::Package::Yum::RPMVersion.new("1", "1.6.5", "9.36.el5")
|
871
|
+
}.should_not raise_error
|
872
|
+
lambda {
|
873
|
+
Chef::Provider::Package::Yum::RPMVersion.new("1", "1.6.5", "9.36.el5", "extra")
|
874
|
+
}.should raise_error(ArgumentError)
|
875
|
+
end
|
876
|
+
|
877
|
+
# thanks version_class_spec.rb!
|
878
|
+
describe "compare" do
|
879
|
+
it "should sort based on complete epoch-version-release data" do
|
880
|
+
[
|
881
|
+
# smaller, larger
|
882
|
+
[ "0:1.6.5-9.36.el5",
|
883
|
+
"1:1.6.5-9.36.el5" ],
|
884
|
+
[ "0:2.3-15.el5",
|
885
|
+
"0:3.3-15.el5" ],
|
886
|
+
[ "0:alpha9.8-27.2",
|
887
|
+
"0:beta9.8-27.2" ],
|
888
|
+
[ "0:0.09-14jpp.3",
|
889
|
+
"0:0.09-15jpp.3" ],
|
890
|
+
[ "0:0.9.0-0.6.20110211.el5",
|
891
|
+
"0:0.9.0-0.6.20120211.el5" ],
|
892
|
+
[ "0:1.9.1-4.el5",
|
893
|
+
"0:1.9.1-5.el5" ],
|
894
|
+
[ "0:1.4.10-7.20090624svn.el5",
|
895
|
+
"0:1.4.10-7.20090625svn.el5" ],
|
896
|
+
[ "0:2.3.4-2.el5",
|
897
|
+
"0:2.3.4-2.el6" ]
|
898
|
+
].each do |smaller, larger|
|
899
|
+
sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
|
900
|
+
lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
|
901
|
+
sm.should be < lg
|
902
|
+
lg.should be > sm
|
903
|
+
sm.should_not == lg
|
904
|
+
end
|
905
|
+
end
|
906
|
+
|
907
|
+
it "should sort based on partial epoch-version-release data" do
|
908
|
+
[
|
909
|
+
# smaller, larger
|
910
|
+
[ ":1.6.5-9.36.el5",
|
911
|
+
"1:1.6.5-9.36.el5" ],
|
912
|
+
[ "2.3-15.el5",
|
913
|
+
"3.3-15.el5" ],
|
914
|
+
[ "alpha9.8",
|
915
|
+
"beta9.8" ],
|
916
|
+
[ "14jpp",
|
917
|
+
"15jpp" ],
|
918
|
+
[ "0.9.0-0.6",
|
919
|
+
"0.9.0-0.7" ],
|
920
|
+
[ "0:1.9",
|
921
|
+
"3:1.9" ],
|
922
|
+
[ "2.3-2.el5",
|
923
|
+
"2.3-2.el6" ]
|
924
|
+
].each do |smaller, larger|
|
925
|
+
sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
|
926
|
+
lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
|
927
|
+
sm.should be < lg
|
928
|
+
lg.should be > sm
|
929
|
+
sm.should_not == lg
|
930
|
+
end
|
931
|
+
end
|
932
|
+
|
933
|
+
it "should verify equality of complete epoch-version-release data" do
|
934
|
+
[
|
935
|
+
[ "0:1.6.5-9.36.el5",
|
936
|
+
"0:1.6.5-9.36.el5" ],
|
937
|
+
[ "0:2.3-15.el5",
|
938
|
+
"0:2.3-15.el5" ],
|
939
|
+
[ "0:alpha9.8-27.2",
|
940
|
+
"0:alpha9.8-27.2" ]
|
941
|
+
].each do |smaller, larger|
|
942
|
+
sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
|
943
|
+
lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
|
944
|
+
sm.should be == lg
|
945
|
+
end
|
946
|
+
end
|
947
|
+
|
948
|
+
it "should verify equality of partial epoch-version-release data" do
|
949
|
+
[
|
950
|
+
[ ":1.6.5-9.36.el5",
|
951
|
+
"0:1.6.5-9.36.el5" ],
|
952
|
+
[ "2.3-15.el5",
|
953
|
+
"2.3-15.el5" ],
|
954
|
+
[ "alpha9.8-3",
|
955
|
+
"alpha9.8-3" ]
|
956
|
+
].each do |smaller, larger|
|
957
|
+
sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
|
958
|
+
lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
|
959
|
+
sm.should be == lg
|
960
|
+
end
|
961
|
+
end
|
962
|
+
end
|
963
|
+
|
964
|
+
describe "partial compare" do
|
965
|
+
it "should compare based on partial epoch-version-release data" do
|
966
|
+
[
|
967
|
+
# smaller, larger
|
968
|
+
[ "0:1.1.1-1",
|
969
|
+
"1:" ],
|
970
|
+
[ "0:1.1.1-1",
|
971
|
+
"0:1.1.2" ],
|
972
|
+
[ "0:1.1.1-1",
|
973
|
+
"0:1.1.2-1" ],
|
974
|
+
[ "0:",
|
975
|
+
"1:1.1.1-1" ],
|
976
|
+
[ "0:1.1.1",
|
977
|
+
"0:1.1.2-1" ],
|
978
|
+
[ "0:1.1.1-1",
|
979
|
+
"0:1.1.2-1" ],
|
980
|
+
].each do |smaller, larger|
|
981
|
+
sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
|
982
|
+
lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
|
983
|
+
sm.partial_compare(lg).should be == -1
|
984
|
+
lg.partial_compare(sm).should be == 1
|
985
|
+
sm.partial_compare(lg).should_not be == 0
|
986
|
+
end
|
987
|
+
end
|
988
|
+
|
989
|
+
it "should verify equality based on partial epoch-version-release data" do
|
990
|
+
[
|
991
|
+
[ "0:",
|
992
|
+
"0:1.1.1-1" ],
|
993
|
+
[ "0:1.1.1",
|
994
|
+
"0:1.1.1-1" ],
|
995
|
+
[ "0:1.1.1-1",
|
996
|
+
"0:1.1.1-1" ],
|
997
|
+
].each do |smaller, larger|
|
998
|
+
sm = Chef::Provider::Package::Yum::RPMVersion.new(smaller)
|
999
|
+
lg = Chef::Provider::Package::Yum::RPMVersion.new(larger)
|
1000
|
+
sm.partial_compare(lg).should be == 0
|
1001
|
+
end
|
1002
|
+
end
|
1003
|
+
end
|
1004
|
+
|
1005
|
+
end
|
1006
|
+
|
1007
|
+
describe Chef::Provider::Package::Yum::RPMPackage do
|
1008
|
+
describe "new - with parsing" do
|
1009
|
+
before do
|
1010
|
+
@rpm = Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5", "x86_64", [])
|
1011
|
+
end
|
1012
|
+
|
1013
|
+
it "should expose nevra (name-epoch-version-release-arch) available" do
|
1014
|
+
@rpm.name.should == "testing"
|
1015
|
+
@rpm.version.e.should == 1
|
1016
|
+
@rpm.version.v.should == "1.6.5"
|
1017
|
+
@rpm.version.r.should == "9.36.el5"
|
1018
|
+
@rpm.arch.should == "x86_64"
|
1019
|
+
|
1020
|
+
@rpm.nevra.should == "testing-1:1.6.5-9.36.el5.x86_64"
|
1021
|
+
@rpm.to_s.should == @rpm.nevra
|
1022
|
+
end
|
1023
|
+
|
1024
|
+
it "should always have at least one provide, itself" do
|
1025
|
+
@rpm.provides.size.should == 1
|
1026
|
+
@rpm.provides[0].name == "testing"
|
1027
|
+
@rpm.provides[0].version.evr == "1:1.6.5-9.36.el5"
|
1028
|
+
@rpm.provides[0].flag == :==
|
1029
|
+
end
|
1030
|
+
end
|
1031
|
+
|
1032
|
+
describe "new - no parsing" do
|
1033
|
+
before do
|
1034
|
+
@rpm = Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64", [])
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
it "should expose nevra (name-epoch-version-release-arch) available" do
|
1038
|
+
@rpm.name.should == "testing"
|
1039
|
+
@rpm.version.e.should == 1
|
1040
|
+
@rpm.version.v.should == "1.6.5"
|
1041
|
+
@rpm.version.r.should == "9.36.el5"
|
1042
|
+
@rpm.arch.should == "x86_64"
|
1043
|
+
|
1044
|
+
@rpm.nevra.should == "testing-1:1.6.5-9.36.el5.x86_64"
|
1045
|
+
@rpm.to_s.should == @rpm.nevra
|
1046
|
+
end
|
1047
|
+
|
1048
|
+
it "should always have at least one provide, itself" do
|
1049
|
+
@rpm.provides.size.should == 1
|
1050
|
+
@rpm.provides[0].name == "testing"
|
1051
|
+
@rpm.provides[0].version.evr == "1:1.6.5-9.36.el5"
|
1052
|
+
@rpm.provides[0].flag == :==
|
1053
|
+
end
|
1054
|
+
end
|
1055
|
+
|
1056
|
+
it "should raise an error unless passed 4 or 6 args" do
|
1057
|
+
lambda {
|
1058
|
+
Chef::Provider::Package::Yum::RPMPackage.new()
|
1059
|
+
}.should raise_error(ArgumentError)
|
1060
|
+
lambda {
|
1061
|
+
Chef::Provider::Package::Yum::RPMPackage.new("testing")
|
1062
|
+
}.should raise_error(ArgumentError)
|
1063
|
+
lambda {
|
1064
|
+
Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5")
|
1065
|
+
}.should raise_error(ArgumentError)
|
1066
|
+
lambda {
|
1067
|
+
Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5", "x86_64")
|
1068
|
+
}.should raise_error(ArgumentError)
|
1069
|
+
lambda {
|
1070
|
+
Chef::Provider::Package::Yum::RPMPackage.new("testing", "1:1.6.5-9.36.el5", "x86_64", [])
|
1071
|
+
}.should_not raise_error
|
1072
|
+
lambda {
|
1073
|
+
Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64")
|
1074
|
+
}.should raise_error(ArgumentError)
|
1075
|
+
lambda {
|
1076
|
+
Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64", [])
|
1077
|
+
}.should_not raise_error
|
1078
|
+
lambda {
|
1079
|
+
Chef::Provider::Package::Yum::RPMPackage.new("testing", "1", "1.6.5", "9.36.el5", "x86_64", [], "extra")
|
1080
|
+
}.should raise_error(ArgumentError)
|
1081
|
+
end
|
1082
|
+
|
1083
|
+
describe "<=>" do
|
1084
|
+
it "should sort alphabetically based on package name" do
|
1085
|
+
[
|
1086
|
+
[ "a-test",
|
1087
|
+
"b-test" ],
|
1088
|
+
[ "B-test",
|
1089
|
+
"a-test" ],
|
1090
|
+
[ "A-test",
|
1091
|
+
"B-test" ],
|
1092
|
+
[ "Aa-test",
|
1093
|
+
"aA-test" ],
|
1094
|
+
[ "1test",
|
1095
|
+
"2test" ],
|
1096
|
+
].each do |smaller, larger|
|
1097
|
+
sm = Chef::Provider::Package::Yum::RPMPackage.new(smaller, "0:0.0.1-1", "x86_64", [])
|
1098
|
+
lg = Chef::Provider::Package::Yum::RPMPackage.new(larger, "0:0.0.1-1", "x86_64", [])
|
1099
|
+
sm.should be < lg
|
1100
|
+
lg.should be > sm
|
1101
|
+
sm.should_not == lg
|
1102
|
+
end
|
1103
|
+
end
|
1104
|
+
|
1105
|
+
it "should sort alphabetically based on package arch" do
|
1106
|
+
[
|
1107
|
+
[ "i386",
|
1108
|
+
"x86_64" ],
|
1109
|
+
[ "i386",
|
1110
|
+
"noarch" ],
|
1111
|
+
[ "noarch",
|
1112
|
+
"x86_64" ],
|
1113
|
+
].each do |smaller, larger|
|
1114
|
+
sm = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "0:0.0.1-1", smaller, [])
|
1115
|
+
lg = Chef::Provider::Package::Yum::RPMPackage.new("test-package", "0:0.0.1-1", larger, [])
|
1116
|
+
sm.should be < lg
|
1117
|
+
lg.should be > sm
|
1118
|
+
sm.should_not == lg
|
1119
|
+
end
|
1120
|
+
end
|
1121
|
+
end
|
1122
|
+
|
1123
|
+
end
|
1124
|
+
|
1125
|
+
describe Chef::Provider::Package::Yum::RPMDbPackage do
|
1126
|
+
before(:each) do
|
1127
|
+
# name, version, arch, installed, available, repoid
|
1128
|
+
@rpm_x = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "noarch", [], false, true, "base")
|
1129
|
+
@rpm_y = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "noarch", [], true, true, "extras")
|
1130
|
+
@rpm_z = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "noarch", [], true, false, "other")
|
1131
|
+
end
|
1132
|
+
|
1133
|
+
describe "initialize" do
|
1134
|
+
it "should return a Chef::Provider::Package::Yum::RPMDbPackage object" do
|
1135
|
+
@rpm_x.should be_kind_of(Chef::Provider::Package::Yum::RPMDbPackage)
|
1136
|
+
end
|
1137
|
+
end
|
1138
|
+
|
1139
|
+
describe "available" do
|
1140
|
+
it "should return true" do
|
1141
|
+
@rpm_x.available.should be == true
|
1142
|
+
@rpm_y.available.should be == true
|
1143
|
+
@rpm_z.available.should be == false
|
1144
|
+
end
|
1145
|
+
end
|
1146
|
+
|
1147
|
+
describe "installed" do
|
1148
|
+
it "should return true" do
|
1149
|
+
@rpm_x.installed.should be == false
|
1150
|
+
@rpm_y.installed.should be == true
|
1151
|
+
@rpm_z.installed.should be == true
|
1152
|
+
end
|
1153
|
+
end
|
1154
|
+
|
1155
|
+
describe "repoid" do
|
1156
|
+
it "should return the source repository repoid" do
|
1157
|
+
@rpm_x.repoid.should be == "base"
|
1158
|
+
@rpm_y.repoid.should be == "extras"
|
1159
|
+
@rpm_z.repoid.should be == "other"
|
1160
|
+
end
|
1161
|
+
end
|
1162
|
+
end
|
1163
|
+
|
1164
|
+
describe Chef::Provider::Package::Yum::RPMDependency do
|
1165
|
+
describe "new - with parsing" do
|
1166
|
+
before do
|
1167
|
+
@rpmdep = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
|
1168
|
+
end
|
1169
|
+
|
1170
|
+
it "should expose name, version, flag available" do
|
1171
|
+
@rpmdep.name.should == "testing"
|
1172
|
+
@rpmdep.version.e.should == 1
|
1173
|
+
@rpmdep.version.v.should == "1.6.5"
|
1174
|
+
@rpmdep.version.r.should == "9.36.el5"
|
1175
|
+
@rpmdep.flag.should == :==
|
1176
|
+
end
|
1177
|
+
end
|
1178
|
+
|
1179
|
+
describe "new - no parsing" do
|
1180
|
+
before do
|
1181
|
+
@rpmdep = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1", "1.6.5", "9.36.el5", :==)
|
1182
|
+
end
|
1183
|
+
|
1184
|
+
it "should expose name, version, flag available" do
|
1185
|
+
@rpmdep.name.should == "testing"
|
1186
|
+
@rpmdep.version.e.should == 1
|
1187
|
+
@rpmdep.version.v.should == "1.6.5"
|
1188
|
+
@rpmdep.version.r.should == "9.36.el5"
|
1189
|
+
@rpmdep.flag.should == :==
|
1190
|
+
end
|
1191
|
+
end
|
1192
|
+
|
1193
|
+
it "should raise an error unless passed 3 or 5 args" do
|
1194
|
+
lambda {
|
1195
|
+
Chef::Provider::Package::Yum::RPMDependency.new()
|
1196
|
+
}.should raise_error(ArgumentError)
|
1197
|
+
lambda {
|
1198
|
+
Chef::Provider::Package::Yum::RPMDependency.new("testing")
|
1199
|
+
}.should raise_error(ArgumentError)
|
1200
|
+
lambda {
|
1201
|
+
Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5")
|
1202
|
+
}.should raise_error(ArgumentError)
|
1203
|
+
lambda {
|
1204
|
+
Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
|
1205
|
+
}.should_not raise_error
|
1206
|
+
lambda {
|
1207
|
+
Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==, "extra")
|
1208
|
+
}.should raise_error(ArgumentError)
|
1209
|
+
lambda {
|
1210
|
+
Chef::Provider::Package::Yum::RPMDependency.new("testing", "1", "1.6.5", "9.36.el5", :==)
|
1211
|
+
}.should_not raise_error
|
1212
|
+
lambda {
|
1213
|
+
Chef::Provider::Package::Yum::RPMDependency.new("testing", "1", "1.6.5", "9.36.el5", :==, "extra")
|
1214
|
+
}.should raise_error(ArgumentError)
|
1215
|
+
end
|
1216
|
+
|
1217
|
+
describe "parse" do
|
1218
|
+
it "should parse a name, flag, version string into a valid RPMDependency object" do
|
1219
|
+
@rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing >= 1:1.6.5-9.36.el5")
|
1220
|
+
|
1221
|
+
@rpmdep.name.should == "testing"
|
1222
|
+
@rpmdep.version.e.should == 1
|
1223
|
+
@rpmdep.version.v.should == "1.6.5"
|
1224
|
+
@rpmdep.version.r.should == "9.36.el5"
|
1225
|
+
@rpmdep.flag.should == :>=
|
1226
|
+
end
|
1227
|
+
|
1228
|
+
it "should parse a name into a valid RPMDependency object" do
|
1229
|
+
@rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing")
|
1230
|
+
|
1231
|
+
@rpmdep.name.should == "testing"
|
1232
|
+
@rpmdep.version.e.should == nil
|
1233
|
+
@rpmdep.version.v.should == nil
|
1234
|
+
@rpmdep.version.r.should == nil
|
1235
|
+
@rpmdep.flag.should == :==
|
1236
|
+
end
|
1237
|
+
|
1238
|
+
it "should parse an invalid string into the name of a RPMDependency object" do
|
1239
|
+
@rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing blah >")
|
1240
|
+
|
1241
|
+
@rpmdep.name.should == "testing blah >"
|
1242
|
+
@rpmdep.version.e.should == nil
|
1243
|
+
@rpmdep.version.v.should == nil
|
1244
|
+
@rpmdep.version.r.should == nil
|
1245
|
+
@rpmdep.flag.should == :==
|
1246
|
+
end
|
1247
|
+
|
1248
|
+
it "should parse various valid flags" do
|
1249
|
+
[
|
1250
|
+
[ ">", :> ],
|
1251
|
+
[ ">=", :>= ],
|
1252
|
+
[ "=", :== ],
|
1253
|
+
[ "==", :== ],
|
1254
|
+
[ "<=", :<= ],
|
1255
|
+
[ "<", :< ]
|
1256
|
+
].each do |before, after|
|
1257
|
+
@rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing #{before} 1:1.1-1")
|
1258
|
+
@rpmdep.flag.should == after
|
1259
|
+
end
|
1260
|
+
end
|
1261
|
+
|
1262
|
+
it "should parse various invalid flags and treat them as names" do
|
1263
|
+
[
|
1264
|
+
[ "<>", :== ],
|
1265
|
+
[ "!=", :== ],
|
1266
|
+
[ ">>", :== ],
|
1267
|
+
[ "<<", :== ],
|
1268
|
+
[ "!", :== ],
|
1269
|
+
[ "~", :== ]
|
1270
|
+
].each do |before, after|
|
1271
|
+
@rpmdep = Chef::Provider::Package::Yum::RPMDependency.parse("testing #{before} 1:1.1-1")
|
1272
|
+
@rpmdep.name.should == "testing #{before} 1:1.1-1"
|
1273
|
+
@rpmdep.flag.should == after
|
1274
|
+
end
|
1275
|
+
end
|
1276
|
+
end
|
1277
|
+
|
1278
|
+
describe "satisfy?" do
|
1279
|
+
it "should raise an error unless a RPMDependency is passed" do
|
1280
|
+
@rpmprovide = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
|
1281
|
+
@rpmrequire = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :>=)
|
1282
|
+
lambda {
|
1283
|
+
@rpmprovide.satisfy?("hi")
|
1284
|
+
}.should raise_error(ArgumentError)
|
1285
|
+
lambda {
|
1286
|
+
@rpmprovide.satisfy?(@rpmrequire)
|
1287
|
+
}.should_not raise_error
|
1288
|
+
end
|
1289
|
+
|
1290
|
+
it "should validate dependency satisfaction logic for standard examples" do
|
1291
|
+
[
|
1292
|
+
# names
|
1293
|
+
[ "test", "test", true ],
|
1294
|
+
[ "test", "foo", false ],
|
1295
|
+
# full: epoch:version-relese
|
1296
|
+
[ "testing = 1:1.1-1", "testing > 1:1.1-0", true ],
|
1297
|
+
[ "testing = 1:1.1-1", "testing >= 1:1.1-0", true ],
|
1298
|
+
[ "testing = 1:1.1-1", "testing >= 1:1.1-1", true ],
|
1299
|
+
[ "testing = 1:1.1-1", "testing = 1:1.1-1", true ],
|
1300
|
+
[ "testing = 1:1.1-1", "testing == 1:1.1-1", true ],
|
1301
|
+
[ "testing = 1:1.1-1", "testing <= 1:1.1-1", true ],
|
1302
|
+
[ "testing = 1:1.1-1", "testing <= 1:1.1-0", false ],
|
1303
|
+
[ "testing = 1:1.1-1", "testing < 1:1.1-0", false ],
|
1304
|
+
# partial: epoch:version
|
1305
|
+
[ "testing = 1:1.1", "testing > 1:1.0", true ],
|
1306
|
+
[ "testing = 1:1.1", "testing >= 1:1.0", true ],
|
1307
|
+
[ "testing = 1:1.1", "testing >= 1:1.1", true ],
|
1308
|
+
[ "testing = 1:1.1", "testing = 1:1.1", true ],
|
1309
|
+
[ "testing = 1:1.1", "testing == 1:1.1", true ],
|
1310
|
+
[ "testing = 1:1.1", "testing <= 1:1.1", true ],
|
1311
|
+
[ "testing = 1:1.1", "testing <= 1:1.0", false ],
|
1312
|
+
[ "testing = 1:1.1", "testing < 1:1.0", false ],
|
1313
|
+
# partial: epoch
|
1314
|
+
[ "testing = 1:", "testing > 0:", true ],
|
1315
|
+
[ "testing = 1:", "testing >= 0:", true ],
|
1316
|
+
[ "testing = 1:", "testing >= 1:", true ],
|
1317
|
+
[ "testing = 1:", "testing = 1:", true ],
|
1318
|
+
[ "testing = 1:", "testing == 1:", true ],
|
1319
|
+
[ "testing = 1:", "testing <= 1:", true ],
|
1320
|
+
[ "testing = 1:", "testing <= 0:", false ],
|
1321
|
+
[ "testing = 1:", "testing < 0:", false ],
|
1322
|
+
# mix and match!
|
1323
|
+
[ "testing = 1:1.1-1", "testing == 1:1.1", true ],
|
1324
|
+
[ "testing = 1:1.1-1", "testing == 1:", true ],
|
1325
|
+
].each do |prov, req, result|
|
1326
|
+
@rpmprovide = Chef::Provider::Package::Yum::RPMDependency.parse(prov)
|
1327
|
+
@rpmrequire = Chef::Provider::Package::Yum::RPMDependency.parse(req)
|
1328
|
+
|
1329
|
+
@rpmprovide.satisfy?(@rpmrequire).should == result
|
1330
|
+
@rpmrequire.satisfy?(@rpmprovide).should == result
|
1331
|
+
end
|
1332
|
+
end
|
1333
|
+
end
|
1334
|
+
|
1335
|
+
end
|
1336
|
+
|
1337
|
+
# thanks resource_collection_spec.rb!
|
1338
|
+
describe Chef::Provider::Package::Yum::RPMDb do
|
1339
|
+
before(:each) do
|
1340
|
+
@rpmdb = Chef::Provider::Package::Yum::RPMDb.new
|
1341
|
+
# name, version, arch, installed, available
|
1342
|
+
deps_v = [
|
1343
|
+
Chef::Provider::Package::Yum::RPMDependency.parse("libz.so.1()(64bit)"),
|
1344
|
+
Chef::Provider::Package::Yum::RPMDependency.parse("test-package-a = 0:1.6.5-9.36.el5")
|
1345
|
+
]
|
1346
|
+
deps_z = [
|
1347
|
+
Chef::Provider::Package::Yum::RPMDependency.parse("libz.so.1()(64bit)"),
|
1348
|
+
Chef::Provider::Package::Yum::RPMDependency.parse("config(test) = 0:1.6.5-9.36.el5"),
|
1349
|
+
Chef::Provider::Package::Yum::RPMDependency.parse("test-package-c = 0:1.6.5-9.36.el5")
|
1350
|
+
]
|
1351
|
+
@rpm_v = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-a", "0:1.6.5-9.36.el5", "i386", deps_v, true, false, "base")
|
1352
|
+
@rpm_w = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "i386", [], true, true, "extras")
|
1353
|
+
@rpm_x = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "0:1.6.5-9.36.el5", "x86_64", [], false, true, "extras")
|
1354
|
+
@rpm_y = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-b", "1:1.6.5-9.36.el5", "x86_64", [], true, true, "extras")
|
1355
|
+
@rpm_z = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-c", "0:1.6.5-9.36.el5", "noarch", deps_z, true, true, "base")
|
1356
|
+
@rpm_z_mirror = Chef::Provider::Package::Yum::RPMDbPackage.new("test-package-c", "0:1.6.5-9.36.el5", "noarch", deps_z, true, true, "base")
|
1357
|
+
end
|
1358
|
+
|
1359
|
+
describe "initialize" do
|
1360
|
+
it "should return a Chef::Provider::Package::Yum::RPMDb object" do
|
1361
|
+
@rpmdb.should be_kind_of(Chef::Provider::Package::Yum::RPMDb)
|
1362
|
+
end
|
1363
|
+
end
|
1364
|
+
|
1365
|
+
describe "push" do
|
1366
|
+
it "should accept an RPMDbPackage object through pushing" do
|
1367
|
+
lambda { @rpmdb.push(@rpm_w) }.should_not raise_error
|
1368
|
+
end
|
1369
|
+
|
1370
|
+
it "should accept multiple RPMDbPackage object through pushing" do
|
1371
|
+
lambda { @rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z) }.should_not raise_error
|
1372
|
+
end
|
1373
|
+
|
1374
|
+
it "should only accept an RPMDbPackage object" do
|
1375
|
+
lambda { @rpmdb.push("string") }.should raise_error
|
1376
|
+
end
|
1377
|
+
|
1378
|
+
it "should add the package to the package db" do
|
1379
|
+
@rpmdb.push(@rpm_w)
|
1380
|
+
@rpmdb["test-package-b"].should_not be == nil
|
1381
|
+
end
|
1382
|
+
|
1383
|
+
it "should add conditionally add the package to the available list" do
|
1384
|
+
@rpmdb.available_size.should be == 0
|
1385
|
+
@rpmdb.push(@rpm_v, @rpm_w)
|
1386
|
+
@rpmdb.available_size.should be == 1
|
1387
|
+
end
|
1388
|
+
|
1389
|
+
it "should add conditionally add the package to the installed list" do
|
1390
|
+
@rpmdb.installed_size.should be == 0
|
1391
|
+
@rpmdb.push(@rpm_w, @rpm_x)
|
1392
|
+
@rpmdb.installed_size.should be == 1
|
1393
|
+
end
|
1394
|
+
|
1395
|
+
it "should have a total of 2 packages in the RPMDb" do
|
1396
|
+
@rpmdb.size.should be == 0
|
1397
|
+
@rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
|
1398
|
+
@rpmdb.size.should be == 2
|
1399
|
+
end
|
1400
|
+
|
1401
|
+
it "should keep the Array unique when a duplicate is pushed" do
|
1402
|
+
@rpmdb.push(@rpm_z, @rpm_z_mirror)
|
1403
|
+
@rpmdb["test-package-c"].size.should be == 1
|
1404
|
+
end
|
1405
|
+
|
1406
|
+
it "should register the package provides in the provides index" do
|
1407
|
+
@rpmdb.push(@rpm_v, @rpm_w, @rpm_z)
|
1408
|
+
@rpmdb.lookup_provides("test-package-a")[0].should be == @rpm_v
|
1409
|
+
@rpmdb.lookup_provides("config(test)")[0].should be == @rpm_z
|
1410
|
+
@rpmdb.lookup_provides("libz.so.1()(64bit)")[0].should be == @rpm_v
|
1411
|
+
@rpmdb.lookup_provides("libz.so.1()(64bit)")[1].should be == @rpm_z
|
1412
|
+
end
|
1413
|
+
end
|
1414
|
+
|
1415
|
+
describe "<<" do
|
1416
|
+
it "should accept an RPMPackage object through the << operator" do
|
1417
|
+
lambda { @rpmdb << @rpm_w }.should_not raise_error
|
1418
|
+
end
|
1419
|
+
end
|
1420
|
+
|
1421
|
+
describe "lookup" do
|
1422
|
+
it "should return an Array of RPMPackage objects by index" do
|
1423
|
+
@rpmdb << @rpm_w
|
1424
|
+
@rpmdb.lookup("test-package-b").should be_kind_of(Array)
|
1425
|
+
end
|
1426
|
+
end
|
1427
|
+
|
1428
|
+
describe "[]" do
|
1429
|
+
it "should return an Array of RPMPackage objects though the [index] operator" do
|
1430
|
+
@rpmdb << @rpm_w
|
1431
|
+
@rpmdb["test-package-b"].should be_kind_of(Array)
|
1432
|
+
end
|
1433
|
+
|
1434
|
+
it "should return an Array of 3 RPMPackage objects" do
|
1435
|
+
@rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
|
1436
|
+
@rpmdb["test-package-b"].size.should be == 3
|
1437
|
+
end
|
1438
|
+
|
1439
|
+
it "should return an Array of RPMPackage objects sorted from newest to oldest" do
|
1440
|
+
@rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
|
1441
|
+
@rpmdb["test-package-b"][0].should be == @rpm_y
|
1442
|
+
@rpmdb["test-package-b"][1].should be == @rpm_x
|
1443
|
+
@rpmdb["test-package-b"][2].should be == @rpm_w
|
1444
|
+
end
|
1445
|
+
end
|
1446
|
+
|
1447
|
+
describe "lookup_provides" do
|
1448
|
+
it "should return an Array of RPMPackage objects by index" do
|
1449
|
+
@rpmdb << @rpm_z
|
1450
|
+
x = @rpmdb.lookup_provides("config(test)")
|
1451
|
+
x.should be_kind_of(Array)
|
1452
|
+
x[0].should be == @rpm_z
|
1453
|
+
end
|
1454
|
+
end
|
1455
|
+
|
1456
|
+
describe "clear" do
|
1457
|
+
it "should clear the RPMDb" do
|
1458
|
+
@rpmdb.should_receive(:clear_available).once
|
1459
|
+
@rpmdb.should_receive(:clear_installed).once
|
1460
|
+
@rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
|
1461
|
+
@rpmdb.size.should_not be == 0
|
1462
|
+
@rpmdb.lookup_provides("config(test)").should be_kind_of(Array)
|
1463
|
+
@rpmdb.clear
|
1464
|
+
@rpmdb.lookup_provides("config(test)").should be == nil
|
1465
|
+
@rpmdb.size.should be == 0
|
1466
|
+
end
|
1467
|
+
end
|
1468
|
+
|
1469
|
+
describe "clear_available" do
|
1470
|
+
it "should clear the available list" do
|
1471
|
+
@rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
|
1472
|
+
@rpmdb.available_size.should_not be == 0
|
1473
|
+
@rpmdb.clear_available
|
1474
|
+
@rpmdb.available_size.should be == 0
|
1475
|
+
end
|
1476
|
+
end
|
1477
|
+
|
1478
|
+
describe "available?" do
|
1479
|
+
it "should return true if a package is available" do
|
1480
|
+
@rpmdb.available?(@rpm_w).should be == false
|
1481
|
+
@rpmdb.push(@rpm_v, @rpm_w)
|
1482
|
+
@rpmdb.available?(@rpm_v).should be == false
|
1483
|
+
@rpmdb.available?(@rpm_w).should be == true
|
1484
|
+
end
|
1485
|
+
end
|
1486
|
+
|
1487
|
+
describe "clear_installed" do
|
1488
|
+
it "should clear the installed list" do
|
1489
|
+
@rpmdb.push(@rpm_w, @rpm_x, @rpm_y, @rpm_z)
|
1490
|
+
@rpmdb.installed_size.should_not be == 0
|
1491
|
+
@rpmdb.clear_installed
|
1492
|
+
@rpmdb.installed_size.should be == 0
|
1493
|
+
end
|
1494
|
+
end
|
1495
|
+
|
1496
|
+
describe "installed?" do
|
1497
|
+
it "should return true if a package is installed" do
|
1498
|
+
@rpmdb.installed?(@rpm_w).should be == false
|
1499
|
+
@rpmdb.push(@rpm_w, @rpm_x)
|
1500
|
+
@rpmdb.installed?(@rpm_w).should be == true
|
1501
|
+
@rpmdb.installed?(@rpm_x).should be == false
|
1502
|
+
end
|
1503
|
+
end
|
1504
|
+
|
1505
|
+
describe "whatprovides" do
|
1506
|
+
it "should raise an error unless a RPMDependency is passed" do
|
1507
|
+
@rpmprovide = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :==)
|
1508
|
+
@rpmrequire = Chef::Provider::Package::Yum::RPMDependency.new("testing", "1:1.6.5-9.36.el5", :>=)
|
1509
|
+
lambda {
|
1510
|
+
@rpmdb.whatprovides("hi")
|
1511
|
+
}.should raise_error(ArgumentError)
|
1512
|
+
lambda {
|
1513
|
+
@rpmdb.whatprovides(@rpmrequire)
|
1514
|
+
}.should_not raise_error
|
1515
|
+
end
|
1516
|
+
|
1517
|
+
it "should return an Array of packages statisfying a RPMDependency" do
|
1518
|
+
@rpmdb.push(@rpm_v, @rpm_w, @rpm_z)
|
1519
|
+
|
1520
|
+
@rpmrequire = Chef::Provider::Package::Yum::RPMDependency.parse("test-package-a >= 1.6.5")
|
1521
|
+
x = @rpmdb.whatprovides(@rpmrequire)
|
1522
|
+
x.should be_kind_of(Array)
|
1523
|
+
x[0].should be == @rpm_v
|
1524
|
+
|
1525
|
+
@rpmrequire = Chef::Provider::Package::Yum::RPMDependency.parse("libz.so.1()(64bit)")
|
1526
|
+
x = @rpmdb.whatprovides(@rpmrequire)
|
1527
|
+
x.should be_kind_of(Array)
|
1528
|
+
x[0].should be == @rpm_v
|
1529
|
+
x[1].should be == @rpm_z
|
1530
|
+
end
|
1531
|
+
end
|
1532
|
+
|
1533
|
+
end
|
1534
|
+
|
1535
|
+
describe Chef::Provider::Package::Yum::YumCache do
|
1536
|
+
# allow for the reset of a Singleton
|
1537
|
+
# thanks to Ian White (http://blog.ardes.com/2006/12/11/testing-singletons-with-ruby)
|
1538
|
+
class << Chef::Provider::Package::Yum::YumCache
|
1539
|
+
def reset_instance
|
1540
|
+
Singleton.send :__init__, self
|
1541
|
+
self
|
1542
|
+
end
|
1543
|
+
end
|
1544
|
+
|
1545
|
+
before(:each) do
|
1546
|
+
@stdin = mock("STDIN", :nil_object => true)
|
1547
|
+
@stdout = mock("STDOUT", :nil_object => true)
|
1548
|
+
|
1549
|
+
@stdout_good = <<EOF
|
1550
|
+
[option installonlypkgs] kernel kernel-bigmem kernel-enterprise
|
1551
|
+
erlang-mochiweb 0 1.4.1 5.el5 x86_64 ['erlang-mochiweb = 1.4.1-5.el5', 'mochiweb = 1.4.1-5.el5'] i installed
|
1552
|
+
zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
|
1553
|
+
zisofs-tools 0 1.0.6 3.2.2 x86_64 [] a extras
|
1554
|
+
zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] r base
|
1555
|
+
zlib 0 1.2.3 3 i386 ['zlib = 1.2.3-3', 'libz.so.1'] r base
|
1556
|
+
zlib-devel 0 1.2.3 3 i386 [] a extras
|
1557
|
+
zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] r base
|
1558
|
+
znc 0 0.098 1.el5 x86_64 [] a base
|
1559
|
+
znc-devel 0 0.098 1.el5 i386 [] a extras
|
1560
|
+
znc-devel 0 0.098 1.el5 x86_64 [] a base
|
1561
|
+
znc-extra 0 0.098 1.el5 x86_64 [] a base
|
1562
|
+
znc-modtcl 0 0.098 1.el5 x86_64 [] a base
|
1563
|
+
znc-test.beta1 0 0.098 1.el5 x86_64 [] a extras
|
1564
|
+
znc-test.test.beta1 0 0.098 1.el5 x86_64 [] a base
|
1565
|
+
EOF
|
1566
|
+
@stdout_bad_type = <<EOF
|
1567
|
+
zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
|
1568
|
+
zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] c base
|
1569
|
+
zlib-devel 0 1.2.3 3 i386 [] a extras
|
1570
|
+
zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] bad installed
|
1571
|
+
znc-modtcl 0 0.098 1.el5 x86_64 [] a base
|
1572
|
+
EOF
|
1573
|
+
|
1574
|
+
@stdout_bad_separators = <<EOF
|
1575
|
+
zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
|
1576
|
+
zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] i base bad
|
1577
|
+
zlib-devel 0 1.2.3 3 i386 [] a extras
|
1578
|
+
bad zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] i installed
|
1579
|
+
znc-modtcl 0 0.098 1.el5 x86_64 [] a base bad
|
1580
|
+
EOF
|
1581
|
+
|
1582
|
+
@stdout_no_output = ""
|
1583
|
+
|
1584
|
+
@stderr = <<EOF
|
1585
|
+
yum-dump Config Error: File contains no section headers.
|
1586
|
+
file: file://///etc/yum.repos.d/CentOS-Base.repo, line: 12
|
1587
|
+
'qeqwewe\n'
|
1588
|
+
EOF
|
1589
|
+
@status = mock("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_good, :stderr => @stderr)
|
1590
|
+
|
1591
|
+
# new singleton each time
|
1592
|
+
Chef::Provider::Package::Yum::YumCache.reset_instance
|
1593
|
+
@yc = Chef::Provider::Package::Yum::YumCache.instance
|
1594
|
+
# load valid data
|
1595
|
+
@yc.stub!(:shell_out!).and_return(@status)
|
1596
|
+
end
|
1597
|
+
|
1598
|
+
describe "initialize" do
|
1599
|
+
it "should return a Chef::Provider::Package::Yum::YumCache object" do
|
1600
|
+
@yc.should be_kind_of(Chef::Provider::Package::Yum::YumCache)
|
1601
|
+
end
|
1602
|
+
|
1603
|
+
it "should register reload for start of Chef::Client runs" do
|
1604
|
+
Chef::Provider::Package::Yum::YumCache.reset_instance
|
1605
|
+
Chef::Client.should_receive(:when_run_starts) do |&b|
|
1606
|
+
b.should_not be_nil
|
1607
|
+
end
|
1608
|
+
@yc = Chef::Provider::Package::Yum::YumCache.instance
|
1609
|
+
end
|
1610
|
+
end
|
1611
|
+
|
1612
|
+
describe "refresh" do
|
1613
|
+
it "should implicitly call yum-dump.py only once by default after being instantiated" do
|
1614
|
+
@yc.should_receive(:shell_out!).once
|
1615
|
+
@yc.installed_version("zlib")
|
1616
|
+
@yc.reset
|
1617
|
+
@yc.installed_version("zlib")
|
1618
|
+
end
|
1619
|
+
|
1620
|
+
it "should run yum-dump.py using the system python when next_refresh is for :all" do
|
1621
|
+
@yc.reload
|
1622
|
+
@yc.should_receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides$}, :timeout=>Chef::Config[:yum_timeout])
|
1623
|
+
@yc.refresh
|
1624
|
+
end
|
1625
|
+
|
1626
|
+
it "should run yum-dump.py with the installed flag when next_refresh is for :installed" do
|
1627
|
+
@yc.reload_installed
|
1628
|
+
@yc.should_receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --installed$}, :timeout=>Chef::Config[:yum_timeout])
|
1629
|
+
@yc.refresh
|
1630
|
+
end
|
1631
|
+
|
1632
|
+
it "should run yum-dump.py with the all-provides flag when next_refresh is for :provides" do
|
1633
|
+
@yc.reload_provides
|
1634
|
+
@yc.should_receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --all-provides$}, :timeout=>Chef::Config[:yum_timeout])
|
1635
|
+
@yc.refresh
|
1636
|
+
end
|
1637
|
+
|
1638
|
+
it "should pass extra_repo_control args to yum-dump.py" do
|
1639
|
+
@yc.enable_extra_repo_control("--enablerepo=foo --disablerepo=bar")
|
1640
|
+
@yc.should_receive(:shell_out!).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides --enablerepo=foo --disablerepo=bar$}, :timeout=>Chef::Config[:yum_timeout])
|
1641
|
+
@yc.refresh
|
1642
|
+
end
|
1643
|
+
|
1644
|
+
it "should warn about invalid data with too many separators" do
|
1645
|
+
@status = mock("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_bad_separators, :stderr => @stderr)
|
1646
|
+
@yc.stub!(:shell_out!).and_return(@status)
|
1647
|
+
Chef::Log.should_receive(:warn).exactly(3).times.with(%r{Problem parsing})
|
1648
|
+
@yc.refresh
|
1649
|
+
end
|
1650
|
+
|
1651
|
+
it "should warn about invalid data with an incorrect type" do
|
1652
|
+
@status = mock("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_bad_type, :stderr => @stderr)
|
1653
|
+
@yc.stub!(:shell_out!).and_return(@status)
|
1654
|
+
Chef::Log.should_receive(:warn).exactly(2).times.with(%r{Problem parsing})
|
1655
|
+
@yc.refresh
|
1656
|
+
end
|
1657
|
+
|
1658
|
+
it "should warn about no output from yum-dump.py" do
|
1659
|
+
@status = mock("Status", :exitstatus => 0, :stdin => @stdin, :stdout => @stdout_no_output, :stderr => @stderr)
|
1660
|
+
@yc.stub!(:shell_out!).and_return(@status)
|
1661
|
+
Chef::Log.should_receive(:warn).exactly(1).times.with(%r{no output from yum-dump.py})
|
1662
|
+
@yc.refresh
|
1663
|
+
end
|
1664
|
+
|
1665
|
+
it "should raise exception yum-dump.py exits with a non zero status" do
|
1666
|
+
@status = mock("Status", :exitstatus => 1, :stdin => @stdin, :stdout => @stdout_no_output, :stderr => @stderr)
|
1667
|
+
@yc.stub!(:shell_out!).and_return(@status)
|
1668
|
+
lambda { @yc.refresh}.should raise_error(Chef::Exceptions::Package, %r{CentOS-Base.repo, line: 12})
|
1669
|
+
end
|
1670
|
+
|
1671
|
+
it "should parse type 'i' into an installed state for a package" do
|
1672
|
+
@yc.available_version("erlang-mochiweb").should be == nil
|
1673
|
+
@yc.installed_version("erlang-mochiweb").should_not be == nil
|
1674
|
+
end
|
1675
|
+
|
1676
|
+
it "should parse type 'a' into an available state for a package" do
|
1677
|
+
@yc.available_version("znc").should_not be == nil
|
1678
|
+
@yc.installed_version("znc").should be == nil
|
1679
|
+
end
|
1680
|
+
|
1681
|
+
it "should parse type 'r' into an installed and available states for a package" do
|
1682
|
+
@yc.available_version("zip").should_not be == nil
|
1683
|
+
@yc.installed_version("zip").should_not be == nil
|
1684
|
+
end
|
1685
|
+
|
1686
|
+
it "should parse installonlypkgs from yum-dump.py options output" do
|
1687
|
+
@yc.allow_multi_install.should be == %w{kernel kernel-bigmem kernel-enterprise}
|
1688
|
+
end
|
1689
|
+
end
|
1690
|
+
|
1691
|
+
describe "installed_version" do
|
1692
|
+
it "should take one or two arguments" do
|
1693
|
+
lambda { @yc.installed_version("zip") }.should_not raise_error(ArgumentError)
|
1694
|
+
lambda { @yc.installed_version("zip", "i386") }.should_not raise_error(ArgumentError)
|
1695
|
+
lambda { @yc.installed_version("zip", "i386", "extra") }.should raise_error(ArgumentError)
|
1696
|
+
end
|
1697
|
+
|
1698
|
+
it "should return version-release for matching package regardless of arch" do
|
1699
|
+
@yc.installed_version("zip", "x86_64").should be == "2.31-2.el5"
|
1700
|
+
@yc.installed_version("zip", nil).should be == "2.31-2.el5"
|
1701
|
+
end
|
1702
|
+
|
1703
|
+
it "should return version-release for matching package and arch" do
|
1704
|
+
@yc.installed_version("zip", "x86_64").should be == "2.31-2.el5"
|
1705
|
+
@yc.installed_version("zisofs-tools", "i386").should be == nil
|
1706
|
+
end
|
1707
|
+
|
1708
|
+
it "should return nil for an unmatched package" do
|
1709
|
+
@yc.installed_version(nil, nil).should be == nil
|
1710
|
+
@yc.installed_version("test1", nil).should be == nil
|
1711
|
+
@yc.installed_version("test2", "x86_64").should be == nil
|
1712
|
+
end
|
1713
|
+
end
|
1714
|
+
|
1715
|
+
describe "available_version" do
|
1716
|
+
it "should take one or two arguments" do
|
1717
|
+
lambda { @yc.available_version("zisofs-tools") }.should_not raise_error(ArgumentError)
|
1718
|
+
lambda { @yc.available_version("zisofs-tools", "i386") }.should_not raise_error(ArgumentError)
|
1719
|
+
lambda { @yc.available_version("zisofs-tools", "i386", "extra") }.should raise_error(ArgumentError)
|
1720
|
+
end
|
1721
|
+
|
1722
|
+
it "should return version-release for matching package regardless of arch" do
|
1723
|
+
@yc.available_version("zip", "x86_64").should be == "2.31-2.el5"
|
1724
|
+
@yc.available_version("zip", nil).should be == "2.31-2.el5"
|
1725
|
+
end
|
1726
|
+
|
1727
|
+
it "should return version-release for matching package and arch" do
|
1728
|
+
@yc.available_version("zip", "x86_64").should be == "2.31-2.el5"
|
1729
|
+
@yc.available_version("zisofs-tools", "i386").should be == nil
|
1730
|
+
end
|
1731
|
+
|
1732
|
+
it "should return nil for an unmatched package" do
|
1733
|
+
@yc.available_version(nil, nil).should be == nil
|
1734
|
+
@yc.available_version("test1", nil).should be == nil
|
1735
|
+
@yc.available_version("test2", "x86_64").should be == nil
|
1736
|
+
end
|
1737
|
+
end
|
1738
|
+
|
1739
|
+
describe "version_available?" do
|
1740
|
+
it "should take two or three arguments" do
|
1741
|
+
lambda { @yc.version_available?("zisofs-tools") }.should raise_error(ArgumentError)
|
1742
|
+
lambda { @yc.version_available?("zisofs-tools", "1.0.6-3.2.2") }.should_not raise_error(ArgumentError)
|
1743
|
+
lambda { @yc.version_available?("zisofs-tools", "1.0.6-3.2.2", "x86_64") }.should_not raise_error(ArgumentError)
|
1744
|
+
end
|
1745
|
+
|
1746
|
+
it "should return true if our package-version-arch is available" do
|
1747
|
+
@yc.version_available?("zisofs-tools", "1.0.6-3.2.2", "x86_64").should be == true
|
1748
|
+
end
|
1749
|
+
|
1750
|
+
it "should return true if our package-version, no arch, is available" do
|
1751
|
+
@yc.version_available?("zisofs-tools", "1.0.6-3.2.2", nil).should be == true
|
1752
|
+
@yc.version_available?("zisofs-tools", "1.0.6-3.2.2").should be == true
|
1753
|
+
end
|
1754
|
+
|
1755
|
+
it "should return false if our package-version-arch isn't available" do
|
1756
|
+
@yc.version_available?("zisofs-tools", "1.0.6-3.2.2", "pretend").should be == false
|
1757
|
+
@yc.version_available?("zisofs-tools", "pretend", "x86_64").should be == false
|
1758
|
+
@yc.version_available?("pretend", "1.0.6-3.2.2", "x86_64").should be == false
|
1759
|
+
end
|
1760
|
+
|
1761
|
+
it "should return false if our package-version, no arch, isn't available" do
|
1762
|
+
@yc.version_available?("zisofs-tools", "pretend", nil).should be == false
|
1763
|
+
@yc.version_available?("zisofs-tools", "pretend").should be == false
|
1764
|
+
@yc.version_available?("pretend", "1.0.6-3.2.2").should be == false
|
1765
|
+
end
|
1766
|
+
end
|
1767
|
+
|
1768
|
+
describe "package_repository" do
|
1769
|
+
it "should take two or three arguments" do
|
1770
|
+
lambda { @yc.package_repository("zisofs-tools") }.should raise_error(ArgumentError)
|
1771
|
+
lambda { @yc.package_repository("zisofs-tools", "1.0.6-3.2.2") }.should_not raise_error(ArgumentError)
|
1772
|
+
lambda { @yc.package_repository("zisofs-tools", "1.0.6-3.2.2", "x86_64") }.should_not raise_error(ArgumentError)
|
1773
|
+
end
|
1774
|
+
|
1775
|
+
it "should return repoid for package-version-arch" do
|
1776
|
+
@yc.package_repository("zlib-devel", "1.2.3-3", "i386").should be == "extras"
|
1777
|
+
@yc.package_repository("zlib-devel", "1.2.3-3", "x86_64").should be == "base"
|
1778
|
+
end
|
1779
|
+
|
1780
|
+
it "should return repoid for package-version, no arch" do
|
1781
|
+
@yc.package_repository("zisofs-tools", "1.0.6-3.2.2", nil).should be == "extras"
|
1782
|
+
@yc.package_repository("zisofs-tools", "1.0.6-3.2.2").should be == "extras"
|
1783
|
+
end
|
1784
|
+
|
1785
|
+
it "should return nil when no match for package-version-arch" do
|
1786
|
+
@yc.package_repository("zisofs-tools", "1.0.6-3.2.2", "pretend").should be == nil
|
1787
|
+
@yc.package_repository("zisofs-tools", "pretend", "x86_64").should be == nil
|
1788
|
+
@yc.package_repository("pretend", "1.0.6-3.2.2", "x86_64").should be == nil
|
1789
|
+
end
|
1790
|
+
|
1791
|
+
it "should return nil when no match for package-version, no arch" do
|
1792
|
+
@yc.package_repository("zisofs-tools", "pretend", nil).should be == nil
|
1793
|
+
@yc.package_repository("zisofs-tools", "pretend").should be == nil
|
1794
|
+
@yc.package_repository("pretend", "1.0.6-3.2.2").should be == nil
|
1795
|
+
end
|
1796
|
+
end
|
1797
|
+
|
1798
|
+
describe "reset" do
|
1799
|
+
it "should empty the installed and available packages RPMDb" do
|
1800
|
+
@yc.available_version("zip", "x86_64").should be == "2.31-2.el5"
|
1801
|
+
@yc.installed_version("zip", "x86_64").should be == "2.31-2.el5"
|
1802
|
+
@yc.reset
|
1803
|
+
@yc.available_version("zip", "x86_64").should be == nil
|
1804
|
+
@yc.installed_version("zip", "x86_64").should be == nil
|
1805
|
+
end
|
1806
|
+
end
|
1807
|
+
|
1808
|
+
describe "package_available?" do
|
1809
|
+
it "should return true a package name is available" do
|
1810
|
+
@yc.package_available?("zisofs-tools").should be == true
|
1811
|
+
@yc.package_available?("moo").should be == false
|
1812
|
+
@yc.package_available?(nil).should be == false
|
1813
|
+
end
|
1814
|
+
|
1815
|
+
it "should return true a package name + arch is available" do
|
1816
|
+
@yc.package_available?("zlib-devel.i386").should be == true
|
1817
|
+
@yc.package_available?("zisofs-tools.x86_64").should be == true
|
1818
|
+
@yc.package_available?("znc-test.beta1.x86_64").should be == true
|
1819
|
+
@yc.package_available?("znc-test.beta1").should be == true
|
1820
|
+
@yc.package_available?("znc-test.test.beta1").should be == true
|
1821
|
+
@yc.package_available?("moo.i386").should be == false
|
1822
|
+
@yc.package_available?("zisofs-tools.beta").should be == false
|
1823
|
+
@yc.package_available?("znc-test.test").should be == false
|
1824
|
+
end
|
1825
|
+
end
|
1826
|
+
|
1827
|
+
describe "enable_extra_repo_control" do
|
1828
|
+
it "should set @extra_repo_control to arg" do
|
1829
|
+
@yc.enable_extra_repo_control("--enablerepo=test")
|
1830
|
+
@yc.extra_repo_control.should be == "--enablerepo=test"
|
1831
|
+
end
|
1832
|
+
|
1833
|
+
it "should call reload once when set to flag cache for update" do
|
1834
|
+
@yc.should_receive(:reload).once
|
1835
|
+
@yc.enable_extra_repo_control("--enablerepo=test")
|
1836
|
+
@yc.enable_extra_repo_control("--enablerepo=test")
|
1837
|
+
end
|
1838
|
+
end
|
1839
|
+
|
1840
|
+
describe "disable_extra_repo_control" do
|
1841
|
+
it "should set @extra_repo_control to nil" do
|
1842
|
+
@yc.enable_extra_repo_control("--enablerepo=test")
|
1843
|
+
@yc.disable_extra_repo_control
|
1844
|
+
@yc.extra_repo_control.should be == nil
|
1845
|
+
end
|
1846
|
+
|
1847
|
+
it "should call reload once when cleared to flag cache for update" do
|
1848
|
+
@yc.should_receive(:reload).once
|
1849
|
+
@yc.enable_extra_repo_control("--enablerepo=test")
|
1850
|
+
@yc.should_receive(:reload).once
|
1851
|
+
@yc.disable_extra_repo_control
|
1852
|
+
@yc.disable_extra_repo_control
|
1853
|
+
end
|
1854
|
+
end
|
1855
|
+
|
1856
|
+
end
|