chef 10.34.6 → 11.0.0.beta.0
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.
- data/CONTRIBUTING.md +155 -0
- data/README.md +89 -0
- data/Rakefile +4 -12
- data/bin/chef-apply +25 -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 +18 -12
- data/distro/common/html/chef-solr.8.html +4 -4
- 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 +10 -7
- data/distro/common/html/knife-data-bag.1.html +10 -7
- data/distro/common/html/knife-environment.1.html +8 -6
- 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 +1 -1
- 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 +15 -2
- data/distro/common/man/man1/knife-data-bag.1 +15 -2
- data/distro/common/man/man1/knife-environment.1 +12 -2
- 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 +36 -4
- 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 +2 -2
- data/lib/chef.rb +2 -5
- data/lib/chef/api_client.rb +20 -130
- data/lib/chef/api_client/registration.rb +126 -0
- data/lib/chef/application.rb +71 -14
- data/lib/chef/application/apply.rb +160 -0
- data/lib/chef/application/client.rb +25 -18
- data/lib/chef/application/knife.rb +0 -2
- data/lib/chef/application/solo.rb +23 -8
- data/lib/chef/application/windows_service.rb +5 -2
- data/lib/chef/applications.rb +1 -0
- data/lib/chef/chef_fs.rb +11 -0
- data/lib/chef/chef_fs/command_line.rb +232 -0
- data/lib/chef/chef_fs/file_pattern.rb +312 -0
- data/lib/chef/chef_fs/file_system.rb +358 -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 +121 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +109 -0
- data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb} +12 -15
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +84 -0
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +188 -0
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +78 -0
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +68 -0
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +78 -0
- data/lib/chef/chef_fs/file_system/data_bag_item.rb +59 -0
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +66 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
- data/lib/chef/{index_queue.rb → chef_fs/file_system/file_system_error.rb} +14 -12
- data/lib/chef/{resource/whyrun_safe_ruby_block.rb → chef_fs/file_system/file_system_root_dir.rb} +10 -10
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +47 -0
- data/lib/chef/{provider/whyrun_safe_ruby_block.rb → chef_fs/file_system/nonexistent_fs_object.rb} +19 -9
- data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +84 -0
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +123 -0
- data/lib/chef/chef_fs/knife.rb +77 -0
- data/lib/chef/chef_fs/path_utils.rb +64 -0
- data/lib/chef/client.rb +44 -21
- data/lib/chef/config.rb +52 -43
- data/lib/chef/cookbook/synchronizer.rb +6 -8
- data/lib/chef/cookbook/syntax_check.rb +61 -14
- data/lib/chef/cookbook_loader.rb +39 -26
- data/lib/chef/cookbook_uploader.rb +17 -19
- data/lib/chef/cookbook_version.rb +3 -302
- data/lib/chef/daemon.rb +3 -18
- data/lib/chef/data_bag.rb +4 -97
- data/lib/chef/data_bag_item.rb +2 -65
- data/lib/chef/digester.rb +73 -0
- data/lib/chef/dsl.rb +6 -0
- data/lib/chef/dsl/data_query.rb +66 -0
- data/lib/chef/dsl/include_attribute.rb +60 -0
- data/lib/chef/dsl/include_recipe.rb +42 -0
- data/lib/chef/dsl/platform_introspection.rb +213 -0
- data/lib/chef/dsl/recipe.rb +84 -0
- data/lib/chef/dsl/registry_helper.rb +59 -0
- data/lib/chef/encrypted_data_bag_item.rb +74 -19
- data/lib/chef/environment.rb +9 -180
- data/lib/chef/exceptions.rb +87 -14
- data/lib/chef/formatters/base.rb +4 -1
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +0 -4
- data/lib/chef/json_compat.rb +1 -97
- data/lib/chef/knife.rb +90 -41
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-full.erb +3 -3
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
- data/lib/chef/knife/configure.rb +1 -2
- data/lib/chef/knife/cookbook_metadata.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +3 -2
- data/lib/chef/knife/cookbook_upload.rb +12 -7
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- data/lib/chef/knife/core/generic_presenter.rb +26 -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/text_formatter.rb +23 -37
- data/lib/chef/knife/core/ui.rb +15 -9
- data/lib/chef/knife/delete.rb +39 -0
- data/lib/chef/knife/diff.rb +46 -0
- data/lib/chef/knife/download.rb +50 -0
- data/lib/chef/knife/environment_show.rb +7 -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 +109 -0
- data/lib/chef/knife/raw.rb +108 -0
- data/lib/chef/knife/search.rb +40 -22
- data/lib/chef/knife/show.rb +32 -0
- data/lib/chef/knife/ssh.rb +6 -2
- data/lib/chef/knife/upload.rb +50 -0
- data/lib/chef/mixin/checksum.rb +3 -3
- data/lib/chef/mixin/deep_merge.rb +55 -197
- data/lib/chef/mixin/language.rb +9 -222
- data/lib/chef/mixin/language_include_attribute.rb +6 -38
- data/lib/chef/mixin/language_include_recipe.rb +3 -35
- data/lib/chef/mixin/params_validate.rb +6 -19
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +8 -61
- data/lib/chef/mixin/securable.rb +32 -7
- data/lib/chef/mixin/template.rb +40 -0
- data/lib/chef/mixins.rb +0 -4
- data/lib/chef/monkey_patches/net_http.rb +0 -34
- data/lib/chef/node.rb +133 -309
- data/lib/chef/node/attribute.rb +333 -473
- data/lib/chef/node/attribute_collections.rb +199 -0
- data/lib/chef/node/immutable_collections.rb +186 -0
- data/lib/chef/platform.rb +7 -22
- data/lib/chef/provider.rb +2 -49
- data/lib/chef/provider/breakpoint.rb +6 -6
- data/lib/chef/provider/cookbook_file.rb +5 -33
- data/lib/chef/provider/deploy.rb +2 -1
- data/lib/chef/provider/directory.rb +14 -17
- data/lib/chef/provider/file.rb +19 -52
- 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/link.rb +2 -0
- data/lib/chef/provider/lwrp_base.rb +150 -0
- data/lib/chef/provider/package/portage.rb +4 -9
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +9 -41
- data/lib/chef/provider/package/yum.rb +12 -19
- data/lib/chef/provider/registry_key.rb +156 -0
- data/lib/chef/provider/remote_directory.rb +2 -0
- data/lib/chef/provider/remote_file.rb +21 -12
- data/lib/chef/provider/ruby_block.rb +5 -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 +15 -73
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/service/solaris.rb +3 -3
- data/lib/chef/provider/template.rb +22 -25
- 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 +30 -47
- data/lib/chef/providers.rb +3 -2
- data/lib/chef/recipe.rb +14 -8
- data/lib/chef/resource.rb +13 -154
- data/lib/chef/resource/group.rb +1 -11
- data/lib/chef/resource/http_request.rb +2 -1
- data/lib/chef/resource/lwrp_base.rb +127 -0
- data/lib/chef/resource/mount.rb +10 -11
- 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 +22 -31
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/service.rb +14 -0
- data/lib/chef/resource/user.rb +0 -18
- data/lib/chef/resource_collection.rb +25 -21
- data/lib/chef/resources.rb +2 -1
- data/lib/chef/rest.rb +50 -131
- data/lib/chef/rest/auth_credentials.rb +4 -20
- data/lib/chef/rest/rest_request.rb +2 -7
- 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 +0 -15
- data/lib/chef/run_lock.rb +90 -0
- data/lib/chef/runner.rb +28 -5
- data/lib/chef/sandbox.rb +15 -148
- data/lib/chef/scan_access_control.rb +2 -4
- 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} +17 -15
- data/lib/chef/shell_out.rb +7 -0
- data/lib/chef/util/windows/net_group.rb +1 -5
- data/lib/chef/version.rb +3 -3
- data/lib/chef/win32/api/process.rb +0 -1
- data/lib/chef/win32/handle.rb +1 -8
- data/lib/chef/win32/registry.rb +371 -0
- data/spec/data/big_json.json +1 -2
- data/spec/data/big_json_plus_one.json +1 -2
- data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- 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/partial_one.erb +1 -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/{knife-home/.chef/plugins/knife/example_home_subcommand.rb → 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/{lwrp_const_scoping/resources/conflict.rb → 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 +7 -0
- data/spec/functional/dsl/registry_helper_spec.rb +63 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
- data/spec/functional/knife/exec_spec.rb +2 -2
- data/spec/functional/knife/ssh_spec.rb +5 -1
- data/spec/functional/resource/cookbook_file_spec.rb +7 -19
- data/spec/functional/resource/directory_spec.rb +4 -0
- data/spec/functional/resource/file_spec.rb +56 -22
- data/spec/functional/resource/link_spec.rb +2 -0
- data/spec/functional/resource/registry_spec.rb +576 -0
- data/spec/functional/resource/remote_directory_spec.rb +142 -36
- data/spec/functional/resource/remote_file_spec.rb +18 -0
- data/spec/functional/resource/template_spec.rb +23 -2
- data/spec/functional/run_lock_spec.rb +106 -0
- data/spec/functional/shell_spec.rb +100 -0
- data/spec/functional/win32/registry_helper_spec.rb +632 -0
- data/spec/spec_helper.rb +5 -29
- data/spec/stress/win32/security_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +0 -2
- data/spec/support/platform_helpers.rb +8 -15
- data/spec/support/shared/functional/directory_resource.rb +84 -22
- data/spec/support/shared/functional/file_resource.rb +169 -71
- data/spec/support/shared/functional/securable_resource.rb +143 -119
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
- data/spec/support/shared/unit/file_system_support.rb +110 -0
- data/spec/support/shared/unit/platform_introspector.rb +162 -0
- data/spec/unit/api_client/registration_spec.rb +175 -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 +1 -37
- data/spec/unit/application/knife_spec.rb +5 -0
- data/spec/unit/application_spec.rb +57 -2
- 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/chef_server_root_dir_spec.rb +237 -0
- data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
- data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
- data/spec/unit/chef_fs/file_system_spec.rb +136 -0
- data/spec/unit/client_spec.rb +124 -33
- data/spec/unit/config_spec.rb +46 -13
- data/spec/unit/cookbook/synchronizer_spec.rb +1 -49
- data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
- data/spec/unit/cookbook_loader_spec.rb +153 -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 +3 -24
- data/spec/unit/data_bag_spec.rb +6 -4
- 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 +50 -105
- data/spec/unit/environment_spec.rb +0 -130
- data/spec/unit/exceptions_spec.rb +2 -3
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -3
- data/spec/unit/json_compat_spec.rb +15 -7
- data/spec/unit/knife/bootstrap_spec.rb +2 -0
- data/spec/unit/knife/configure_spec.rb +20 -14
- 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 +43 -8
- data/spec/unit/knife/core/bootstrap_context_spec.rb +1 -1
- data/spec/unit/knife/core/ui_spec.rb +156 -125
- 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/ssh_spec.rb +12 -15
- data/spec/unit/knife/status_spec.rb +2 -2
- data/spec/unit/knife_spec.rb +53 -0
- data/spec/unit/lwrp_spec.rb +59 -42
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/deep_merge_spec.rb +101 -799
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -37
- data/spec/unit/mixin/securable_spec.rb +5 -3
- data/spec/unit/mixin/template_spec.rb +119 -0
- data/spec/unit/node/attribute_spec.rb +195 -173
- data/spec/unit/node/immutable_collections_spec.rb +139 -0
- data/spec/unit/node_spec.rb +366 -370
- data/spec/unit/platform_spec.rb +9 -10
- data/spec/unit/provider/breakpoint_spec.rb +8 -8
- data/spec/unit/provider/cookbook_file_spec.rb +4 -8
- data/spec/unit/provider/directory_spec.rb +96 -64
- data/spec/unit/provider/env_spec.rb +2 -2
- data/spec/unit/provider/file_spec.rb +48 -39
- 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 +6 -21
- 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_spec.rb +2 -2
- 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/portage_spec.rb +0 -44
- data/spec/unit/provider/package/rpm_spec.rb +0 -12
- data/spec/unit/provider/package/rubygems_spec.rb +1 -44
- data/spec/unit/provider/package/yum_spec.rb +39 -36
- data/spec/unit/provider/package_spec.rb +7 -5
- data/spec/unit/provider/registry_key_spec.rb +269 -0
- data/spec/unit/provider/remote_directory_spec.rb +7 -3
- data/spec/unit/provider/remote_file_spec.rb +36 -0
- data/spec/unit/provider/route_spec.rb +4 -3
- 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 +11 -66
- 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/upstart_service_spec.rb +9 -9
- data/spec/unit/provider/subversion_spec.rb +1 -1
- data/spec/unit/provider/template_spec.rb +35 -11
- data/spec/unit/provider/user/dscl_spec.rb +285 -681
- data/spec/unit/provider/user/useradd_spec.rb +1 -22
- data/spec/unit/provider/user_spec.rb +1 -1
- data/spec/unit/recipe_spec.rb +10 -8
- data/spec/unit/registry_helper_spec.rb +374 -0
- data/spec/unit/resource/mount_spec.rb +0 -11
- data/spec/unit/resource/registry_key_spec.rb +171 -0
- data/spec/unit/resource/remote_file_spec.rb +21 -23
- data/spec/unit/resource/ruby_block_spec.rb +7 -3
- data/spec/unit/resource/service_spec.rb +11 -0
- data/spec/unit/resource_spec.rb +4 -19
- data/spec/unit/rest/auth_credentials_spec.rb +2 -19
- data/spec/unit/rest_spec.rb +130 -284
- data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -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 +101 -2
- data/spec/unit/scan_access_control_spec.rb +4 -4
- 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} +14 -69
- data/spec/unit/shell_out_spec.rb +18 -0
- data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
- metadata +275 -234
- checksums.yaml +0 -15
- 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/moneta.rb +0 -50
- data/lib/chef/monkey_patches/uri.rb +0 -70
- data/lib/chef/openid_registration.rb +0 -187
- data/lib/chef/provider/user/solaris.rb +0 -90
- 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/cookbooks/openldap/files/default/.dotfile +0 -1
- data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
- 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/user/solaris_spec.rb +0 -414
- 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
data/spec/spec_helper.rb
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
# Add it to one of the files in spec/support
|
|
20
20
|
|
|
21
21
|
# Abuse ruby's constant lookup to avoid undefined constant errors
|
|
22
|
-
module
|
|
22
|
+
module Shell
|
|
23
23
|
JUST_TESTING_MOVE_ALONG = true unless defined? JUST_TESTING_MOVE_ALONG
|
|
24
24
|
IRB = nil unless defined? IRB
|
|
25
25
|
end
|
|
@@ -38,10 +38,11 @@ require 'chef'
|
|
|
38
38
|
require 'chef/knife'
|
|
39
39
|
Chef::Knife.load_commands
|
|
40
40
|
require 'chef/mixins'
|
|
41
|
+
require 'chef/dsl'
|
|
41
42
|
require 'chef/application'
|
|
42
43
|
require 'chef/applications'
|
|
43
44
|
|
|
44
|
-
require 'chef/
|
|
45
|
+
require 'chef/shell'
|
|
45
46
|
require 'chef/util/file_edit'
|
|
46
47
|
|
|
47
48
|
# If you want to load anything into the testing environment
|
|
@@ -51,13 +52,6 @@ require 'spec/support/local_gems.rb' if File.exists?(File.join(File.dirname(__FI
|
|
|
51
52
|
# Explicitly require spec helpers that need to load first
|
|
52
53
|
require 'spec/support/platform_helpers'
|
|
53
54
|
|
|
54
|
-
|
|
55
|
-
OHAI_SYSTEM = Ohai::System.new
|
|
56
|
-
OHAI_SYSTEM.require_plugin("os")
|
|
57
|
-
OHAI_SYSTEM.require_plugin("platform")
|
|
58
|
-
TEST_PLATFORM = OHAI_SYSTEM["platform"].dup.freeze
|
|
59
|
-
TEST_PLATFORM_VERSION = OHAI_SYSTEM["platform_version"].dup.freeze
|
|
60
|
-
|
|
61
55
|
# Autoloads support files
|
|
62
56
|
# Excludes support/platforms by default
|
|
63
57
|
# Do not change the gsub.
|
|
@@ -76,34 +70,16 @@ RSpec.configure do |config|
|
|
|
76
70
|
|
|
77
71
|
# Add jruby filters here
|
|
78
72
|
config.filter_run_excluding :windows_only => true unless windows?
|
|
79
|
-
config.filter_run_excluding :not_supported_on_mac_osx_106 => true if mac_osx_106?
|
|
80
|
-
config.filter_run_excluding :solaris_only => true unless solaris?
|
|
81
73
|
config.filter_run_excluding :not_supported_on_win2k3 => true if windows_win2k3?
|
|
82
|
-
config.filter_run_excluding :
|
|
74
|
+
config.filter_run_excluding :windows64_only => true unless windows64?
|
|
75
|
+
config.filter_run_excluding :windows32_only => true unless windows32?
|
|
83
76
|
config.filter_run_excluding :unix_only => true unless unix?
|
|
84
77
|
config.filter_run_excluding :ruby_18_only => true unless ruby_18?
|
|
85
78
|
config.filter_run_excluding :ruby_19_only => true unless ruby_19?
|
|
86
79
|
config.filter_run_excluding :requires_root => true unless ENV['USER'] == 'root'
|
|
87
|
-
config.filter_run_excluding :requires_root_or_running_windows => true unless (ENV['USER'] == 'root' || windows?)
|
|
88
80
|
config.filter_run_excluding :requires_unprivileged_user => true if ENV['USER'] == 'root'
|
|
89
81
|
config.filter_run_excluding :uses_diff => true unless has_diff?
|
|
90
82
|
|
|
91
|
-
# Functional Resource tests that are provider-specific:
|
|
92
|
-
# context "on platforms that use useradd", :provider => {:user => Chef::Provider::User::Useradd}} do #...
|
|
93
|
-
config.filter_run_excluding :provider => lambda {|criteria|
|
|
94
|
-
type, target_provider = criteria.first
|
|
95
|
-
|
|
96
|
-
platform = TEST_PLATFORM.dup
|
|
97
|
-
platform_version = TEST_PLATFORM_VERSION.dup
|
|
98
|
-
|
|
99
|
-
begin
|
|
100
|
-
provider_for_running_platform = Chef::Platform.find_provider(platform, platform_version, type)
|
|
101
|
-
provider_for_running_platform != target_provider
|
|
102
|
-
rescue ArgumentError # no provider for platform
|
|
103
|
-
true
|
|
104
|
-
end
|
|
105
|
-
}
|
|
106
|
-
|
|
107
83
|
config.run_all_when_everything_filtered = true
|
|
108
84
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
|
109
85
|
end
|
|
@@ -56,7 +56,7 @@ describe 'Chef::ReservedNames::Win32::Security', :windows_only do
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
it "should not leak when creating a new ACL and setting it on a file", :volatile do
|
|
59
|
-
securable_object =
|
|
59
|
+
securable_object = Security::SecurableObject.new(@monkeyfoo)
|
|
60
60
|
lambda {
|
|
61
61
|
securable_object.dacl = Chef::ReservedNames::Win32::Security::ACL.create([
|
|
62
62
|
Chef::ReservedNames::Win32::Security::ACE.access_allowed(Chef::ReservedNames::Win32::Security::SID.Everyone, Chef::ReservedNames::Win32::API::Security::GENERIC_READ),
|
|
@@ -17,8 +17,6 @@ CHEF_SPEC_DATA = File.expand_path(File.dirname(__FILE__) + "/../data/")
|
|
|
17
17
|
CHEF_SPEC_BACKUP_PATH = File.join(Dir.tmpdir, 'test-backup-path')
|
|
18
18
|
|
|
19
19
|
Chef::Config[:log_level] = :fatal
|
|
20
|
-
Chef::Config[:cache_type] = "Memory"
|
|
21
|
-
Chef::Config[:cache_options] = { }
|
|
22
20
|
Chef::Config[:persistent_queue] = false
|
|
23
21
|
Chef::Config[:file_backup_path] = CHEF_SPEC_BACKUP_PATH
|
|
24
22
|
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
require 'chef/mixin/shell_out'
|
|
2
|
-
|
|
3
|
-
include Chef::Mixin::ShellOut
|
|
4
|
-
|
|
5
1
|
def ruby_19?
|
|
6
2
|
!!(RUBY_VERSION =~ /^1.9/)
|
|
7
3
|
end
|
|
@@ -22,17 +18,14 @@ def windows_win2k3?
|
|
|
22
18
|
(host.version && host.version.start_with?("5.2"))
|
|
23
19
|
end
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
false
|
|
21
|
+
# detects if the hardware is 64-bit (evaluates to true in "WOW64" mode in a 32-bit app on a 64-bit system)
|
|
22
|
+
def windows64?
|
|
23
|
+
windows? && ( ENV['PROCESSOR_ARCHITECTURE'] == 'AMD64' || ENV['PROCESSOR_ARCHITEW6432'] == 'AMD64' )
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# detects if the hardware is 32-bit
|
|
27
|
+
def windows32?
|
|
28
|
+
windows? && !windows64?
|
|
36
29
|
end
|
|
37
30
|
|
|
38
31
|
# def jruby?
|
|
@@ -17,42 +17,104 @@
|
|
|
17
17
|
#
|
|
18
18
|
|
|
19
19
|
shared_examples_for "a directory resource" do
|
|
20
|
+
|
|
21
|
+
let(:expect_updated?) {true}
|
|
22
|
+
|
|
20
23
|
context "when the target directory does not exist" do
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
File.
|
|
24
|
+
before do
|
|
25
|
+
# assert pre-condition
|
|
26
|
+
File.should_not exist(path)
|
|
24
27
|
end
|
|
25
28
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
describe "when running action :create" do
|
|
30
|
+
context "and the recursive option is not set" do
|
|
31
|
+
before do
|
|
32
|
+
resource.run_action(:create)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "creates the directory when the :create action is run" do
|
|
36
|
+
File.should exist(path)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "is marked updated by last action" do
|
|
40
|
+
resource.should be_updated_by_last_action
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "and the recursive option is set" do
|
|
45
|
+
before do
|
|
46
|
+
File.should_not exist(path)
|
|
47
|
+
|
|
48
|
+
resource.recursive(true)
|
|
49
|
+
@recursive_path = File.join(path, 'red-headed-stepchild')
|
|
50
|
+
resource.path(@recursive_path)
|
|
51
|
+
resource.run_action(:create)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "recursively creates required directories" do
|
|
55
|
+
File.should exist(path)
|
|
56
|
+
File.should exist(@recursive_path)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "is marked updated by last action" do
|
|
60
|
+
resource.should be_updated_by_last_action
|
|
61
|
+
end
|
|
62
|
+
end
|
|
33
63
|
end
|
|
34
64
|
end
|
|
35
65
|
|
|
36
66
|
context "when the target directory exists" do
|
|
37
67
|
before(:each) do
|
|
38
|
-
|
|
39
|
-
|
|
68
|
+
# For resources such as remote_directory, simply creating the base
|
|
69
|
+
# directory isn't enough to test that the system is in the desired state,
|
|
70
|
+
# so we run the resource twice--otherwise the updated_by_last_action test
|
|
71
|
+
# will fail.
|
|
72
|
+
resource.dup.run_action(:create)
|
|
73
|
+
File.should exist(path)
|
|
40
74
|
|
|
41
|
-
it "does not re-create the directory" do
|
|
42
75
|
resource.run_action(:create)
|
|
43
|
-
File.should exist(path)
|
|
44
76
|
end
|
|
45
77
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
78
|
+
describe "when running action :create" do
|
|
79
|
+
before do
|
|
80
|
+
resource.run_action(:create)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "does not re-create the directory" do
|
|
84
|
+
File.should exist(path)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "is not marked updated by last action" do
|
|
88
|
+
resource.should_not be_updated_by_last_action
|
|
89
|
+
end
|
|
49
90
|
end
|
|
50
91
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
92
|
+
describe "when running action :delete" do
|
|
93
|
+
context "without the recursive option" do
|
|
94
|
+
before do
|
|
95
|
+
resource.run_action(:delete)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "deletes the directory" do
|
|
99
|
+
File.should_not exist(path)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "is marked as updated by last action" do
|
|
103
|
+
resource.should be_updated_by_last_action
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context "with the recursive option" do
|
|
108
|
+
before do
|
|
109
|
+
FileUtils.mkdir(File.join(path, 'red-headed-stepchild'))
|
|
110
|
+
resource.recursive(true)
|
|
111
|
+
resource.run_action(:delete)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "recursively deletes directories" do
|
|
115
|
+
File.should_not exist(path)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
56
118
|
end
|
|
57
119
|
end
|
|
58
120
|
|
|
@@ -17,67 +17,145 @@
|
|
|
17
17
|
#
|
|
18
18
|
|
|
19
19
|
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
|
|
20
|
+
before do
|
|
21
|
+
# Assert starting state is as expected
|
|
22
|
+
File.should exist(path)
|
|
23
|
+
# Kinda weird, in this case @expected_checksum is the cksum of the file
|
|
24
|
+
# with incorrect content.
|
|
32
25
|
sha256_checksum(path).should == @expected_checksum
|
|
33
26
|
end
|
|
34
27
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
28
|
+
context "when running action :create" do
|
|
29
|
+
context "with backups enabled" do
|
|
30
|
+
before do
|
|
31
|
+
Chef::Config[:file_backup_path] = CHEF_SPEC_BACKUP_PATH
|
|
32
|
+
resource.run_action(:create)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "overwrites the file with the updated content when the :create action is run" do
|
|
36
|
+
File.stat(path).mtime.should > @expected_mtime
|
|
37
|
+
sha256_checksum(path).should_not == @expected_checksum
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "backs up the existing file" do
|
|
41
|
+
Dir.glob(backup_glob).size.should equal(1)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "is marked as updated by last action" do
|
|
45
|
+
resource.should be_updated_by_last_action
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context "with backups disabled" do
|
|
50
|
+
before do
|
|
51
|
+
Chef::Config[:file_backup_path] = CHEF_SPEC_BACKUP_PATH
|
|
52
|
+
resource.backup(0)
|
|
53
|
+
resource.run_action(:create)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should not attempt to backup the existing file if :backup == 0" do
|
|
57
|
+
Dir.glob(backup_glob).size.should equal(0)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
39
60
|
end
|
|
40
61
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
62
|
+
describe "when running action :create_if_missing" do
|
|
63
|
+
before do
|
|
64
|
+
resource.run_action(:create_if_missing)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "doesn't overwrite the file when the :create_if_missing action is run" do
|
|
68
|
+
File.stat(path).mtime.should == @expected_mtime
|
|
69
|
+
sha256_checksum(path).should == @expected_checksum
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "is not marked as updated" do
|
|
73
|
+
resource.should_not be_updated_by_last_action
|
|
74
|
+
end
|
|
46
75
|
end
|
|
47
76
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
77
|
+
describe "when running action :delete" do
|
|
78
|
+
before do
|
|
79
|
+
resource.run_action(:delete)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "deletes the file" do
|
|
83
|
+
File.should_not exist(path)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "is marked as updated by last action" do
|
|
87
|
+
resource.should be_updated_by_last_action
|
|
88
|
+
end
|
|
51
89
|
end
|
|
52
90
|
end
|
|
53
91
|
|
|
54
92
|
shared_examples_for "a file with the correct content" do
|
|
55
|
-
|
|
56
|
-
|
|
93
|
+
before do
|
|
94
|
+
# Assert starting state is as expected
|
|
95
|
+
File.should exist(path)
|
|
57
96
|
sha256_checksum(path).should == @expected_checksum
|
|
58
97
|
end
|
|
59
98
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
99
|
+
describe "when running action :create" do
|
|
100
|
+
before do
|
|
101
|
+
resource.run_action(:create)
|
|
102
|
+
end
|
|
103
|
+
it "does not overwrite the original when the :create action is run" do
|
|
104
|
+
sha256_checksum(path).should == @expected_checksum
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "does not update the mtime of the file when the :create action is run" do
|
|
108
|
+
File.stat(path).mtime.should == @expected_mtime
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "is not marked as updated by last action" do
|
|
112
|
+
resource.should_not be_updated_by_last_action
|
|
113
|
+
end
|
|
64
114
|
end
|
|
65
115
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
116
|
+
describe "when running action :create_if_missing" do
|
|
117
|
+
before do
|
|
118
|
+
resource.run_action(:create_if_missing)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "doesn't overwrite the file when the :create_if_missing action is run" do
|
|
122
|
+
sha256_checksum(path).should == @expected_checksum
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "is not marked as updated by last action" do
|
|
126
|
+
resource.should_not be_updated_by_last_action
|
|
127
|
+
end
|
|
69
128
|
end
|
|
70
129
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
130
|
+
describe "when running action :delete" do
|
|
131
|
+
before do
|
|
132
|
+
resource.run_action(:delete)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "deletes the file when the :delete action is run" do
|
|
136
|
+
File.should_not exist(path)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "is marked as updated by last action" do
|
|
140
|
+
resource.should be_updated_by_last_action
|
|
141
|
+
end
|
|
74
142
|
end
|
|
75
143
|
end
|
|
76
144
|
|
|
77
145
|
shared_examples_for "a file resource" do
|
|
146
|
+
before do
|
|
147
|
+
Chef::Log.level = :info
|
|
148
|
+
end
|
|
78
149
|
# note the stripping of the drive letter from the tmpdir on windows
|
|
79
150
|
let(:backup_glob) { File.join(CHEF_SPEC_BACKUP_PATH, Dir.tmpdir.sub(/^([A-Za-z]:)/, ""), "#{file_base}*") }
|
|
80
151
|
|
|
152
|
+
# Most tests update the resource, but a few do not. We need to test that the
|
|
153
|
+
# resource is marked updated or not correctly, but the test contexts are
|
|
154
|
+
# composed between correct/incorrect content and correct/incorrect
|
|
155
|
+
# permissions. We override this "let" definition in the context where content
|
|
156
|
+
# and permissions are correct.
|
|
157
|
+
let(:expect_updated?) { true }
|
|
158
|
+
|
|
81
159
|
def binread(file)
|
|
82
160
|
content = File.open(file, "rb") do |f|
|
|
83
161
|
f.read
|
|
@@ -87,27 +165,55 @@ shared_examples_for "a file resource" do
|
|
|
87
165
|
end
|
|
88
166
|
|
|
89
167
|
context "when the target file does not exist" do
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
it "creates the file when the :create action is run" do
|
|
94
|
-
resource.run_action(:create)
|
|
95
|
-
File.should exist(path)
|
|
168
|
+
before do
|
|
169
|
+
# Assert starting state is expected
|
|
170
|
+
File.should_not exist(path)
|
|
96
171
|
end
|
|
97
172
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
173
|
+
describe "when running action :create" do
|
|
174
|
+
before do
|
|
175
|
+
resource.run_action(:create)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "creates the file when the :create action is run" do
|
|
179
|
+
File.should exist(path)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it "creates the file with the correct content when the :create action is run" do
|
|
183
|
+
binread(path).should == expected_content
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "is marked as updated by last action" do
|
|
187
|
+
resource.should be_updated_by_last_action
|
|
188
|
+
end
|
|
101
189
|
end
|
|
102
190
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
191
|
+
describe "when running action :create_if_missing" do
|
|
192
|
+
before do
|
|
193
|
+
resource.run_action(:create_if_missing)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it "creates the file with the correct content" do
|
|
197
|
+
binread(path).should == expected_content
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it "is marked as updated by last action" do
|
|
201
|
+
resource.should be_updated_by_last_action
|
|
202
|
+
end
|
|
106
203
|
end
|
|
107
204
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
205
|
+
describe "when running action :delete" do
|
|
206
|
+
before do
|
|
207
|
+
resource.run_action(:delete)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it "deletes the file when the :delete action is run" do
|
|
211
|
+
File.should_not exist(path)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it "is not marked updated by last action" do
|
|
215
|
+
resource.should_not be_updated_by_last_action
|
|
216
|
+
end
|
|
111
217
|
end
|
|
112
218
|
end
|
|
113
219
|
|
|
@@ -124,6 +230,9 @@ shared_examples_for "a file resource" do
|
|
|
124
230
|
context "when the target file has the wrong content" do
|
|
125
231
|
before(:each) do
|
|
126
232
|
File.open(path, "wb") { |f| f.print "This is so wrong!!!" }
|
|
233
|
+
now = Time.now.to_i
|
|
234
|
+
File.utime(now - 9000, now - 9000, path)
|
|
235
|
+
|
|
127
236
|
@expected_mtime = File.stat(path).mtime
|
|
128
237
|
@expected_checksum = sha256_checksum(path)
|
|
129
238
|
end
|
|
@@ -140,7 +249,7 @@ shared_examples_for "a file resource" do
|
|
|
140
249
|
include_context "setup broken permissions"
|
|
141
250
|
|
|
142
251
|
it_behaves_like "a file with the wrong content"
|
|
143
|
-
|
|
252
|
+
|
|
144
253
|
it_behaves_like "a securable resource"
|
|
145
254
|
end
|
|
146
255
|
end
|
|
@@ -148,12 +257,19 @@ shared_examples_for "a file resource" do
|
|
|
148
257
|
context "when the target file has the correct content" do
|
|
149
258
|
before(:each) do
|
|
150
259
|
File.open(path, "wb") { |f| f.print expected_content }
|
|
260
|
+
now = Time.now.to_i
|
|
261
|
+
File.utime(now - 9000, now - 9000, path)
|
|
262
|
+
|
|
151
263
|
@expected_mtime = File.stat(path).mtime
|
|
152
|
-
@expected_atime = File.stat(path).atime
|
|
153
264
|
@expected_checksum = sha256_checksum(path)
|
|
154
265
|
end
|
|
155
266
|
|
|
156
267
|
describe "and the target file has the correct permissions" do
|
|
268
|
+
|
|
269
|
+
# When permissions and content are correct, chef should do nothing and
|
|
270
|
+
# the resource should not be marked updated.
|
|
271
|
+
let(:expect_updated?) { false }
|
|
272
|
+
|
|
157
273
|
include_context "setup correct permissions"
|
|
158
274
|
|
|
159
275
|
it_behaves_like "a file with the correct content"
|
|
@@ -170,24 +286,6 @@ shared_examples_for "a file resource" do
|
|
|
170
286
|
end
|
|
171
287
|
end
|
|
172
288
|
|
|
173
|
-
it_behaves_like "a file that inherits permissions from a parent directory"
|
|
174
|
-
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
shared_examples_for "a file that inherits permissions from a parent directory" do
|
|
178
|
-
include_context "use Windows permissions"
|
|
179
|
-
context "on Windows", :windows_only do
|
|
180
|
-
it "has only inherited aces if no explicit aces were specified" do
|
|
181
|
-
File.exist?(path).should == false
|
|
182
|
-
|
|
183
|
-
resource.run_action(:create)
|
|
184
|
-
|
|
185
|
-
descriptor.dacl_inherits?.should == true
|
|
186
|
-
descriptor.dacl.each do | ace |
|
|
187
|
-
ace.inherited?.should == true
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
end
|
|
191
289
|
end
|
|
192
290
|
|
|
193
291
|
shared_context Chef::Resource::File do
|