chef 12.0.0.alpha.2-x86-mingw32 → 12.0.0.rc.0-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.
- data/CONTRIBUTING.md +9 -0
- data/README.md +1 -1
- data/Rakefile +12 -0
- data/bin/chef-service-manager +1 -1
- data/bin/chef-windows-service +35 -0
- data/distro/common/html/_sources/ctl_chef_server.txt +307 -10
- data/distro/common/html/ctl_chef_client.html +3 -7
- data/distro/common/html/ctl_chef_server.html +609 -41
- data/distro/common/html/ctl_chef_shell.html +2 -2
- data/distro/common/html/ctl_chef_solo.html +1 -1
- data/distro/common/html/index.html +13 -13
- data/distro/common/html/knife.html +10 -10
- data/distro/common/html/knife_bootstrap.html +8 -8
- data/distro/common/html/knife_client.html +12 -12
- data/distro/common/html/knife_common_options.html +7 -7
- data/distro/common/html/knife_configure.html +3 -3
- data/distro/common/html/knife_cookbook.html +19 -19
- data/distro/common/html/knife_cookbook_site.html +28 -28
- data/distro/common/html/knife_data_bag.html +28 -13
- data/distro/common/html/knife_delete.html +2 -2
- data/distro/common/html/knife_deps.html +3 -3
- data/distro/common/html/knife_diff.html +4 -4
- data/distro/common/html/knife_download.html +3 -3
- data/distro/common/html/knife_edit.html +2 -2
- data/distro/common/html/knife_environment.html +14 -14
- data/distro/common/html/knife_exec.html +11 -11
- data/distro/common/html/knife_index_rebuild.html +2 -2
- data/distro/common/html/knife_list.html +3 -3
- data/distro/common/html/knife_node.html +23 -23
- data/distro/common/html/knife_raw.html +4 -4
- data/distro/common/html/knife_recipe_list.html +3 -3
- data/distro/common/html/knife_role.html +11 -11
- data/distro/common/html/knife_search.html +4 -4
- data/distro/common/html/knife_serve.html +3 -3
- data/distro/common/html/knife_show.html +3 -3
- data/distro/common/html/knife_ssh.html +7 -7
- data/distro/common/html/knife_ssl_check.html +7 -7
- data/distro/common/html/knife_ssl_fetch.html +9 -9
- data/distro/common/html/knife_status.html +3 -3
- data/distro/common/html/knife_tag.html +9 -9
- data/distro/common/html/knife_upload.html +3 -3
- data/distro/common/html/knife_user.html +9 -9
- data/distro/common/html/knife_using.html +11 -11
- data/distro/common/html/knife_xargs.html +14 -5
- data/distro/common/html/search.html +2 -2
- data/distro/common/html/searchindex.js +1 -1
- data/distro/common/man/man1/chef-shell.1 +2 -2
- data/distro/common/man/man1/knife-bootstrap.1 +7 -7
- data/distro/common/man/man1/knife-client.1 +10 -10
- data/distro/common/man/man1/knife-configure.1 +5 -5
- data/distro/common/man/man1/knife-cookbook-site.1 +24 -24
- data/distro/common/man/man1/knife-cookbook.1 +12 -12
- data/distro/common/man/man1/knife-data-bag.1 +34 -10
- data/distro/common/man/man1/knife-delete.1 +5 -5
- data/distro/common/man/man1/knife-deps.1 +5 -5
- data/distro/common/man/man1/knife-diff.1 +7 -7
- data/distro/common/man/man1/knife-download.1 +5 -5
- data/distro/common/man/man1/knife-edit.1 +5 -5
- data/distro/common/man/man1/knife-environment.1 +11 -11
- data/distro/common/man/man1/knife-exec.1 +11 -11
- data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
- data/distro/common/man/man1/knife-list.1 +5 -5
- data/distro/common/man/man1/knife-node.1 +16 -16
- data/distro/common/man/man1/knife-raw.1 +6 -6
- data/distro/common/man/man1/knife-recipe-list.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +7 -7
- data/distro/common/man/man1/knife-search.1 +6 -6
- data/distro/common/man/man1/knife-serve.1 +6 -6
- data/distro/common/man/man1/knife-show.1 +5 -5
- data/distro/common/man/man1/knife-ssh.1 +9 -9
- data/distro/common/man/man1/knife-ssl-check.1 +7 -7
- data/distro/common/man/man1/knife-ssl-fetch.1 +9 -9
- data/distro/common/man/man1/knife-status.1 +5 -5
- data/distro/common/man/man1/knife-tag.1 +8 -8
- data/distro/common/man/man1/knife-upload.1 +5 -5
- data/distro/common/man/man1/knife-user.1 +8 -8
- data/distro/common/man/man1/knife-xargs.1 +36 -10
- data/distro/common/man/man1/knife.1 +14 -14
- data/distro/common/man/man8/chef-client.8 +3 -10
- data/distro/common/man/man8/chef-solo.8 +1 -1
- data/ext/win32-eventlog/Rakefile +50 -0
- data/ext/win32-eventlog/chef-log.man +26 -0
- data/lib/chef/application.rb +313 -241
- data/lib/chef/application/apply.rb +10 -8
- data/lib/chef/application/client.rb +58 -33
- data/lib/chef/application/solo.rb +33 -12
- data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
- data/lib/chef/chef_fs/command_line.rb +1 -1
- data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +2 -1
- data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -1
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +2 -1
- data/lib/chef/client.rb +18 -48
- data/lib/chef/config.rb +43 -11
- data/lib/chef/cookbook/cookbook_version_loader.rb +14 -7
- data/lib/chef/cookbook/metadata.rb +81 -38
- data/lib/chef/cookbook/syntax_check.rb +18 -52
- data/lib/chef/cookbook_loader.rb +1 -1
- data/lib/chef/cookbook_version.rb +58 -39
- data/lib/chef/data_bag.rb +2 -2
- data/lib/chef/deprecation/provider/file.rb +2 -1
- data/lib/chef/dsl/data_query.rb +2 -29
- data/lib/chef/dsl/recipe.rb +8 -22
- data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
- data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +1 -1
- data/lib/chef/event_loggers/base.rb +62 -0
- data/lib/chef/event_loggers/windows_eventlog.rb +104 -0
- data/lib/chef/exceptions.rb +18 -1
- data/lib/chef/file_cache.rb +3 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +15 -6
- data/lib/chef/http.rb +20 -13
- data/lib/chef/http/ssl_policies.rb +2 -1
- data/lib/chef/json_compat.rb +9 -3
- data/lib/chef/knife.rb +2 -1
- data/lib/chef/knife/bootstrap.rb +12 -18
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
- data/lib/chef/knife/cookbook_create.rb +1 -1
- data/lib/chef/knife/cookbook_site_share.rb +43 -8
- data/lib/chef/knife/core/bootstrap_context.rb +6 -11
- data/lib/chef/knife/core/object_loader.rb +5 -5
- data/lib/chef/knife/core/status_presenter.rb +156 -0
- data/lib/chef/knife/core/subcommand_loader.rb +6 -5
- data/lib/chef/knife/core/ui.rb +4 -4
- data/lib/chef/knife/data_bag_create.rb +7 -32
- data/lib/chef/knife/data_bag_edit.rb +24 -43
- data/lib/chef/knife/data_bag_from_file.rb +6 -31
- data/lib/chef/knife/data_bag_secret_options.rb +142 -0
- data/lib/chef/knife/data_bag_show.rb +19 -33
- data/lib/chef/knife/node_from_file.rb +9 -8
- data/lib/chef/knife/ssh.rb +0 -7
- data/lib/chef/knife/ssl_check.rb +70 -6
- data/lib/chef/knife/status.rb +11 -58
- data/lib/chef/mixin/command/unix.rb +2 -2
- data/lib/chef/mixin/convert_to_class_name.rb +54 -0
- data/lib/chef/mixin/descendants_tracker.rb +82 -0
- data/lib/chef/mixin/homebrew_user.rb +68 -0
- data/lib/chef/mixin/shell_out.rb +0 -4
- data/lib/chef/mixin/windows_architecture_helper.rb +16 -0
- data/lib/chef/mixin/windows_env_helper.rb +56 -0
- data/lib/chef/node.rb +2 -2
- data/lib/chef/node_map.rb +146 -0
- data/lib/chef/platform/provider_mapping.rb +11 -39
- data/lib/chef/platform/provider_priority_map.rb +80 -0
- data/lib/chef/platform/query_helpers.rb +5 -1
- data/lib/chef/platform/service_helpers.rb +113 -0
- data/lib/chef/provider.rb +24 -0
- data/lib/chef/provider/breakpoint.rb +2 -0
- data/lib/chef/provider/cookbook_file.rb +2 -0
- data/lib/chef/provider/cron.rb +1 -1
- data/lib/chef/provider/cron/unix.rb +13 -9
- data/lib/chef/provider/deploy.rb +3 -2
- data/lib/chef/provider/deploy/revision.rb +4 -2
- data/lib/chef/provider/deploy/timestamped.rb +2 -0
- data/lib/chef/provider/directory.rb +2 -0
- data/lib/chef/provider/dsc_script.rb +179 -0
- data/lib/chef/provider/env.rb +25 -10
- data/lib/chef/provider/env/windows.rb +9 -16
- data/lib/chef/provider/erl_call.rb +2 -0
- data/lib/chef/provider/execute.rb +5 -2
- data/lib/chef/provider/file.rb +2 -0
- data/lib/chef/provider/git.rb +51 -23
- data/lib/chef/provider/group/dscl.rb +2 -2
- data/lib/chef/provider/group/pw.rb +9 -13
- data/lib/chef/provider/http_request.rb +2 -0
- data/lib/chef/provider/link.rb +3 -0
- data/lib/chef/provider/log.rb +2 -0
- data/lib/chef/provider/lwrp_base.rb +11 -9
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/package/aix.rb +2 -0
- data/lib/chef/provider/package/apt.rb +2 -0
- data/lib/chef/provider/package/dpkg.rb +2 -0
- data/lib/chef/provider/package/easy_install.rb +2 -0
- data/lib/chef/provider/package/freebsd/pkg.rb +2 -1
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
- data/lib/chef/provider/package/freebsd/port.rb +1 -9
- data/lib/chef/provider/package/homebrew.rb +127 -0
- data/lib/chef/provider/package/ips.rb +2 -0
- data/lib/chef/provider/package/macports.rb +3 -0
- data/lib/chef/provider/package/pacman.rb +5 -4
- data/lib/chef/provider/package/paludis.rb +4 -2
- data/lib/chef/provider/package/portage.rb +4 -1
- data/lib/chef/provider/package/rpm.rb +2 -0
- data/lib/chef/provider/package/rubygems.rb +4 -0
- data/lib/chef/provider/package/smartos.rb +2 -0
- data/lib/chef/provider/package/solaris.rb +2 -0
- data/lib/chef/provider/package/windows.rb +5 -2
- data/lib/chef/provider/package/yum.rb +2 -0
- data/lib/chef/provider/powershell_script.rb +3 -1
- data/lib/chef/provider/remote_directory.rb +25 -10
- data/lib/chef/provider/route.rb +2 -0
- data/lib/chef/provider/ruby_block.rb +2 -0
- data/lib/chef/provider/script.rb +6 -0
- data/lib/chef/provider/service/aix.rb +128 -0
- data/lib/chef/provider/service/aixinit.rb +117 -0
- data/lib/chef/provider/service/arch.rb +6 -0
- data/lib/chef/provider/service/debian.rb +35 -29
- data/lib/chef/provider/service/freebsd.rb +7 -1
- data/lib/chef/provider/service/gentoo.rb +5 -1
- data/lib/chef/provider/service/init.rb +2 -0
- data/lib/chef/provider/service/insserv.rb +15 -8
- data/lib/chef/provider/service/invokercd.rb +6 -0
- data/lib/chef/provider/service/macosx.rb +4 -1
- data/lib/chef/provider/service/redhat.rb +9 -3
- data/lib/chef/provider/service/simple.rb +2 -0
- data/lib/chef/provider/service/solaris.rb +2 -0
- data/lib/chef/provider/service/systemd.rb +7 -0
- data/lib/chef/provider/service/upstart.rb +7 -0
- data/lib/chef/provider/service/windows.rb +5 -0
- data/lib/chef/provider/subversion.rb +2 -0
- data/lib/chef/provider/template.rb +1 -0
- data/lib/chef/provider/user/dscl.rb +3 -2
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +2 -0
- data/lib/chef/provider_resolver.rb +103 -0
- data/lib/chef/providers.rb +6 -2
- data/lib/chef/recipe.rb +2 -0
- data/lib/chef/resource.rb +69 -78
- data/lib/chef/resource/apt_package.rb +3 -1
- data/lib/chef/resource/bash.rb +1 -0
- data/lib/chef/resource/bff_package.rb +0 -1
- data/lib/chef/resource/breakpoint.rb +1 -1
- data/lib/chef/resource/chef_gem.rb +1 -2
- data/lib/chef/resource/conditional.rb +26 -6
- data/lib/chef/resource/cookbook_file.rb +2 -3
- data/lib/chef/resource/csh.rb +1 -0
- data/lib/chef/resource/deploy.rb +0 -1
- data/lib/chef/resource/deploy_revision.rb +6 -1
- data/lib/chef/resource/directory.rb +1 -2
- data/lib/chef/resource/dpkg_package.rb +2 -1
- data/lib/chef/resource/dsc_script.rb +125 -0
- data/lib/chef/resource/easy_install_package.rb +2 -1
- data/lib/chef/resource/erl_call.rb +1 -0
- data/lib/chef/resource/execute.rb +26 -9
- data/lib/chef/resource/file.rb +1 -3
- data/lib/chef/resource/freebsd_package.rb +10 -23
- data/lib/chef/resource/gem_package.rb +2 -1
- data/lib/chef/resource/git.rb +2 -1
- data/lib/chef/resource/homebrew_package.rb +46 -0
- data/lib/chef/resource/http_request.rb +1 -0
- data/lib/chef/resource/ips_package.rb +3 -1
- data/lib/chef/resource/link.rb +1 -2
- data/lib/chef/resource/log.rb +4 -0
- data/lib/chef/resource/lwrp_base.rb +24 -15
- data/lib/chef/resource/macports_package.rb +3 -1
- data/lib/chef/resource/pacman_package.rb +2 -1
- data/lib/chef/resource/paludis_package.rb +3 -1
- data/lib/chef/resource/perl.rb +1 -0
- data/lib/chef/resource/powershell_script.rb +0 -2
- data/lib/chef/resource/python.rb +1 -1
- data/lib/chef/resource/remote_directory.rb +1 -2
- data/lib/chef/resource/remote_file.rb +1 -1
- data/lib/chef/resource/rpm_package.rb +2 -1
- data/lib/chef/resource/ruby.rb +1 -0
- data/lib/chef/resource/ruby_block.rb +3 -0
- data/lib/chef/resource/script.rb +2 -25
- data/lib/chef/resource/service.rb +0 -4
- data/lib/chef/resource/smartos_package.rb +3 -4
- data/lib/chef/resource/solaris_package.rb +7 -1
- data/lib/chef/resource/subversion.rb +0 -1
- data/lib/chef/resource/template.rb +2 -3
- data/lib/chef/resource/timestamped_deploy.rb +1 -2
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
- data/lib/chef/resource/windows_package.rb +3 -4
- data/lib/chef/resource/windows_script.rb +3 -0
- data/lib/chef/resource/windows_service.rb +2 -2
- data/lib/chef/resource/yum_package.rb +3 -1
- data/lib/chef/resource_collection.rb +50 -227
- data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
- data/lib/chef/resource_collection/resource_list.rb +89 -0
- data/lib/chef/resource_collection/resource_set.rb +170 -0
- data/lib/chef/resources.rb +2 -0
- data/lib/chef/role.rb +1 -1
- data/lib/chef/run_context.rb +5 -1
- data/lib/chef/shell/ext.rb +1 -1
- data/lib/chef/util/backup.rb +3 -2
- data/lib/chef/util/dsc/configuration_generator.rb +115 -0
- data/lib/chef/util/dsc/lcm_output_parser.rb +133 -0
- data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
- data/lib/chef/util/dsc/resource_info.rb +26 -0
- data/lib/chef/util/path_helper.rb +12 -0
- data/lib/chef/util/powershell/cmdlet.rb +136 -0
- data/lib/chef/util/powershell/cmdlet_result.rb +46 -0
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/system.rb +9 -0
- data/lib/chef/win32/version.rb +2 -0
- data/spec/.DS_Store +0 -0
- data/spec/data/.DS_Store +0 -0
- data/spec/data/bootstrap/test-hints.erb +1 -1
- data/spec/data/bootstrap/test.erb +1 -1
- data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
- data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
- data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
- data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
- data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
- data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
- data/spec/data/lwrp/.DS_Store +0 -0
- data/spec/data/lwrp/providers/.DS_Store +0 -0
- data/spec/data/lwrp/providers/buck_passer.rb +9 -2
- data/spec/data/lwrp/resources/.DS_Store +0 -0
- data/spec/data/lwrp/resources/foo.rb +3 -2
- data/spec/data/lwrp_override/.DS_Store +0 -0
- data/spec/data/lwrp_override/providers/.DS_Store +0 -0
- data/spec/data/lwrp_override/providers/buck_passer.rb +5 -10
- data/spec/data/lwrp_override/resources/.DS_Store +0 -0
- data/spec/data/lwrp_override/resources/foo.rb +4 -3
- data/spec/functional/assets/chefinittest +34 -0
- data/spec/functional/assets/testchefsubsys +11 -0
- data/spec/functional/dsl/reboot_pending_spec.rb +19 -16
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +82 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
- data/spec/functional/knife/exec_spec.rb +1 -1
- data/spec/functional/resource/aix_service_spec.rb +136 -0
- data/spec/functional/resource/aixinit_service_spec.rb +211 -0
- data/spec/functional/resource/base.rb +1 -0
- data/spec/functional/resource/batch_spec.rb +4 -11
- data/spec/functional/resource/cron_spec.rb +7 -1
- data/spec/functional/resource/dsc_script_spec.rb +382 -0
- data/spec/functional/resource/env_spec.rb +54 -0
- data/spec/functional/resource/execute_spec.rb +113 -0
- data/spec/functional/resource/file_spec.rb +2 -0
- data/spec/functional/resource/group_spec.rb +7 -4
- data/spec/functional/resource/powershell_spec.rb +198 -185
- data/spec/functional/resource/rpm_spec.rb +5 -4
- data/spec/functional/resource/user/dscl_spec.rb +2 -1
- data/spec/functional/util/path_helper_spec.rb +37 -0
- data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
- data/spec/integration/client/client_spec.rb +1 -1
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
- data/spec/integration/knife/chef_repo_path_spec.rb +1 -1
- data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
- data/spec/integration/knife/chefignore_spec.rb +1 -1
- data/spec/integration/knife/common_options_spec.rb +1 -1
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
- data/spec/integration/knife/delete_spec.rb +1 -1
- data/spec/integration/knife/deps_spec.rb +1 -1
- data/spec/integration/knife/diff_spec.rb +1 -1
- data/spec/integration/knife/download_spec.rb +1 -1
- data/spec/integration/knife/list_spec.rb +1 -1
- data/spec/integration/knife/raw_spec.rb +1 -1
- data/spec/integration/knife/redirection_spec.rb +1 -1
- data/spec/integration/knife/serve_spec.rb +1 -1
- data/spec/integration/knife/show_spec.rb +1 -1
- data/spec/integration/knife/upload_spec.rb +4 -3
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
- data/spec/spec_helper.rb +15 -0
- data/spec/support/chef_helpers.rb +1 -0
- data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
- data/spec/support/lib/chef/resource/zen_follower.rb +1 -7
- data/spec/support/platform_helpers.rb +28 -0
- data/spec/support/shared/functional/file_resource.rb +6 -0
- data/spec/support/shared/functional/windows_script.rb +118 -0
- data/spec/support/shared/integration/integration_helper.rb +5 -2
- data/spec/support/shared/matchers/exit_with_code.rb +28 -0
- data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
- data/spec/support/shared/shared_examples.rb +14 -0
- data/spec/support/shared/unit/execute_resource.rb +0 -7
- data/spec/support/shared/unit/resource/static_provider_resolution.rb +71 -0
- data/spec/support/shared/unit/script_resource.rb +1 -1
- data/spec/support/shared/unit/windows_script_resource.rb +35 -2
- data/spec/tiny_server.rb +1 -2
- data/spec/unit/api_client_spec.rb +5 -1
- data/spec/unit/application/{apply.rb → apply_spec.rb} +13 -5
- data/spec/unit/application/client_spec.rb +106 -13
- data/spec/unit/application/solo_spec.rb +25 -1
- data/spec/unit/client_spec.rb +1 -26
- data/spec/unit/config_fetcher_spec.rb +2 -1
- data/spec/unit/config_spec.rb +91 -2
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +8 -0
- data/spec/unit/cookbook/metadata_spec.rb +43 -6
- data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
- data/spec/unit/cookbook_loader_spec.rb +4 -2
- data/spec/unit/cookbook_version_spec.rb +83 -2
- data/spec/unit/data_bag_item_spec.rb +5 -1
- data/spec/unit/data_bag_spec.rb +6 -1
- data/spec/unit/dsl/data_query_spec.rb +8 -110
- data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +16 -23
- data/spec/unit/environment_spec.rb +6 -2
- data/spec/unit/exceptions_spec.rb +6 -0
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +16 -15
- data/spec/unit/json_compat_spec.rb +12 -2
- data/spec/unit/knife/bootstrap_spec.rb +16 -63
- data/spec/unit/knife/cookbook_site_share_spec.rb +59 -6
- data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -37
- data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -1
- data/spec/unit/knife/core/ui_spec.rb +28 -0
- data/spec/unit/knife/data_bag_create_spec.rb +63 -71
- data/spec/unit/knife/data_bag_edit_spec.rb +83 -49
- data/spec/unit/knife/data_bag_from_file_spec.rb +104 -126
- data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
- data/spec/unit/knife/data_bag_show_spec.rb +74 -72
- data/spec/unit/knife/environment_from_file_spec.rb +3 -2
- data/spec/unit/knife/ssl_check_spec.rb +46 -1
- data/spec/unit/knife/status_spec.rb +1 -2
- data/spec/unit/knife_spec.rb +18 -1
- data/spec/unit/lwrp_spec.rb +29 -8
- data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
- data/spec/unit/node_map_spec.rb +155 -0
- data/spec/unit/node_spec.rb +11 -0
- data/spec/unit/platform/query_helpers_spec.rb +23 -0
- data/spec/unit/platform_spec.rb +23 -0
- data/spec/unit/provider/breakpoint_spec.rb +9 -9
- data/spec/unit/provider/cookbook_file/content_spec.rb +3 -3
- data/spec/unit/provider/cookbook_file_spec.rb +1 -1
- data/spec/unit/provider/cron/unix_spec.rb +78 -60
- data/spec/unit/provider/cron_spec.rb +175 -175
- data/spec/unit/provider/deploy/revision_spec.rb +22 -21
- data/spec/unit/provider/deploy/timestamped_spec.rb +3 -3
- data/spec/unit/provider/deploy_spec.rb +231 -230
- data/spec/unit/provider/directory_spec.rb +55 -55
- data/spec/unit/provider/dsc_script_spec.rb +174 -0
- data/spec/unit/provider/env/windows_spec.rb +70 -34
- data/spec/unit/provider/env_spec.rb +95 -49
- data/spec/unit/provider/erl_call_spec.rb +9 -9
- data/spec/unit/provider/execute_spec.rb +43 -27
- data/spec/unit/provider/file/content_spec.rb +9 -9
- data/spec/unit/provider/file_spec.rb +1 -1
- data/spec/unit/provider/git_spec.rb +221 -159
- data/spec/unit/provider/group/dscl_spec.rb +64 -63
- data/spec/unit/provider/group/gpasswd_spec.rb +14 -14
- data/spec/unit/provider/group/groupadd_spec.rb +33 -33
- data/spec/unit/provider/group/groupmod_spec.rb +23 -23
- data/spec/unit/provider/group/pw_spec.rb +21 -21
- data/spec/unit/provider/group/usermod_spec.rb +20 -20
- data/spec/unit/provider/group/windows_spec.rb +15 -15
- data/spec/unit/provider/group_spec.rb +76 -76
- data/spec/unit/provider/http_request_spec.rb +30 -30
- data/spec/unit/provider/ifconfig/aix_spec.rb +20 -20
- data/spec/unit/provider/ifconfig/debian_spec.rb +25 -9
- data/spec/unit/provider/ifconfig/redhat_spec.rb +13 -13
- data/spec/unit/provider/ifconfig_spec.rb +43 -43
- data/spec/unit/provider/link_spec.rb +60 -60
- data/spec/unit/provider/log_spec.rb +0 -4
- data/spec/unit/provider/mdadm_spec.rb +23 -23
- data/spec/unit/provider/mount/aix_spec.rb +17 -17
- data/spec/unit/provider/mount/mount_spec.rb +115 -119
- data/spec/unit/provider/mount/solaris_spec.rb +72 -72
- data/spec/unit/provider/mount/windows_spec.rb +24 -24
- data/spec/unit/provider/ohai_spec.rb +11 -11
- data/spec/unit/provider/package/aix_spec.rb +34 -34
- data/spec/unit/provider/package/apt_spec.rb +36 -36
- data/spec/unit/provider/package/dpkg_spec.rb +27 -27
- data/spec/unit/provider/package/easy_install_spec.rb +16 -16
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +53 -53
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +24 -24
- data/spec/unit/provider/package/freebsd/port_spec.rb +45 -35
- data/spec/unit/provider/package/homebrew_spec.rb +266 -0
- data/spec/unit/provider/package/ips_spec.rb +34 -34
- data/spec/unit/provider/package/macports_spec.rb +49 -49
- data/spec/unit/provider/package/pacman_spec.rb +35 -39
- data/spec/unit/provider/package/paludis_spec.rb +20 -20
- data/spec/unit/provider/package/portage_spec.rb +38 -38
- data/spec/unit/provider/package/rpm_spec.rb +29 -29
- data/spec/unit/provider/package/rubygems_spec.rb +284 -270
- data/spec/unit/provider/package/smartos_spec.rb +15 -15
- data/spec/unit/provider/package/solaris_spec.rb +35 -35
- data/spec/unit/provider/package/windows/msi_spec.rb +3 -3
- data/spec/unit/provider/package/windows_spec.rb +6 -6
- data/spec/unit/provider/package/yum_spec.rb +416 -416
- data/spec/unit/provider/package/zypper_spec.rb +47 -47
- data/spec/unit/provider/package_spec.rb +107 -107
- data/spec/unit/provider/powershell_spec.rb +1 -1
- data/spec/unit/provider/registry_key_spec.rb +61 -61
- data/spec/unit/provider/remote_directory_spec.rb +36 -36
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +24 -24
- data/spec/unit/provider/remote_file/content_spec.rb +45 -45
- data/spec/unit/provider/remote_file/fetcher_spec.rb +9 -9
- data/spec/unit/provider/remote_file/ftp_spec.rb +32 -32
- data/spec/unit/provider/remote_file/http_spec.rb +44 -44
- data/spec/unit/provider/remote_file/local_file_spec.rb +9 -9
- data/spec/unit/provider/remote_file_spec.rb +3 -3
- data/spec/unit/provider/route_spec.rb +63 -63
- data/spec/unit/provider/ruby_block_spec.rb +4 -4
- data/spec/unit/provider/script_spec.rb +12 -12
- data/spec/unit/provider/service/aix_service_spec.rb +181 -0
- data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
- data/spec/unit/provider/service/arch_service_spec.rb +48 -48
- data/spec/unit/provider/service/debian_service_spec.rb +40 -40
- data/spec/unit/provider/service/gentoo_service_spec.rb +28 -28
- data/spec/unit/provider/service/init_service_spec.rb +39 -39
- data/spec/unit/provider/service/insserv_service_spec.rb +8 -8
- data/spec/unit/provider/service/invokercd_service_spec.rb +35 -35
- data/spec/unit/provider/service/macosx_spec.rb +49 -49
- data/spec/unit/provider/service/redhat_spec.rb +27 -27
- data/spec/unit/provider/service/simple_service_spec.rb +28 -28
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +43 -46
- data/spec/unit/provider/service/systemd_service_spec.rb +63 -63
- data/spec/unit/provider/service/upstart_service_spec.rb +78 -78
- data/spec/unit/provider/service/windows_spec.rb +92 -92
- data/spec/unit/provider/service_spec.rb +40 -40
- data/spec/unit/provider/subversion_spec.rb +80 -80
- data/spec/unit/provider/template/content_spec.rb +9 -9
- data/spec/unit/provider/template_spec.rb +6 -6
- data/spec/unit/provider/user/dscl_spec.rb +170 -167
- data/spec/unit/provider/user/pw_spec.rb +48 -48
- data/spec/unit/provider/user/solaris_spec.rb +8 -8
- data/spec/unit/provider/user/useradd_spec.rb +1 -1
- data/spec/unit/provider/user/windows_spec.rb +26 -26
- data/spec/unit/provider/user_spec.rb +72 -72
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +4 -4
- data/spec/unit/provider_resolver_spec.rb +387 -0
- data/spec/unit/recipe_spec.rb +33 -12
- data/spec/unit/resource/apt_package_spec.rb +10 -13
- data/spec/unit/resource/bash_spec.rb +4 -4
- data/spec/unit/resource/batch_spec.rb +1 -1
- data/spec/unit/resource/breakpoint_spec.rb +11 -7
- data/spec/unit/resource/chef_gem_spec.rb +8 -15
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
- data/spec/unit/resource/conditional_spec.rb +35 -16
- data/spec/unit/resource/cookbook_file_spec.rb +13 -13
- data/spec/unit/resource/cron_spec.rb +37 -37
- data/spec/unit/resource/csh_spec.rb +4 -4
- data/spec/unit/resource/deploy_revision_spec.rb +13 -18
- data/spec/unit/resource/deploy_spec.rb +60 -55
- data/spec/unit/resource/directory_spec.rb +18 -18
- data/spec/unit/resource/dpkg_package_spec.rb +8 -14
- data/spec/unit/resource/dsc_script_spec.rb +98 -0
- data/spec/unit/resource/easy_install_package_spec.rb +9 -18
- data/spec/unit/resource/env_spec.rb +12 -12
- data/spec/unit/resource/erl_call_spec.rb +11 -11
- data/spec/unit/resource/execute_spec.rb +5 -0
- data/spec/unit/resource/file_spec.rb +29 -29
- data/spec/unit/resource/freebsd_package_spec.rb +11 -12
- data/spec/unit/resource/gem_package_spec.rb +8 -15
- data/spec/unit/resource/git_spec.rb +12 -8
- data/spec/unit/resource/group_spec.rb +27 -27
- data/spec/unit/resource/homebrew_package_spec.rb +50 -0
- data/spec/unit/resource/http_request_spec.rb +6 -6
- data/spec/unit/resource/ifconfig_spec.rb +8 -8
- data/spec/unit/resource/ips_package_spec.rb +10 -13
- data/spec/unit/resource/link_spec.rb +25 -25
- data/spec/unit/resource/log_spec.rb +9 -9
- data/spec/unit/resource/macports_package_spec.rb +8 -13
- data/spec/unit/resource/mdadm_spec.rb +18 -18
- data/spec/unit/resource/mount_spec.rb +45 -45
- data/spec/unit/resource/ohai_spec.rb +7 -7
- data/spec/unit/resource/package_spec.rb +12 -12
- data/spec/unit/resource/pacman_package_spec.rb +8 -14
- data/spec/unit/resource/perl_spec.rb +4 -4
- data/spec/unit/resource/portage_package_spec.rb +3 -3
- data/spec/unit/resource/powershell_spec.rb +7 -7
- data/spec/unit/resource/python_spec.rb +4 -4
- data/spec/unit/resource/registry_key_spec.rb +32 -32
- data/spec/unit/resource/remote_directory_spec.rb +17 -17
- data/spec/unit/resource/remote_file_spec.rb +41 -41
- data/spec/unit/resource/route_spec.rb +19 -19
- data/spec/unit/resource/rpm_package_spec.rb +9 -13
- data/spec/unit/resource/ruby_block_spec.rb +8 -8
- data/spec/unit/resource/ruby_spec.rb +4 -4
- data/spec/unit/resource/scm_spec.rb +40 -40
- data/spec/unit/resource/script_spec.rb +2 -2
- data/spec/unit/resource/service_spec.rb +37 -47
- data/spec/unit/resource/smartos_package_spec.rb +10 -15
- data/spec/unit/resource/solaris_package_spec.rb +13 -28
- data/spec/unit/resource/subversion_spec.rb +16 -12
- data/spec/unit/resource/template_spec.rb +35 -35
- data/spec/unit/resource/timestamped_deploy_spec.rb +30 -4
- data/spec/unit/resource/user_spec.rb +23 -23
- data/spec/unit/resource/windows_package_spec.rb +17 -10
- data/spec/unit/resource/windows_service_spec.rb +9 -6
- data/spec/unit/resource/yum_package_spec.rb +16 -21
- data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
- data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
- data/spec/unit/resource_collection_spec.rb +73 -92
- data/spec/unit/resource_definition_spec.rb +38 -40
- data/spec/unit/resource_reporter_spec.rb +3 -3
- data/spec/unit/resource_spec.rb +68 -33
- data/spec/unit/rest_spec.rb +83 -76
- data/spec/unit/role_spec.rb +5 -0
- data/spec/unit/run_list_spec.rb +5 -1
- data/spec/unit/runner_spec.rb +245 -238
- data/spec/unit/shell/shell_ext_spec.rb +1 -1
- data/spec/unit/user_spec.rb +5 -1
- data/spec/unit/util/dsc/configuration_generator_spec.rb +171 -0
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +169 -0
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
- data/spec/unit/util/path_helper_spec.rb +23 -1
- data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
- data/spec/unit/workstation_config_loader_spec.rb +1 -1
- metadata +303 -196
- checksums.yaml +0 -7
- data/distro/README +0 -2
- data/distro/arch/etc/conf.d/chef-client.conf +0 -5
- data/distro/arch/etc/conf.d/chef-expander.conf +0 -8
- data/distro/arch/etc/conf.d/chef-server-webui.conf +0 -10
- data/distro/arch/etc/conf.d/chef-server.conf +0 -10
- data/distro/arch/etc/conf.d/chef-solr.conf +0 -8
- data/distro/arch/etc/rc.d/chef-client +0 -90
- data/distro/arch/etc/rc.d/chef-expander +0 -78
- data/distro/arch/etc/rc.d/chef-server +0 -78
- data/distro/arch/etc/rc.d/chef-server-webui +0 -78
- data/distro/arch/etc/rc.d/chef-solr +0 -78
- data/distro/debian/etc/default/chef-client +0 -4
- data/distro/debian/etc/default/chef-expander +0 -8
- data/distro/debian/etc/default/chef-server +0 -9
- data/distro/debian/etc/default/chef-server-webui +0 -9
- data/distro/debian/etc/default/chef-solr +0 -8
- data/distro/debian/etc/init.d/chef-client +0 -212
- data/distro/debian/etc/init.d/chef-expander +0 -176
- data/distro/debian/etc/init.d/chef-server +0 -122
- data/distro/debian/etc/init.d/chef-server-webui +0 -123
- data/distro/debian/etc/init.d/chef-solr +0 -176
- data/distro/debian/etc/init/chef-client.conf +0 -17
- data/distro/debian/etc/init/chef-expander.conf +0 -17
- data/distro/debian/etc/init/chef-server-webui.conf +0 -17
- data/distro/debian/etc/init/chef-server.conf +0 -17
- data/distro/debian/etc/init/chef-solr.conf +0 -17
- data/distro/redhat/etc/init.d/chef-client +0 -121
- data/distro/redhat/etc/init.d/chef-expander +0 -104
- data/distro/redhat/etc/init.d/chef-server +0 -112
- data/distro/redhat/etc/init.d/chef-server-webui +0 -112
- data/distro/redhat/etc/init.d/chef-solr +0 -104
- data/distro/redhat/etc/logrotate.d/chef-client +0 -8
- data/distro/redhat/etc/logrotate.d/chef-expander +0 -8
- data/distro/redhat/etc/logrotate.d/chef-server +0 -8
- data/distro/redhat/etc/logrotate.d/chef-server-webui +0 -8
- data/distro/redhat/etc/logrotate.d/chef-solr +0 -8
- data/distro/redhat/etc/sysconfig/chef-client +0 -15
- data/distro/redhat/etc/sysconfig/chef-expander +0 -7
- data/distro/redhat/etc/sysconfig/chef-server +0 -14
- data/distro/redhat/etc/sysconfig/chef-server-webui +0 -14
- data/distro/redhat/etc/sysconfig/chef-solr +0 -8
- data/distro/windows/service_manager.rb +0 -20
- data/lib/chef/resource_platform_map.rb +0 -151
- data/spec/support/shared/matchers.rb +0 -17
- data/spec/unit/resource_platform_map_spec.rb +0 -164
@@ -54,25 +54,25 @@ describe Chef::Provider::Template::Content do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "finds the template file in the cookbook cache if it isn't local" do
|
57
|
-
content.template_location.
|
57
|
+
expect(content.template_location).to eq(CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/openldap_stuff.conf.erb')
|
58
58
|
end
|
59
59
|
|
60
60
|
it "finds the template file locally if it is local" do
|
61
|
-
new_resource.
|
62
|
-
new_resource.
|
63
|
-
content.template_location.
|
61
|
+
allow(new_resource).to receive(:local).and_return(true)
|
62
|
+
allow(new_resource).to receive(:source).and_return('/tmp/its_on_disk.erb')
|
63
|
+
expect(content.template_location).to eq('/tmp/its_on_disk.erb')
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should use the cookbook name if defined in the template resource" do
|
67
|
-
new_resource.
|
68
|
-
new_resource.
|
69
|
-
new_resource.
|
70
|
-
content.template_location.
|
67
|
+
allow(new_resource).to receive(:cookbook_name).and_return('apache2')
|
68
|
+
allow(new_resource).to receive(:cookbook).and_return('openldap')
|
69
|
+
allow(new_resource).to receive(:source).and_return("test.erb")
|
70
|
+
expect(content.template_location).to eq(CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/test.erb')
|
71
71
|
end
|
72
72
|
|
73
73
|
it "creates the template with the rendered content" do
|
74
74
|
run_context.node.normal[:slappiness] = "a warm gun"
|
75
|
-
IO.read(content.tempfile.path).
|
75
|
+
expect(IO.read(content.tempfile.path)).to eq("slappiness is a warm gun")
|
76
76
|
end
|
77
77
|
|
78
78
|
end
|
@@ -39,7 +39,7 @@ describe Chef::Provider::Template do
|
|
39
39
|
|
40
40
|
let(:provider) do
|
41
41
|
provider = described_class.new(resource, run_context)
|
42
|
-
provider.
|
42
|
+
allow(provider).to receive(:content).and_return(content)
|
43
43
|
provider
|
44
44
|
end
|
45
45
|
|
@@ -51,7 +51,7 @@ describe Chef::Provider::Template do
|
|
51
51
|
|
52
52
|
let(:content) do
|
53
53
|
content = double('Chef::Provider::File::Content::Template', :template_location => "/foo/bar/baz")
|
54
|
-
File.
|
54
|
+
allow(File).to receive(:exists?).with("/foo/bar/baz").and_return(true)
|
55
55
|
content
|
56
56
|
end
|
57
57
|
|
@@ -73,15 +73,15 @@ describe Chef::Provider::Template do
|
|
73
73
|
|
74
74
|
let(:provider) do
|
75
75
|
provider = described_class.new(resource, run_context)
|
76
|
-
provider.
|
76
|
+
allow(provider).to receive(:content).and_return(content)
|
77
77
|
provider
|
78
78
|
end
|
79
79
|
|
80
80
|
it "stops executing when the local template source can't be found" do
|
81
81
|
setup_normal_file
|
82
|
-
content.
|
83
|
-
File.
|
84
|
-
|
82
|
+
allow(content).to receive(:template_location).and_return("/baz/bar/foo")
|
83
|
+
allow(File).to receive(:exists?).with("/baz/bar/foo").and_return(false)
|
84
|
+
expect { provider.run_action(:create) }.to raise_error Chef::Mixin::WhyRun::ResourceRequirements::Assertion::AssertionFailure
|
85
85
|
end
|
86
86
|
|
87
87
|
end
|
@@ -23,10 +23,13 @@ require 'ostruct'
|
|
23
23
|
require 'mixlib/shellout'
|
24
24
|
|
25
25
|
describe Chef::Provider::User::Dscl do
|
26
|
+
before do
|
27
|
+
allow(Chef::Platform).to receive(:windows?) { false }
|
28
|
+
end
|
26
29
|
let(:node) {
|
27
30
|
node = Chef::Node.new
|
28
|
-
node.
|
29
|
-
node.
|
31
|
+
allow(node).to receive(:[]).with(:platform_version).and_return(mac_version)
|
32
|
+
allow(node).to receive(:[]).with(:platform).and_return("mac_os_x")
|
30
33
|
node
|
31
34
|
}
|
32
35
|
|
@@ -112,38 +115,38 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
112
115
|
describe "when shelling out to dscl" do
|
113
116
|
it "should run dscl with the supplied cmd /Path args" do
|
114
117
|
shell_return = ShellCmdResult.new('stdout', 'err', 0)
|
115
|
-
provider.
|
116
|
-
provider.run_dscl("cmd /Path args").
|
118
|
+
expect(provider).to receive(:shell_out).with("dscl . -cmd /Path args").and_return(shell_return)
|
119
|
+
expect(provider.run_dscl("cmd /Path args")).to eq('stdout')
|
117
120
|
end
|
118
121
|
|
119
122
|
it "returns an empty string from delete commands" do
|
120
123
|
shell_return = ShellCmdResult.new('out', 'err', 23)
|
121
|
-
provider.
|
122
|
-
provider.run_dscl("delete /Path args").
|
124
|
+
expect(provider).to receive(:shell_out).with("dscl . -delete /Path args").and_return(shell_return)
|
125
|
+
expect(provider.run_dscl("delete /Path args")).to eq("")
|
123
126
|
end
|
124
127
|
|
125
128
|
it "should raise an exception for any other command" do
|
126
129
|
shell_return = ShellCmdResult.new('out', 'err', 23)
|
127
|
-
provider.
|
128
|
-
|
130
|
+
expect(provider).to receive(:shell_out).with('dscl . -cmd /Path arguments').and_return(shell_return)
|
131
|
+
expect { provider.run_dscl("cmd /Path arguments") }.to raise_error(Chef::Exceptions::DsclCommandFailed)
|
129
132
|
end
|
130
133
|
|
131
134
|
it "raises an exception when dscl reports 'no such key'" do
|
132
135
|
shell_return = ShellCmdResult.new("No such key: ", 'err', 23)
|
133
|
-
provider.
|
134
|
-
|
136
|
+
expect(provider).to receive(:shell_out).with('dscl . -cmd /Path args').and_return(shell_return)
|
137
|
+
expect { provider.run_dscl("cmd /Path args") }.to raise_error(Chef::Exceptions::DsclCommandFailed)
|
135
138
|
end
|
136
139
|
|
137
140
|
it "raises an exception when dscl reports 'eDSRecordNotFound'" do
|
138
141
|
shell_return = ShellCmdResult.new("<dscl_cmd> DS Error: -14136 (eDSRecordNotFound)", 'err', -14136)
|
139
|
-
provider.
|
140
|
-
|
142
|
+
expect(provider).to receive(:shell_out).with('dscl . -cmd /Path args').and_return(shell_return)
|
143
|
+
expect { provider.run_dscl("cmd /Path args") }.to raise_error(Chef::Exceptions::DsclCommandFailed)
|
141
144
|
end
|
142
145
|
end
|
143
146
|
|
144
147
|
describe "get_free_uid" do
|
145
148
|
before do
|
146
|
-
provider.
|
149
|
+
expect(provider).to receive(:run_dscl).with("list /Users uid").and_return("\nwheel 200\nstaff 201\nbrahms 500\nchopin 501\n")
|
147
150
|
end
|
148
151
|
|
149
152
|
describe "when resource is configured as system" do
|
@@ -152,59 +155,59 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
152
155
|
end
|
153
156
|
|
154
157
|
it "should return the first unused uid number on or above 500" do
|
155
|
-
provider.get_free_uid.
|
158
|
+
expect(provider.get_free_uid).to eq(202)
|
156
159
|
end
|
157
160
|
end
|
158
161
|
|
159
162
|
it "should return the first unused uid number on or above 200" do
|
160
|
-
provider.get_free_uid.
|
163
|
+
expect(provider.get_free_uid).to eq(502)
|
161
164
|
end
|
162
165
|
|
163
166
|
it "should raise an exception when the search limit is exhausted" do
|
164
167
|
search_limit = 1
|
165
|
-
|
168
|
+
expect { provider.get_free_uid(search_limit) }.to raise_error(RuntimeError)
|
166
169
|
end
|
167
170
|
end
|
168
171
|
|
169
172
|
describe "uid_used?" do
|
170
173
|
it "should return false if not given any valid uid number" do
|
171
|
-
provider.uid_used?(nil).
|
174
|
+
expect(provider.uid_used?(nil)).to be_false
|
172
175
|
end
|
173
176
|
|
174
177
|
describe "when called with a user id" do
|
175
178
|
before do
|
176
|
-
provider.
|
179
|
+
expect(provider).to receive(:run_dscl).with("list /Users uid").and_return("\naj 500\n")
|
177
180
|
end
|
178
181
|
|
179
182
|
it "should return true for a used uid number" do
|
180
|
-
provider.uid_used?(500).
|
183
|
+
expect(provider.uid_used?(500)).to be_true
|
181
184
|
end
|
182
185
|
|
183
186
|
it "should return false for an unused uid number" do
|
184
|
-
provider.uid_used?(501).
|
187
|
+
expect(provider.uid_used?(501)).to be_false
|
185
188
|
end
|
186
189
|
end
|
187
190
|
end
|
188
191
|
|
189
192
|
describe "when determining the uid to set" do
|
190
193
|
it "raises RequestedUIDUnavailable if the requested uid is already in use" do
|
191
|
-
provider.
|
192
|
-
provider.
|
193
|
-
|
194
|
+
allow(provider).to receive(:uid_used?).and_return(true)
|
195
|
+
expect(provider).to receive(:get_free_uid).and_return(501)
|
196
|
+
expect { provider.dscl_set_uid }.to raise_error(Chef::Exceptions::RequestedUIDUnavailable)
|
194
197
|
end
|
195
198
|
|
196
199
|
it "finds a valid, unused uid when none is specified" do
|
197
|
-
provider.
|
198
|
-
provider.
|
199
|
-
provider.
|
200
|
+
expect(provider).to receive(:run_dscl).with("list /Users uid").and_return('')
|
201
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor UniqueID 501")
|
202
|
+
expect(provider).to receive(:get_free_uid).and_return(501)
|
200
203
|
provider.dscl_set_uid
|
201
|
-
new_resource.uid.
|
204
|
+
expect(new_resource.uid).to eq(501)
|
202
205
|
end
|
203
206
|
|
204
207
|
it "sets the uid specified in the resource" do
|
205
208
|
new_resource.uid(1000)
|
206
|
-
provider.
|
207
|
-
provider.
|
209
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor UniqueID 1000").and_return(true)
|
210
|
+
expect(provider).to receive(:run_dscl).with("list /Users uid").and_return('')
|
208
211
|
provider.dscl_set_uid
|
209
212
|
end
|
210
213
|
end
|
@@ -223,14 +226,14 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
223
226
|
|
224
227
|
it "deletes the home directory when resource#home is nil" do
|
225
228
|
new_resource.instance_variable_set(:@home, nil)
|
226
|
-
provider.
|
229
|
+
expect(provider).to receive(:run_dscl).with("delete /Users/toor NFSHomeDirectory").and_return(true)
|
227
230
|
provider.dscl_set_home
|
228
231
|
end
|
229
232
|
|
230
233
|
|
231
234
|
it "raises InvalidHomeDirectory when the resource's home directory doesn't look right" do
|
232
235
|
new_resource.home('epic-fail')
|
233
|
-
|
236
|
+
expect { provider.dscl_set_home }.to raise_error(Chef::Exceptions::InvalidHomeDirectory)
|
234
237
|
end
|
235
238
|
|
236
239
|
it "moves the users home to the new location if it exists and the target location is different" do
|
@@ -240,34 +243,34 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
240
243
|
current_home_files = [current_home + '/my-dot-emacs', current_home + '/my-dot-vim']
|
241
244
|
current_resource.home(current_home)
|
242
245
|
new_resource.gid(23)
|
243
|
-
::File.
|
244
|
-
::File.
|
246
|
+
allow(::File).to receive(:exists?).with('/old/home/toor').and_return(true)
|
247
|
+
allow(::File).to receive(:exists?).with('/Users/toor').and_return(true)
|
245
248
|
|
246
|
-
FileUtils.
|
247
|
-
FileUtils.
|
248
|
-
::Dir.
|
249
|
-
FileUtils.
|
250
|
-
FileUtils.
|
249
|
+
expect(FileUtils).to receive(:mkdir_p).with('/Users/toor').and_return(true)
|
250
|
+
expect(FileUtils).to receive(:rmdir).with(current_home)
|
251
|
+
expect(::Dir).to receive(:glob).with("#{CHEF_SPEC_DATA}/old_home_dir/*",::File::FNM_DOTMATCH).and_return(current_home_files)
|
252
|
+
expect(FileUtils).to receive(:mv).with(current_home_files, "/Users/toor", :force => true)
|
253
|
+
expect(FileUtils).to receive(:chown_R).with('toor','23','/Users/toor')
|
251
254
|
|
252
|
-
provider.
|
255
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor NFSHomeDirectory '/Users/toor'")
|
253
256
|
provider.dscl_set_home
|
254
257
|
end
|
255
258
|
|
256
259
|
it "should raise an exception when the systems user template dir (skel) cannot be found" do
|
257
|
-
::File.
|
258
|
-
|
260
|
+
allow(::File).to receive(:exists?).and_return(false,false,false)
|
261
|
+
expect { provider.dscl_set_home }.to raise_error(Chef::Exceptions::User)
|
259
262
|
end
|
260
263
|
|
261
264
|
it "should run ditto to copy any missing files from skel to the new home dir" do
|
262
|
-
::File.
|
263
|
-
FileUtils.
|
264
|
-
provider.
|
265
|
+
expect(::File).to receive(:exists?).with("/System/Library/User\ Template/English.lproj").and_return(true)
|
266
|
+
expect(FileUtils).to receive(:chown_R).with('toor', '', '/Users/toor')
|
267
|
+
expect(provider).to receive(:shell_out!).with("ditto '/System/Library/User Template/English.lproj' '/Users/toor'")
|
265
268
|
provider.ditto_home
|
266
269
|
end
|
267
270
|
|
268
271
|
it "creates the user's NFSHomeDirectory and home directory" do
|
269
|
-
provider.
|
270
|
-
provider.
|
272
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor NFSHomeDirectory '/Users/toor'").and_return(true)
|
273
|
+
expect(provider).to receive(:ditto_home)
|
271
274
|
provider.dscl_set_home
|
272
275
|
end
|
273
276
|
end
|
@@ -277,8 +280,8 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
277
280
|
let(:plutil_exists) { true }
|
278
281
|
|
279
282
|
before do
|
280
|
-
::File.
|
281
|
-
::File.
|
283
|
+
allow(::File).to receive(:exists?).with("/usr/bin/dscl").and_return(dscl_exists)
|
284
|
+
allow(::File).to receive(:exists?).with("/usr/bin/plutil").and_return(plutil_exists)
|
282
285
|
end
|
283
286
|
|
284
287
|
def run_requirements
|
@@ -291,7 +294,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
291
294
|
let(:dscl_exists) { false }
|
292
295
|
|
293
296
|
it "should raise an error" do
|
294
|
-
|
297
|
+
expect { run_requirements }.to raise_error
|
295
298
|
end
|
296
299
|
end
|
297
300
|
|
@@ -299,7 +302,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
299
302
|
let(:plutil_exists) { false }
|
300
303
|
|
301
304
|
it "should raise an error" do
|
302
|
-
|
305
|
+
expect { run_requirements }.to raise_error
|
303
306
|
end
|
304
307
|
end
|
305
308
|
|
@@ -309,7 +312,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
309
312
|
}
|
310
313
|
|
311
314
|
it "should raise an error" do
|
312
|
-
|
315
|
+
expect { run_requirements }.to raise_error
|
313
316
|
end
|
314
317
|
end
|
315
318
|
|
@@ -322,7 +325,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
322
325
|
let(:password) { salted_sha512_password }
|
323
326
|
|
324
327
|
it "should not raise an error" do
|
325
|
-
|
328
|
+
expect { run_requirements }.not_to raise_error
|
326
329
|
end
|
327
330
|
end
|
328
331
|
|
@@ -330,7 +333,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
330
333
|
let(:password) { salted_sha512_pbkdf2_password }
|
331
334
|
|
332
335
|
it "should raise an error" do
|
333
|
-
|
336
|
+
expect { run_requirements }.to raise_error
|
334
337
|
end
|
335
338
|
end
|
336
339
|
end
|
@@ -345,7 +348,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
345
348
|
let(:password) { salted_sha512_password }
|
346
349
|
|
347
350
|
it "should raise an error" do
|
348
|
-
|
351
|
+
expect { run_requirements }.to raise_error
|
349
352
|
end
|
350
353
|
end
|
351
354
|
|
@@ -354,7 +357,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
354
357
|
|
355
358
|
describe "when salt and iteration is not set" do
|
356
359
|
it "should raise an error" do
|
357
|
-
|
360
|
+
expect { run_requirements }.to raise_error
|
358
361
|
end
|
359
362
|
end
|
360
363
|
|
@@ -363,7 +366,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
363
366
|
let(:iterations) { salted_sha512_pbkdf2_iterations }
|
364
367
|
|
365
368
|
it "should not raise an error" do
|
366
|
-
|
369
|
+
expect { run_requirements }.not_to raise_error
|
367
370
|
end
|
368
371
|
end
|
369
372
|
end
|
@@ -376,8 +379,8 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
376
379
|
let(:user_plist_file) { nil }
|
377
380
|
|
378
381
|
before do
|
379
|
-
provider.
|
380
|
-
provider.
|
382
|
+
expect(provider).to receive(:shell_out).with("dscacheutil '-flushcache'")
|
383
|
+
expect(provider).to receive(:shell_out).with("plutil -convert xml1 -o - /var/db/dslocal/nodes/Default/users/toor.plist") do
|
381
384
|
if user_plist_file.nil?
|
382
385
|
ShellCmdResult.new('Can not find the file', 'Sorry!!', 1)
|
383
386
|
else
|
@@ -386,23 +389,23 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
386
389
|
end
|
387
390
|
|
388
391
|
if !user_plist_file.nil?
|
389
|
-
provider.
|
392
|
+
expect(provider).to receive(:convert_binary_plist_to_xml).and_return(File.read(File.join(CHEF_SPEC_DATA, "mac_users/#{user_plist_file}.shadow.xml")))
|
390
393
|
end
|
391
394
|
end
|
392
395
|
|
393
396
|
describe "when user is not there" do
|
394
397
|
it "shouldn't raise an error" do
|
395
|
-
|
398
|
+
expect { provider.load_current_resource }.not_to raise_error
|
396
399
|
end
|
397
400
|
|
398
401
|
it "should set @user_exists" do
|
399
402
|
provider.load_current_resource
|
400
|
-
provider.instance_variable_get(:@user_exists).
|
403
|
+
expect(provider.instance_variable_get(:@user_exists)).to be_false
|
401
404
|
end
|
402
405
|
|
403
406
|
it "should set username" do
|
404
407
|
provider.load_current_resource
|
405
|
-
provider.current_resource.username.
|
408
|
+
expect(provider.current_resource.username).to eq("toor")
|
406
409
|
end
|
407
410
|
end
|
408
411
|
|
@@ -418,12 +421,12 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
418
421
|
|
419
422
|
it "collects the user data correctly" do
|
420
423
|
provider.load_current_resource
|
421
|
-
provider.current_resource.comment.
|
422
|
-
provider.current_resource.uid.
|
423
|
-
provider.current_resource.gid.
|
424
|
-
provider.current_resource.home.
|
425
|
-
provider.current_resource.shell.
|
426
|
-
provider.current_resource.password.
|
424
|
+
expect(provider.current_resource.comment).to eq("vagrant")
|
425
|
+
expect(provider.current_resource.uid).to eq("11112222-3333-4444-AAAA-BBBBCCCCDDDD")
|
426
|
+
expect(provider.current_resource.gid).to eq("80")
|
427
|
+
expect(provider.current_resource.home).to eq("/Users/vagrant")
|
428
|
+
expect(provider.current_resource.shell).to eq("/bin/bash")
|
429
|
+
expect(provider.current_resource.password).to eq(vagrant_sha_512)
|
427
430
|
end
|
428
431
|
|
429
432
|
describe "when a plain password is set that is same" do
|
@@ -431,7 +434,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
431
434
|
|
432
435
|
it "diverged_password? should report false" do
|
433
436
|
provider.load_current_resource
|
434
|
-
provider.diverged_password
|
437
|
+
expect(provider.diverged_password?).to be_false
|
435
438
|
end
|
436
439
|
end
|
437
440
|
|
@@ -440,7 +443,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
440
443
|
|
441
444
|
it "diverged_password? should report true" do
|
442
445
|
provider.load_current_resource
|
443
|
-
provider.diverged_password
|
446
|
+
expect(provider.diverged_password?).to be_true
|
444
447
|
end
|
445
448
|
end
|
446
449
|
|
@@ -450,7 +453,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
450
453
|
|
451
454
|
it "diverged_password? should report false" do
|
452
455
|
provider.load_current_resource
|
453
|
-
provider.diverged_password
|
456
|
+
expect(provider.diverged_password?).to be_false
|
454
457
|
end
|
455
458
|
end
|
456
459
|
|
@@ -459,7 +462,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
459
462
|
|
460
463
|
it "diverged_password? should report true" do
|
461
464
|
provider.load_current_resource
|
462
|
-
provider.diverged_password
|
465
|
+
expect(provider.diverged_password?).to be_true
|
463
466
|
end
|
464
467
|
end
|
465
468
|
|
@@ -469,7 +472,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
469
472
|
|
470
473
|
it "diverged_password? should report false" do
|
471
474
|
provider.load_current_resource
|
472
|
-
provider.diverged_password
|
475
|
+
expect(provider.diverged_password?).to be_false
|
473
476
|
end
|
474
477
|
end
|
475
478
|
end
|
@@ -483,19 +486,19 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
|
|
483
486
|
|
484
487
|
it "collects the user data correctly" do
|
485
488
|
provider.load_current_resource
|
486
|
-
provider.current_resource.comment.
|
487
|
-
provider.current_resource.uid.
|
488
|
-
provider.current_resource.gid.
|
489
|
-
provider.current_resource.home.
|
490
|
-
provider.current_resource.shell.
|
491
|
-
provider.current_resource.password.
|
489
|
+
expect(provider.current_resource.comment).to eq("vagrant")
|
490
|
+
expect(provider.current_resource.uid).to eq("11112222-3333-4444-AAAA-BBBBCCCCDDDD")
|
491
|
+
expect(provider.current_resource.gid).to eq("80")
|
492
|
+
expect(provider.current_resource.home).to eq("/Users/vagrant")
|
493
|
+
expect(provider.current_resource.shell).to eq("/bin/bash")
|
494
|
+
expect(provider.current_resource.password).to eq("ea4c2d265d801ba0ec0dfccd\
|
492
495
|
253dfc1de91cbe0806b4acc1ed7fe22aebcf6beb5344d0f442e590\
|
493
496
|
ffa04d679075da3afb119e41b72b5eaf08ee4aa54693722646d5\
|
494
497
|
19ee04843deb8a3e977428d33f625e83887913e5c13b70035961\
|
495
498
|
5e00ad7bc3e7a0c98afc3e19d1360272454f8d33a9214d2fbe8b\
|
496
499
|
e68d1f9821b26689312366")
|
497
|
-
provider.current_resource.salt.
|
498
|
-
provider.current_resource.iterations.
|
500
|
+
expect(provider.current_resource.salt).to eq("f994ef2f73b7c5594ebd1553300976b20733ce0e24d659783d87f3d81cbbb6a9")
|
501
|
+
expect(provider.current_resource.iterations).to eq(39840)
|
499
502
|
end
|
500
503
|
end
|
501
504
|
|
@@ -509,12 +512,12 @@ e68d1f9821b26689312366")
|
|
509
512
|
|
510
513
|
it "collects the user data correctly" do
|
511
514
|
provider.load_current_resource
|
512
|
-
provider.current_resource.comment.
|
513
|
-
provider.current_resource.uid.
|
514
|
-
provider.current_resource.gid.
|
515
|
-
provider.current_resource.home.
|
516
|
-
provider.current_resource.shell.
|
517
|
-
provider.current_resource.password.
|
515
|
+
expect(provider.current_resource.comment).to eq("vagrant")
|
516
|
+
expect(provider.current_resource.uid).to eq("11112222-3333-4444-AAAA-BBBBCCCCDDDD")
|
517
|
+
expect(provider.current_resource.gid).to eq("80")
|
518
|
+
expect(provider.current_resource.home).to eq("/Users/vagrant")
|
519
|
+
expect(provider.current_resource.shell).to eq("/bin/bash")
|
520
|
+
expect(provider.current_resource.password).to eq("6f75d7190441facc34291ebbea1fc756b242d4f\
|
518
521
|
e9bcff141bccb84f1979e27e539539aa31f9f7dcc92c0cea959\
|
519
522
|
ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
520
523
|
end
|
@@ -522,7 +525,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
522
525
|
describe "when a plain text password is set" do
|
523
526
|
it "reports password needs to be updated" do
|
524
527
|
provider.load_current_resource
|
525
|
-
provider.diverged_password
|
528
|
+
expect(provider.diverged_password?).to be_true
|
526
529
|
end
|
527
530
|
end
|
528
531
|
|
@@ -533,7 +536,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
533
536
|
|
534
537
|
it "reports password needs to be updated" do
|
535
538
|
provider.load_current_resource
|
536
|
-
provider.diverged_password
|
539
|
+
expect(provider.diverged_password?).to be_true
|
537
540
|
end
|
538
541
|
end
|
539
542
|
end
|
@@ -547,14 +550,14 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
547
550
|
|
548
551
|
it "collects the user data correctly" do
|
549
552
|
provider.load_current_resource
|
550
|
-
provider.current_resource.comment.
|
551
|
-
provider.current_resource.uid.
|
552
|
-
provider.current_resource.gid.
|
553
|
-
provider.current_resource.home.
|
554
|
-
provider.current_resource.shell.
|
555
|
-
provider.current_resource.password.
|
556
|
-
provider.current_resource.salt.
|
557
|
-
provider.current_resource.iterations.
|
553
|
+
expect(provider.current_resource.comment).to eq("vagrant")
|
554
|
+
expect(provider.current_resource.uid).to eq("11112222-3333-4444-AAAA-BBBBCCCCDDDD")
|
555
|
+
expect(provider.current_resource.gid).to eq("80")
|
556
|
+
expect(provider.current_resource.home).to eq("/Users/vagrant")
|
557
|
+
expect(provider.current_resource.shell).to eq("/bin/bash")
|
558
|
+
expect(provider.current_resource.password).to eq(vagrant_sha_512_pbkdf2)
|
559
|
+
expect(provider.current_resource.salt).to eq(vagrant_sha_512_pbkdf2_salt)
|
560
|
+
expect(provider.current_resource.iterations).to eq(vagrant_sha_512_pbkdf2_iterations)
|
558
561
|
end
|
559
562
|
|
560
563
|
describe "when a plain password is set that is same" do
|
@@ -562,7 +565,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
562
565
|
|
563
566
|
it "diverged_password? should report false" do
|
564
567
|
provider.load_current_resource
|
565
|
-
provider.diverged_password
|
568
|
+
expect(provider.diverged_password?).to be_false
|
566
569
|
end
|
567
570
|
end
|
568
571
|
|
@@ -571,7 +574,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
571
574
|
|
572
575
|
it "diverged_password? should report true" do
|
573
576
|
provider.load_current_resource
|
574
|
-
provider.diverged_password
|
577
|
+
expect(provider.diverged_password?).to be_true
|
575
578
|
end
|
576
579
|
end
|
577
580
|
|
@@ -582,7 +585,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
582
585
|
|
583
586
|
it "diverged_password? should report true" do
|
584
587
|
provider.load_current_resource
|
585
|
-
provider.diverged_password
|
588
|
+
expect(provider.diverged_password?).to be_true
|
586
589
|
end
|
587
590
|
end
|
588
591
|
|
@@ -593,7 +596,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
593
596
|
|
594
597
|
it "diverged_password? should report true" do
|
595
598
|
provider.load_current_resource
|
596
|
-
provider.diverged_password
|
599
|
+
expect(provider.diverged_password?).to be_true
|
597
600
|
end
|
598
601
|
end
|
599
602
|
|
@@ -604,7 +607,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
604
607
|
|
605
608
|
it "diverged_password? should report true" do
|
606
609
|
provider.load_current_resource
|
607
|
-
provider.diverged_password
|
610
|
+
expect(provider.diverged_password?).to be_true
|
608
611
|
end
|
609
612
|
end
|
610
613
|
end
|
@@ -613,23 +616,23 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
613
616
|
|
614
617
|
describe "salted_sha512_pbkdf2?" do
|
615
618
|
it "should return true when the string is a salted_sha512_pbkdf2 hash" do
|
616
|
-
provider.salted_sha512_pbkdf2?(salted_sha512_pbkdf2_password).
|
619
|
+
expect(provider.salted_sha512_pbkdf2?(salted_sha512_pbkdf2_password)).to be_true
|
617
620
|
end
|
618
621
|
|
619
622
|
it "should return false otherwise" do
|
620
|
-
provider.salted_sha512_pbkdf2?(salted_sha512_password).
|
621
|
-
provider.salted_sha512_pbkdf2?("any other string").
|
623
|
+
expect(provider.salted_sha512_pbkdf2?(salted_sha512_password)).to be_false
|
624
|
+
expect(provider.salted_sha512_pbkdf2?("any other string")).to be_false
|
622
625
|
end
|
623
626
|
end
|
624
627
|
|
625
628
|
describe "salted_sha512?" do
|
626
629
|
it "should return true when the string is a salted_sha512_pbkdf2 hash" do
|
627
|
-
provider.salted_sha512_pbkdf2?(salted_sha512_pbkdf2_password).
|
630
|
+
expect(provider.salted_sha512_pbkdf2?(salted_sha512_pbkdf2_password)).to be_true
|
628
631
|
end
|
629
632
|
|
630
633
|
it "should return false otherwise" do
|
631
|
-
provider.salted_sha512?(salted_sha512_pbkdf2_password).
|
632
|
-
provider.salted_sha512?("any other string").
|
634
|
+
expect(provider.salted_sha512?(salted_sha512_pbkdf2_password)).to be_false
|
635
|
+
expect(provider.salted_sha512?("any other string")).to be_false
|
633
636
|
end
|
634
637
|
end
|
635
638
|
|
@@ -644,9 +647,9 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
644
647
|
|
645
648
|
it "password_shadow_info should have salted-sha-512 format" do
|
646
649
|
shadow_info = provider.prepare_password_shadow_info
|
647
|
-
shadow_info.
|
650
|
+
expect(shadow_info).to have_key("SALTED-SHA512")
|
648
651
|
info = shadow_info["SALTED-SHA512"].string.unpack('H*').first
|
649
|
-
provider.salted_sha512?(info).
|
652
|
+
expect(provider.salted_sha512?(info)).to be_true
|
650
653
|
end
|
651
654
|
end
|
652
655
|
|
@@ -655,10 +658,10 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
655
658
|
|
656
659
|
it "password_shadow_info should have salted-sha-512 format" do
|
657
660
|
shadow_info = provider.prepare_password_shadow_info
|
658
|
-
shadow_info.
|
661
|
+
expect(shadow_info).to have_key("SALTED-SHA512")
|
659
662
|
info = shadow_info["SALTED-SHA512"].string.unpack('H*').first
|
660
|
-
provider.salted_sha512?(info).
|
661
|
-
info.
|
663
|
+
expect(provider.salted_sha512?(info)).to be_true
|
664
|
+
expect(info).to eq(vagrant_sha_512)
|
662
665
|
end
|
663
666
|
end
|
664
667
|
end
|
@@ -674,12 +677,12 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
674
677
|
|
675
678
|
it "password_shadow_info should have salted-sha-512 format" do
|
676
679
|
shadow_info = provider.prepare_password_shadow_info
|
677
|
-
shadow_info.
|
678
|
-
shadow_info["SALTED-SHA512-PBKDF2"].
|
679
|
-
shadow_info["SALTED-SHA512-PBKDF2"].
|
680
|
-
shadow_info["SALTED-SHA512-PBKDF2"].
|
680
|
+
expect(shadow_info).to have_key("SALTED-SHA512-PBKDF2")
|
681
|
+
expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("entropy")
|
682
|
+
expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("salt")
|
683
|
+
expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("iterations")
|
681
684
|
info = shadow_info["SALTED-SHA512-PBKDF2"]["entropy"].string.unpack('H*').first
|
682
|
-
provider.salted_sha512_pbkdf2?(info).
|
685
|
+
expect(provider.salted_sha512_pbkdf2?(info)).to be_true
|
683
686
|
end
|
684
687
|
end
|
685
688
|
|
@@ -690,13 +693,13 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
690
693
|
|
691
694
|
it "password_shadow_info should have salted-sha-512 format" do
|
692
695
|
shadow_info = provider.prepare_password_shadow_info
|
693
|
-
shadow_info.
|
694
|
-
shadow_info["SALTED-SHA512-PBKDF2"].
|
695
|
-
shadow_info["SALTED-SHA512-PBKDF2"].
|
696
|
-
shadow_info["SALTED-SHA512-PBKDF2"].
|
696
|
+
expect(shadow_info).to have_key("SALTED-SHA512-PBKDF2")
|
697
|
+
expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("entropy")
|
698
|
+
expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("salt")
|
699
|
+
expect(shadow_info["SALTED-SHA512-PBKDF2"]).to have_key("iterations")
|
697
700
|
info = shadow_info["SALTED-SHA512-PBKDF2"]["entropy"].string.unpack('H*').first
|
698
|
-
provider.salted_sha512_pbkdf2?(info).
|
699
|
-
info.
|
701
|
+
expect(provider.salted_sha512_pbkdf2?(info)).to be_true
|
702
|
+
expect(info).to eq(vagrant_sha_512_pbkdf2)
|
700
703
|
end
|
701
704
|
end
|
702
705
|
end
|
@@ -709,14 +712,14 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
709
712
|
end
|
710
713
|
|
711
714
|
it "should sleep and flush the dscl cache before saving the password" do
|
712
|
-
provider.
|
715
|
+
expect(provider).to receive(:prepare_password_shadow_info).and_return({ })
|
713
716
|
mock_shellout = double("Mock::Shellout")
|
714
|
-
mock_shellout.
|
715
|
-
Mixlib::ShellOut.
|
716
|
-
provider.
|
717
|
-
provider.
|
718
|
-
provider.
|
719
|
-
provider.
|
717
|
+
allow(mock_shellout).to receive(:run_command)
|
718
|
+
expect(Mixlib::ShellOut).to receive(:new).and_return(mock_shellout)
|
719
|
+
expect(provider).to receive(:read_user_info)
|
720
|
+
expect(provider).to receive(:dscl_set)
|
721
|
+
expect(provider).to receive(:sleep).with(3)
|
722
|
+
expect(provider).to receive(:save_user_info)
|
720
723
|
provider.set_password
|
721
724
|
end
|
722
725
|
end
|
@@ -729,33 +732,33 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
729
732
|
end
|
730
733
|
|
731
734
|
it "creates the user, comment field, sets uid, gid, configures the home directory, sets the shell, and sets the password" do
|
732
|
-
provider.
|
733
|
-
provider.
|
734
|
-
provider.
|
735
|
-
provider.
|
736
|
-
provider.
|
737
|
-
provider.
|
738
|
-
provider.
|
735
|
+
expect(provider).to receive :dscl_create_user
|
736
|
+
expect(provider).to receive :dscl_create_comment
|
737
|
+
expect(provider).to receive :dscl_set_uid
|
738
|
+
expect(provider).to receive :dscl_set_gid
|
739
|
+
expect(provider).to receive :dscl_set_home
|
740
|
+
expect(provider).to receive :dscl_set_shell
|
741
|
+
expect(provider).to receive :set_password
|
739
742
|
provider.create_user
|
740
743
|
end
|
741
744
|
|
742
745
|
it "creates the user and sets the comment field" do
|
743
|
-
provider.
|
746
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor").and_return(true)
|
744
747
|
provider.dscl_create_user
|
745
748
|
end
|
746
749
|
|
747
750
|
it "sets the comment field" do
|
748
|
-
provider.
|
751
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor RealName '#mockssuck'").and_return(true)
|
749
752
|
provider.dscl_create_comment
|
750
753
|
end
|
751
754
|
|
752
755
|
it "should run run_dscl with create /Users/user PrimaryGroupID to set the users primary group" do
|
753
|
-
provider.
|
756
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor PrimaryGroupID '1001'").and_return(true)
|
754
757
|
provider.dscl_set_gid
|
755
758
|
end
|
756
759
|
|
757
760
|
it "should run run_dscl with create /Users/user UserShell to set the users login shell" do
|
758
|
-
provider.
|
761
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor UserShell '/usr/bin/false'").and_return(true)
|
759
762
|
provider.dscl_set_shell
|
760
763
|
end
|
761
764
|
end
|
@@ -767,15 +770,15 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
767
770
|
end
|
768
771
|
|
769
772
|
it "should map the group name to a numeric ID when the group exists" do
|
770
|
-
provider.
|
771
|
-
provider.
|
773
|
+
expect(provider).to receive(:run_dscl).with("read /Groups/newgroup PrimaryGroupID").ordered.and_return("PrimaryGroupID: 1001\n")
|
774
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor PrimaryGroupID '1001'").ordered.and_return(true)
|
772
775
|
provider.dscl_set_gid
|
773
776
|
end
|
774
777
|
|
775
778
|
it "should raise an exception when the group does not exist" do
|
776
779
|
shell_return = ShellCmdResult.new("<dscl_cmd> DS Error: -14136 (eDSRecordNotFound)", 'err', -14136)
|
777
|
-
provider.
|
778
|
-
|
780
|
+
expect(provider).to receive(:shell_out).with('dscl . -read /Groups/newgroup PrimaryGroupID').and_return(shell_return)
|
781
|
+
expect { provider.dscl_set_gid }.to raise_error(Chef::Exceptions::GroupIDNotFound)
|
779
782
|
end
|
780
783
|
end
|
781
784
|
end
|
@@ -794,13 +797,13 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
794
797
|
end
|
795
798
|
|
796
799
|
it "sets the user, comment field, uid, gid, moves the home directory, sets the shell, and sets the password" do
|
797
|
-
provider.
|
798
|
-
provider.
|
799
|
-
provider.
|
800
|
-
provider.
|
801
|
-
provider.
|
802
|
-
provider.
|
803
|
-
provider.
|
800
|
+
expect(provider).to receive :dscl_create_user
|
801
|
+
expect(provider).to receive :dscl_create_comment
|
802
|
+
expect(provider).to receive :dscl_set_uid
|
803
|
+
expect(provider).to receive :dscl_set_gid
|
804
|
+
expect(provider).to receive :dscl_set_home
|
805
|
+
expect(provider).to receive :dscl_set_shell
|
806
|
+
expect(provider).to receive :set_password
|
804
807
|
provider.create_user
|
805
808
|
end
|
806
809
|
end
|
@@ -815,15 +818,15 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
815
818
|
end
|
816
819
|
|
817
820
|
it "sets the gid" do
|
818
|
-
provider.
|
821
|
+
expect(provider).to receive :dscl_set_gid
|
819
822
|
provider.manage_user
|
820
823
|
end
|
821
824
|
end
|
822
825
|
|
823
826
|
describe "when the user exists" do
|
824
827
|
before do
|
825
|
-
provider.
|
826
|
-
provider.
|
828
|
+
expect(provider).to receive(:shell_out).with("dscacheutil '-flushcache'")
|
829
|
+
expect(provider).to receive(:shell_out).with("plutil -convert xml1 -o - /var/db/dslocal/nodes/Default/users/toor.plist") do
|
827
830
|
ShellCmdResult.new(File.read(File.join(CHEF_SPEC_DATA, "mac_users/10.9.plist.xml")), "", 0)
|
828
831
|
end
|
829
832
|
provider.load_current_resource
|
@@ -832,20 +835,20 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
832
835
|
describe "when Chef is removing the user" do
|
833
836
|
it "removes the user from the groups and deletes home directory when the resource is configured to manage home" do
|
834
837
|
new_resource.supports({ :manage_home => true })
|
835
|
-
provider.
|
836
|
-
provider.
|
837
|
-
provider.
|
838
|
-
provider.
|
839
|
-
provider.
|
840
|
-
provider.
|
841
|
-
FileUtils.
|
838
|
+
expect(provider).to receive(:run_dscl).with("list /Groups").and_return("my_group\nyour_group\nreal_group\n")
|
839
|
+
expect(provider).to receive(:run_dscl).with("read /Groups/my_group").and_raise(Chef::Exceptions::DsclCommandFailed) # Empty group
|
840
|
+
expect(provider).to receive(:run_dscl).with("read /Groups/your_group").and_return("GroupMembership: not_you")
|
841
|
+
expect(provider).to receive(:run_dscl).with("read /Groups/real_group").and_return("GroupMembership: toor")
|
842
|
+
expect(provider).to receive(:run_dscl).with("delete /Groups/real_group GroupMembership 'toor'")
|
843
|
+
expect(provider).to receive(:run_dscl).with("delete /Users/toor")
|
844
|
+
expect(FileUtils).to receive(:rm_rf).with("/Users/vagrant")
|
842
845
|
provider.remove_user
|
843
846
|
end
|
844
847
|
end
|
845
848
|
|
846
849
|
describe "when user is not locked" do
|
847
850
|
it "determines the user as not locked" do
|
848
|
-
provider.
|
851
|
+
expect(provider).not_to be_locked
|
849
852
|
end
|
850
853
|
end
|
851
854
|
|
@@ -856,11 +859,11 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
856
859
|
end
|
857
860
|
|
858
861
|
it "determines the user as not locked" do
|
859
|
-
provider.
|
862
|
+
expect(provider).to be_locked
|
860
863
|
end
|
861
864
|
|
862
865
|
it "can unlock the user" do
|
863
|
-
provider.
|
866
|
+
expect(provider).to receive(:run_dscl).with("create /Users/toor AuthenticationAuthority ';ShadowHash;HASHLIST:<SALTED-SHA512-PBKDF2>'")
|
864
867
|
provider.unlock_user
|
865
868
|
end
|
866
869
|
end
|
@@ -868,7 +871,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
|
|
868
871
|
|
869
872
|
describe "when locking the user" do
|
870
873
|
it "should run run_dscl with append /Users/user AuthenticationAuthority ;DisabledUser; to lock the user account" do
|
871
|
-
provider.
|
874
|
+
expect(provider).to receive(:run_dscl).with("append /Users/toor AuthenticationAuthority ';DisabledUser;'")
|
872
875
|
provider.lock_user
|
873
876
|
end
|
874
877
|
end
|