chef 11.4.4 → 11.6.0.hotfix.1
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/README.md +1 -1
- data/Rakefile +18 -1
- data/bin/chef-service-manager +37 -0
- 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/chef-shell.1.html +4 -4
- data/distro/common/html/chef-solo.8.html +12 -18
- 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 +7 -10
- data/distro/common/html/knife-data-bag.1.html +7 -10
- data/distro/common/html/knife-environment.1.html +6 -8
- data/distro/common/html/knife-exec.1.html +4 -4
- 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 +4 -4
- data/distro/common/man/man1/chef-shell.1 +1 -1
- 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 +2 -15
- data/distro/common/man/man1/knife-data-bag.1 +2 -15
- data/distro/common/man/man1/knife-environment.1 +2 -12
- data/distro/common/man/man1/knife-exec.1 +1 -1
- 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 +1 -1
- 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 +4 -36
- data/distro/common/man/man8/chef-solr.8 +1 -1
- data/distro/debian/etc/init.d/chef-client +4 -2
- data/distro/windows/service_manager.rb +2 -146
- data/lib/chef.rb +1 -1
- data/lib/chef/application.rb +5 -12
- data/lib/chef/application/apply.rb +2 -0
- data/lib/chef/application/client.rb +12 -12
- data/lib/chef/application/knife.rb +2 -2
- data/lib/chef/application/solo.rb +4 -5
- data/lib/chef/application/windows_service.rb +113 -56
- data/lib/chef/application/windows_service_manager.rb +179 -0
- data/lib/chef/chef_fs.rb +2 -4
- data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
- data/lib/chef/chef_fs/command_line.rb +145 -93
- data/lib/chef/chef_fs/config.rb +205 -0
- data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
- data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
- data/lib/chef/chef_fs/file_system.rb +195 -127
- data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
- data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
- data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
- data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +98 -39
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +14 -63
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +93 -3
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +35 -9
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +67 -32
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +13 -6
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +102 -21
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +12 -21
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +14 -8
- data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
- data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/file_system_error.rb +3 -1
- data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
- data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
- data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +2 -2
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +17 -9
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
- data/lib/chef/chef_fs/file_system/not_found_error.rb +2 -2
- data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
- data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +42 -13
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +81 -27
- data/lib/chef/chef_fs/knife.rb +68 -29
- data/lib/chef/chef_fs/parallelizer.rb +129 -0
- data/lib/chef/chef_fs/path_utils.rb +29 -3
- data/lib/chef/chef_fs/raw_request.rb +79 -0
- data/lib/chef/client.rb +46 -20
- data/lib/chef/config.rb +59 -61
- data/lib/chef/cookbook/chefignore.rb +2 -1
- data/lib/chef/cookbook/synchronizer.rb +8 -6
- data/lib/chef/cookbook/syntax_check.rb +17 -2
- data/lib/chef/cookbook_uploader.rb +10 -1
- data/lib/chef/cookbook_version.rb +0 -109
- data/lib/chef/data_bag.rb +15 -6
- data/lib/chef/deprecation/mixin/template.rb +49 -0
- data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
- data/lib/chef/deprecation/provider/file.rb +197 -0
- data/lib/chef/deprecation/provider/remote_file.rb +86 -0
- data/lib/chef/deprecation/provider/template.rb +63 -0
- data/lib/chef/deprecation/warnings.rb +38 -0
- data/lib/chef/encrypted_data_bag_item.rb +153 -61
- data/lib/chef/environment.rb +34 -3
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +27 -2
- data/lib/chef/file_access_control/unix.rb +64 -7
- data/lib/chef/file_access_control/windows.rb +22 -11
- data/lib/chef/file_content_management/content_base.rb +56 -0
- data/lib/chef/file_content_management/deploy.rb +38 -0
- data/lib/chef/file_content_management/deploy/cp.rb +48 -0
- data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
- data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
- data/lib/chef/file_content_management/tempfile.rb +61 -0
- data/lib/chef/formatters/doc.rb +1 -1
- data/lib/chef/formatters/error_descriptor.rb +5 -4
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +4 -0
- data/lib/chef/json_compat.rb +3 -0
- data/lib/chef/knife.rb +12 -3
- data/lib/chef/knife/bootstrap.rb +46 -2
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/centos5-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/chef-full.erb +4 -4
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +3 -3
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +3 -3
- data/lib/chef/knife/client_show.rb +2 -5
- data/lib/chef/knife/configure.rb +3 -3
- data/lib/chef/knife/cookbook_create.rb +6 -5
- data/lib/chef/knife/cookbook_download.rb +13 -5
- data/lib/chef/knife/cookbook_site_share.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +1 -0
- data/lib/chef/knife/cookbook_upload.rb +4 -9
- data/lib/chef/knife/core/bootstrap_context.rb +10 -4
- data/lib/chef/knife/core/generic_presenter.rb +16 -0
- data/lib/chef/knife/core/node_editor.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +43 -12
- data/lib/chef/knife/core/ui.rb +19 -4
- data/lib/chef/knife/delete.rb +76 -9
- data/lib/chef/knife/deps.rb +139 -0
- data/lib/chef/knife/diff.rb +22 -5
- data/lib/chef/knife/download.rb +16 -3
- data/lib/chef/knife/edit.rb +76 -0
- data/lib/chef/knife/environment_show.rb +2 -7
- data/lib/chef/knife/list.rb +91 -47
- data/lib/chef/knife/node_run_list_set.rb +66 -0
- data/lib/chef/knife/node_show.rb +1 -7
- data/lib/chef/knife/raw.rb +20 -64
- data/lib/chef/knife/role_show.rb +2 -4
- data/lib/chef/knife/search.rb +5 -6
- data/lib/chef/knife/show.rb +34 -11
- data/lib/chef/knife/ssh.rb +8 -0
- data/lib/chef/knife/upload.rb +23 -4
- data/lib/chef/knife/user_show.rb +2 -5
- data/lib/chef/knife/xargs.rb +265 -0
- data/lib/chef/log.rb +2 -2
- data/lib/chef/mixin/file_class.rb +0 -9
- data/lib/chef/mixin/language_include_recipe.rb +1 -1
- data/lib/chef/mixin/params_validate.rb +19 -9
- data/lib/chef/mixin/template.rb +126 -36
- data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
- data/lib/chef/monkey_patches/file.rb +26 -0
- data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
- data/lib/chef/monkey_patches/securerandom.rb +44 -0
- data/lib/chef/monologger.rb +93 -0
- data/lib/chef/node.rb +4 -0
- data/lib/chef/platform.rb +4 -490
- data/lib/chef/platform/provider_mapping.rb +529 -0
- data/lib/chef/{monkey_patches/dir.rb → platform/query_helpers.rb} +25 -19
- data/lib/chef/provider.rb +12 -9
- data/lib/chef/provider/batch.rb +35 -0
- data/lib/chef/provider/cookbook_file.rb +9 -78
- data/lib/chef/provider/cookbook_file/content.rb +49 -0
- data/lib/chef/provider/deploy.rb +24 -20
- data/lib/chef/provider/deploy/revision.rb +27 -0
- data/lib/chef/provider/directory.rb +19 -22
- data/lib/chef/provider/execute.rb +22 -5
- data/lib/chef/provider/file.rb +299 -217
- data/lib/chef/provider/file/content.rb +39 -0
- data/lib/chef/provider/git.rb +76 -43
- data/lib/chef/provider/group/usermod.rb +2 -2
- data/lib/chef/provider/ifconfig.rb +25 -35
- data/lib/chef/provider/ifconfig/debian.rb +71 -0
- data/lib/chef/provider/ifconfig/redhat.rb +47 -0
- data/lib/chef/provider/link.rb +10 -3
- data/lib/chef/provider/mount.rb +1 -1
- data/lib/chef/provider/mount/mount.rb +8 -3
- data/lib/chef/provider/mount/windows.rb +4 -1
- data/lib/chef/provider/package/portage.rb +9 -4
- data/lib/chef/provider/package/rubygems.rb +45 -10
- data/lib/chef/provider/package/smartos.rb +47 -36
- data/lib/chef/provider/package/yum.rb +19 -12
- data/lib/chef/provider/package/zypper.rb +45 -55
- data/lib/chef/provider/powershell_script.rb +77 -0
- data/lib/chef/provider/remote_directory.rb +5 -6
- data/lib/chef/provider/remote_file.rb +12 -108
- data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
- data/lib/chef/provider/remote_file/content.rb +75 -0
- data/lib/chef/provider/remote_file/fetcher.rb +43 -0
- data/lib/chef/provider/remote_file/ftp.rb +183 -0
- data/lib/chef/provider/remote_file/http.rb +124 -0
- data/lib/chef/provider/remote_file/local_file.rb +47 -0
- data/lib/chef/provider/route.rb +6 -2
- data/lib/chef/provider/script.rb +14 -2
- data/lib/chef/provider/service/macosx.rb +16 -10
- data/lib/chef/provider/service/solaris.rb +6 -5
- data/lib/chef/provider/template.rb +16 -78
- data/lib/chef/provider/template/content.rb +61 -0
- data/lib/chef/provider/user/solaris.rb +90 -0
- data/lib/chef/provider/user/useradd.rb +76 -63
- data/lib/chef/provider/windows_script.rb +73 -0
- data/lib/chef/providers.rb +16 -0
- data/lib/chef/resource.rb +23 -2
- data/lib/chef/resource/batch.rb +31 -0
- data/lib/chef/resource/conditional.rb +4 -0
- data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
- data/lib/chef/resource/file.rb +31 -3
- data/lib/chef/resource/link.rb +17 -0
- data/lib/chef/resource/lwrp_base.rb +1 -1
- data/lib/chef/resource/mount.rb +29 -2
- data/lib/chef/resource/powershell_script.rb +31 -0
- data/lib/chef/resource/remote_file.rb +47 -1
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/template.rb +145 -0
- data/lib/chef/resource/windows_script.rb +62 -0
- data/lib/chef/resource_collection.rb +45 -11
- data/lib/chef/resource_reporter.rb +81 -52
- data/lib/chef/resources.rb +2 -0
- data/lib/chef/rest.rb +13 -4
- data/lib/chef/rest/rest_request.rb +5 -1
- data/lib/chef/run_context/cookbook_compiler.rb +3 -3
- data/lib/chef/run_list/run_list_expansion.rb +1 -1
- data/lib/chef/run_lock.rb +7 -1
- data/lib/chef/runner.rb +0 -1
- data/lib/chef/scan_access_control.rb +6 -1
- data/lib/chef/search/query.rb +2 -2
- data/lib/chef/shell/shell_session.rb +2 -2
- data/lib/chef/util/backup.rb +84 -0
- data/lib/chef/util/diff.rb +145 -0
- data/lib/chef/util/file_edit.rb +1 -1
- data/lib/chef/util/selinux.rb +100 -0
- data/lib/chef/util/windows/net_user.rb +14 -1
- data/lib/chef/util/windows/volume.rb +2 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version/platform.rb +42 -0
- data/lib/chef/version_class.rb +1 -1
- data/lib/chef/version_constraint.rb +6 -5
- data/lib/chef/version_constraint/platform.rb +26 -0
- data/lib/chef/win32/api/file.rb +8 -2
- data/lib/chef/win32/version.rb +25 -8
- data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
- data/spec/data/apt/var/www/apt/conf/distributions +7 -0
- data/spec/data/apt/var/www/apt/conf/incoming +4 -0
- data/spec/data/apt/var/www/apt/conf/pulls +3 -0
- data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
- data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
- data/spec/data/apt/var/www/apt/db/packages.db +0 -0
- data/spec/data/apt/var/www/apt/db/references.db +0 -0
- data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
- data/spec/data/apt/var/www/apt/db/version +4 -0
- data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
- data/spec/data/bootstrap/secret.erb +9 -0
- data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
- data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
- data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
- data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
- data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
- data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
- data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
- data/spec/data/git_bundles/example-repo.gitbundle +0 -0
- data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
- data/spec/data/knife_subcommand/test_yourself.rb +8 -0
- data/spec/data/null_config.rb +1 -0
- data/spec/data/partial_one.erb +1 -1
- data/spec/data/remote_file/nyan_cat.png.gz +0 -0
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
- data/spec/functional/knife/exec_spec.rb +2 -2
- data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
- data/spec/functional/resource/batch_spec.rb +64 -0
- data/spec/functional/resource/cookbook_file_spec.rb +2 -3
- data/spec/functional/resource/deploy_revision_spec.rb +180 -0
- data/spec/functional/resource/directory_spec.rb +2 -2
- data/spec/functional/resource/file_spec.rb +17 -1
- data/spec/functional/resource/git_spec.rb +259 -0
- data/spec/functional/resource/link_spec.rb +422 -388
- data/spec/functional/resource/package_spec.rb +297 -0
- data/spec/functional/resource/powershell_spec.rb +188 -0
- data/spec/functional/resource/registry_spec.rb +8 -4
- data/spec/functional/resource/remote_directory_spec.rb +2 -2
- data/spec/functional/resource/remote_file_spec.rb +97 -29
- data/spec/functional/resource/template_spec.rb +173 -17
- data/spec/functional/resource/user_spec.rb +547 -0
- data/spec/functional/run_lock_spec.rb +5 -0
- data/spec/functional/shell_spec.rb +2 -1
- data/spec/functional/win32/service_manager_spec.rb +269 -0
- data/spec/functional/win32/versions_spec.rb +78 -0
- data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
- data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
- data/spec/integration/knife/chefignore_spec.rb +271 -0
- data/spec/integration/knife/delete_spec.rb +944 -0
- data/spec/integration/knife/deps_spec.rb +648 -0
- data/spec/integration/knife/diff_spec.rb +536 -0
- data/spec/integration/knife/download_spec.rb +962 -0
- data/spec/integration/knife/list_spec.rb +633 -0
- data/spec/integration/knife/raw_spec.rb +166 -0
- data/spec/integration/knife/redirection_spec.rb +57 -0
- data/spec/integration/knife/show_spec.rb +158 -0
- data/spec/integration/knife/upload_spec.rb +1060 -0
- data/spec/integration/solo/solo_spec.rb +41 -0
- data/spec/spec_helper.rb +55 -1
- data/spec/support/chef_helpers.rb +32 -0
- data/spec/support/platform_helpers.rb +40 -0
- data/spec/support/platforms/win32/spec_service.rb +59 -0
- data/spec/support/shared/functional/directory_resource.rb +43 -16
- data/spec/support/shared/functional/file_resource.rb +661 -20
- data/spec/support/shared/functional/securable_resource.rb +109 -8
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +39 -31
- data/spec/support/shared/integration/integration_helper.rb +166 -0
- data/spec/support/shared/integration/knife_support.rb +171 -0
- data/spec/support/shared/unit/execute_resource.rb +125 -0
- data/spec/support/shared/unit/file_system_support.rb +8 -48
- data/spec/support/shared/unit/provider/file.rb +609 -0
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
- data/spec/support/shared/unit/script_resource.rb +52 -0
- data/spec/support/shared/unit/windows_script_resource.rb +48 -0
- data/spec/tiny_server.rb +13 -11
- data/spec/unit/application/client_spec.rb +39 -1
- data/spec/unit/application/knife_spec.rb +12 -0
- data/spec/unit/application/solo_spec.rb +1 -1
- data/spec/unit/application_spec.rb +57 -2
- data/spec/unit/chef_fs/diff_spec.rb +30 -31
- data/spec/unit/chef_fs/file_pattern_spec.rb +2 -2
- data/spec/unit/chef_fs/file_system_spec.rb +2 -3
- data/spec/unit/client_spec.rb +20 -1
- data/spec/unit/config_spec.rb +70 -52
- data/spec/unit/cookbook/synchronizer_spec.rb +49 -1
- data/spec/unit/cookbook/syntax_check_spec.rb +28 -3
- data/spec/unit/cookbook_loader_spec.rb +3 -2
- data/spec/unit/daemon_spec.rb +7 -7
- data/spec/unit/data_bag_spec.rb +7 -0
- data/spec/unit/deprecation_spec.rb +86 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +183 -88
- data/spec/unit/environment_spec.rb +98 -0
- data/spec/unit/exceptions_spec.rb +6 -1
- data/spec/unit/file_access_control_spec.rb +21 -1
- data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
- data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -2
- data/spec/unit/knife/bootstrap_spec.rb +128 -29
- data/spec/unit/knife/configure_spec.rb +42 -26
- data/spec/unit/knife/cookbook_download_spec.rb +24 -3
- data/spec/unit/knife/cookbook_upload_spec.rb +8 -4
- data/spec/unit/knife/core/bootstrap_context_spec.rb +78 -61
- data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
- data/spec/unit/knife/core/ui_spec.rb +41 -0
- data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
- data/spec/unit/knife_spec.rb +21 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +1 -0
- data/spec/unit/mixin/params_validate_spec.rb +35 -0
- data/spec/unit/mixin/template_spec.rb +69 -57
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
- data/spec/unit/node_spec.rb +7 -0
- data/spec/unit/platform_spec.rb +15 -1
- data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
- data/spec/unit/provider/cookbook_file_spec.rb +26 -183
- data/spec/unit/provider/cron/solaris_spec.rb +1 -1
- data/spec/unit/provider/deploy/revision_spec.rb +19 -11
- data/spec/unit/provider/deploy_spec.rb +2 -2
- data/spec/unit/provider/directory_spec.rb +23 -23
- data/spec/unit/provider/execute_spec.rb +27 -1
- data/spec/unit/provider/file/content_spec.rb +101 -0
- data/spec/unit/provider/file_spec.rb +25 -484
- data/spec/unit/provider/git_spec.rb +224 -28
- data/spec/unit/provider/group/usermod_spec.rb +3 -1
- data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
- data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
- data/spec/unit/provider/ifconfig_spec.rb +0 -33
- data/spec/unit/provider/mount/mount_spec.rb +33 -2
- data/spec/unit/provider/mount/windows_spec.rb +4 -1
- data/spec/unit/provider/mount_spec.rb +16 -6
- data/spec/unit/provider/package/portage_spec.rb +44 -0
- data/spec/unit/provider/package/rubygems_spec.rb +44 -1
- data/spec/unit/provider/package/smartos_spec.rb +3 -2
- data/spec/unit/provider/package/yum_spec.rb +36 -39
- data/spec/unit/provider/package/zypper_spec.rb +84 -22
- data/spec/unit/provider/package_spec.rb +0 -4
- data/spec/unit/provider/powershell_spec.rb +38 -0
- data/spec/unit/provider/remote_directory_spec.rb +0 -4
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
- data/spec/unit/provider/remote_file/content_spec.rb +230 -0
- data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
- data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
- data/spec/unit/provider/remote_file/http_spec.rb +319 -0
- data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
- data/spec/unit/provider/remote_file_spec.rb +33 -295
- data/spec/unit/provider/route_spec.rb +25 -9
- data/spec/unit/provider/service/macosx_spec.rb +176 -152
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
- data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
- data/spec/unit/provider/service/upstart_service_spec.rb +2 -2
- data/spec/unit/provider/service_spec.rb +3 -3
- data/spec/unit/provider/template/content_spec.rb +78 -0
- data/spec/unit/provider/template_spec.rb +52 -184
- data/spec/unit/provider/user/solaris_spec.rb +80 -0
- data/spec/unit/provider/user/useradd_spec.rb +12 -358
- data/spec/unit/resource/batch_spec.rb +48 -0
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
- data/spec/unit/resource/execute_spec.rb +3 -101
- data/spec/unit/resource/file_spec.rb +0 -5
- data/spec/unit/resource/group_spec.rb +9 -0
- data/spec/unit/resource/ifconfig_spec.rb +60 -1
- data/spec/unit/resource/link_spec.rb +1 -0
- data/spec/unit/resource/mount_spec.rb +37 -0
- data/spec/unit/resource/powershell_spec.rb +48 -0
- data/spec/unit/resource/remote_file_spec.rb +44 -4
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/script_spec.rb +13 -36
- data/spec/unit/resource/template_spec.rb +111 -8
- data/spec/unit/resource/user_spec.rb +7 -0
- data/spec/unit/resource_collection_spec.rb +61 -32
- data/spec/unit/resource_reporter_spec.rb +115 -102
- data/spec/unit/resource_spec.rb +170 -1
- data/spec/unit/rest/auth_credentials_spec.rb +2 -2
- data/spec/unit/rest_spec.rb +6 -2
- data/spec/unit/run_context/cookbook_compiler_spec.rb +9 -0
- data/spec/unit/runner_spec.rb +1 -1
- data/spec/unit/scan_access_control_spec.rb +4 -2
- data/spec/unit/shell/shell_session_spec.rb +15 -2
- data/spec/unit/util/backup_spec.rb +149 -0
- data/spec/unit/util/diff_spec.rb +596 -0
- data/spec/unit/util/selinux_spec.rb +172 -0
- data/spec/unit/version/platform_spec.rb +61 -0
- data/spec/unit/version_constraint/platform_spec.rb +46 -0
- data/spec/unit/version_constraint_spec.rb +5 -0
- metadata +233 -10
- data/lib/chef/chef_fs/file_system/data_bag_item.rb +0 -59
- data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +0 -237
- data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +0 -568
- data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +0 -220
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
8
8
|
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# Unless required by applicable law or agreed to in writing, software
|
|
13
13
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -22,7 +22,7 @@ describe Chef::Resource::Template do
|
|
|
22
22
|
|
|
23
23
|
before(:each) do
|
|
24
24
|
@resource = Chef::Resource::Template.new("fakey_fakerton")
|
|
25
|
-
end
|
|
25
|
+
end
|
|
26
26
|
|
|
27
27
|
describe "initialize" do
|
|
28
28
|
it "should create a new Chef::Resource::Template" do
|
|
@@ -47,20 +47,20 @@ describe Chef::Resource::Template do
|
|
|
47
47
|
r.source.should eql("fakey_fakerton.erb")
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
|
-
|
|
50
|
+
|
|
51
51
|
describe "variables" do
|
|
52
52
|
it "should accept a hash for the variable list" do
|
|
53
53
|
@resource.variables({ :reluctance => :awkward })
|
|
54
54
|
@resource.variables.should == { :reluctance => :awkward }
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
describe "cookbook" do
|
|
59
59
|
it "should accept a string for the cookbook name" do
|
|
60
60
|
@resource.cookbook("foo")
|
|
61
61
|
@resource.cookbook.should == "foo"
|
|
62
62
|
end
|
|
63
|
-
|
|
63
|
+
|
|
64
64
|
it "should default to nil" do
|
|
65
65
|
@resource.cookbook.should == nil
|
|
66
66
|
end
|
|
@@ -76,7 +76,7 @@ describe Chef::Resource::Template do
|
|
|
76
76
|
@resource.local.should == false
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
|
-
|
|
79
|
+
|
|
80
80
|
describe "when it has a path, owner, group, mode, and checksum" do
|
|
81
81
|
before do
|
|
82
82
|
@resource.path("/tmp/foo.txt")
|
|
@@ -104,5 +104,108 @@ describe Chef::Resource::Template do
|
|
|
104
104
|
it "returns the file path as its identity" do
|
|
105
105
|
@resource.identity.should == "/tmp/foo.txt"
|
|
106
106
|
end
|
|
107
|
-
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe "defining helper methods" do
|
|
110
|
+
|
|
111
|
+
module ExampleHelpers
|
|
112
|
+
def static_example
|
|
113
|
+
"static_example"
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "collects helper method bodies as blocks" do
|
|
118
|
+
@resource.helper(:example_1) { "example_1" }
|
|
119
|
+
@resource.helper(:example_2) { "example_2" }
|
|
120
|
+
@resource.inline_helper_blocks[:example_1].call.should == "example_1"
|
|
121
|
+
@resource.inline_helper_blocks[:example_2].call.should == "example_2"
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "compiles helper methods into a module" do
|
|
125
|
+
@resource.helper(:example_1) { "example_1" }
|
|
126
|
+
@resource.helper(:example_2) { "example_2" }
|
|
127
|
+
modules = @resource.helper_modules
|
|
128
|
+
modules.should have(1).module
|
|
129
|
+
o = Object.new
|
|
130
|
+
modules.each {|m| o.extend(m)}
|
|
131
|
+
o.example_1.should == "example_1"
|
|
132
|
+
o.example_2.should == "example_2"
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "compiles helper methods with arguments into a module" do
|
|
136
|
+
@resource.helper(:shout) { |quiet| quiet.upcase }
|
|
137
|
+
modules = @resource.helper_modules
|
|
138
|
+
o = Object.new
|
|
139
|
+
modules.each {|m| o.extend(m)}
|
|
140
|
+
o.shout("shout").should == "SHOUT"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "raises an error when attempting to define a helper method without a method body" do
|
|
144
|
+
lambda { @resource.helper(:example) }.should raise_error(Chef::Exceptions::ValidationFailed)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "raises an error when attempting to define a helper method with a non-Symbod method name" do
|
|
148
|
+
lambda { @resource.helper("example") { "fail" } }.should raise_error(Chef::Exceptions::ValidationFailed)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "collects helper module bodies as blocks" do
|
|
152
|
+
@resource.helpers do
|
|
153
|
+
def example_1
|
|
154
|
+
"example_1"
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
module_body = @resource.inline_helper_modules.first
|
|
158
|
+
module_body.should be_a(Proc)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "compiles helper module bodies into modules" do
|
|
162
|
+
@resource.helpers do
|
|
163
|
+
def example_1
|
|
164
|
+
"example_1"
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
modules = @resource.helper_modules
|
|
168
|
+
modules.should have(1).module
|
|
169
|
+
o = Object.new
|
|
170
|
+
modules.each {|m| o.extend(m)}
|
|
171
|
+
o.example_1.should == "example_1"
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "raises an error when no block or module name is given for helpers definition" do
|
|
175
|
+
lambda { @resource.helpers() }.should raise_error(Chef::Exceptions::ValidationFailed)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "raises an error when a non-module is given for helpers definition" do
|
|
179
|
+
lambda { @resource.helpers("NotAModule") }.should raise_error(Chef::Exceptions::ValidationFailed)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it "raises an error when a module name and block are both given for helpers definition" do
|
|
183
|
+
lambda { @resource.helpers(ExampleHelpers) { module_code } }.should raise_error(Chef::Exceptions::ValidationFailed)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "collects helper modules" do
|
|
187
|
+
@resource.helpers(ExampleHelpers)
|
|
188
|
+
@resource.helper_modules.should include(ExampleHelpers)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it "combines all helpers into a set of compiled modules" do
|
|
192
|
+
@resource.helpers(ExampleHelpers)
|
|
193
|
+
@resource.helpers do
|
|
194
|
+
def inline_module
|
|
195
|
+
"inline_module"
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
@resource.helper(:inline_method) { "inline_method" }
|
|
199
|
+
@resource.should have(3).helper_modules
|
|
200
|
+
|
|
201
|
+
o = Object.new
|
|
202
|
+
@resource.helper_modules.each {|m| o.extend(m)}
|
|
203
|
+
o.static_example.should == "static_example"
|
|
204
|
+
o.inline_module.should == "inline_module"
|
|
205
|
+
o.inline_method.should == "inline_method"
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
end
|
|
210
|
+
|
|
108
211
|
end
|
|
@@ -59,6 +59,13 @@ describe Chef::Resource::User, "initialize" do
|
|
|
59
59
|
@resource.allowed_actions.detect { |a| a == action.to_sym }.should eql(action.to_sym)
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
|
+
|
|
63
|
+
it "should accept domain users (@ or \ separator) on non-windows" do
|
|
64
|
+
lambda { @resource.username "domain\@user" }.should_not raise_error(ArgumentError)
|
|
65
|
+
@resource.username.should == "domain\@user"
|
|
66
|
+
lambda { @resource.username "domain\\user" }.should_not raise_error(ArgumentError)
|
|
67
|
+
@resource.username.should == "domain\\user"
|
|
68
|
+
end
|
|
62
69
|
end
|
|
63
70
|
|
|
64
71
|
%w{username comment home shell password}.each do |attrib|
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
8
|
# you may not use this file except in compliance with the License.
|
|
9
9
|
# You may obtain a copy of the License at
|
|
10
|
-
#
|
|
10
|
+
#
|
|
11
11
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
#
|
|
12
|
+
#
|
|
13
13
|
# Unless required by applicable law or agreed to in writing, software
|
|
14
14
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
15
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -20,49 +20,49 @@
|
|
|
20
20
|
require 'spec_helper'
|
|
21
21
|
|
|
22
22
|
describe Chef::ResourceCollection do
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
before(:each) do
|
|
25
25
|
@rc = Chef::ResourceCollection.new()
|
|
26
26
|
@resource = Chef::Resource::ZenMaster.new("makoto")
|
|
27
27
|
end
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
describe "initialize" do
|
|
30
30
|
it "should return a Chef::ResourceCollection" do
|
|
31
31
|
@rc.should be_kind_of(Chef::ResourceCollection)
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
describe "[]" do
|
|
36
36
|
it "should accept Chef::Resources through [index]" do
|
|
37
37
|
lambda { @rc[0] = @resource }.should_not raise_error
|
|
38
38
|
lambda { @rc[0] = "string" }.should raise_error
|
|
39
39
|
end
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
it "should allow you to fetch Chef::Resources by position" do
|
|
42
42
|
@rc[0] = @resource
|
|
43
43
|
@rc[0].should eql(@resource)
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
describe "push" do
|
|
48
48
|
it "should accept Chef::Resources through pushing" do
|
|
49
49
|
lambda { @rc.push(@resource) }.should_not raise_error
|
|
50
50
|
lambda { @rc.push("string") }.should raise_error
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
describe "<<" do
|
|
55
55
|
it "should accept the << operator" do
|
|
56
56
|
lambda { @rc << @resource }.should_not raise_error
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
|
-
|
|
60
|
-
describe "insert" do
|
|
59
|
+
|
|
60
|
+
describe "insert" do
|
|
61
61
|
it "should accept only Chef::Resources" do
|
|
62
62
|
lambda { @rc.insert(@resource) }.should_not raise_error
|
|
63
63
|
lambda { @rc.insert("string") }.should raise_error
|
|
64
64
|
end
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
it "should append resources to the end of the collection when not executing a run" do
|
|
67
67
|
zmr = Chef::Resource::ZenMaster.new("there is no spoon")
|
|
68
68
|
@rc.insert(@resource)
|
|
@@ -70,18 +70,18 @@ describe Chef::ResourceCollection do
|
|
|
70
70
|
@rc[0].should eql(@resource)
|
|
71
71
|
@rc[1].should eql(zmr)
|
|
72
72
|
end
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
it "should insert resources to the middle of the collection if called while executing a run" do
|
|
75
75
|
resource_to_inject = Chef::Resource::ZenMaster.new("there is no spoon")
|
|
76
76
|
zmr = Chef::Resource::ZenMaster.new("morpheus")
|
|
77
77
|
dummy = Chef::Resource::ZenMaster.new("keanu reeves")
|
|
78
78
|
@rc.insert(zmr)
|
|
79
79
|
@rc.insert(dummy)
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
@rc.execute_each_resource do |resource|
|
|
82
82
|
@rc.insert(resource_to_inject) if resource == zmr
|
|
83
83
|
end
|
|
84
|
-
|
|
84
|
+
|
|
85
85
|
@rc[0].should eql(zmr)
|
|
86
86
|
@rc[1].should eql(resource_to_inject)
|
|
87
87
|
@rc[2].should eql(dummy)
|
|
@@ -92,7 +92,7 @@ describe Chef::ResourceCollection do
|
|
|
92
92
|
it "should allow you to iterate over every resource in the collection" do
|
|
93
93
|
load_up_resources
|
|
94
94
|
results = Array.new
|
|
95
|
-
lambda {
|
|
95
|
+
lambda {
|
|
96
96
|
@rc.each do |r|
|
|
97
97
|
results << r.name
|
|
98
98
|
end
|
|
@@ -109,15 +109,15 @@ describe Chef::ResourceCollection do
|
|
|
109
109
|
end
|
|
110
110
|
end
|
|
111
111
|
end
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
describe "each_index" do
|
|
114
114
|
it "should allow you to iterate over every resource by index" do
|
|
115
115
|
load_up_resources
|
|
116
116
|
results = Array.new
|
|
117
|
-
lambda {
|
|
117
|
+
lambda {
|
|
118
118
|
@rc.each_index do |i|
|
|
119
119
|
results << @rc[i].name
|
|
120
|
-
end
|
|
120
|
+
end
|
|
121
121
|
}.should_not raise_error()
|
|
122
122
|
results.each_index do |i|
|
|
123
123
|
case i
|
|
@@ -131,7 +131,7 @@ describe Chef::ResourceCollection do
|
|
|
131
131
|
end
|
|
132
132
|
end
|
|
133
133
|
end
|
|
134
|
-
|
|
134
|
+
|
|
135
135
|
describe "lookup" do
|
|
136
136
|
it "should allow you to find resources by name via lookup" do
|
|
137
137
|
zmr = Chef::Resource::ZenMaster.new("dog")
|
|
@@ -141,21 +141,21 @@ describe Chef::ResourceCollection do
|
|
|
141
141
|
zmr = Chef::Resource::ZenMaster.new("cat")
|
|
142
142
|
@rc[0] = zmr
|
|
143
143
|
@rc.lookup(zmr).should eql(zmr)
|
|
144
|
-
|
|
144
|
+
|
|
145
145
|
zmr = Chef::Resource::ZenMaster.new("monkey")
|
|
146
146
|
@rc.push(zmr)
|
|
147
147
|
@rc.lookup(zmr).should eql(zmr)
|
|
148
148
|
end
|
|
149
|
-
|
|
149
|
+
|
|
150
150
|
it "should raise an exception if you send something strange to lookup" do
|
|
151
151
|
lambda { @rc.lookup(:symbol) }.should raise_error(ArgumentError)
|
|
152
152
|
end
|
|
153
|
-
|
|
153
|
+
|
|
154
154
|
it "should raise an exception if it cannot find a resource with lookup" do
|
|
155
155
|
lambda { @rc.lookup("zen_master[dog]") }.should raise_error(Chef::Exceptions::ResourceNotFound)
|
|
156
156
|
end
|
|
157
157
|
end
|
|
158
|
-
|
|
158
|
+
|
|
159
159
|
describe "resources" do
|
|
160
160
|
|
|
161
161
|
it "should find a resource by symbol and name (:zen_master => monkey)" do
|
|
@@ -195,11 +195,11 @@ describe Chef::ResourceCollection do
|
|
|
195
195
|
results.length.should eql(2)
|
|
196
196
|
check_by_names(results, "monkey", "something")
|
|
197
197
|
end
|
|
198
|
-
|
|
198
|
+
|
|
199
199
|
it "should raise an exception if you pass a bad name to resources" do
|
|
200
|
-
lambda { @rc.resources("michael jackson") }.should raise_error(ArgumentError)
|
|
200
|
+
lambda { @rc.resources("michael jackson") }.should raise_error(ArgumentError)
|
|
201
201
|
end
|
|
202
|
-
|
|
202
|
+
|
|
203
203
|
it "should raise an exception if you pass something other than a string or hash to resource" do
|
|
204
204
|
lambda { @rc.resources([Array.new]) }.should raise_error(ArgumentError)
|
|
205
205
|
end
|
|
@@ -209,7 +209,36 @@ describe Chef::ResourceCollection do
|
|
|
209
209
|
end
|
|
210
210
|
|
|
211
211
|
end
|
|
212
|
-
|
|
212
|
+
|
|
213
|
+
describe "when validating a resource query object" do
|
|
214
|
+
it "accepts a string of the form 'resource_type[resource_name]'" do
|
|
215
|
+
@rc.validate_lookup_spec!("resource_type[resource_name]").should be_true
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
it "accepts a single-element :resource_type => 'resource_name' Hash" do
|
|
219
|
+
@rc.validate_lookup_spec!(:service => "apache2").should be_true
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
it "accepts a chef resource object" do
|
|
224
|
+
res = Chef::Resource.new("foo", nil)
|
|
225
|
+
@rc.validate_lookup_spec!(res).should be_true
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
it "rejects a malformed query string" do
|
|
229
|
+
lambda do
|
|
230
|
+
@rc.validate_lookup_spec!("resource_type[missing-end-bracket")
|
|
231
|
+
end.should raise_error(Chef::Exceptions::InvalidResourceSpecification)
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
it "rejects an argument that is not a String, Hash, or Chef::Resource" do
|
|
235
|
+
lambda do
|
|
236
|
+
@rc.validate_lookup_spec!(Object.new)
|
|
237
|
+
end.should raise_error(Chef::Exceptions::InvalidResourceSpecification)
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
end
|
|
241
|
+
|
|
213
242
|
describe "to_json" do
|
|
214
243
|
it "should serialize to json" do
|
|
215
244
|
json = @rc.to_json
|
|
@@ -217,7 +246,7 @@ describe Chef::ResourceCollection do
|
|
|
217
246
|
json.should =~ /instance_vars/
|
|
218
247
|
end
|
|
219
248
|
end
|
|
220
|
-
|
|
249
|
+
|
|
221
250
|
describe "self.from_json" do
|
|
222
251
|
it "should deserialize itself from json" do
|
|
223
252
|
@rc << @resource
|
|
@@ -227,13 +256,13 @@ describe Chef::ResourceCollection do
|
|
|
227
256
|
s_rc[0].name.should eql(@resource.name)
|
|
228
257
|
end
|
|
229
258
|
end
|
|
230
|
-
|
|
259
|
+
|
|
231
260
|
describe "provides access to the raw resources array" do
|
|
232
261
|
it "returns the resources via the all_resources method" do
|
|
233
262
|
@rc.all_resources.should equal(@rc.instance_variable_get(:@resources))
|
|
234
263
|
end
|
|
235
264
|
end
|
|
236
|
-
|
|
265
|
+
|
|
237
266
|
describe "provides access to stepable iterator" do
|
|
238
267
|
it "returns the iterator object" do
|
|
239
268
|
@rc.instance_variable_set(:@iterator, :fooboar)
|
|
@@ -246,12 +275,12 @@ describe Chef::ResourceCollection do
|
|
|
246
275
|
results.detect{ |res| res.name == res_name }.should_not eql(nil)
|
|
247
276
|
end
|
|
248
277
|
end
|
|
249
|
-
|
|
278
|
+
|
|
250
279
|
def load_up_resources
|
|
251
280
|
%w{dog cat monkey}.each do |n|
|
|
252
281
|
@rc << Chef::Resource::ZenMaster.new(n)
|
|
253
282
|
end
|
|
254
283
|
@rc << Chef::Resource::File.new("something")
|
|
255
284
|
end
|
|
256
|
-
|
|
285
|
+
|
|
257
286
|
end
|
|
@@ -38,11 +38,18 @@ describe Chef::ResourceReporter do
|
|
|
38
38
|
@rest_client = mock("Chef::REST (mock)")
|
|
39
39
|
@rest_client.stub!(:post_rest).and_return(true)
|
|
40
40
|
@resource_reporter = Chef::ResourceReporter.new(@rest_client)
|
|
41
|
+
@run_id = @resource_reporter.run_id
|
|
41
42
|
@new_resource = Chef::Resource::File.new("/tmp/a-file.txt")
|
|
42
43
|
@new_resource.cookbook_name = "monkey"
|
|
43
44
|
@cookbook_version = mock("Cookbook::Version", :version => "1.2.3")
|
|
44
45
|
@new_resource.stub!(:cookbook_version).and_return(@cookbook_version)
|
|
45
46
|
@current_resource = Chef::Resource::File.new("/tmp/a-file.txt")
|
|
47
|
+
@start_time = Time.new
|
|
48
|
+
@end_time = Time.new + 20
|
|
49
|
+
@events = Chef::EventDispatch::Dispatcher.new
|
|
50
|
+
@run_context = Chef::RunContext.new(@node, {}, @events)
|
|
51
|
+
@run_status = Chef::RunStatus.new(@node, @events)
|
|
52
|
+
Time.stub!(:now).and_return(@start_time, @end_time)
|
|
46
53
|
end
|
|
47
54
|
|
|
48
55
|
context "when first created" do
|
|
@@ -80,23 +87,23 @@ describe Chef::ResourceReporter do
|
|
|
80
87
|
|
|
81
88
|
context "when chef fails" do
|
|
82
89
|
before do
|
|
83
|
-
@rest_client.stub!(:create_url).and_return("reports/nodes/spitfire/runs
|
|
90
|
+
@rest_client.stub!(:create_url).and_return("reports/nodes/spitfire/runs/#{@run_id}");
|
|
84
91
|
@rest_client.stub!(:raw_http_request).and_return({"result"=>"ok"});
|
|
85
|
-
@rest_client.stub!(:post_rest).and_return({"uri"=>"https://example.com/reports/nodes/spitfire/runs
|
|
92
|
+
@rest_client.stub!(:post_rest).and_return({"uri"=>"https://example.com/reports/nodes/spitfire/runs/#{@run_id}"});
|
|
86
93
|
|
|
87
|
-
@resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
|
|
88
94
|
end
|
|
89
95
|
|
|
90
96
|
context "before converging any resources" do
|
|
91
97
|
before do
|
|
98
|
+
@resource_reporter.run_started(@run_status)
|
|
92
99
|
@exception = Exception.new
|
|
93
100
|
@resource_reporter.run_failed(@exception)
|
|
94
101
|
end
|
|
95
|
-
|
|
102
|
+
|
|
96
103
|
it "sets the run status to 'failure'" do
|
|
97
104
|
@resource_reporter.status.should == "failure"
|
|
98
105
|
end
|
|
99
|
-
|
|
106
|
+
|
|
100
107
|
it "keeps the exception data" do
|
|
101
108
|
@resource_reporter.exception.should == @exception
|
|
102
109
|
end
|
|
@@ -117,13 +124,13 @@ describe Chef::ResourceReporter do
|
|
|
117
124
|
|
|
118
125
|
it "collects the desired state of the resource" do
|
|
119
126
|
update_record = @resource_reporter.updated_resources.first
|
|
120
|
-
update_record.new_resource.should == @new_resource
|
|
127
|
+
update_record.new_resource.should == @new_resource
|
|
121
128
|
end
|
|
122
129
|
end
|
|
123
130
|
|
|
124
131
|
# TODO: make sure a resource that is skipped because of `not_if` doesn't
|
|
125
132
|
# leave us in a bad state.
|
|
126
|
-
|
|
133
|
+
|
|
127
134
|
context "once the a resource's current state is loaded" do
|
|
128
135
|
before do
|
|
129
136
|
@resource_reporter.resource_action_start(@new_resource, :create)
|
|
@@ -151,12 +158,12 @@ describe Chef::ResourceReporter do
|
|
|
151
158
|
it "collects the updated resource" do
|
|
152
159
|
@resource_reporter.should have(1).updated_resources
|
|
153
160
|
end
|
|
154
|
-
|
|
161
|
+
|
|
155
162
|
it "collects the old state of the resource" do
|
|
156
|
-
update_record = @resource_reporter.updated_resources.first
|
|
163
|
+
update_record = @resource_reporter.updated_resources.first
|
|
157
164
|
update_record.current_resource.should == @current_resource
|
|
158
165
|
end
|
|
159
|
-
|
|
166
|
+
|
|
160
167
|
it "collects the new state of the resource" do
|
|
161
168
|
update_record = @resource_reporter.updated_resources.first
|
|
162
169
|
update_record.new_resource.should == @new_resource
|
|
@@ -170,19 +177,19 @@ describe Chef::ResourceReporter do
|
|
|
170
177
|
@resource_reporter.resource_failed(@next_new_resource, :create, @exception)
|
|
171
178
|
@resource_reporter.resource_completed(@next_new_resource)
|
|
172
179
|
end
|
|
173
|
-
|
|
180
|
+
|
|
174
181
|
it "collects the desired state of the failed resource" do
|
|
175
182
|
failed_resource_update = @resource_reporter.updated_resources.last
|
|
176
183
|
failed_resource_update.new_resource.should == @next_new_resource
|
|
177
184
|
end
|
|
178
|
-
|
|
185
|
+
|
|
179
186
|
it "does not have the current state of the failed resource" do
|
|
180
187
|
failed_resource_update = @resource_reporter.updated_resources.last
|
|
181
188
|
failed_resource_update.current_resource.should be_nil
|
|
182
189
|
end
|
|
183
190
|
end
|
|
184
191
|
end
|
|
185
|
-
|
|
192
|
+
|
|
186
193
|
# Some providers, such as RemoteDirectory and some LWRPs use other
|
|
187
194
|
# resources for their implementation. These should be hidden from reporting
|
|
188
195
|
# since we only care about the top-level resource and not the sub-resources
|
|
@@ -213,7 +220,7 @@ describe Chef::ResourceReporter do
|
|
|
213
220
|
@resource_reporter.resource_updated(@new_resource, :create)
|
|
214
221
|
@resource_reporter.resource_completed(@new_resource)
|
|
215
222
|
end
|
|
216
|
-
|
|
223
|
+
|
|
217
224
|
it "does not collect data about the nested resource" do
|
|
218
225
|
@resource_reporter.should have(1).updated_resources
|
|
219
226
|
end
|
|
@@ -226,16 +233,16 @@ describe Chef::ResourceReporter do
|
|
|
226
233
|
@resource_reporter.resource_failed(@new_resource, :create, @exception)
|
|
227
234
|
@resource_reporter.resource_completed(@new_resource)
|
|
228
235
|
end
|
|
229
|
-
|
|
236
|
+
|
|
230
237
|
it "collects the resource as an updated resource" do
|
|
231
238
|
@resource_reporter.should have(1).updated_resources
|
|
232
239
|
end
|
|
233
|
-
|
|
240
|
+
|
|
234
241
|
it "collects the desired state of the resource" do
|
|
235
242
|
update_record = @resource_reporter.updated_resources.first
|
|
236
243
|
update_record.new_resource.should == @new_resource
|
|
237
244
|
end
|
|
238
|
-
|
|
245
|
+
|
|
239
246
|
it "collects the current state of the resource" do
|
|
240
247
|
update_record = @resource_reporter.updated_resources.first
|
|
241
248
|
update_record.current_resource.should == @current_resource
|
|
@@ -248,13 +255,13 @@ describe Chef::ResourceReporter do
|
|
|
248
255
|
describe "when generating a report for the server" do
|
|
249
256
|
|
|
250
257
|
before do
|
|
251
|
-
@rest_client.stub!(:create_url).and_return("reports/nodes/spitfire/runs
|
|
258
|
+
@rest_client.stub!(:create_url).and_return("reports/nodes/spitfire/runs/#{@run_id}");
|
|
252
259
|
@rest_client.stub!(:raw_http_request).and_return({"result"=>"ok"});
|
|
253
|
-
@rest_client.stub!(:post_rest).and_return({"uri"=>"https://example.com/reports/nodes/spitfire/runs
|
|
254
|
-
|
|
255
|
-
@resource_reporter.
|
|
260
|
+
@rest_client.stub!(:post_rest).and_return({"uri"=>"https://example.com/reports/nodes/spitfire/runs/#{@run_id}"});
|
|
261
|
+
|
|
262
|
+
@resource_reporter.run_started(@run_status)
|
|
256
263
|
end
|
|
257
|
-
|
|
264
|
+
|
|
258
265
|
context "for a successful client run" do
|
|
259
266
|
before do
|
|
260
267
|
# TODO: add inputs to generate expected output.
|
|
@@ -291,6 +298,7 @@ describe Chef::ResourceReporter do
|
|
|
291
298
|
@resource_reporter.resource_current_state_loaded(@new_resource, :create, @current_resource)
|
|
292
299
|
@resource_reporter.resource_updated(@new_resource, :create)
|
|
293
300
|
@resource_reporter.resource_completed(@new_resource)
|
|
301
|
+
@run_status.stop_clock
|
|
294
302
|
@report = @resource_reporter.prepare_run_data
|
|
295
303
|
@first_update_report = @report["resources"].first
|
|
296
304
|
end
|
|
@@ -357,8 +365,14 @@ describe Chef::ResourceReporter do
|
|
|
357
365
|
|
|
358
366
|
it "includes the run_list" do
|
|
359
367
|
@report.should have_key("run_list")
|
|
360
|
-
@report["run_list"].should == @node.run_list.to_json
|
|
368
|
+
@report["run_list"].should == @run_status.node.run_list.to_json
|
|
361
369
|
end
|
|
370
|
+
|
|
371
|
+
it "includes the end_time" do
|
|
372
|
+
@report.should have_key("end_time")
|
|
373
|
+
@report["end_time"].should == @run_status.end_time.to_s
|
|
374
|
+
end
|
|
375
|
+
|
|
362
376
|
end
|
|
363
377
|
|
|
364
378
|
context "for an unsuccessful run" do
|
|
@@ -394,15 +408,68 @@ describe Chef::ResourceReporter do
|
|
|
394
408
|
|
|
395
409
|
it "includes the error inspector output in the event data" do
|
|
396
410
|
@report["data"]["exception"].should have_key("description")
|
|
397
|
-
@report["data"]["exception"]["description"].should include({"title"=>"Error expanding the run_list:", "sections"=>[
|
|
411
|
+
@report["data"]["exception"]["description"].should include({"title"=>"Error expanding the run_list:", "sections"=>[{"Unexpected Error:" => "RSpec::Mocks::Mock: Object not found"}]})
|
|
398
412
|
end
|
|
399
413
|
|
|
400
414
|
end
|
|
401
415
|
|
|
416
|
+
context "when new_resource does not have a cookbook_name" do
|
|
417
|
+
before do
|
|
418
|
+
@bad_resource = Chef::Resource::File.new("/tmp/a-file.txt")
|
|
419
|
+
@bad_resource.cookbook_name = nil
|
|
420
|
+
|
|
421
|
+
@resource_reporter.resource_action_start(@bad_resource, :create)
|
|
422
|
+
@resource_reporter.resource_current_state_loaded(@bad_resource, :create, @current_resource)
|
|
423
|
+
@resource_reporter.resource_updated(@bad_resource, :create)
|
|
424
|
+
@resource_reporter.resource_completed(@bad_resource)
|
|
425
|
+
@run_status.stop_clock
|
|
426
|
+
@report = @resource_reporter.prepare_run_data
|
|
427
|
+
@first_update_report = @report["resources"].first
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
it "includes an updated resource's initial state" do
|
|
431
|
+
@first_update_report["before"].should == @current_resource.state
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
it "includes an updated resource's final state" do
|
|
435
|
+
@first_update_report["after"].should == @new_resource.state
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
it "includes the resource's name" do
|
|
439
|
+
@first_update_report["name"].should == @new_resource.name
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
it "includes the resource's id attribute" do
|
|
443
|
+
@first_update_report["id"].should == @new_resource.identity
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
it "includes the elapsed time for the resource to converge" do
|
|
447
|
+
# TODO: API takes integer number of milliseconds as a string. This
|
|
448
|
+
# should be an int.
|
|
449
|
+
@first_update_report.should have_key("duration")
|
|
450
|
+
@first_update_report["duration"].to_i.should be_within(100).of(0)
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
it "includes the action executed by the resource" do
|
|
454
|
+
# TODO: rename as "action"
|
|
455
|
+
@first_update_report["result"].should == "create"
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
it "does not include a cookbook name for the resource" do
|
|
459
|
+
@first_update_report.should_not have_key("cookbook_name")
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
it "does not include a cookbook version for the resource" do
|
|
463
|
+
@first_update_report.should_not have_key("cookbook_version")
|
|
464
|
+
end
|
|
465
|
+
end
|
|
466
|
+
|
|
402
467
|
end
|
|
403
468
|
|
|
404
469
|
describe "when updating resource history on the server" do
|
|
405
470
|
before do
|
|
471
|
+
@resource_reporter.run_started(@run_status)
|
|
472
|
+
@run_status.start_clock
|
|
406
473
|
end
|
|
407
474
|
|
|
408
475
|
context "when the server does not support storing resource history" do
|
|
@@ -411,24 +478,26 @@ describe Chef::ResourceReporter do
|
|
|
411
478
|
@response = Net::HTTPNotFound.new("a response body", "404", "Not Found")
|
|
412
479
|
@error = Net::HTTPServerException.new("404 message", @response)
|
|
413
480
|
@rest_client.should_receive(:post_rest).
|
|
414
|
-
with("reports/nodes/spitfire/runs", {:action => :
|
|
481
|
+
with("reports/nodes/spitfire/runs", {:action => :start, :run_id => @run_id,
|
|
482
|
+
:start_time => @start_time.to_s},
|
|
483
|
+
{'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION}).
|
|
415
484
|
and_raise(@error)
|
|
416
485
|
end
|
|
417
486
|
|
|
418
487
|
it "assumes the feature is not enabled" do
|
|
419
|
-
@resource_reporter.
|
|
488
|
+
@resource_reporter.run_started(@run_status)
|
|
420
489
|
@resource_reporter.reporting_enabled?.should be_false
|
|
421
490
|
end
|
|
422
491
|
|
|
423
492
|
it "does not send a resource report to the server" do
|
|
424
|
-
@resource_reporter.
|
|
493
|
+
@resource_reporter.run_started(@run_status)
|
|
425
494
|
@rest_client.should_not_receive(:post_rest)
|
|
426
495
|
@resource_reporter.run_completed(@node)
|
|
427
496
|
end
|
|
428
497
|
|
|
429
498
|
it "prints an error about the 404" do
|
|
430
499
|
Chef::Log.should_receive(:debug).with(/404/)
|
|
431
|
-
@resource_reporter.
|
|
500
|
+
@resource_reporter.run_started(@run_status)
|
|
432
501
|
end
|
|
433
502
|
|
|
434
503
|
end
|
|
@@ -439,24 +508,25 @@ describe Chef::ResourceReporter do
|
|
|
439
508
|
@response = Net::HTTPInternalServerError.new("a response body", "500", "Internal Server Error")
|
|
440
509
|
@error = Net::HTTPServerException.new("500 message", @response)
|
|
441
510
|
@rest_client.should_receive(:post_rest).
|
|
442
|
-
with("reports/nodes/spitfire/runs", {:action => :
|
|
511
|
+
with("reports/nodes/spitfire/runs", {:action => :start, :run_id => @run_id, :start_time => @start_time.to_s},
|
|
512
|
+
{'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION}).
|
|
443
513
|
and_raise(@error)
|
|
444
514
|
end
|
|
445
515
|
|
|
446
516
|
it "assumes the feature is not enabled" do
|
|
447
|
-
@resource_reporter.
|
|
517
|
+
@resource_reporter.run_started(@run_status)
|
|
448
518
|
@resource_reporter.reporting_enabled?.should be_false
|
|
449
519
|
end
|
|
450
520
|
|
|
451
521
|
it "does not send a resource report to the server" do
|
|
452
|
-
@resource_reporter.
|
|
522
|
+
@resource_reporter.run_started(@run_status)
|
|
453
523
|
@rest_client.should_not_receive(:post_rest)
|
|
454
524
|
@resource_reporter.run_completed(@node)
|
|
455
525
|
end
|
|
456
526
|
|
|
457
527
|
it "prints an error about the error" do
|
|
458
528
|
Chef::Log.should_receive(:info).with(/500/)
|
|
459
|
-
@resource_reporter.
|
|
529
|
+
@resource_reporter.run_started(@run_status)
|
|
460
530
|
end
|
|
461
531
|
end
|
|
462
532
|
|
|
@@ -468,7 +538,8 @@ describe Chef::ResourceReporter do
|
|
|
468
538
|
@response = Net::HTTPInternalServerError.new("a response body", "500", "Internal Server Error")
|
|
469
539
|
@error = Net::HTTPServerException.new("500 message", @response)
|
|
470
540
|
@rest_client.should_receive(:post_rest).
|
|
471
|
-
with("reports/nodes/spitfire/runs", {:action => :
|
|
541
|
+
with("reports/nodes/spitfire/runs", {:action => :start, :run_id => @run_id, :start_time => @start_time.to_s},
|
|
542
|
+
{'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION}).
|
|
472
543
|
and_raise(@error)
|
|
473
544
|
end
|
|
474
545
|
|
|
@@ -479,23 +550,23 @@ describe Chef::ResourceReporter do
|
|
|
479
550
|
it "fails the run and prints an message about the error" do
|
|
480
551
|
Chef::Log.should_receive(:error).with(/500/)
|
|
481
552
|
lambda {
|
|
482
|
-
@resource_reporter.
|
|
553
|
+
@resource_reporter.run_started(@run_status)
|
|
483
554
|
}.should raise_error(Net::HTTPServerException)
|
|
484
555
|
end
|
|
485
556
|
end
|
|
486
557
|
|
|
487
558
|
context "after creating the run history document" do
|
|
488
559
|
before do
|
|
489
|
-
response = {"uri"=>"https://example.com/reports/nodes/spitfire/runs
|
|
560
|
+
response = {"uri"=>"https://example.com/reports/nodes/spitfire/runs/@run_id"}
|
|
490
561
|
@rest_client.should_receive(:post_rest).
|
|
491
|
-
with("reports/nodes/spitfire/runs", {:action => :
|
|
562
|
+
with("reports/nodes/spitfire/runs", {:action => :start, :run_id => @run_id, :start_time => @start_time.to_s},
|
|
563
|
+
{'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION}).
|
|
492
564
|
and_return(response)
|
|
493
|
-
|
|
494
|
-
@resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
|
|
565
|
+
@resource_reporter.run_started(@run_status)
|
|
495
566
|
end
|
|
496
567
|
|
|
497
568
|
it "creates a run document on the server at the start of the run" do
|
|
498
|
-
@resource_reporter.run_id.should ==
|
|
569
|
+
@resource_reporter.run_id.should == @run_id
|
|
499
570
|
end
|
|
500
571
|
|
|
501
572
|
it "updates the run document with resource updates at the end of the run" do
|
|
@@ -504,19 +575,22 @@ describe Chef::ResourceReporter do
|
|
|
504
575
|
@resource_reporter.resource_current_state_loaded(@new_resource, :create, @current_resource)
|
|
505
576
|
@resource_reporter.resource_updated(@new_resource, :create)
|
|
506
577
|
|
|
578
|
+
@resource_reporter.stub!(:end_time).and_return(@end_time)
|
|
507
579
|
@expected_data = @resource_reporter.prepare_run_data
|
|
508
580
|
|
|
509
581
|
post_url = "https://chef_server/example_url"
|
|
510
582
|
response = {"result"=>"ok"}
|
|
511
583
|
|
|
512
584
|
@rest_client.should_receive(:create_url).
|
|
513
|
-
with("reports/nodes/spitfire/runs
|
|
585
|
+
with("reports/nodes/spitfire/runs/#{@run_id}").
|
|
514
586
|
ordered.
|
|
515
587
|
and_return(post_url)
|
|
516
588
|
@rest_client.should_receive(:raw_http_request).ordered do |method, url, headers, data|
|
|
517
589
|
method.should eq(:POST)
|
|
518
590
|
url.should eq(post_url)
|
|
519
|
-
headers.should eq({'Content-Encoding' => 'gzip'
|
|
591
|
+
headers.should eq({'Content-Encoding' => 'gzip',
|
|
592
|
+
'X-Ops-Reporting-Protocol-Version' => Chef::ResourceReporter::PROTOCOL_VERSION
|
|
593
|
+
})
|
|
520
594
|
data_stream = Zlib::GzipReader.new(StringIO.new(data))
|
|
521
595
|
data = data_stream.read
|
|
522
596
|
data.should eq(@expected_data.to_json)
|
|
@@ -526,66 +600,5 @@ describe Chef::ResourceReporter do
|
|
|
526
600
|
@resource_reporter.run_completed(@node)
|
|
527
601
|
end
|
|
528
602
|
end
|
|
529
|
-
|
|
530
|
-
context "after creating the run history document when summary_only is set to true" do
|
|
531
|
-
before do
|
|
532
|
-
response = {"uri"=>"https://example.com/reports/nodes/spitfire/runs/ABC123", "summary_only"=>"true"}
|
|
533
|
-
@rest_client.should_receive(:post_rest).
|
|
534
|
-
with("reports/nodes/spitfire/runs", {:action => :begin}).
|
|
535
|
-
and_return(response)
|
|
536
|
-
|
|
537
|
-
@resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
|
|
538
|
-
end
|
|
539
|
-
|
|
540
|
-
it "enables summary only reporting" do
|
|
541
|
-
@resource_reporter.summary_only.should == "true"
|
|
542
|
-
end
|
|
543
|
-
|
|
544
|
-
it "updates the run document with resource updates at the end of the run" do
|
|
545
|
-
# update some resources...
|
|
546
|
-
@resource_reporter.resource_action_start(@new_resource, :create)
|
|
547
|
-
@resource_reporter.resource_current_state_loaded(@new_resource, :create, @current_resource)
|
|
548
|
-
@resource_reporter.resource_updated(@new_resource, :create)
|
|
549
|
-
|
|
550
|
-
post_url = "reports/nodes/spitfire/runs/ABC123"
|
|
551
|
-
response = {"result"=>"ok"}
|
|
552
|
-
|
|
553
|
-
@rest_client.should_receive(:post_rest).ordered do |url, data|
|
|
554
|
-
url.should eq(post_url)
|
|
555
|
-
data.should have_key("action")
|
|
556
|
-
data["action"].should == "end"
|
|
557
|
-
data.should have_key("status")
|
|
558
|
-
data.should have_key("resources")
|
|
559
|
-
data["resources"].should == []
|
|
560
|
-
data.should have_key("total_res_count")
|
|
561
|
-
data["total_res_count"].should == "1"
|
|
562
|
-
data.should have_key("data")
|
|
563
|
-
data["data"].should == {}
|
|
564
|
-
data.should have_key("updated_res_count")
|
|
565
|
-
data["updated_res_count"].should == "0"
|
|
566
|
-
data.should have_key("post_size")
|
|
567
|
-
response
|
|
568
|
-
end
|
|
569
|
-
|
|
570
|
-
@resource_reporter.run_completed(@node)
|
|
571
|
-
end
|
|
572
|
-
end
|
|
573
|
-
|
|
574
|
-
context "after creating the run history document when summary_only is set to false" do
|
|
575
|
-
before do
|
|
576
|
-
response = {"uri"=>"https://example.com/reports/nodes/spitfire/runs/ABC123", "summary_only"=>"false"}
|
|
577
|
-
@rest_client.should_receive(:post_rest).
|
|
578
|
-
with("reports/nodes/spitfire/runs", {:action => :begin}).
|
|
579
|
-
and_return(response)
|
|
580
|
-
|
|
581
|
-
@resource_reporter.node_load_completed(@node, :expanded_run_list, :config)
|
|
582
|
-
end
|
|
583
|
-
|
|
584
|
-
it "disables summary_only reporting" do
|
|
585
|
-
@resource_reporter.summary_only.should == "false"
|
|
586
|
-
end
|
|
587
|
-
end
|
|
588
|
-
|
|
589
603
|
end
|
|
590
|
-
|
|
591
604
|
end
|