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
|
@@ -1,391 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Daniel DeLeo (<dan@kallistec.com>)
|
|
3
|
-
# Copyright:: Copyright (c) 2009 Daniel DeLeo
|
|
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
|
-
class Chef
|
|
22
|
-
class IndexableTestHarness
|
|
23
|
-
include Chef::IndexQueue::Indexable
|
|
24
|
-
attr_reader :couchdb_id
|
|
25
|
-
def couchdb_id=(value)
|
|
26
|
-
self.index_id = @couchdb_id = value
|
|
27
|
-
end
|
|
28
|
-
attr_reader :index_id
|
|
29
|
-
def index_id=(value)
|
|
30
|
-
@index_id = value
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def to_hash
|
|
34
|
-
{"ohai_world" => "I am IndexableTestHarness", "object_id" => object_id}
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
class IndexQueueSpecError < RuntimeError ; end
|
|
41
|
-
|
|
42
|
-
class FauxQueue
|
|
43
|
-
|
|
44
|
-
attr_reader :published_message, :publish_options
|
|
45
|
-
|
|
46
|
-
# Note: If publish is not called, this published_message will cause
|
|
47
|
-
# JSON parsing to die with "can't convert Symbol into String"
|
|
48
|
-
def initialize
|
|
49
|
-
@published_message = :epic_fail!
|
|
50
|
-
@publish_options = :epic_fail!
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def publish(message, options=nil)
|
|
54
|
-
@published_message = message
|
|
55
|
-
@publish_options = options
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
class IndexConsumerTestHarness
|
|
60
|
-
include Chef::IndexQueue::Consumer
|
|
61
|
-
|
|
62
|
-
attr_reader :last_indexed_object, :unexposed_attr
|
|
63
|
-
|
|
64
|
-
expose :index_this
|
|
65
|
-
|
|
66
|
-
def index_this(object_to_index)
|
|
67
|
-
@last_indexed_object = object_to_index
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def not_exposed(arg)
|
|
71
|
-
@unexposed_attr = arg
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
describe Chef::IndexQueue::Indexable do
|
|
76
|
-
def a_uuid
|
|
77
|
-
/[0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12}/
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
before do
|
|
81
|
-
Chef::IndexableTestHarness.reset_index_metadata!
|
|
82
|
-
@publisher = Chef::IndexQueue::AmqpClient.instance
|
|
83
|
-
@indexable_obj = Chef::IndexableTestHarness.new
|
|
84
|
-
@item_as_hash = {"ohai_world" => "I am IndexableTestHarness", "object_id" => @indexable_obj.object_id}
|
|
85
|
-
|
|
86
|
-
@now = Time.now
|
|
87
|
-
Time.stub!(:now).and_return(@now)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "downcases the class name for the index_object_type when it's not explicitly set" do
|
|
91
|
-
@indexable_obj.index_object_type.should == "indexable_test_harness"
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it "uses an explicitly set index_object_type" do
|
|
95
|
-
Chef::IndexableTestHarness.index_object_type :a_weird_name
|
|
96
|
-
@indexable_obj.index_object_type.should == "a_weird_name"
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "adds 'database', 'type', and 'id' (UUID) keys to the published object" do
|
|
100
|
-
with_metadata = @indexable_obj.with_indexer_metadata(:database => "foo", :id=>UUIDTools::UUID.random_create.to_s)
|
|
101
|
-
with_metadata.should have(5).keys
|
|
102
|
-
with_metadata.keys.should include("type", "id", "item", "database", "enqueued_at")
|
|
103
|
-
with_metadata["type"].should == "indexable_test_harness"
|
|
104
|
-
with_metadata["database"].should == "foo"
|
|
105
|
-
with_metadata["item"].should == @item_as_hash
|
|
106
|
-
with_metadata["id"].should match(a_uuid)
|
|
107
|
-
with_metadata["enqueued_at"].should == @now.utc.to_i
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "uses the couchdb_id if available" do
|
|
111
|
-
expected_uuid = "0000000-1111-2222-3333-444444444444"
|
|
112
|
-
@indexable_obj.couchdb_id = expected_uuid
|
|
113
|
-
metadata_id = @indexable_obj.with_indexer_metadata["id"]
|
|
114
|
-
metadata_id.should == expected_uuid
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
describe "adds and removes items to and from the index and respects Chef::Config[:persistent_queue]" do
|
|
118
|
-
before do
|
|
119
|
-
@exchange = mock("Bunny::Exchange")
|
|
120
|
-
@amqp_client = mock("Bunny::Client", :start => true, :exchange => @exchange)
|
|
121
|
-
@publisher.stub!(:amqp_client).and_return(@amqp_client)
|
|
122
|
-
@queue = FauxQueue.new
|
|
123
|
-
@publisher.should_receive(:queue_for_object).with("0000000-1111-2222-3333-444444444444").and_yield(@queue)
|
|
124
|
-
Chef::Config[:persistent_queue] = false
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
it "adds items to the index" do
|
|
128
|
-
@amqp_client.should_not_receive(:tx_select)
|
|
129
|
-
@amqp_client.should_not_receive(:tx_commit)
|
|
130
|
-
@amqp_client.should_not_receive(:tx_rollback)
|
|
131
|
-
|
|
132
|
-
@indexable_obj.add_to_index(:database => "couchdb@localhost,etc.", :id=>"0000000-1111-2222-3333-444444444444")
|
|
133
|
-
|
|
134
|
-
published_message = Chef::JSONCompat.from_json(@queue.published_message)
|
|
135
|
-
published_message.should == {"action" => "add", "payload" => {"item" => @item_as_hash,
|
|
136
|
-
"type" => "indexable_test_harness",
|
|
137
|
-
"database" => "couchdb@localhost,etc.",
|
|
138
|
-
"id" => "0000000-1111-2222-3333-444444444444",
|
|
139
|
-
"enqueued_at" => @now.utc.to_i}}
|
|
140
|
-
@queue.publish_options[:persistent].should == false
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
it "adds items to the index transactionactionally when Chef::Config[:persistent_queue] == true" do
|
|
144
|
-
@amqp_client.should_receive(:tx_select)
|
|
145
|
-
@amqp_client.should_receive(:tx_commit)
|
|
146
|
-
@amqp_client.should_not_receive(:tx_rollback)
|
|
147
|
-
|
|
148
|
-
# set and restore Chef::Config[:persistent_queue] to true
|
|
149
|
-
orig_value = Chef::Config[:persistent_queue]
|
|
150
|
-
Chef::Config[:persistent_queue] = true
|
|
151
|
-
begin
|
|
152
|
-
@indexable_obj.add_to_index(:database => "couchdb@localhost,etc.", :id=>"0000000-1111-2222-3333-444444444444")
|
|
153
|
-
ensure
|
|
154
|
-
Chef::Config[:persistent_queue] = orig_value
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
published_message = Chef::JSONCompat.from_json(@queue.published_message)
|
|
158
|
-
published_message.should == {"action" => "add", "payload" => {"item" => @item_as_hash,
|
|
159
|
-
"type" => "indexable_test_harness",
|
|
160
|
-
"database" => "couchdb@localhost,etc.",
|
|
161
|
-
"id" => "0000000-1111-2222-3333-444444444444",
|
|
162
|
-
"enqueued_at" => @now.utc.to_i}}
|
|
163
|
-
@queue.publish_options[:persistent].should == true
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
it "adds items to the index transactionally when Chef::Config[:persistent_queue] == true and rolls it back when there is a failure" do
|
|
167
|
-
@amqp_client.should_receive(:tx_select)
|
|
168
|
-
@amqp_client.should_receive(:tx_rollback)
|
|
169
|
-
@amqp_client.should_not_receive(:tx_commit)
|
|
170
|
-
|
|
171
|
-
# cause the publish to fail, and make sure the failure is our own
|
|
172
|
-
# by using a specific class
|
|
173
|
-
@queue.should_receive(:publish).and_raise(IndexQueueSpecError)
|
|
174
|
-
|
|
175
|
-
# set and restore Chef::Config[:persistent_queue] to true
|
|
176
|
-
orig_value = Chef::Config[:persistent_queue]
|
|
177
|
-
Chef::Config[:persistent_queue] = true
|
|
178
|
-
begin
|
|
179
|
-
lambda{
|
|
180
|
-
@indexable_obj.add_to_index(:database => "couchdb@localhost,etc.", :id=>"0000000-1111-2222-3333-444444444444")
|
|
181
|
-
}.should raise_error(IndexQueueSpecError)
|
|
182
|
-
ensure
|
|
183
|
-
Chef::Config[:persistent_queue] = orig_value
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
it "removes items from the index" do
|
|
188
|
-
@amqp_client.should_not_receive(:tx_select)
|
|
189
|
-
@amqp_client.should_not_receive(:tx_commit)
|
|
190
|
-
@amqp_client.should_not_receive(:tx_rollback)
|
|
191
|
-
|
|
192
|
-
@indexable_obj.delete_from_index(:database => "couchdb2@localhost", :id=>"0000000-1111-2222-3333-444444444444")
|
|
193
|
-
published_message = Chef::JSONCompat.from_json(@queue.published_message)
|
|
194
|
-
published_message.should == {"action" => "delete", "payload" => { "item" => @item_as_hash,
|
|
195
|
-
"type" => "indexable_test_harness",
|
|
196
|
-
"database" => "couchdb2@localhost",
|
|
197
|
-
"id" => "0000000-1111-2222-3333-444444444444",
|
|
198
|
-
"enqueued_at" => @now.utc.to_i}}
|
|
199
|
-
@queue.publish_options[:persistent].should == false
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
it "removes items from the index transactionactionally when Chef::Config[:persistent_queue] == true" do
|
|
203
|
-
@amqp_client.should_receive(:tx_select)
|
|
204
|
-
@amqp_client.should_receive(:tx_commit)
|
|
205
|
-
@amqp_client.should_not_receive(:tx_rollback)
|
|
206
|
-
|
|
207
|
-
# set and restore Chef::Config[:persistent_queue] to true
|
|
208
|
-
orig_value = Chef::Config[:persistent_queue]
|
|
209
|
-
Chef::Config[:persistent_queue] = true
|
|
210
|
-
begin
|
|
211
|
-
@indexable_obj.delete_from_index(:database => "couchdb2@localhost", :id=>"0000000-1111-2222-3333-444444444444")
|
|
212
|
-
ensure
|
|
213
|
-
Chef::Config[:persistent_queue] = orig_value
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
published_message = Chef::JSONCompat.from_json(@queue.published_message)
|
|
217
|
-
published_message.should == {"action" => "delete", "payload" => { "item" => @item_as_hash,
|
|
218
|
-
"type" => "indexable_test_harness",
|
|
219
|
-
"database" => "couchdb2@localhost",
|
|
220
|
-
"id" => "0000000-1111-2222-3333-444444444444",
|
|
221
|
-
"enqueued_at" => @now.utc.to_i}}
|
|
222
|
-
@queue.publish_options[:persistent].should == true
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
it "remove items from the index transactionally when Chef::Config[:persistent_queue] == true and rolls it back when there is a failure" do
|
|
226
|
-
@amqp_client.should_receive(:tx_select)
|
|
227
|
-
@amqp_client.should_receive(:tx_rollback)
|
|
228
|
-
@amqp_client.should_not_receive(:tx_commit)
|
|
229
|
-
|
|
230
|
-
# cause the publish to fail, and make sure the failure is our own
|
|
231
|
-
# by using a specific class
|
|
232
|
-
@queue.should_receive(:publish).and_raise(IndexQueueSpecError)
|
|
233
|
-
|
|
234
|
-
# set and restore Chef::Config[:persistent_queue] to true
|
|
235
|
-
orig_value = Chef::Config[:persistent_queue]
|
|
236
|
-
Chef::Config[:persistent_queue] = true
|
|
237
|
-
begin
|
|
238
|
-
lambda{
|
|
239
|
-
@indexable_obj.delete_from_index(:database => "couchdb2@localhost", :id=>"0000000-1111-2222-3333-444444444444") }.should raise_error(IndexQueueSpecError)
|
|
240
|
-
ensure
|
|
241
|
-
Chef::Config[:persistent_queue] = orig_value
|
|
242
|
-
end
|
|
243
|
-
end
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
describe Chef::IndexQueue::Consumer do
|
|
249
|
-
before do
|
|
250
|
-
@amqp_client = Chef::IndexQueue::AmqpClient.instance
|
|
251
|
-
@consumer = IndexConsumerTestHarness.new
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
it "keeps a whitelist of exposed methods" do
|
|
255
|
-
IndexConsumerTestHarness.exposed_methods.should == [:index_this]
|
|
256
|
-
IndexConsumerTestHarness.whitelisted?(:index_this).should be_true
|
|
257
|
-
IndexConsumerTestHarness.whitelisted?(:not_exposed).should be_false
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
it "doesn't route non-whitelisted methods" do
|
|
261
|
-
payload_json = {"payload" => {"a_placeholder" => "object"}, "action" => "not_exposed"}.to_json
|
|
262
|
-
received_message = {:payload => payload_json}
|
|
263
|
-
lambda {@consumer.call_action_for_message(received_message)}.should raise_error(ArgumentError)
|
|
264
|
-
@consumer.unexposed_attr.should be_nil
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
it "routes message payloads to the correct method" do
|
|
268
|
-
payload_json = {"payload" => {"a_placeholder" => "object"}, "action" => "index_this"}.to_json
|
|
269
|
-
received_message = {:payload => payload_json}
|
|
270
|
-
@consumer.call_action_for_message(received_message)
|
|
271
|
-
@consumer.last_indexed_object.should == {"a_placeholder" => "object"}
|
|
272
|
-
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
it "subscribes to the queue for the indexer" do
|
|
276
|
-
payload_json = {"payload" => {"a_placeholder" => "object"}, "action" => "index_this"}.to_json
|
|
277
|
-
message = {:payload => payload_json}
|
|
278
|
-
queue = mock("Bunny::Queue")
|
|
279
|
-
@amqp_client.stub!(:queue).and_return(queue)
|
|
280
|
-
queue.should_receive(:subscribe).with(:timeout => false, :ack => true).and_yield(message)
|
|
281
|
-
@consumer.run
|
|
282
|
-
@consumer.last_indexed_object.should == {"a_placeholder" => "object"}
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
describe Chef::IndexQueue::AmqpClient do
|
|
289
|
-
before do
|
|
290
|
-
Chef::Config[:amqp_host] = '4.3.2.1'
|
|
291
|
-
Chef::Config[:amqp_port] = '1337'
|
|
292
|
-
Chef::Config[:amqp_user] = 'teh_rspecz'
|
|
293
|
-
Chef::Config[:amqp_pass] = 'access_granted2rspec'
|
|
294
|
-
Chef::Config[:amqp_vhost] = '/chef-specz'
|
|
295
|
-
Chef::Config[:amqp_consumer_id] = nil
|
|
296
|
-
|
|
297
|
-
@publisher = Chef::IndexQueue::AmqpClient.instance
|
|
298
|
-
@exchange = mock("Bunny::Exchange")
|
|
299
|
-
|
|
300
|
-
@amqp_client = mock("Bunny::Client", :start => true, :exchange => @exchange)
|
|
301
|
-
def @amqp_client.connected?; false; end # stubbing predicate methods not working?
|
|
302
|
-
Bunny.stub!(:new).and_return(@amqp_client)
|
|
303
|
-
|
|
304
|
-
@publisher.reset!
|
|
305
|
-
end
|
|
306
|
-
|
|
307
|
-
after do
|
|
308
|
-
@publisher.disconnected!
|
|
309
|
-
end
|
|
310
|
-
|
|
311
|
-
it "is a singleton" do
|
|
312
|
-
lambda {Chef::IndexQueue::Indexable::AmqpClient.new}.should raise_error
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
it "creates an amqp client object on demand, starts a connection, and caches it" do
|
|
316
|
-
@amqp_client.should_receive(:start).once
|
|
317
|
-
@amqp_client.should_receive(:qos).with(:prefetch_count => 1)
|
|
318
|
-
::Bunny.should_receive(:new).once.and_return(@amqp_client)
|
|
319
|
-
@publisher.amqp_client.should == @amqp_client
|
|
320
|
-
@publisher.amqp_client
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
it "configures the amqp client with credentials from the config file" do
|
|
324
|
-
@publisher.reset!
|
|
325
|
-
Bunny.should_receive(:new).with(:spec => '08', :host => '4.3.2.1', :port => '1337', :user => "teh_rspecz",
|
|
326
|
-
:pass => "access_granted2rspec", :vhost => '/chef-specz').and_return(@amqp_client)
|
|
327
|
-
@amqp_client.should_receive(:qos).with(:prefetch_count => 1)
|
|
328
|
-
@publisher.amqp_client.should == @amqp_client
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
it "creates an amqp exchange on demand and caches it" do
|
|
332
|
-
@amqp_client.stub!(:qos)
|
|
333
|
-
@publisher.exchange.should == @exchange
|
|
334
|
-
@amqp_client.should_not_receive(:exchange)
|
|
335
|
-
@publisher.exchange.should == @exchange
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
describe "publishing" do
|
|
339
|
-
|
|
340
|
-
before do
|
|
341
|
-
@queue_1 = FauxQueue.new
|
|
342
|
-
@queue_2 = FauxQueue.new
|
|
343
|
-
|
|
344
|
-
@amqp_client.stub!(:qos)
|
|
345
|
-
#@amqp_client.stub!(:queue).and_return(@queue)
|
|
346
|
-
@data = {"some_data" => "in_a_hash"}
|
|
347
|
-
end
|
|
348
|
-
|
|
349
|
-
it "resets the client upon a Bunny::ServerDownError when publishing" do
|
|
350
|
-
Bunny.stub!(:new).and_return(@amqp_client)
|
|
351
|
-
@amqp_client.should_receive(:queue).with("vnode-68", {:passive=>false, :durable=>true, :exclusive=>false, :auto_delete=>false}).twice.and_return(@queue_1, @queue_2)
|
|
352
|
-
|
|
353
|
-
@queue_1.should_receive(:publish).with(@data).and_raise(Bunny::ServerDownError)
|
|
354
|
-
@queue_2.should_receive(:publish).with(@data).and_raise(Bunny::ServerDownError)
|
|
355
|
-
|
|
356
|
-
@publisher.should_receive(:disconnected!).at_least(3).times
|
|
357
|
-
lambda {@publisher.queue_for_object("00000000-1111-2222-3333-444444444444") {|q| q.publish(@data)}}.should raise_error(Bunny::ServerDownError)
|
|
358
|
-
end
|
|
359
|
-
|
|
360
|
-
it "resets the client upon a Bunny::ConnectionError when publishing" do
|
|
361
|
-
Bunny.stub!(:new).and_return(@amqp_client)
|
|
362
|
-
@amqp_client.should_receive(:queue).with("vnode-68", {:passive=>false, :durable=>true, :exclusive=>false, :auto_delete=>false}).twice.and_return(@queue_1, @queue_2)
|
|
363
|
-
|
|
364
|
-
@queue_1.should_receive(:publish).with(@data).and_raise(Bunny::ConnectionError)
|
|
365
|
-
@queue_2.should_receive(:publish).with(@data).and_raise(Bunny::ConnectionError)
|
|
366
|
-
|
|
367
|
-
@publisher.should_receive(:disconnected!).at_least(3).times
|
|
368
|
-
lambda {@publisher.queue_for_object("00000000-1111-2222-3333-444444444444") {|q| q.publish(@data)}}.should raise_error(Bunny::ConnectionError)
|
|
369
|
-
end
|
|
370
|
-
|
|
371
|
-
it "resets the client upon a Errno::ECONNRESET when publishing" do
|
|
372
|
-
Bunny.stub!(:new).and_return(@amqp_client)
|
|
373
|
-
@amqp_client.should_receive(:queue).with("vnode-68", {:passive=>false, :durable=>true, :exclusive=>false, :auto_delete=>false}).twice.and_return(@queue_1, @queue_2)
|
|
374
|
-
|
|
375
|
-
@queue_1.should_receive(:publish).with(@data).and_raise(Errno::ECONNRESET)
|
|
376
|
-
@queue_2.should_receive(:publish).with(@data).and_raise(Errno::ECONNRESET)
|
|
377
|
-
|
|
378
|
-
@publisher.should_receive(:disconnected!).at_least(3).times
|
|
379
|
-
lambda {@publisher.queue_for_object("00000000-1111-2222-3333-444444444444") {|q| q.publish(@data)}}.should raise_error(Errno::ECONNRESET)
|
|
380
|
-
end
|
|
381
|
-
|
|
382
|
-
end
|
|
383
|
-
|
|
384
|
-
it "stops bunny and clears subscriptions" do
|
|
385
|
-
bunny_client = mock("Bunny::Client")
|
|
386
|
-
@publisher.instance_variable_set(:@amqp_client, bunny_client)
|
|
387
|
-
bunny_client.should_receive(:stop)
|
|
388
|
-
@publisher.stop
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
end
|
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
3
|
-
# Copyright:: Copyright (c) 2010 Opscode, Inc.
|
|
4
|
-
# License:: Apache License, Version 2.0
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
require 'spec_helper'
|
|
20
|
-
require 'chef/mixin/language'
|
|
21
|
-
|
|
22
|
-
class LanguageTester
|
|
23
|
-
include Chef::Mixin::Language
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
describe Chef::Mixin::Language do
|
|
27
|
-
before(:each) do
|
|
28
|
-
@language = LanguageTester.new
|
|
29
|
-
@node = Hash.new
|
|
30
|
-
@language.stub!(:node).and_return(@node)
|
|
31
|
-
@platform_hash = {}
|
|
32
|
-
%w{openbsd freebsd}.each do |x|
|
|
33
|
-
@platform_hash[x] = {
|
|
34
|
-
"default" => x,
|
|
35
|
-
"1.2.3" => "#{x}-1.2.3"
|
|
36
|
-
}
|
|
37
|
-
end
|
|
38
|
-
@platform_hash["debian"] = {["5", "6"] => "debian-5/6", "default" => "debian"}
|
|
39
|
-
@platform_hash["default"] = "default"
|
|
40
|
-
|
|
41
|
-
@platform_family_hash = {
|
|
42
|
-
"debian" => "debian value",
|
|
43
|
-
[:rhel, :fedora] => "redhatty value",
|
|
44
|
-
"suse" => "suse value",
|
|
45
|
-
:default => "default value"
|
|
46
|
-
}
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "returns a default value when there is no known platform" do
|
|
50
|
-
@node = Hash.new
|
|
51
|
-
@language.value_for_platform(@platform_hash).should == "default"
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "returns a default value when there is no known platform family" do
|
|
55
|
-
@language.value_for_platform_family(@platform_family_hash).should == "default value"
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "returns a default value when the current platform doesn't match" do
|
|
59
|
-
@node[:platform] = "not-a-known-platform"
|
|
60
|
-
@language.value_for_platform(@platform_hash).should == "default"
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "returns a default value when current platform_family doesn't match" do
|
|
64
|
-
@node[:platform_family] = "ultra-derived-linux"
|
|
65
|
-
@language.value_for_platform_family(@platform_family_hash).should == "default value"
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "returns a value based on the current platform" do
|
|
69
|
-
@node[:platform] = "openbsd"
|
|
70
|
-
@language.value_for_platform(@platform_hash).should == "openbsd"
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "returns a value based on the current platform family" do
|
|
74
|
-
@node[:platform_family] = "debian"
|
|
75
|
-
@language.value_for_platform_family(@platform_family_hash).should == "debian value"
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "returns a version-specific value based on the current platform" do
|
|
79
|
-
@node[:platform] = "openbsd"
|
|
80
|
-
@node[:platform_version] = "1.2.3"
|
|
81
|
-
@language.value_for_platform(@platform_hash).should == "openbsd-1.2.3"
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "returns a value based on the current platform if version not found" do
|
|
85
|
-
@node[:platform] = "openbsd"
|
|
86
|
-
@node[:platform_version] = "0.0.0"
|
|
87
|
-
@language.value_for_platform(@platform_hash).should == "openbsd"
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
describe "when platform versions is an array" do
|
|
91
|
-
it "returns a version-specific value based on the current platform" do
|
|
92
|
-
@node[:platform] = "debian"
|
|
93
|
-
@node[:platform_version] = "6"
|
|
94
|
-
@language.value_for_platform(@platform_hash).should == "debian-5/6"
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "returns a value based on the current platform if version not found" do
|
|
98
|
-
@node[:platform] = "debian"
|
|
99
|
-
@node[:platform_version] = "0.0.0"
|
|
100
|
-
@language.value_for_platform(@platform_hash).should == "debian"
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
describe "when checking platform?" do
|
|
105
|
-
before(:each) do
|
|
106
|
-
@language = LanguageTester.new
|
|
107
|
-
@node = Hash.new
|
|
108
|
-
@language.stub!(:node).and_return(@node)
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "returns true if the node is a provided platform and platforms are provided as symbols" do
|
|
112
|
-
@node[:platform] = 'ubuntu'
|
|
113
|
-
@language.platform?([:redhat, :ubuntu]).should == true
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it "returns true if the node is a provided platform and platforms are provided as strings" do
|
|
117
|
-
@node[:platform] = 'ubuntu'
|
|
118
|
-
@language.platform?(["redhat", "ubuntu"]).should == true
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "returns false if the node is not of the provided platforms" do
|
|
122
|
-
@node[:platform] = 'ubuntu'
|
|
123
|
-
@language.platform?(:splatlinux).should == false
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
describe "when checking platform_family?" do
|
|
128
|
-
before(:each) do
|
|
129
|
-
@language = LanguageTester.new
|
|
130
|
-
@node = Hash.new
|
|
131
|
-
@language.stub!(:node).and_return(@node)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
it "returns true if the node is in a provided platform family and families are provided as symbols" do
|
|
135
|
-
@node[:platform_family] = 'debian'
|
|
136
|
-
@language.platform_family?([:rhel, :debian]).should == true
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "returns true if the node is a provided platform and platforms are provided as strings" do
|
|
140
|
-
@node[:platform_family] = 'rhel'
|
|
141
|
-
@language.platform_family?(["rhel", "debian"]).should == true
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it "returns false if the node is not of the provided platforms" do
|
|
145
|
-
@node[:platform_family] = 'suse'
|
|
146
|
-
@language.platform_family?(:splatlinux).should == false
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
it "returns false if the node is not of the provided platforms and platform_family is not set" do
|
|
150
|
-
@language.platform_family?(:splatlinux).should == false
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
end
|
|
154
|
-
# NOTE: this is a regression test for bug CHEF-1514
|
|
155
|
-
describe "when the value is an array" do
|
|
156
|
-
before do
|
|
157
|
-
@platform_hash = {
|
|
158
|
-
"debian" => { "4.0" => [ :restart, :reload ], "default" => [ :restart, :reload, :status ] },
|
|
159
|
-
"ubuntu" => { "default" => [ :restart, :reload, :status ] },
|
|
160
|
-
"centos" => { "default" => [ :restart, :reload, :status ] },
|
|
161
|
-
"redhat" => { "default" => [ :restart, :reload, :status ] },
|
|
162
|
-
"fedora" => { "default" => [ :restart, :reload, :status ] },
|
|
163
|
-
"default" => { "default" => [:restart, :reload ] }}
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
it "returns the correct default for a given platform" do
|
|
167
|
-
@node[:platform] = "debian"
|
|
168
|
-
@node[:platform_version] = '9000'
|
|
169
|
-
@language.value_for_platform(@platform_hash).should == [ :restart, :reload, :status ]
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
it "returns the correct platform+version specific value " do
|
|
173
|
-
@node[:platform] = "debian"
|
|
174
|
-
@node[:platform_version] = '4.0'
|
|
175
|
-
@language.value_for_platform(@platform_hash).should == [:restart, :reload]
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
describe "when loading data bags and items" do
|
|
180
|
-
it "lists the items in a data bag" do
|
|
181
|
-
Chef::DataBag.should_receive(:load).with("bag_name").and_return("item_1" => "http://url_for/item_1", "item_2" => "http://url_for/item_2")
|
|
182
|
-
@language.data_bag("bag_name").sort.should == %w[item_1 item_2]
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it "validates the name of the data bag you're trying to load" do
|
|
186
|
-
lambda {@language.data_bag("!# %^&& ")}.should raise_error(Chef::Exceptions::InvalidDataBagName)
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
it "fetches a data bag item" do
|
|
190
|
-
@item = Chef::DataBagItem.new
|
|
191
|
-
@item.data_bag("bag_name")
|
|
192
|
-
@item.raw_data = {"id" => "item_name", "FUU" => "FUU"}
|
|
193
|
-
Chef::DataBagItem.should_receive(:load).with("bag_name", "item_name").and_return(@item)
|
|
194
|
-
@language.data_bag_item("bag_name", "item_name").should == @item
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
it "validates the name of the data bag you're trying to load an item from" do
|
|
198
|
-
lambda {@language.data_bag_item(" %%^& ", "item_name")}.should raise_error(Chef::Exceptions::InvalidDataBagName)
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
it "validates the id of the data bag item you're trying to load" do
|
|
202
|
-
lambda {@language.data_bag_item("bag_name", " 987 (*&()")}.should raise_error(Chef::Exceptions::InvalidDataBagItemID)
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
it "validates that the id of the data bag item is not nil" do
|
|
206
|
-
lambda {@language.data_bag_item("bag_name", nil)}.should raise_error(Chef::Exceptions::InvalidDataBagItemID)
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
describe Chef::Mixin::Language::PlatformDependentValue do
|
|
214
|
-
before do
|
|
215
|
-
platform_hash = {
|
|
216
|
-
:openbsd => {:default => 'free, functional, secure'},
|
|
217
|
-
[:redhat, :centos, :fedora, :scientific] => {:default => '"stable"'},
|
|
218
|
-
:ubuntu => {'10.04' => 'using upstart more', :default => 'using init more'},
|
|
219
|
-
:default => 'bork da bork'
|
|
220
|
-
}
|
|
221
|
-
@platform_specific_value = Chef::Mixin::Language::PlatformDependentValue.new(platform_hash)
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
it "returns the default value when the platform doesn't match" do
|
|
225
|
-
@platform_specific_value.value_for_node(:platform => :dos).should == 'bork da bork'
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
it "returns a value for a platform set as a group" do
|
|
229
|
-
@platform_specific_value.value_for_node(:platform => :centos).should == '"stable"'
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
it "returns a value for the platform when it was set as a symbol but fetched as a string" do
|
|
233
|
-
@platform_specific_value.value_for_node(:platform => "centos").should == '"stable"'
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
it "returns a value for a specific platform version" do
|
|
237
|
-
node = {:platform => 'ubuntu', :platform_version => '10.04'}
|
|
238
|
-
@platform_specific_value.value_for_node(node).should == 'using upstart more'
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
it "returns a platform-default value if the platform version doesn't match an explicit one" do
|
|
242
|
-
node = {:platform => 'ubuntu', :platform_version => '9.10' }
|
|
243
|
-
@platform_specific_value.value_for_node(node).should == 'using init more'
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
it "returns nil if there is no default and no platforms match" do
|
|
247
|
-
# this matches the behavior in the original implementation.
|
|
248
|
-
# whether or not it's correct is another matter.
|
|
249
|
-
platform_specific_value = Chef::Mixin::Language::PlatformDependentValue.new({})
|
|
250
|
-
platform_specific_value.value_for_node(:platform => 'foo').should be_nil
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
it "raises an argument error if the platform hash is not correctly structured" do
|
|
254
|
-
bad_hash = {:ubuntu => :foo} # should be :ubuntu => {:default => 'foo'}
|
|
255
|
-
lambda {Chef::Mixin::Language::PlatformDependentValue.new(bad_hash)}.should raise_error(ArgumentError)
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
end
|
|
259
|
-
describe Chef::Mixin::Language::PlatformFamilyDependentValue do
|
|
260
|
-
before do
|
|
261
|
-
@array_values = [:stop, :start, :reload]
|
|
262
|
-
|
|
263
|
-
@platform_family_hash = {
|
|
264
|
-
"debian" => "debian value",
|
|
265
|
-
[:rhel, "fedora"] => "redhatty value",
|
|
266
|
-
"suse" => @array_values,
|
|
267
|
-
:gentoo => "gentoo value",
|
|
268
|
-
:default => "default value"
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
@platform_family_value = Chef::Mixin::Language::PlatformFamilyDependentValue.new(@platform_family_hash)
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
it "returns the default value when the platform family doesn't match" do
|
|
275
|
-
@platform_family_value.value_for_node(:platform_family => :os2).should == 'default value'
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
it "returns a value for the platform family when it was set as a string but fetched as a symbol" do
|
|
280
|
-
@platform_family_value.value_for_node(:platform_family => :debian).should == "debian value"
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
it "returns a value for the platform family when it was set as a symbol but fetched as a string" do
|
|
285
|
-
@platform_family_value.value_for_node(:platform_family => "gentoo").should == "gentoo value"
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
it "returns an array value stored for a platform family" do
|
|
289
|
-
@platform_family_value.value_for_node(:platform_family => "suse").should == @array_values
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
it "returns a value for the platform family when it was set within an array hash key as a symbol" do
|
|
293
|
-
@platform_family_value.value_for_node(:platform_family => :rhel).should == "redhatty value"
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
it "returns a value for the platform family when it was set within an array hash key as a string" do
|
|
297
|
-
@platform_family_value.value_for_node(:platform_family => "fedora").should == "redhatty value"
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
it "returns nil if there is no default and no platforms match" do
|
|
301
|
-
platform_specific_value = Chef::Mixin::Language::PlatformFamilyDependentValue.new({})
|
|
302
|
-
platform_specific_value.value_for_node(:platform_family => 'foo').should be_nil
|
|
303
|
-
end
|
|
304
|
-
|
|
305
|
-
end
|