chef 10.34.6-x86-mingw32 → 11.6.2-x86-mingw32
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.
- checksums.yaml +5 -13
- data/CONTRIBUTING.md +155 -0
- data/README.md +89 -0
- data/Rakefile +18 -1
- data/bin/chef-apply +25 -0
- data/bin/chef-service-manager +37 -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 +4 -4
- data/distro/common/html/chef-solr.8.html +5 -5
- 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 +4 -4
- data/distro/common/html/knife-data-bag.1.html +4 -4
- data/distro/common/html/knife-environment.1.html +4 -4
- 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 +0 -99
- 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 +1 -1
- data/distro/common/man/man1/knife-data-bag.1 +1 -1
- data/distro/common/man/man1/knife-environment.1 +0 -168
- 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 +1 -1
- 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 +6 -4
- data/distro/windows/service_manager.rb +2 -146
- data/lib/chef.rb +3 -6
- data/lib/chef/api_client.rb +20 -130
- data/lib/chef/api_client/registration.rb +126 -0
- data/lib/chef/application.rb +68 -18
- data/lib/chef/application/apply.rb +162 -0
- data/lib/chef/application/client.rb +37 -22
- data/lib/chef/application/knife.rb +2 -4
- data/lib/chef/application/solo.rb +27 -13
- data/lib/chef/application/windows_service.rb +114 -54
- data/lib/chef/application/windows_service_manager.rb +179 -0
- data/lib/chef/applications.rb +1 -0
- data/lib/chef/chef_fs.rb +9 -0
- data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
- data/lib/chef/chef_fs/command_line.rb +284 -0
- 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_pattern.rb +312 -0
- data/lib/chef/chef_fs/file_system.rb +426 -0
- 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_dir.rb +47 -0
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
- 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 +60 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
- 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 +90 -0
- data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
- data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
- 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 +31 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
- data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
- 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 +113 -0
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
- data/lib/chef/chef_fs/knife.rb +116 -0
- data/lib/chef/chef_fs/parallelizer.rb +129 -0
- data/lib/chef/chef_fs/path_utils.rb +90 -0
- data/lib/chef/chef_fs/raw_request.rb +79 -0
- data/lib/chef/client.rb +111 -34
- data/lib/chef/config.rb +111 -102
- data/lib/chef/cookbook/chefignore.rb +2 -1
- data/lib/chef/cookbook/metadata.rb +0 -2
- data/lib/chef/cookbook/syntax_check.rb +76 -14
- data/lib/chef/cookbook_loader.rb +39 -26
- data/lib/chef/cookbook_uploader.rb +16 -9
- data/lib/chef/cookbook_version.rb +2 -410
- data/lib/chef/daemon.rb +24 -19
- data/lib/chef/data_bag.rb +20 -104
- data/lib/chef/data_bag_item.rb +2 -65
- 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/digester.rb +73 -0
- data/lib/chef/dsl.rb +6 -0
- data/lib/chef/dsl/data_query.rb +71 -0
- data/lib/chef/dsl/include_attribute.rb +63 -0
- data/lib/chef/dsl/include_recipe.rb +45 -0
- data/lib/chef/dsl/platform_introspection.rb +218 -0
- data/lib/chef/dsl/recipe.rb +87 -0
- data/lib/chef/dsl/registry_helper.rb +59 -0
- data/lib/chef/encrypted_data_bag_item.rb +171 -24
- data/lib/chef/environment.rb +39 -179
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +107 -8
- 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/base.rb +4 -1
- 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/resource_failure_inspector.rb +8 -0
- data/lib/chef/json_compat.rb +15 -14
- data/lib/chef/knife.rb +99 -41
- data/lib/chef/knife/bootstrap.rb +46 -2
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
- data/lib/chef/knife/client_show.rb +2 -5
- data/lib/chef/knife/configure.rb +19 -17
- data/lib/chef/knife/cookbook_create.rb +6 -5
- data/lib/chef/knife/cookbook_download.rb +13 -5
- data/lib/chef/knife/cookbook_metadata.rb +1 -0
- data/lib/chef/knife/cookbook_site_share.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +4 -2
- data/lib/chef/knife/cookbook_upload.rb +4 -4
- data/lib/chef/knife/core/bootstrap_context.rb +11 -5
- data/lib/chef/knife/core/generic_presenter.rb +42 -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/subcommand_loader.rb +43 -12
- data/lib/chef/knife/core/text_formatter.rb +23 -37
- data/lib/chef/knife/core/ui.rb +34 -13
- data/lib/chef/knife/delete.rb +106 -0
- data/lib/chef/knife/deps.rb +139 -0
- data/lib/chef/knife/diff.rb +63 -0
- data/lib/chef/knife/download.rb +63 -0
- data/lib/chef/knife/edit.rb +76 -0
- data/lib/chef/knife/environment_show.rb +2 -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 +153 -0
- 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 +64 -0
- data/lib/chef/knife/role_show.rb +2 -4
- data/lib/chef/knife/search.rb +45 -28
- data/lib/chef/knife/show.rb +55 -0
- data/lib/chef/knife/ssh.rb +14 -2
- data/lib/chef/knife/upload.rb +69 -0
- data/lib/chef/knife/user_create.rb +93 -0
- data/lib/chef/knife/user_delete.rb +46 -0
- data/lib/chef/knife/user_edit.rb +53 -0
- data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
- data/lib/chef/knife/user_reregister.rb +59 -0
- data/lib/chef/knife/user_show.rb +49 -0
- data/lib/chef/knife/xargs.rb +265 -0
- data/lib/chef/log.rb +2 -2
- data/lib/chef/mixin/checksum.rb +3 -3
- data/lib/chef/mixin/deep_merge.rb +78 -194
- data/lib/chef/mixin/deprecation.rb +35 -0
- data/lib/chef/mixin/file_class.rb +0 -9
- data/lib/chef/mixin/language.rb +22 -223
- data/lib/chef/mixin/language_include_attribute.rb +10 -36
- data/lib/chef/mixin/language_include_recipe.rb +7 -33
- data/lib/chef/mixin/params_validate.rb +0 -3
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
- data/lib/chef/mixin/securable.rb +32 -7
- data/lib/chef/mixin/template.rb +156 -26
- data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
- data/lib/chef/mixins.rb +1 -5
- data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
- data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
- data/lib/chef/monkey_patches/net_http.rb +0 -34
- data/lib/chef/monkey_patches/securerandom.rb +44 -0
- data/lib/chef/monologger.rb +93 -0
- data/lib/chef/node.rb +139 -308
- data/lib/chef/node/attribute.rb +367 -473
- data/lib/chef/node/attribute_collections.rb +206 -0
- data/lib/chef/node/immutable_collections.rb +186 -0
- data/lib/chef/platform.rb +4 -496
- data/lib/chef/platform/provider_mapping.rb +529 -0
- data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
- data/lib/chef/provider.rb +14 -58
- data/lib/chef/provider/batch.rb +35 -0
- data/lib/chef/provider/breakpoint.rb +6 -6
- data/lib/chef/provider/cookbook_file.rb +11 -80
- data/lib/chef/provider/cookbook_file/content.rb +49 -0
- data/lib/chef/provider/deploy.rb +26 -21
- data/lib/chef/provider/deploy/revision.rb +27 -0
- data/lib/chef/provider/directory.rb +12 -18
- data/lib/chef/provider/execute.rb +22 -5
- data/lib/chef/provider/file.rb +297 -248
- data/lib/chef/provider/file/content.rb +39 -0
- data/lib/chef/provider/git.rb +76 -43
- 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/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 +12 -3
- data/lib/chef/provider/lwrp_base.rb +150 -0
- 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/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +4 -1
- data/lib/chef/provider/package/smartos.rb +47 -36
- data/lib/chef/provider/package/zypper.rb +45 -55
- data/lib/chef/provider/powershell_script.rb +77 -0
- data/lib/chef/provider/registry_key.rb +156 -0
- data/lib/chef/provider/remote_directory.rb +6 -5
- data/lib/chef/provider/remote_file.rb +13 -100
- 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/ruby_block.rb +5 -2
- data/lib/chef/provider/script.rb +14 -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 +29 -81
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/service/solaris.rb +6 -5
- data/lib/chef/provider/template.rb +16 -81
- data/lib/chef/provider/template/content.rb +61 -0
- 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 +50 -54
- data/lib/chef/provider/windows_script.rb +73 -0
- data/lib/chef/providers.rb +18 -1
- data/lib/chef/recipe.rb +14 -8
- data/lib/chef/resource.rb +52 -146
- data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
- 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/group.rb +1 -11
- data/lib/chef/resource/http_request.rb +2 -1
- data/lib/chef/resource/link.rb +17 -0
- data/lib/chef/resource/lwrp_base.rb +132 -0
- data/lib/chef/resource/mount.rb +39 -13
- data/lib/chef/resource/powershell_script.rb +31 -0
- 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 +62 -25
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/service.rb +14 -0
- data/lib/chef/resource/template.rb +145 -0
- data/lib/chef/resource/user.rb +0 -18
- data/lib/chef/resource/windows_script.rb +62 -0
- data/lib/chef/resource_collection.rb +69 -31
- data/lib/chef/resource_reporter.rb +81 -52
- data/lib/chef/resources.rb +4 -1
- data/lib/chef/rest.rb +55 -127
- data/lib/chef/rest/auth_credentials.rb +4 -20
- data/lib/chef/rest/rest_request.rb +7 -8
- 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 +1 -16
- data/lib/chef/run_lock.rb +96 -0
- data/lib/chef/runner.rb +28 -6
- data/lib/chef/sandbox.rb +15 -148
- data/lib/chef/scan_access_control.rb +8 -5
- data/lib/chef/search/query.rb +2 -2
- 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} +15 -13
- data/lib/chef/shell_out.rb +7 -0
- data/lib/chef/user.rb +182 -0
- 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_group.rb +1 -5
- 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/{index_queue.rb → version_constraint/platform.rb} +11 -14
- data/lib/chef/win32/api/file.rb +8 -2
- data/lib/chef/win32/api/security.rb +45 -1
- data/lib/chef/win32/registry.rb +382 -0
- data/lib/chef/win32/security.rb +19 -0
- 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/attributes/default.rb +10 -9
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- 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_subcommand/test_yourself.rb +8 -0
- 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/null_config.rb +1 -0
- data/spec/data/partial_one.erb +1 -0
- data/spec/data/remote_file/nyan_cat.png.gz +0 -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/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/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 +10 -0
- data/spec/functional/dsl/registry_helper_spec.rb +63 -0
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
- data/spec/functional/knife/exec_spec.rb +3 -3
- data/spec/functional/knife/smoke_test.rb +34 -0
- data/spec/functional/knife/ssh_spec.rb +5 -1
- 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 +15 -9
- data/spec/functional/resource/deploy_revision_spec.rb +180 -0
- data/spec/functional/resource/directory_spec.rb +5 -1
- data/spec/functional/resource/file_spec.rb +71 -21
- data/spec/functional/resource/git_spec.rb +259 -0
- data/spec/functional/resource/link_spec.rb +424 -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 +576 -0
- data/spec/functional/resource/remote_directory_spec.rb +143 -37
- data/spec/functional/resource/remote_file_spec.rb +99 -13
- data/spec/functional/resource/template_spec.rb +180 -3
- data/spec/functional/resource/user_spec.rb +547 -0
- data/spec/functional/run_lock_spec.rb +243 -0
- data/spec/functional/shell_spec.rb +102 -0
- data/spec/functional/win32/registry_helper_spec.rb +632 -0
- data/spec/functional/win32/security_spec.rb +37 -0
- 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 +49 -13
- data/spec/stress/win32/security_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +33 -3
- data/spec/support/lib/chef/resource/cat.rb +3 -5
- data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
- data/spec/support/lib/chef/resource/zen_master.rb +8 -10
- data/spec/support/platform_helpers.rb +46 -13
- data/spec/support/platforms/win32/spec_service.rb +59 -0
- data/spec/support/shared/functional/diff_disabled.rb +10 -0
- data/spec/support/shared/functional/directory_resource.rb +129 -38
- data/spec/support/shared/functional/file_resource.rb +837 -71
- data/spec/support/shared/functional/securable_resource.rb +189 -58
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
- 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 +70 -0
- data/spec/support/shared/unit/platform_introspector.rb +162 -0
- 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/api_client/registration_spec.rb +172 -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 +16 -14
- data/spec/unit/application/knife_spec.rb +17 -0
- data/spec/unit/application/solo_spec.rb +1 -1
- data/spec/unit/application_spec.rb +113 -3
- 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_spec.rb +135 -0
- data/spec/unit/client_spec.rb +195 -23
- data/spec/unit/config_spec.rb +102 -51
- data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
- data/spec/unit/cookbook_loader_spec.rb +154 -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 +24 -19
- data/spec/unit/data_bag_spec.rb +13 -4
- data/spec/unit/deprecation_spec.rb +86 -0
- 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 +197 -157
- data/spec/unit/environment_spec.rb +94 -126
- data/spec/unit/exceptions_spec.rb +8 -4
- 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 +6 -5
- data/spec/unit/json_compat_spec.rb +8 -0
- data/spec/unit/knife/bootstrap_spec.rb +130 -29
- data/spec/unit/knife/configure_spec.rb +64 -45
- data/spec/unit/knife/cookbook_download_spec.rb +24 -3
- 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 +39 -0
- data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
- data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
- data/spec/unit/knife/core/ui_spec.rb +196 -124
- 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/node_run_list_set_spec.rb +140 -0
- data/spec/unit/knife/ssh_spec.rb +12 -15
- data/spec/unit/knife/status_spec.rb +2 -2
- data/spec/unit/knife/user_create_spec.rb +86 -0
- data/spec/unit/knife/user_delete_spec.rb +39 -0
- data/spec/unit/knife/user_edit_spec.rb +42 -0
- data/spec/unit/knife/user_list_spec.rb +32 -0
- data/spec/unit/knife/user_reregister_spec.rb +53 -0
- data/spec/unit/knife/user_show_spec.rb +41 -0
- data/spec/unit/knife_spec.rb +74 -0
- data/spec/unit/lwrp_spec.rb +102 -60
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/deep_merge_spec.rb +130 -791
- data/spec/unit/mixin/deprecation_spec.rb +23 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -2
- data/spec/unit/mixin/securable_spec.rb +5 -3
- data/spec/unit/mixin/template_spec.rb +145 -14
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
- data/spec/unit/node/attribute_spec.rb +273 -173
- data/spec/unit/node/immutable_collections_spec.rb +139 -0
- data/spec/unit/node_spec.rb +418 -370
- data/spec/unit/platform_spec.rb +21 -8
- data/spec/unit/provider/breakpoint_spec.rb +8 -8
- data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
- data/spec/unit/provider/cookbook_file_spec.rb +26 -187
- 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 +99 -67
- data/spec/unit/provider/env_spec.rb +2 -2
- 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 -475
- data/spec/unit/provider/git_spec.rb +224 -28
- 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 +9 -22
- 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/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/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/rpm_spec.rb +0 -12
- data/spec/unit/provider/package/rubygems_spec.rb +1 -1
- data/spec/unit/provider/package/smartos_spec.rb +3 -2
- data/spec/unit/provider/package/zypper_spec.rb +84 -22
- data/spec/unit/provider/package_spec.rb +7 -9
- data/spec/unit/provider/powershell_spec.rb +38 -0
- data/spec/unit/provider/registry_key_spec.rb +269 -0
- data/spec/unit/provider/remote_directory_spec.rb +7 -7
- 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 -259
- data/spec/unit/provider/route_spec.rb +29 -12
- 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 +176 -207
- 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/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 +11 -11
- data/spec/unit/provider/service_spec.rb +3 -3
- data/spec/unit/provider/subversion_spec.rb +1 -1
- data/spec/unit/provider/template/content_spec.rb +78 -0
- data/spec/unit/provider/template_spec.rb +52 -160
- data/spec/unit/provider/user/dscl_spec.rb +285 -681
- data/spec/unit/provider/user/solaris_spec.rb +39 -373
- data/spec/unit/provider/user/useradd_spec.rb +12 -379
- data/spec/unit/provider/user_spec.rb +1 -1
- data/spec/unit/recipe_spec.rb +10 -8
- data/spec/unit/registry_helper_spec.rb +376 -0
- 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 -11
- data/spec/unit/resource/powershell_spec.rb +48 -0
- data/spec/unit/resource/registry_key_spec.rb +171 -0
- data/spec/unit/resource/remote_file_spec.rb +63 -25
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +7 -3
- data/spec/unit/resource/script_spec.rb +13 -36
- data/spec/unit/resource/service_spec.rb +11 -0
- 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 +197 -5
- data/spec/unit/rest/auth_credentials_spec.rb +4 -21
- data/spec/unit/rest_spec.rb +134 -284
- data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -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 +102 -3
- data/spec/unit/scan_access_control_spec.rb +8 -6
- 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} +16 -58
- data/spec/unit/shell_out_spec.rb +18 -0
- data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
- data/spec/unit/user_spec.rb +255 -0
- 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 +493 -264
- 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/dir.rb +0 -36
- 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/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/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/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
@@ -0,0 +1,243 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
|
18
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
19
|
+
require 'chef/client'
|
20
|
+
|
21
|
+
describe Chef::RunLock do
|
22
|
+
|
23
|
+
# This behavior is believed to work on windows, but the tests use UNIX APIs.
|
24
|
+
describe "when locking the chef-client run", :unix_only => true do
|
25
|
+
|
26
|
+
##
|
27
|
+
# Lockfile location and helpers
|
28
|
+
|
29
|
+
let(:random_temp_root) do
|
30
|
+
Kernel.srand(Time.now.to_i + Process.pid)
|
31
|
+
"/tmp/#{Kernel.rand(Time.now.to_i + Process.pid)}"
|
32
|
+
end
|
33
|
+
|
34
|
+
let(:file_cache_path){ "/var/chef/cache" }
|
35
|
+
let(:lockfile){ "#{random_temp_root}/this/long/path/does/not/exist/chef-client-running.pid" }
|
36
|
+
|
37
|
+
# make sure to start with a clean slate.
|
38
|
+
before(:each){ FileUtils.rm_r(random_temp_root) if File.exist?(random_temp_root) }
|
39
|
+
after(:each){ FileUtils.rm_r(random_temp_root) }
|
40
|
+
|
41
|
+
def wait_on_lock
|
42
|
+
tries = 0
|
43
|
+
until File.exist?(lockfile)
|
44
|
+
raise "Lockfile never created, abandoning test" if tries > 10
|
45
|
+
tries += 1
|
46
|
+
sleep 0.1
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# Side channel via a pipe allows child processes to send errors to the parent
|
52
|
+
|
53
|
+
# Don't lazy create the pipe or else we might not share it with subprocesses
|
54
|
+
let!(:error_pipe) do
|
55
|
+
r,w = IO.pipe
|
56
|
+
w.sync = true
|
57
|
+
[r,w]
|
58
|
+
end
|
59
|
+
|
60
|
+
let(:error_read) { error_pipe[0] }
|
61
|
+
let(:error_write) { error_pipe[1] }
|
62
|
+
|
63
|
+
after do
|
64
|
+
error_read.close unless error_read.closed?
|
65
|
+
error_write.close unless error_write.closed?
|
66
|
+
end
|
67
|
+
|
68
|
+
# Send a RuntimeError from the child process to the parent process. Also
|
69
|
+
# prints error to $stdout, just in case something goes wrong with the error
|
70
|
+
# marshaling stuff.
|
71
|
+
def send_side_channel_error(message)
|
72
|
+
$stderr.puts(message)
|
73
|
+
$stderr.puts(caller)
|
74
|
+
e = RuntimeError.new(message)
|
75
|
+
error_write.print(Marshal.dump(e))
|
76
|
+
end
|
77
|
+
|
78
|
+
# Read the error (if any) from the error channel. If a marhaled error is
|
79
|
+
# present, it is unmarshaled and raised (which will fail the test)
|
80
|
+
def raise_side_channel_error!
|
81
|
+
error_write.close
|
82
|
+
err = error_read.read
|
83
|
+
error_read.close
|
84
|
+
begin
|
85
|
+
# ArgumentError from Marshal.load indicates no data, which we assume
|
86
|
+
# means no error in child process.
|
87
|
+
raise Marshal.load(err)
|
88
|
+
rescue ArgumentError
|
89
|
+
nil
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
##
|
94
|
+
# Interprocess synchronization via a pipe. This allows us to control the
|
95
|
+
# state of the processes competing over the lock without relying on sleep.
|
96
|
+
|
97
|
+
let!(:sync_pipe) do
|
98
|
+
r,w = IO.pipe
|
99
|
+
w.sync = true
|
100
|
+
[r,w]
|
101
|
+
end
|
102
|
+
let(:sync_read) { sync_pipe[0] }
|
103
|
+
let(:sync_write) { sync_pipe[1] }
|
104
|
+
|
105
|
+
after do
|
106
|
+
sync_read.close unless sync_read.closed?
|
107
|
+
sync_write.close unless sync_write.closed?
|
108
|
+
end
|
109
|
+
|
110
|
+
# Wait on synchronization signal. If not received within the timeout, an
|
111
|
+
# error is sent via the error channel, and the process exits.
|
112
|
+
def sync_wait
|
113
|
+
if IO.select([sync_read], nil, nil, 20).nil?
|
114
|
+
# timeout reading from the sync pipe.
|
115
|
+
send_side_channel_error("Error syncing processes in run lock test (timeout)")
|
116
|
+
exit!(1)
|
117
|
+
else
|
118
|
+
sync_read.getc
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# Sends a character in the sync pipe, which wakes ("unlocks") another
|
123
|
+
# process that is waiting on the sync signal
|
124
|
+
def sync_send
|
125
|
+
sync_write.putc("!")
|
126
|
+
sync_write.flush
|
127
|
+
end
|
128
|
+
|
129
|
+
##
|
130
|
+
# IPC to record test results in a pipe. Tests can read pipe contents to
|
131
|
+
# check that operations occur in the expected order.
|
132
|
+
|
133
|
+
let!(:results_pipe) do
|
134
|
+
r,w = IO.pipe
|
135
|
+
w.sync = true
|
136
|
+
[r,w]
|
137
|
+
end
|
138
|
+
let(:results_read) { results_pipe[0] }
|
139
|
+
let(:results_write) { results_pipe[1] }
|
140
|
+
|
141
|
+
after do
|
142
|
+
results_read.close unless results_read.closed?
|
143
|
+
results_write.close unless results_write.closed?
|
144
|
+
end
|
145
|
+
|
146
|
+
# writes the message to the results pipe for later checking.
|
147
|
+
# note that nothing accounts for the pipe filling and waiting forever on a
|
148
|
+
# read or write call, so don't put too much data in.
|
149
|
+
def record(message)
|
150
|
+
results_write.puts(message)
|
151
|
+
results_write.flush
|
152
|
+
end
|
153
|
+
|
154
|
+
def results
|
155
|
+
results_write.flush
|
156
|
+
results_write.close
|
157
|
+
message = results_read.read
|
158
|
+
results_read.close
|
159
|
+
message
|
160
|
+
end
|
161
|
+
|
162
|
+
##
|
163
|
+
# Run lock is the system under test
|
164
|
+
let!(:run_lock) { Chef::RunLock.new(:file_cache_path => file_cache_path, :lockfile => lockfile) }
|
165
|
+
|
166
|
+
it "creates the full path to the lockfile" do
|
167
|
+
lambda { run_lock.acquire }.should_not raise_error(Errno::ENOENT)
|
168
|
+
File.should exist(lockfile)
|
169
|
+
end
|
170
|
+
|
171
|
+
it "sets FD_CLOEXEC on the lockfile", :supports_cloexec => true do
|
172
|
+
run_lock.acquire
|
173
|
+
(run_lock.runlock.fcntl(Fcntl::F_GETFD, 0) & Fcntl::FD_CLOEXEC).should == Fcntl::FD_CLOEXEC
|
174
|
+
end
|
175
|
+
|
176
|
+
it "allows only one chef client run per lockfile" do
|
177
|
+
# First process, gets the lock and keeps it.
|
178
|
+
p1 = fork do
|
179
|
+
run_lock.acquire
|
180
|
+
record "p1 has lock"
|
181
|
+
# Wait until the other process is trying to get the lock:
|
182
|
+
sync_wait
|
183
|
+
# sleep a little bit to make process p2 wait on the lock
|
184
|
+
sleep 2
|
185
|
+
record "p1 releasing lock"
|
186
|
+
run_lock.release
|
187
|
+
exit!(0)
|
188
|
+
end
|
189
|
+
|
190
|
+
# Wait until p1 creates the lockfile
|
191
|
+
wait_on_lock
|
192
|
+
|
193
|
+
p2 = fork do
|
194
|
+
# inform process p1 that we're trying to get the lock
|
195
|
+
sync_send
|
196
|
+
run_lock.acquire
|
197
|
+
record "p2 has lock"
|
198
|
+
run_lock.release
|
199
|
+
exit!(0)
|
200
|
+
end
|
201
|
+
|
202
|
+
Process.waitpid2(p1)
|
203
|
+
Process.waitpid2(p2)
|
204
|
+
|
205
|
+
raise_side_channel_error!
|
206
|
+
|
207
|
+
expected=<<-E
|
208
|
+
p1 has lock
|
209
|
+
p1 releasing lock
|
210
|
+
p2 has lock
|
211
|
+
E
|
212
|
+
results.should == expected
|
213
|
+
end
|
214
|
+
|
215
|
+
it "clears the lock if the process dies unexpectedly" do
|
216
|
+
p1 = fork do
|
217
|
+
run_lock.acquire
|
218
|
+
record "p1 has lock"
|
219
|
+
sleep 60
|
220
|
+
record "p1 still has lock"
|
221
|
+
exit! 1
|
222
|
+
end
|
223
|
+
|
224
|
+
wait_on_lock
|
225
|
+
Process.kill(:KILL, p1)
|
226
|
+
Process.waitpid2(p1)
|
227
|
+
|
228
|
+
|
229
|
+
p2 = fork do
|
230
|
+
run_lock.acquire
|
231
|
+
record "p2 has lock"
|
232
|
+
run_lock.release
|
233
|
+
exit! 0
|
234
|
+
end
|
235
|
+
|
236
|
+
Process.waitpid2(p2)
|
237
|
+
|
238
|
+
results.should =~ /p2 has lock\Z/
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
end
|
243
|
+
|
@@ -0,0 +1,102 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'spec_helper'
|
20
|
+
require 'chef/version'
|
21
|
+
require 'chef/shell'
|
22
|
+
|
23
|
+
describe Shell do
|
24
|
+
|
25
|
+
# chef-shell's unit tests are by necessity very mock-heavy, and frequently do
|
26
|
+
# not catch cases where chef-shell fails to boot because of changes in
|
27
|
+
# chef/client.rb
|
28
|
+
describe "smoke tests", :unix_only => true do
|
29
|
+
|
30
|
+
def read_until(io, expected_value)
|
31
|
+
start = Time.new
|
32
|
+
buffer = ""
|
33
|
+
until buffer.include?(expected_value)
|
34
|
+
begin
|
35
|
+
buffer << io.read_nonblock(1)
|
36
|
+
rescue Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::EIO, EOFError
|
37
|
+
sleep 0.01
|
38
|
+
end
|
39
|
+
if Time.new - start > 30
|
40
|
+
STDERR.puts "did not read expected value `#{expected_value}' within 15s"
|
41
|
+
STDERR.puts "Buffer so far: `#{buffer}'"
|
42
|
+
break
|
43
|
+
end
|
44
|
+
end
|
45
|
+
buffer
|
46
|
+
end
|
47
|
+
|
48
|
+
def wait_or_die(pid)
|
49
|
+
start = Time.new
|
50
|
+
|
51
|
+
until exitstatus = Process.waitpid2(pid, Process::WNOHANG)
|
52
|
+
if Time.new - start > 5
|
53
|
+
STDERR.puts("chef-shell tty did not exit cleanly, killing it")
|
54
|
+
Process.kill(:KILL, pid)
|
55
|
+
end
|
56
|
+
sleep 0.01
|
57
|
+
end
|
58
|
+
exitstatus[1]
|
59
|
+
end
|
60
|
+
|
61
|
+
def run_chef_shell_with(options)
|
62
|
+
# Windows ruby installs don't (always?) have PTY,
|
63
|
+
# so hide the require here
|
64
|
+
require 'pty'
|
65
|
+
config = File.expand_path("shef-config.rb", CHEF_SPEC_DATA)
|
66
|
+
path_to_chef_shell = File.expand_path("../../../bin/chef-shell", __FILE__)
|
67
|
+
reader, writer, pid = PTY.spawn("#{path_to_chef_shell} -c #{config} #{options}")
|
68
|
+
read_until(reader, "chef >")
|
69
|
+
yield reader, writer if block_given?
|
70
|
+
writer.puts('"done"')
|
71
|
+
output = read_until(reader, '=> "done"')
|
72
|
+
writer.print("exit\n")
|
73
|
+
read_until(reader, "exit")
|
74
|
+
read_until(reader, "\n")
|
75
|
+
read_until(reader, "\n")
|
76
|
+
writer.close
|
77
|
+
|
78
|
+
exitstatus = wait_or_die(pid)
|
79
|
+
|
80
|
+
[output, exitstatus]
|
81
|
+
rescue PTY::ChildExited => e
|
82
|
+
[output, e.status]
|
83
|
+
end
|
84
|
+
|
85
|
+
it "boots correctly with -lauto" do
|
86
|
+
output, exitstatus = run_chef_shell_with("-lauto")
|
87
|
+
exitstatus.should be_success
|
88
|
+
end
|
89
|
+
|
90
|
+
it "sets the log_level from the command line" do
|
91
|
+
output, exitstatus = run_chef_shell_with("-lfatal") do |out, keyboard|
|
92
|
+
show_log_level_code = %q[puts "===#{Chef::Log.level}==="]
|
93
|
+
keyboard.puts(show_log_level_code)
|
94
|
+
read_until(out, show_log_level_code)
|
95
|
+
end
|
96
|
+
output.should include("===fatal===")
|
97
|
+
exitstatus.should be_success
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
@@ -0,0 +1,632 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Prajakta Purohit (<prajakta@opscode.com>)
|
3
|
+
# Author:: Lamont Granquist (<lamont@opscode.com>)
|
4
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
require 'spec_helper'
|
21
|
+
require 'chef/win32/registry'
|
22
|
+
|
23
|
+
describe Chef::Resource::RegistryKey, :unix_only do
|
24
|
+
before(:all) do
|
25
|
+
events = Chef::EventDispatch::Dispatcher.new
|
26
|
+
node = Chef::Node.new
|
27
|
+
ohai = Ohai::System.new
|
28
|
+
ohai.all_plugins
|
29
|
+
node.consume_external_attrs(ohai.data,{})
|
30
|
+
run_context = Chef::RunContext.new(node, {}, events)
|
31
|
+
@resource = Chef::Resource::RegistryKey.new("HKCU\\Software", run_context)
|
32
|
+
end
|
33
|
+
context "when load_current_resource is run on a non-windows node" do
|
34
|
+
it "throws an exception because you don't have a windows registry (derp)" do
|
35
|
+
@resource.key("HKCU\\Software\\Opscode")
|
36
|
+
@resource.values([{:name=>"Color", :type=>:string, :data=>"Orange"}])
|
37
|
+
lambda{@resource.run_action(:create)}.should raise_error(Chef::Exceptions::Win32NotWindows)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'Chef::Win32::Registry', :windows_only do
|
43
|
+
|
44
|
+
before(:all) do
|
45
|
+
#Create a registry item
|
46
|
+
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root"
|
47
|
+
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Branch"
|
48
|
+
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Branch\\Flower"
|
49
|
+
::Win32::Registry::HKEY_CURRENT_USER.open('Software\\Root', Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
50
|
+
reg['RootType1', Win32::Registry::REG_SZ] = 'fibrous'
|
51
|
+
reg.write('Roots', Win32::Registry::REG_MULTI_SZ, ["strong roots", "healthy tree"])
|
52
|
+
end
|
53
|
+
::Win32::Registry::HKEY_CURRENT_USER.open('Software\\Root\\Branch', Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
54
|
+
reg['Strong', Win32::Registry::REG_SZ] = 'bird nest'
|
55
|
+
end
|
56
|
+
::Win32::Registry::HKEY_CURRENT_USER.open('Software\\Root\\Branch\\Flower', Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
57
|
+
reg['Petals', Win32::Registry::REG_MULTI_SZ] = ["Pink", "Delicate"]
|
58
|
+
end
|
59
|
+
|
60
|
+
#Create the node with ohai data
|
61
|
+
events = Chef::EventDispatch::Dispatcher.new
|
62
|
+
@node = Chef::Node.new
|
63
|
+
ohai = Ohai::System.new
|
64
|
+
ohai.all_plugins
|
65
|
+
@node.consume_external_attrs(ohai.data,{})
|
66
|
+
@run_context = Chef::RunContext.new(@node, {}, events)
|
67
|
+
|
68
|
+
#Create a registry object that has access ot the node previously created
|
69
|
+
@registry = Chef::Win32::Registry.new(@run_context)
|
70
|
+
end
|
71
|
+
|
72
|
+
#Delete what is left of the registry key-values previously created
|
73
|
+
after(:all) do
|
74
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software") do |reg|
|
75
|
+
reg.delete_key("Root", true)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Server Versions
|
80
|
+
# it "succeeds if server versiion is 2003R2, 2008, 2008R2, 2012" do
|
81
|
+
# end
|
82
|
+
# it "falis if the server versions are anything else" do
|
83
|
+
# end
|
84
|
+
|
85
|
+
describe "hive_exists?" do
|
86
|
+
it "returns true if the hive exists" do
|
87
|
+
@registry.hive_exists?("HKCU\\Software\\Root").should == true
|
88
|
+
end
|
89
|
+
|
90
|
+
it "returns false if the hive does not exist" do
|
91
|
+
hive = @registry.hive_exists?("LYRU\\Software\\Root").should == false
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "key_exists?" do
|
96
|
+
it "returns true if the key path exists" do
|
97
|
+
@registry.key_exists?("HKCU\\Software\\Root\\Branch\\Flower").should == true
|
98
|
+
end
|
99
|
+
|
100
|
+
it "returns false if the key path does not exist" do
|
101
|
+
@registry.key_exists?("HKCU\\Software\\Branch\\Flower").should == false
|
102
|
+
end
|
103
|
+
|
104
|
+
it "throws an exception if the hive does not exist" do
|
105
|
+
lambda {@registry.key_exists?("JKLM\\Software\\Branch\\Flower")}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "key_exists!" do
|
110
|
+
it "returns true if the key path exists" do
|
111
|
+
@registry.key_exists!("HKCU\\Software\\Root\\Branch\\Flower").should == true
|
112
|
+
end
|
113
|
+
|
114
|
+
it "throws an exception if the key path does not exist" do
|
115
|
+
lambda {@registry.key_exists!("HKCU\\Software\\Branch\\Flower")}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "throws an exception if the hive does not exist" do
|
119
|
+
lambda {@registry.key_exists!("JKLM\\Software\\Branch\\Flower")}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe "value_exists?" do
|
124
|
+
it "throws an exception if the hive does not exist" do
|
125
|
+
lambda {@registry.value_exists?("JKLM\\Software\\Branch\\Flower", {:name=>"Petals"})}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
126
|
+
end
|
127
|
+
it "throws an exception if the key does not exist" do
|
128
|
+
lambda {@registry.value_exists?("HKCU\\Software\\Branch\\Flower", {:name=>"Petals"})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
129
|
+
end
|
130
|
+
it "returns true if the value exists" do
|
131
|
+
@registry.value_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals"}).should == true
|
132
|
+
end
|
133
|
+
it "returns false if the value does not exist" do
|
134
|
+
@registry.value_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"FOOBAR"}).should == false
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "value_exists!" do
|
139
|
+
it "throws an exception if the hive does not exist" do
|
140
|
+
lambda {@registry.value_exists!("JKLM\\Software\\Branch\\Flower", {:name=>"Petals"})}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
141
|
+
end
|
142
|
+
it "throws an exception if the key does not exist" do
|
143
|
+
lambda {@registry.value_exists!("HKCU\\Software\\Branch\\Flower", {:name=>"Petals"})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
144
|
+
end
|
145
|
+
it "returns true if the value exists" do
|
146
|
+
@registry.value_exists!("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals"}).should == true
|
147
|
+
end
|
148
|
+
it "throws an exception if the value does not exist" do
|
149
|
+
lambda {@registry.value_exists!("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"FOOBAR"})}.should raise_error(Chef::Exceptions::Win32RegValueMissing)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe "data_exists?" do
|
154
|
+
it "throws an exception if the hive does not exist" do
|
155
|
+
lambda {@registry.data_exists?("JKLM\\Software\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Pink", "Delicate"]})}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
156
|
+
end
|
157
|
+
it "throws an exception if the key does not exist" do
|
158
|
+
lambda {@registry.data_exists?("HKCU\\Software\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Pink", "Delicate"]})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
159
|
+
end
|
160
|
+
it "returns true if all the data matches" do
|
161
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Pink", "Delicate"]}).should == true
|
162
|
+
end
|
163
|
+
it "returns false if the name does not exist" do
|
164
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"slateP", :type=>:multi_string, :data=>["Pink", "Delicate"]}).should == false
|
165
|
+
end
|
166
|
+
it "returns false if the types do not match" do
|
167
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:string, :data=>"Pink"}).should == false
|
168
|
+
end
|
169
|
+
it "returns false if the data does not match" do
|
170
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Mauve", "Delicate"]}).should == false
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe "data_exists!" do
|
175
|
+
it "throws an exception if the hive does not exist" do
|
176
|
+
lambda {@registry.data_exists!("JKLM\\Software\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Pink", "Delicate"]})}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
177
|
+
end
|
178
|
+
it "throws an exception if the key does not exist" do
|
179
|
+
lambda {@registry.data_exists!("HKCU\\Software\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Pink", "Delicate"]})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
180
|
+
end
|
181
|
+
it "returns true if all the data matches" do
|
182
|
+
@registry.data_exists!("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Pink", "Delicate"]}).should == true
|
183
|
+
end
|
184
|
+
it "throws an exception if the name does not exist" do
|
185
|
+
lambda {@registry.data_exists!("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"slateP", :type=>:multi_string, :data=>["Pink", "Delicate"]})}.should raise_error(Chef::Exceptions::Win32RegDataMissing)
|
186
|
+
end
|
187
|
+
it "throws an exception if the types do not match" do
|
188
|
+
lambda {@registry.data_exists!("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:string, :data=>"Pink"})}.should raise_error(Chef::Exceptions::Win32RegDataMissing)
|
189
|
+
end
|
190
|
+
it "throws an exception if the data does not match" do
|
191
|
+
lambda {@registry.data_exists!("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Mauve", "Delicate"]})}.should raise_error(Chef::Exceptions::Win32RegDataMissing)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
describe "get_values" do
|
196
|
+
it "returns all values for a key if it exists" do
|
197
|
+
values = @registry.get_values("HKCU\\Software\\Root")
|
198
|
+
values.should be_an_instance_of Array
|
199
|
+
values.should == [{:name=>"RootType1", :type=>:string, :data=>"fibrous"},
|
200
|
+
{:name=>"Roots", :type=>:multi_string, :data=>["strong roots", "healthy tree"]}]
|
201
|
+
end
|
202
|
+
|
203
|
+
it "throws an exception if the key does not exist" do
|
204
|
+
lambda {@registry.get_values("HKCU\\Software\\Branch\\Flower")}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
205
|
+
end
|
206
|
+
|
207
|
+
it "throws an exception if the hive does not exist" do
|
208
|
+
lambda {@registry.get_values("JKLM\\Software\\Branch\\Flower")}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe "set_value" do
|
213
|
+
it "updates a value if the key, value exist and type matches and value different" do
|
214
|
+
@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Yellow", "Changed Color"]}).should == true
|
215
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Yellow", "Changed Color"]}).should == true
|
216
|
+
end
|
217
|
+
|
218
|
+
it "updates a value if the type does match and the values are different" do
|
219
|
+
@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:string, :data=>"Yellow"}).should == true
|
220
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:string, :data=>"Yellow"}).should == true
|
221
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Yellow", "Changed Color"]}).should == false
|
222
|
+
end
|
223
|
+
|
224
|
+
it "creates a value if key exists and value does not" do
|
225
|
+
@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Stamen", :type=>:multi_string, :data=>["Yellow", "Changed Color"]}).should == true
|
226
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Stamen", :type=>:multi_string, :data=>["Yellow", "Changed Color"]}).should == true
|
227
|
+
end
|
228
|
+
|
229
|
+
it "does nothing if data,type and name parameters for the value are same" do
|
230
|
+
@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Stamen", :type=>:multi_string, :data=>["Yellow", "Changed Color"]}).should == false
|
231
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"Stamen", :type=>:multi_string, :data=>["Yellow", "Changed Color"]}).should == true
|
232
|
+
end
|
233
|
+
|
234
|
+
it "throws an exception if the key does not exist" do
|
235
|
+
lambda {@registry.set_value("HKCU\\Software\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Yellow", "Changed Color"]})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
236
|
+
end
|
237
|
+
|
238
|
+
it "throws an exception if the hive does not exist" do
|
239
|
+
lambda {@registry.set_value("JKLM\\Software\\Root\\Branch\\Flower", {:name=>"Petals", :type=>:multi_string, :data=>["Yellow", "Changed Color"]})}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
240
|
+
end
|
241
|
+
|
242
|
+
# we are validating that the data gets .to_i called on it when type is a :dword
|
243
|
+
|
244
|
+
it "casts an integer string given as a dword into an integer" do
|
245
|
+
@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldBe32767", :type=>:dword, :data=>"32767"}).should == true
|
246
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldBe32767", :type=>:dword, :data=>32767}).should == true
|
247
|
+
end
|
248
|
+
|
249
|
+
it "casts a nonsense string given as a dword into zero" do
|
250
|
+
@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldBeZero", :type=>:dword, :data=>"whatdoesthisdo"}).should == true
|
251
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldBeZero", :type=>:dword, :data=>0}).should == true
|
252
|
+
end
|
253
|
+
|
254
|
+
it "throws an exception when trying to cast an array to an int for a dword" do
|
255
|
+
lambda {@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldThrow", :type=>:dword, :data=>["one","two"]})}.should raise_error
|
256
|
+
end
|
257
|
+
|
258
|
+
# we are validating that the data gets .to_s called on it when type is a :string
|
259
|
+
|
260
|
+
it "stores the string representation of an array into a string if you pass it an array" do
|
261
|
+
@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldBePainful", :type=>:string, :data=>["one","two"]}).should == true
|
262
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldBePainful", :type=>:string, :data=>'["one", "two"]'}).should == true
|
263
|
+
end
|
264
|
+
|
265
|
+
it "stores the string representation of a number into a string if you pass it an number" do
|
266
|
+
@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldBe65535", :type=>:string, :data=>65535}).should == true
|
267
|
+
@registry.data_exists?("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldBe65535", :type=>:string, :data=>"65535"}).should == true
|
268
|
+
end
|
269
|
+
|
270
|
+
# we are validating that the data gets .to_a called on it when type is a :multi_string
|
271
|
+
|
272
|
+
it "throws an exception when a multi-string is passed a number" do
|
273
|
+
lambda {@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldThrow", :type=>:multi_string, :data=>65535})}.should raise_error
|
274
|
+
end
|
275
|
+
|
276
|
+
it "throws an exception when a multi-string is passed a string" do
|
277
|
+
lambda {@registry.set_value("HKCU\\Software\\Root\\Branch\\Flower", {:name=>"ShouldBeWat", :type=>:multi_string, :data=>"foo"})}.should raise_error
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
describe "create_key" do
|
282
|
+
before(:all) do
|
283
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software\\Root") do |reg|
|
284
|
+
begin
|
285
|
+
reg.delete_key("Trunk", true)
|
286
|
+
rescue
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
it "throws an exception if the path has missing keys but recursive set to false" do
|
292
|
+
lambda {@registry.create_key("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker", false)}.should raise_error(Chef::Exceptions::Win32RegNoRecursive)
|
293
|
+
@registry.key_exists?("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker").should == false
|
294
|
+
end
|
295
|
+
|
296
|
+
it "creates the key_path if the keys were missing but recursive was set to true" do
|
297
|
+
@registry.create_key("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker", true).should == true
|
298
|
+
@registry.key_exists?("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker").should == true
|
299
|
+
end
|
300
|
+
|
301
|
+
it "does nothing if the key already exists" do
|
302
|
+
@registry.create_key("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker", false).should == true
|
303
|
+
@registry.key_exists?("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker").should == true
|
304
|
+
end
|
305
|
+
|
306
|
+
it "throws an exception of the hive does not exist" do
|
307
|
+
lambda {@registry.create_key("JKLM\\Software\\Root\\Trunk\\Peck\\Woodpecker", false)}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
describe "delete_value" do
|
312
|
+
before(:all) do
|
313
|
+
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Trunk\\Peck\\Woodpecker"
|
314
|
+
::Win32::Registry::HKEY_CURRENT_USER.open('Software\\Root\\Trunk\\Peck\\Woodpecker', Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
315
|
+
reg['Peter', Win32::Registry::REG_SZ] = 'Tiny'
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
it "deletes values if the value exists" do
|
320
|
+
@registry.delete_value("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker", {:name=>"Peter", :type=>:string, :data=>"Tiny"}).should == true
|
321
|
+
@registry.value_exists?("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker", {:name=>"Peter", :type=>:string, :data=>"Tiny"}).should == false
|
322
|
+
end
|
323
|
+
|
324
|
+
it "does nothing if value does not exist" do
|
325
|
+
@registry.delete_value("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker", {:name=>"Peter", :type=>:string, :data=>"Tiny"}).should == true
|
326
|
+
@registry.value_exists?("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker", {:name=>"Peter", :type=>:string, :data=>"Tiny"}).should == false
|
327
|
+
end
|
328
|
+
|
329
|
+
it "throws an exception if the key does not exist?" do
|
330
|
+
lambda {@registry.delete_value("HKCU\\Software\\Trunk\\Peck\\Woodpecker", {:name=>"Peter", :type=>:string, :data=>"Tiny"})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
331
|
+
end
|
332
|
+
|
333
|
+
it "throws an exception if the hive does not exist" do
|
334
|
+
lambda {@registry.delete_value("JKLM\\Software\\Root\\Trunk\\Peck\\Woodpecker", {:name=>"Peter", :type=>:string, :data=>"Tiny"})}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
describe "delete_key" do
|
339
|
+
before (:all) do
|
340
|
+
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Branch\\Fruit"
|
341
|
+
::Win32::Registry::HKEY_CURRENT_USER.open('Software\\Root\\Branch\\Fruit', Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
342
|
+
reg['Apple', Win32::Registry::REG_MULTI_SZ] = ["Red", "Juicy"]
|
343
|
+
end
|
344
|
+
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Trunk\\Peck\\Woodpecker"
|
345
|
+
::Win32::Registry::HKEY_CURRENT_USER.open('Software\\Root\\Trunk\\Peck\\Woodpecker', Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
346
|
+
reg['Peter', Win32::Registry::REG_SZ] = 'Tiny'
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
it "deletes a key if it has no subkeys" do
|
351
|
+
@registry.delete_key("HKCU\\Software\\Root\\Branch\\Fruit", false).should == true
|
352
|
+
@registry.key_exists?("HKCU\\Software\\Root\\Branch\\Fruit").should == false
|
353
|
+
end
|
354
|
+
|
355
|
+
it "throws an exception if key to delete has subkeys and recursive is false" do
|
356
|
+
lambda { @registry.delete_key("HKCU\\Software\\Root\\Trunk", false) }.should raise_error(Chef::Exceptions::Win32RegNoRecursive)
|
357
|
+
@registry.key_exists?("HKCU\\Software\\Root\\Trunk\\Peck\\Woodpecker").should == true
|
358
|
+
end
|
359
|
+
|
360
|
+
it "deletes a key if it has subkeys and recursive true" do
|
361
|
+
@registry.delete_key("HKCU\\Software\\Root\\Trunk", true).should == true
|
362
|
+
@registry.key_exists?("HKCU\\Software\\Root\\Trunk").should == false
|
363
|
+
end
|
364
|
+
|
365
|
+
it "does nothing if the key does not exist" do
|
366
|
+
@registry.delete_key("HKCU\\Software\\Root\\Trunk", true).should == true
|
367
|
+
@registry.key_exists?("HKCU\\Software\\Root\\Trunk").should == false
|
368
|
+
end
|
369
|
+
|
370
|
+
it "throws an exception if the hive does not exist" do
|
371
|
+
lambda {@registry.delete_key("JKLM\\Software\\Root\\Branch\\Flower", false)}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
describe "has_subkeys?" do
|
376
|
+
before(:all) do
|
377
|
+
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Trunk"
|
378
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software\\Root\\Trunk") do |reg|
|
379
|
+
begin
|
380
|
+
reg.delete_key("Red", true)
|
381
|
+
rescue
|
382
|
+
end
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
it "throws an exception if the hive was missing" do
|
387
|
+
lambda {@registry.has_subkeys?("LMNO\\Software\\Root")}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
388
|
+
end
|
389
|
+
|
390
|
+
it "throws an exception if the key is missing" do
|
391
|
+
lambda {@registry.has_subkeys?("HKCU\\Software\\Root\\Trunk\\Red")}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
392
|
+
end
|
393
|
+
|
394
|
+
it "returns true if the key has subkeys" do
|
395
|
+
@registry.has_subkeys?("HKCU\\Software\\Root").should == true
|
396
|
+
end
|
397
|
+
|
398
|
+
it "returns false if the key has no subkeys" do
|
399
|
+
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Trunk\\Red"
|
400
|
+
@registry.has_subkeys?("HKCU\\Software\\Root\\Trunk\\Red").should == false
|
401
|
+
end
|
402
|
+
end
|
403
|
+
|
404
|
+
describe "get_subkeys" do
|
405
|
+
it "throws an exception if the key is missing" do
|
406
|
+
lambda {@registry.get_subkeys("HKCU\\Software\\Trunk\\Red")}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
407
|
+
end
|
408
|
+
it "throws an exception if the hive does not exist" do
|
409
|
+
lambda {@registry.get_subkeys("JKLM\\Software\\Root")}.should raise_error(Chef::Exceptions::Win32RegHiveMissing)
|
410
|
+
end
|
411
|
+
it "returns the array of subkeys for a given key" do
|
412
|
+
subkeys = @registry.get_subkeys("HKCU\\Software\\Root")
|
413
|
+
reg_subkeys = []
|
414
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software\\Root", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
415
|
+
reg.each_key{|name| reg_subkeys << name}
|
416
|
+
end
|
417
|
+
reg_subkeys.should == subkeys
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
describe "architecture" do
|
422
|
+
describe "on 32-bit" do
|
423
|
+
before(:all) do
|
424
|
+
@saved_kernel_machine = @node.automatic_attrs[:kernel][:machine]
|
425
|
+
@node.automatic_attrs[:kernel][:machine] = :i386
|
426
|
+
end
|
427
|
+
|
428
|
+
after(:all) do
|
429
|
+
@node.automatic_attrs[:kernel][:machine] = @saved_kernel_machine
|
430
|
+
end
|
431
|
+
|
432
|
+
context "registry constructor" do
|
433
|
+
it "throws an exception if requested architecture is 64bit but running on 32bit" do
|
434
|
+
lambda {Chef::Win32::Registry.new(@run_context, :x86_64)}.should raise_error(Chef::Exceptions::Win32RegArchitectureIncorrect)
|
435
|
+
end
|
436
|
+
|
437
|
+
it "can correctly set the requested architecture to 32-bit" do
|
438
|
+
@r = Chef::Win32::Registry.new(@run_context, :i386)
|
439
|
+
@r.architecture.should == :i386
|
440
|
+
@r.registry_system_architecture.should == 0x0200
|
441
|
+
end
|
442
|
+
|
443
|
+
it "can correctly set the requested architecture to :machine" do
|
444
|
+
@r = Chef::Win32::Registry.new(@run_context, :machine)
|
445
|
+
@r.architecture.should == :machine
|
446
|
+
@r.registry_system_architecture.should == 0x0200
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
context "architecture setter" do
|
451
|
+
it "throws an exception if requested architecture is 64bit but running on 32bit" do
|
452
|
+
lambda {@registry.architecture = :x86_64}.should raise_error(Chef::Exceptions::Win32RegArchitectureIncorrect)
|
453
|
+
end
|
454
|
+
|
455
|
+
it "sets the requested architecture to :machine if passed :machine" do
|
456
|
+
@registry.architecture = :machine
|
457
|
+
@registry.architecture.should == :machine
|
458
|
+
@registry.registry_system_architecture.should == 0x0200
|
459
|
+
end
|
460
|
+
|
461
|
+
it "sets the requested architecture to 32-bit if passed i386 as a string" do
|
462
|
+
@registry.architecture = :i386
|
463
|
+
@registry.architecture.should == :i386
|
464
|
+
@registry.registry_system_architecture.should == 0x0200
|
465
|
+
end
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
describe "on 64-bit" do
|
470
|
+
before(:all) do
|
471
|
+
@saved_kernel_machine = @node.automatic_attrs[:kernel][:machine]
|
472
|
+
@node.automatic_attrs[:kernel][:machine] = :x86_64
|
473
|
+
end
|
474
|
+
|
475
|
+
after(:all) do
|
476
|
+
@node.automatic_attrs[:kernel][:machine] = @saved_kernel_machine
|
477
|
+
end
|
478
|
+
|
479
|
+
context "registry constructor" do
|
480
|
+
it "can correctly set the requested architecture to 32-bit" do
|
481
|
+
@r = Chef::Win32::Registry.new(@run_context, :i386)
|
482
|
+
@r.architecture.should == :i386
|
483
|
+
@r.registry_system_architecture.should == 0x0200
|
484
|
+
end
|
485
|
+
|
486
|
+
it "can correctly set the requested architecture to 64-bit" do
|
487
|
+
@r = Chef::Win32::Registry.new(@run_context, :x86_64)
|
488
|
+
@r.architecture.should == :x86_64
|
489
|
+
@r.registry_system_architecture.should == 0x0100
|
490
|
+
end
|
491
|
+
|
492
|
+
it "can correctly set the requested architecture to :machine" do
|
493
|
+
@r = Chef::Win32::Registry.new(@run_context, :machine)
|
494
|
+
@r.architecture.should == :machine
|
495
|
+
@r.registry_system_architecture.should == 0x0100
|
496
|
+
end
|
497
|
+
end
|
498
|
+
|
499
|
+
context "architecture setter" do
|
500
|
+
it "sets the requested architecture to 64-bit if passed 64-bit" do
|
501
|
+
@registry.architecture = :x86_64
|
502
|
+
@registry.architecture.should == :x86_64
|
503
|
+
@registry.registry_system_architecture.should == 0x0100
|
504
|
+
end
|
505
|
+
|
506
|
+
it "sets the requested architecture to :machine if passed :machine" do
|
507
|
+
@registry.architecture = :machine
|
508
|
+
@registry.architecture.should == :machine
|
509
|
+
@registry.registry_system_architecture.should == 0x0100
|
510
|
+
end
|
511
|
+
|
512
|
+
it "sets the requested architecture to 32-bit if passed 32-bit" do
|
513
|
+
@registry.architecture = :i386
|
514
|
+
@registry.architecture.should == :i386
|
515
|
+
@registry.registry_system_architecture.should == 0x0200
|
516
|
+
end
|
517
|
+
end
|
518
|
+
end
|
519
|
+
|
520
|
+
describe "when running on an actual 64-bit server", :windows64_only do
|
521
|
+
before(:all) do
|
522
|
+
begin
|
523
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.open("Software\\Root", ::Win32::Registry::KEY_ALL_ACCESS | 0x0100) do |reg|
|
524
|
+
reg.delete_key("Trunk", true)
|
525
|
+
end
|
526
|
+
rescue
|
527
|
+
end
|
528
|
+
begin
|
529
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.open("Software\\Root", ::Win32::Registry::KEY_ALL_ACCESS | 0x0200) do |reg|
|
530
|
+
reg.delete_key("Trunk", true)
|
531
|
+
end
|
532
|
+
rescue
|
533
|
+
end
|
534
|
+
# 64-bit
|
535
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.create("Software\\Root\\Mauve", ::Win32::Registry::KEY_ALL_ACCESS | 0x0100)
|
536
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.open('Software\\Root\\Mauve', Win32::Registry::KEY_ALL_ACCESS | 0x0100) do |reg|
|
537
|
+
reg['Alert', Win32::Registry::REG_SZ] = 'Universal'
|
538
|
+
end
|
539
|
+
# 32-bit
|
540
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.create("Software\\Root\\Poosh", ::Win32::Registry::KEY_ALL_ACCESS | 0x0200)
|
541
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.open('Software\\Root\\Poosh', Win32::Registry::KEY_ALL_ACCESS | 0x0200) do |reg|
|
542
|
+
reg['Status', Win32::Registry::REG_SZ] = 'Lost'
|
543
|
+
end
|
544
|
+
end
|
545
|
+
|
546
|
+
after(:all) do
|
547
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.open("Software\\Root", ::Win32::Registry::KEY_ALL_ACCESS | 0x0100) do |reg|
|
548
|
+
reg.delete_key("Trunk", true)
|
549
|
+
end
|
550
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.open("Software\\Root", ::Win32::Registry::KEY_ALL_ACCESS | 0x0200) do |reg|
|
551
|
+
reg.delete_key("Trunk", true)
|
552
|
+
end
|
553
|
+
end
|
554
|
+
|
555
|
+
describe "key_exists?" do
|
556
|
+
it "does not find 64-bit keys in the 32-bit registry" do
|
557
|
+
@registry.architecture=:i386
|
558
|
+
@registry.key_exists?("HKLM\\Software\\Root\\Mauve").should == false
|
559
|
+
end
|
560
|
+
it "finds 32-bit keys in the 32-bit registry" do
|
561
|
+
@registry.architecture=:i386
|
562
|
+
@registry.key_exists?("HKLM\\Software\\Root\\Poosh").should == true
|
563
|
+
end
|
564
|
+
it "does not find 32-bit keys in the 64-bit registry" do
|
565
|
+
@registry.architecture=:x86_64
|
566
|
+
@registry.key_exists?("HKLM\\Software\\Root\\Mauve").should == true
|
567
|
+
end
|
568
|
+
it "finds 64-bit keys in the 64-bit registry" do
|
569
|
+
@registry.architecture=:x86_64
|
570
|
+
@registry.key_exists?("HKLM\\Software\\Root\\Poosh").should == false
|
571
|
+
end
|
572
|
+
end
|
573
|
+
|
574
|
+
describe "value_exists?" do
|
575
|
+
it "does not find 64-bit values in the 32-bit registry" do
|
576
|
+
@registry.architecture=:i386
|
577
|
+
lambda{@registry.value_exists?("HKLM\\Software\\Root\\Mauve", {:name=>"Alert"})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
578
|
+
end
|
579
|
+
it "finds 32-bit values in the 32-bit registry" do
|
580
|
+
@registry.architecture=:i386
|
581
|
+
@registry.value_exists?("HKLM\\Software\\Root\\Poosh", {:name=>"Status"}).should == true
|
582
|
+
end
|
583
|
+
it "does not find 32-bit values in the 64-bit registry" do
|
584
|
+
@registry.architecture=:x86_64
|
585
|
+
@registry.value_exists?("HKLM\\Software\\Root\\Mauve", {:name=>"Alert"}).should == true
|
586
|
+
end
|
587
|
+
it "finds 64-bit values in the 64-bit registry" do
|
588
|
+
@registry.architecture=:x86_64
|
589
|
+
lambda{@registry.value_exists?("HKLM\\Software\\Root\\Poosh", {:name=>"Status"})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
590
|
+
end
|
591
|
+
end
|
592
|
+
|
593
|
+
describe "data_exists?" do
|
594
|
+
it "does not find 64-bit keys in the 32-bit registry" do
|
595
|
+
@registry.architecture=:i386
|
596
|
+
lambda{@registry.data_exists?("HKLM\\Software\\Root\\Mauve", {:name=>"Alert", :type=>:string, :data=>"Universal"})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
597
|
+
end
|
598
|
+
it "finds 32-bit keys in the 32-bit registry" do
|
599
|
+
@registry.architecture=:i386
|
600
|
+
@registry.data_exists?("HKLM\\Software\\Root\\Poosh", {:name=>"Status", :type=>:string, :data=>"Lost"}).should == true
|
601
|
+
end
|
602
|
+
it "does not find 32-bit keys in the 64-bit registry" do
|
603
|
+
@registry.architecture=:x86_64
|
604
|
+
@registry.data_exists?("HKLM\\Software\\Root\\Mauve", {:name=>"Alert", :type=>:string, :data=>"Universal"}).should == true
|
605
|
+
end
|
606
|
+
it "finds 64-bit keys in the 64-bit registry" do
|
607
|
+
@registry.architecture=:x86_64
|
608
|
+
lambda{@registry.data_exists?("HKLM\\Software\\Root\\Poosh", {:name=>"Status", :type=>:string, :data=>"Lost"})}.should raise_error(Chef::Exceptions::Win32RegKeyMissing)
|
609
|
+
end
|
610
|
+
end
|
611
|
+
|
612
|
+
describe "create_key" do
|
613
|
+
it "can create a 32-bit only registry key" do
|
614
|
+
@registry.architecture = :i386
|
615
|
+
@registry.create_key("HKLM\\Software\\Root\\Trunk\\Red", true).should == true
|
616
|
+
@registry.key_exists?("HKLM\\Software\\Root\\Trunk\\Red").should == true
|
617
|
+
@registry.architecture = :x86_64
|
618
|
+
@registry.key_exists?("HKLM\\Software\\Root\\Trunk\\Red").should == false
|
619
|
+
end
|
620
|
+
|
621
|
+
it "can create a 64-bit only registry key" do
|
622
|
+
@registry.architecture = :x86_64
|
623
|
+
@registry.create_key("HKLM\\Software\\Root\\Trunk\\Blue", true).should == true
|
624
|
+
@registry.key_exists?("HKLM\\Software\\Root\\Trunk\\Blue").should == true
|
625
|
+
@registry.architecture = :i386
|
626
|
+
@registry.key_exists?("HKLM\\Software\\Root\\Trunk\\Blue").should == false
|
627
|
+
end
|
628
|
+
end
|
629
|
+
|
630
|
+
end
|
631
|
+
end
|
632
|
+
end
|