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
@@ -324,11 +324,11 @@ describe Chef::Provider::Deploy do
|
|
324
324
|
@provider.copy_cached_repo
|
325
325
|
end
|
326
326
|
|
327
|
-
it "calls the internal callback :release_created when
|
327
|
+
it "calls the internal callback :release_created when cleaning up the releases" do
|
328
328
|
FileUtils.stub!(:mkdir_p)
|
329
329
|
FileUtils.stub!(:cp_r)
|
330
330
|
@provider.should_receive(:release_created)
|
331
|
-
@provider.
|
331
|
+
@provider.cleanup!
|
332
332
|
end
|
333
333
|
|
334
334
|
it "chowns the whole release dir to user and group specified in the resource" do
|
@@ -36,80 +36,112 @@ describe Chef::Provider::Directory do
|
|
36
36
|
@directory = Chef::Provider::Directory.new(@new_resource, @run_context)
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
|
40
|
+
describe "scanning file security metadata on windows" do
|
41
|
+
before do
|
42
|
+
end
|
43
|
+
|
44
|
+
it "describes the directory's access rights" do
|
45
|
+
pending
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "scanning file security metadata on unix" do
|
50
|
+
before do
|
51
|
+
Chef::Platform.stub!(:windows?).and_return(false)
|
52
|
+
end
|
53
|
+
let(:mock_stat) do
|
42
54
|
cstats = mock("stats")
|
43
55
|
cstats.stub!(:uid).and_return(500)
|
44
56
|
cstats.stub!(:gid).and_return(500)
|
45
57
|
cstats.stub!(:mode).and_return(0755)
|
46
|
-
|
47
|
-
@directory.load_current_resource
|
48
|
-
@directory.current_resource.path.should eql(@new_resource.path)
|
49
|
-
@directory.current_resource.owner.should eql(500)
|
50
|
-
@directory.current_resource.group.should eql(500)
|
51
|
-
@directory.current_resource.mode.should == 00755
|
58
|
+
cstats
|
52
59
|
end
|
53
|
-
|
54
|
-
it "
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
@directory.should_receive(:set_all_access_controls)
|
61
|
-
@directory.stub!(:update_new_file_state)
|
62
|
-
@directory.run_action(:create)
|
63
|
-
@directory.new_resource.should be_updated
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should raise an exception if the parent directory does not exist and recursive is false" do
|
67
|
-
@new_resource.path "/tmp/some/dir"
|
68
|
-
@new_resource.recursive false
|
69
|
-
lambda { @directory.run_action(:create) }.should raise_error(Chef::Exceptions::EnclosingDirectoryDoesNotExist)
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should create a new directory when parent directory does not exist if recursive is true and permissions are correct" do
|
73
|
-
@new_resource.path "/path/to/dir"
|
74
|
-
@new_resource.recursive true
|
75
|
-
File.should_receive(:exist?).with(@new_resource.path).ordered.and_return(false)
|
76
|
-
File.should_receive(:exist?).with(@new_resource.path).ordered.and_return(false)
|
77
|
-
|
78
|
-
File.should_receive(:exist?).with('/path/to').ordered.and_return(false)
|
79
|
-
File.should_receive(:exist?).with('/path').ordered.and_return(true)
|
80
|
-
File.should_receive(:writable?).with('/path').ordered.and_return(true)
|
81
|
-
File.should_receive(:exist?).with(@new_resource.path).ordered.and_return(false)
|
82
|
-
|
83
|
-
FileUtils.should_receive(:mkdir_p).with(@new_resource.path).and_return(true)
|
84
|
-
@directory.should_receive(:set_all_access_controls)
|
85
|
-
@directory.stub!(:update_new_file_state)
|
86
|
-
@directory.run_action(:create)
|
87
|
-
@new_resource.should be_updated
|
60
|
+
|
61
|
+
it "describes the access mode as a String of octal integers" do
|
62
|
+
File.stub!(:exists?).and_return(true)
|
63
|
+
File.should_receive(:stat).and_return(mock_stat)
|
64
|
+
@directory.load_current_resource
|
65
|
+
@directory.current_resource.mode.should == "0755"
|
88
66
|
end
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
67
|
+
|
68
|
+
context "when user and group are specified with UID/GID" do
|
69
|
+
it "describes the current owner and group as UID and GID" do
|
70
|
+
File.stub!(:exists?).and_return(true)
|
71
|
+
File.should_receive(:stat).and_return(mock_stat)
|
72
|
+
@directory.load_current_resource
|
73
|
+
@directory.current_resource.path.should eql(@new_resource.path)
|
74
|
+
@directory.current_resource.owner.should eql(500)
|
75
|
+
@directory.current_resource.group.should eql(500)
|
76
|
+
end
|
99
77
|
end
|
100
|
-
|
101
|
-
|
102
|
-
stub_file_cstats
|
103
|
-
@new_resource.path "/tmp/foo"
|
104
|
-
File.should_receive(:exist?).exactly(3).and_return(true)
|
105
|
-
Dir.should_not_receive(:mkdir).with(@new_resource.path)
|
106
|
-
@directory.should_receive(:set_all_access_controls)
|
107
|
-
@directory.run_action(:create)
|
78
|
+
|
79
|
+
context "when user/group are specified with user/group names" do
|
108
80
|
end
|
109
81
|
end
|
110
82
|
|
111
|
-
|
112
|
-
|
83
|
+
# Unix only for now. While file security attribute reporting for windows is
|
84
|
+
# disabled, unix and windows differ in the number of exists? calls that are
|
85
|
+
# made by the provider.
|
86
|
+
it "should create a new directory on create, setting updated to true", :unix_only do
|
87
|
+
@new_resource.path "/tmp/foo"
|
88
|
+
|
89
|
+
File.should_receive(:exists?).at_least(:once).and_return(false)
|
90
|
+
File.should_receive(:directory?).with("/tmp").and_return(true)
|
91
|
+
Dir.should_receive(:mkdir).with(@new_resource.path).once.and_return(true)
|
92
|
+
|
93
|
+
@directory.should_receive(:do_acl_changes)
|
94
|
+
@directory.stub!(:do_selinux)
|
95
|
+
@directory.run_action(:create)
|
96
|
+
@directory.new_resource.should be_updated
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should raise an exception if the parent directory does not exist and recursive is false" do
|
100
|
+
@new_resource.path "/tmp/some/dir"
|
101
|
+
@new_resource.recursive false
|
102
|
+
lambda { @directory.run_action(:create) }.should raise_error(Chef::Exceptions::EnclosingDirectoryDoesNotExist)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Unix only for now. While file security attribute reporting for windows is
|
106
|
+
# disabled, unix and windows differ in the number of exists? calls that are
|
107
|
+
# made by the provider.
|
108
|
+
it "should create a new directory when parent directory does not exist if recursive is true and permissions are correct", :unix_only do
|
109
|
+
@new_resource.path "/path/to/dir"
|
110
|
+
@new_resource.recursive true
|
111
|
+
File.should_receive(:exists?).with(@new_resource.path).ordered.and_return(false)
|
112
|
+
|
113
|
+
File.should_receive(:exists?).with('/path/to').ordered.and_return(false)
|
114
|
+
File.should_receive(:exists?).with('/path').ordered.and_return(true)
|
115
|
+
File.should_receive(:writable?).with('/path').ordered.and_return(true)
|
116
|
+
File.should_receive(:exists?).with(@new_resource.path).ordered.and_return(false)
|
117
|
+
|
118
|
+
FileUtils.should_receive(:mkdir_p).with(@new_resource.path).and_return(true)
|
119
|
+
@directory.should_receive(:do_acl_changes)
|
120
|
+
@directory.stub!(:do_selinux)
|
121
|
+
@directory.run_action(:create)
|
122
|
+
@new_resource.should be_updated
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
it "should raise an error when creating a directory when parent directory is a file" do
|
127
|
+
File.should_receive(:directory?).and_return(false)
|
128
|
+
Dir.should_not_receive(:mkdir).with(@new_resource.path)
|
129
|
+
lambda { @directory.run_action(:create) }.should raise_error(Chef::Exceptions::EnclosingDirectoryDoesNotExist)
|
130
|
+
@directory.new_resource.should_not be_updated
|
131
|
+
end
|
132
|
+
|
133
|
+
# Unix only for now. While file security attribute reporting for windows is
|
134
|
+
# disabled, unix and windows differ in the number of exists? calls that are
|
135
|
+
# made by the provider.
|
136
|
+
it "should not create the directory if it already exists", :unix_only do
|
137
|
+
stub_file_cstats
|
138
|
+
@new_resource.path "/tmp/foo"
|
139
|
+
File.should_receive(:directory?).at_least(:once).and_return(true)
|
140
|
+
File.should_receive(:writable?).with("/tmp").and_return(true)
|
141
|
+
File.should_receive(:exists?).at_least(:once).and_return(true)
|
142
|
+
Dir.should_not_receive(:mkdir).with(@new_resource.path)
|
143
|
+
@directory.should_receive(:do_acl_changes)
|
144
|
+
@directory.run_action(:create)
|
113
145
|
end
|
114
146
|
|
115
147
|
it "should delete the directory if it exists, and is writable with action_delete" do
|
@@ -120,14 +152,14 @@ describe Chef::Provider::Directory do
|
|
120
152
|
end
|
121
153
|
|
122
154
|
it "should raise an exception if it cannot delete the directory due to bad permissions" do
|
123
|
-
File.stub!(:
|
155
|
+
File.stub!(:exists?).and_return(true)
|
124
156
|
File.stub!(:writable?).and_return(false)
|
125
157
|
lambda { @directory.run_action(:delete) }.should raise_error(RuntimeError)
|
126
158
|
end
|
127
159
|
|
128
160
|
it "should take no action when deleting a target directory that does not exist" do
|
129
161
|
@new_resource.path "/an/invalid/path"
|
130
|
-
File.stub!(:
|
162
|
+
File.stub!(:exists?).and_return(false)
|
131
163
|
Dir.should_not_receive(:delete).with(@new_resource.path)
|
132
164
|
@directory.run_action(:delete)
|
133
165
|
@directory.new_resource.should_not be_updated
|
@@ -136,7 +168,7 @@ describe Chef::Provider::Directory do
|
|
136
168
|
it "should raise an exception when deleting a directory when target directory is a file" do
|
137
169
|
stub_file_cstats
|
138
170
|
@new_resource.path "/an/invalid/path"
|
139
|
-
File.stub!(:
|
171
|
+
File.stub!(:exists?).and_return(true)
|
140
172
|
File.should_receive(:directory?).and_return(false)
|
141
173
|
Dir.should_not_receive(:delete).with(@new_resource.path)
|
142
174
|
lambda { @directory.run_action(:delete) }.should raise_error(RuntimeError)
|
@@ -81,7 +81,7 @@ describe Chef::Provider::Env do
|
|
81
81
|
@provider.action_create
|
82
82
|
end
|
83
83
|
|
84
|
-
it "should set the new_resources updated flag when it creates the key" do
|
84
|
+
it "should set the the new_resources updated flag when it creates the key" do
|
85
85
|
@provider.action_create
|
86
86
|
@new_resource.should be_updated
|
87
87
|
end
|
@@ -99,7 +99,7 @@ describe Chef::Provider::Env do
|
|
99
99
|
@provider.action_create
|
100
100
|
end
|
101
101
|
|
102
|
-
it "should set the new_resources updated flag when it updates an existing value" do
|
102
|
+
it "should set the the new_resources updated flag when it updates an existing value" do
|
103
103
|
@provider.key_exists = true
|
104
104
|
@provider.stub!(:compare_value).and_return(true)
|
105
105
|
@provider.stub!(:modify_env).and_return(true)
|
@@ -27,7 +27,7 @@ describe Chef::Provider::Execute do
|
|
27
27
|
@new_resource = Chef::Resource::Execute.new("foo_resource", @run_context)
|
28
28
|
@new_resource.timeout 3600
|
29
29
|
@new_resource.returns 0
|
30
|
-
@new_resource.creates "foo_resource"
|
30
|
+
@new_resource.creates "/foo_resource"
|
31
31
|
@provider = Chef::Provider::Execute.new(@new_resource, @run_context)
|
32
32
|
@current_resource = Chef::Resource::Ifconfig.new("foo_resource", @run_context)
|
33
33
|
@provider.current_resource = @current_resource
|
@@ -46,6 +46,7 @@ describe Chef::Provider::Execute do
|
|
46
46
|
opts[:log_tag] = @new_resource.to_s
|
47
47
|
opts[:live_stream] = STDOUT
|
48
48
|
@provider.should_receive(:shell_out!).with(@new_resource.command, opts)
|
49
|
+
Chef::Log.should_not_receive(:warn)
|
49
50
|
|
50
51
|
@provider.run_action(:run)
|
51
52
|
@new_resource.should be_updated
|
@@ -55,6 +56,31 @@ describe Chef::Provider::Execute do
|
|
55
56
|
@provider.stub!(:load_current_resource)
|
56
57
|
File.should_receive(:exists?).with(@new_resource.creates).and_return(true)
|
57
58
|
@provider.should_not_receive(:shell_out!)
|
59
|
+
Chef::Log.should_not_receive(:warn)
|
60
|
+
|
61
|
+
@provider.run_action(:run)
|
62
|
+
@new_resource.should_not be_updated
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should respect cwd options for 'creates'" do
|
66
|
+
@new_resource.cwd "/tmp"
|
67
|
+
@new_resource.creates "foo_resource"
|
68
|
+
@provider.stub!(:load_current_resource)
|
69
|
+
File.should_receive(:exists?).with(@new_resource.creates).and_return(false)
|
70
|
+
File.should_receive(:exists?).with(File.join("/tmp", @new_resource.creates)).and_return(true)
|
71
|
+
Chef::Log.should_not_receive(:warn)
|
72
|
+
@provider.should_not_receive(:shell_out!)
|
73
|
+
|
74
|
+
@provider.run_action(:run)
|
75
|
+
@new_resource.should_not be_updated
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should warn if user specified relative path without cwd" do
|
79
|
+
@new_resource.creates "foo_resource"
|
80
|
+
@provider.stub!(:load_current_resource)
|
81
|
+
Chef::Log.should_receive(:warn).with(/relative path/)
|
82
|
+
File.should_receive(:exists?).with(@new_resource.creates).and_return(true)
|
83
|
+
@provider.should_not_receive(:shell_out!)
|
58
84
|
|
59
85
|
@provider.run_action(:run)
|
60
86
|
@new_resource.should_not be_updated
|
@@ -0,0 +1,101 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Lamont Granquist (<lamont@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
|
+
require 'spec_helper'
|
20
|
+
|
21
|
+
describe Chef::Provider::File::Content do
|
22
|
+
|
23
|
+
before(:all) do
|
24
|
+
@original_config = Chef::Config.configuration
|
25
|
+
end
|
26
|
+
|
27
|
+
after(:all) do
|
28
|
+
Chef::Config.configuration.replace(@original_config)
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# mock setup
|
33
|
+
#
|
34
|
+
|
35
|
+
let(:current_resource) do
|
36
|
+
mock("Chef::Provider::File::Resource (current)")
|
37
|
+
end
|
38
|
+
|
39
|
+
let(:enclosing_directory) {
|
40
|
+
canonicalize_path(File.expand_path(File.join(CHEF_SPEC_DATA, "templates")))
|
41
|
+
}
|
42
|
+
let(:resource_path) {
|
43
|
+
canonicalize_path(File.expand_path(File.join(enclosing_directory, "seattle.txt")))
|
44
|
+
}
|
45
|
+
|
46
|
+
let(:new_resource) do
|
47
|
+
mock("Chef::Provider::File::Resource (new)", :name => "seattle.txt", :path => resource_path)
|
48
|
+
end
|
49
|
+
|
50
|
+
let(:run_context) do
|
51
|
+
mock("Chef::RunContext")
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# subject
|
56
|
+
#
|
57
|
+
let(:content) do
|
58
|
+
Chef::Provider::File::Content.new(new_resource, current_resource, run_context)
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "when the resource has a content attribute set" do
|
62
|
+
|
63
|
+
before do
|
64
|
+
new_resource.stub!(:content).and_return("Do do do do, do do do do, do do do do, do do do do")
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns a tempfile" do
|
68
|
+
content.tempfile.should be_a_kind_of(Tempfile)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "the tempfile contents should match the resource contents" do
|
72
|
+
IO.read(content.tempfile.path).should == new_resource.content
|
73
|
+
end
|
74
|
+
|
75
|
+
it "returns a tempfile in the tempdir when :file_staging_uses_destdir is not set" do
|
76
|
+
Chef::Config[:file_staging_uses_destdir] = false
|
77
|
+
content.tempfile.path.start_with?(Dir::tmpdir).should be_true
|
78
|
+
canonicalize_path(content.tempfile.path).start_with?(enclosing_directory).should be_false
|
79
|
+
end
|
80
|
+
|
81
|
+
it "returns a tempfile in the destdir when :file_desployment_uses_destdir is not set" do
|
82
|
+
Chef::Config[:file_staging_uses_destdir] = true
|
83
|
+
content.tempfile.path.start_with?(Dir::tmpdir).should be_false
|
84
|
+
canonicalize_path(content.tempfile.path).start_with?(enclosing_directory).should be_true
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "when the resource does not have a content attribute set" do
|
90
|
+
|
91
|
+
before do
|
92
|
+
new_resource.stub!(:content).and_return(nil)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should return nil instead of a tempfile" do
|
96
|
+
content.tempfile.should be_nil
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
#
|
3
|
+
# Author:: Lamont Granquist (<lamont@opscode.com>)
|
4
|
+
# Copyright:: Copyright (c) 2008-2013 Opscode, Inc.
|
4
5
|
# License:: Apache License, Version 2.0
|
5
6
|
#
|
6
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -16,490 +17,39 @@
|
|
16
17
|
# limitations under the License.
|
17
18
|
#
|
18
19
|
|
19
|
-
|
20
|
-
require 'spec_helper'
|
21
|
-
require 'tmpdir'
|
20
|
+
require 'support/shared/unit/provider/file'
|
22
21
|
|
23
22
|
describe Chef::Provider::File do
|
24
|
-
before(:each) do
|
25
|
-
@node = Chef::Node.new
|
26
|
-
@node.name "latte"
|
27
|
-
@events = Chef::EventDispatch::Dispatcher.new
|
28
|
-
@run_context = Chef::RunContext.new(@node, {}, @events)
|
29
|
-
|
30
|
-
@resource = Chef::Resource::File.new("seattle")
|
31
|
-
@resource.path(File.expand_path(File.join(CHEF_SPEC_DATA, "templates", "seattle.txt")))
|
32
|
-
|
33
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should return a Chef::Provider::File" do
|
37
|
-
@provider.should be_a_kind_of(Chef::Provider::File)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should store the resource passed to new as new_resource" do
|
41
|
-
@provider.new_resource.should eql(@resource)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should store the node passed to new as node" do
|
45
|
-
@provider.node.should eql(@node)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should load a current resource based on the one specified at construction" do
|
49
|
-
@provider.load_current_resource
|
50
|
-
@provider.current_resource.should be_a_kind_of(Chef::Resource::File)
|
51
|
-
@provider.current_resource.name.should eql(@resource.name)
|
52
|
-
@provider.current_resource.path.should eql(@resource.path)
|
53
|
-
@provider.current_resource.content.should eql(nil)
|
54
|
-
end
|
55
|
-
|
56
|
-
context "load_current_resource_attrs", :unix_only do
|
57
|
-
it "should collect the current state of the file on the filesystem and populate current_resource" do
|
58
|
-
# test setup
|
59
|
-
stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
|
60
|
-
::File.should_receive(:stat).exactly(2).with(@resource.path).and_return(stat_struct)
|
61
|
-
|
62
|
-
# test execution
|
63
|
-
@provider.load_current_resource
|
64
|
-
|
65
|
-
# post-condition checks
|
66
|
-
@provider.current_resource.mode.should == 0600
|
67
|
-
@provider.current_resource.owner.should == 0
|
68
|
-
@provider.current_resource.group.should == 0
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should NOT update the new_resource state with the current_resourse state if new_resource state is already specified" do
|
72
|
-
# test setup
|
73
|
-
stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
|
74
|
-
::File.should_receive(:stat).exactly(2).with(@resource.path).and_return(stat_struct)
|
75
|
-
|
76
|
-
@provider.new_resource.group(1)
|
77
|
-
@provider.new_resource.owner(1)
|
78
|
-
@provider.new_resource.mode(0644)
|
79
|
-
|
80
|
-
# test execution
|
81
|
-
@provider.load_current_resource
|
82
|
-
|
83
|
-
# post-condition checks
|
84
|
-
@provider.new_resource.group.should == 1
|
85
|
-
@provider.new_resource.owner.should == 1
|
86
|
-
@provider.new_resource.mode.should == 0644
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should update the new_resource state with the current_resource state if the new_resource state is not specified." do
|
90
|
-
# test setup
|
91
|
-
stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
|
92
|
-
::File.should_receive(:stat).exactly(2).with(@resource.path).and_return(stat_struct)
|
93
23
|
|
94
|
-
|
95
|
-
|
96
|
-
@provider.new_resource.mode(nil)
|
97
|
-
|
98
|
-
# test execution
|
99
|
-
@provider.load_current_resource
|
100
|
-
|
101
|
-
# post-condition checks
|
102
|
-
@provider.new_resource.group.should eql(@provider.current_resource.group)
|
103
|
-
@provider.new_resource.owner.should eql(@provider.current_resource.owner)
|
104
|
-
@provider.new_resource.mode.should eql(@provider.current_resource.mode)
|
105
|
-
end
|
106
|
-
|
107
|
-
it "should update the new_resource when attempting to set the new state" do
|
108
|
-
# test setup
|
109
|
-
stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
|
110
|
-
# called once in update_new_file_state and once in checksum
|
111
|
-
::File.should_receive(:stat).twice.with(@provider.new_resource.path).and_return(stat_struct)
|
112
|
-
::File.should_receive(:directory?).once.with(@provider.new_resource.path).and_return(false)
|
113
|
-
|
114
|
-
@provider.new_resource.group(nil)
|
115
|
-
@provider.new_resource.owner(nil)
|
116
|
-
@provider.new_resource.mode(nil)
|
117
|
-
|
118
|
-
# test exectution
|
119
|
-
@provider.update_new_file_state
|
120
|
-
|
121
|
-
# post-condition checks
|
122
|
-
@provider.new_resource.group.should == 0
|
123
|
-
@provider.new_resource.owner.should == 0
|
124
|
-
@provider.new_resource.mode.should == 0600
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
context "load_current_resource_attrs", :windows_only do
|
129
|
-
pending "CHEF-3557: Fix implicit resource change collection on Windows"
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should load a mostly blank current resource if the file specified in new_resource doesn't exist/isn't readable" do
|
24
|
+
let(:resource) do
|
25
|
+
# need to check for/against mutating state within the new_resource, so don't mock
|
133
26
|
resource = Chef::Resource::File.new("seattle")
|
134
|
-
resource.path(
|
135
|
-
|
136
|
-
node.name "latte"
|
137
|
-
provider = Chef::Provider::File.new(resource, @run_context)
|
138
|
-
provider.load_current_resource
|
139
|
-
provider.current_resource.should be_a_kind_of(Chef::Resource::File)
|
140
|
-
provider.current_resource.name.should eql(resource.name)
|
141
|
-
provider.current_resource.path.should eql(resource.path)
|
27
|
+
resource.path(resource_path)
|
28
|
+
resource
|
142
29
|
end
|
143
30
|
|
144
|
-
|
145
|
-
|
146
|
-
::File.open(path, "w") do |file|
|
147
|
-
file.write("Detroit's not so nice, so you should come to Seattle instead and buy me a beer instead.")
|
148
|
-
end
|
149
|
-
@resource = Chef::Resource::File.new("detroit")
|
150
|
-
@resource.path(path)
|
151
|
-
@node = Chef::Node.new
|
152
|
-
@node.name "latte"
|
153
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
154
|
-
|
155
|
-
::File.stub!(:symlink?).and_return(true)
|
156
|
-
@provider.should_not_receive(:backup)
|
157
|
-
@provider.run_action(:delete)
|
158
|
-
@resource.should be_updated_by_last_action
|
159
|
-
end
|
160
|
-
|
161
|
-
it "should compare the current content with the requested content" do
|
162
|
-
@provider.load_current_resource
|
163
|
-
|
164
|
-
@provider.new_resource.content "foobar"
|
165
|
-
@provider.compare_content.should eql(false)
|
166
|
-
|
167
|
-
@provider.new_resource.content IO.read(@resource.path)
|
168
|
-
@provider.compare_content.should eql(true)
|
31
|
+
let(:content) do
|
32
|
+
content = mock('Chef::Provider::File::Content')
|
169
33
|
end
|
170
34
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
end
|
35
|
+
let(:node) { double('Chef::Node') }
|
36
|
+
let(:events) { double('Chef::Events').as_null_object } # mock all the methods
|
37
|
+
let(:run_context) { double('Chef::RunContext', :node => node, :events => events) }
|
38
|
+
let(:enclosing_directory) {
|
39
|
+
canonicalize_path(File.expand_path(File.join(CHEF_SPEC_DATA, "templates")))
|
40
|
+
}
|
41
|
+
let(:resource_path) {
|
42
|
+
canonicalize_path(File.expand_path(File.join(enclosing_directory, "seattle.txt")))
|
43
|
+
}
|
181
44
|
|
182
|
-
|
183
|
-
@provider.load_current_resource
|
184
|
-
@provider.new_resource.content IO.read(@resource.path)
|
185
|
-
File.stub!(:open).and_return(1)
|
186
|
-
File.should_not_receive(:open).with(@provider.new_resource.path, "w")
|
187
|
-
lambda { @provider.set_content }.should_not raise_error
|
188
|
-
@resource.should_not be_updated_by_last_action
|
189
|
-
end
|
45
|
+
# Subject
|
190
46
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
@provider.access_controls.should_receive(:set_all)
|
196
|
-
@provider.should_receive(:diff_current_from_content).and_return("")
|
197
|
-
File.stub!(:open).and_return(1)
|
198
|
-
#File.should_receive(:directory?).with("/tmp").and_return(true)
|
199
|
-
File.should_receive(:open).with(@provider.new_resource.path, "w+")
|
200
|
-
@provider.run_action(:create)
|
201
|
-
@resource.should be_updated_by_last_action
|
47
|
+
let(:provider) do
|
48
|
+
provider = described_class.new(resource, run_context)
|
49
|
+
provider.stub!(:content).and_return(content)
|
50
|
+
provider
|
202
51
|
end
|
203
52
|
|
204
|
-
|
205
|
-
io = StringIO.new
|
206
|
-
@provider.load_current_resource
|
207
|
-
@provider.new_resource.content "foobar"
|
208
|
-
@provider.new_resource.stub!(:path).and_return(File.join(Dir.tmpdir, "monkeyfoo"))
|
209
|
-
@provider.should_receive(:diff_current_from_content).and_return("")
|
210
|
-
@provider.stub!(:update_new_file_state)
|
211
|
-
File.should_receive(:open).with(@provider.new_resource.path, "w+").and_yield(io)
|
212
|
-
@provider.access_controls.should_receive(:set_all)
|
213
|
-
@provider.run_action(:create)
|
214
|
-
io.string.should == "foobar"
|
215
|
-
@resource.should be_updated_by_last_action
|
216
|
-
end
|
217
|
-
|
218
|
-
it "should delete the file if it exists and is writable on action_delete" do
|
219
|
-
@provider.new_resource.stub!(:path).and_return(File.join(Dir.tmpdir, "monkeyfoo"))
|
220
|
-
@provider.stub!(:backup).and_return(true)
|
221
|
-
File.should_receive("exists?").exactly(2).times.with(@provider.new_resource.path).and_return(true)
|
222
|
-
File.should_receive("writable?").with(@provider.new_resource.path).and_return(true)
|
223
|
-
File.should_receive(:delete).with(@provider.new_resource.path).and_return(true)
|
224
|
-
@provider.run_action(:delete)
|
225
|
-
@resource.should be_updated_by_last_action
|
226
|
-
end
|
227
|
-
|
228
|
-
it "should not raise an error if it cannot delete the file because it does not exist" do
|
229
|
-
@provider.new_resource.stub!(:path).and_return(File.join(Dir.tmpdir, "monkeyfoo"))
|
230
|
-
@provider.stub!(:backup).and_return(true)
|
231
|
-
File.should_receive("exists?").exactly(2).times.with(@provider.new_resource.path).and_return(false)
|
232
|
-
lambda { @provider.run_action(:delete) }.should_not raise_error()
|
233
|
-
@resource.should_not be_updated_by_last_action
|
234
|
-
end
|
235
|
-
|
236
|
-
it "should update the atime/mtime on action_touch" do
|
237
|
-
@provider.load_current_resource
|
238
|
-
@provider.new_resource.stub!(:path).and_return(File.join(Dir.tmpdir, "monkeyfoo"))
|
239
|
-
@provider.should_receive(:diff_current_from_content).and_return("")
|
240
|
-
@provider.stub!(:update_new_file_state)
|
241
|
-
File.should_receive(:utime).once.and_return(1)
|
242
|
-
File.stub!(:open).and_return(1)
|
243
|
-
@provider.access_controls.should_receive(:set_all).once
|
244
|
-
@provider.run_action(:touch)
|
245
|
-
@resource.should be_updated_by_last_action
|
246
|
-
end
|
247
|
-
|
248
|
-
it "should keep 1 backup copy if specified" do
|
249
|
-
@provider.load_current_resource
|
250
|
-
@provider.new_resource.stub!(:path).and_return("/tmp/s-20080705111233")
|
251
|
-
@provider.new_resource.stub!(:backup).and_return(1)
|
252
|
-
Dir.stub!(:[]).and_return([ "/tmp/s-20080705111233", "/tmp/s-20080705111232", "/tmp/s-20080705111223"])
|
253
|
-
FileUtils.should_receive(:rm).with("/tmp/s-20080705111223").once.and_return(true)
|
254
|
-
FileUtils.should_receive(:rm).with("/tmp/s-20080705111232").once.and_return(true)
|
255
|
-
FileUtils.stub!(:cp).and_return(true)
|
256
|
-
FileUtils.stub!(:mkdir_p).and_return(true)
|
257
|
-
File.stub!(:exist?).and_return(true)
|
258
|
-
@provider.backup
|
259
|
-
end
|
260
|
-
|
261
|
-
it "should backup a file no more than :backup times" do
|
262
|
-
@provider.load_current_resource
|
263
|
-
@provider.new_resource.stub!(:path).and_return("/tmp/s-20080705111233")
|
264
|
-
@provider.new_resource.stub!(:backup).and_return(2)
|
265
|
-
Dir.stub!(:[]).and_return([ "/tmp/s-20080705111233", "/tmp/s-20080705111232", "/tmp/s-20080705111223"])
|
266
|
-
FileUtils.should_receive(:rm).with("/tmp/s-20080705111223").once.and_return(true)
|
267
|
-
FileUtils.stub!(:cp).and_return(true)
|
268
|
-
FileUtils.stub!(:mkdir_p).and_return(true)
|
269
|
-
File.stub!(:exist?).and_return(true)
|
270
|
-
@provider.backup
|
271
|
-
end
|
272
|
-
|
273
|
-
it "should not attempt to backup a file if :backup == 0" do
|
274
|
-
@provider.load_current_resource
|
275
|
-
@provider.new_resource.stub!(:path).and_return("/tmp/s-20080705111233")
|
276
|
-
@provider.new_resource.stub!(:backup).and_return(0)
|
277
|
-
FileUtils.stub!(:cp).and_return(true)
|
278
|
-
File.stub!(:exist?).and_return(true)
|
279
|
-
FileUtils.should_not_receive(:cp)
|
280
|
-
@provider.backup
|
281
|
-
end
|
282
|
-
|
283
|
-
it "should put the backup backup file in the directory specified by Chef::Config[:file_backup_path]" do
|
284
|
-
@provider.load_current_resource
|
285
|
-
@provider.new_resource.stub!(:path).and_return("/tmp/s-20080705111233")
|
286
|
-
@provider.new_resource.stub!(:backup).and_return(1)
|
287
|
-
Chef::Config.stub!(:[]).with(:file_backup_path).and_return("/some_prefix")
|
288
|
-
Dir.stub!(:[]).and_return([ "/some_prefix/tmp/s-20080705111233", "/some_prefix/tmp/s-20080705111232", "/some_prefix/tmp/s-20080705111223"])
|
289
|
-
FileUtils.should_receive(:mkdir_p).with("/some_prefix/tmp").once
|
290
|
-
FileUtils.should_receive(:rm).with("/some_prefix/tmp/s-20080705111232").once.and_return(true)
|
291
|
-
FileUtils.should_receive(:rm).with("/some_prefix/tmp/s-20080705111223").once.and_return(true)
|
292
|
-
FileUtils.stub!(:cp).and_return(true)
|
293
|
-
File.stub!(:exist?).and_return(true)
|
294
|
-
@provider.backup
|
295
|
-
end
|
296
|
-
|
297
|
-
it "should strip the drive letter from the backup resource path (for Windows platforms)" do
|
298
|
-
@provider.load_current_resource
|
299
|
-
@provider.new_resource.stub!(:path).and_return("C:/tmp/s-20080705111233")
|
300
|
-
@provider.new_resource.stub!(:backup).and_return(1)
|
301
|
-
Chef::Config.stub!(:[]).with(:file_backup_path).and_return("C:/some_prefix")
|
302
|
-
Dir.stub!(:[]).and_return([ "C:/some_prefix/tmp/s-20080705111233", "C:/some_prefix/tmp/s-20080705111232", "C:/some_prefix/tmp/s-20080705111223"])
|
303
|
-
FileUtils.should_receive(:mkdir_p).with("C:/some_prefix/tmp").once
|
304
|
-
FileUtils.should_receive(:rm).with("C:/some_prefix/tmp/s-20080705111232").once.and_return(true)
|
305
|
-
FileUtils.should_receive(:rm).with("C:/some_prefix/tmp/s-20080705111223").once.and_return(true)
|
306
|
-
FileUtils.stub!(:cp).and_return(true)
|
307
|
-
File.stub!(:exist?).and_return(true)
|
308
|
-
@provider.backup
|
309
|
-
end
|
310
|
-
|
311
|
-
it "should keep the same ownership on backed up files" do
|
312
|
-
@provider.load_current_resource
|
313
|
-
@provider.new_resource.stub!(:path).and_return("/tmp/s-20080705111233")
|
314
|
-
@provider.new_resource.stub!(:backup).and_return(1)
|
315
|
-
Chef::Config.stub!(:[]).with(:file_backup_path).and_return("/some_prefix")
|
316
|
-
Dir.stub!(:[]).and_return([ "/some_prefix/tmp/s-20080705111233", "/some_prefix/tmp/s-20080705111232", "/some_prefix/tmp/s-20080705111223"])
|
317
|
-
FileUtils.stub!(:mkdir_p).and_return(true)
|
318
|
-
FileUtils.stub!(:rm).and_return(true)
|
319
|
-
File.stub!(:exist?).and_return(true)
|
320
|
-
Time.stub!(:now).and_return(Time.at(1272147455).getgm)
|
321
|
-
FileUtils.should_receive(:cp).with("/tmp/s-20080705111233", "/some_prefix/tmp/s-20080705111233.chef-20100424221735", {:preserve => true}).and_return(true)
|
322
|
-
@provider.backup
|
323
|
-
end
|
324
|
-
|
325
|
-
describe "when the enclosing directory does not exist" do
|
326
|
-
before do
|
327
|
-
@resource.path("/tmp/no-such-path/file.txt")
|
328
|
-
end
|
329
|
-
|
330
|
-
it "raises a specific error describing the problem" do
|
331
|
-
lambda {@provider.run_action(:create)}.should raise_error(Chef::Exceptions::EnclosingDirectoryDoesNotExist)
|
332
|
-
end
|
333
|
-
end
|
334
|
-
|
335
|
-
describe "when creating a file which may be missing" do
|
336
|
-
it "should not call action create if the file exists" do
|
337
|
-
@resource.path(File.expand_path(File.join(CHEF_SPEC_DATA, "templates", "seattle.txt")))
|
338
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
339
|
-
File.should_not_receive(:open)
|
340
|
-
@provider.run_action(:create_if_missing)
|
341
|
-
@resource.should_not be_updated_by_last_action
|
342
|
-
end
|
343
|
-
|
344
|
-
it "should call action create if the does not file exist" do
|
345
|
-
@resource.path("/tmp/example-dir/non_existant_file")
|
346
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
347
|
-
@provider.should_receive(:diff_current_from_content).and_return("")
|
348
|
-
::File.stub!(:exists?).with(@resource.path).and_return(false)
|
349
|
-
::File.stub!(:directory?).with("/tmp/example-dir/non_existant_file").and_return(false)
|
350
|
-
::File.stub!(:directory?).with("/tmp/example-dir").and_return(true)
|
351
|
-
@provider.stub!(:update_new_file_state)
|
352
|
-
io = StringIO.new
|
353
|
-
File.should_receive(:open).with(@provider.new_resource.path, "w+").and_yield(io)
|
354
|
-
#@provider.should_receive(:action_create).and_return(true)
|
355
|
-
@provider.run_action(:create_if_missing)
|
356
|
-
@resource.should be_updated_by_last_action
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
describe "when a diff is requested", :uses_diff => true do
|
361
|
-
|
362
|
-
before(:each) do
|
363
|
-
@original_config = Chef::Config.hash_dup
|
364
|
-
end
|
365
|
-
|
366
|
-
after(:each) do
|
367
|
-
Chef::Config.configuration = @original_config if @original_config
|
368
|
-
end
|
369
|
-
|
370
|
-
describe "when identifying files as binary or text" do
|
371
|
-
|
372
|
-
it "should identify zero-length files as text" do
|
373
|
-
Tempfile.open("some-temp") do |file|
|
374
|
-
@resource.path(file.path)
|
375
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
376
|
-
@provider.is_binary?(file.path).should be_false
|
377
|
-
end
|
378
|
-
end
|
379
|
-
|
380
|
-
it "should correctly identify text files as being text" do
|
381
|
-
Tempfile.open("some-temp") do |file|
|
382
|
-
@resource.path(file.path)
|
383
|
-
file.puts("This is a text file.")
|
384
|
-
file.puts("That has a couple of lines in it.")
|
385
|
-
file.puts("And lets make sure that other printable chars work too: ~!@\#$%^&*()`:\"<>?{}|_+,./;'[]\\-=")
|
386
|
-
file.close
|
387
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
388
|
-
@provider.is_binary?(file.path).should be_false
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
it "should identify a null-terminated string as binary" do
|
393
|
-
Tempfile.open("some-temp") do |file|
|
394
|
-
@resource.path(file.path)
|
395
|
-
file.write("This is a binary file.\0")
|
396
|
-
file.close
|
397
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
398
|
-
@provider.is_binary?(file.path).should be_true
|
399
|
-
end
|
400
|
-
end
|
401
|
-
|
402
|
-
end
|
403
|
-
|
404
|
-
it "should not return diff output when chef config has disabled it" do
|
405
|
-
Chef::Config[:diff_disabled] = true
|
406
|
-
Tempfile.open("some-temp") do |file|
|
407
|
-
@resource.path(file.path)
|
408
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
409
|
-
@provider.load_current_resource
|
410
|
-
result = @provider.diff_current_from_content "foo baz"
|
411
|
-
result.should == [ "(diff output suppressed by config)" ]
|
412
|
-
@resource.diff.should be_nil
|
413
|
-
end
|
414
|
-
end
|
415
|
-
|
416
|
-
it "should not return diff output when there is no new file to compare it to" do
|
417
|
-
Tempfile.open("some-temp") do |file|
|
418
|
-
Tempfile.open("other-temp") do |missing_file|
|
419
|
-
missing_path = missing_file.path
|
420
|
-
missing_file.close
|
421
|
-
missing_file.unlink
|
422
|
-
@resource.path(file.path)
|
423
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
424
|
-
@provider.load_current_resource
|
425
|
-
result = @provider.diff_current missing_path
|
426
|
-
result.should == [ "(no temp file with new content, diff output suppressed)" ]
|
427
|
-
@resource.diff.should be_nil
|
428
|
-
end
|
429
|
-
end
|
430
|
-
end
|
431
|
-
|
432
|
-
it "should produce diff output when the file does not exist yet, but suppress reporting it" do
|
433
|
-
Tempfile.open("some-temp") do |file|
|
434
|
-
@resource.path(file.path)
|
435
|
-
file.close
|
436
|
-
file.unlink
|
437
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
438
|
-
@provider.load_current_resource
|
439
|
-
result = @provider.diff_current_from_content "foo baz"
|
440
|
-
result.length.should == 4
|
441
|
-
@resource.diff.should be_nil
|
442
|
-
end
|
443
|
-
end
|
444
|
-
|
445
|
-
it "should not produce a diff when the current resource file is above the filesize threshold" do
|
446
|
-
Chef::Config[:diff_filesize_threshold] = 5
|
447
|
-
Tempfile.open("some-temp") do |file|
|
448
|
-
@resource.path(file.path)
|
449
|
-
file.puts("this is a line which is longer than 5 characters")
|
450
|
-
file.flush
|
451
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
452
|
-
@provider.load_current_resource
|
453
|
-
result = @provider.diff_current_from_content "foo" # not longer than 5
|
454
|
-
result.should == [ "(file sizes exceed 5 bytes, diff output suppressed)" ]
|
455
|
-
@resource.diff.should be_nil
|
456
|
-
end
|
457
|
-
end
|
458
|
-
|
459
|
-
it "should not produce a diff when the new content is above the filesize threshold" do
|
460
|
-
Chef::Config[:diff_filesize_threshold] = 5
|
461
|
-
Tempfile.open("some-temp") do |file|
|
462
|
-
@resource.path(file.path)
|
463
|
-
file.puts("foo")
|
464
|
-
file.flush
|
465
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
466
|
-
@provider.load_current_resource
|
467
|
-
result = @provider.diff_current_from_content "this is a line that is longer than 5 characters"
|
468
|
-
result.should == [ "(file sizes exceed 5 bytes, diff output suppressed)" ]
|
469
|
-
@resource.diff.should be_nil
|
470
|
-
end
|
471
|
-
end
|
472
|
-
|
473
|
-
it "should not produce a diff when the generated diff size is above the diff size threshold" do
|
474
|
-
Chef::Config[:diff_output_threshold] = 5
|
475
|
-
Tempfile.open("some-temp") do |file|
|
476
|
-
@resource.path(file.path)
|
477
|
-
file.puts("some text to increase the size of the diff")
|
478
|
-
file.flush
|
479
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
480
|
-
@provider.load_current_resource
|
481
|
-
result = @provider.diff_current_from_content "this is a line that is longer than 5 characters"
|
482
|
-
result.should == [ "(long diff of over 5 characters, diff output suppressed)" ]
|
483
|
-
@resource.diff.should be_nil
|
484
|
-
end
|
485
|
-
end
|
486
|
-
|
487
|
-
it "should return valid diff output when content does not match the string content provided" do
|
488
|
-
Tempfile.open("some-temp") do |file|
|
489
|
-
@resource.path file.path
|
490
|
-
@provider = Chef::Provider::File.new(@resource, @run_context)
|
491
|
-
@provider.load_current_resource
|
492
|
-
result = @provider.diff_current_from_content "foo baz"
|
493
|
-
# remove the file name info which varies.
|
494
|
-
result.shift(2)
|
495
|
-
# Result appearance seems to vary slightly under solaris diff
|
496
|
-
# So we'll compare the second line which is common to both.
|
497
|
-
# Solaris: -1,1 +1,0 @@, "+foo baz"
|
498
|
-
# Linux/Mac: -1,0, +1 @@, "+foo baz"
|
499
|
-
result.length.should == 2
|
500
|
-
result[1].should == "+foo baz"
|
501
|
-
@resource.diff.should_not be_nil
|
502
|
-
end
|
503
|
-
end
|
504
|
-
end
|
53
|
+
it_behaves_like Chef::Provider::File
|
505
54
|
end
|
55
|
+
|