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
|
@@ -183,7 +183,7 @@ describe Chef::Provider::Ifconfig do
|
|
|
183
183
|
|
|
184
184
|
it "should write network-script for centos" do
|
|
185
185
|
@provider.stub!(:load_current_resource)
|
|
186
|
-
@node[:platform] = "centos"
|
|
186
|
+
@node.automatic_attrs[:platform] = "centos"
|
|
187
187
|
@provider.stub!(:run_command)
|
|
188
188
|
config_filename = "/etc/sysconfig/network-scripts/ifcfg-#{@new_resource.device}"
|
|
189
189
|
config_file = StringIO.new
|
|
@@ -199,7 +199,7 @@ describe Chef::Provider::Ifconfig do
|
|
|
199
199
|
describe Chef::Provider::Ifconfig, "delete_config for action_delete" do
|
|
200
200
|
|
|
201
201
|
it "should delete network-script if it exists for centos" do
|
|
202
|
-
@node[:platform] = "centos"
|
|
202
|
+
@node.automatic_attrs[:platform] = "centos"
|
|
203
203
|
@current_resource.device "eth0"
|
|
204
204
|
@provider.stub!(:load_current_resource)
|
|
205
205
|
@provider.stub!(:run_command)
|
|
@@ -34,7 +34,7 @@ describe Chef::Provider::Ohai do
|
|
|
34
34
|
:platform => @platform,
|
|
35
35
|
:platform_version => @platform_version,
|
|
36
36
|
:data => {
|
|
37
|
-
:origdata => "somevalue"
|
|
37
|
+
:origdata => "somevalue"
|
|
38
38
|
},
|
|
39
39
|
:data2 => {
|
|
40
40
|
:origdata => "somevalue",
|
|
@@ -49,7 +49,7 @@ describe Chef::Provider::Ohai do
|
|
|
49
49
|
Chef::Platform.stub!(:find_platform_and_version).and_return({ "platform" => @platform,
|
|
50
50
|
"platform_version" => @platform_version})
|
|
51
51
|
# Fake node with a dummy save
|
|
52
|
-
@node = Chef::Node.new
|
|
52
|
+
@node = Chef::Node.new
|
|
53
53
|
@node.name(@fqdn)
|
|
54
54
|
@node.stub!(:save).and_return(@node)
|
|
55
55
|
@events = Chef::EventDispatch::Dispatcher.new
|
|
@@ -57,14 +57,14 @@ describe Chef::Provider::Ohai do
|
|
|
57
57
|
@new_resource = Chef::Resource::Ohai.new("ohai_reload")
|
|
58
58
|
ohai = Ohai::System.new
|
|
59
59
|
ohai.all_plugins
|
|
60
|
-
@node.
|
|
60
|
+
@node.consume_external_attrs(ohai.data,{})
|
|
61
61
|
|
|
62
62
|
@provider = Chef::Provider::Ohai.new(@new_resource, @run_context)
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
describe "when reloading ohai" do
|
|
66
66
|
before do
|
|
67
|
-
@node[:origdata] = 'somevalue'
|
|
67
|
+
@node.automatic_attrs[:origdata] = 'somevalue'
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
it "applies updated ohai data to the node" do
|
|
@@ -22,7 +22,6 @@ require 'ostruct'
|
|
|
22
22
|
describe Chef::Provider::Package::Apt do
|
|
23
23
|
before(:each) do
|
|
24
24
|
@node = Chef::Node.new
|
|
25
|
-
@node.cookbook_collection = {}
|
|
26
25
|
@events = Chef::EventDispatch::Dispatcher.new
|
|
27
26
|
@run_context = Chef::RunContext.new(@node, {}, @events)
|
|
28
27
|
@new_resource = Chef::Resource::Package.new("irssi", @run_context)
|
|
@@ -24,7 +24,6 @@ require 'ostruct'
|
|
|
24
24
|
describe Chef::Provider::Package::Ips do
|
|
25
25
|
before(:each) do
|
|
26
26
|
@node = Chef::Node.new
|
|
27
|
-
@node.cookbook_collection = {}
|
|
28
27
|
@events = Chef::EventDispatch::Dispatcher.new
|
|
29
28
|
@run_context = Chef::RunContext.new(@node, {}, @events)
|
|
30
29
|
@new_resource = Chef::Resource::Package.new("crypto/gnupg", @run_context)
|
|
@@ -230,50 +230,6 @@ EOF
|
|
|
230
230
|
lambda { @provider.candidate_version }.should raise_error(Chef::Exceptions::Package)
|
|
231
231
|
end
|
|
232
232
|
|
|
233
|
-
it "should find the candidate_version if a category is specifed and there are category duplicates" do
|
|
234
|
-
output = <<EOF
|
|
235
|
-
Searching...
|
|
236
|
-
[ Results for search key : git ]
|
|
237
|
-
[ Applications found : 14 ]
|
|
238
|
-
|
|
239
|
-
* app-misc/digitemp [ Masked ]
|
|
240
|
-
Latest version available: 3.5.0
|
|
241
|
-
Latest version installed: [ Not Installed ]
|
|
242
|
-
Size of files: 261 kB
|
|
243
|
-
Homepage: http://www.digitemp.com/ http://www.ibutton.com/
|
|
244
|
-
Description: Temperature logging and reporting using Dallas Semiconductor's iButtons and 1-Wire protocol
|
|
245
|
-
License: GPL-2
|
|
246
|
-
|
|
247
|
-
* app-misc/git
|
|
248
|
-
Latest version available: 4.3.20
|
|
249
|
-
Latest version installed: [ Not Installed ]
|
|
250
|
-
Size of files: 416 kB
|
|
251
|
-
Homepage: http://www.gnu.org/software/git/
|
|
252
|
-
Description: GNU Interactive Tools - increase speed and efficiency of most daily task
|
|
253
|
-
License: GPL-2
|
|
254
|
-
|
|
255
|
-
* dev-util/git
|
|
256
|
-
Latest version available: 1.6.0.6
|
|
257
|
-
Latest version installed: ignore
|
|
258
|
-
Size of files: 2,725 kB
|
|
259
|
-
Homepage: http://git.or.cz/
|
|
260
|
-
Description: GIT - the stupid content tracker, the revision control system heavily used by the Linux kernel team
|
|
261
|
-
License: GPL-2
|
|
262
|
-
|
|
263
|
-
* dev-util/gitosis [ Masked ]
|
|
264
|
-
Latest version available: 0.2_p20080825
|
|
265
|
-
Latest version installed: [ Not Installed ]
|
|
266
|
-
Size of files: 31 kB
|
|
267
|
-
Homepage: http://eagain.net/gitweb/?p=gitosis.git;a=summary
|
|
268
|
-
Description: gitosis -- software for hosting git repositories
|
|
269
|
-
License: GPL-2
|
|
270
|
-
EOF
|
|
271
|
-
|
|
272
|
-
@status = mock("Status", :exitstatus => 0)
|
|
273
|
-
@provider = Chef::Provider::Package::Portage.new(@new_resource, @run_context)
|
|
274
|
-
@provider.should_receive(:popen4).and_yield(nil, nil, StringIO.new(output), nil).and_return(@status)
|
|
275
|
-
@provider.candidate_version.should == "1.6.0.6"
|
|
276
|
-
end
|
|
277
233
|
end
|
|
278
234
|
|
|
279
235
|
describe Chef::Provider::Package::Portage, "install_package" do
|
|
@@ -80,18 +80,6 @@ describe Chef::Provider::Package::Rpm do
|
|
|
80
80
|
@provider.stub!(:popen4).and_return(status)
|
|
81
81
|
lambda { @provider.run_action(:any) }.should raise_error(Chef::Exceptions::Package)
|
|
82
82
|
end
|
|
83
|
-
|
|
84
|
-
it "should not detect the package name as version when not installed" do
|
|
85
|
-
@status = double("Status", :exitstatus => -1)
|
|
86
|
-
@stdout = StringIO.new("package openssh-askpass is not installed")
|
|
87
|
-
@new_resource = Chef::Resource::Package.new("openssh-askpass")
|
|
88
|
-
@new_resource.source 'openssh-askpass'
|
|
89
|
-
@provider = Chef::Provider::Package::Rpm.new(@new_resource, @run_context)
|
|
90
|
-
@provider.should_receive(:popen4).with("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
|
91
|
-
@provider.should_receive(:popen4).with("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' openssh-askpass").and_return(@status)
|
|
92
|
-
@provider.load_current_resource
|
|
93
|
-
@provider.current_resource.version.should be_nil
|
|
94
|
-
end
|
|
95
83
|
end
|
|
96
84
|
|
|
97
85
|
describe "after the current resource is loaded" do
|
|
@@ -95,49 +95,6 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
|
|
|
95
95
|
@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0')).should == Gem::Version.new('1.3.0')
|
|
96
96
|
end
|
|
97
97
|
|
|
98
|
-
it "finds a matching gem candidate version on rubygems 2.0.0+" do
|
|
99
|
-
dep = Gem::Dependency.new('rspec', '>= 0')
|
|
100
|
-
dep_installer = Gem::DependencyInstaller.new
|
|
101
|
-
@gem_env.stub!(:dependency_installer).and_return(dep_installer)
|
|
102
|
-
best_gem = mock("best gem match", :spec => gemspec("rspec", Gem::Version.new("1.3.0")), :source => "https://rubygems.org")
|
|
103
|
-
available_set = mock("Gem::AvailableSet test double")
|
|
104
|
-
available_set.should_receive(:pick_best!)
|
|
105
|
-
available_set.should_receive(:set).and_return([best_gem])
|
|
106
|
-
dep_installer.should_receive(:find_gems_with_sources).with(dep).and_return(available_set)
|
|
107
|
-
@gem_env.candidate_version_from_remote(Gem::Dependency.new('rspec', '>= 0')).should == Gem::Version.new('1.3.0')
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
context "when rubygems was upgraded from 1.8->2.0" do
|
|
111
|
-
# https://github.com/rubygems/rubygems/issues/404
|
|
112
|
-
# tl;dr rubygems 1.8 and 2.0 can both be in the load path, which means that
|
|
113
|
-
# require "rubygems/format" will load even though rubygems 2.0 doesn't have
|
|
114
|
-
# that file.
|
|
115
|
-
|
|
116
|
-
before do
|
|
117
|
-
if defined?(Gem::Format)
|
|
118
|
-
# tests are running under rubygems 1.8, or 2.0 upgraded from 1.8
|
|
119
|
-
@remove_gem_format = false
|
|
120
|
-
else
|
|
121
|
-
Gem.const_set(:Format, Object.new)
|
|
122
|
-
@remove_gem_format = true
|
|
123
|
-
end
|
|
124
|
-
Gem::Package.stub!(:respond_to?).with(:open).and_return(false)
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
after do
|
|
128
|
-
if @remove_gem_format
|
|
129
|
-
Gem.send(:remove_const, :Format)
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it "finds a matching gem candidate version on rubygems 2.0+ with some rubygems 1.8 code loaded" do
|
|
134
|
-
package = mock("Gem::Package", :spec => "a gemspec from package")
|
|
135
|
-
Gem::Package.should_receive(:new).with("/path/to/package.gem").and_return(package)
|
|
136
|
-
@gem_env.spec_from_file("/path/to/package.gem").should == "a gemspec from package"
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
end
|
|
140
|
-
|
|
141
98
|
it "gives the candidate version as nil if none is found" do
|
|
142
99
|
dep = Gem::Dependency.new('rspec', '>= 0')
|
|
143
100
|
latest = []
|
|
@@ -256,7 +213,7 @@ describe Chef::Provider::Package::Rubygems::AlternateGemEnvironment do
|
|
|
256
213
|
it "determines the installed versions of gems from the source index (part2: the unmockening)" do
|
|
257
214
|
$stdout.stub!(:write)
|
|
258
215
|
path_to_gem = if windows?
|
|
259
|
-
`where gem`.split[1]
|
|
216
|
+
`where gem`.split[-1]
|
|
260
217
|
else
|
|
261
218
|
`which gem`.strip
|
|
262
219
|
end
|
|
@@ -39,6 +39,7 @@ describe Chef::Provider::Package::Yum do
|
|
|
39
39
|
)
|
|
40
40
|
Chef::Provider::Package::Yum::YumCache.stub!(:instance).and_return(@yum_cache)
|
|
41
41
|
@provider = Chef::Provider::Package::Yum.new(@new_resource, @run_context)
|
|
42
|
+
@stderr = StringIO.new
|
|
42
43
|
@pid = mock("PID")
|
|
43
44
|
end
|
|
44
45
|
|
|
@@ -541,7 +542,7 @@ describe Chef::Provider::Package::Yum do
|
|
|
541
542
|
it "should call action_upgrade in the parent if the candidate version is nil" do
|
|
542
543
|
@provider.load_current_resource
|
|
543
544
|
@current_resource = Chef::Resource::Package.new('cups')
|
|
544
|
-
@provider.candidate_version = nil
|
|
545
|
+
@provider.candidate_version = nil
|
|
545
546
|
@provider.should_not_receive(:upgrade_package)
|
|
546
547
|
@provider.action_upgrade
|
|
547
548
|
end
|
|
@@ -599,7 +600,7 @@ describe Chef::Provider::Package::Yum do
|
|
|
599
600
|
@provider.stub!(:output_of_command).and_return([@status, "", ""])
|
|
600
601
|
@provider.should_receive(:output_of_command).once.with(
|
|
601
602
|
"yum -d0 -e0 -y install emacs-1.0",
|
|
602
|
-
{
|
|
603
|
+
{}
|
|
603
604
|
)
|
|
604
605
|
@provider.yum_command("yum -d0 -e0 -y install emacs-1.0")
|
|
605
606
|
end
|
|
@@ -609,7 +610,7 @@ describe Chef::Provider::Package::Yum do
|
|
|
609
610
|
@provider.stub!(:output_of_command).and_return([@status, "failure failure", "problem problem"])
|
|
610
611
|
@provider.should_receive(:output_of_command).once.with(
|
|
611
612
|
"yum -d0 -e0 -y install emacs-1.0",
|
|
612
|
-
{
|
|
613
|
+
{}
|
|
613
614
|
)
|
|
614
615
|
lambda { @provider.yum_command("yum -d0 -e0 -y install emacs-1.0") }.should raise_error(Chef::Exceptions::Exec)
|
|
615
616
|
end
|
|
@@ -619,7 +620,7 @@ describe Chef::Provider::Package::Yum do
|
|
|
619
620
|
@provider.stub!(:output_of_command).and_return([@status, "error: %pre(demo-1-1.el5.centos.x86_64) scriptlet failed, exit status 2", ""])
|
|
620
621
|
@provider.should_receive(:output_of_command).once.with(
|
|
621
622
|
"yum -d0 -e0 -y install emacs-1.0",
|
|
622
|
-
{
|
|
623
|
+
{}
|
|
623
624
|
)
|
|
624
625
|
# will still raise an exception, can't stub out the subsequent call
|
|
625
626
|
lambda { @provider.yum_command("yum -d0 -e0 -y install emacs-1.0") }.should raise_error(Chef::Exceptions::Exec)
|
|
@@ -630,7 +631,7 @@ describe Chef::Provider::Package::Yum do
|
|
|
630
631
|
@provider.stub!(:output_of_command).and_return([@status, "error: %post(demo-1-1.el5.centos.x86_64) scriptlet failed, exit status 2", ""])
|
|
631
632
|
@provider.should_receive(:output_of_command).twice.with(
|
|
632
633
|
"yum -d0 -e0 -y install emacs-1.0",
|
|
633
|
-
{
|
|
634
|
+
{}
|
|
634
635
|
)
|
|
635
636
|
# will still raise an exception, can't stub out the subsequent call
|
|
636
637
|
lambda { @provider.yum_command("yum -d0 -e0 -y install emacs-1.0") }.should raise_error(Chef::Exceptions::Exec)
|
|
@@ -1154,7 +1155,7 @@ describe Chef::Provider::Package::Yum::RPMDbPackage do
|
|
|
1154
1155
|
|
|
1155
1156
|
describe "repoid" do
|
|
1156
1157
|
it "should return the source repository repoid" do
|
|
1157
|
-
@rpm_x.repoid.should be == "base"
|
|
1158
|
+
@rpm_x.repoid.should be == "base"
|
|
1158
1159
|
@rpm_y.repoid.should be == "extras"
|
|
1159
1160
|
@rpm_z.repoid.should be == "other"
|
|
1160
1161
|
end
|
|
@@ -1543,10 +1544,7 @@ describe Chef::Provider::Package::Yum::YumCache do
|
|
|
1543
1544
|
end
|
|
1544
1545
|
|
|
1545
1546
|
before(:each) do
|
|
1546
|
-
|
|
1547
|
-
@stdout = mock("STDOUT", :nil_object => true)
|
|
1548
|
-
|
|
1549
|
-
@stdout_good = <<EOF
|
|
1547
|
+
yum_dump_good_output = <<EOF
|
|
1550
1548
|
[option installonlypkgs] kernel kernel-bigmem kernel-enterprise
|
|
1551
1549
|
erlang-mochiweb 0 1.4.1 5.el5 x86_64 ['erlang-mochiweb = 1.4.1-5.el5', 'mochiweb = 1.4.1-5.el5'] i installed
|
|
1552
1550
|
zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
|
|
@@ -1562,16 +1560,9 @@ znc-extra 0 0.098 1.el5 x86_64 [] a base
|
|
|
1562
1560
|
znc-modtcl 0 0.098 1.el5 x86_64 [] a base
|
|
1563
1561
|
znc-test.beta1 0 0.098 1.el5 x86_64 [] a extras
|
|
1564
1562
|
znc-test.test.beta1 0 0.098 1.el5 x86_64 [] a base
|
|
1565
|
-
EOF
|
|
1566
|
-
@stdout_bad_type = <<EOF
|
|
1567
|
-
zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
|
|
1568
|
-
zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] c base
|
|
1569
|
-
zlib-devel 0 1.2.3 3 i386 [] a extras
|
|
1570
|
-
zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] bad installed
|
|
1571
|
-
znc-modtcl 0 0.098 1.el5 x86_64 [] a base
|
|
1572
1563
|
EOF
|
|
1573
1564
|
|
|
1574
|
-
|
|
1565
|
+
yum_dump_bad_output_separators = <<EOF
|
|
1575
1566
|
zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
|
|
1576
1567
|
zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] i base bad
|
|
1577
1568
|
zlib-devel 0 1.2.3 3 i386 [] a extras
|
|
@@ -1579,20 +1570,36 @@ bad zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] i installed
|
|
|
1579
1570
|
znc-modtcl 0 0.098 1.el5 x86_64 [] a base bad
|
|
1580
1571
|
EOF
|
|
1581
1572
|
|
|
1582
|
-
|
|
1573
|
+
yum_dump_bad_output_type = <<EOF
|
|
1574
|
+
zip 0 2.31 2.el5 x86_64 ['zip = 2.31-2.el5'] r base
|
|
1575
|
+
zlib 0 1.2.3 3 x86_64 ['zlib = 1.2.3-3', 'libz.so.1()(64bit)'] c base
|
|
1576
|
+
zlib-devel 0 1.2.3 3 i386 [] a extras
|
|
1577
|
+
zlib-devel 0 1.2.3 3 x86_64 ['zlib-devel = 1.2.3-3'] bad installed
|
|
1578
|
+
znc-modtcl 0 0.098 1.el5 x86_64 [] a base
|
|
1579
|
+
EOF
|
|
1583
1580
|
|
|
1584
|
-
|
|
1581
|
+
yum_dump_error = <<EOF
|
|
1585
1582
|
yum-dump Config Error: File contains no section headers.
|
|
1586
1583
|
file: file://///etc/yum.repos.d/CentOS-Base.repo, line: 12
|
|
1587
1584
|
'qeqwewe\n'
|
|
1588
1585
|
EOF
|
|
1589
|
-
|
|
1586
|
+
|
|
1587
|
+
@status = mock("Status", :exitstatus => 0)
|
|
1588
|
+
@status_bad = mock("Status", :exitstatus => 1)
|
|
1589
|
+
@stdin = mock("STDIN", :nil_object => true)
|
|
1590
|
+
@stdout = mock("STDOUT", :nil_object => true)
|
|
1591
|
+
@stdout_good = yum_dump_good_output.split("\n")
|
|
1592
|
+
@stdout_bad_type = yum_dump_bad_output_type.split("\n")
|
|
1593
|
+
@stdout_bad_separators = yum_dump_bad_output_separators.split("\n")
|
|
1594
|
+
@stderr = mock("STDERR", :nil_object => true)
|
|
1595
|
+
@stderr.stub!(:readlines).and_return(yum_dump_error.split("\n"))
|
|
1596
|
+
@pid = mock("PID", :nil_object => true)
|
|
1590
1597
|
|
|
1591
1598
|
# new singleton each time
|
|
1592
1599
|
Chef::Provider::Package::Yum::YumCache.reset_instance
|
|
1593
1600
|
@yc = Chef::Provider::Package::Yum::YumCache.instance
|
|
1594
1601
|
# load valid data
|
|
1595
|
-
@yc.stub!(:
|
|
1602
|
+
@yc.stub!(:popen4).and_yield(@pid, @stdin, @stdout_good, @stderr).and_return(@status)
|
|
1596
1603
|
end
|
|
1597
1604
|
|
|
1598
1605
|
describe "initialize" do
|
|
@@ -1611,7 +1618,7 @@ EOF
|
|
|
1611
1618
|
|
|
1612
1619
|
describe "refresh" do
|
|
1613
1620
|
it "should implicitly call yum-dump.py only once by default after being instantiated" do
|
|
1614
|
-
@yc.should_receive(:
|
|
1621
|
+
@yc.should_receive(:popen4).once
|
|
1615
1622
|
@yc.installed_version("zlib")
|
|
1616
1623
|
@yc.reset
|
|
1617
1624
|
@yc.installed_version("zlib")
|
|
@@ -1619,52 +1626,48 @@ EOF
|
|
|
1619
1626
|
|
|
1620
1627
|
it "should run yum-dump.py using the system python when next_refresh is for :all" do
|
|
1621
1628
|
@yc.reload
|
|
1622
|
-
@yc.should_receive(:
|
|
1629
|
+
@yc.should_receive(:popen4).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides$}, :waitlast=>true)
|
|
1623
1630
|
@yc.refresh
|
|
1624
1631
|
end
|
|
1625
1632
|
|
|
1626
1633
|
it "should run yum-dump.py with the installed flag when next_refresh is for :installed" do
|
|
1627
1634
|
@yc.reload_installed
|
|
1628
|
-
@yc.should_receive(:
|
|
1635
|
+
@yc.should_receive(:popen4).with(%r{^/usr/bin/python .*/yum-dump.py --installed$}, :waitlast=>true)
|
|
1629
1636
|
@yc.refresh
|
|
1630
1637
|
end
|
|
1631
1638
|
|
|
1632
1639
|
it "should run yum-dump.py with the all-provides flag when next_refresh is for :provides" do
|
|
1633
1640
|
@yc.reload_provides
|
|
1634
|
-
@yc.should_receive(:
|
|
1641
|
+
@yc.should_receive(:popen4).with(%r{^/usr/bin/python .*/yum-dump.py --options --all-provides$}, :waitlast=>true)
|
|
1635
1642
|
@yc.refresh
|
|
1636
1643
|
end
|
|
1637
1644
|
|
|
1638
1645
|
it "should pass extra_repo_control args to yum-dump.py" do
|
|
1639
1646
|
@yc.enable_extra_repo_control("--enablerepo=foo --disablerepo=bar")
|
|
1640
|
-
@yc.should_receive(:
|
|
1647
|
+
@yc.should_receive(:popen4).with(%r{^/usr/bin/python .*/yum-dump.py --options --installed-provides --enablerepo=foo --disablerepo=bar$}, :waitlast=>true)
|
|
1641
1648
|
@yc.refresh
|
|
1642
1649
|
end
|
|
1643
1650
|
|
|
1644
1651
|
it "should warn about invalid data with too many separators" do
|
|
1645
|
-
@
|
|
1646
|
-
@yc.stub!(:shell_out!).and_return(@status)
|
|
1652
|
+
@yc.stub!(:popen4).and_yield(@pid, @stdin, @stdout_bad_separators, @stderr).and_return(@status)
|
|
1647
1653
|
Chef::Log.should_receive(:warn).exactly(3).times.with(%r{Problem parsing})
|
|
1648
1654
|
@yc.refresh
|
|
1649
1655
|
end
|
|
1650
1656
|
|
|
1651
1657
|
it "should warn about invalid data with an incorrect type" do
|
|
1652
|
-
@
|
|
1653
|
-
@yc.stub!(:shell_out!).and_return(@status)
|
|
1658
|
+
@yc.stub!(:popen4).and_yield(@pid, @stdin, @stdout_bad_type, @stderr).and_return(@status)
|
|
1654
1659
|
Chef::Log.should_receive(:warn).exactly(2).times.with(%r{Problem parsing})
|
|
1655
1660
|
@yc.refresh
|
|
1656
1661
|
end
|
|
1657
1662
|
|
|
1658
1663
|
it "should warn about no output from yum-dump.py" do
|
|
1659
|
-
@
|
|
1660
|
-
@yc.stub!(:shell_out!).and_return(@status)
|
|
1664
|
+
@yc.stub!(:popen4).and_yield(@pid, @stdin, [], @stderr).and_return(@status)
|
|
1661
1665
|
Chef::Log.should_receive(:warn).exactly(1).times.with(%r{no output from yum-dump.py})
|
|
1662
1666
|
@yc.refresh
|
|
1663
1667
|
end
|
|
1664
1668
|
|
|
1665
1669
|
it "should raise exception yum-dump.py exits with a non zero status" do
|
|
1666
|
-
@
|
|
1667
|
-
@yc.stub!(:shell_out!).and_return(@status)
|
|
1670
|
+
@yc.stub!(:popen4).and_yield(@pid, @stdin, [], @stderr).and_return(@status_bad)
|
|
1668
1671
|
lambda { @yc.refresh}.should raise_error(Chef::Exceptions::Package, %r{CentOS-Base.repo, line: 12})
|
|
1669
1672
|
end
|
|
1670
1673
|
|
|
@@ -1789,7 +1792,7 @@ EOF
|
|
|
1789
1792
|
end
|
|
1790
1793
|
|
|
1791
1794
|
it "should return nil when no match for package-version, no arch" do
|
|
1792
|
-
@yc.package_repository("zisofs-tools", "pretend", nil).should be == nil
|
|
1795
|
+
@yc.package_repository("zisofs-tools", "pretend", nil).should be == nil
|
|
1793
1796
|
@yc.package_repository("zisofs-tools", "pretend").should be == nil
|
|
1794
1797
|
@yc.package_repository("pretend", "1.0.6-3.2.2").should be == nil
|
|
1795
1798
|
end
|
|
@@ -346,11 +346,13 @@ describe Chef::Provider::Package do
|
|
|
346
346
|
Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, @cookbook_repo) }
|
|
347
347
|
|
|
348
348
|
@node = Chef::Node.new
|
|
349
|
-
|
|
349
|
+
cl = Chef::CookbookLoader.new(@cookbook_repo)
|
|
350
|
+
cl.load_cookbooks
|
|
351
|
+
@cookbook_collection = Chef::CookbookCollection.new(cl)
|
|
350
352
|
@run_context = Chef::RunContext.new(@node, @cookbook_collection, @events)
|
|
351
353
|
|
|
352
|
-
@node[:platform] = 'PLATFORM: just testing'
|
|
353
|
-
@node[:platform_version] = 'PLATFORM VERSION: just testing'
|
|
354
|
+
@node.automatic_attrs[:platform] = 'PLATFORM: just testing'
|
|
355
|
+
@node.automatic_attrs[:platform_version] = 'PLATFORM VERSION: just testing'
|
|
354
356
|
|
|
355
357
|
@new_resource.response_file('java.response')
|
|
356
358
|
@new_resource.cookbook_name = 'java'
|
|
@@ -386,8 +388,8 @@ describe Chef::Provider::Package do
|
|
|
386
388
|
|
|
387
389
|
describe "when installing the preseed file to the cache location" do
|
|
388
390
|
before do
|
|
389
|
-
@node[:platform] = :just_testing
|
|
390
|
-
@node[:platform_version] = :just_testing
|
|
391
|
+
@node.automatic_attrs[:platform] = :just_testing
|
|
392
|
+
@node.automatic_attrs[:platform_version] = :just_testing
|
|
391
393
|
|
|
392
394
|
@response_file_destination = Dir.tmpdir + '/preseed--java--java-6.seed'
|
|
393
395
|
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Lamont Granquist (lamont@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 'spec_helper'
|
|
20
|
+
|
|
21
|
+
describe Chef::Provider::RegistryKey do
|
|
22
|
+
|
|
23
|
+
let(:testval1) { { :name => "one", :type => :string, :data => "1" } }
|
|
24
|
+
let(:testval1_wrong_type) { { :name => "one", :type => :multi_string, :data => "1" } }
|
|
25
|
+
let(:testval1_wrong_data) { { :name => "one", :type => :string, :data => "2" } }
|
|
26
|
+
let(:testval2) { { :name => "two", :type => :string, :data => "2" } }
|
|
27
|
+
let(:testkey1) { 'HKLM\Software\Opscode\Testing' }
|
|
28
|
+
|
|
29
|
+
before(:each) do
|
|
30
|
+
@node = Chef::Node.new
|
|
31
|
+
@events = Chef::EventDispatch::Dispatcher.new
|
|
32
|
+
@run_context = Chef::RunContext.new(@node, {}, @events)
|
|
33
|
+
|
|
34
|
+
@new_resource = Chef::Resource::RegistryKey.new("windows is fun", @run_context)
|
|
35
|
+
@new_resource.key testkey1
|
|
36
|
+
@new_resource.values( testval1 )
|
|
37
|
+
@new_resource.recursive false
|
|
38
|
+
|
|
39
|
+
@provider = Chef::Provider::RegistryKey.new(@new_resource, @run_context)
|
|
40
|
+
|
|
41
|
+
@provider.stub!(:running_on_windows!).and_return(true)
|
|
42
|
+
@double_registry = double(Chef::Win32::Registry)
|
|
43
|
+
@provider.stub!(:registry).and_return(@double_registry)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "when first created" do
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "executing load_current_resource" do
|
|
50
|
+
describe "when the key exists" do
|
|
51
|
+
before(:each) do
|
|
52
|
+
@double_registry.should_receive(:key_exists?).with(testkey1).and_return(true)
|
|
53
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval2 )
|
|
54
|
+
@provider.load_current_resource
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should set the key of the current resource to the key of the new resource" do
|
|
58
|
+
@provider.current_resource.key.should == @new_resource.key
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should set the architecture of the current resource to the architecture of the new resource" do
|
|
62
|
+
@provider.current_resource.architecture.should == @new_resource.architecture
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should set the recursive flag of the current resource to the recursive flag of the new resource" do
|
|
66
|
+
@provider.current_resource.recursive.should == @new_resource.recursive
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should set the values of the current resource to the values it got from the registry" do
|
|
70
|
+
@provider.current_resource.values.should == [ testval2 ]
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "when the key does not exist" do
|
|
75
|
+
before(:each) do
|
|
76
|
+
@double_registry.should_receive(:key_exists?).with(testkey1).and_return(false)
|
|
77
|
+
@provider.load_current_resource
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should set the values in the current resource to empty array" do
|
|
81
|
+
@provider.current_resource.values.should == []
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe "action_create" do
|
|
87
|
+
context "when the key exists" do
|
|
88
|
+
before(:each) do
|
|
89
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(true)
|
|
90
|
+
end
|
|
91
|
+
it "should do nothing if the key and the value both exist" do
|
|
92
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1 )
|
|
93
|
+
@double_registry.should_not_receive(:set_value)
|
|
94
|
+
@provider.load_current_resource
|
|
95
|
+
@provider.action_create
|
|
96
|
+
end
|
|
97
|
+
it "should create the value if the key exists but the value does not" do
|
|
98
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval2 )
|
|
99
|
+
@double_registry.should_receive(:set_value).with(testkey1, testval1)
|
|
100
|
+
@provider.load_current_resource
|
|
101
|
+
@provider.action_create
|
|
102
|
+
end
|
|
103
|
+
it "should set the value if the key exists but the data does not match" do
|
|
104
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1_wrong_data )
|
|
105
|
+
@double_registry.should_receive(:set_value).with(testkey1, testval1)
|
|
106
|
+
@provider.load_current_resource
|
|
107
|
+
@provider.action_create
|
|
108
|
+
end
|
|
109
|
+
it "should set the value if the key exists but the type does not match" do
|
|
110
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1_wrong_type )
|
|
111
|
+
@double_registry.should_receive(:set_value).with(testkey1, testval1)
|
|
112
|
+
@provider.load_current_resource
|
|
113
|
+
@provider.action_create
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
context "when the key exists and the values in the new resource are empty" do
|
|
117
|
+
it "when a value is in the key, it should do nothing" do
|
|
118
|
+
@provider.new_resource.values([])
|
|
119
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(true)
|
|
120
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1 )
|
|
121
|
+
@double_registry.should_not_receive(:create_key)
|
|
122
|
+
@double_registry.should_not_receive(:set_value)
|
|
123
|
+
@provider.load_current_resource
|
|
124
|
+
@provider.action_create
|
|
125
|
+
end
|
|
126
|
+
it "when no value is in the key, it should do nothing" do
|
|
127
|
+
@provider.new_resource.values([])
|
|
128
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(true)
|
|
129
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( nil )
|
|
130
|
+
@double_registry.should_not_receive(:create_key)
|
|
131
|
+
@double_registry.should_not_receive(:set_value)
|
|
132
|
+
@provider.load_current_resource
|
|
133
|
+
@provider.action_create
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
context "when the key does not exist" do
|
|
137
|
+
before(:each) do
|
|
138
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(false)
|
|
139
|
+
end
|
|
140
|
+
it "should create the key and the value" do
|
|
141
|
+
@double_registry.should_receive(:create_key).with(testkey1, false)
|
|
142
|
+
@double_registry.should_receive(:set_value).with(testkey1, testval1)
|
|
143
|
+
@provider.load_current_resource
|
|
144
|
+
@provider.action_create
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
context "when the key does not exist and the values in the new resource are empty" do
|
|
148
|
+
it "should create the key" do
|
|
149
|
+
@new_resource.values([])
|
|
150
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(false)
|
|
151
|
+
@double_registry.should_receive(:create_key).with(testkey1, false)
|
|
152
|
+
@double_registry.should_not_receive(:set_value)
|
|
153
|
+
@provider.load_current_resource
|
|
154
|
+
@provider.action_create
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
describe "action_create_if_missing" do
|
|
160
|
+
context "when the key exists" do
|
|
161
|
+
before(:each) do
|
|
162
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(true)
|
|
163
|
+
end
|
|
164
|
+
it "should do nothing if the key and the value both exist" do
|
|
165
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1 )
|
|
166
|
+
@double_registry.should_not_receive(:set_value)
|
|
167
|
+
@provider.load_current_resource
|
|
168
|
+
@provider.action_create_if_missing
|
|
169
|
+
end
|
|
170
|
+
it "should create the value if the key exists but the value does not" do
|
|
171
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval2 )
|
|
172
|
+
@double_registry.should_receive(:set_value).with(testkey1, testval1)
|
|
173
|
+
@provider.load_current_resource
|
|
174
|
+
@provider.action_create_if_missing
|
|
175
|
+
end
|
|
176
|
+
it "should not set the value if the key exists but the data does not match" do
|
|
177
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1_wrong_data )
|
|
178
|
+
@double_registry.should_not_receive(:set_value)
|
|
179
|
+
@provider.load_current_resource
|
|
180
|
+
@provider.action_create_if_missing
|
|
181
|
+
end
|
|
182
|
+
it "should not set the value if the key exists but the type does not match" do
|
|
183
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1_wrong_type )
|
|
184
|
+
@double_registry.should_not_receive(:set_value)
|
|
185
|
+
@provider.load_current_resource
|
|
186
|
+
@provider.action_create_if_missing
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
context "when the key does not exist" do
|
|
190
|
+
before(:each) do
|
|
191
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(false)
|
|
192
|
+
end
|
|
193
|
+
it "should create the key and the value" do
|
|
194
|
+
@double_registry.should_receive(:create_key).with(testkey1, false)
|
|
195
|
+
@double_registry.should_receive(:set_value).with(testkey1, testval1)
|
|
196
|
+
@provider.load_current_resource
|
|
197
|
+
@provider.action_create_if_missing
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
describe "action_delete" do
|
|
203
|
+
context "when the key exists" do
|
|
204
|
+
before(:each) do
|
|
205
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(true)
|
|
206
|
+
end
|
|
207
|
+
it "deletes the value when the value exists" do
|
|
208
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1 )
|
|
209
|
+
@double_registry.should_receive(:delete_value).with(testkey1, testval1)
|
|
210
|
+
@provider.load_current_resource
|
|
211
|
+
@provider.action_delete
|
|
212
|
+
end
|
|
213
|
+
it "deletes the value when the value exists, but the type is wrong" do
|
|
214
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1_wrong_type )
|
|
215
|
+
@double_registry.should_receive(:delete_value).with(testkey1, testval1)
|
|
216
|
+
@provider.load_current_resource
|
|
217
|
+
@provider.action_delete
|
|
218
|
+
end
|
|
219
|
+
it "deletes the value when the value exists, but the data is wrong" do
|
|
220
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1_wrong_data )
|
|
221
|
+
@double_registry.should_receive(:delete_value).with(testkey1, testval1)
|
|
222
|
+
@provider.load_current_resource
|
|
223
|
+
@provider.action_delete
|
|
224
|
+
end
|
|
225
|
+
it "does not delete the value when the value does not exist" do
|
|
226
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval2 )
|
|
227
|
+
@double_registry.should_not_receive(:delete_value)
|
|
228
|
+
@provider.load_current_resource
|
|
229
|
+
@provider.action_delete
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
context "when the key does not exist" do
|
|
233
|
+
before(:each) do
|
|
234
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(false)
|
|
235
|
+
end
|
|
236
|
+
it "does nothing" do
|
|
237
|
+
@double_registry.should_not_receive(:delete_value)
|
|
238
|
+
@provider.load_current_resource
|
|
239
|
+
@provider.action_delete
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
describe "action_delete_key" do
|
|
245
|
+
context "when the key exists" do
|
|
246
|
+
before(:each) do
|
|
247
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(true)
|
|
248
|
+
end
|
|
249
|
+
it "deletes the key" do
|
|
250
|
+
@double_registry.should_receive(:get_values).with(testkey1).and_return( testval1 )
|
|
251
|
+
@double_registry.should_receive(:delete_key).with(testkey1, false)
|
|
252
|
+
@provider.load_current_resource
|
|
253
|
+
@provider.action_delete_key
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
context "when the key does not exist" do
|
|
257
|
+
before(:each) do
|
|
258
|
+
@double_registry.should_receive(:key_exists?).twice.with(testkey1).and_return(false)
|
|
259
|
+
end
|
|
260
|
+
it "does nothing" do
|
|
261
|
+
@double_registry.should_not_receive(:delete_key)
|
|
262
|
+
@provider.load_current_resource
|
|
263
|
+
@provider.action_delete_key
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
end
|
|
269
|
+
|