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,76 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
-
# Copyright:: Copyright (c) 2009 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
|
-
require 'chef/certificate'
|
|
22
|
-
require 'ostruct'
|
|
23
|
-
require 'tempfile'
|
|
24
|
-
|
|
25
|
-
class FakeFile
|
|
26
|
-
attr_accessor :data
|
|
27
|
-
|
|
28
|
-
def write(arg)
|
|
29
|
-
@data = arg
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
describe Chef::Certificate do
|
|
34
|
-
describe "generate_signing_ca" do
|
|
35
|
-
before(:each) do
|
|
36
|
-
Chef::Config[:signing_ca_user] = nil
|
|
37
|
-
Chef::Config[:signing_ca_group] = nil
|
|
38
|
-
FileUtils.stub!(:mkdir_p).and_return(true)
|
|
39
|
-
FileUtils.stub!(:chown).and_return(true)
|
|
40
|
-
File.stub!(:open).and_return(true)
|
|
41
|
-
File.stub!(:exists?).and_return(false)
|
|
42
|
-
@ca_cert = FakeFile.new
|
|
43
|
-
@ca_key = FakeFile.new
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "should generate a ca certificate" do
|
|
47
|
-
File.should_receive(:open).with(Chef::Config[:signing_ca_cert], "w").and_yield(@ca_cert)
|
|
48
|
-
Chef::Certificate.generate_signing_ca
|
|
49
|
-
@ca_cert.data.should =~ /BEGIN CERTIFICATE/
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should generate an RSA private key" do
|
|
53
|
-
File.should_receive(:open).with(Chef::Config[:signing_ca_key], File::WRONLY|File::EXCL|File::CREAT, 0600).and_yield(@ca_key)
|
|
54
|
-
FileUtils.should_not_receive(:chown)
|
|
55
|
-
Chef::Certificate.generate_signing_ca
|
|
56
|
-
@ca_key.data.should =~ /BEGIN RSA PRIVATE KEY/
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "should generate an RSA private key with user and group" do
|
|
60
|
-
Chef::Config[:signing_ca_user] = "funky"
|
|
61
|
-
Chef::Config[:signing_ca_group] = "fresh"
|
|
62
|
-
File.should_receive(:open).with(Chef::Config[:signing_ca_key], File::WRONLY|File::EXCL|File::CREAT, 0600).and_yield(@ca_key)
|
|
63
|
-
FileUtils.should_receive(:chown).with(Chef::Config[:signing_ca_user], Chef::Config[:signing_ca_group], Chef::Config[:signing_ca_key])
|
|
64
|
-
Chef::Certificate.generate_signing_ca
|
|
65
|
-
@ca_key.data.should =~ /BEGIN RSA PRIVATE KEY/
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
describe "generate_keypair" do
|
|
70
|
-
it "should return a client certificate" do
|
|
71
|
-
public_key, private_key = Chef::Certificate.gen_keypair("oasis")
|
|
72
|
-
public_key.to_s.should =~ /(BEGIN RSA PUBLIC KEY|BEGIN PUBLIC KEY)/
|
|
73
|
-
private_key.to_s.should =~ /BEGIN RSA PRIVATE KEY/
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
-
# Author:: Daniel DeLeo (<dan@kallistec.com>)
|
|
4
|
-
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
5
|
-
# Copyright:: Copyright (c) 2009 Daniel DeLeo
|
|
6
|
-
# License:: Apache License, Version 2.0
|
|
7
|
-
#
|
|
8
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
-
# you may not use this file except in compliance with the License.
|
|
10
|
-
# You may obtain a copy of the License at
|
|
11
|
-
#
|
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
#
|
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
-
# See the License for the specific language governing permissions and
|
|
18
|
-
# limitations under the License.
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
require 'spec_helper'
|
|
22
|
-
|
|
23
|
-
describe Chef::ChecksumCache do
|
|
24
|
-
before(:each) do
|
|
25
|
-
Chef::Config[:cache_type] = "Memory"
|
|
26
|
-
Chef::Config[:cache_options] = { }
|
|
27
|
-
@cache = Chef::ChecksumCache.instance
|
|
28
|
-
@cache.reset!
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
describe "loading the moneta backend" do
|
|
32
|
-
it "should build a Chef::ChecksumCache object" do
|
|
33
|
-
@cache.should be_a_kind_of(Chef::ChecksumCache)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "should set up a Moneta Cache adaptor" do
|
|
37
|
-
@cache.moneta.should be_a_kind_of(Moneta::Memory)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should raise an exception if it cannot load the moneta adaptor" do
|
|
41
|
-
Chef::Log.should_receive(:fatal).with(/^Could not load Moneta back end/)
|
|
42
|
-
lambda {
|
|
43
|
-
c = Chef::ChecksumCache.instance.reset!('WTF')
|
|
44
|
-
}.should raise_error(LoadError)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
describe "when caching checksums of cookbook files and templates" do
|
|
49
|
-
|
|
50
|
-
before do
|
|
51
|
-
@cache.reset!("Memory", {})
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "proxies the class method checksum_for_file to the instance" do
|
|
55
|
-
@cache.should_receive(:checksum_for_file).with("a_file_or_a_fail")
|
|
56
|
-
Chef::ChecksumCache.checksum_for_file("a_file_or_a_fail")
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "returns a cached checksum value" do
|
|
60
|
-
@cache.moneta["chef-file-riseofthemachines"] = {"mtime" => "12345", "checksum" => "123abc"}
|
|
61
|
-
fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(12345))
|
|
62
|
-
File.should_receive(:stat).with("riseofthemachines").and_return(fstat)
|
|
63
|
-
@cache.checksum_for_file("riseofthemachines").should == "123abc"
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it "gives nil for a cache miss" do
|
|
67
|
-
@cache.moneta["chef-file-riseofthemachines"] = {"mtime" => "12345", "checksum" => "123abc"}
|
|
68
|
-
fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(555555))
|
|
69
|
-
@cache.lookup_checksum("chef-file-riseofthemachines", fstat).should be_nil
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "treats a non-matching mtime as a cache miss" do
|
|
73
|
-
@cache.moneta["chef-file-riseofthemachines"] = {"mtime" => "12345", "checksum" => "123abc"}
|
|
74
|
-
fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(555555))
|
|
75
|
-
@cache.lookup_checksum("chef-file-riseofthemachines", fstat).should be_nil
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "computes a checksum of a file" do
|
|
79
|
-
fixture_file = CHEF_SPEC_DATA + "/checksum/random.txt"
|
|
80
|
-
expected = "09ee9c8cc70501763563bcf9c218d71b2fbf4186bf8e1e0da07f0f42c80a3394"
|
|
81
|
-
@cache.send(:checksum_file, fixture_file, Digest::SHA256.new).should == expected
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "computes a checksum and stores it in the cache" do
|
|
85
|
-
fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(555555))
|
|
86
|
-
@cache.should_receive(:checksum_file).with("riseofthemachines", an_instance_of(Digest::SHA256)).and_return("ohai2uChefz")
|
|
87
|
-
@cache.generate_checksum("chef-file-riseofthemachines", "riseofthemachines", fstat).should == "ohai2uChefz"
|
|
88
|
-
@cache.lookup_checksum("chef-file-riseofthemachines", fstat).should == "ohai2uChefz"
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "returns a generated checksum if there is no cached value" do
|
|
92
|
-
fixture_file = CHEF_SPEC_DATA + "/checksum/random.txt"
|
|
93
|
-
expected = "09ee9c8cc70501763563bcf9c218d71b2fbf4186bf8e1e0da07f0f42c80a3394"
|
|
94
|
-
@cache.checksum_for_file(fixture_file).should == expected
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "generates a key from a file name" do
|
|
98
|
-
file = "/this/is/a/test/random.rb"
|
|
99
|
-
@cache.generate_key(file).should == "chef-file--this-is-a-test-random-rb"
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it "generates a key from a file name and group" do
|
|
103
|
-
file = "/this/is/a/test/random.rb"
|
|
104
|
-
@cache.generate_key(file, "spec").should == "spec-file--this-is-a-test-random-rb"
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "returns a cached checksum value using a user defined key" do
|
|
108
|
-
key = @cache.generate_key("riseofthemachines", "specs")
|
|
109
|
-
@cache.moneta[key] = {"mtime" => "12345", "checksum" => "123abc"}
|
|
110
|
-
fstat = mock("File.stat('riseofthemachines')", :mtime => Time.at(12345))
|
|
111
|
-
File.should_receive(:stat).with("riseofthemachines").and_return(fstat)
|
|
112
|
-
@cache.checksum_for_file("riseofthemachines", key).should == "123abc"
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "generates a checksum from a non-file IO object" do
|
|
116
|
-
io = StringIO.new("riseofthemachines\nriseofthechefs\n")
|
|
117
|
-
expected_md5 = '0e157ac1e2dd73191b76067fb6b4bceb'
|
|
118
|
-
@cache.generate_md5_checksum(io).should == expected_md5
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
describe "when cleaning up after outdated checksums" do
|
|
124
|
-
|
|
125
|
-
before do
|
|
126
|
-
Chef::ChecksumCache.reset_cache_validity
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it "initially has no valid cached checksums" do
|
|
130
|
-
Chef::ChecksumCache.valid_cached_checksums.should be_empty
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it "adds a checksum to the list of valid cached checksums when it's created" do
|
|
134
|
-
@cache.checksum_for_file(File.join(CHEF_SPEC_DATA, 'checksum', 'random.txt'))
|
|
135
|
-
Chef::ChecksumCache.valid_cached_checksums.should have(1).valid_checksum
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "adds a checksum to the list of valid cached checksums when it's read" do
|
|
139
|
-
@cache.checksum_for_file(File.join(CHEF_SPEC_DATA, 'checksum', 'random.txt'))
|
|
140
|
-
Chef::ChecksumCache.reset_cache_validity
|
|
141
|
-
@cache.checksum_for_file(File.join(CHEF_SPEC_DATA, 'checksum', 'random.txt'))
|
|
142
|
-
Chef::ChecksumCache.valid_cached_checksums.should have(1).valid_checksum
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
context "with an existing set of cached checksums" do
|
|
146
|
-
before do
|
|
147
|
-
Chef::Config[:cache_type] = "BasicFile"
|
|
148
|
-
Chef::Config[:cache_options] = {:path => File.join(CHEF_SPEC_DATA, "checksum_cache")}
|
|
149
|
-
|
|
150
|
-
@expected_cached_checksums = ["chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0",
|
|
151
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0",
|
|
152
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0",
|
|
153
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0",
|
|
154
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0",
|
|
155
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0",
|
|
156
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0",
|
|
157
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0",
|
|
158
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0",
|
|
159
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0",
|
|
160
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0",
|
|
161
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0",
|
|
162
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0",
|
|
163
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0",
|
|
164
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0",
|
|
165
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0",
|
|
166
|
-
"chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0"]
|
|
167
|
-
@expected_cached_checksums.sort!
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
after do
|
|
171
|
-
Chef::Config[:cache_type] = "Memory"
|
|
172
|
-
Chef::Config[:cache_options] = { }
|
|
173
|
-
@cache = Chef::ChecksumCache.instance
|
|
174
|
-
@cache.reset!
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
it "lists all of the cached checksums in the cache directory" do
|
|
178
|
-
Chef::ChecksumCache.all_cached_checksums.keys.sort.should == @expected_cached_checksums
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
it "clears all of the checksums not marked valid from the checksums directory" do
|
|
182
|
-
valid_cksum_key = "chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0"
|
|
183
|
-
valid_cksum_file = File.join(CHEF_SPEC_DATA, "checksum_cache", valid_cksum_key)
|
|
184
|
-
@expected_cached_checksums.delete(valid_cksum_key)
|
|
185
|
-
|
|
186
|
-
Chef::ChecksumCache.valid_cached_checksums << valid_cksum_key
|
|
187
|
-
|
|
188
|
-
Chef::ChecksumCache.should_not_receive(:remove_unused_checksum).with(valid_cksum_file)
|
|
189
|
-
@expected_cached_checksums.each do |cksum_key|
|
|
190
|
-
full_path_to_cksum = File.join(CHEF_SPEC_DATA, "checksum_cache", cksum_key)
|
|
191
|
-
Chef::ChecksumCache.should_receive(:remove_unused_checksum).with(full_path_to_cksum)
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
Chef::ChecksumCache.cleanup_checksum_cache
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
it "cleans all 0byte checksum files when it encounters a Marshal error" do
|
|
198
|
-
@cache.moneta.stub!(:fetch).and_raise(ArgumentError)
|
|
199
|
-
# This cache file is 0 bytes, raises an argument error when
|
|
200
|
-
# attempting to Marshal.load
|
|
201
|
-
File.should_receive(:unlink).with(File.join(CHEF_SPEC_DATA, "checksum_cache", "chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0"))
|
|
202
|
-
@cache.lookup_checksum("chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0", "foo")
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
end
|
|
209
|
-
|
data/spec/unit/checksum_spec.rb
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Daniel DeLeo (<dan@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/checksum'
|
|
21
|
-
|
|
22
|
-
describe Chef::Checksum do
|
|
23
|
-
|
|
24
|
-
before do
|
|
25
|
-
Chef::Log.logger = Logger.new(StringIO.new)
|
|
26
|
-
|
|
27
|
-
@now = Time.now
|
|
28
|
-
|
|
29
|
-
Time.stub!(:now).and_return(@now)
|
|
30
|
-
|
|
31
|
-
@checksum_of_the_file = "3fafecfb15585ede6b840158cbc2f399"
|
|
32
|
-
@checksum = Chef::Checksum.new(@checksum_of_the_file)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "has no original committed file location" do
|
|
36
|
-
@checksum.original_committed_file_location.should be_nil
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "has the MD5 checksum of the file it represents" do
|
|
40
|
-
@checksum.checksum.should == @checksum_of_the_file
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it "stores the time it was created" do
|
|
44
|
-
@checksum.create_time.should == @now.iso8601
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "commits a sandbox file from a given location to the checksum repo location" do
|
|
48
|
-
@checksum.storage.should_receive(:commit).with("/tmp/arbitrary_file_location")
|
|
49
|
-
@checksum.should_receive(:cdb_save)
|
|
50
|
-
@checksum.commit_sandbox_file("/tmp/arbitrary_file_location")
|
|
51
|
-
@checksum.original_committed_file_location.should == "/tmp/arbitrary_file_location"
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "reverts committing a sandbox file" do
|
|
55
|
-
@checksum.storage.should_receive(:commit).with("/tmp/arbitrary_file_location")
|
|
56
|
-
@checksum.should_receive(:cdb_save)
|
|
57
|
-
@checksum.commit_sandbox_file("/tmp/arbitrary_file_location")
|
|
58
|
-
@checksum.original_committed_file_location.should == "/tmp/arbitrary_file_location"
|
|
59
|
-
|
|
60
|
-
@checksum.storage.should_receive(:revert).with("/tmp/arbitrary_file_location")
|
|
61
|
-
@checksum.should_receive(:cdb_destroy)
|
|
62
|
-
@checksum.revert_sandbox_file_commit
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "raises an error when trying to revert a checksum that was not previously committed" do
|
|
66
|
-
lambda {@checksum.revert_sandbox_file_commit}.should raise_error(Chef::Exceptions::IllegalChecksumRevert)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "deletes the file and its document from couchdb" do
|
|
70
|
-
@checksum.should_receive(:cdb_destroy)
|
|
71
|
-
@checksum.storage.should_receive(:purge)
|
|
72
|
-
@checksum.purge
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
describe "when converted to json" do
|
|
76
|
-
before do
|
|
77
|
-
@checksum_as_json = @checksum.to_json
|
|
78
|
-
@checksum_as_hash_from_json = Chef::JSONCompat.from_json(@checksum_as_json, :create_additions => false)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "contains the file's MD5 checksum" do
|
|
82
|
-
@checksum_as_hash_from_json["checksum"].should == @checksum_of_the_file
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "contains the creation time" do
|
|
86
|
-
@checksum_as_hash_from_json["create_time"].should == @now.iso8601
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "uses the file's MD5 checksum for its 'name' property" do
|
|
90
|
-
@checksum_as_hash_from_json["name"].should == @checksum_of_the_file
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
end
|
data/spec/unit/couchdb_spec.rb
DELETED
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
-
# Copyright:: Copyright (c) 2008 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::CouchDB do
|
|
22
|
-
before(:each) do
|
|
23
|
-
Chef::Config[:couchdb_database] = "chef"
|
|
24
|
-
@rest = mock("Chef::REST")
|
|
25
|
-
@rest.stub!(:run_request).and_return({"couchdb" => "Welcome", "version" =>"0.9.0"})
|
|
26
|
-
@rest.stub!(:url).and_return("http://localhost:5984")
|
|
27
|
-
Chef::REST.stub!(:new).and_return(@rest)
|
|
28
|
-
@couchdb = Chef::CouchDB.new
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
describe "new" do
|
|
32
|
-
it "should create a new Chef::REST object from the default url" do
|
|
33
|
-
old_url = Chef::Config[:couchdb_url]
|
|
34
|
-
Chef::Config[:couchdb_url] = "http://monkey"
|
|
35
|
-
Chef::REST.should_receive(:new).with("http://monkey", nil, nil)
|
|
36
|
-
Chef::CouchDB.new
|
|
37
|
-
Chef::Config[:couchdb_url] = old_url
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should create a new Chef::REST object from a provided url" do
|
|
41
|
-
Chef::REST.should_receive(:new).with("http://monkeypants", nil, nil)
|
|
42
|
-
Chef::CouchDB.new("http://monkeypants")
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
describe "create_db" do
|
|
47
|
-
before(:each) do
|
|
48
|
-
@couchdb.stub!(:create_design_document).and_return(true)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should get a list of current databases" do
|
|
52
|
-
@rest.should_receive(:get_rest).and_return(["chef"])
|
|
53
|
-
@couchdb.create_db
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "should create the chef database if it does not exist" do
|
|
57
|
-
@rest.stub!(:get_rest).and_return([])
|
|
58
|
-
@rest.should_receive(:put_rest).with("chef", {}).and_return(true)
|
|
59
|
-
@couchdb.create_db
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it "should not create the chef database if it does exist" do
|
|
63
|
-
@rest.stub!(:get_rest).and_return(["chef"])
|
|
64
|
-
@rest.should_not_receive(:put_rest)
|
|
65
|
-
@couchdb.create_db
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should return 'chef'" do
|
|
69
|
-
@rest.should_receive(:get_rest).with("_all_dbs").and_return(%w{chef})
|
|
70
|
-
@couchdb.create_db.should eql("chef")
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
describe "create_design_document" do
|
|
75
|
-
before(:each) do
|
|
76
|
-
@mock_design = {
|
|
77
|
-
"version" => 1,
|
|
78
|
-
"_rev" => 1
|
|
79
|
-
}
|
|
80
|
-
@mock_data = {
|
|
81
|
-
"version" => 1,
|
|
82
|
-
"language" => "javascript",
|
|
83
|
-
"views" => {
|
|
84
|
-
"all" => {
|
|
85
|
-
"map" => <<-EOJS
|
|
86
|
-
function(doc) {
|
|
87
|
-
if (doc.chef_type == "node") {
|
|
88
|
-
emit(doc.name, doc);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
EOJS
|
|
92
|
-
},
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
@rest.stub!(:get_rest).and_return(@mock_design)
|
|
96
|
-
@rest.stub!(:put_rest).and_return(true)
|
|
97
|
-
@couchdb.stub!(:create_db).and_return(true)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def do_create_design_document
|
|
101
|
-
@couchdb.create_design_document("bob", @mock_data)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it "should fetch the existing design document" do
|
|
105
|
-
@rest.should_receive(:get_rest).with("chef/_design/bob")
|
|
106
|
-
do_create_design_document
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it "should populate the _rev in the new design if the versions dont match" do
|
|
110
|
-
@mock_data["version"] = 2
|
|
111
|
-
do_create_design_document
|
|
112
|
-
@mock_data["_rev"].should eql(1)
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "should create the view if it requires updating" do
|
|
116
|
-
@mock_data["version"] = 2
|
|
117
|
-
@rest.should_receive(:put_rest).with("chef/_design%2Fbob", @mock_data)
|
|
118
|
-
do_create_design_document
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "should not create the view if it does not require updating" do
|
|
122
|
-
@mock_data["version"] = 1
|
|
123
|
-
@rest.should_not_receive(:put_rest)
|
|
124
|
-
do_create_design_document
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
describe "store" do
|
|
129
|
-
before(:each) do
|
|
130
|
-
@mock_results = {
|
|
131
|
-
"rows" => [
|
|
132
|
-
"id" => 'a0934635-e111-45d9-8223-cb58e1c9434c'
|
|
133
|
-
]
|
|
134
|
-
}
|
|
135
|
-
@couchdb.stub!(:get_view).with("id_map", "name_to_id", :key => [ "node", "bob" ]).and_return(@mock_results)
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "should put the object into couchdb with a pre-existing GUID" do
|
|
139
|
-
item_to_store = {}
|
|
140
|
-
item_to_store.should_receive(:add_to_index)
|
|
141
|
-
@rest.should_receive(:put_rest).with("chef/#{@mock_results["rows"][0]["id"]}", item_to_store).and_return(true)
|
|
142
|
-
@couchdb.store("node", "bob", item_to_store)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
it "should put the object into couchdb with a new GUID" do
|
|
146
|
-
@mock_results = { "rows" => [] }
|
|
147
|
-
item_to_store = {}
|
|
148
|
-
item_to_store.should_receive(:add_to_index).with(:database => "chef", :id => "aaaaaaaa-xxxx-xxxx-xxxx-xxxxxxxxxxx", :type => "node")
|
|
149
|
-
@couchdb.stub!(:get_view).with("id_map", "name_to_id", :key => [ "node", "bob" ]).and_return(@mock_results)
|
|
150
|
-
UUIDTools::UUID.stub!(:random_create).and_return("aaaaaaaa-xxxx-xxxx-xxxx-xxxxxxxxxxx")
|
|
151
|
-
@rest.should_receive(:put_rest).with("chef/aaaaaaaa-xxxx-xxxx-xxxx-xxxxxxxxxxx", item_to_store).and_return(true)
|
|
152
|
-
@couchdb.store("node", "bob", item_to_store)
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
describe "when fetching the database status" do
|
|
158
|
-
it "gets couchdb's version string'" do
|
|
159
|
-
@rest.should_receive(:get_rest).with('/').and_return({"couchdb" => "Welcome","version" => "1.0.1"})
|
|
160
|
-
@couchdb.server_stats.should == {"couchdb" => "Welcome","version" => "1.0.1"}
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "gets database stats" do
|
|
164
|
-
db_stats = {"db_name" => "opscode_account","doc_count" => 206,"doc_del_count" => 1,"update_seq" => 208,"purge_seq" => 0,
|
|
165
|
-
"compact_running" => false,"disk_size" => 122969,"instance_start_time" => "1298070021394804","disk_format_version" => 5,"committed_update_seq" => 208}
|
|
166
|
-
@rest.should_receive(:get_rest).with('/chef').and_return(db_stats)
|
|
167
|
-
@couchdb.db_stats.should == db_stats
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
describe "load" do
|
|
173
|
-
before(:each) do
|
|
174
|
-
@mock_node = Chef::Node.new()
|
|
175
|
-
@mock_node.name("bob")
|
|
176
|
-
@couchdb.stub!(:find_by_name).with("node", "bob").and_return(@mock_node)
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
it "should load the object from couchdb" do
|
|
180
|
-
@couchdb.load("node", "bob").should eql(@mock_node)
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
describe "delete" do
|
|
185
|
-
before(:each) do
|
|
186
|
-
@mock_current = {
|
|
187
|
-
"version" => 1,
|
|
188
|
-
"_rev" => 1
|
|
189
|
-
}
|
|
190
|
-
@rest.stub!(:get_rest).and_return(@mock_current)
|
|
191
|
-
@rest.stub!(:delete_rest).and_return(true)
|
|
192
|
-
@node = Chef::Node.new()
|
|
193
|
-
@node.name("bob")
|
|
194
|
-
@node.couchdb_rev = 15
|
|
195
|
-
@couchdb.stub!(:find_by_name).with("node", "bob", true).and_return([ @node, "ax" ])
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
def do_delete(rev=nil)
|
|
199
|
-
@couchdb.delete("node", "bob", rev)
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
it "should remove the object from couchdb with a specific revision" do
|
|
203
|
-
@node.should_receive(:delete_from_index)
|
|
204
|
-
@rest.should_receive(:delete_rest).with("chef/ax?rev=1")
|
|
205
|
-
do_delete(1)
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
it "should remove the object from couchdb based on the couchdb_rev of the current obj" do
|
|
209
|
-
@node.should_receive(:delete_from_index)
|
|
210
|
-
@rest.should_receive(:delete_rest).with("chef/ax?rev=15")
|
|
211
|
-
do_delete
|
|
212
|
-
end
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
describe "list" do
|
|
216
|
-
before(:each) do
|
|
217
|
-
Chef::Config.stub!(:[]).with(:couchdb_database).and_return("chef")
|
|
218
|
-
@mock_response = {"rows" => []}
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
describe "on couchdb 0.9+" do
|
|
222
|
-
before do
|
|
223
|
-
Chef::Config.stub!(:[]).with(:couchdb_version).and_return(0.9)
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
it "should get the view for all objects if inflate is true" do
|
|
227
|
-
@rest.should_receive(:get_rest).with("chef/_design/node/_view/all").and_return(@mock_response)
|
|
228
|
-
@couchdb.list("node", true)
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
it "should get the view for just the object id's if inflate is false" do
|
|
232
|
-
@rest.should_receive(:get_rest).with("chef/_design/node/_view/all_id").and_return(@mock_response)
|
|
233
|
-
@couchdb.list("node", false)
|
|
234
|
-
end
|
|
235
|
-
end
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
describe "has_key?" do
|
|
239
|
-
it "should return true if the object exists" do
|
|
240
|
-
@couchdb.stub!(:find_by_name).with("node", "bob").and_return(true)
|
|
241
|
-
@couchdb.has_key?("node", "bob").should eql(true)
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
it "should return false if the object does not exist" do
|
|
245
|
-
@couchdb.stub!(:find_by_name).and_raise(Chef::Exceptions::CouchDBNotFound)
|
|
246
|
-
@couchdb.has_key?("node", "bob").should eql(false)
|
|
247
|
-
end
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
describe "get_view" do
|
|
251
|
-
it "should construct a call to the view for the proper design document" do
|
|
252
|
-
@rest.should_receive(:get_rest).with("chef/_design/nodes/_view/mastodon")
|
|
253
|
-
@couchdb.get_view("nodes", "mastodon")
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
it "should allow arguments to the view" do
|
|
257
|
-
@rest.should_receive(:get_rest).with("chef/_design/nodes/_view/mastodon?startkey=%22dont%20stay%22")
|
|
258
|
-
@couchdb.get_view("nodes", "mastodon", :startkey => "dont stay")
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
describe "view_uri" do
|
|
264
|
-
it "should output an appropriately formed view URI" do
|
|
265
|
-
@couchdb.should_receive(:view_uri).with("nodes", "all").and_return("chef/_design/nodes/_view/all")
|
|
266
|
-
@couchdb.view_uri("nodes", "all")
|
|
267
|
-
end
|
|
268
|
-
end
|
|
269
|
-
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|