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
@@ -0,0 +1,70 @@
|
|
1
|
+
#
|
2
|
+
# Author:: John Keiser (<jkeiser@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2012 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 'chef/chef_fs/file_system'
|
20
|
+
require 'chef/chef_fs/file_system/memory_root'
|
21
|
+
require 'chef/chef_fs/file_system/memory_dir'
|
22
|
+
require 'chef/chef_fs/file_system/memory_file'
|
23
|
+
|
24
|
+
module FileSystemSupport
|
25
|
+
def memory_fs(pretty_name, value, cannot_be_in_regex = nil)
|
26
|
+
if !value.is_a?(Hash)
|
27
|
+
raise "memory_fs() must take a Hash"
|
28
|
+
end
|
29
|
+
dir = Chef::ChefFS::FileSystem::MemoryRoot.new(pretty_name, cannot_be_in_regex)
|
30
|
+
value.each do |key, child|
|
31
|
+
dir.add_child(memory_fs_value(child, key.to_s, dir))
|
32
|
+
end
|
33
|
+
dir
|
34
|
+
end
|
35
|
+
|
36
|
+
def memory_fs_value(value, name = '', parent = nil)
|
37
|
+
if value.is_a?(Hash)
|
38
|
+
dir = Chef::ChefFS::FileSystem::MemoryDir.new(name, parent)
|
39
|
+
value.each do |key, child|
|
40
|
+
dir.add_child(memory_fs_value(child, key.to_s, dir))
|
41
|
+
end
|
42
|
+
dir
|
43
|
+
else
|
44
|
+
Chef::ChefFS::FileSystem::MemoryFile.new(name, parent, value || "#{name}\n")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def pattern(p)
|
49
|
+
Chef::ChefFS::FilePattern.new(p)
|
50
|
+
end
|
51
|
+
|
52
|
+
def return_paths(*expected)
|
53
|
+
ReturnPaths.new(expected)
|
54
|
+
end
|
55
|
+
|
56
|
+
def no_blocking_calls_allowed
|
57
|
+
[ Chef::ChefFS::FileSystem::MemoryFile, Chef::ChefFS::FileSystem::MemoryDir ].each do |c|
|
58
|
+
[ :children, :exists?, :read ].each do |m|
|
59
|
+
c.any_instance.stub(m).and_raise("#{m.to_s} should not be called")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def list_should_yield_paths(fs, pattern_str, *expected_paths)
|
65
|
+
result_paths = []
|
66
|
+
Chef::ChefFS::FileSystem.list(fs, pattern(pattern_str)).each { |result| result_paths << result.path }
|
67
|
+
result_paths.should =~ expected_paths
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
@@ -0,0 +1,162 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
3
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
4
|
+
# Copyright:: Copyright (c) 2010, 2012 Opscode, Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
|
21
|
+
shared_examples_for "a platform introspector" do
|
22
|
+
before(:each) do
|
23
|
+
@platform_hash = {}
|
24
|
+
%w{openbsd freebsd}.each do |x|
|
25
|
+
@platform_hash[x] = {
|
26
|
+
"default" => x,
|
27
|
+
"1.2.3" => "#{x}-1.2.3"
|
28
|
+
}
|
29
|
+
end
|
30
|
+
@platform_hash["debian"] = {["5", "6"] => "debian-5/6", "default" => "debian"}
|
31
|
+
@platform_hash["default"] = "default"
|
32
|
+
|
33
|
+
@platform_family_hash = {
|
34
|
+
"debian" => "debian value",
|
35
|
+
[:rhel, :fedora] => "redhatty value",
|
36
|
+
"suse" => "suse value",
|
37
|
+
:default => "default value"
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns a default value when there is no known platform" do
|
42
|
+
node = Hash.new
|
43
|
+
platform_introspector.value_for_platform(@platform_hash).should == "default"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "returns a default value when there is no known platform family" do
|
47
|
+
platform_introspector.value_for_platform_family(@platform_family_hash).should == "default value"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns a default value when the current platform doesn't match" do
|
51
|
+
node.automatic_attrs[:platform] = "not-a-known-platform"
|
52
|
+
platform_introspector.value_for_platform(@platform_hash).should == "default"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns a default value when current platform_family doesn't match" do
|
56
|
+
node.automatic_attrs[:platform_family] = "ultra-derived-linux"
|
57
|
+
platform_introspector.value_for_platform_family(@platform_family_hash).should == "default value"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "returns a value based on the current platform" do
|
61
|
+
node.automatic_attrs[:platform] = "openbsd"
|
62
|
+
platform_introspector.value_for_platform(@platform_hash).should == "openbsd"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "returns a value based on the current platform family" do
|
66
|
+
node.automatic_attrs[:platform_family] = "debian"
|
67
|
+
platform_introspector.value_for_platform_family(@platform_family_hash).should == "debian value"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns a version-specific value based on the current platform" do
|
71
|
+
node.automatic_attrs[:platform] = "openbsd"
|
72
|
+
node.automatic_attrs[:platform_version] = "1.2.3"
|
73
|
+
platform_introspector.value_for_platform(@platform_hash).should == "openbsd-1.2.3"
|
74
|
+
end
|
75
|
+
|
76
|
+
it "returns a value based on the current platform if version not found" do
|
77
|
+
node.automatic_attrs[:platform] = "openbsd"
|
78
|
+
node.automatic_attrs[:platform_version] = "0.0.0"
|
79
|
+
platform_introspector.value_for_platform(@platform_hash).should == "openbsd"
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "when platform versions is an array" do
|
83
|
+
it "returns a version-specific value based on the current platform" do
|
84
|
+
node.automatic_attrs[:platform] = "debian"
|
85
|
+
node.automatic_attrs[:platform_version] = "6"
|
86
|
+
platform_introspector.value_for_platform(@platform_hash).should == "debian-5/6"
|
87
|
+
end
|
88
|
+
|
89
|
+
it "returns a value based on the current platform if version not found" do
|
90
|
+
node.automatic_attrs[:platform] = "debian"
|
91
|
+
node.automatic_attrs[:platform_version] = "0.0.0"
|
92
|
+
platform_introspector.value_for_platform(@platform_hash).should == "debian"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "when checking platform?" do
|
97
|
+
|
98
|
+
it "returns true if the node is a provided platform and platforms are provided as symbols" do
|
99
|
+
node.automatic_attrs[:platform] = 'ubuntu'
|
100
|
+
platform_introspector.platform?([:redhat, :ubuntu]).should == true
|
101
|
+
end
|
102
|
+
|
103
|
+
it "returns true if the node is a provided platform and platforms are provided as strings" do
|
104
|
+
node.automatic_attrs[:platform] = 'ubuntu'
|
105
|
+
platform_introspector.platform?(["redhat", "ubuntu"]).should == true
|
106
|
+
end
|
107
|
+
|
108
|
+
it "returns false if the node is not of the provided platforms" do
|
109
|
+
node.automatic_attrs[:platform] = 'ubuntu'
|
110
|
+
platform_introspector.platform?(:splatlinux).should == false
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "when checking platform_family?" do
|
115
|
+
|
116
|
+
it "returns true if the node is in a provided platform family and families are provided as symbols" do
|
117
|
+
node.automatic_attrs[:platform_family] = 'debian'
|
118
|
+
platform_introspector.platform_family?([:rhel, :debian]).should == true
|
119
|
+
end
|
120
|
+
|
121
|
+
it "returns true if the node is a provided platform and platforms are provided as strings" do
|
122
|
+
node.automatic_attrs[:platform_family] = 'rhel'
|
123
|
+
platform_introspector.platform_family?(["rhel", "debian"]).should == true
|
124
|
+
end
|
125
|
+
|
126
|
+
it "returns false if the node is not of the provided platforms" do
|
127
|
+
node.automatic_attrs[:platform_family] = 'suse'
|
128
|
+
platform_introspector.platform_family?(:splatlinux).should == false
|
129
|
+
end
|
130
|
+
|
131
|
+
it "returns false if the node is not of the provided platforms and platform_family is not set" do
|
132
|
+
platform_introspector.platform_family?(:splatlinux).should == false
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
# NOTE: this is a regression test for bug CHEF-1514
|
137
|
+
describe "when the value is an array" do
|
138
|
+
before do
|
139
|
+
@platform_hash = {
|
140
|
+
"debian" => { "4.0" => [ :restart, :reload ], "default" => [ :restart, :reload, :status ] },
|
141
|
+
"ubuntu" => { "default" => [ :restart, :reload, :status ] },
|
142
|
+
"centos" => { "default" => [ :restart, :reload, :status ] },
|
143
|
+
"redhat" => { "default" => [ :restart, :reload, :status ] },
|
144
|
+
"fedora" => { "default" => [ :restart, :reload, :status ] },
|
145
|
+
"default" => { "default" => [:restart, :reload ] }}
|
146
|
+
end
|
147
|
+
|
148
|
+
it "returns the correct default for a given platform" do
|
149
|
+
node.automatic_attrs[:platform] = "debian"
|
150
|
+
node.automatic_attrs[:platform_version] = '9000'
|
151
|
+
platform_introspector.value_for_platform(@platform_hash).should == [ :restart, :reload, :status ]
|
152
|
+
end
|
153
|
+
|
154
|
+
it "returns the correct platform+version specific value " do
|
155
|
+
node.automatic_attrs[:platform] = "debian"
|
156
|
+
node.automatic_attrs[:platform_version] = '4.0'
|
157
|
+
platform_introspector.value_for_platform(@platform_hash).should == [:restart, :reload]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
@@ -0,0 +1,609 @@
|
|
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
|
+
require 'tmpdir'
|
21
|
+
if windows?
|
22
|
+
require 'chef/win32/file'
|
23
|
+
end
|
24
|
+
|
25
|
+
# Filesystem stubs
|
26
|
+
def file_symlink_class
|
27
|
+
if windows?
|
28
|
+
Chef::ReservedNames::Win32::File
|
29
|
+
else
|
30
|
+
File
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def normalized_path
|
35
|
+
File.expand_path(resource_path)
|
36
|
+
end
|
37
|
+
|
38
|
+
def setup_normal_file
|
39
|
+
File.stub!(:exists?).with(resource_path).and_return(true)
|
40
|
+
File.stub!(:directory?).with(resource_path).and_return(false)
|
41
|
+
File.stub!(:directory?).with(enclosing_directory).and_return(true)
|
42
|
+
File.stub!(:writable?).with(resource_path).and_return(true)
|
43
|
+
file_symlink_class.stub!(:symlink?).with(resource_path).and_return(false)
|
44
|
+
file_symlink_class.stub!(:symlink?).with(normalized_path).and_return(false)
|
45
|
+
end
|
46
|
+
|
47
|
+
def setup_missing_file
|
48
|
+
File.stub!(:exists?).with(resource_path).and_return(false)
|
49
|
+
File.stub!(:directory?).with(resource_path).and_return(false)
|
50
|
+
File.stub!(:directory?).with(enclosing_directory).and_return(true)
|
51
|
+
File.stub!(:writable?).with(resource_path).and_return(false)
|
52
|
+
file_symlink_class.stub!(:symlink?).with(resource_path).and_return(false)
|
53
|
+
end
|
54
|
+
|
55
|
+
def setup_symlink
|
56
|
+
File.stub!(:exists?).with(resource_path).and_return(true)
|
57
|
+
File.stub!(:directory?).with(normalized_path).and_return(false)
|
58
|
+
File.stub!(:directory?).with(enclosing_directory).and_return(true)
|
59
|
+
File.stub!(:writable?).with(resource_path).and_return(true)
|
60
|
+
file_symlink_class.stub!(:symlink?).with(resource_path).and_return(true)
|
61
|
+
file_symlink_class.stub!(:symlink?).with(normalized_path).and_return(true)
|
62
|
+
end
|
63
|
+
|
64
|
+
def setup_unwritable_file
|
65
|
+
File.stub!(:exists?).with(resource_path).and_return(true)
|
66
|
+
File.stub!(:directory?).with(resource_path).and_return(false)
|
67
|
+
File.stub!(:directory?).with(enclosing_directory).and_return(true)
|
68
|
+
File.stub!(:writable?).with(resource_path).and_return(false)
|
69
|
+
file_symlink_class.stub!(:symlink?).with(resource_path).and_return(false)
|
70
|
+
end
|
71
|
+
|
72
|
+
def setup_missing_enclosing_directory
|
73
|
+
File.stub!(:exists?).with(resource_path).and_return(false)
|
74
|
+
File.stub!(:directory?).with(resource_path).and_return(false)
|
75
|
+
File.stub!(:directory?).with(enclosing_directory).and_return(false)
|
76
|
+
File.stub!(:writable?).with(resource_path).and_return(false)
|
77
|
+
file_symlink_class.stub!(:symlink?).with(resource_path).and_return(false)
|
78
|
+
end
|
79
|
+
|
80
|
+
shared_examples_for Chef::Provider::File do
|
81
|
+
|
82
|
+
it "should return a #{described_class}" do
|
83
|
+
provider.should be_a_kind_of(described_class)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should store the resource passed to new as new_resource" do
|
87
|
+
provider.new_resource.should eql(resource)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should store the node passed to new as node" do
|
91
|
+
provider.node.should eql(node)
|
92
|
+
end
|
93
|
+
|
94
|
+
context "when loading the current resource" do
|
95
|
+
|
96
|
+
context "when running load_current_resource and the file exists" do
|
97
|
+
before do
|
98
|
+
setup_normal_file
|
99
|
+
provider.load_current_resource
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should load a current resource based on the one specified at construction" do
|
103
|
+
provider.current_resource.should be_a_kind_of(Chef::Resource::File)
|
104
|
+
end
|
105
|
+
|
106
|
+
it "the loaded current_resource name should be the same as the resource name" do
|
107
|
+
provider.current_resource.name.should eql(resource.name)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "the loaded current_resource path should be the same as the resoure path" do
|
111
|
+
provider.current_resource.path.should eql(resource.path)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "the loaded current_resource content should be nil" do
|
115
|
+
provider.current_resource.content.should eql(nil)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context "when running load_current_resource and the file does not exist" do
|
120
|
+
before do
|
121
|
+
setup_missing_file
|
122
|
+
provider.load_current_resource
|
123
|
+
end
|
124
|
+
|
125
|
+
it "the current_resource should be a Chef::Resource::File" do
|
126
|
+
provider.current_resource.should be_a_kind_of(Chef::Resource::File)
|
127
|
+
end
|
128
|
+
|
129
|
+
it "the current_resource name should be the same as the resource name" do
|
130
|
+
provider.current_resource.name.should eql(resource.name)
|
131
|
+
end
|
132
|
+
|
133
|
+
it "the current_resource path should be the same as the resource path" do
|
134
|
+
provider.current_resource.path.should eql(resource.path)
|
135
|
+
end
|
136
|
+
|
137
|
+
it "the loaded current_resource content should be nil" do
|
138
|
+
provider.current_resource.content.should eql(nil)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
context "examining file security metadata on Unix with a file that exists" do
|
143
|
+
before do
|
144
|
+
# fake that we're on unix even if we're on windows
|
145
|
+
Chef::Platform.stub!(:windows?).and_return(false)
|
146
|
+
# mock up the filesystem to behave like unix
|
147
|
+
setup_normal_file
|
148
|
+
stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
|
149
|
+
resource_real_path = File.realpath(resource.path)
|
150
|
+
File.should_receive(:stat).with(resource_real_path).at_least(:once).and_return(stat_struct)
|
151
|
+
Etc.stub!(:getgrgid).with(0).and_return(mock("Group Ent", :name => "wheel"))
|
152
|
+
Etc.stub!(:getpwuid).with(0).and_return(mock("User Ent", :name => "root"))
|
153
|
+
end
|
154
|
+
|
155
|
+
context "when the new_resource does not specify any state" do
|
156
|
+
before do
|
157
|
+
provider.load_current_resource
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should load the permissions into the current_resource" do
|
161
|
+
provider.current_resource.mode.should == "0600"
|
162
|
+
provider.current_resource.owner.should == "root"
|
163
|
+
provider.current_resource.group.should == "wheel"
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should not set the new_resource permissions" do
|
167
|
+
provider.new_resource.group.should be_nil
|
168
|
+
provider.new_resource.owner.should be_nil
|
169
|
+
provider.new_resource.mode.should be_nil
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
context "when the new_resource explicitly specifies resource state as numbers" do
|
174
|
+
before do
|
175
|
+
resource.owner(1)
|
176
|
+
resource.group(1)
|
177
|
+
resource.mode(0644)
|
178
|
+
provider.load_current_resource
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should load the permissions into the current_resource as numbers" do
|
182
|
+
# Mode is always loaded as string for reporting purposes.
|
183
|
+
provider.current_resource.mode.should == "0600"
|
184
|
+
provider.current_resource.owner.should == 0
|
185
|
+
provider.current_resource.group.should == 0
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should not set the new_resource permissions" do
|
189
|
+
provider.new_resource.group.should == 1
|
190
|
+
provider.new_resource.owner.should == 1
|
191
|
+
provider.new_resource.mode.should == 0644
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
context "when the new_resource explicitly specifies resource state as symbols" do
|
196
|
+
before do
|
197
|
+
resource.owner("macklemore")
|
198
|
+
resource.group("seattlehiphop")
|
199
|
+
resource.mode("0321")
|
200
|
+
provider.load_current_resource
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should load the permissions into the current_resource as symbols" do
|
204
|
+
provider.current_resource.mode.should == "0600"
|
205
|
+
provider.current_resource.owner.should == "root"
|
206
|
+
provider.current_resource.group.should == "wheel"
|
207
|
+
end
|
208
|
+
|
209
|
+
it "should not set the new_resource permissions" do
|
210
|
+
provider.new_resource.group.should == "seattlehiphop"
|
211
|
+
provider.new_resource.owner.should == "macklemore"
|
212
|
+
provider.new_resource.mode.should == "0321"
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
context "examining file security metadata on Unix with a file that does not exist" do
|
219
|
+
before do
|
220
|
+
# fake that we're on unix even if we're on windows
|
221
|
+
Chef::Platform.stub!(:windows?).and_return(false)
|
222
|
+
setup_missing_file
|
223
|
+
end
|
224
|
+
|
225
|
+
context "when the new_resource does not specify any state" do
|
226
|
+
before do
|
227
|
+
provider.load_current_resource
|
228
|
+
end
|
229
|
+
|
230
|
+
it "the current_resource permissions should be nil" do
|
231
|
+
provider.current_resource.mode.should be_nil
|
232
|
+
provider.current_resource.owner.should be_nil
|
233
|
+
provider.current_resource.group.should be_nil
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should not set the new_resource permissions" do
|
237
|
+
provider.new_resource.group.should be_nil
|
238
|
+
provider.new_resource.owner.should be_nil
|
239
|
+
provider.new_resource.mode.should be_nil
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
context "when the new_resource explicitly specifies resource state" do
|
244
|
+
before do
|
245
|
+
resource.owner(63945)
|
246
|
+
resource.group(51948)
|
247
|
+
resource.mode(0123)
|
248
|
+
provider.load_current_resource
|
249
|
+
end
|
250
|
+
|
251
|
+
it "the current_resource permissions should be nil" do
|
252
|
+
provider.current_resource.mode.should be_nil
|
253
|
+
provider.current_resource.owner.should be_nil
|
254
|
+
provider.current_resource.group.should be_nil
|
255
|
+
end
|
256
|
+
|
257
|
+
it "should not set the new_resource permissions" do
|
258
|
+
provider.new_resource.group.should == 51948
|
259
|
+
provider.new_resource.owner.should == 63945
|
260
|
+
provider.new_resource.mode.should == 0123
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
context "when loading the new_resource after the run" do
|
267
|
+
|
268
|
+
before do
|
269
|
+
# fake that we're on unix even if we're on windows
|
270
|
+
Chef::Platform.stub!(:windows?).and_return(false)
|
271
|
+
# mock up the filesystem to behave like unix
|
272
|
+
setup_normal_file
|
273
|
+
stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
|
274
|
+
resource_real_path = File.realpath(resource.path)
|
275
|
+
File.stub!(:stat).with(resource_real_path).and_return(stat_struct)
|
276
|
+
Etc.stub!(:getgrgid).with(0).and_return(mock("Group Ent", :name => "wheel"))
|
277
|
+
Etc.stub!(:getpwuid).with(0).and_return(mock("User Ent", :name => "root"))
|
278
|
+
provider.send(:load_resource_attributes_from_file, resource)
|
279
|
+
end
|
280
|
+
|
281
|
+
it "new_resource should record the new permission information" do
|
282
|
+
provider.new_resource.group.should == "wheel"
|
283
|
+
provider.new_resource.owner.should == "root"
|
284
|
+
provider.new_resource.mode.should == "0600"
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
context "when reporting security metadata on windows" do
|
289
|
+
it "records the file owner" do
|
290
|
+
pending
|
291
|
+
end
|
292
|
+
|
293
|
+
it "records rights for each user in the ACL" do
|
294
|
+
pending
|
295
|
+
end
|
296
|
+
|
297
|
+
it "records deny_rights for each user in the ACL" do
|
298
|
+
pending
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
context "define_resource_requirements" do
|
303
|
+
context "when the enclosing directory does not exist" do
|
304
|
+
before { setup_missing_enclosing_directory }
|
305
|
+
|
306
|
+
[:create, :create_if_missing, :touch].each do |action|
|
307
|
+
context "action #{action}" do
|
308
|
+
it "raises EnclosingDirectoryDoesNotExist" do
|
309
|
+
lambda {provider.run_action(action)}.should raise_error(Chef::Exceptions::EnclosingDirectoryDoesNotExist)
|
310
|
+
end
|
311
|
+
|
312
|
+
it "does not raise an exception in why-run mode" do
|
313
|
+
Chef::Config[:why_run] = true
|
314
|
+
lambda {provider.run_action(action)}.should_not raise_error(Chef::Exceptions::EnclosingDirectoryDoesNotExist)
|
315
|
+
Chef::Config[:why_run] = false
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
context "when the file exists but is not deletable" do
|
322
|
+
before { setup_unwritable_file }
|
323
|
+
|
324
|
+
it "action delete raises InsufficientPermissions" do
|
325
|
+
lambda {provider.run_action(:delete)}.should raise_error(Chef::Exceptions::InsufficientPermissions)
|
326
|
+
end
|
327
|
+
|
328
|
+
it "action delete also raises InsufficientPermissions in why-run mode" do
|
329
|
+
Chef::Config[:why_run] = true
|
330
|
+
lambda {provider.run_action(:delete)}.should raise_error(Chef::Exceptions::InsufficientPermissions)
|
331
|
+
Chef::Config[:why_run] = false
|
332
|
+
end
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
context "action create" do
|
337
|
+
it "should create the file, update its contents and then set the acls on the file" do
|
338
|
+
setup_missing_file
|
339
|
+
provider.should_receive(:do_create_file)
|
340
|
+
provider.should_receive(:do_contents_changes)
|
341
|
+
provider.should_receive(:do_acl_changes)
|
342
|
+
provider.should_receive(:load_resource_attributes_from_file)
|
343
|
+
provider.run_action(:create)
|
344
|
+
end
|
345
|
+
|
346
|
+
context "do_create_file" do
|
347
|
+
context "when the file exists" do
|
348
|
+
before { setup_normal_file }
|
349
|
+
it "should not create the file" do
|
350
|
+
provider.deployment_strategy.should_not_receive(:create).with(resource_path)
|
351
|
+
provider.send(:do_create_file)
|
352
|
+
provider.send(:file_created?).should == false
|
353
|
+
end
|
354
|
+
end
|
355
|
+
context "when the file does not exist" do
|
356
|
+
before { setup_missing_file }
|
357
|
+
it "should create the file" do
|
358
|
+
provider.deployment_strategy.should_receive(:create).with(resource_path)
|
359
|
+
provider.send(:do_create_file)
|
360
|
+
provider.send(:file_created?).should == true
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
context "do_contents_changes" do
|
366
|
+
context "when there is content to deploy" do
|
367
|
+
before do
|
368
|
+
setup_normal_file
|
369
|
+
provider.load_current_resource
|
370
|
+
tempfile = double('Tempfile', :path => "/tmp/foo-bar-baz")
|
371
|
+
content.stub!(:tempfile).and_return(tempfile)
|
372
|
+
File.should_receive(:exists?).with("/tmp/foo-bar-baz").and_return(true)
|
373
|
+
tempfile.should_receive(:unlink).once
|
374
|
+
end
|
375
|
+
|
376
|
+
context "when the contents have changed" do
|
377
|
+
let(:tempfile_path) { "/tmp/foo-bar-baz" }
|
378
|
+
let(:tempfile_sha256) { "42971f0ddce0cb20cf7660a123ffa1a1543beb2f1e7cd9d65858764a27f3201d" }
|
379
|
+
let(:diff_for_reporting) { "+++\n---\n+foo\n-bar\n" }
|
380
|
+
before do
|
381
|
+
provider.stub!(:contents_changed?).and_return(true)
|
382
|
+
diff = double('Diff', :for_output => ['+++','---','+foo','-bar'],
|
383
|
+
:for_reporting => diff_for_reporting )
|
384
|
+
diff.stub!(:diff).with(resource_path, tempfile_path).and_return(true)
|
385
|
+
provider.should_receive(:diff).at_least(:once).and_return(diff)
|
386
|
+
provider.should_receive(:checksum).with(tempfile_path).and_return(tempfile_sha256)
|
387
|
+
provider.should_receive(:checksum).with(resource_path).and_return(tempfile_sha256)
|
388
|
+
provider.deployment_strategy.should_receive(:deploy).with(tempfile_path, normalized_path)
|
389
|
+
end
|
390
|
+
context "when the file was created" do
|
391
|
+
before { provider.should_receive(:file_created?).at_least(:once).and_return(true) }
|
392
|
+
it "does not backup the file and does not produce a diff for reporting" do
|
393
|
+
provider.should_not_receive(:do_backup)
|
394
|
+
provider.send(:do_contents_changes)
|
395
|
+
resource.diff.should be_nil
|
396
|
+
end
|
397
|
+
end
|
398
|
+
context "when the file was not created" do
|
399
|
+
before { provider.should_receive(:file_created?).at_least(:once).and_return(false) }
|
400
|
+
it "backs up the file and produces a diff for reporting" do
|
401
|
+
provider.should_receive(:do_backup)
|
402
|
+
provider.send(:do_contents_changes)
|
403
|
+
resource.diff.should == diff_for_reporting
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
it "does nothing when the contents have not changed" do
|
409
|
+
provider.stub!(:contents_changed?).and_return(false)
|
410
|
+
provider.should_not_receive(:diff)
|
411
|
+
provider.send(:do_contents_changes)
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
it "does nothing when there is no content to deploy (tempfile returned from contents is nil)" do
|
416
|
+
provider.send(:content).should_receive(:tempfile).at_least(:once).and_return(nil)
|
417
|
+
provider.should_not_receive(:diff)
|
418
|
+
lambda{ provider.send(:do_contents_changes) }.should_not raise_error
|
419
|
+
end
|
420
|
+
|
421
|
+
it "raises an exception when the content object returns a tempfile with a nil path" do
|
422
|
+
tempfile = double('Tempfile', :path => nil)
|
423
|
+
provider.send(:content).should_receive(:tempfile).at_least(:once).and_return(tempfile)
|
424
|
+
lambda{ provider.send(:do_contents_changes) }.should raise_error
|
425
|
+
end
|
426
|
+
|
427
|
+
it "raises an exception when the content object returns a tempfile that does not exist" do
|
428
|
+
tempfile = double('Tempfile', :path => "/tmp/foo-bar-baz")
|
429
|
+
provider.send(:content).should_receive(:tempfile).at_least(:once).and_return(tempfile)
|
430
|
+
File.should_receive(:exists?).with("/tmp/foo-bar-baz").and_return(false)
|
431
|
+
lambda{ provider.send(:do_contents_changes) }.should raise_error
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
context "do_acl_changes" do
|
436
|
+
it "needs tests" do
|
437
|
+
pending
|
438
|
+
end
|
439
|
+
end
|
440
|
+
|
441
|
+
context "do_selinux" do
|
442
|
+
context "when resource is updated" do
|
443
|
+
before do
|
444
|
+
setup_normal_file
|
445
|
+
provider.load_current_resource
|
446
|
+
provider.stub!(:resource_updated?).and_return(true)
|
447
|
+
end
|
448
|
+
|
449
|
+
it "should check for selinux_enabled? by default" do
|
450
|
+
provider.should_receive(:selinux_enabled?)
|
451
|
+
provider.send(:do_selinux)
|
452
|
+
end
|
453
|
+
|
454
|
+
context "when selinux fixup is enabled in the config" do
|
455
|
+
before do
|
456
|
+
@original_selinux_fixup = Chef::Config[:enable_selinux_file_permission_fixup]
|
457
|
+
Chef::Config[:enable_selinux_file_permission_fixup] = true
|
458
|
+
end
|
459
|
+
|
460
|
+
after do
|
461
|
+
Chef::Config[:enable_selinux_file_permission_fixup] = @original_selinux_fixup
|
462
|
+
end
|
463
|
+
|
464
|
+
context "when selinux is enabled on the system" do
|
465
|
+
before do
|
466
|
+
provider.should_receive(:selinux_enabled?).and_return(true)
|
467
|
+
end
|
468
|
+
|
469
|
+
it "restores security context on the file" do
|
470
|
+
provider.should_receive(:restore_security_context).with(normalized_path, false)
|
471
|
+
provider.send(:do_selinux)
|
472
|
+
end
|
473
|
+
|
474
|
+
it "restores security context recursively when told so" do
|
475
|
+
provider.should_receive(:restore_security_context).with(normalized_path, true)
|
476
|
+
provider.send(:do_selinux, true)
|
477
|
+
end
|
478
|
+
end
|
479
|
+
|
480
|
+
context "when selinux is disabled on the system" do
|
481
|
+
before do
|
482
|
+
provider.should_receive(:selinux_enabled?).and_return(false)
|
483
|
+
end
|
484
|
+
|
485
|
+
it "should not restore security context" do
|
486
|
+
provider.should_not_receive(:restore_security_context)
|
487
|
+
provider.send(:do_selinux)
|
488
|
+
end
|
489
|
+
end
|
490
|
+
end
|
491
|
+
|
492
|
+
context "when selinux fixup is disabled in the config" do
|
493
|
+
before do
|
494
|
+
@original_selinux_fixup = Chef::Config[:enable_selinux_file_permission_fixup]
|
495
|
+
Chef::Config[:enable_selinux_file_permission_fixup] = false
|
496
|
+
end
|
497
|
+
|
498
|
+
after do
|
499
|
+
Chef::Config[:enable_selinux_file_permission_fixup] = @original_selinux_fixup
|
500
|
+
end
|
501
|
+
|
502
|
+
it "should not check for selinux_enabled?" do
|
503
|
+
provider.should_not_receive(:selinux_enabled?)
|
504
|
+
provider.send(:do_selinux)
|
505
|
+
end
|
506
|
+
end
|
507
|
+
end
|
508
|
+
|
509
|
+
context "when resource is not updated" do
|
510
|
+
before do
|
511
|
+
provider.stub!(:resource_updated?).and_return(false)
|
512
|
+
end
|
513
|
+
|
514
|
+
it "should not check for selinux_enabled?" do
|
515
|
+
provider.should_not_receive(:selinux_enabled?)
|
516
|
+
provider.send(:do_selinux)
|
517
|
+
end
|
518
|
+
end
|
519
|
+
end
|
520
|
+
|
521
|
+
end
|
522
|
+
|
523
|
+
context "action delete" do
|
524
|
+
context "when the file exists" do
|
525
|
+
context "when the file is writable" do
|
526
|
+
context "when the file is not a symlink" do
|
527
|
+
before { setup_normal_file }
|
528
|
+
it "should backup and delete the file and be updated by the last action" do
|
529
|
+
provider.should_receive(:do_backup).at_least(:once).and_return(true)
|
530
|
+
File.should_receive(:delete).with(resource_path).and_return(true)
|
531
|
+
provider.run_action(:delete)
|
532
|
+
resource.should be_updated_by_last_action
|
533
|
+
end
|
534
|
+
end
|
535
|
+
context "when the file is a symlink" do
|
536
|
+
before { setup_symlink }
|
537
|
+
it "should not backup the symlink" do
|
538
|
+
provider.should_not_receive(:do_backup)
|
539
|
+
File.should_receive(:delete).with(resource_path).and_return(true)
|
540
|
+
provider.run_action(:delete)
|
541
|
+
resource.should be_updated_by_last_action
|
542
|
+
end
|
543
|
+
end
|
544
|
+
end
|
545
|
+
context "when the file is not writable" do
|
546
|
+
before { setup_unwritable_file }
|
547
|
+
it "should not try to backup or delete the file, and should not be updated by last action" do
|
548
|
+
provider.should_not_receive(:do_backup)
|
549
|
+
File.should_not_receive(:delete)
|
550
|
+
lambda { provider.run_action(:delete) }.should raise_error()
|
551
|
+
resource.should_not be_updated_by_last_action
|
552
|
+
end
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
context "when the file does not exist" do
|
557
|
+
before { setup_missing_file }
|
558
|
+
|
559
|
+
it "should not try to backup or delete the file, and should not be updated by last action" do
|
560
|
+
provider.should_not_receive(:do_backup)
|
561
|
+
File.should_not_receive(:delete)
|
562
|
+
lambda { provider.run_action(:delete) }.should_not raise_error()
|
563
|
+
resource.should_not be_updated_by_last_action
|
564
|
+
end
|
565
|
+
end
|
566
|
+
end
|
567
|
+
|
568
|
+
context "action touch" do
|
569
|
+
context "when the file does not exist" do
|
570
|
+
before { setup_missing_file }
|
571
|
+
it "should update the atime/mtime on action_touch" do
|
572
|
+
File.should_receive(:utime).once
|
573
|
+
provider.should_receive(:action_create)
|
574
|
+
provider.run_action(:touch)
|
575
|
+
resource.should be_updated_by_last_action
|
576
|
+
end
|
577
|
+
end
|
578
|
+
context "when the file exists" do
|
579
|
+
before { setup_normal_file }
|
580
|
+
it "should update the atime/mtime on action_touch" do
|
581
|
+
File.should_receive(:utime).once
|
582
|
+
provider.should_receive(:action_create)
|
583
|
+
provider.run_action(:touch)
|
584
|
+
resource.should be_updated_by_last_action
|
585
|
+
end
|
586
|
+
end
|
587
|
+
end
|
588
|
+
|
589
|
+
context "action create_if_missing" do
|
590
|
+
context "when the file does not exist" do
|
591
|
+
before { setup_missing_file }
|
592
|
+
it "should call action_create" do
|
593
|
+
provider.should_receive(:action_create)
|
594
|
+
provider.run_action(:create_if_missing)
|
595
|
+
end
|
596
|
+
end
|
597
|
+
|
598
|
+
context "when the file exists" do
|
599
|
+
before { setup_normal_file }
|
600
|
+
it "should not call action_create" do
|
601
|
+
provider.should_not_receive(:action_create)
|
602
|
+
provider.run_action(:create_if_missing)
|
603
|
+
end
|
604
|
+
end
|
605
|
+
|
606
|
+
end
|
607
|
+
|
608
|
+
end
|
609
|
+
|