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
@@ -17,66 +17,157 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
shared_examples_for "a directory resource" do
|
20
|
+
|
21
|
+
include_context "diff disabled"
|
22
|
+
|
23
|
+
let(:expect_updated?) {true}
|
24
|
+
|
20
25
|
context "when the target directory does not exist" do
|
21
|
-
|
22
|
-
|
23
|
-
File.
|
26
|
+
before do
|
27
|
+
# assert pre-condition
|
28
|
+
File.should_not exist(path)
|
24
29
|
end
|
25
30
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
describe "when running action :create" do
|
32
|
+
context "and the recursive option is not set" do
|
33
|
+
before do
|
34
|
+
resource.run_action(:create)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "creates the directory when the :create action is run" do
|
38
|
+
File.should exist(path)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "is marked updated by last action" do
|
42
|
+
resource.should be_updated_by_last_action
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "and the recursive option is set" do
|
47
|
+
before do
|
48
|
+
File.should_not exist(path)
|
49
|
+
|
50
|
+
resource.recursive(true)
|
51
|
+
@recursive_path = File.join(path, 'red-headed-stepchild')
|
52
|
+
resource.path(@recursive_path)
|
53
|
+
resource.run_action(:create)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "recursively creates required directories" do
|
57
|
+
File.should exist(path)
|
58
|
+
File.should exist(@recursive_path)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "is marked updated by last action" do
|
62
|
+
resource.should be_updated_by_last_action
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Set up the context for security tests
|
68
|
+
def allowed_acl(sid, expected_perms)
|
69
|
+
[
|
70
|
+
ACE.access_allowed(sid, expected_perms[:specific]),
|
71
|
+
ACE.access_allowed(sid, expected_perms[:generic], (Chef::ReservedNames::Win32::API::Security::INHERIT_ONLY_ACE | Chef::ReservedNames::Win32::API::Security::CONTAINER_INHERIT_ACE | Chef::ReservedNames::Win32::API::Security::OBJECT_INHERIT_ACE))
|
72
|
+
]
|
33
73
|
end
|
74
|
+
|
75
|
+
def denied_acl(sid, expected_perms)
|
76
|
+
[
|
77
|
+
ACE.access_denied(sid, expected_perms[:specific]),
|
78
|
+
ACE.access_denied(sid, expected_perms[:generic], (Chef::ReservedNames::Win32::API::Security::INHERIT_ONLY_ACE | Chef::ReservedNames::Win32::API::Security::CONTAINER_INHERIT_ACE | Chef::ReservedNames::Win32::API::Security::OBJECT_INHERIT_ACE))
|
79
|
+
]
|
80
|
+
end
|
81
|
+
|
82
|
+
def parent_inheritable_acls
|
83
|
+
dummy_directory_path = File.join(test_file_dir, "dummy_directory")
|
84
|
+
dummy_directory = FileUtils.mkdir_p(dummy_directory_path)
|
85
|
+
dummy_desc = get_security_descriptor(dummy_directory_path)
|
86
|
+
FileUtils.rm_rf(dummy_directory_path)
|
87
|
+
dummy_desc
|
88
|
+
end
|
89
|
+
|
90
|
+
it_behaves_like "a securable resource without existing target"
|
34
91
|
end
|
35
92
|
|
36
93
|
context "when the target directory exists" do
|
37
94
|
before(:each) do
|
38
|
-
|
39
|
-
|
95
|
+
# For resources such as remote_directory, simply creating the base
|
96
|
+
# directory isn't enough to test that the system is in the desired state,
|
97
|
+
# so we run the resource twice--otherwise the updated_by_last_action test
|
98
|
+
# will fail.
|
99
|
+
resource.dup.run_action(:create)
|
100
|
+
File.should exist(path)
|
40
101
|
|
41
|
-
it "does not re-create the directory" do
|
42
102
|
resource.run_action(:create)
|
43
|
-
File.should exist(path)
|
44
103
|
end
|
45
104
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
105
|
+
describe "when running action :create" do
|
106
|
+
before do
|
107
|
+
resource.run_action(:create)
|
108
|
+
end
|
50
109
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
110
|
+
it "does not re-create the directory" do
|
111
|
+
File.should exist(path)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "is not marked updated by last action" do
|
115
|
+
resource.should_not be_updated_by_last_action
|
116
|
+
end
|
56
117
|
end
|
57
|
-
end
|
58
118
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
119
|
+
describe "when running action :delete" do
|
120
|
+
context "without the recursive option" do
|
121
|
+
before do
|
122
|
+
resource.run_action(:delete)
|
123
|
+
end
|
124
|
+
|
125
|
+
it "deletes the directory" do
|
126
|
+
File.should_not exist(path)
|
127
|
+
end
|
66
128
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
129
|
+
it "is marked as updated by last action" do
|
130
|
+
resource.should be_updated_by_last_action
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context "with the recursive option" do
|
135
|
+
before do
|
136
|
+
FileUtils.mkdir(File.join(path, 'red-headed-stepchild'))
|
137
|
+
resource.recursive(true)
|
138
|
+
resource.run_action(:delete)
|
139
|
+
end
|
140
|
+
|
141
|
+
it "recursively deletes directories" do
|
142
|
+
File.should_not exist(path)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
72
146
|
end
|
73
147
|
|
74
|
-
it_behaves_like "a securable resource"
|
75
148
|
end
|
76
149
|
|
77
150
|
shared_context Chef::Resource::Directory do
|
151
|
+
# We create the directory than tmp to exercise different file
|
152
|
+
# deployment strategies more completely.
|
153
|
+
let(:test_file_dir) do
|
154
|
+
if windows?
|
155
|
+
File.join(ENV['systemdrive'], "test-dir")
|
156
|
+
else
|
157
|
+
File.join(CHEF_SPEC_DATA, "test-dir")
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
78
161
|
let(:path) do
|
79
|
-
File.join(
|
162
|
+
File.join(test_file_dir, make_tmpname(directory_base))
|
163
|
+
end
|
164
|
+
|
165
|
+
before do
|
166
|
+
FileUtils::mkdir_p(test_file_dir)
|
167
|
+
end
|
168
|
+
|
169
|
+
after do
|
170
|
+
FileUtils::rm_rf(test_file_dir)
|
80
171
|
end
|
81
172
|
|
82
173
|
after(:each) do
|
@@ -16,67 +16,345 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
+
shared_context "deploying with move" do
|
20
|
+
before do
|
21
|
+
@original_atomic_update = Chef::Config[:file_atomic_update]
|
22
|
+
Chef::Config[:file_atomic_update] = true
|
23
|
+
end
|
24
|
+
|
25
|
+
after do
|
26
|
+
Chef::Config[:file_atomic_update] = @original_atomic_update
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
shared_context "deploying with copy" do
|
31
|
+
before do
|
32
|
+
@original_atomic_update = Chef::Config[:file_atomic_update]
|
33
|
+
Chef::Config[:file_atomic_update] = false
|
34
|
+
end
|
35
|
+
|
36
|
+
after do
|
37
|
+
Chef::Config[:file_atomic_update] = @original_atomic_update
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
shared_context "deploying via tmpdir" do
|
42
|
+
before do
|
43
|
+
@original_stage_via = Chef::Config[:file_staging_uses_destdir]
|
44
|
+
Chef::Config[:file_staging_uses_destdir] = false
|
45
|
+
end
|
46
|
+
|
47
|
+
after do
|
48
|
+
Chef::Config[:file_staging_uses_destdir] = @original_stage_via
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
shared_context "deploying via destdir" do
|
53
|
+
before do
|
54
|
+
@original_stage_via = Chef::Config[:file_staging_uses_destdir]
|
55
|
+
Chef::Config[:file_staging_uses_destdir] = true
|
56
|
+
end
|
57
|
+
|
58
|
+
after do
|
59
|
+
Chef::Config[:file_staging_uses_destdir] = @original_stage_via
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
|
19
64
|
shared_examples_for "a file with the wrong content" do
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
sha256_checksum(path).should_not == @expected_checksum
|
26
|
-
end
|
27
|
-
|
28
|
-
it "doesn't overwrite the file when the :create_if_missing action is run" do
|
29
|
-
sleep 1
|
30
|
-
resource.run_action(:create_if_missing)
|
31
|
-
File.stat(path).mtime.should == @expected_mtime
|
65
|
+
before do
|
66
|
+
# Assert starting state is as expected
|
67
|
+
File.should exist(path)
|
68
|
+
# Kinda weird, in this case @expected_checksum is the cksum of the file
|
69
|
+
# with incorrect content.
|
32
70
|
sha256_checksum(path).should == @expected_checksum
|
33
71
|
end
|
34
72
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
73
|
+
include_context "diff disabled"
|
74
|
+
|
75
|
+
context "when running action :create" do
|
76
|
+
context "with backups enabled" do
|
77
|
+
before do
|
78
|
+
Chef::Config[:file_backup_path] = CHEF_SPEC_BACKUP_PATH
|
79
|
+
resource.run_action(:create)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "overwrites the file with the updated content when the :create action is run" do
|
83
|
+
File.stat(path).mtime.should > @expected_mtime
|
84
|
+
sha256_checksum(path).should_not == @expected_checksum
|
85
|
+
end
|
86
|
+
|
87
|
+
it "backs up the existing file" do
|
88
|
+
Dir.glob(backup_glob).size.should equal(1)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "is marked as updated by last action" do
|
92
|
+
resource.should be_updated_by_last_action
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should restore the security contexts on selinux", :selinux_only do
|
96
|
+
selinux_security_context_restored?(path).should be_true
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "with backups disabled" do
|
101
|
+
before do
|
102
|
+
Chef::Config[:file_backup_path] = CHEF_SPEC_BACKUP_PATH
|
103
|
+
resource.backup(0)
|
104
|
+
resource.run_action(:create)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should not attempt to backup the existing file if :backup == 0" do
|
108
|
+
Dir.glob(backup_glob).size.should equal(0)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should restore the security contexts on selinux", :selinux_only do
|
112
|
+
selinux_security_context_restored?(path).should be_true
|
113
|
+
end
|
114
|
+
end
|
39
115
|
end
|
40
116
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
117
|
+
describe "when running action :create_if_missing" do
|
118
|
+
before do
|
119
|
+
resource.run_action(:create_if_missing)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "doesn't overwrite the file when the :create_if_missing action is run" do
|
123
|
+
File.stat(path).mtime.should == @expected_mtime
|
124
|
+
sha256_checksum(path).should == @expected_checksum
|
125
|
+
end
|
126
|
+
|
127
|
+
it "is not marked as updated" do
|
128
|
+
resource.should_not be_updated_by_last_action
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should restore the security contexts on selinux", :selinux_only do
|
132
|
+
selinux_security_context_restored?(path).should be_true
|
133
|
+
end
|
46
134
|
end
|
47
135
|
|
48
|
-
|
49
|
-
|
50
|
-
|
136
|
+
describe "when running action :delete" do
|
137
|
+
before do
|
138
|
+
resource.run_action(:delete)
|
139
|
+
end
|
140
|
+
|
141
|
+
it "deletes the file" do
|
142
|
+
File.should_not exist(path)
|
143
|
+
end
|
144
|
+
|
145
|
+
it "is marked as updated by last action" do
|
146
|
+
resource.should be_updated_by_last_action
|
147
|
+
end
|
51
148
|
end
|
52
149
|
end
|
53
150
|
|
54
151
|
shared_examples_for "a file with the correct content" do
|
55
|
-
|
56
|
-
|
152
|
+
before do
|
153
|
+
# Assert starting state is as expected
|
154
|
+
File.should exist(path)
|
57
155
|
sha256_checksum(path).should == @expected_checksum
|
58
156
|
end
|
59
157
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
158
|
+
include_context "diff disabled"
|
159
|
+
|
160
|
+
describe "when running action :create" do
|
161
|
+
before do
|
162
|
+
resource.run_action(:create)
|
163
|
+
end
|
164
|
+
it "does not overwrite the original when the :create action is run" do
|
165
|
+
sha256_checksum(path).should == @expected_checksum
|
166
|
+
end
|
167
|
+
|
168
|
+
it "does not update the mtime of the file when the :create action is run" do
|
169
|
+
File.stat(path).mtime.should == @expected_mtime
|
170
|
+
end
|
171
|
+
|
172
|
+
it "is not marked as updated by last action" do
|
173
|
+
resource.should_not be_updated_by_last_action
|
174
|
+
end
|
175
|
+
|
176
|
+
it "should restore the security contexts on selinux", :selinux_only do
|
177
|
+
selinux_security_context_restored?(path).should be_true
|
178
|
+
end
|
64
179
|
end
|
65
180
|
|
66
|
-
|
67
|
-
|
68
|
-
|
181
|
+
describe "when running action :create_if_missing" do
|
182
|
+
before do
|
183
|
+
resource.run_action(:create_if_missing)
|
184
|
+
end
|
185
|
+
|
186
|
+
it "doesn't overwrite the file when the :create_if_missing action is run" do
|
187
|
+
sha256_checksum(path).should == @expected_checksum
|
188
|
+
end
|
189
|
+
|
190
|
+
it "is not marked as updated by last action" do
|
191
|
+
resource.should_not be_updated_by_last_action
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should restore the security contexts on selinux", :selinux_only do
|
195
|
+
selinux_security_context_restored?(path).should be_true
|
196
|
+
end
|
69
197
|
end
|
70
198
|
|
71
|
-
|
72
|
-
|
73
|
-
|
199
|
+
describe "when running action :delete" do
|
200
|
+
before do
|
201
|
+
resource.run_action(:delete)
|
202
|
+
end
|
203
|
+
|
204
|
+
it "deletes the file when the :delete action is run" do
|
205
|
+
File.should_not exist(path)
|
206
|
+
end
|
207
|
+
|
208
|
+
it "is marked as updated by last action" do
|
209
|
+
resource.should be_updated_by_last_action
|
210
|
+
end
|
74
211
|
end
|
75
212
|
end
|
76
213
|
|
77
214
|
shared_examples_for "a file resource" do
|
215
|
+
describe "when deploying with :move" do
|
216
|
+
|
217
|
+
include_context "deploying with move"
|
218
|
+
|
219
|
+
describe "when deploying via tmpdir" do
|
220
|
+
|
221
|
+
include_context "deploying via tmpdir"
|
222
|
+
|
223
|
+
it_behaves_like "a configured file resource"
|
224
|
+
end
|
225
|
+
|
226
|
+
describe "when deploying via destdir" do
|
227
|
+
|
228
|
+
include_context "deploying via destdir"
|
229
|
+
|
230
|
+
it_behaves_like "a configured file resource"
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
describe "when deploying with :copy" do
|
235
|
+
|
236
|
+
include_context "deploying with copy"
|
237
|
+
|
238
|
+
describe "when deploying via tmpdir" do
|
239
|
+
|
240
|
+
include_context "deploying via tmpdir"
|
241
|
+
|
242
|
+
it_behaves_like "a configured file resource"
|
243
|
+
end
|
244
|
+
|
245
|
+
describe "when deploying via destdir" do
|
246
|
+
|
247
|
+
include_context "deploying via destdir"
|
248
|
+
|
249
|
+
it_behaves_like "a configured file resource"
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
describe "when running under why run" do
|
254
|
+
|
255
|
+
before do
|
256
|
+
Chef::Config[:why_run] = true
|
257
|
+
end
|
258
|
+
|
259
|
+
after do
|
260
|
+
Chef::Config[:why_run] = false
|
261
|
+
end
|
262
|
+
|
263
|
+
context "and the resource has a path with a missing intermediate directory" do
|
264
|
+
# CHEF-3978
|
265
|
+
|
266
|
+
let(:path) do
|
267
|
+
File.join(test_file_dir, "intermediate_dir", make_tmpname(file_base))
|
268
|
+
end
|
269
|
+
|
270
|
+
it "successfully doesn't create the file" do
|
271
|
+
resource.run_action(:create) # should not raise
|
272
|
+
File.should_not exist(path)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
end
|
277
|
+
|
278
|
+
describe "when setting atomic_update" do
|
279
|
+
it "booleans should work" do
|
280
|
+
lambda {resource.atomic_update(true)}.should_not raise_error
|
281
|
+
lambda {resource.atomic_update(false)}.should_not raise_error
|
282
|
+
end
|
283
|
+
|
284
|
+
it "anything else should raise an error" do
|
285
|
+
lambda {resource.atomic_update(:copy)}.should raise_error(ArgumentError)
|
286
|
+
lambda {resource.atomic_update(:move)}.should raise_error(ArgumentError)
|
287
|
+
lambda {resource.atomic_update(958)}.should raise_error(ArgumentError)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
end
|
292
|
+
|
293
|
+
shared_examples_for "file resource not pointing to a real file" do
|
294
|
+
def symlink?(file_path)
|
295
|
+
if windows?
|
296
|
+
Chef::ReservedNames::Win32::File.symlink?(file_path)
|
297
|
+
else
|
298
|
+
File.symlink?(file_path)
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
def real_file?(file_path)
|
303
|
+
!symlink?(file_path) && File.file?(file_path)
|
304
|
+
end
|
305
|
+
|
306
|
+
describe "when force_unlink is set to true" do
|
307
|
+
it ":create unlinks the target" do
|
308
|
+
real_file?(path).should be_false
|
309
|
+
resource.force_unlink(true)
|
310
|
+
resource.run_action(:create)
|
311
|
+
real_file?(path).should be_true
|
312
|
+
binread(path).should == expected_content
|
313
|
+
resource.should be_updated_by_last_action
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
describe "when force_unlink is set to false" do
|
318
|
+
it ":create raises an error" do
|
319
|
+
lambda {resource.run_action(:create) }.should raise_error(Chef::Exceptions::FileTypeMismatch)
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
describe "when force_unlink is not set (default)" do
|
324
|
+
it ":create raises an error" do
|
325
|
+
lambda {resource.run_action(:create) }.should raise_error(Chef::Exceptions::FileTypeMismatch)
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
shared_examples_for "a configured file resource" do
|
331
|
+
|
332
|
+
include_context "diff disabled"
|
333
|
+
|
334
|
+
before do
|
335
|
+
Chef::Log.level = :info
|
336
|
+
end
|
337
|
+
|
78
338
|
# note the stripping of the drive letter from the tmpdir on windows
|
79
|
-
let(:backup_glob) { File.join(CHEF_SPEC_BACKUP_PATH,
|
339
|
+
let(:backup_glob) { File.join(CHEF_SPEC_BACKUP_PATH, test_file_dir.sub(/^([A-Za-z]:)/, ""), "#{file_base}*") }
|
340
|
+
|
341
|
+
# Most tests update the resource, but a few do not. We need to test that the
|
342
|
+
# resource is marked updated or not correctly, but the test contexts are
|
343
|
+
# composed between correct/incorrect content and correct/incorrect
|
344
|
+
# permissions. We override this "let" definition in the context where content
|
345
|
+
# and permissions are correct.
|
346
|
+
let(:expect_updated?) { true }
|
347
|
+
|
348
|
+
include Chef::Mixin::ShellOut
|
349
|
+
|
350
|
+
def selinux_security_context_restored?(path)
|
351
|
+
@restorecon_path = which("restorecon") if @restorecon_path.nil?
|
352
|
+
restorecon_test_command = "#{@restorecon_path} -n -v #{path}"
|
353
|
+
cmdresult = shell_out(restorecon_test_command)
|
354
|
+
# restorecon will print the required changes to stdout if any is
|
355
|
+
# needed
|
356
|
+
cmdresult.stdout.empty?
|
357
|
+
end
|
80
358
|
|
81
359
|
def binread(file)
|
82
360
|
content = File.open(file, "rb") do |f|
|
@@ -86,29 +364,457 @@ shared_examples_for "a file resource" do
|
|
86
364
|
content
|
87
365
|
end
|
88
366
|
|
89
|
-
context "when the target file
|
367
|
+
context "when the target file is a symlink", :not_supported_on_win2k3 do
|
368
|
+
let(:symlink_target) {
|
369
|
+
File.join(CHEF_SPEC_DATA, "file-test-target")
|
370
|
+
}
|
90
371
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
372
|
+
|
373
|
+
describe "when configured not to manage symlink's target" do
|
374
|
+
before(:each) do
|
375
|
+
# configure not to manage symlink source
|
376
|
+
resource.manage_symlink_source(false)
|
377
|
+
|
378
|
+
# create symlinks for test context
|
379
|
+
FileUtils.touch(symlink_target)
|
380
|
+
|
381
|
+
if windows?
|
382
|
+
Chef::ReservedNames::Win32::File.symlink(symlink_target, path)
|
383
|
+
else
|
384
|
+
File.symlink(symlink_target, path)
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
after(:each) do
|
389
|
+
FileUtils.rm_rf(symlink_target)
|
390
|
+
FileUtils.rm_rf(path)
|
391
|
+
end
|
392
|
+
|
393
|
+
describe "when symlink target has correct content" do
|
394
|
+
before(:each) do
|
395
|
+
File.open(symlink_target, "wb") { |f| f.print expected_content }
|
396
|
+
end
|
397
|
+
|
398
|
+
it_behaves_like "file resource not pointing to a real file"
|
399
|
+
end
|
400
|
+
|
401
|
+
describe "when symlink target has the wrong content" do
|
402
|
+
before(:each) do
|
403
|
+
File.open(symlink_target, "wb") { |f| f.print "This is so wrong!!!" }
|
404
|
+
end
|
405
|
+
|
406
|
+
after(:each) do
|
407
|
+
# symlink should never be followed
|
408
|
+
binread(symlink_target).should == "This is so wrong!!!"
|
409
|
+
end
|
410
|
+
|
411
|
+
it_behaves_like "file resource not pointing to a real file"
|
412
|
+
end
|
96
413
|
end
|
97
414
|
|
98
|
-
|
99
|
-
|
100
|
-
|
415
|
+
# Unix-only for now. Windows behavior may differ because of how ACL
|
416
|
+
# management handles symlinks. Since symlinks are rare on Windows and this
|
417
|
+
# feature primarily exists to support the case where a well-known file
|
418
|
+
# (e.g., resolv.conf) has been converted to a symlink, we're okay with the
|
419
|
+
# discrepancy.
|
420
|
+
context "when configured to manage the symlink source", :unix_only do
|
421
|
+
|
422
|
+
before do
|
423
|
+
resource.manage_symlink_source(true)
|
424
|
+
end
|
425
|
+
|
426
|
+
context "but the symlink is part of a loop" do
|
427
|
+
let(:link1_path) { File.join(CHEF_SPEC_DATA, "points-to-link2") }
|
428
|
+
let(:link2_path) { File.join(CHEF_SPEC_DATA, "points-to-link1") }
|
429
|
+
|
430
|
+
before do
|
431
|
+
# point resource at link1:
|
432
|
+
resource.path(link1_path)
|
433
|
+
# create symlinks for test context
|
434
|
+
File.symlink(link1_path, link2_path)
|
435
|
+
File.symlink(link2_path, link1_path)
|
436
|
+
end
|
437
|
+
|
438
|
+
after(:each) do
|
439
|
+
FileUtils.rm_rf(link1_path)
|
440
|
+
FileUtils.rm_rf(link2_path)
|
441
|
+
end
|
442
|
+
|
443
|
+
it "raises an InvalidSymlink error" do
|
444
|
+
lambda { resource.run_action(:create) }.should raise_error(Chef::Exceptions::InvalidSymlink)
|
445
|
+
end
|
446
|
+
|
447
|
+
it "issues a warning/assumption in whyrun mode" do
|
448
|
+
begin
|
449
|
+
Chef::Config[:why_run] = true
|
450
|
+
resource.run_action(:create) # should not raise
|
451
|
+
ensure
|
452
|
+
Chef::Config[:why_run] = false
|
453
|
+
end
|
454
|
+
end
|
455
|
+
end
|
456
|
+
|
457
|
+
context "but the symlink points to a nonexistent file" do
|
458
|
+
let(:link_path) { File.join(CHEF_SPEC_DATA, "points-to-nothing") }
|
459
|
+
let(:not_existent_source) { File.join(CHEF_SPEC_DATA, "i-am-not-here") }
|
460
|
+
|
461
|
+
before do
|
462
|
+
resource.path(link_path)
|
463
|
+
# create symlinks for test context
|
464
|
+
File.symlink(not_existent_source, link_path)
|
465
|
+
FileUtils.rm_rf(not_existent_source)
|
466
|
+
end
|
467
|
+
|
468
|
+
after(:each) do
|
469
|
+
FileUtils.rm_rf(link_path)
|
470
|
+
end
|
471
|
+
it "raises an InvalidSymlink error" do
|
472
|
+
lambda { resource.run_action(:create) }.should raise_error(Chef::Exceptions::InvalidSymlink)
|
473
|
+
end
|
474
|
+
|
475
|
+
it "issues a warning/assumption in whyrun mode" do
|
476
|
+
begin
|
477
|
+
Chef::Config[:why_run] = true
|
478
|
+
resource.run_action(:create) # should not raise
|
479
|
+
ensure
|
480
|
+
Chef::Config[:why_run] = false
|
481
|
+
end
|
482
|
+
end
|
483
|
+
end
|
484
|
+
|
485
|
+
context "but the symlink is points to a non-file fs entry" do
|
486
|
+
let(:link_path) { File.join(CHEF_SPEC_DATA, "points-to-dir") }
|
487
|
+
let(:not_a_file_path) { File.join(CHEF_SPEC_DATA, "dir-at-end-of-symlink") }
|
488
|
+
|
489
|
+
before do
|
490
|
+
# point resource at link1:
|
491
|
+
resource.path(link_path)
|
492
|
+
# create symlinks for test context
|
493
|
+
File.symlink(not_a_file_path, link_path)
|
494
|
+
Dir.mkdir(not_a_file_path)
|
495
|
+
end
|
496
|
+
|
497
|
+
after(:each) do
|
498
|
+
FileUtils.rm_rf(link_path)
|
499
|
+
FileUtils.rm_rf(not_a_file_path)
|
500
|
+
end
|
501
|
+
|
502
|
+
it "raises an InvalidSymlink error" do
|
503
|
+
lambda { resource.run_action(:create) }.should raise_error(Chef::Exceptions::FileTypeMismatch)
|
504
|
+
end
|
505
|
+
|
506
|
+
it "issues a warning/assumption in whyrun mode" do
|
507
|
+
begin
|
508
|
+
Chef::Config[:why_run] = true
|
509
|
+
resource.run_action(:create) # should not raise
|
510
|
+
ensure
|
511
|
+
Chef::Config[:why_run] = false
|
512
|
+
end
|
513
|
+
end
|
514
|
+
end
|
515
|
+
|
516
|
+
context "when the symlink source is a real file" do
|
517
|
+
|
518
|
+
let(:wrong_content) { "this is the wrong content" }
|
519
|
+
let(:link_path) { File.join(CHEF_SPEC_DATA, "points-to-real-file") }
|
520
|
+
|
521
|
+
before do
|
522
|
+
# point resource at link:
|
523
|
+
resource.path(link_path)
|
524
|
+
# create symlinks for test context
|
525
|
+
File.symlink(path, link_path)
|
526
|
+
end
|
527
|
+
|
528
|
+
after(:each) do
|
529
|
+
# shared examples should not change our test setup of a file resource
|
530
|
+
# pointing at a symlink:
|
531
|
+
resource.path.should == link_path
|
532
|
+
FileUtils.rm_rf(link_path)
|
533
|
+
end
|
534
|
+
|
535
|
+
context "and the permissions are incorrect" do
|
536
|
+
before do
|
537
|
+
# Create source (real) file
|
538
|
+
File.open(path, "wb") { |f| f.write(expected_content) }
|
539
|
+
end
|
540
|
+
|
541
|
+
|
542
|
+
include_context "setup broken permissions"
|
543
|
+
|
544
|
+
include_examples "a securable resource with existing target"
|
545
|
+
|
546
|
+
it "does not replace the symlink with a real file" do
|
547
|
+
resource.run_action(:create)
|
548
|
+
File.should be_symlink(link_path)
|
549
|
+
end
|
550
|
+
|
551
|
+
end
|
552
|
+
|
553
|
+
context "and the content is incorrect" do
|
554
|
+
before do
|
555
|
+
# Create source (real) file
|
556
|
+
File.open(path, "wb") { |f| f.write(wrong_content) }
|
557
|
+
end
|
558
|
+
|
559
|
+
it "updates the source file content" do
|
560
|
+
pending
|
561
|
+
end
|
562
|
+
|
563
|
+
it "marks the resource as updated" do
|
564
|
+
resource.run_action(:create)
|
565
|
+
resource.should be_updated_by_last_action
|
566
|
+
end
|
567
|
+
|
568
|
+
it "does not replace the symlink with a real file" do
|
569
|
+
resource.run_action(:create)
|
570
|
+
File.should be_symlink(link_path)
|
571
|
+
end
|
572
|
+
end
|
573
|
+
|
574
|
+
context "and the content and permissions are correct" do
|
575
|
+
let(:expect_updated?) { false }
|
576
|
+
|
577
|
+
before do
|
578
|
+
# Create source (real) file
|
579
|
+
File.open(path, "wb") { |f| f.write(expected_content) }
|
580
|
+
end
|
581
|
+
include_context "setup correct permissions"
|
582
|
+
|
583
|
+
include_examples "a securable resource with existing target"
|
584
|
+
|
585
|
+
end
|
586
|
+
|
587
|
+
end
|
588
|
+
|
589
|
+
context "when the symlink points to a symlink which points to a real file" do
|
590
|
+
|
591
|
+
let(:wrong_content) { "this is the wrong content" }
|
592
|
+
let(:link_to_file_path) { File.join(CHEF_SPEC_DATA, "points-to-real-file") }
|
593
|
+
let(:link_to_link_path) { File.join(CHEF_SPEC_DATA, "points-to-next-link") }
|
594
|
+
|
595
|
+
before do
|
596
|
+
# point resource at link:
|
597
|
+
resource.path(link_to_link_path)
|
598
|
+
# create symlinks for test context
|
599
|
+
File.symlink(path, link_to_file_path)
|
600
|
+
File.symlink(link_to_file_path, link_to_link_path)
|
601
|
+
|
602
|
+
# Create source (real) file
|
603
|
+
File.open(path, "wb") { |f| f.write(wrong_content) }
|
604
|
+
end
|
605
|
+
|
606
|
+
include_context "setup broken permissions"
|
607
|
+
|
608
|
+
include_examples "a securable resource with existing target"
|
609
|
+
|
610
|
+
after(:each) do
|
611
|
+
# shared examples should not change our test setup of a file resource
|
612
|
+
# pointing at a symlink:
|
613
|
+
resource.path.should == link_to_link_path
|
614
|
+
FileUtils.rm_rf(link_to_file_path)
|
615
|
+
FileUtils.rm_rf(link_to_link_path)
|
616
|
+
end
|
617
|
+
|
618
|
+
it "does not replace the symlink with a real file" do
|
619
|
+
resource.run_action(:create)
|
620
|
+
File.should be_symlink(link_to_link_path)
|
621
|
+
File.should be_symlink(link_to_file_path)
|
622
|
+
end
|
623
|
+
|
624
|
+
end
|
101
625
|
end
|
626
|
+
end
|
102
627
|
|
103
|
-
|
104
|
-
|
105
|
-
|
628
|
+
context "when the target file is a directory" do
|
629
|
+
before(:each) do
|
630
|
+
FileUtils.mkdir_p(path)
|
106
631
|
end
|
107
632
|
|
108
|
-
|
109
|
-
|
633
|
+
after(:each) do
|
634
|
+
FileUtils.rm_rf(path)
|
635
|
+
end
|
636
|
+
|
637
|
+
it_behaves_like "file resource not pointing to a real file"
|
638
|
+
end
|
639
|
+
|
640
|
+
context "when the target file is a blockdev",:unix_only, :requires_root, :not_supported_on_solaris do
|
641
|
+
include Chef::Mixin::ShellOut
|
642
|
+
let(:path) do
|
643
|
+
File.join(CHEF_SPEC_DATA, "testdev")
|
644
|
+
end
|
645
|
+
|
646
|
+
before(:each) do
|
647
|
+
result = shell_out("mknod #{path} b 1 2")
|
648
|
+
result.stderr.empty?
|
649
|
+
end
|
650
|
+
|
651
|
+
after(:each) do
|
652
|
+
FileUtils.rm_rf(path)
|
653
|
+
end
|
654
|
+
|
655
|
+
it_behaves_like "file resource not pointing to a real file"
|
656
|
+
end
|
657
|
+
|
658
|
+
context "when the target file is a chardev",:unix_only, :requires_root, :not_supported_on_solaris do
|
659
|
+
include Chef::Mixin::ShellOut
|
660
|
+
let(:path) do
|
661
|
+
File.join(CHEF_SPEC_DATA, "testdev")
|
662
|
+
end
|
663
|
+
|
664
|
+
before(:each) do
|
665
|
+
result = shell_out("mknod #{path} c 1 2")
|
666
|
+
result.stderr.empty?
|
667
|
+
end
|
668
|
+
|
669
|
+
after(:each) do
|
670
|
+
FileUtils.rm_rf(path)
|
671
|
+
end
|
672
|
+
|
673
|
+
it_behaves_like "file resource not pointing to a real file"
|
674
|
+
end
|
675
|
+
|
676
|
+
context "when the target file is a pipe",:unix_only do
|
677
|
+
include Chef::Mixin::ShellOut
|
678
|
+
let(:path) do
|
679
|
+
File.join(CHEF_SPEC_DATA, "testpipe")
|
680
|
+
end
|
681
|
+
|
682
|
+
before(:each) do
|
683
|
+
result = shell_out("mkfifo #{path}")
|
684
|
+
result.stderr.empty?
|
685
|
+
end
|
686
|
+
|
687
|
+
after(:each) do
|
688
|
+
FileUtils.rm_rf(path)
|
689
|
+
end
|
690
|
+
|
691
|
+
it_behaves_like "file resource not pointing to a real file"
|
692
|
+
end
|
693
|
+
|
694
|
+
context "when the target file is a socket",:unix_only do
|
695
|
+
require 'socket'
|
696
|
+
|
697
|
+
# It turns out that the path to a socket can have at most ~104
|
698
|
+
# bytes. Therefore we are creating our sockets in tmpdir so that
|
699
|
+
# they have a shorter path.
|
700
|
+
let(:test_socket_dir) { File.join(Dir.tmpdir, "sockets") }
|
701
|
+
|
702
|
+
before do
|
703
|
+
FileUtils::mkdir_p(test_socket_dir)
|
704
|
+
end
|
705
|
+
|
706
|
+
after do
|
707
|
+
FileUtils::rm_rf(test_socket_dir)
|
708
|
+
end
|
709
|
+
|
710
|
+
let(:path) do
|
711
|
+
File.join(test_socket_dir, "testsocket")
|
712
|
+
end
|
713
|
+
|
714
|
+
before(:each) do
|
715
|
+
path.bytesize.should <= 104
|
716
|
+
UNIXServer.new(path)
|
717
|
+
end
|
718
|
+
|
719
|
+
after(:each) do
|
720
|
+
FileUtils.rm_rf(path)
|
721
|
+
end
|
722
|
+
|
723
|
+
it_behaves_like "file resource not pointing to a real file"
|
724
|
+
end
|
725
|
+
|
726
|
+
# Regression test for http://tickets.opscode.com/browse/CHEF-4082
|
727
|
+
context "when notification is configured" do
|
728
|
+
describe "when path is specified with normal seperator" do
|
729
|
+
before do
|
730
|
+
@notified_resource = Chef::Resource.new("punk", resource.run_context)
|
731
|
+
resource.notifies(:run, @notified_resource, :immediately)
|
732
|
+
resource.run_action(:create)
|
733
|
+
end
|
734
|
+
|
735
|
+
it "should notify the other resources correctly" do
|
736
|
+
resource.should be_updated_by_last_action
|
737
|
+
resource.run_context.immediate_notifications(resource).length.should == 1
|
738
|
+
end
|
739
|
+
end
|
740
|
+
|
741
|
+
describe "when path is specified with windows seperator", :windows_only do
|
742
|
+
let(:path) {
|
743
|
+
File.join(test_file_dir, make_tmpname(file_base)).gsub(::File::SEPARATOR, ::File::ALT_SEPARATOR)
|
744
|
+
}
|
745
|
+
|
746
|
+
before do
|
747
|
+
@notified_resource = Chef::Resource.new("punk", resource.run_context)
|
748
|
+
resource.notifies(:run, @notified_resource, :immediately)
|
749
|
+
resource.run_action(:create)
|
750
|
+
end
|
751
|
+
|
752
|
+
it "should notify the other resources correctly" do
|
753
|
+
resource.should be_updated_by_last_action
|
754
|
+
resource.run_context.immediate_notifications(resource).length.should == 1
|
755
|
+
end
|
756
|
+
end
|
757
|
+
end
|
758
|
+
|
759
|
+
context "when the target file does not exist" do
|
760
|
+
before do
|
761
|
+
# Assert starting state is expected
|
110
762
|
File.should_not exist(path)
|
111
763
|
end
|
764
|
+
|
765
|
+
describe "when running action :create" do
|
766
|
+
before do
|
767
|
+
resource.run_action(:create)
|
768
|
+
end
|
769
|
+
|
770
|
+
it "creates the file when the :create action is run" do
|
771
|
+
File.should exist(path)
|
772
|
+
end
|
773
|
+
|
774
|
+
it "creates the file with the correct content when the :create action is run" do
|
775
|
+
binread(path).should == expected_content
|
776
|
+
end
|
777
|
+
|
778
|
+
it "is marked as updated by last action" do
|
779
|
+
resource.should be_updated_by_last_action
|
780
|
+
end
|
781
|
+
|
782
|
+
it "should restore the security contexts on selinux", :selinux_only do
|
783
|
+
selinux_security_context_restored?(path).should be_true
|
784
|
+
end
|
785
|
+
end
|
786
|
+
|
787
|
+
describe "when running action :create_if_missing" do
|
788
|
+
before do
|
789
|
+
resource.run_action(:create_if_missing)
|
790
|
+
end
|
791
|
+
|
792
|
+
it "creates the file with the correct content" do
|
793
|
+
binread(path).should == expected_content
|
794
|
+
end
|
795
|
+
|
796
|
+
it "is marked as updated by last action" do
|
797
|
+
resource.should be_updated_by_last_action
|
798
|
+
end
|
799
|
+
|
800
|
+
it "should restore the security contexts on selinux", :selinux_only do
|
801
|
+
selinux_security_context_restored?(path).should be_true
|
802
|
+
end
|
803
|
+
end
|
804
|
+
|
805
|
+
describe "when running action :delete" do
|
806
|
+
before do
|
807
|
+
resource.run_action(:delete)
|
808
|
+
end
|
809
|
+
|
810
|
+
it "deletes the file when the :delete action is run" do
|
811
|
+
File.should_not exist(path)
|
812
|
+
end
|
813
|
+
|
814
|
+
it "is not marked updated by last action" do
|
815
|
+
resource.should_not be_updated_by_last_action
|
816
|
+
end
|
817
|
+
end
|
112
818
|
end
|
113
819
|
|
114
820
|
# Set up the context for security tests
|
@@ -120,10 +826,22 @@ shared_examples_for "a file resource" do
|
|
120
826
|
[ ACE.access_denied(sid, expected_perms[:specific]) ]
|
121
827
|
end
|
122
828
|
|
829
|
+
def parent_inheritable_acls
|
830
|
+
dummy_file_path = File.join(test_file_dir, "dummy_file")
|
831
|
+
FileUtils.touch(dummy_file_path)
|
832
|
+
dummy_desc = get_security_descriptor(dummy_file_path)
|
833
|
+
FileUtils.rm_rf(dummy_file_path)
|
834
|
+
dummy_desc
|
835
|
+
end
|
836
|
+
|
837
|
+
it_behaves_like "a securable resource without existing target"
|
123
838
|
|
124
839
|
context "when the target file has the wrong content" do
|
125
840
|
before(:each) do
|
126
841
|
File.open(path, "wb") { |f| f.print "This is so wrong!!!" }
|
842
|
+
now = Time.now.to_i
|
843
|
+
File.utime(now - 9000, now - 9000, path)
|
844
|
+
|
127
845
|
@expected_mtime = File.stat(path).mtime
|
128
846
|
@expected_checksum = sha256_checksum(path)
|
129
847
|
end
|
@@ -133,70 +851,118 @@ shared_examples_for "a file resource" do
|
|
133
851
|
|
134
852
|
it_behaves_like "a file with the wrong content"
|
135
853
|
|
136
|
-
it_behaves_like "a securable resource"
|
854
|
+
it_behaves_like "a securable resource with existing target"
|
137
855
|
end
|
138
856
|
|
139
857
|
context "and the target file has incorrect permissions" do
|
140
858
|
include_context "setup broken permissions"
|
141
859
|
|
142
860
|
it_behaves_like "a file with the wrong content"
|
143
|
-
|
144
|
-
it_behaves_like "a securable resource"
|
861
|
+
|
862
|
+
it_behaves_like "a securable resource with existing target"
|
145
863
|
end
|
146
864
|
end
|
147
865
|
|
148
866
|
context "when the target file has the correct content" do
|
149
867
|
before(:each) do
|
150
868
|
File.open(path, "wb") { |f| f.print expected_content }
|
869
|
+
now = Time.now.to_i
|
870
|
+
File.utime(now - 9000, now - 9000, path)
|
871
|
+
|
151
872
|
@expected_mtime = File.stat(path).mtime
|
152
|
-
@expected_atime = File.stat(path).atime
|
153
873
|
@expected_checksum = sha256_checksum(path)
|
154
874
|
end
|
155
875
|
|
156
876
|
describe "and the target file has the correct permissions" do
|
877
|
+
|
878
|
+
# When permissions and content are correct, chef should do nothing and
|
879
|
+
# the resource should not be marked updated.
|
880
|
+
let(:expect_updated?) { false }
|
881
|
+
|
157
882
|
include_context "setup correct permissions"
|
158
883
|
|
159
884
|
it_behaves_like "a file with the correct content"
|
160
885
|
|
161
|
-
it_behaves_like "a securable resource"
|
886
|
+
it_behaves_like "a securable resource with existing target"
|
162
887
|
end
|
163
888
|
|
164
889
|
context "and the target file has incorrect permissions" do
|
165
890
|
include_context "setup broken permissions"
|
166
891
|
|
167
892
|
it_behaves_like "a file with the correct content"
|
168
|
-
|
169
|
-
it_behaves_like "a securable resource"
|
893
|
+
|
894
|
+
it_behaves_like "a securable resource with existing target"
|
170
895
|
end
|
171
896
|
end
|
172
897
|
|
173
|
-
|
174
|
-
|
175
|
-
|
898
|
+
# Regression test for http://tickets.opscode.com/browse/CHEF-4419
|
899
|
+
context "when the path starts with '/' and target file exists", :windows_only do
|
900
|
+
let(:path) do
|
901
|
+
File.join(test_file_dir[2..test_file_dir.length], make_tmpname(file_base))
|
902
|
+
end
|
903
|
+
|
904
|
+
before do
|
905
|
+
File.open(path, "wb") { |f| f.print expected_content }
|
906
|
+
now = Time.now.to_i
|
907
|
+
File.utime(now - 9000, now - 9000, path)
|
176
908
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
it "has only inherited aces if no explicit aces were specified" do
|
181
|
-
File.exist?(path).should == false
|
909
|
+
@expected_mtime = File.stat(path).mtime
|
910
|
+
@expected_checksum = sha256_checksum(path)
|
911
|
+
end
|
182
912
|
|
183
|
-
|
913
|
+
describe ":create action should run without any updates" do
|
914
|
+
before do
|
915
|
+
# Assert starting state is as expected
|
916
|
+
File.should exist(path)
|
917
|
+
sha256_checksum(path).should == @expected_checksum
|
918
|
+
resource.run_action(:create)
|
919
|
+
end
|
920
|
+
|
921
|
+
it "does not overwrite the original when the :create action is run" do
|
922
|
+
sha256_checksum(path).should == @expected_checksum
|
923
|
+
end
|
924
|
+
|
925
|
+
it "does not update the mtime of the file when the :create action is run" do
|
926
|
+
File.stat(path).mtime.should == @expected_mtime
|
927
|
+
end
|
184
928
|
|
185
|
-
|
186
|
-
|
187
|
-
ace.inherited?.should == true
|
929
|
+
it "is not marked as updated by last action" do
|
930
|
+
resource.should_not be_updated_by_last_action
|
188
931
|
end
|
189
932
|
end
|
190
933
|
end
|
934
|
+
|
191
935
|
end
|
192
936
|
|
193
937
|
shared_context Chef::Resource::File do
|
938
|
+
if windows?
|
939
|
+
require 'chef/win32/file'
|
940
|
+
end
|
941
|
+
|
942
|
+
# We create the files in a different directory than tmp to exercise
|
943
|
+
# different file deployment strategies more completely.
|
944
|
+
let(:test_file_dir) do
|
945
|
+
if windows?
|
946
|
+
File.join(ENV['systemdrive'], "test-dir")
|
947
|
+
else
|
948
|
+
File.join(CHEF_SPEC_DATA, "test-dir")
|
949
|
+
end
|
950
|
+
end
|
951
|
+
|
194
952
|
let(:path) do
|
195
|
-
File.join(
|
953
|
+
File.join(test_file_dir, make_tmpname(file_base))
|
954
|
+
end
|
955
|
+
|
956
|
+
before do
|
957
|
+
FileUtils::mkdir_p(test_file_dir)
|
196
958
|
end
|
197
959
|
|
198
960
|
after(:each) do
|
199
961
|
FileUtils.rm_r(path) if File.exists?(path)
|
200
962
|
FileUtils.rm_r(CHEF_SPEC_BACKUP_PATH) if File.exists?(CHEF_SPEC_BACKUP_PATH)
|
201
963
|
end
|
964
|
+
|
965
|
+
after do
|
966
|
+
FileUtils::rm_rf(test_file_dir)
|
967
|
+
end
|
202
968
|
end
|