chef 10.34.6-x86-mingw32 → 11.6.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 +5 -13
- data/CONTRIBUTING.md +155 -0
- data/README.md +89 -0
- data/Rakefile +18 -1
- data/bin/chef-apply +25 -0
- data/bin/chef-service-manager +37 -0
- data/bin/chef-shell +34 -0
- data/bin/shef +6 -5
- data/distro/common/html/chef-client.8.html +4 -4
- data/distro/common/html/chef-expander.8.html +4 -4
- data/distro/common/html/chef-expanderctl.8.html +4 -4
- data/distro/common/html/chef-server-webui.8.html +4 -4
- data/distro/common/html/chef-server.8.html +4 -4
- data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
- data/distro/common/html/chef-solo.8.html +4 -4
- data/distro/common/html/chef-solr.8.html +5 -5
- data/distro/common/html/knife-bootstrap.1.html +4 -4
- data/distro/common/html/knife-client.1.html +4 -4
- data/distro/common/html/knife-configure.1.html +4 -4
- data/distro/common/html/knife-cookbook-site.1.html +4 -4
- data/distro/common/html/knife-cookbook.1.html +4 -4
- data/distro/common/html/knife-data-bag.1.html +4 -4
- data/distro/common/html/knife-environment.1.html +4 -4
- data/distro/common/html/knife-exec.1.html +9 -9
- data/distro/common/html/knife-index.1.html +4 -4
- data/distro/common/html/knife-node.1.html +4 -4
- data/distro/common/html/knife-role.1.html +4 -4
- data/distro/common/html/knife-search.1.html +4 -4
- data/distro/common/html/knife-ssh.1.html +4 -4
- data/distro/common/html/knife-status.1.html +4 -4
- data/distro/common/html/knife-tag.1.html +4 -4
- data/distro/common/html/knife.1.html +8 -13
- data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
- data/distro/common/man/man1/knife-bootstrap.1 +1 -1
- data/distro/common/man/man1/knife-client.1 +0 -99
- data/distro/common/man/man1/knife-configure.1 +1 -1
- data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
- data/distro/common/man/man1/knife-cookbook.1 +1 -1
- data/distro/common/man/man1/knife-data-bag.1 +1 -1
- data/distro/common/man/man1/knife-environment.1 +0 -168
- data/distro/common/man/man1/knife-exec.1 +4 -7
- data/distro/common/man/man1/knife-index.1 +1 -1
- data/distro/common/man/man1/knife-node.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +1 -1
- data/distro/common/man/man1/knife-search.1 +1 -1
- data/distro/common/man/man1/knife-ssh.1 +1 -1
- data/distro/common/man/man1/knife-status.1 +1 -1
- data/distro/common/man/man1/knife-tag.1 +1 -1
- data/distro/common/man/man1/knife.1 +3 -6
- data/distro/common/man/man8/chef-client.8 +1 -1
- data/distro/common/man/man8/chef-expander.8 +1 -1
- data/distro/common/man/man8/chef-expanderctl.8 +1 -1
- data/distro/common/man/man8/chef-server-webui.8 +1 -1
- data/distro/common/man/man8/chef-server.8 +1 -1
- data/distro/common/man/man8/chef-solo.8 +1 -1
- data/distro/common/man/man8/chef-solr.8 +1 -1
- data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
- data/distro/common/markdown/man1/knife-exec.mkd +11 -6
- data/distro/common/markdown/man1/knife.mkd +4 -9
- data/distro/debian/etc/default/chef-client +0 -1
- data/distro/debian/etc/init.d/chef-client +6 -4
- data/distro/windows/service_manager.rb +2 -146
- data/lib/chef.rb +3 -6
- data/lib/chef/api_client.rb +20 -130
- data/lib/chef/api_client/registration.rb +126 -0
- data/lib/chef/application.rb +68 -18
- data/lib/chef/application/apply.rb +162 -0
- data/lib/chef/application/client.rb +37 -22
- data/lib/chef/application/knife.rb +2 -4
- data/lib/chef/application/solo.rb +27 -13
- data/lib/chef/application/windows_service.rb +114 -54
- data/lib/chef/application/windows_service_manager.rb +179 -0
- data/lib/chef/applications.rb +1 -0
- data/lib/chef/chef_fs.rb +9 -0
- data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
- data/lib/chef/chef_fs/command_line.rb +284 -0
- data/lib/chef/chef_fs/config.rb +205 -0
- data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
- data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
- data/lib/chef/chef_fs/file_pattern.rb +312 -0
- data/lib/chef/chef_fs/file_system.rb +426 -0
- data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
- data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
- data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
- data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +60 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
- data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
- data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
- data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
- data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
- data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
- data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
- data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
- data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
- data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +113 -0
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
- data/lib/chef/chef_fs/knife.rb +116 -0
- data/lib/chef/chef_fs/parallelizer.rb +129 -0
- data/lib/chef/chef_fs/path_utils.rb +90 -0
- data/lib/chef/chef_fs/raw_request.rb +79 -0
- data/lib/chef/client.rb +111 -34
- data/lib/chef/config.rb +111 -102
- data/lib/chef/cookbook/chefignore.rb +2 -1
- data/lib/chef/cookbook/metadata.rb +0 -2
- data/lib/chef/cookbook/syntax_check.rb +76 -14
- data/lib/chef/cookbook_loader.rb +39 -26
- data/lib/chef/cookbook_uploader.rb +16 -9
- data/lib/chef/cookbook_version.rb +2 -410
- data/lib/chef/daemon.rb +24 -19
- data/lib/chef/data_bag.rb +20 -104
- data/lib/chef/data_bag_item.rb +2 -65
- data/lib/chef/deprecation/mixin/template.rb +49 -0
- data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
- data/lib/chef/deprecation/provider/file.rb +197 -0
- data/lib/chef/deprecation/provider/remote_file.rb +86 -0
- data/lib/chef/deprecation/provider/template.rb +63 -0
- data/lib/chef/deprecation/warnings.rb +38 -0
- data/lib/chef/digester.rb +73 -0
- data/lib/chef/dsl.rb +6 -0
- data/lib/chef/dsl/data_query.rb +71 -0
- data/lib/chef/dsl/include_attribute.rb +63 -0
- data/lib/chef/dsl/include_recipe.rb +45 -0
- data/lib/chef/dsl/platform_introspection.rb +218 -0
- data/lib/chef/dsl/recipe.rb +87 -0
- data/lib/chef/dsl/registry_helper.rb +59 -0
- data/lib/chef/encrypted_data_bag_item.rb +171 -24
- data/lib/chef/environment.rb +39 -179
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +107 -8
- data/lib/chef/file_access_control/unix.rb +64 -7
- data/lib/chef/file_access_control/windows.rb +22 -11
- data/lib/chef/file_content_management/content_base.rb +56 -0
- data/lib/chef/file_content_management/deploy.rb +38 -0
- data/lib/chef/file_content_management/deploy/cp.rb +48 -0
- data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
- data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
- data/lib/chef/file_content_management/tempfile.rb +61 -0
- data/lib/chef/formatters/base.rb +4 -1
- data/lib/chef/formatters/doc.rb +1 -1
- data/lib/chef/formatters/error_descriptor.rb +5 -4
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -0
- data/lib/chef/json_compat.rb +15 -14
- data/lib/chef/knife.rb +99 -41
- data/lib/chef/knife/bootstrap.rb +46 -2
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
- data/lib/chef/knife/client_show.rb +2 -5
- data/lib/chef/knife/configure.rb +19 -17
- data/lib/chef/knife/cookbook_create.rb +6 -5
- data/lib/chef/knife/cookbook_download.rb +13 -5
- data/lib/chef/knife/cookbook_metadata.rb +1 -0
- data/lib/chef/knife/cookbook_site_share.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +4 -2
- data/lib/chef/knife/cookbook_upload.rb +4 -4
- data/lib/chef/knife/core/bootstrap_context.rb +11 -5
- data/lib/chef/knife/core/generic_presenter.rb +42 -13
- data/lib/chef/knife/core/node_editor.rb +36 -16
- data/lib/chef/knife/core/node_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +43 -12
- data/lib/chef/knife/core/text_formatter.rb +23 -37
- data/lib/chef/knife/core/ui.rb +34 -13
- data/lib/chef/knife/delete.rb +106 -0
- data/lib/chef/knife/deps.rb +139 -0
- data/lib/chef/knife/diff.rb +63 -0
- data/lib/chef/knife/download.rb +63 -0
- data/lib/chef/knife/edit.rb +76 -0
- data/lib/chef/knife/environment_show.rb +2 -0
- data/lib/chef/knife/exec.rb +5 -5
- data/lib/chef/knife/help_topics.rb +1 -1
- data/lib/chef/knife/index_rebuild.rb +91 -7
- data/lib/chef/knife/list.rb +153 -0
- data/lib/chef/knife/node_run_list_set.rb +66 -0
- data/lib/chef/knife/node_show.rb +1 -7
- data/lib/chef/knife/raw.rb +64 -0
- data/lib/chef/knife/role_show.rb +2 -4
- data/lib/chef/knife/search.rb +45 -28
- data/lib/chef/knife/show.rb +55 -0
- data/lib/chef/knife/ssh.rb +14 -2
- data/lib/chef/knife/upload.rb +69 -0
- data/lib/chef/knife/user_create.rb +93 -0
- data/lib/chef/knife/user_delete.rb +46 -0
- data/lib/chef/knife/user_edit.rb +53 -0
- data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
- data/lib/chef/knife/user_reregister.rb +59 -0
- data/lib/chef/knife/user_show.rb +49 -0
- data/lib/chef/knife/xargs.rb +265 -0
- data/lib/chef/log.rb +2 -2
- data/lib/chef/mixin/checksum.rb +3 -3
- data/lib/chef/mixin/deep_merge.rb +78 -194
- data/lib/chef/mixin/deprecation.rb +35 -0
- data/lib/chef/mixin/file_class.rb +0 -9
- data/lib/chef/mixin/language.rb +22 -223
- data/lib/chef/mixin/language_include_attribute.rb +10 -36
- data/lib/chef/mixin/language_include_recipe.rb +7 -33
- data/lib/chef/mixin/params_validate.rb +0 -3
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
- data/lib/chef/mixin/securable.rb +32 -7
- data/lib/chef/mixin/template.rb +156 -26
- data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
- data/lib/chef/mixins.rb +1 -5
- data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
- data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
- data/lib/chef/monkey_patches/net_http.rb +0 -34
- data/lib/chef/monkey_patches/securerandom.rb +44 -0
- data/lib/chef/monologger.rb +93 -0
- data/lib/chef/node.rb +139 -308
- data/lib/chef/node/attribute.rb +367 -473
- data/lib/chef/node/attribute_collections.rb +206 -0
- data/lib/chef/node/immutable_collections.rb +186 -0
- data/lib/chef/platform.rb +4 -496
- data/lib/chef/platform/provider_mapping.rb +529 -0
- data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
- data/lib/chef/provider.rb +14 -58
- data/lib/chef/provider/batch.rb +35 -0
- data/lib/chef/provider/breakpoint.rb +6 -6
- data/lib/chef/provider/cookbook_file.rb +11 -80
- data/lib/chef/provider/cookbook_file/content.rb +49 -0
- data/lib/chef/provider/deploy.rb +26 -21
- data/lib/chef/provider/deploy/revision.rb +27 -0
- data/lib/chef/provider/directory.rb +12 -18
- data/lib/chef/provider/execute.rb +22 -5
- data/lib/chef/provider/file.rb +297 -248
- data/lib/chef/provider/file/content.rb +39 -0
- data/lib/chef/provider/git.rb +76 -43
- data/lib/chef/provider/group.rb +31 -51
- data/lib/chef/provider/group/dscl.rb +13 -53
- data/lib/chef/provider/group/gpasswd.rb +19 -14
- data/lib/chef/provider/group/groupadd.rb +1 -41
- data/lib/chef/provider/group/groupmod.rb +36 -46
- data/lib/chef/provider/group/pw.rb +16 -59
- data/lib/chef/provider/group/suse.rb +13 -16
- data/lib/chef/provider/group/usermod.rb +18 -40
- data/lib/chef/provider/group/windows.rb +6 -13
- data/lib/chef/provider/http_request.rb +25 -42
- data/lib/chef/provider/ifconfig.rb +25 -35
- data/lib/chef/provider/ifconfig/debian.rb +71 -0
- data/lib/chef/provider/ifconfig/redhat.rb +47 -0
- data/lib/chef/provider/link.rb +12 -3
- data/lib/chef/provider/lwrp_base.rb +150 -0
- data/lib/chef/provider/mount.rb +1 -1
- data/lib/chef/provider/mount/mount.rb +8 -3
- data/lib/chef/provider/mount/windows.rb +4 -1
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +4 -1
- data/lib/chef/provider/package/smartos.rb +47 -36
- data/lib/chef/provider/package/zypper.rb +45 -55
- data/lib/chef/provider/powershell_script.rb +77 -0
- data/lib/chef/provider/registry_key.rb +156 -0
- data/lib/chef/provider/remote_directory.rb +6 -5
- data/lib/chef/provider/remote_file.rb +13 -100
- data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
- data/lib/chef/provider/remote_file/content.rb +75 -0
- data/lib/chef/provider/remote_file/fetcher.rb +43 -0
- data/lib/chef/provider/remote_file/ftp.rb +183 -0
- data/lib/chef/provider/remote_file/http.rb +124 -0
- data/lib/chef/provider/remote_file/local_file.rb +47 -0
- data/lib/chef/provider/route.rb +6 -2
- data/lib/chef/provider/ruby_block.rb +5 -2
- data/lib/chef/provider/script.rb +14 -2
- data/lib/chef/provider/service.rb +15 -0
- data/lib/chef/provider/service/init.rb +9 -7
- data/lib/chef/provider/service/macosx.rb +29 -81
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/service/solaris.rb +6 -5
- data/lib/chef/provider/template.rb +16 -81
- data/lib/chef/provider/template/content.rb +61 -0
- data/lib/chef/provider/template_finder.rb +61 -0
- data/lib/chef/provider/user.rb +0 -1
- data/lib/chef/provider/user/dscl.rb +175 -568
- data/lib/chef/provider/user/useradd.rb +50 -54
- data/lib/chef/provider/windows_script.rb +73 -0
- data/lib/chef/providers.rb +18 -1
- data/lib/chef/recipe.rb +14 -8
- data/lib/chef/resource.rb +52 -146
- data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
- data/lib/chef/resource/conditional.rb +4 -0
- data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
- data/lib/chef/resource/file.rb +31 -3
- data/lib/chef/resource/group.rb +1 -11
- data/lib/chef/resource/http_request.rb +2 -1
- data/lib/chef/resource/link.rb +17 -0
- data/lib/chef/resource/lwrp_base.rb +132 -0
- data/lib/chef/resource/mount.rb +39 -13
- data/lib/chef/resource/powershell_script.rb +31 -0
- data/lib/chef/resource/registry_key.rb +86 -0
- data/lib/chef/resource/remote_directory.rb +6 -5
- data/lib/chef/resource/remote_file.rb +62 -25
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/service.rb +14 -0
- data/lib/chef/resource/template.rb +145 -0
- data/lib/chef/resource/user.rb +0 -18
- data/lib/chef/resource/windows_script.rb +62 -0
- data/lib/chef/resource_collection.rb +69 -31
- data/lib/chef/resource_reporter.rb +81 -52
- data/lib/chef/resources.rb +4 -1
- data/lib/chef/rest.rb +55 -127
- data/lib/chef/rest/auth_credentials.rb +4 -20
- data/lib/chef/rest/rest_request.rb +7 -8
- data/lib/chef/role.rb +1 -97
- data/lib/chef/run_context.rb +108 -130
- data/lib/chef/run_context/cookbook_compiler.rb +280 -0
- data/lib/chef/run_list.rb +0 -2
- data/lib/chef/run_list/run_list_expansion.rb +1 -16
- data/lib/chef/run_lock.rb +96 -0
- data/lib/chef/runner.rb +28 -6
- data/lib/chef/sandbox.rb +15 -148
- data/lib/chef/scan_access_control.rb +8 -5
- data/lib/chef/search/query.rb +2 -2
- data/lib/chef/shef/ext.rb +3 -575
- data/lib/chef/{shef.rb → shell.rb} +35 -40
- data/lib/chef/shell/ext.rb +593 -0
- data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
- data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
- data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +15 -13
- data/lib/chef/shell_out.rb +7 -0
- data/lib/chef/user.rb +182 -0
- data/lib/chef/util/backup.rb +84 -0
- data/lib/chef/util/diff.rb +145 -0
- data/lib/chef/util/file_edit.rb +1 -1
- data/lib/chef/util/selinux.rb +100 -0
- data/lib/chef/util/windows/net_group.rb +1 -5
- data/lib/chef/util/windows/net_user.rb +14 -1
- data/lib/chef/util/windows/volume.rb +2 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version/platform.rb +42 -0
- data/lib/chef/version_class.rb +1 -1
- data/lib/chef/version_constraint.rb +6 -5
- data/lib/chef/{index_queue.rb → version_constraint/platform.rb} +11 -14
- data/lib/chef/win32/api/file.rb +8 -2
- data/lib/chef/win32/api/security.rb +45 -1
- data/lib/chef/win32/registry.rb +382 -0
- data/lib/chef/win32/security.rb +19 -0
- data/lib/chef/win32/version.rb +25 -8
- data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
- data/spec/data/apt/var/www/apt/conf/distributions +7 -0
- data/spec/data/apt/var/www/apt/conf/incoming +4 -0
- data/spec/data/apt/var/www/apt/conf/pulls +3 -0
- data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
- data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
- data/spec/data/apt/var/www/apt/db/packages.db +0 -0
- data/spec/data/apt/var/www/apt/db/references.db +0 -0
- data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
- data/spec/data/apt/var/www/apt/db/version +4 -0
- data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
- data/spec/data/bootstrap/secret.erb +9 -0
- data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
- data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
- data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
- data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
- data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
- data/spec/data/git_bundles/example-repo.gitbundle +0 -0
- data/spec/data/knife_subcommand/test_yourself.rb +8 -0
- data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
- data/spec/data/nodes/default.rb +3 -3
- data/spec/data/nodes/test.example.com.rb +3 -3
- data/spec/data/nodes/test.rb +3 -3
- data/spec/data/null_config.rb +1 -0
- data/spec/data/partial_one.erb +1 -0
- data/spec/data/remote_file/nyan_cat.png.gz +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
- data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
- data/spec/data/shef-config.rb +10 -0
- data/spec/functional/dsl/registry_helper_spec.rb +63 -0
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
- data/spec/functional/knife/exec_spec.rb +3 -3
- data/spec/functional/knife/smoke_test.rb +34 -0
- data/spec/functional/knife/ssh_spec.rb +5 -1
- data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
- data/spec/functional/resource/batch_spec.rb +64 -0
- data/spec/functional/resource/cookbook_file_spec.rb +15 -9
- data/spec/functional/resource/deploy_revision_spec.rb +180 -0
- data/spec/functional/resource/directory_spec.rb +5 -1
- data/spec/functional/resource/file_spec.rb +71 -21
- data/spec/functional/resource/git_spec.rb +259 -0
- data/spec/functional/resource/link_spec.rb +424 -388
- data/spec/functional/resource/package_spec.rb +297 -0
- data/spec/functional/resource/powershell_spec.rb +188 -0
- data/spec/functional/resource/registry_spec.rb +576 -0
- data/spec/functional/resource/remote_directory_spec.rb +143 -37
- data/spec/functional/resource/remote_file_spec.rb +99 -13
- data/spec/functional/resource/template_spec.rb +180 -3
- data/spec/functional/resource/user_spec.rb +547 -0
- data/spec/functional/run_lock_spec.rb +243 -0
- data/spec/functional/shell_spec.rb +102 -0
- data/spec/functional/win32/registry_helper_spec.rb +632 -0
- data/spec/functional/win32/security_spec.rb +37 -0
- data/spec/functional/win32/service_manager_spec.rb +269 -0
- data/spec/functional/win32/versions_spec.rb +78 -0
- data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
- data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
- data/spec/integration/knife/chefignore_spec.rb +271 -0
- data/spec/integration/knife/delete_spec.rb +944 -0
- data/spec/integration/knife/deps_spec.rb +648 -0
- data/spec/integration/knife/diff_spec.rb +536 -0
- data/spec/integration/knife/download_spec.rb +962 -0
- data/spec/integration/knife/list_spec.rb +633 -0
- data/spec/integration/knife/raw_spec.rb +166 -0
- data/spec/integration/knife/redirection_spec.rb +57 -0
- data/spec/integration/knife/show_spec.rb +158 -0
- data/spec/integration/knife/upload_spec.rb +1060 -0
- data/spec/integration/solo/solo_spec.rb +41 -0
- data/spec/spec_helper.rb +49 -13
- data/spec/stress/win32/security_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +33 -3
- data/spec/support/lib/chef/resource/cat.rb +3 -5
- data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
- data/spec/support/lib/chef/resource/zen_master.rb +8 -10
- data/spec/support/platform_helpers.rb +46 -13
- data/spec/support/platforms/win32/spec_service.rb +59 -0
- data/spec/support/shared/functional/diff_disabled.rb +10 -0
- data/spec/support/shared/functional/directory_resource.rb +129 -38
- data/spec/support/shared/functional/file_resource.rb +837 -71
- data/spec/support/shared/functional/securable_resource.rb +189 -58
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
- data/spec/support/shared/integration/integration_helper.rb +166 -0
- data/spec/support/shared/integration/knife_support.rb +171 -0
- data/spec/support/shared/unit/execute_resource.rb +125 -0
- data/spec/support/shared/unit/file_system_support.rb +70 -0
- data/spec/support/shared/unit/platform_introspector.rb +162 -0
- data/spec/support/shared/unit/provider/file.rb +609 -0
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
- data/spec/support/shared/unit/script_resource.rb +52 -0
- data/spec/support/shared/unit/windows_script_resource.rb +48 -0
- data/spec/tiny_server.rb +13 -11
- data/spec/unit/api_client/registration_spec.rb +172 -0
- data/spec/unit/api_client_spec.rb +78 -156
- data/spec/unit/application/apply.rb +84 -0
- data/spec/unit/application/client_spec.rb +16 -14
- data/spec/unit/application/knife_spec.rb +17 -0
- data/spec/unit/application/solo_spec.rb +1 -1
- data/spec/unit/application_spec.rb +113 -3
- data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
- data/spec/unit/chef_fs/diff_spec.rb +328 -0
- data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
- data/spec/unit/chef_fs/file_system_spec.rb +135 -0
- data/spec/unit/client_spec.rb +195 -23
- data/spec/unit/config_spec.rb +102 -51
- data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
- data/spec/unit/cookbook_loader_spec.rb +154 -91
- data/spec/unit/cookbook_manifest_spec.rb +81 -81
- data/spec/unit/cookbook_spec.rb +3 -20
- data/spec/unit/cookbook_version_spec.rb +23 -122
- data/spec/unit/daemon_spec.rb +24 -19
- data/spec/unit/data_bag_spec.rb +13 -4
- data/spec/unit/deprecation_spec.rb +86 -0
- data/spec/unit/digester_spec.rb +50 -0
- data/spec/unit/dsl/data_query_spec.rb +66 -0
- data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
- data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +197 -157
- data/spec/unit/environment_spec.rb +94 -126
- data/spec/unit/exceptions_spec.rb +8 -4
- data/spec/unit/file_access_control_spec.rb +21 -1
- data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
- data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +6 -5
- data/spec/unit/json_compat_spec.rb +8 -0
- data/spec/unit/knife/bootstrap_spec.rb +130 -29
- data/spec/unit/knife/configure_spec.rb +64 -45
- data/spec/unit/knife/cookbook_download_spec.rb +24 -3
- data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
- data/spec/unit/knife/cookbook_test_spec.rb +1 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +39 -0
- data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
- data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
- data/spec/unit/knife/core/ui_spec.rb +196 -124
- data/spec/unit/knife/data_bag_create_spec.rb +9 -0
- data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
- data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
- data/spec/unit/knife/data_bag_show_spec.rb +11 -4
- data/spec/unit/knife/index_rebuild_spec.rb +96 -33
- data/spec/unit/knife/knife_help.rb +7 -7
- data/spec/unit/knife/node_edit_spec.rb +6 -33
- data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
- data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
- data/spec/unit/knife/ssh_spec.rb +12 -15
- data/spec/unit/knife/status_spec.rb +2 -2
- data/spec/unit/knife/user_create_spec.rb +86 -0
- data/spec/unit/knife/user_delete_spec.rb +39 -0
- data/spec/unit/knife/user_edit_spec.rb +42 -0
- data/spec/unit/knife/user_list_spec.rb +32 -0
- data/spec/unit/knife/user_reregister_spec.rb +53 -0
- data/spec/unit/knife/user_show_spec.rb +41 -0
- data/spec/unit/knife_spec.rb +74 -0
- data/spec/unit/lwrp_spec.rb +102 -60
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/deep_merge_spec.rb +130 -791
- data/spec/unit/mixin/deprecation_spec.rb +23 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -2
- data/spec/unit/mixin/securable_spec.rb +5 -3
- data/spec/unit/mixin/template_spec.rb +145 -14
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
- data/spec/unit/node/attribute_spec.rb +273 -173
- data/spec/unit/node/immutable_collections_spec.rb +139 -0
- data/spec/unit/node_spec.rb +418 -370
- data/spec/unit/platform_spec.rb +21 -8
- data/spec/unit/provider/breakpoint_spec.rb +8 -8
- data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
- data/spec/unit/provider/cookbook_file_spec.rb +26 -187
- data/spec/unit/provider/cron/solaris_spec.rb +1 -1
- data/spec/unit/provider/deploy/revision_spec.rb +19 -11
- data/spec/unit/provider/deploy_spec.rb +2 -2
- data/spec/unit/provider/directory_spec.rb +99 -67
- data/spec/unit/provider/env_spec.rb +2 -2
- data/spec/unit/provider/execute_spec.rb +27 -1
- data/spec/unit/provider/file/content_spec.rb +101 -0
- data/spec/unit/provider/file_spec.rb +25 -475
- data/spec/unit/provider/git_spec.rb +224 -28
- data/spec/unit/provider/group/dscl_spec.rb +0 -36
- data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
- data/spec/unit/provider/group/groupadd_spec.rb +4 -3
- data/spec/unit/provider/group/groupmod_spec.rb +1 -0
- data/spec/unit/provider/group/pw_spec.rb +15 -12
- data/spec/unit/provider/group/usermod_spec.rb +9 -22
- data/spec/unit/provider/group/windows_spec.rb +8 -0
- data/spec/unit/provider/group_spec.rb +6 -28
- data/spec/unit/provider/http_request_spec.rb +28 -69
- data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
- data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
- data/spec/unit/provider/ifconfig_spec.rb +0 -33
- data/spec/unit/provider/mount/mount_spec.rb +33 -2
- data/spec/unit/provider/mount/windows_spec.rb +4 -1
- data/spec/unit/provider/mount_spec.rb +16 -6
- data/spec/unit/provider/ohai_spec.rb +4 -4
- data/spec/unit/provider/package/apt_spec.rb +0 -1
- data/spec/unit/provider/package/ips_spec.rb +0 -1
- data/spec/unit/provider/package/rpm_spec.rb +0 -12
- data/spec/unit/provider/package/rubygems_spec.rb +1 -1
- data/spec/unit/provider/package/smartos_spec.rb +3 -2
- data/spec/unit/provider/package/zypper_spec.rb +84 -22
- data/spec/unit/provider/package_spec.rb +7 -9
- data/spec/unit/provider/powershell_spec.rb +38 -0
- data/spec/unit/provider/registry_key_spec.rb +269 -0
- data/spec/unit/provider/remote_directory_spec.rb +7 -7
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
- data/spec/unit/provider/remote_file/content_spec.rb +230 -0
- data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
- data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
- data/spec/unit/provider/remote_file/http_spec.rb +319 -0
- data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
- data/spec/unit/provider/remote_file_spec.rb +33 -259
- data/spec/unit/provider/route_spec.rb +29 -12
- data/spec/unit/provider/ruby_block_spec.rb +8 -0
- data/spec/unit/provider/service/arch_service_spec.rb +5 -5
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
- data/spec/unit/provider/service/init_service_spec.rb +27 -4
- data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
- data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
- data/spec/unit/provider/service/macosx_spec.rb +176 -207
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/simple_service_spec.rb +3 -3
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
- data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
- data/spec/unit/provider/service/upstart_service_spec.rb +11 -11
- data/spec/unit/provider/service_spec.rb +3 -3
- data/spec/unit/provider/subversion_spec.rb +1 -1
- data/spec/unit/provider/template/content_spec.rb +78 -0
- data/spec/unit/provider/template_spec.rb +52 -160
- data/spec/unit/provider/user/dscl_spec.rb +285 -681
- data/spec/unit/provider/user/solaris_spec.rb +39 -373
- data/spec/unit/provider/user/useradd_spec.rb +12 -379
- data/spec/unit/provider/user_spec.rb +1 -1
- data/spec/unit/recipe_spec.rb +10 -8
- data/spec/unit/registry_helper_spec.rb +376 -0
- data/spec/unit/resource/batch_spec.rb +48 -0
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
- data/spec/unit/resource/execute_spec.rb +3 -101
- data/spec/unit/resource/file_spec.rb +0 -5
- data/spec/unit/resource/group_spec.rb +9 -0
- data/spec/unit/resource/ifconfig_spec.rb +60 -1
- data/spec/unit/resource/link_spec.rb +1 -0
- data/spec/unit/resource/mount_spec.rb +37 -11
- data/spec/unit/resource/powershell_spec.rb +48 -0
- data/spec/unit/resource/registry_key_spec.rb +171 -0
- data/spec/unit/resource/remote_file_spec.rb +63 -25
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +7 -3
- data/spec/unit/resource/script_spec.rb +13 -36
- data/spec/unit/resource/service_spec.rb +11 -0
- data/spec/unit/resource/template_spec.rb +111 -8
- data/spec/unit/resource/user_spec.rb +7 -0
- data/spec/unit/resource_collection_spec.rb +61 -32
- data/spec/unit/resource_reporter_spec.rb +115 -102
- data/spec/unit/resource_spec.rb +197 -5
- data/spec/unit/rest/auth_credentials_spec.rb +4 -21
- data/spec/unit/rest_spec.rb +134 -284
- data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -0
- data/spec/unit/run_context_spec.rb +18 -4
- data/spec/unit/run_list_spec.rb +0 -209
- data/spec/unit/run_lock_spec.rb +37 -0
- data/spec/unit/runner_spec.rb +102 -3
- data/spec/unit/scan_access_control_spec.rb +8 -6
- data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
- data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
- data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +16 -58
- data/spec/unit/shell_out_spec.rb +18 -0
- data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
- data/spec/unit/user_spec.rb +255 -0
- data/spec/unit/util/backup_spec.rb +149 -0
- data/spec/unit/util/diff_spec.rb +596 -0
- data/spec/unit/util/selinux_spec.rb +172 -0
- data/spec/unit/version/platform_spec.rb +61 -0
- data/spec/unit/version_constraint/platform_spec.rb +46 -0
- data/spec/unit/version_constraint_spec.rb +5 -0
- metadata +493 -264
- data/README.rdoc +0 -177
- data/distro/common/html/knife-recipe.1.html +0 -92
- data/lib/chef/certificate.rb +0 -161
- data/lib/chef/checksum.rb +0 -167
- data/lib/chef/checksum_cache.rb +0 -190
- data/lib/chef/cookbook_version_selector.rb +0 -168
- data/lib/chef/couchdb.rb +0 -246
- data/lib/chef/index_queue/amqp_client.rb +0 -116
- data/lib/chef/index_queue/consumer.rb +0 -76
- data/lib/chef/index_queue/indexable.rb +0 -109
- data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
- data/lib/chef/monkey_patches/dir.rb +0 -36
- data/lib/chef/monkey_patches/moneta.rb +0 -50
- data/lib/chef/monkey_patches/uri.rb +0 -70
- data/lib/chef/openid_registration.rb +0 -187
- data/lib/chef/solr_query.rb +0 -187
- data/lib/chef/solr_query/lucene.treetop +0 -150
- data/lib/chef/solr_query/lucene_nodes.rb +0 -285
- data/lib/chef/solr_query/query_transform.rb +0 -65
- data/lib/chef/solr_query/solr_http_request.rb +0 -132
- data/lib/chef/webui_user.rb +0 -231
- data/spec/data/mac_users/10.7-8.plist.xml +0 -559
- data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
- data/spec/data/mac_users/10.7.plist.xml +0 -559
- data/spec/data/mac_users/10.7.shadow.xml +0 -11
- data/spec/data/mac_users/10.8.plist.xml +0 -559
- data/spec/data/mac_users/10.8.shadow.xml +0 -21
- data/spec/data/mac_users/10.9.plist.xml +0 -560
- data/spec/data/mac_users/10.9.shadow.xml +0 -21
- data/spec/functional/resource/base.rb +0 -40
- data/spec/functional/resource/group_spec.rb +0 -343
- data/spec/functional/resource/user/dscl_spec.rb +0 -199
- data/spec/unit/certificate_spec.rb +0 -76
- data/spec/unit/checksum_cache_spec.rb +0 -209
- data/spec/unit/checksum_spec.rb +0 -94
- data/spec/unit/couchdb_spec.rb +0 -274
- data/spec/unit/index_queue_spec.rb +0 -391
- data/spec/unit/mixin/language_spec.rb +0 -305
- data/spec/unit/openid_registration_spec.rb +0 -153
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
- data/spec/unit/solr_query/query_transform_spec.rb +0 -454
- data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
- data/spec/unit/solr_query_spec.rb +0 -203
- data/spec/unit/webui_user_spec.rb +0 -238
@@ -19,6 +19,29 @@
|
|
19
19
|
require 'spec_helper'
|
20
20
|
require 'chef/mixin/deprecation'
|
21
21
|
|
22
|
+
describe Chef::Mixin do
|
23
|
+
describe "deprecating constants (Class/Module)" do
|
24
|
+
before do
|
25
|
+
Chef::Mixin.deprecate_constant(:DeprecatedClass, Chef::Node, "This is a test deprecation")
|
26
|
+
@log_io = StringIO.new
|
27
|
+
Chef::Log.init(@log_io)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "has a list of deprecated constants" do
|
31
|
+
Chef::Mixin.deprecated_constants.should have_key(:DeprecatedClass)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns the replacement when accessing the deprecated constant" do
|
35
|
+
Chef::Mixin::DeprecatedClass.should == Chef::Node
|
36
|
+
end
|
37
|
+
|
38
|
+
it "warns when accessing the deprecated constant" do
|
39
|
+
Chef::Mixin::DeprecatedClass
|
40
|
+
@log_io.string.should include("This is a test deprecation")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
22
45
|
describe Chef::Mixin::Deprecation::DeprecatedInstanceVariable do
|
23
46
|
before do
|
24
47
|
Chef::Log.logger = Logger.new(StringIO.new)
|
@@ -27,13 +27,18 @@ describe Chef::Mixin::EnforceOwnershipAndPermissions do
|
|
27
27
|
@node.name "make_believe"
|
28
28
|
@events = Chef::EventDispatch::Dispatcher.new
|
29
29
|
@run_context = Chef::RunContext.new(@node, {}, @events)
|
30
|
-
@
|
30
|
+
@tmpdir = Dir.mktmpdir
|
31
|
+
@resource = Chef::Resource::File.new("#{@tmpdir}/madeup.txt")
|
31
32
|
FileUtils.touch @resource.path
|
32
33
|
@resource.owner "adam"
|
33
34
|
@provider = Chef::Provider::File.new(@resource, @run_context)
|
34
35
|
@provider.current_resource = @resource
|
35
36
|
end
|
36
37
|
|
38
|
+
after(:each) do
|
39
|
+
FileUtils.rm_rf(@tmpdir)
|
40
|
+
end
|
41
|
+
|
37
42
|
it "should call set_all on the file access control object" do
|
38
43
|
Chef::FileAccessControl.any_instance.should_receive(:set_all)
|
39
44
|
@provider.enforce_ownership_and_permissions
|
@@ -43,6 +48,7 @@ describe Chef::Mixin::EnforceOwnershipAndPermissions do
|
|
43
48
|
before do
|
44
49
|
Chef::FileAccessControl.any_instance.stub(:uid_from_resource).and_return(0)
|
45
50
|
Chef::FileAccessControl.any_instance.stub(:requires_changes?).and_return(false)
|
51
|
+
Chef::FileAccessControl.any_instance.stub(:define_resource_requirements)
|
46
52
|
|
47
53
|
passwd_struct = if windows?
|
48
54
|
Struct::Passwd.new("root", "x", 0, 0, "/root", "/bin/bash")
|
@@ -330,10 +330,12 @@ describe Chef::Mixin::ParamsValidate do
|
|
330
330
|
|
331
331
|
it "asserts that a value returns false from a predicate method" do
|
332
332
|
lambda do
|
333
|
-
@vo.validate({:not_blank => "should pass"},
|
333
|
+
@vo.validate({:not_blank => "should pass"},
|
334
|
+
{:not_blank => {:cannot_be => :nil, :cannot_be => :empty}})
|
334
335
|
end.should_not raise_error
|
335
336
|
lambda do
|
336
|
-
@vo.validate({:not_blank => ""},
|
337
|
+
@vo.validate({:not_blank => ""},
|
338
|
+
{:not_blank => {:cannot_be => :nil, :cannot_be => :empty}})
|
337
339
|
end.should raise_error(Chef::Exceptions::ValidationFailed)
|
338
340
|
end
|
339
341
|
|
@@ -112,9 +112,11 @@ describe Chef::Mixin::Securable do
|
|
112
112
|
@original_config = Chef::Config.hash_dup
|
113
113
|
load File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "chef", "config.rb")
|
114
114
|
load File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "chef", "mixin", "securable.rb")
|
115
|
-
|
116
|
-
|
117
|
-
|
115
|
+
SECURABLE_CLASS = Class.new do
|
116
|
+
include Chef::Mixin::Securable
|
117
|
+
include Chef::Mixin::ParamsValidate
|
118
|
+
end
|
119
|
+
@securable = SECURABLE_CLASS.new
|
118
120
|
end
|
119
121
|
end
|
120
122
|
|
@@ -18,36 +18,167 @@
|
|
18
18
|
|
19
19
|
require 'spec_helper'
|
20
20
|
|
21
|
-
class TinyTemplateClass; include Chef::Mixin::Template; end
|
22
21
|
require 'cgi'
|
23
22
|
describe Chef::Mixin::Template, "render_template" do
|
24
23
|
|
24
|
+
let(:sep) { Chef::Platform.windows? ? "\r\n" : "\n" }
|
25
|
+
|
25
26
|
before :each do
|
26
|
-
@
|
27
|
+
@context = Chef::Mixin::Template::TemplateContext.new({})
|
27
28
|
end
|
28
29
|
|
29
30
|
it "should render the template evaluated in the given context" do
|
30
|
-
@
|
31
|
-
|
32
|
-
|
31
|
+
@context[:foo] = "bar"
|
32
|
+
output = @context.render_template_from_string("<%= @foo %>")
|
33
|
+
output.should == "bar"
|
33
34
|
end
|
34
35
|
|
35
36
|
it "should provide a node method to access @node" do
|
36
|
-
@
|
37
|
-
|
38
|
-
|
37
|
+
@context[:node] = "tehShizzle"
|
38
|
+
output = @context.render_template_from_string("<%= @node %>")
|
39
|
+
output.should == "tehShizzle"
|
39
40
|
end
|
40
41
|
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
describe "with a template resource" do
|
43
|
+
before :each do
|
44
|
+
@cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, "cookbooks"))
|
45
|
+
Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, @cookbook_repo) }
|
46
|
+
|
47
|
+
@node = Chef::Node.new
|
48
|
+
cl = Chef::CookbookLoader.new(@cookbook_repo)
|
49
|
+
cl.load_cookbooks
|
50
|
+
@cookbook_collection = Chef::CookbookCollection.new(cl)
|
51
|
+
@events = Chef::EventDispatch::Dispatcher.new
|
52
|
+
@run_context = Chef::RunContext.new(@node, @cookbook_collection, @events)
|
53
|
+
|
54
|
+
@rendered_file_location = Dir.tmpdir + '/openldap_stuff.conf'
|
55
|
+
|
56
|
+
@resource = Chef::Resource::Template.new(@rendered_file_location)
|
57
|
+
@resource.cookbook_name = 'openldap'
|
58
|
+
@current_resource = @resource.dup
|
59
|
+
|
60
|
+
@content_provider = Chef::Provider::Template::Content.new(@resource, @current_resource, @run_context)
|
61
|
+
|
62
|
+
@template_context = Chef::Mixin::Template::TemplateContext.new({})
|
63
|
+
@template_context[:node] = @node
|
64
|
+
@template_context[:template_finder] = Chef::Provider::TemplateFinder.new(@run_context, @resource.cookbook_name, @node)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should provide a render method" do
|
68
|
+
output = @template_context.render_template_from_string("before {<%= render('test.erb').strip -%>} after")
|
69
|
+
output.should == "before {We could be diving for pearls!} after"
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should render local files" do
|
73
|
+
begin
|
74
|
+
tf = Tempfile.new("partial")
|
75
|
+
tf.write "test"
|
76
|
+
tf.rewind
|
77
|
+
|
78
|
+
output = @template_context.render_template_from_string("before {<%= render '#{tf.path}', :local => true %>} after")
|
79
|
+
output.should == "before {test} after"
|
80
|
+
ensure
|
81
|
+
tf.close
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should render partials from a different cookbook" do
|
86
|
+
@template_context[:template_finder] = Chef::Provider::TemplateFinder.new(@run_context, 'apache2', @node)
|
87
|
+
|
88
|
+
output = @template_context.render_template_from_string("before {<%= render('test.erb', :cookbook => 'openldap').strip %>} after")
|
89
|
+
output.should == "before {We could be diving for pearls!} after"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should render using the source argument if provided" do
|
93
|
+
begin
|
94
|
+
tf = Tempfile.new("partial")
|
95
|
+
tf.write "test"
|
96
|
+
tf.rewind
|
97
|
+
|
98
|
+
output = @template_context.render_template_from_string("before {<%= render 'something', :local => true, :source => '#{tf.path}' %>} after")
|
99
|
+
output.should == "before {test} after"
|
100
|
+
ensure
|
101
|
+
tf.close
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should pass the node to partials" do
|
106
|
+
@node.normal[:slappiness] = "happiness"
|
107
|
+
|
108
|
+
output = @template_context.render_template_from_string("before {<%= render 'openldap_stuff.conf.erb' %>} after")
|
109
|
+
output.should == "before {slappiness is happiness} after"
|
44
110
|
end
|
111
|
+
|
112
|
+
it "should pass the original variables to partials" do
|
113
|
+
@template_context[:secret] = 'candy'
|
114
|
+
|
115
|
+
output = @template_context.render_template_from_string("before {<%= render 'openldap_variable_stuff.conf.erb' %>} after")
|
116
|
+
output == "before {super secret is candy} after"
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should pass variables to partials" do
|
120
|
+
output = @template_context.render_template_from_string("before {<%= render 'openldap_variable_stuff.conf.erb', :variables => {:secret => 'whatever' } %>} after")
|
121
|
+
output.should == "before {super secret is whatever} after"
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should pass variables to partials even if they are named the same" do
|
125
|
+
@template_context[:secret] = 'one'
|
126
|
+
|
127
|
+
output = @template_context.render_template_from_string("before {<%= render 'openldap_variable_stuff.conf.erb', :variables => {:secret => 'two' } %>} after <%= @secret %>")
|
128
|
+
output.should == "before {super secret is two} after one"
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should pass nil for missing variables in partials" do
|
132
|
+
output = @template_context.render_template_from_string("before {<%= render 'openldap_variable_stuff.conf.erb', :variables => {} %>} after")
|
133
|
+
output.should == "before {super secret is } after"
|
134
|
+
|
135
|
+
output = @template_context.render_template_from_string("before {<%= render 'openldap_variable_stuff.conf.erb' %>} after")
|
136
|
+
output.should == "before {super secret is } after"
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should render nested partials" do
|
140
|
+
path = File.expand_path(File.join(CHEF_SPEC_DATA, "partial_one.erb"))
|
141
|
+
|
142
|
+
output = @template_context.render_template_from_string("before {<%= render('#{path}', :local => true).strip %>} after")
|
143
|
+
output.should == "before {partial one We could be diving for pearls! calling home} after"
|
144
|
+
end
|
145
|
+
|
146
|
+
describe "when customizing the template context" do
|
147
|
+
|
148
|
+
it "extends the context to include modules" do
|
149
|
+
mod = Module.new do
|
150
|
+
def hello
|
151
|
+
"ohai"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
@template_context._extend_modules([mod])
|
155
|
+
output = @template_context.render_template_from_string("<%=hello%>")
|
156
|
+
output.should == "ohai"
|
157
|
+
end
|
158
|
+
|
159
|
+
it "emits a warning when overriding 'core' methods" do
|
160
|
+
mod = Module.new do
|
161
|
+
def render
|
162
|
+
end
|
163
|
+
def node
|
164
|
+
end
|
165
|
+
def render_template
|
166
|
+
end
|
167
|
+
def render_template_from_string
|
168
|
+
end
|
169
|
+
end
|
170
|
+
['node', 'render', 'render_template', 'render_template_from_string'].each do |method_name|
|
171
|
+
Chef::Log.should_receive(:warn).with(/^Core template method `#{method_name}' overridden by extension module/)
|
172
|
+
end
|
173
|
+
@template_context._extend_modules([mod])
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
45
177
|
end
|
46
178
|
|
47
179
|
describe "when an exception is raised in the template" do
|
48
180
|
def do_raise
|
49
|
-
@context
|
50
|
-
@template.render_template("foo\nbar\nbaz\n<%= this_is_not_defined %>\nquin\nqunx\ndunno", @context) {|r| r}
|
181
|
+
@context.render_template_from_string("foo\nbar\nbaz\n<%= this_is_not_defined %>\nquin\nqunx\ndunno")
|
51
182
|
end
|
52
183
|
|
53
184
|
it "should catch and re-raise the exception as a TemplateError" do
|
@@ -55,7 +186,7 @@ describe Chef::Mixin::Template, "render_template" do
|
|
55
186
|
end
|
56
187
|
|
57
188
|
it "should raise an error if an attempt is made to access node but it is nil" do
|
58
|
-
lambda {@
|
189
|
+
lambda {@context.render_template_from_string("<%= node %>") {|r| r}}.should raise_error(Chef::Mixin::Template::TemplateError)
|
59
190
|
end
|
60
191
|
|
61
192
|
describe "the raised TemplateError" do
|
@@ -0,0 +1,83 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Adam Edwards (<adamed@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013 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
|
+
|
20
|
+
require 'spec_helper'
|
21
|
+
require 'chef/mixin/windows_architecture_helper'
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
describe Chef::Mixin::WindowsArchitectureHelper do
|
26
|
+
include Chef::Mixin::WindowsArchitectureHelper
|
27
|
+
|
28
|
+
before do
|
29
|
+
@valid_architectures = [ :i386, :x86_64 ]
|
30
|
+
@invalid_architectures = [ "i386", "x86_64", :x64, :x86, :arm ]
|
31
|
+
|
32
|
+
@node_i386 = Chef::Node.new
|
33
|
+
@node_x86_64 = Chef::Node.new
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns true when valid architectures are passed to valid_windows_architecture?" do
|
37
|
+
@valid_architectures.each do | architecture |
|
38
|
+
valid_windows_architecture?(architecture).should == true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns false when invalid architectures are passed to valid_windows_architecture?" do
|
43
|
+
@invalid_architectures.each do | architecture |
|
44
|
+
valid_windows_architecture?(architecture).should == false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it "does not raise an exception when a valid architecture is passed to assert_valid_windows_architecture!" do
|
49
|
+
@valid_architectures.each do | architecture |
|
50
|
+
assert_valid_windows_architecture!(architecture)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
it "raises an error if an invalid architecture is passed to assert_valid_windows_architecture!" do
|
55
|
+
@invalid_architectures.each do | architecture |
|
56
|
+
begin
|
57
|
+
assert_valid_windows_architecture!(architecture).should raise_error Chef::Exceptions::Win32ArchitectureIncorrect
|
58
|
+
rescue Chef::Exceptions::Win32ArchitectureIncorrect
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns true for each supported desired architecture for all nodes with each valid architecture passed to node_supports_windows_architecture" do
|
64
|
+
enumerate_architecture_node_combinations(true)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns false for each unsupported desired architecture for all nodes with each valid architecture passed to node_supports_windows_architecture?" do
|
68
|
+
enumerate_architecture_node_combinations(true)
|
69
|
+
end
|
70
|
+
|
71
|
+
def enumerate_architecture_node_combinations(only_valid_combinations)
|
72
|
+
@valid_architectures.each do | node_architecture |
|
73
|
+
new_node = Chef::Node.new
|
74
|
+
new_node.default["kernel"] = Hash.new
|
75
|
+
new_node.default["kernel"][:machine] = node_architecture.to_s
|
76
|
+
|
77
|
+
@valid_architectures.each do | supported_architecture |
|
78
|
+
node_supports_windows_architecture?(new_node, supported_architecture).should == true if only_valid_combinations && (supported_architecture != :x86_64 && node_architecture != :i386 )
|
79
|
+
node_supports_windows_architecture?(new_node, supported_architecture).should == false if ! only_valid_combinations && (supported_architecture == :x86_64 && node_architecture == :i386 )
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -7,9 +7,9 @@
|
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
# you may not use this file except in compliance with the License.
|
9
9
|
# You may obtain a copy of the License at
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# Unless required by applicable law or agreed to in writing, software
|
14
14
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
15
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
@@ -20,9 +20,9 @@
|
|
20
20
|
require 'spec_helper'
|
21
21
|
require 'chef/node/attribute'
|
22
22
|
|
23
|
-
describe Chef::Node::Attribute do
|
23
|
+
describe Chef::Node::Attribute do
|
24
24
|
before(:each) do
|
25
|
-
@attribute_hash =
|
25
|
+
@attribute_hash =
|
26
26
|
{"dmi"=>{},
|
27
27
|
"command"=>{"ps"=>"ps -ef"},
|
28
28
|
"platform_version"=>"10.5.7",
|
@@ -193,7 +193,7 @@ describe Chef::Node::Attribute do
|
|
193
193
|
@default_hash = {
|
194
194
|
"domain" => "opscode.com",
|
195
195
|
"hot" => { "day" => "saturday" },
|
196
|
-
"music" => {
|
196
|
+
"music" => {
|
197
197
|
"jimmy_eat_world" => "is fun!",
|
198
198
|
"mastodon" => "rocks",
|
199
199
|
"mars_volta" => "is loud and nutty",
|
@@ -225,30 +225,171 @@ describe Chef::Node::Attribute do
|
|
225
225
|
[ :normal, :default, :override, :automatic ].each do |accessor|
|
226
226
|
it "should set #{accessor}" do
|
227
227
|
na = Chef::Node::Attribute.new({ :normal => true }, { :default => true }, { :override => true }, { :automatic => true })
|
228
|
-
na.send(accessor).should == { accessor => true }
|
228
|
+
na.send(accessor).should == { accessor.to_s => true }
|
229
229
|
end
|
230
230
|
end
|
231
231
|
|
232
|
-
it "should allow you to set the initial state" do
|
233
|
-
attrs = {"first" => {"second" => {"third" => {"jackpot" => "jackpot!"}}}}
|
234
|
-
na = Chef::Node::Attribute.new(attrs, {}, {}, {}, [ "first", "second", "third" ])
|
235
|
-
na.should have_key("jackpot")
|
236
|
-
end
|
237
|
-
|
238
232
|
it "should be enumerable" do
|
239
233
|
@attributes.should be_is_a(Enumerable)
|
240
234
|
end
|
241
235
|
end
|
242
236
|
|
243
|
-
describe "
|
244
|
-
|
245
|
-
|
237
|
+
describe "when printing attribute components" do
|
238
|
+
|
239
|
+
it "does not cause a type error" do
|
240
|
+
# See CHEF-3799; IO#puts implicitly calls #to_ary on its argument. This
|
241
|
+
# is expected to raise a NoMethodError or return an Array. `to_ary` is
|
242
|
+
# the "strict" conversion method that should only be implemented by
|
243
|
+
# things that are truly Array-like, so NoMethodError is the right choice.
|
244
|
+
# (cf. there is no Hash#to_ary).
|
245
|
+
lambda { @attributes.default.to_ary }.should raise_error(NoMethodError)
|
246
|
+
end
|
247
|
+
|
248
|
+
end
|
249
|
+
|
250
|
+
describe "when debugging attributes" do
|
251
|
+
before do
|
252
|
+
@attributes.default[:foo][:bar] = "default"
|
253
|
+
@attributes.env_default[:foo][:bar] = "env_default"
|
254
|
+
@attributes.role_default[:foo][:bar] = "role_default"
|
255
|
+
@attributes.force_default[:foo][:bar] = "force_default"
|
256
|
+
@attributes.normal[:foo][:bar] = "normal"
|
257
|
+
@attributes.override[:foo][:bar] = "override"
|
258
|
+
@attributes.role_override[:foo][:bar] = "role_override"
|
259
|
+
@attributes.env_override[:foo][:bar] = "env_override"
|
260
|
+
@attributes.force_override[:foo][:bar] = "force_override"
|
261
|
+
@attributes.automatic[:foo][:bar] = "automatic"
|
262
|
+
end
|
263
|
+
|
264
|
+
it "gives the value at each level of precedence for a path spec" do
|
265
|
+
expected = [["set_unless_enabled?", false],
|
266
|
+
["default", "default"],
|
267
|
+
["env_default", "env_default"],
|
268
|
+
["role_default", "role_default"],
|
269
|
+
["force_default", "force_default"],
|
270
|
+
["normal", "normal"],
|
271
|
+
["override", "override"],
|
272
|
+
["role_override", "role_override"],
|
273
|
+
["env_override", "env_override"],
|
274
|
+
["force_override", "force_override"],
|
275
|
+
["automatic", "automatic"]
|
276
|
+
]
|
277
|
+
@attributes.debug_value(:foo, :bar).should == expected
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
describe "when fetching values based on precedence" do
|
282
|
+
before do
|
283
|
+
@attributes.default["default"] = "cookbook default"
|
284
|
+
@attributes.override["override"] = "cookbook override"
|
285
|
+
end
|
286
|
+
|
287
|
+
it "prefers 'forced default' over any other default" do
|
288
|
+
@attributes.default!["default"] = "force default"
|
289
|
+
@attributes.role_default["default"] = "role default"
|
290
|
+
@attributes.env_default["default"] = "environment default"
|
291
|
+
@attributes["default"].should == "force default"
|
292
|
+
end
|
293
|
+
|
294
|
+
it "prefers role_default over environment or cookbook default" do
|
295
|
+
@attributes.role_default["default"] = "role default"
|
296
|
+
@attributes.env_default["default"] = "environment default"
|
297
|
+
@attributes["default"].should == "role default"
|
298
|
+
end
|
299
|
+
|
300
|
+
it "prefers environment default over cookbook default" do
|
301
|
+
@attributes.env_default["default"] = "environment default"
|
302
|
+
@attributes["default"].should == "environment default"
|
303
|
+
end
|
304
|
+
|
305
|
+
it "returns the cookbook default when no other default values are present" do
|
306
|
+
@attributes["default"].should == "cookbook default"
|
307
|
+
end
|
308
|
+
|
309
|
+
it "prefers 'forced overrides' over role or cookbook overrides" do
|
310
|
+
@attributes.override!["override"] = "force override"
|
311
|
+
@attributes.env_override["override"] = "environment override"
|
312
|
+
@attributes.role_override["override"] = "role override"
|
313
|
+
@attributes["override"].should == "force override"
|
314
|
+
end
|
315
|
+
|
316
|
+
it "prefers environment overrides over role or cookbook overrides" do
|
317
|
+
@attributes.env_override["override"] = "environment override"
|
318
|
+
@attributes.role_override["override"] = "role override"
|
319
|
+
@attributes["override"].should == "environment override"
|
320
|
+
end
|
321
|
+
|
322
|
+
it "prefers role overrides over cookbook overrides" do
|
323
|
+
@attributes.role_override["override"] = "role override"
|
324
|
+
@attributes["override"].should == "role override"
|
325
|
+
end
|
326
|
+
|
327
|
+
it "returns cookbook overrides when no other overrides are present" do
|
328
|
+
@attributes["override"].should == "cookbook override"
|
329
|
+
end
|
330
|
+
|
331
|
+
it "merges arrays within the default precedence" do
|
332
|
+
@attributes.role_default["array"] = %w{role}
|
333
|
+
@attributes.env_default["array"] = %w{env}
|
334
|
+
@attributes["array"].should == %w{env role}
|
335
|
+
end
|
336
|
+
|
337
|
+
it "merges arrays within the override precedence" do
|
338
|
+
@attributes.role_override["array"] = %w{role}
|
339
|
+
@attributes.env_override["array"] = %w{env}
|
340
|
+
@attributes["array"].should == %w{role env}
|
341
|
+
end
|
342
|
+
|
343
|
+
it "does not merge arrays between default and normal" do
|
344
|
+
@attributes.role_default["array"] = %w{role}
|
345
|
+
@attributes.normal["array"] = %w{normal}
|
346
|
+
@attributes["array"].should == %w{normal}
|
347
|
+
end
|
348
|
+
|
349
|
+
it "does not merge arrays between normal and override" do
|
350
|
+
@attributes.normal["array"] = %w{normal}
|
351
|
+
@attributes.role_override["array"] = %w{role}
|
352
|
+
@attributes["array"].should == %w{role}
|
353
|
+
end
|
354
|
+
|
355
|
+
it "merges nested hashes between precedence levels" do
|
356
|
+
@attributes = Chef::Node::Attribute.new({}, {}, {}, {})
|
357
|
+
@attributes.env_default = {"a" => {"b" => {"default" => "default"}}}
|
358
|
+
@attributes.normal = {"a" => {"b" => {"normal" => "normal"}}}
|
359
|
+
@attributes.override = {"a" => {"override" => "role"}}
|
360
|
+
@attributes.automatic = {"a" => {"automatic" => "auto"}}
|
361
|
+
@attributes["a"].should == {"b"=>{"default"=>"default", "normal"=>"normal"},
|
362
|
+
"override"=>"role",
|
363
|
+
"automatic"=>"auto"}
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
describe "when reading combined default or override values" do
|
368
|
+
before do
|
369
|
+
@attributes.default["cd"] = "cookbook default"
|
370
|
+
@attributes.role_default["rd"] = "role default"
|
371
|
+
@attributes.env_default["ed"] = "env default"
|
372
|
+
@attributes.default!["fd"] = "force default"
|
373
|
+
@attributes.override["co"] = "cookbook override"
|
374
|
+
@attributes.role_override["ro"] = "role override"
|
375
|
+
@attributes.env_override["eo"] = "env override"
|
376
|
+
@attributes.override!["fo"] = "force override"
|
246
377
|
end
|
247
378
|
|
248
|
-
it "
|
249
|
-
|
250
|
-
@attributes.
|
379
|
+
it "merges all types of overrides into a combined override" do
|
380
|
+
@attributes.combined_override["co"].should == "cookbook override"
|
381
|
+
@attributes.combined_override["ro"].should == "role override"
|
382
|
+
@attributes.combined_override["eo"].should == "env override"
|
383
|
+
@attributes.combined_override["fo"].should == "force override"
|
251
384
|
end
|
385
|
+
|
386
|
+
it "merges all types of defaults into a combined default" do
|
387
|
+
@attributes.combined_default["cd"].should == "cookbook default"
|
388
|
+
@attributes.combined_default["rd"].should == "role default"
|
389
|
+
@attributes.combined_default["ed"].should == "env default"
|
390
|
+
@attributes.combined_default["fd"].should == "force default"
|
391
|
+
end
|
392
|
+
|
252
393
|
end
|
253
394
|
|
254
395
|
describe "[]" do
|
@@ -282,67 +423,31 @@ describe Chef::Node::Attribute do
|
|
282
423
|
|
283
424
|
it "should return the merged hash if all three have values" do
|
284
425
|
result = @attributes["music"]
|
285
|
-
result["mars_volta"]
|
286
|
-
result["jimmy_eat_world"]
|
287
|
-
result["mastodon"]
|
288
|
-
end
|
289
|
-
end
|
290
|
-
|
291
|
-
describe "auto_vivifiy" do
|
292
|
-
it "should set the hash key to a mash if it does not exist" do
|
293
|
-
@attributes.auto_vivifiy({}, "one")["one"].should be_a_kind_of(Mash)
|
294
|
-
end
|
295
|
-
|
296
|
-
it "should raise an exception if the key does exist and does not respond to has_key?" do
|
297
|
-
lambda { @attributes.auto_vivifiy({ "one" => "value" }) }.should raise_error(ArgumentError)
|
298
|
-
end
|
299
|
-
|
300
|
-
it "should not alter the value if the key exists and responds to has_key?" do
|
301
|
-
@attributes.auto_vivifiy({ "one" => { "will" => true } }, "one")["one"].should have_key("will")
|
426
|
+
result["mars_volta"].should == "cicatriz"
|
427
|
+
result["jimmy_eat_world"].should == "nice"
|
428
|
+
result["mastodon"].should == "rocks"
|
302
429
|
end
|
303
430
|
end
|
304
431
|
|
305
|
-
describe "
|
306
|
-
it "should
|
307
|
-
|
308
|
-
@attributes
|
309
|
-
to_check["one"].should == "some value"
|
310
|
-
end
|
311
|
-
|
312
|
-
it "should set the value for a second level key" do
|
313
|
-
to_check = {}
|
314
|
-
@attributes[ "one" ]
|
315
|
-
@attributes.set_value(to_check, "two", "some value")
|
316
|
-
to_check["one"]["two"].should == "some value"
|
317
|
-
end
|
318
|
-
|
319
|
-
it "should set the value for a very deep key" do
|
320
|
-
to_check = {}
|
321
|
-
attributes = Chef::Node::Attribute.new({}, {}, {}, {}, %w{one two three four five})
|
322
|
-
attributes.set_value(to_check, "six", "some value")
|
323
|
-
to_check["one"]["two"]["three"]["four"]["five"]["six"].should == "some value"
|
432
|
+
describe "[]=" do
|
433
|
+
it "should error out when the type of attribute to set has not been specified" do
|
434
|
+
@attributes.normal["the_ghost"] = { }
|
435
|
+
lambda { @attributes["the_ghost"]["exterminate"] = false }.should raise_error(Chef::Exceptions::ImmutableAttributeModification)
|
324
436
|
end
|
325
|
-
end
|
326
437
|
|
327
|
-
describe "[]=" do
|
328
438
|
it "should let you set an attribute value when another hash has an intermediate value" do
|
329
439
|
@attributes.normal["the_ghost"] = { "exterminate" => "the future" }
|
330
|
-
@attributes.
|
331
|
-
@attributes.auto_vivifiy_on_read = true
|
332
|
-
lambda { @attributes["the_ghost"]["exterminate"]["tomorrow"] = false }.should_not raise_error(NoMethodError)
|
440
|
+
lambda { @attributes.normal["the_ghost"]["exterminate"]["tomorrow"] = false }.should_not raise_error(NoMethodError)
|
333
441
|
end
|
334
442
|
|
335
443
|
it "should set the attribute value" do
|
336
|
-
@attributes["longboard"] = "surfing"
|
337
|
-
@attributes["longboard"].should == "surfing"
|
338
|
-
@attributes.
|
444
|
+
@attributes.normal["longboard"] = "surfing"
|
445
|
+
@attributes.normal["longboard"].should == "surfing"
|
446
|
+
@attributes.normal["longboard"].should == "surfing"
|
339
447
|
end
|
340
448
|
|
341
|
-
it "should set deeply nested attribute
|
342
|
-
@attributes.
|
343
|
-
@attributes.auto_vivifiy_on_read = true
|
344
|
-
@attributes["deftones"]["hunters"]["nap"] = "surfing"
|
345
|
-
@attributes.reset
|
449
|
+
it "should set deeply nested attribute values when a precedence level is specified" do
|
450
|
+
@attributes.normal["deftones"]["hunters"]["nap"] = "surfing"
|
346
451
|
@attributes.normal["deftones"]["hunters"]["nap"].should == "surfing"
|
347
452
|
end
|
348
453
|
|
@@ -351,45 +456,23 @@ describe Chef::Node::Attribute do
|
|
351
456
|
end
|
352
457
|
|
353
458
|
it "should let you set attributes manually without vivification" do
|
354
|
-
@attributes["foo"] = Mash.new
|
355
|
-
@attributes["foo"]["bar"] = :baz
|
356
|
-
@attributes["foo"]["bar"].should == :baz
|
459
|
+
@attributes.normal["foo"] = Mash.new
|
460
|
+
@attributes.normal["foo"]["bar"] = :baz
|
461
|
+
@attributes.normal["foo"]["bar"].should == :baz
|
357
462
|
end
|
358
463
|
|
359
464
|
it "should optionally skip setting the value if one already exists" do
|
360
465
|
@attributes.set_unless_value_present = true
|
361
|
-
@attributes["hostname"] = "bar"
|
466
|
+
@attributes.normal["hostname"] = "bar"
|
362
467
|
@attributes["hostname"].should == "latte"
|
363
468
|
end
|
364
469
|
|
365
|
-
it "
|
366
|
-
|
367
|
-
|
368
|
-
@attributes["foo"]
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
describe "get_value" do
|
373
|
-
it "should get a value from a top level key" do
|
374
|
-
@attributes.get_value(@default_hash, "domain").should == "opscode.com"
|
375
|
-
end
|
376
|
-
|
377
|
-
it "should return nil for a top level key that does not exist" do
|
378
|
-
@attributes.get_value(@default_hash, "domainz").should == nil
|
379
|
-
end
|
380
|
-
|
381
|
-
it "should get a value based on the state of the object" do
|
382
|
-
@attributes.auto_vivifiy_on_read = true
|
383
|
-
@attributes.set_type = :normal
|
384
|
-
@attributes[:foo][:bar][:baz] = "snack"
|
385
|
-
@attributes.get_value(@attribute_hash, :baz).should == "snack"
|
386
|
-
end
|
387
|
-
|
388
|
-
it "should return nil based on the state of the object if the key does not exist" do
|
389
|
-
@attributes.auto_vivifiy_on_read = true
|
390
|
-
@attributes.set_type = :normal
|
391
|
-
@attributes[:foo][:bar][:baz] = "snack"
|
392
|
-
@attributes.get_value(@attribute_hash, :baznatch).should == nil
|
470
|
+
it "does not support ||= when setting" do
|
471
|
+
# This is a limitation of auto-vivification.
|
472
|
+
# Users who need this behavior can use set_unless and friends
|
473
|
+
@attributes.normal["foo"] = Mash.new
|
474
|
+
@attributes.normal["foo"]["bar"] ||= "stop the world"
|
475
|
+
@attributes.normal["foo"]["bar"].should == {}
|
393
476
|
end
|
394
477
|
end
|
395
478
|
|
@@ -403,21 +486,6 @@ describe Chef::Node::Attribute do
|
|
403
486
|
hash.class.should == Hash
|
404
487
|
hash["day"].should == "sunday"
|
405
488
|
end
|
406
|
-
|
407
|
-
# Regression test for CHEF-4631
|
408
|
-
context "when merging array values" do
|
409
|
-
before do
|
410
|
-
@default_attrs = {"foo" => {"bar" => ["default"]}}
|
411
|
-
@override_attrs = {"foo" => {"bar" => ["override"]}}
|
412
|
-
|
413
|
-
#(normal, default, override, automatic, state=[])
|
414
|
-
@attributes = Chef::Node::Attribute.new({ }, @default_attrs, @override_attrs, { })
|
415
|
-
end
|
416
|
-
|
417
|
-
it "should return the override" do
|
418
|
-
@attributes["foo"].to_hash["bar"].should == [ "override" ]
|
419
|
-
end
|
420
|
-
end
|
421
489
|
end
|
422
490
|
|
423
491
|
describe "has_key?" do
|
@@ -438,14 +506,8 @@ describe Chef::Node::Attribute do
|
|
438
506
|
end
|
439
507
|
|
440
508
|
it "should return true if an attribute exists but is set to false" do
|
441
|
-
@attributes
|
442
|
-
@attributes.has_key?("apophis").should == true
|
443
|
-
end
|
444
|
-
|
445
|
-
it "should find keys at the current nesting level" do
|
446
|
-
@attributes["music"]
|
447
|
-
@attributes.has_key?("mastodon").should == true
|
448
|
-
@attributes.has_key?("whitesnake").should == false
|
509
|
+
@attributes.has_key?("music")
|
510
|
+
@attributes["music"].has_key?("apophis").should == true
|
449
511
|
end
|
450
512
|
|
451
513
|
it "does not find keys above the current nesting level" do
|
@@ -458,7 +520,7 @@ describe Chef::Node::Attribute do
|
|
458
520
|
|
459
521
|
[:include?, :key?, :member?].each do |method|
|
460
522
|
it "should alias the method #{method} to itself" do
|
461
|
-
@attributes.should respond_to(method)
|
523
|
+
@attributes.should respond_to(method)
|
462
524
|
end
|
463
525
|
|
464
526
|
it "#{method} should behave like has_key?" do
|
@@ -476,11 +538,6 @@ describe Chef::Node::Attribute do
|
|
476
538
|
@attributes.attribute?("ninja").should == false
|
477
539
|
end
|
478
540
|
|
479
|
-
it "should be looking at the current position of the object" do
|
480
|
-
@attributes["music"]
|
481
|
-
@attributes.attribute?("mastodon").should == true
|
482
|
-
@attributes.attribute?("whitesnake").should == false
|
483
|
-
end
|
484
541
|
end
|
485
542
|
|
486
543
|
describe "method_missing" do
|
@@ -488,16 +545,10 @@ describe Chef::Node::Attribute do
|
|
488
545
|
@attributes.music.mastodon.should == "rocks"
|
489
546
|
end
|
490
547
|
|
491
|
-
it "should behave like a []= lookup if the last method has an argument" do
|
492
|
-
@attributes.music.mastodon(["dream", "still", "shining"])
|
493
|
-
@attributes.reset
|
494
|
-
@attributes.music.mastodon.should == ["dream", "still", "shining"]
|
495
|
-
end
|
496
|
-
|
497
548
|
it "should allow the last method to set a value if it has an = sign on the end" do
|
498
|
-
@attributes.music.mastodon = [ "dream", "still", "shining" ]
|
549
|
+
@attributes.normal.music.mastodon = [ "dream", "still", "shining" ]
|
499
550
|
@attributes.reset
|
500
|
-
@attributes.music.mastodon.should == [ "dream", "still", "shining" ]
|
551
|
+
@attributes.normal.music.mastodon.should == [ "dream", "still", "shining" ]
|
501
552
|
end
|
502
553
|
end
|
503
554
|
|
@@ -531,7 +582,7 @@ describe Chef::Node::Attribute do
|
|
531
582
|
collect.include?("snakes").should == true
|
532
583
|
collect.include?("snack").should == true
|
533
584
|
collect.include?("place").should == true
|
534
|
-
collect.length.should == 5
|
585
|
+
collect.length.should == 5
|
535
586
|
end
|
536
587
|
|
537
588
|
it "should yield lower if we go deeper" do
|
@@ -542,7 +593,7 @@ describe Chef::Node::Attribute do
|
|
542
593
|
collect.include?("two").should == true
|
543
594
|
collect.include?("four").should == true
|
544
595
|
collect.include?("six").should == true
|
545
|
-
collect.length.should == 3
|
596
|
+
collect.length.should == 3
|
546
597
|
end
|
547
598
|
|
548
599
|
it "should not raise an exception if one of the hashes has a nil value on a deep lookup" do
|
@@ -616,7 +667,7 @@ describe Chef::Node::Attribute do
|
|
616
667
|
@attributes.each_key do |k|
|
617
668
|
collect << k
|
618
669
|
end
|
619
|
-
|
670
|
+
|
620
671
|
collect.should include("one")
|
621
672
|
collect.should include("snack")
|
622
673
|
collect.should include("hut")
|
@@ -659,7 +710,7 @@ describe Chef::Node::Attribute do
|
|
659
710
|
collect["snack"].should == "cookies"
|
660
711
|
end
|
661
712
|
end
|
662
|
-
|
713
|
+
|
663
714
|
describe "each_value" do
|
664
715
|
before do
|
665
716
|
@attributes = Chef::Node::Attribute.new(
|
@@ -938,8 +989,8 @@ describe Chef::Node::Attribute do
|
|
938
989
|
end
|
939
990
|
end
|
940
991
|
|
941
|
-
it "should return an empty array for a block containing nil" do
|
942
|
-
@attributes.select { nil }.should ==
|
992
|
+
it "should return an empty hash/array (ruby-version-dependent) for a block containing nil" do
|
993
|
+
@attributes.select { nil }.should == {}.select { nil }
|
943
994
|
end
|
944
995
|
|
945
996
|
# sorted for spec clarity
|
@@ -1013,56 +1064,105 @@ describe Chef::Node::Attribute do
|
|
1013
1064
|
|
1014
1065
|
describe "inspect" do
|
1015
1066
|
it "should be readable" do
|
1016
|
-
|
1017
|
-
|
1067
|
+
# NOTE: previous implementation hid the values, showing @automatic={...}
|
1068
|
+
# That is nice and compact, but hides a lot of info, which seems counter
|
1069
|
+
# to the point of calling #inspect...
|
1070
|
+
@attributes.inspect.should =~ /@automatic=\{.*\}/
|
1071
|
+
@attributes.inspect.should =~ /@normal=\{.*\}/
|
1018
1072
|
end
|
1019
1073
|
end
|
1020
1074
|
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1075
|
+
# For expedience, this test is implementation-heavy.
|
1076
|
+
describe "when a component attribute is mutated" do
|
1077
|
+
[
|
1078
|
+
:clear,
|
1079
|
+
:shift
|
1080
|
+
].each do |mutator|
|
1081
|
+
it "resets the cache when the mutator #{mutator} is called" do
|
1082
|
+
@attributes.should_receive(:reset_cache)
|
1083
|
+
@attributes.default.send(mutator)
|
1084
|
+
end
|
1085
|
+
end
|
1027
1086
|
|
1028
|
-
|
1029
|
-
@attributes
|
1087
|
+
it "resets the cache when the mutator delete is called" do
|
1088
|
+
@attributes.should_receive(:reset_cache)
|
1089
|
+
@attributes.default.delete(:music)
|
1030
1090
|
end
|
1031
1091
|
|
1032
|
-
|
1033
|
-
|
1034
|
-
|
1035
|
-
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1092
|
+
[
|
1093
|
+
:merge!,
|
1094
|
+
:update,
|
1095
|
+
:replace
|
1096
|
+
].each do |mutator|
|
1097
|
+
it "resets the cache when the mutator #{mutator} is called" do
|
1098
|
+
# Implementation of Mash means that this could get called many times. That's okay.
|
1099
|
+
@attributes.should_receive(:reset_cache).at_least(1).times
|
1100
|
+
@attributes.default.send(mutator, {:foo => :bar})
|
1101
|
+
end
|
1040
1102
|
end
|
1041
1103
|
|
1042
|
-
|
1043
|
-
|
1104
|
+
[
|
1105
|
+
:delete_if,
|
1106
|
+
:keep_if,
|
1107
|
+
:reject!,
|
1108
|
+
:select!,
|
1109
|
+
].each do |mutator|
|
1110
|
+
it "resets the cache when the mutator #{mutator} is called" do
|
1111
|
+
# Implementation of Mash means that this could get called many times. That's okay.
|
1112
|
+
@attributes.should_receive(:reset_cache).at_least(1).times
|
1113
|
+
block = lambda {|k,v| true }
|
1114
|
+
@attributes.default.send(mutator, &block)
|
1115
|
+
end
|
1044
1116
|
end
|
1045
1117
|
end
|
1046
1118
|
|
1047
|
-
describe "
|
1048
|
-
before(:each) do
|
1049
|
-
@default_attrs = {"foo" => {"bar" => ["default"]}}
|
1050
|
-
@override_attrs = {"foo" => {"bar" => ["override"]}}
|
1119
|
+
describe "when not mutated" do
|
1051
1120
|
|
1052
|
-
|
1053
|
-
@attributes =
|
1121
|
+
it "does not reset the cache when dup'd [CHEF-3680]" do
|
1122
|
+
@attributes.default[:foo][:bar] = "set on original"
|
1123
|
+
subtree = @attributes[:foo]
|
1124
|
+
@attributes.default[:foo].dup[:bar] = "set on dup"
|
1125
|
+
subtree[:bar].should == "set on original"
|
1054
1126
|
end
|
1055
1127
|
|
1056
|
-
|
1057
|
-
@default_attrs = {"foo" => {"bar" => ["1", "2"]}}
|
1058
|
-
@attributes = Chef::Node::Attribute.new({ }, @default_attrs, { }, { })
|
1128
|
+
end
|
1059
1129
|
|
1060
|
-
|
1130
|
+
describe "when setting a component attribute to a new value" do
|
1131
|
+
it "converts the input in to a VividMash tree (default)" do
|
1132
|
+
@attributes.default = {}
|
1133
|
+
@attributes.default.foo = "bar"
|
1134
|
+
@attributes.merged_attributes[:foo].should == "bar"
|
1135
|
+
end
|
1061
1136
|
|
1137
|
+
it "converts the input in to a VividMash tree (normal)" do
|
1138
|
+
@attributes.normal = {}
|
1139
|
+
@attributes.normal.foo = "bar"
|
1140
|
+
@attributes.merged_attributes[:foo].should == "bar"
|
1062
1141
|
end
|
1063
1142
|
|
1064
|
-
it "
|
1143
|
+
it "converts the input in to a VividMash tree (override)" do
|
1144
|
+
@attributes.override = {}
|
1145
|
+
@attributes.override.foo = "bar"
|
1146
|
+
@attributes.merged_attributes[:foo].should == "bar"
|
1147
|
+
end
|
1148
|
+
|
1149
|
+
it "converts the input in to a VividMash tree (automatic)" do
|
1150
|
+
@attributes.automatic = {}
|
1151
|
+
@attributes.automatic.foo = "bar"
|
1152
|
+
@attributes.merged_attributes[:foo].should == "bar"
|
1065
1153
|
end
|
1066
1154
|
end
|
1067
1155
|
|
1156
|
+
describe "when attemping to write without specifying precedence" do
|
1157
|
+
it "raises an error when using []=" do
|
1158
|
+
lambda { @attributes[:new_key] = "new value" }.should raise_error(Chef::Exceptions::ImmutableAttributeModification)
|
1159
|
+
end
|
1160
|
+
|
1161
|
+
it "raises an error when using `attr=value`" do
|
1162
|
+
lambda { @attributes.new_key = "new value" }.should raise_error(Chef::Exceptions::ImmutableAttributeModification)
|
1163
|
+
end
|
1164
|
+
|
1165
|
+
end
|
1166
|
+
|
1068
1167
|
end
|
1168
|
+
|