chef 14.13.11-universal-mingw32 → 14.14.14-universal-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 +4 -4
- data/Gemfile +72 -72
- data/LICENSE +201 -201
- data/README.md +240 -240
- data/Rakefile +72 -72
- data/bin/chef-apply +24 -24
- data/bin/chef-client +25 -25
- data/bin/chef-resource-inspector +26 -26
- data/bin/chef-service-manager +37 -37
- data/bin/chef-shell +31 -31
- data/bin/chef-solo +24 -24
- data/bin/chef-windows-service +34 -34
- data/bin/knife +24 -24
- data/chef-universal-mingw32.gemspec +24 -24
- data/chef.gemspec +62 -62
- data/distro/powershell/chef/chef.psm1 +459 -459
- data/ext/win32-eventlog/Rakefile +53 -53
- data/ext/win32-eventlog/chef-log.man +56 -56
- data/lib/.DS_Store +0 -0
- data/lib/chef.rb +34 -34
- data/lib/chef/.DS_Store +0 -0
- data/lib/chef/api_client.rb +228 -228
- data/lib/chef/api_client/registration.rb +200 -200
- data/lib/chef/api_client_v1.rb +326 -326
- data/lib/chef/application.rb +398 -398
- data/lib/chef/application/apply.rb +226 -226
- data/lib/chef/application/client.rb +559 -559
- data/lib/chef/application/exit_code.rb +164 -164
- data/lib/chef/application/knife.rb +221 -221
- data/lib/chef/application/solo.rb +381 -381
- data/lib/chef/application/windows_service.rb +337 -337
- data/lib/chef/application/windows_service_manager.rb +204 -204
- data/lib/chef/applications.rb +4 -4
- data/lib/chef/audit/audit_event_proxy.rb +93 -93
- data/lib/chef/audit/audit_reporter.rb +176 -176
- data/lib/chef/audit/control_group_data.rb +145 -145
- data/lib/chef/audit/logger.rb +36 -36
- data/lib/chef/audit/rspec_formatter.rb +37 -37
- data/lib/chef/audit/runner.rb +196 -196
- data/lib/chef/blacklist.rb +81 -81
- data/lib/chef/chef_class.rb +248 -248
- data/lib/chef/chef_fs.rb +59 -59
- data/lib/chef/chef_fs/chef_fs_data_store.rb +870 -870
- data/lib/chef/chef_fs/command_line.rb +291 -291
- data/lib/chef/chef_fs/config.rb +284 -284
- data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -26
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +39 -39
- data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +11 -11
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -35
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -38
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +67 -67
- data/lib/chef/chef_fs/data_handler/data_handler_base.rb +207 -207
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -40
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -55
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -36
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +36 -36
- data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -17
- data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -17
- data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +48 -48
- data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -33
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -40
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -29
- data/lib/chef/chef_fs/file_pattern.rb +301 -301
- data/lib/chef/chef_fs/file_system.rb +431 -431
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +187 -187
- data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +65 -65
- data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +67 -67
- data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +75 -75
- data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +196 -196
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +106 -106
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +208 -208
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +78 -78
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +61 -61
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +105 -105
- data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +76 -76
- data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -19
- data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +67 -67
- data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +56 -56
- data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +51 -51
- data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +35 -35
- data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +65 -65
- data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +64 -64
- data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +41 -41
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +158 -158
- data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +135 -135
- data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +43 -43
- data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +38 -38
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +176 -176
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +207 -207
- data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +45 -45
- data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +111 -111
- data/lib/chef/chef_fs/file_system/exceptions.rb +105 -105
- data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +53 -53
- data/lib/chef/chef_fs/file_system/memory/memory_file.rb +20 -20
- data/lib/chef/chef_fs/file_system/memory/memory_root.rb +23 -23
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +62 -62
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +32 -32
- data/lib/chef/chef_fs/file_system/repository/acl.rb +45 -45
- data/lib/chef/chef_fs/file_system/repository/acls_dir.rb +50 -50
- data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +155 -155
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +41 -41
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +143 -143
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +177 -177
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +232 -232
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/repository/client.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/client_key.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/client_keys_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/container.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +36 -36
- data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +51 -51
- data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -39
- data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -39
- data/lib/chef/chef_fs/file_system/repository/directory.rb +167 -167
- data/lib/chef/chef_fs/file_system/repository/environment.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +151 -151
- data/lib/chef/chef_fs/file_system/repository/group.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/node.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +59 -59
- data/lib/chef/chef_fs/file_system/repository/policies_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/repository/policy.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/policy_group.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/role.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/user.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/users_dir.rb +37 -37
- data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +34 -34
- data/lib/chef/chef_fs/file_system_cache.rb +80 -80
- data/lib/chef/chef_fs/knife.rb +161 -161
- data/lib/chef/chef_fs/parallelizer.rb +103 -103
- data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +277 -277
- data/lib/chef/chef_fs/path_utils.rb +127 -127
- data/lib/chef/client.rb +1037 -1037
- data/lib/chef/config.rb +84 -84
- data/lib/chef/config_fetcher.rb +72 -72
- data/lib/chef/constants.rb +28 -28
- data/lib/chef/cookbook/chefignore.rb +78 -78
- data/lib/chef/cookbook/cookbook_collection.rb +63 -63
- data/lib/chef/cookbook/cookbook_version_loader.rb +267 -267
- data/lib/chef/cookbook/file_system_file_vendor.rb +58 -58
- data/lib/chef/cookbook/file_vendor.rb +71 -71
- data/lib/chef/cookbook/gem_installer.rb +100 -95
- data/lib/chef/cookbook/manifest_v0.rb +73 -73
- data/lib/chef/cookbook/manifest_v2.rb +45 -45
- data/lib/chef/cookbook/metadata.rb +804 -804
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
- data/lib/chef/cookbook/synchronizer.rb +312 -312
- data/lib/chef/cookbook/syntax_check.rb +260 -260
- data/lib/chef/cookbook_loader.rb +208 -208
- data/lib/chef/cookbook_manifest.rb +328 -328
- data/lib/chef/cookbook_site_streaming_uploader.rb +241 -241
- data/lib/chef/cookbook_uploader.rb +156 -156
- data/lib/chef/cookbook_version.rb +544 -544
- data/lib/chef/daemon.rb +131 -131
- data/lib/chef/data_bag.rb +174 -174
- data/lib/chef/data_bag_item.rb +209 -209
- data/lib/chef/data_collector.rb +565 -565
- data/lib/chef/data_collector/messages.rb +100 -100
- data/lib/chef/data_collector/messages/helpers.rb +159 -159
- data/lib/chef/data_collector/resource_report.rb +123 -123
- data/lib/chef/decorator.rb +81 -81
- data/lib/chef/decorator/lazy.rb +60 -60
- data/lib/chef/decorator/lazy_array.rb +59 -59
- data/lib/chef/decorator/unchain.rb +43 -43
- data/lib/chef/delayed_evaluator.rb +21 -21
- data/lib/chef/deprecated.rb +248 -248
- data/lib/chef/deprecation/warnings.rb +38 -38
- data/lib/chef/digester.rb +74 -74
- data/lib/chef/dsl.rb +6 -6
- data/lib/chef/dsl/.DS_Store +0 -0
- data/lib/chef/dsl/audit.rb +51 -51
- data/lib/chef/dsl/chef_provisioning.rb +57 -57
- data/lib/chef/dsl/cheffish.rb +65 -65
- data/lib/chef/dsl/core.rb +52 -52
- data/lib/chef/dsl/data_query.rb +103 -103
- data/lib/chef/dsl/declare_resource.rb +319 -319
- data/lib/chef/dsl/definitions.rb +43 -43
- data/lib/chef/dsl/include_attribute.rb +57 -57
- data/lib/chef/dsl/include_recipe.rb +40 -40
- data/lib/chef/dsl/platform_introspection.rb +269 -269
- data/lib/chef/dsl/powershell.rb +29 -29
- data/lib/chef/dsl/reboot_pending.rb +57 -57
- data/lib/chef/dsl/recipe.rb +76 -76
- data/lib/chef/dsl/registry_helper.rb +63 -63
- data/lib/chef/dsl/resources.rb +49 -49
- data/lib/chef/dsl/universal.rb +60 -60
- data/lib/chef/encrypted_data_bag_item.rb +157 -157
- data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -54
- data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -56
- data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +227 -227
- data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -37
- data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -225
- data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -22
- data/lib/chef/environment.rb +319 -319
- data/lib/chef/event_dispatch/base.rb +445 -445
- data/lib/chef/event_dispatch/dispatcher.rb +62 -62
- data/lib/chef/event_dispatch/dsl.rb +65 -65
- data/lib/chef/event_dispatch/events_output_stream.rb +37 -37
- data/lib/chef/event_loggers/base.rb +62 -62
- data/lib/chef/event_loggers/windows_eventlog.rb +101 -101
- data/lib/chef/exceptions.rb +543 -531
- data/lib/chef/file_access_control.rb +75 -75
- data/lib/chef/file_access_control/unix.rb +290 -290
- data/lib/chef/file_access_control/windows.rb +337 -337
- data/lib/chef/file_cache.rb +223 -223
- data/lib/chef/file_content_management/content_base.rb +58 -58
- data/lib/chef/file_content_management/deploy.rb +37 -37
- data/lib/chef/file_content_management/deploy/cp.rb +48 -48
- data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -77
- data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
- data/lib/chef/file_content_management/tempfile.rb +107 -107
- data/lib/chef/formatters/base.rb +246 -246
- data/lib/chef/formatters/doc.rb +443 -443
- data/lib/chef/formatters/error_description.rb +86 -86
- data/lib/chef/formatters/error_inspectors.rb +19 -19
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +183 -183
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +154 -154
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -168
- data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +82 -82
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +128 -128
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +147 -147
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +124 -124
- data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +121 -121
- data/lib/chef/formatters/error_mapper.rb +85 -85
- data/lib/chef/formatters/indentable_output_stream.rb +182 -182
- data/lib/chef/formatters/minimal.rb +233 -233
- data/lib/chef/guard_interpreter.rb +32 -32
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +47 -47
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
- data/lib/chef/handler.rb +266 -266
- data/lib/chef/handler/error_report.rb +33 -33
- data/lib/chef/handler/json_file.rb +62 -62
- data/lib/chef/http.rb +539 -539
- data/lib/chef/http/api_versions.rb +56 -56
- data/lib/chef/http/auth_credentials.rb +59 -59
- data/lib/chef/http/authenticator.rb +118 -118
- data/lib/chef/http/basic_client.rb +157 -157
- data/lib/chef/http/cookie_jar.rb +31 -31
- data/lib/chef/http/cookie_manager.rb +59 -59
- data/lib/chef/http/decompressor.rb +142 -142
- data/lib/chef/http/http_request.rb +189 -189
- data/lib/chef/http/json_input.rb +73 -73
- data/lib/chef/http/json_output.rb +81 -81
- data/lib/chef/http/json_to_model_output.rb +34 -34
- data/lib/chef/http/remote_request_id.rb +46 -46
- data/lib/chef/http/simple.rb +40 -40
- data/lib/chef/http/simple_json.rb +43 -43
- data/lib/chef/http/socketless_chef_zero_client.rb +209 -209
- data/lib/chef/http/ssl_policies.rb +130 -130
- data/lib/chef/http/validate_content_length.rb +114 -114
- data/lib/chef/json_compat.rb +68 -68
- data/lib/chef/key.rb +269 -269
- data/lib/chef/knife.rb +620 -620
- data/lib/chef/knife/.DS_Store +0 -0
- data/lib/chef/knife/bootstrap.rb +525 -501
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +159 -159
- data/lib/chef/knife/bootstrap/client_builder.rb +208 -208
- data/lib/chef/knife/bootstrap/templates/README.md +11 -11
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +243 -243
- data/lib/chef/knife/client_bulk_delete.rb +103 -103
- data/lib/chef/knife/client_create.rb +110 -110
- data/lib/chef/knife/client_delete.rb +62 -62
- data/lib/chef/knife/client_edit.rb +52 -52
- data/lib/chef/knife/client_key_create.rb +70 -70
- data/lib/chef/knife/client_key_delete.rb +77 -77
- data/lib/chef/knife/client_key_edit.rb +80 -80
- data/lib/chef/knife/client_key_list.rb +70 -70
- data/lib/chef/knife/client_key_show.rb +77 -77
- data/lib/chef/knife/client_list.rb +41 -41
- data/lib/chef/knife/client_reregister.rb +58 -58
- data/lib/chef/knife/client_show.rb +48 -48
- data/lib/chef/knife/config_get.rb +126 -126
- data/lib/chef/knife/config_get_profile.rb +37 -37
- data/lib/chef/knife/config_list_profiles.rb +121 -121
- data/lib/chef/knife/config_use_profile.rb +50 -50
- data/lib/chef/knife/configure.rb +147 -147
- data/lib/chef/knife/configure_client.rb +48 -48
- data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
- data/lib/chef/knife/cookbook_create.rb +29 -29
- data/lib/chef/knife/cookbook_delete.rb +151 -151
- data/lib/chef/knife/cookbook_download.rb +142 -142
- data/lib/chef/knife/cookbook_list.rb +47 -47
- data/lib/chef/knife/cookbook_metadata.rb +106 -106
- data/lib/chef/knife/cookbook_metadata_from_file.rb +43 -43
- data/lib/chef/knife/cookbook_show.rb +98 -98
- data/lib/chef/knife/cookbook_site_download.rb +40 -40
- data/lib/chef/knife/cookbook_site_install.rb +40 -40
- data/lib/chef/knife/cookbook_site_list.rb +40 -40
- data/lib/chef/knife/cookbook_site_search.rb +40 -40
- data/lib/chef/knife/cookbook_site_share.rb +41 -41
- data/lib/chef/knife/cookbook_site_show.rb +40 -40
- data/lib/chef/knife/cookbook_site_unshare.rb +41 -41
- data/lib/chef/knife/cookbook_test.rb +95 -95
- data/lib/chef/knife/cookbook_upload.rb +308 -308
- data/lib/chef/knife/core/bootstrap_context.rb +273 -273
- data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
- data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
- data/lib/chef/knife/core/generic_presenter.rb +231 -231
- data/lib/chef/knife/core/hashed_command_loader.rb +99 -99
- data/lib/chef/knife/core/node_editor.rb +130 -130
- data/lib/chef/knife/core/node_presenter.rb +158 -158
- data/lib/chef/knife/core/object_loader.rb +115 -115
- data/lib/chef/knife/core/status_presenter.rb +172 -172
- data/lib/chef/knife/core/subcommand_loader.rb +183 -183
- data/lib/chef/knife/core/text_formatter.rb +85 -85
- data/lib/chef/knife/core/ui.rb +286 -286
- data/lib/chef/knife/data_bag_create.rb +80 -80
- data/lib/chef/knife/data_bag_delete.rb +49 -49
- data/lib/chef/knife/data_bag_edit.rb +74 -74
- data/lib/chef/knife/data_bag_from_file.rb +113 -113
- data/lib/chef/knife/data_bag_list.rb +42 -42
- data/lib/chef/knife/data_bag_secret_options.rb +142 -142
- data/lib/chef/knife/data_bag_show.rb +69 -69
- data/lib/chef/knife/delete.rb +125 -125
- data/lib/chef/knife/deps.rb +154 -154
- data/lib/chef/knife/diff.rb +84 -84
- data/lib/chef/knife/download.rb +84 -84
- data/lib/chef/knife/edit.rb +88 -88
- data/lib/chef/knife/environment_compare.rb +127 -127
- data/lib/chef/knife/environment_create.rb +52 -52
- data/lib/chef/knife/environment_delete.rb +44 -44
- data/lib/chef/knife/environment_edit.rb +44 -44
- data/lib/chef/knife/environment_from_file.rb +84 -84
- data/lib/chef/knife/environment_list.rb +41 -41
- data/lib/chef/knife/environment_show.rb +47 -47
- data/lib/chef/knife/exec.rb +87 -87
- data/lib/chef/knife/key_create.rb +112 -112
- data/lib/chef/knife/key_create_base.rb +50 -50
- data/lib/chef/knife/key_delete.rb +55 -55
- data/lib/chef/knife/key_edit.rb +118 -118
- data/lib/chef/knife/key_edit_base.rb +55 -55
- data/lib/chef/knife/key_list.rb +88 -88
- data/lib/chef/knife/key_list_base.rb +45 -45
- data/lib/chef/knife/key_show.rb +53 -53
- data/lib/chef/knife/list.rb +172 -172
- data/lib/chef/knife/node_bulk_delete.rb +74 -74
- data/lib/chef/knife/node_create.rb +47 -47
- data/lib/chef/knife/node_delete.rb +46 -46
- data/lib/chef/knife/node_edit.rb +70 -70
- data/lib/chef/knife/node_environment_set.rb +54 -54
- data/lib/chef/knife/node_from_file.rb +51 -51
- data/lib/chef/knife/node_list.rb +44 -44
- data/lib/chef/knife/node_policy_set.rb +79 -79
- data/lib/chef/knife/node_run_list_add.rb +104 -104
- data/lib/chef/knife/node_run_list_remove.rb +67 -67
- data/lib/chef/knife/node_run_list_set.rb +66 -66
- data/lib/chef/knife/node_show.rb +61 -61
- data/lib/chef/knife/null.rb +10 -10
- data/lib/chef/knife/osc_user_create.rb +97 -97
- data/lib/chef/knife/osc_user_delete.rb +51 -51
- data/lib/chef/knife/osc_user_edit.rb +58 -58
- data/lib/chef/knife/osc_user_list.rb +47 -47
- data/lib/chef/knife/osc_user_reregister.rb +64 -64
- data/lib/chef/knife/osc_user_show.rb +53 -53
- data/lib/chef/knife/raw.rb +124 -124
- data/lib/chef/knife/recipe_list.rb +32 -32
- data/lib/chef/knife/rehash.rb +65 -65
- data/lib/chef/knife/role_bulk_delete.rb +65 -65
- data/lib/chef/knife/role_create.rb +53 -53
- data/lib/chef/knife/role_delete.rb +46 -46
- data/lib/chef/knife/role_edit.rb +45 -45
- data/lib/chef/knife/role_env_run_list_add.rb +87 -87
- data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
- data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
- data/lib/chef/knife/role_env_run_list_replace.rb +60 -60
- data/lib/chef/knife/role_env_run_list_set.rb +70 -70
- data/lib/chef/knife/role_from_file.rb +51 -51
- data/lib/chef/knife/role_list.rb +42 -42
- data/lib/chef/knife/role_run_list_add.rb +87 -87
- data/lib/chef/knife/role_run_list_clear.rb +55 -55
- data/lib/chef/knife/role_run_list_remove.rb +56 -56
- data/lib/chef/knife/role_run_list_replace.rb +60 -60
- data/lib/chef/knife/role_run_list_set.rb +69 -69
- data/lib/chef/knife/role_show.rb +48 -48
- data/lib/chef/knife/search.rb +194 -194
- data/lib/chef/knife/serve.rb +64 -64
- data/lib/chef/knife/show.rb +72 -72
- data/lib/chef/knife/ssh.rb +634 -634
- data/lib/chef/knife/ssl_check.rb +283 -283
- data/lib/chef/knife/ssl_fetch.rb +161 -161
- data/lib/chef/knife/status.rb +110 -110
- data/lib/chef/knife/supermarket_download.rb +122 -122
- data/lib/chef/knife/supermarket_install.rb +193 -193
- data/lib/chef/knife/supermarket_list.rb +65 -65
- data/lib/chef/knife/supermarket_search.rb +53 -53
- data/lib/chef/knife/supermarket_share.rb +166 -166
- data/lib/chef/knife/supermarket_show.rb +67 -67
- data/lib/chef/knife/supermarket_unshare.rb +61 -61
- data/lib/chef/knife/tag_create.rb +52 -52
- data/lib/chef/knife/tag_delete.rb +60 -60
- data/lib/chef/knife/tag_list.rb +47 -47
- data/lib/chef/knife/upload.rb +86 -86
- data/lib/chef/knife/user_create.rb +151 -151
- data/lib/chef/knife/user_delete.rb +96 -96
- data/lib/chef/knife/user_edit.rb +82 -82
- data/lib/chef/knife/user_key_create.rb +70 -70
- data/lib/chef/knife/user_key_delete.rb +77 -77
- data/lib/chef/knife/user_key_edit.rb +80 -80
- data/lib/chef/knife/user_key_list.rb +70 -70
- data/lib/chef/knife/user_key_show.rb +77 -77
- data/lib/chef/knife/user_list.rb +44 -44
- data/lib/chef/knife/user_reregister.rb +90 -90
- data/lib/chef/knife/user_show.rb +79 -79
- data/lib/chef/knife/xargs.rb +282 -282
- data/lib/chef/local_mode.rb +129 -129
- data/lib/chef/log.rb +70 -70
- data/lib/chef/log/syslog.rb +45 -45
- data/lib/chef/log/winevt.rb +99 -99
- data/lib/chef/mash.rb +232 -232
- data/lib/chef/mixin/.DS_Store +0 -0
- data/lib/chef/mixin/api_version_request_handling.rb +64 -64
- data/lib/chef/mixin/checksum.rb +37 -37
- data/lib/chef/mixin/convert_to_class_name.rb +126 -126
- data/lib/chef/mixin/create_path.rb +71 -71
- data/lib/chef/mixin/deep_merge.rb +140 -140
- data/lib/chef/mixin/deprecation.rb +117 -117
- data/lib/chef/mixin/descendants_tracker.rb +81 -81
- data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -39
- data/lib/chef/mixin/file_class.rb +35 -35
- data/lib/chef/mixin/from_file.rb +55 -55
- data/lib/chef/mixin/get_source_from_package.rb +47 -47
- data/lib/chef/mixin/homebrew_user.rb +79 -79
- data/lib/chef/mixin/lazy_module_include.rb +77 -77
- data/lib/chef/mixin/notifying_block.rb +51 -51
- data/lib/chef/mixin/openssl_helper.rb +402 -402
- data/lib/chef/mixin/params_validate.rb +498 -498
- data/lib/chef/mixin/path_sanity.rb +66 -66
- data/lib/chef/mixin/powershell_exec.rb +105 -105
- data/lib/chef/mixin/powershell_out.rb +98 -98
- data/lib/chef/mixin/powershell_type_coercions.rb +84 -84
- data/lib/chef/mixin/properties.rb +323 -323
- data/lib/chef/mixin/provides.rb +29 -29
- data/lib/chef/mixin/proxified_socket.rb +42 -42
- data/lib/chef/mixin/securable.rb +192 -192
- data/lib/chef/mixin/shell_out.rb +258 -258
- data/lib/chef/mixin/subclass_directive.rb +37 -37
- data/lib/chef/mixin/template.rb +265 -265
- data/lib/chef/mixin/unformatter.rb +32 -32
- data/lib/chef/mixin/uris.rb +42 -42
- data/lib/chef/mixin/user_context.rb +55 -55
- data/lib/chef/mixin/versioned_api.rb +84 -84
- data/lib/chef/mixin/which.rb +52 -52
- data/lib/chef/mixin/why_run.rb +326 -326
- data/lib/chef/mixin/wide_string.rb +54 -54
- data/lib/chef/mixin/windows_architecture_helper.rb +113 -113
- data/lib/chef/mixin/windows_env_helper.rb +67 -67
- data/lib/chef/mixin/xml_escape.rb +138 -138
- data/lib/chef/mixins.rb +12 -12
- data/lib/chef/monkey_patches/net_http.rb +64 -64
- data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
- data/lib/chef/monkey_patches/win32/registry.rb +86 -86
- data/lib/chef/monologger.rb +4 -4
- data/lib/chef/nil_argument.rb +3 -3
- data/lib/chef/node.rb +688 -688
- data/lib/chef/node/attribute.rb +649 -649
- data/lib/chef/node/attribute_collections.rb +213 -213
- data/lib/chef/node/common_api.rb +121 -121
- data/lib/chef/node/immutable_collections.rb +182 -182
- data/lib/chef/node/mixin/deep_merge_cache.rb +61 -61
- data/lib/chef/node/mixin/immutablize_array.rb +180 -180
- data/lib/chef/node/mixin/immutablize_hash.rb +165 -165
- data/lib/chef/node/mixin/state_tracking.rb +96 -96
- data/lib/chef/node_map.rb +315 -315
- data/lib/chef/null_logger.rb +79 -79
- data/lib/chef/org.rb +144 -144
- data/lib/chef/platform.rb +30 -30
- data/lib/chef/platform/priority_map.rb +41 -41
- data/lib/chef/platform/provider_handler_map.rb +29 -29
- data/lib/chef/platform/provider_mapping.rb +55 -55
- data/lib/chef/platform/provider_priority_map.rb +11 -11
- data/lib/chef/platform/query_helpers.rb +100 -100
- data/lib/chef/platform/rebooter.rb +71 -71
- data/lib/chef/platform/resource_handler_map.rb +29 -29
- data/lib/chef/platform/resource_priority_map.rb +11 -11
- data/lib/chef/platform/service_helpers.rb +122 -122
- data/lib/chef/policy_builder.rb +42 -42
- data/lib/chef/policy_builder/dynamic.rb +185 -185
- data/lib/chef/policy_builder/expand_node_object.rb +252 -252
- data/lib/chef/policy_builder/policyfile.rb +569 -569
- data/lib/chef/powershell.rb +57 -57
- data/lib/chef/property.rb +731 -731
- data/lib/chef/provider.rb +410 -408
- data/lib/chef/provider/.DS_Store +0 -0
- data/lib/chef/provider/apt_preference.rb +94 -94
- data/lib/chef/provider/apt_repository.rb +360 -360
- data/lib/chef/provider/apt_update.rb +80 -80
- data/lib/chef/provider/batch.rb +45 -45
- data/lib/chef/provider/cookbook_file.rb +47 -47
- data/lib/chef/provider/cookbook_file/content.rb +49 -49
- data/lib/chef/provider/cron.rb +256 -256
- data/lib/chef/provider/cron/aix.rb +50 -50
- data/lib/chef/provider/cron/solaris.rb +22 -22
- data/lib/chef/provider/cron/unix.rb +83 -83
- data/lib/chef/provider/directory.rb +164 -164
- data/lib/chef/provider/dsc_resource.rb +209 -209
- data/lib/chef/provider/dsc_script.rb +185 -185
- data/lib/chef/provider/execute.rb +130 -130
- data/lib/chef/provider/file.rb +478 -478
- data/lib/chef/provider/file/content.rb +39 -39
- data/lib/chef/provider/git.rb +357 -357
- data/lib/chef/provider/group.rb +179 -179
- data/lib/chef/provider/group/aix.rb +79 -79
- data/lib/chef/provider/group/dscl.rb +177 -177
- data/lib/chef/provider/group/gpasswd.rb +58 -58
- data/lib/chef/provider/group/groupadd.rb +133 -133
- data/lib/chef/provider/group/groupmod.rb +123 -123
- data/lib/chef/provider/group/pw.rb +137 -137
- data/lib/chef/provider/group/suse.rb +83 -83
- data/lib/chef/provider/group/usermod.rb +90 -90
- data/lib/chef/provider/group/windows.rb +110 -110
- data/lib/chef/provider/http_request.rb +132 -132
- data/lib/chef/provider/ifconfig.rb +271 -271
- data/lib/chef/provider/ifconfig/aix.rb +94 -94
- data/lib/chef/provider/ifconfig/debian.rb +88 -88
- data/lib/chef/provider/ifconfig/redhat.rb +54 -54
- data/lib/chef/provider/launchd.rb +231 -231
- data/lib/chef/provider/link.rb +168 -168
- data/lib/chef/provider/log.rb +43 -43
- data/lib/chef/provider/lwrp_base.rb +89 -89
- data/lib/chef/provider/mdadm.rb +85 -85
- data/lib/chef/provider/mount.rb +175 -175
- data/lib/chef/provider/mount/aix.rb +221 -221
- data/lib/chef/provider/mount/mount.rb +283 -283
- data/lib/chef/provider/mount/solaris.rb +275 -275
- data/lib/chef/provider/mount/windows.rb +92 -92
- data/lib/chef/provider/noop.rb +37 -37
- data/lib/chef/provider/ohai.rb +45 -45
- data/lib/chef/provider/osx_profile.rb +251 -251
- data/lib/chef/provider/package.rb +687 -687
- data/lib/chef/provider/package/.DS_Store +0 -0
- data/lib/chef/provider/package/apt.rb +249 -249
- data/lib/chef/provider/package/bff.rb +142 -142
- data/lib/chef/provider/package/cab.rb +187 -187
- data/lib/chef/provider/package/chocolatey.rb +285 -285
- data/lib/chef/provider/package/dnf.rb +196 -196
- data/lib/chef/provider/package/dnf/dnf_helper.py +114 -100
- data/lib/chef/provider/package/dnf/python_helper.rb +173 -173
- data/lib/chef/provider/package/dnf/version.rb +56 -56
- data/lib/chef/provider/package/dpkg.rb +241 -241
- data/lib/chef/provider/package/freebsd/.DS_Store +0 -0
- data/lib/chef/provider/package/freebsd/base.rb +89 -89
- data/lib/chef/provider/package/freebsd/pkg.rb +114 -114
- data/lib/chef/provider/package/freebsd/pkgng.rb +76 -76
- data/lib/chef/provider/package/freebsd/port.rb +60 -60
- data/lib/chef/provider/package/homebrew.rb +138 -138
- data/lib/chef/provider/package/ips.rb +85 -85
- data/lib/chef/provider/package/macports.rb +101 -101
- data/lib/chef/provider/package/msu.rb +161 -161
- data/lib/chef/provider/package/openbsd.rb +139 -139
- data/lib/chef/provider/package/pacman.rb +103 -103
- data/lib/chef/provider/package/paludis.rb +85 -85
- data/lib/chef/provider/package/portage.rb +133 -133
- data/lib/chef/provider/package/powershell.rb +133 -133
- data/lib/chef/provider/package/rpm.rb +126 -126
- data/lib/chef/provider/package/rubygems.rb +617 -617
- data/lib/chef/provider/package/smartos.rb +92 -92
- data/lib/chef/provider/package/solaris.rb +137 -137
- data/lib/chef/provider/package/windows.rb +317 -317
- data/lib/chef/provider/package/windows/exe.rb +117 -117
- data/lib/chef/provider/package/windows/msi.rb +96 -96
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +99 -99
- data/lib/chef/provider/package/yum.rb +289 -289
- data/lib/chef/provider/package/yum/python_helper.rb +222 -222
- data/lib/chef/provider/package/yum/rpm_utils.rb +651 -651
- data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +79 -79
- data/lib/chef/provider/package/yum/simplejson/__init__.py +318 -318
- data/lib/chef/provider/package/yum/simplejson/decoder.py +354 -354
- data/lib/chef/provider/package/yum/simplejson/encoder.py +440 -440
- data/lib/chef/provider/package/yum/simplejson/scanner.py +65 -65
- data/lib/chef/provider/package/yum/simplejson/tool.py +37 -37
- data/lib/chef/provider/package/yum/version.rb +56 -56
- data/lib/chef/provider/package/yum/yum_cache.rb +93 -93
- data/lib/chef/provider/package/yum/yum_helper.py +211 -211
- data/lib/chef/provider/package/zypper.rb +167 -167
- data/lib/chef/provider/powershell_script.rb +223 -223
- data/lib/chef/provider/reboot.rb +78 -78
- data/lib/chef/provider/registry_key.rb +199 -199
- data/lib/chef/provider/remote_directory.rb +269 -269
- data/lib/chef/provider/remote_file.rb +66 -66
- data/lib/chef/provider/remote_file/cache_control_data.rb +195 -195
- data/lib/chef/provider/remote_file/content.rb +81 -81
- data/lib/chef/provider/remote_file/fetcher.rb +60 -60
- data/lib/chef/provider/remote_file/ftp.rb +172 -172
- data/lib/chef/provider/remote_file/http.rb +143 -143
- data/lib/chef/provider/remote_file/local_file.rb +60 -60
- data/lib/chef/provider/remote_file/network_file.rb +61 -61
- data/lib/chef/provider/remote_file/sftp.rb +105 -105
- data/lib/chef/provider/resource_update.rb +52 -52
- data/lib/chef/provider/route.rb +248 -248
- data/lib/chef/provider/ruby_block.rb +40 -40
- data/lib/chef/provider/script.rb +121 -121
- data/lib/chef/provider/service.rb +252 -252
- data/lib/chef/provider/service/aix.rb +125 -125
- data/lib/chef/provider/service/aixinit.rb +117 -117
- data/lib/chef/provider/service/arch.rb +118 -118
- data/lib/chef/provider/service/debian.rb +193 -193
- data/lib/chef/provider/service/freebsd.rb +194 -194
- data/lib/chef/provider/service/gentoo.rb +70 -70
- data/lib/chef/provider/service/init.rb +93 -93
- data/lib/chef/provider/service/insserv.rb +61 -61
- data/lib/chef/provider/service/invokercd.rb +41 -41
- data/lib/chef/provider/service/macosx.rb +252 -252
- data/lib/chef/provider/service/openbsd.rb +216 -216
- data/lib/chef/provider/service/redhat.rb +126 -126
- data/lib/chef/provider/service/simple.rb +172 -172
- data/lib/chef/provider/service/solaris.rb +127 -127
- data/lib/chef/provider/service/systemd.rb +189 -189
- data/lib/chef/provider/service/upstart.rb +260 -260
- data/lib/chef/provider/service/windows.rb +488 -488
- data/lib/chef/provider/subversion.rb +227 -227
- data/lib/chef/provider/support/yum_repo.erb +138 -138
- data/lib/chef/provider/support/zypper_repo.erb +17 -17
- data/lib/chef/provider/systemd_unit.rb +261 -261
- data/lib/chef/provider/template.rb +59 -59
- data/lib/chef/provider/template/content.rb +93 -93
- data/lib/chef/provider/template_finder.rb +62 -62
- data/lib/chef/provider/user.rb +221 -221
- data/lib/chef/provider/user/aix.rb +131 -131
- data/lib/chef/provider/user/dscl.rb +712 -712
- data/lib/chef/provider/user/linux.rb +116 -116
- data/lib/chef/provider/user/pw.rb +105 -105
- data/lib/chef/provider/user/solaris.rb +160 -160
- data/lib/chef/provider/user/useradd.rb +161 -161
- data/lib/chef/provider/user/windows.rb +126 -126
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
- data/lib/chef/provider/windows_env.rb +207 -207
- data/lib/chef/provider/windows_path.rb +61 -61
- data/lib/chef/provider/windows_script.rb +75 -75
- data/lib/chef/provider/windows_task.rb +631 -631
- data/lib/chef/provider/yum_repository.rb +130 -130
- data/lib/chef/provider/zypper_repository.rb +169 -169
- data/lib/chef/provider_resolver.rb +146 -146
- data/lib/chef/providers.rb +146 -146
- data/lib/chef/recipe.rb +110 -110
- data/lib/chef/request_id.rb +37 -37
- data/lib/chef/reserved_names.rb +9 -9
- data/lib/chef/resource.rb +1593 -1584
- data/lib/chef/resource/.DS_Store +0 -0
- data/lib/chef/resource/action_class.rb +90 -90
- data/lib/chef/resource/apt_package.rb +40 -40
- data/lib/chef/resource/apt_preference.rb +52 -52
- data/lib/chef/resource/apt_repository.rb +86 -86
- data/lib/chef/resource/apt_update.rb +41 -41
- data/lib/chef/resource/bash.rb +34 -34
- data/lib/chef/resource/batch.rb +34 -34
- data/lib/chef/resource/bff_package.rb +31 -31
- data/lib/chef/resource/breakpoint.rb +47 -47
- data/lib/chef/resource/build_essential.rb +142 -142
- data/lib/chef/resource/cab_package.rb +45 -45
- data/lib/chef/resource/chef_gem.rb +59 -59
- data/lib/chef/resource/chef_handler.rb +132 -132
- data/lib/chef/resource/chocolatey_config.rb +83 -83
- data/lib/chef/resource/chocolatey_package.rb +50 -50
- data/lib/chef/resource/chocolatey_source.rb +95 -95
- data/lib/chef/resource/conditional.rb +135 -135
- data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
- data/lib/chef/resource/cookbook_file.rb +45 -45
- data/lib/chef/resource/cron.rb +174 -174
- data/lib/chef/resource/cron_access.rb +70 -70
- data/lib/chef/resource/cron_d.rb +238 -238
- data/lib/chef/resource/csh.rb +39 -39
- data/lib/chef/resource/directory.rb +51 -51
- data/lib/chef/resource/dmg_package.rb +171 -171
- data/lib/chef/resource/dnf_package.rb +79 -79
- data/lib/chef/resource/dpkg_package.rb +33 -33
- data/lib/chef/resource/dsc_resource.rb +120 -120
- data/lib/chef/resource/dsc_script.rb +124 -124
- data/lib/chef/resource/execute.rb +201 -201
- data/lib/chef/resource/file.rb +105 -105
- data/lib/chef/resource/file/.DS_Store +0 -0
- data/lib/chef/resource/file/verification.rb +139 -139
- data/lib/chef/resource/file/verification/systemd_unit.rb +67 -67
- data/lib/chef/resource/freebsd_package.rb +73 -73
- data/lib/chef/resource/gem_package.rb +58 -58
- data/lib/chef/resource/git.rb +35 -35
- data/lib/chef/resource/group.rb +61 -61
- data/lib/chef/resource/homebrew_cask.rb +100 -100
- data/lib/chef/resource/homebrew_package.rb +38 -38
- data/lib/chef/resource/homebrew_tap.rb +87 -87
- data/lib/chef/resource/hostname.rb +265 -265
- data/lib/chef/resource/http_request.rb +55 -55
- data/lib/chef/resource/ifconfig.rb +105 -105
- data/lib/chef/resource/ips_package.rb +38 -38
- data/lib/chef/resource/kernel_module.rb +135 -135
- data/lib/chef/resource/ksh.rb +39 -39
- data/lib/chef/resource/launchd.rb +252 -252
- data/lib/chef/resource/link.rb +93 -93
- data/lib/chef/resource/locale.rb +94 -94
- data/lib/chef/resource/log.rb +52 -52
- data/lib/chef/resource/lwrp_base.rb +123 -123
- data/lib/chef/resource/macos_userdefaults.rb +132 -132
- data/lib/chef/resource/macosx_service.rb +41 -41
- data/lib/chef/resource/macports_package.rb +29 -29
- data/lib/chef/resource/mdadm.rb +67 -67
- data/lib/chef/resource/mount.rb +96 -96
- data/lib/chef/resource/msu_package.rb +49 -49
- data/lib/chef/resource/ohai.rb +41 -41
- data/lib/chef/resource/ohai_hint.rb +95 -95
- data/lib/chef/resource/openbsd_package.rb +38 -38
- data/lib/chef/resource/openssl_dhparam.rb +77 -77
- data/lib/chef/resource/openssl_ec_private_key.rb +93 -93
- data/lib/chef/resource/openssl_ec_public_key.rb +75 -75
- data/lib/chef/resource/openssl_rsa_private_key.rb +91 -91
- data/lib/chef/resource/openssl_rsa_public_key.rb +74 -74
- data/lib/chef/resource/openssl_x509_certificate.rb +221 -221
- data/lib/chef/resource/openssl_x509_crl.rb +132 -132
- data/lib/chef/resource/openssl_x509_request.rb +151 -151
- data/lib/chef/resource/osx_profile.rb +48 -48
- data/lib/chef/resource/package.rb +73 -73
- data/lib/chef/resource/pacman_package.rb +30 -30
- data/lib/chef/resource/paludis_package.rb +38 -38
- data/lib/chef/resource/perl.rb +38 -38
- data/lib/chef/resource/portage_package.rb +33 -33
- data/lib/chef/resource/powershell_package.rb +52 -52
- data/lib/chef/resource/powershell_package_source.rb +169 -169
- data/lib/chef/resource/powershell_script.rb +59 -59
- data/lib/chef/resource/python.rb +36 -36
- data/lib/chef/resource/reboot.rb +46 -46
- data/lib/chef/resource/registry_key.rb +130 -130
- data/lib/chef/resource/remote_directory.rb +87 -87
- data/lib/chef/resource/remote_file.rb +181 -181
- data/lib/chef/resource/resource_notification.rb +143 -139
- data/lib/chef/resource/rhsm_errata.rb +46 -46
- data/lib/chef/resource/rhsm_errata_level.rb +51 -51
- data/lib/chef/resource/rhsm_register.rb +168 -168
- data/lib/chef/resource/rhsm_repo.rb +65 -65
- data/lib/chef/resource/rhsm_subscription.rb +98 -98
- data/lib/chef/resource/route.rb +46 -46
- data/lib/chef/resource/rpm_package.rb +33 -33
- data/lib/chef/resource/ruby.rb +37 -37
- data/lib/chef/resource/ruby_block.rb +45 -45
- data/lib/chef/resource/scm.rb +75 -75
- data/lib/chef/resource/script.rb +54 -54
- data/lib/chef/resource/service.rb +221 -221
- data/lib/chef/resource/smartos_package.rb +31 -31
- data/lib/chef/resource/solaris_package.rb +33 -33
- data/lib/chef/resource/ssh_known_hosts_entry.rb +146 -146
- data/lib/chef/resource/subversion.rb +55 -55
- data/lib/chef/resource/sudo.rb +230 -230
- data/lib/chef/resource/support/cron.d.erb +28 -28
- data/lib/chef/resource/support/cron_access.erb +4 -4
- data/lib/chef/resource/support/ssh_known_hosts.erb +3 -3
- data/lib/chef/resource/support/sudoer.erb +18 -18
- data/lib/chef/resource/swap_file.rb +209 -209
- data/lib/chef/resource/sysctl.rb +151 -151
- data/lib/chef/resource/systemd_unit.rb +86 -86
- data/lib/chef/resource/template.rb +211 -211
- data/lib/chef/resource/timezone.rb +135 -135
- data/lib/chef/resource/user.rb +159 -159
- data/lib/chef/resource/user/aix_user.rb +31 -31
- data/lib/chef/resource/user/dscl_user.rb +31 -31
- data/lib/chef/resource/user/linux_user.rb +32 -32
- data/lib/chef/resource/user/pw_user.rb +31 -31
- data/lib/chef/resource/user/solaris_user.rb +31 -31
- data/lib/chef/resource/user/windows_user.rb +35 -35
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
- data/lib/chef/resource/windows_ad_join.rb +120 -120
- data/lib/chef/resource/windows_auto_run.rb +87 -87
- data/lib/chef/resource/windows_certificate.rb +332 -332
- data/lib/chef/resource/windows_env.rb +49 -49
- data/lib/chef/resource/windows_feature.rb +90 -90
- data/lib/chef/resource/windows_feature_dism.rb +222 -222
- data/lib/chef/resource/windows_feature_powershell.rb +262 -262
- data/lib/chef/resource/windows_firewall_rule.rb +205 -205
- data/lib/chef/resource/windows_font.rb +125 -125
- data/lib/chef/resource/windows_package.rb +61 -61
- data/lib/chef/resource/windows_pagefile.rb +206 -206
- data/lib/chef/resource/windows_path.rb +38 -38
- data/lib/chef/resource/windows_printer.rb +146 -146
- data/lib/chef/resource/windows_printer_port.rb +136 -136
- data/lib/chef/resource/windows_script.rb +65 -65
- data/lib/chef/resource/windows_service.rb +121 -121
- data/lib/chef/resource/windows_share.rb +324 -324
- data/lib/chef/resource/windows_shortcut.rb +79 -79
- data/lib/chef/resource/windows_task.rb +349 -349
- data/lib/chef/resource/windows_workgroup.rb +112 -112
- data/lib/chef/resource/yum_package.rb +77 -77
- data/lib/chef/resource/yum_repository.rb +187 -187
- data/lib/chef/resource/zypper_package.rb +44 -44
- data/lib/chef/resource/zypper_repository.rb +103 -103
- data/lib/chef/resource_builder.rb +92 -92
- data/lib/chef/resource_collection.rb +153 -147
- data/lib/chef/resource_collection/resource_collection_serialization.rb +68 -68
- data/lib/chef/resource_collection/resource_list.rb +106 -106
- data/lib/chef/resource_collection/resource_set.rb +200 -200
- data/lib/chef/resource_collection/stepable_iterator.rb +122 -122
- data/lib/chef/resource_definition.rb +68 -68
- data/lib/chef/resource_definition_list.rb +38 -38
- data/lib/chef/resource_inspector.rb +108 -108
- data/lib/chef/resource_reporter.rb +337 -337
- data/lib/chef/resource_resolver.rb +160 -160
- data/lib/chef/resources.rb +147 -147
- data/lib/chef/role.rb +274 -274
- data/lib/chef/run_context.rb +708 -682
- data/lib/chef/run_context/cookbook_compiler.rb +344 -344
- data/lib/chef/run_list.rb +168 -168
- data/lib/chef/run_list/run_list_expansion.rb +236 -236
- data/lib/chef/run_list/run_list_item.rb +98 -98
- data/lib/chef/run_list/versioned_recipe_list.rb +104 -104
- data/lib/chef/run_lock.rb +197 -197
- data/lib/chef/run_status.rb +127 -127
- data/lib/chef/runner.rb +184 -144
- data/lib/chef/sandbox.rb +20 -20
- data/lib/chef/scan_access_control.rb +138 -138
- data/lib/chef/search/query.rb +182 -182
- data/lib/chef/server_api.rb +83 -83
- data/lib/chef/server_api_versions.rb +59 -59
- data/lib/chef/shell.rb +353 -353
- data/lib/chef/shell/ext.rb +593 -593
- data/lib/chef/shell/model_wrapper.rb +120 -120
- data/lib/chef/shell/shell_session.rb +310 -310
- data/lib/chef/user.rb +194 -194
- data/lib/chef/user_v1.rb +325 -325
- data/lib/chef/util/backup.rb +94 -94
- data/lib/chef/util/diff.rb +184 -184
- data/lib/chef/util/dsc/configuration_generator.rb +139 -139
- data/lib/chef/util/dsc/lcm_output_parser.rb +192 -192
- data/lib/chef/util/dsc/local_configuration_manager.rb +151 -151
- data/lib/chef/util/dsc/resource_info.rb +26 -26
- data/lib/chef/util/dsc/resource_store.rb +109 -109
- data/lib/chef/util/editor.rb +91 -91
- data/lib/chef/util/file_edit.rb +100 -100
- data/lib/chef/util/path_helper.rb +25 -25
- data/lib/chef/util/powershell/cmdlet.rb +173 -173
- data/lib/chef/util/powershell/cmdlet_result.rb +61 -61
- data/lib/chef/util/powershell/ps_credential.rb +41 -41
- data/lib/chef/util/selinux.rb +93 -93
- data/lib/chef/util/threaded_job_queue.rb +61 -61
- data/lib/chef/util/windows.rb +24 -24
- data/lib/chef/util/windows/logon_session.rb +129 -129
- data/lib/chef/util/windows/net_group.rb +78 -78
- data/lib/chef/util/windows/net_use.rb +81 -81
- data/lib/chef/util/windows/net_user.rb +172 -172
- data/lib/chef/util/windows/volume.rb +49 -49
- data/lib/chef/version.rb +36 -36
- data/lib/chef/version/platform.rb +62 -62
- data/lib/chef/version_class.rb +75 -75
- data/lib/chef/version_constraint.rb +118 -118
- data/lib/chef/version_constraint/platform.rb +28 -28
- data/lib/chef/version_string.rb +143 -143
- data/lib/chef/whitelist.rb +86 -86
- data/lib/chef/win32/api.rb +372 -372
- data/lib/chef/win32/api/crypto.rb +63 -63
- data/lib/chef/win32/api/error.rb +953 -953
- data/lib/chef/win32/api/file.rb +620 -620
- data/lib/chef/win32/api/installer.rb +165 -165
- data/lib/chef/win32/api/memory.rb +105 -105
- data/lib/chef/win32/api/net.rb +328 -328
- data/lib/chef/win32/api/process.rb +42 -42
- data/lib/chef/win32/api/psapi.rb +51 -51
- data/lib/chef/win32/api/registry.rb +51 -51
- data/lib/chef/win32/api/security.rb +476 -476
- data/lib/chef/win32/api/synchronization.rb +89 -89
- data/lib/chef/win32/api/system.rb +238 -238
- data/lib/chef/win32/api/unicode.rb +135 -135
- data/lib/chef/win32/crypto.rb +50 -50
- data/lib/chef/win32/error.rb +86 -86
- data/lib/chef/win32/eventlog.rb +31 -31
- data/lib/chef/win32/file.rb +226 -226
- data/lib/chef/win32/file/info.rb +99 -99
- data/lib/chef/win32/file/version_info.rb +93 -93
- data/lib/chef/win32/handle.rb +55 -55
- data/lib/chef/win32/memory.rb +101 -101
- data/lib/chef/win32/mutex.rb +116 -116
- data/lib/chef/win32/net.rb +326 -326
- data/lib/chef/win32/process.rb +97 -97
- data/lib/chef/win32/registry.rb +374 -374
- data/lib/chef/win32/security.rb +698 -698
- data/lib/chef/win32/security/ace.rb +123 -123
- data/lib/chef/win32/security/acl.rb +103 -103
- data/lib/chef/win32/security/securable_object.rb +109 -109
- data/lib/chef/win32/security/security_descriptor.rb +93 -93
- data/lib/chef/win32/security/sid.rb +347 -347
- data/lib/chef/win32/security/token.rb +72 -72
- data/lib/chef/win32/system.rb +62 -62
- data/lib/chef/win32/unicode.rb +66 -66
- data/lib/chef/win32/version.rb +151 -151
- data/lib/chef/win32_service_constants.rb +143 -143
- data/lib/chef/workstation_config_loader.rb +23 -23
- data/spec/.DS_Store +0 -0
- data/spec/data/.DS_Store +0 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
- data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
- data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
- data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
- data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
- data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
- data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
- data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
- data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
- data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
- data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
- data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
- data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
- data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
- data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
- data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
- data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
- data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
- data/spec/data/apt/var/www/apt/conf/distributions +7 -7
- data/spec/data/apt/var/www/apt/conf/incoming +4 -4
- data/spec/data/apt/var/www/apt/conf/pulls +3 -3
- data/spec/data/apt/var/www/apt/db/version +4 -4
- data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
- data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
- data/spec/data/bootstrap/no_proxy.erb +2 -2
- data/spec/data/bootstrap/secret.erb +9 -9
- data/spec/data/bootstrap/test-hints.erb +12 -12
- data/spec/data/bootstrap/test.erb +1 -1
- data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
- data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
- data/spec/data/client.d_00/00-foo.rb +2 -2
- data/spec/data/client.d_00/01-bar.rb +1 -1
- data/spec/data/client.d_00/02-strings.rb +2 -2
- data/spec/data/client.d_00/bar +1 -1
- data/spec/data/client.d_01/foo/bar.rb +1 -1
- data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
- data/spec/data/config.rb +6 -6
- data/spec/data/cookbooks/.DS_Store +0 -0
- data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
- data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
- data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
- data/spec/data/cookbooks/apache2/metadata.rb +2 -2
- data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
- data/spec/data/cookbooks/borken/metadata.rb +2 -2
- data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
- data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
- data/spec/data/cookbooks/chefignore +8 -8
- data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
- data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
- data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
- data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
- data/spec/data/cookbooks/java/.DS_Store +0 -0
- data/spec/data/cookbooks/java/files/.DS_Store +0 -0
- data/spec/data/cookbooks/java/files/default/java.response +1 -1
- data/spec/data/cookbooks/java/metadata.rb +2 -2
- data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
- data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
- data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
- data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
- data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
- data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
- data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
- data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
- data/spec/data/cookbooks/openldap/metadata.rb +8 -8
- data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
- data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
- data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
- data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
- data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
- data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
- data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
- data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
- data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
- data/spec/data/cookbooks/preseed/metadata.rb +2 -2
- data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
- data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
- data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
- data/spec/data/definitions/test.rb +4 -4
- data/spec/data/environment-config.rb +4 -4
- data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
- data/spec/data/fileedit/hosts +4 -4
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
- data/spec/data/kitchen/chefignore +6 -6
- data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
- data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
- data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
- data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
- data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
- data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
- data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
- data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
- data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
- data/spec/data/knife_subcommand/test_yourself.rb +21 -21
- data/spec/data/lwrp/providers/buck_passer.rb +28 -28
- data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
- data/spec/data/lwrp/providers/inline_compiler.rb +24 -24
- data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
- data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
- data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
- data/spec/data/lwrp/resources/bar.rb +2 -2
- data/spec/data/lwrp/resources/buck_passer.rb +5 -5
- data/spec/data/lwrp/resources/buck_passer_2.rb +3 -3
- data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -3
- data/spec/data/lwrp/resources/foo.rb +4 -4
- data/spec/data/lwrp/resources/inline_compiler.rb +3 -3
- data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -5
- data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -3
- data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -3
- data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
- data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
- data/spec/data/lwrp_override/resources/foo.rb +10 -10
- data/spec/data/mac_users/.DS_Store +0 -0
- data/spec/data/mac_users/10.7-8.plist.xml +559 -559
- data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
- data/spec/data/mac_users/10.7.plist.xml +559 -559
- data/spec/data/mac_users/10.7.shadow.xml +11 -11
- data/spec/data/mac_users/10.8.plist.xml +559 -559
- data/spec/data/mac_users/10.8.shadow.xml +21 -21
- data/spec/data/mac_users/10.9.plist.xml +560 -560
- data/spec/data/mac_users/10.9.shadow.xml +21 -21
- data/spec/data/metadata/quick_start/metadata.rb +19 -19
- data/spec/data/mixin/invalid_data.rb +3 -3
- data/spec/data/mixin/real_data.rb +2 -2
- data/spec/data/nested.json +2 -2
- data/spec/data/nodes/Tim.local.json +3 -0
- data/spec/data/nodes/Tims-MBP.local.json +3 -0
- data/spec/data/nodes/default.rb +15 -15
- data/spec/data/nodes/test.example.com.rb +17 -17
- data/spec/data/nodes/test.rb +15 -15
- data/spec/data/null_config.rb +1 -1
- data/spec/data/object_loader/environments/test.json +7 -7
- data/spec/data/object_loader/environments/test.rb +2 -2
- data/spec/data/object_loader/environments/test_json_class.json +8 -8
- data/spec/data/object_loader/nodes/test.json +7 -7
- data/spec/data/object_loader/nodes/test.rb +2 -2
- data/spec/data/object_loader/nodes/test_json_class.json +8 -8
- data/spec/data/object_loader/roles/test.json +7 -7
- data/spec/data/object_loader/roles/test.rb +2 -2
- data/spec/data/object_loader/roles/test_json_class.json +8 -8
- data/spec/data/partial_one.erb +1 -1
- data/spec/data/prefer_metadata_json/metadata.json +51 -51
- data/spec/data/prefer_metadata_json/metadata.rb +6 -6
- data/spec/data/recipes/test.rb +7 -7
- data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -1
- data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -1
- data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -2
- data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -3
- data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -1
- data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -2
- data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -3
- data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -3
- data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -1
- data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -2
- data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -3
- data/spec/data/run_context/.DS_Store +0 -0
- data/spec/data/run_context/cookbooks/.DS_Store +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
- data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -2
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
- data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
- data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
- data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
- data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
- data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
- data/spec/data/run_context/nodes/run_context.rb +5 -5
- data/spec/data/sample_msu1.xml +10 -10
- data/spec/data/sample_msu2.xml +14 -14
- data/spec/data/sample_msu3.xml +16 -16
- data/spec/data/search_queries_to_transform.txt +98 -98
- data/spec/data/shef-config.rb +11 -11
- data/spec/data/ssl/5e707473.0 +18 -18
- data/spec/data/ssl/chef-rspec.cert +27 -27
- data/spec/data/ssl/chef-rspec.key +27 -27
- data/spec/data/ssl/key.pem +15 -15
- data/spec/data/ssl/private_key.pem +27 -27
- data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
- data/spec/data/standalone_cookbook/chefignore +9 -9
- data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
- data/spec/data/templates/failed.erb +5 -5
- data/spec/data/trusted_certs/example.crt +22 -22
- data/spec/data/trusted_certs/example_no_cn.crt +36 -36
- data/spec/data/trusted_certs/intermediate.pem +27 -27
- data/spec/data/trusted_certs/opscode.pem +57 -57
- data/spec/data/trusted_certs/root.pem +22 -22
- data/spec/data/windows_certificates/base64_test.cer +22 -22
- data/spec/data/windows_certificates/test.pem +21 -21
- data/spec/functional/.DS_Store +0 -0
- data/spec/functional/application_spec.rb +58 -58
- data/spec/functional/assets/chefinittest +36 -36
- data/spec/functional/assets/inittest +36 -36
- data/spec/functional/assets/testchefsubsys +10 -10
- data/spec/functional/assets/yumrepo/repodata/repomd.xml +21 -21
- data/spec/functional/audit/rspec_formatter_spec.rb +54 -54
- data/spec/functional/audit/runner_spec.rb +121 -121
- data/spec/functional/dsl/reboot_pending_spec.rb +106 -106
- data/spec/functional/dsl/registry_helper_spec.rb +61 -61
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +104 -104
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
- data/spec/functional/http/simple_spec.rb +146 -146
- data/spec/functional/knife/configure_spec.rb +33 -33
- data/spec/functional/knife/cookbook_delete_spec.rb +156 -156
- data/spec/functional/knife/exec_spec.rb +55 -55
- data/spec/functional/knife/rehash_spec.rb +39 -39
- data/spec/functional/knife/smoke_test.rb +42 -42
- data/spec/functional/knife/ssh_spec.rb +359 -359
- data/spec/functional/mixin/from_file_spec.rb +82 -82
- data/spec/functional/mixin/powershell_out_spec.rb +43 -43
- data/spec/functional/mixin/shell_out_spec.rb +78 -78
- data/spec/functional/mixin/user_context_spec.rb +117 -117
- data/spec/functional/notifications_spec.rb +238 -238
- data/spec/functional/provider/remote_file/cache_control_data_spec.rb +100 -100
- data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -51
- data/spec/functional/rebooter_spec.rb +117 -117
- data/spec/functional/resource/.DS_Store +0 -0
- data/spec/functional/resource/aix_service_spec.rb +138 -138
- data/spec/functional/resource/aixinit_service_spec.rb +211 -211
- data/spec/functional/resource/apt_package_spec.rb +386 -386
- data/spec/functional/resource/base.rb +28 -28
- data/spec/functional/resource/bash_spec.rb +54 -54
- data/spec/functional/resource/batch_spec.rb +34 -34
- data/spec/functional/resource/bff_spec.rb +120 -120
- data/spec/functional/resource/chocolatey_package_spec.rb +118 -118
- data/spec/functional/resource/cookbook_file_spec.rb +81 -81
- data/spec/functional/resource/cron_spec.rb +179 -179
- data/spec/functional/resource/directory_spec.rb +43 -43
- data/spec/functional/resource/dnf_package_spec.rb +686 -686
- data/spec/functional/resource/dpkg_package_spec.rb +339 -339
- data/spec/functional/resource/dsc_resource_spec.rb +90 -90
- data/spec/functional/resource/dsc_script_spec.rb +484 -484
- data/spec/functional/resource/execute_spec.rb +171 -171
- data/spec/functional/resource/file_spec.rb +167 -167
- data/spec/functional/resource/git_spec.rb +257 -257
- data/spec/functional/resource/group_spec.rb +497 -497
- data/spec/functional/resource/ifconfig_spec.rb +172 -172
- data/spec/functional/resource/insserv_spec.rb +206 -205
- data/spec/functional/resource/link_spec.rb +699 -699
- data/spec/functional/resource/mount_spec.rb +207 -207
- data/spec/functional/resource/msu_package_spec.rb +98 -98
- data/spec/functional/resource/ohai_spec.rb +62 -62
- data/spec/functional/resource/powershell_script_spec.rb +599 -599
- data/spec/functional/resource/reboot_spec.rb +103 -103
- data/spec/functional/resource/registry_spec.rb +676 -676
- data/spec/functional/resource/remote_directory_spec.rb +220 -220
- data/spec/functional/resource/remote_file_spec.rb +424 -424
- data/spec/functional/resource/rpm_spec.rb +120 -120
- data/spec/functional/resource/template_spec.rb +245 -245
- data/spec/functional/resource/timezone_spec.rb +39 -39
- data/spec/functional/resource/user/dscl_spec.rb +195 -195
- data/spec/functional/resource/user/windows_spec.rb +245 -245
- data/spec/functional/resource/windows_certificate_spec.rb +492 -492
- data/spec/functional/resource/windows_env_spec.rb +285 -285
- data/spec/functional/resource/windows_package_spec.rb +168 -168
- data/spec/functional/resource/windows_path_spec.rb +64 -64
- data/spec/functional/resource/windows_service_spec.rb +102 -102
- data/spec/functional/resource/windows_task_spec.rb +1917 -1917
- data/spec/functional/resource/yum_package_spec.rb +959 -959
- data/spec/functional/resource/zypper_package_spec.rb +233 -233
- data/spec/functional/root_alias_spec.rb +78 -78
- data/spec/functional/run_lock_spec.rb +473 -473
- data/spec/functional/shell_spec.rb +146 -146
- data/spec/functional/tiny_server_spec.rb +79 -79
- data/spec/functional/util/.DS_Store +0 -0
- data/spec/functional/util/path_helper_spec.rb +37 -37
- data/spec/functional/util/powershell/cmdlet_spec.rb +111 -111
- data/spec/functional/version_spec.rb +35 -35
- data/spec/functional/win32/crypto_spec.rb +54 -54
- data/spec/functional/win32/registry_spec.rb +624 -624
- data/spec/functional/win32/security_spec.rb +206 -206
- data/spec/functional/win32/service_manager_spec.rb +220 -220
- data/spec/functional/win32/sid_spec.rb +55 -55
- data/spec/functional/win32/version_info_spec.rb +50 -50
- data/spec/functional/win32/versions_spec.rb +115 -115
- data/spec/integration/.DS_Store +0 -0
- data/spec/integration/client/client_spec.rb +732 -732
- data/spec/integration/client/exit_code_spec.rb +142 -142
- data/spec/integration/client/ipv6_spec.rb +134 -134
- data/spec/integration/knife/chef_fs_data_store_spec.rb +556 -556
- data/spec/integration/knife/chef_repo_path_spec.rb +961 -959
- data/spec/integration/knife/chef_repository_file_system_spec.rb +199 -199
- data/spec/integration/knife/chefignore_spec.rb +300 -300
- data/spec/integration/knife/client_bulk_delete_spec.rb +130 -130
- data/spec/integration/knife/client_create_spec.rb +69 -69
- data/spec/integration/knife/client_delete_spec.rb +63 -63
- data/spec/integration/knife/client_key_create_spec.rb +65 -65
- data/spec/integration/knife/client_key_delete_spec.rb +42 -42
- data/spec/integration/knife/client_key_list_spec.rb +60 -60
- data/spec/integration/knife/client_key_show_spec.rb +44 -44
- data/spec/integration/knife/client_list_spec.rb +48 -48
- data/spec/integration/knife/client_show_spec.rb +36 -36
- data/spec/integration/knife/common_options_spec.rb +173 -173
- data/spec/integration/knife/config_get_profile_spec.rb +112 -112
- data/spec/integration/knife/config_get_spec.rb +183 -183
- data/spec/integration/knife/config_list_profiles_spec.rb +188 -188
- data/spec/integration/knife/config_use_profile_spec.rb +100 -100
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
- data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -64
- data/spec/integration/knife/cookbook_download_spec.rb +71 -71
- data/spec/integration/knife/cookbook_list_spec.rb +54 -54
- data/spec/integration/knife/cookbook_show_spec.rb +148 -148
- data/spec/integration/knife/cookbook_upload_spec.rb +90 -90
- data/spec/integration/knife/data_bag_create_spec.rb +124 -124
- data/spec/integration/knife/data_bag_delete_spec.rb +58 -58
- data/spec/integration/knife/data_bag_edit_spec.rb +104 -104
- data/spec/integration/knife/data_bag_from_file_spec.rb +115 -115
- data/spec/integration/knife/data_bag_list_spec.rb +43 -43
- data/spec/integration/knife/data_bag_show_spec.rb +94 -94
- data/spec/integration/knife/delete_spec.rb +1017 -1017
- data/spec/integration/knife/deps_spec.rb +702 -702
- data/spec/integration/knife/diff_spec.rb +602 -602
- data/spec/integration/knife/download_spec.rb +1333 -1333
- data/spec/integration/knife/environment_compare_spec.rb +74 -74
- data/spec/integration/knife/environment_create_spec.rb +40 -40
- data/spec/integration/knife/environment_delete_spec.rb +36 -36
- data/spec/integration/knife/environment_from_file_spec.rb +115 -115
- data/spec/integration/knife/environment_list_spec.rb +41 -41
- data/spec/integration/knife/environment_show_spec.rb +76 -76
- data/spec/integration/knife/list_spec.rb +1059 -1059
- data/spec/integration/knife/node_bulk_delete_spec.rb +51 -51
- data/spec/integration/knife/node_create_spec.rb +46 -46
- data/spec/integration/knife/node_delete_spec.rb +47 -47
- data/spec/integration/knife/node_environment_set_spec.rb +45 -45
- data/spec/integration/knife/node_from_file_spec.rb +58 -58
- data/spec/integration/knife/node_list_spec.rb +44 -44
- data/spec/integration/knife/node_run_list_add_spec.rb +53 -53
- data/spec/integration/knife/node_run_list_remove_spec.rb +35 -35
- data/spec/integration/knife/node_run_list_set_spec.rb +40 -40
- data/spec/integration/knife/node_show_spec.rb +35 -35
- data/spec/integration/knife/raw_spec.rb +248 -248
- data/spec/integration/knife/redirection_spec.rb +54 -54
- data/spec/integration/knife/role_bulk_delete_spec.rb +51 -51
- data/spec/integration/knife/role_create_spec.rb +40 -40
- data/spec/integration/knife/role_delete_spec.rb +47 -47
- data/spec/integration/knife/role_from_file_spec.rb +95 -95
- data/spec/integration/knife/role_list_spec.rb +44 -44
- data/spec/integration/knife/role_show_spec.rb +50 -50
- data/spec/integration/knife/search_node_spec.rb +39 -39
- data/spec/integration/knife/serve_spec.rb +93 -93
- data/spec/integration/knife/show_spec.rb +167 -167
- data/spec/integration/knife/upload_spec.rb +1540 -1540
- data/spec/integration/recipes/accumulator_spec.rb +232 -232
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +171 -171
- data/spec/integration/recipes/lwrp_spec.rb +53 -53
- data/spec/integration/recipes/noop_resource_spec.rb +24 -24
- data/spec/integration/recipes/notifies_spec.rb +394 -394
- data/spec/integration/recipes/notifying_block_spec.rb +111 -111
- data/spec/integration/recipes/provider_choice.rb +37 -37
- data/spec/integration/recipes/recipe_dsl_spec.rb +1373 -1373
- data/spec/integration/recipes/remote_directory.rb +74 -74
- data/spec/integration/recipes/resource_action_spec.rb +504 -504
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +552 -552
- data/spec/integration/recipes/resource_load_spec.rb +192 -192
- data/spec/integration/recipes/unified_mode_spec.rb +876 -0
- data/spec/integration/solo/solo_spec.rb +217 -217
- data/spec/rcov.opts +2 -2
- data/spec/scripts/ssl-serve.rb +47 -47
- data/spec/spec_helper.rb +332 -328
- data/spec/stress/.DS_Store +0 -0
- data/spec/stress/win32/file_spec.rb +37 -37
- data/spec/stress/win32/memory_spec.rb +22 -22
- data/spec/stress/win32/security_spec.rb +69 -69
- data/spec/support/.DS_Store +0 -0
- data/spec/support/chef_helpers.rb +115 -115
- data/spec/support/key_helpers.rb +104 -104
- data/spec/support/lib/chef/provider/easy.rb +35 -35
- data/spec/support/lib/chef/provider/openldap_includer.rb +29 -29
- data/spec/support/lib/chef/provider/snakeoil.rb +42 -42
- data/spec/support/lib/chef/resource/cat.rb +39 -39
- data/spec/support/lib/chef/resource/one_two_three_four.rb +36 -36
- data/spec/support/lib/chef/resource/openldap_includer.rb +28 -28
- data/spec/support/lib/chef/resource/with_state.rb +30 -30
- data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
- data/spec/support/lib/chef/resource/zen_master.rb +40 -40
- data/spec/support/lib/library_load_order.rb +20 -20
- data/spec/support/matchers/leak.rb +98 -98
- data/spec/support/mock/constant.rb +52 -52
- data/spec/support/mock/platform.rb +25 -25
- data/spec/support/platform_helpers.rb +276 -268
- data/spec/support/platforms/prof/gc.rb +51 -51
- data/spec/support/platforms/prof/win32.rb +45 -45
- data/spec/support/platforms/win32/spec_service.rb +59 -59
- data/spec/support/shared/context/client.rb +305 -305
- data/spec/support/shared/context/config.rb +21 -21
- data/spec/support/shared/context/win32.rb +34 -34
- data/spec/support/shared/examples/client.rb +104 -104
- data/spec/support/shared/functional/diff_disabled.rb +10 -10
- data/spec/support/shared/functional/directory_resource.rb +178 -178
- data/spec/support/shared/functional/execute_resource.rb +150 -150
- data/spec/support/shared/functional/file_resource.rb +1050 -1050
- data/spec/support/shared/functional/http.rb +248 -248
- data/spec/support/shared/functional/knife.rb +37 -37
- data/spec/support/shared/functional/securable_resource.rb +578 -578
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
- data/spec/support/shared/functional/win32_service.rb +57 -57
- data/spec/support/shared/functional/windows_script.rb +272 -272
- data/spec/support/shared/integration/app_server_support.rb +40 -40
- data/spec/support/shared/integration/integration_helper.rb +154 -154
- data/spec/support/shared/integration/knife_support.rb +196 -196
- data/spec/support/shared/matchers/exit_with_code.rb +32 -32
- data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
- data/spec/support/shared/shared_examples.rb +14 -14
- data/spec/support/shared/unit/api_error_inspector.rb +190 -190
- data/spec/support/shared/unit/api_versioning.rb +77 -77
- data/spec/support/shared/unit/application_dot_d.rb +75 -75
- data/spec/support/shared/unit/execute_resource.rb +168 -168
- data/spec/support/shared/unit/file_system_support.rb +69 -69
- data/spec/support/shared/unit/knife_shared.rb +39 -39
- data/spec/support/shared/unit/mock_shellout.rb +49 -49
- data/spec/support/shared/unit/platform_introspector.rb +189 -189
- data/spec/support/shared/unit/provider/file.rb +854 -854
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +402 -402
- data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
- data/spec/support/shared/unit/script_resource.rb +90 -90
- data/spec/support/shared/unit/user_and_client_shared.rb +114 -114
- data/spec/support/shared/unit/windows_script_resource.rb +80 -80
- data/spec/tiny_server.rb +191 -191
- data/spec/unit/.DS_Store +0 -0
- data/spec/unit/api_client/registration_spec.rb +278 -278
- data/spec/unit/api_client_spec.rb +341 -341
- data/spec/unit/api_client_v1_spec.rb +455 -455
- data/spec/unit/application/apply_spec.rb +113 -113
- data/spec/unit/application/client_spec.rb +559 -559
- data/spec/unit/application/exit_code_spec.rb +144 -144
- data/spec/unit/application/knife_spec.rb +229 -229
- data/spec/unit/application/solo_spec.rb +225 -225
- data/spec/unit/application_spec.rb +486 -486
- data/spec/unit/audit/audit_event_proxy_spec.rb +318 -318
- data/spec/unit/audit/audit_reporter_spec.rb +435 -435
- data/spec/unit/audit/control_group_data_spec.rb +482 -482
- data/spec/unit/audit/logger_spec.rb +42 -42
- data/spec/unit/audit/rspec_formatter_spec.rb +29 -29
- data/spec/unit/audit/runner_spec.rb +144 -144
- data/spec/unit/chef_class_spec.rb +240 -240
- data/spec/unit/chef_fs/config_spec.rb +235 -235
- data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +82 -82
- data/spec/unit/chef_fs/data_handler/data_handler_base_spec.rb +65 -65
- data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -63
- data/spec/unit/chef_fs/diff_spec.rb +328 -328
- data/spec/unit/chef_fs/file_pattern_spec.rb +512 -512
- data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -34
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -47
- data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +126 -126
- data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +175 -175
- data/spec/unit/chef_fs/file_system_spec.rb +148 -148
- data/spec/unit/chef_fs/parallelizer.rb +477 -477
- data/spec/unit/chef_fs/path_util_spec.rb +108 -108
- data/spec/unit/chef_spec.rb +25 -25
- data/spec/unit/client_spec.rb +595 -595
- data/spec/unit/config_fetcher_spec.rb +125 -125
- data/spec/unit/config_spec.rb +31 -31
- data/spec/unit/cookbook/chefignore_spec.rb +49 -49
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +210 -210
- data/spec/unit/cookbook/file_vendor_spec.rb +123 -123
- data/spec/unit/cookbook/gem_installer_spec.rb +113 -92
- data/spec/unit/cookbook/manifest_v0_spec.rb +133 -133
- data/spec/unit/cookbook/manifest_v2_spec.rb +70 -70
- data/spec/unit/cookbook/metadata_spec.rb +892 -892
- data/spec/unit/cookbook/synchronizer_spec.rb +557 -557
- data/spec/unit/cookbook/syntax_check_spec.rb +226 -226
- data/spec/unit/cookbook_loader_spec.rb +302 -302
- data/spec/unit/cookbook_manifest_spec.rb +228 -228
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +199 -199
- data/spec/unit/cookbook_spec.rb +62 -62
- data/spec/unit/cookbook_uploader_spec.rb +199 -199
- data/spec/unit/cookbook_version_file_specificity_spec.rb +623 -623
- data/spec/unit/cookbook_version_spec.rb +250 -250
- data/spec/unit/daemon_spec.rb +183 -183
- data/spec/unit/data_bag_item_spec.rb +392 -392
- data/spec/unit/data_bag_spec.rb +260 -260
- data/spec/unit/data_collector/messages/helpers_spec.rb +202 -202
- data/spec/unit/data_collector/messages_spec.rb +329 -329
- data/spec/unit/data_collector/resource_report_spec.rb +145 -145
- data/spec/unit/data_collector_spec.rb +876 -876
- data/spec/unit/decorator/lazy_array_spec.rb +58 -58
- data/spec/unit/decorator/lazy_spec.rb +39 -39
- data/spec/unit/decorator_spec.rb +142 -142
- data/spec/unit/deprecated_spec.rb +65 -65
- data/spec/unit/deprecation_spec.rb +129 -129
- data/spec/unit/digester_spec.rb +49 -49
- data/spec/unit/dsl/audit_spec.rb +43 -43
- data/spec/unit/dsl/data_query_spec.rb +107 -107
- data/spec/unit/dsl/declare_resource_spec.rb +374 -374
- data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
- data/spec/unit/dsl/reboot_pending_spec.rb +87 -87
- data/spec/unit/dsl/recipe_spec.rb +76 -76
- data/spec/unit/dsl/registry_helper_spec.rb +52 -52
- data/spec/unit/dsl/resources_spec.rb +85 -85
- data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +96 -96
- data/spec/unit/encrypted_data_bag_item_spec.rb +438 -438
- data/spec/unit/environment_spec.rb +470 -470
- data/spec/unit/event_dispatch/dispatcher_spec.rb +122 -122
- data/spec/unit/event_dispatch/dsl_spec.rb +83 -83
- data/spec/unit/exceptions_spec.rb +132 -132
- data/spec/unit/file_access_control_spec.rb +308 -308
- data/spec/unit/file_cache_spec.rb +114 -114
- data/spec/unit/file_content_management/deploy/cp_spec.rb +44 -44
- data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +113 -113
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
- data/spec/unit/file_content_management/tempfile_spec.rb +115 -115
- data/spec/unit/formatters/base_spec.rb +100 -100
- data/spec/unit/formatters/doc_spec.rb +110 -92
- data/spec/unit/formatters/error_description_spec.rb +141 -141
- data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +76 -76
- data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +265 -265
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +126 -126
- data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -43
- data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +26 -26
- data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +26 -26
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +191 -191
- data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +91 -91
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +155 -155
- data/spec/unit/guard_interpreter_spec.rb +41 -41
- data/spec/unit/handler/json_file_spec.rb +63 -63
- data/spec/unit/handler_spec.rb +302 -302
- data/spec/unit/http/api_versions_spec.rb +82 -82
- data/spec/unit/http/authenticator_spec.rb +125 -125
- data/spec/unit/http/basic_client_spec.rb +72 -72
- data/spec/unit/http/http_request_spec.rb +97 -97
- data/spec/unit/http/json_input_spec.rb +128 -128
- data/spec/unit/http/simple_spec.rb +32 -32
- data/spec/unit/http/socketless_chef_zero_client_spec.rb +174 -174
- data/spec/unit/http/ssl_policies_spec.rb +169 -169
- data/spec/unit/http/validate_content_length_spec.rb +207 -207
- data/spec/unit/http_spec.rb +229 -229
- data/spec/unit/json_compat_spec.rb +73 -73
- data/spec/unit/key_spec.rb +631 -631
- data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
- data/spec/unit/knife/bootstrap_spec.rb +972 -886
- data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
- data/spec/unit/knife/client_create_spec.rb +186 -186
- data/spec/unit/knife/client_delete_spec.rb +99 -99
- data/spec/unit/knife/client_edit_spec.rb +53 -53
- data/spec/unit/knife/client_list_spec.rb +34 -34
- data/spec/unit/knife/client_reregister_spec.rb +62 -62
- data/spec/unit/knife/client_show_spec.rb +52 -52
- data/spec/unit/knife/configure_client_spec.rb +81 -81
- data/spec/unit/knife/configure_spec.rb +190 -190
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
- data/spec/unit/knife/cookbook_create_spec.rb +42 -42
- data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
- data/spec/unit/knife/cookbook_download_spec.rb +255 -255
- data/spec/unit/knife/cookbook_list_spec.rb +88 -88
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
- data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
- data/spec/unit/knife/cookbook_show_spec.rb +254 -254
- data/spec/unit/knife/cookbook_test_spec.rb +84 -84
- data/spec/unit/knife/cookbook_upload_spec.rb +331 -331
- data/spec/unit/knife/core/bootstrap_context_spec.rb +324 -324
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +110 -110
- data/spec/unit/knife/core/node_editor_spec.rb +211 -211
- data/spec/unit/knife/core/object_loader_spec.rb +81 -81
- data/spec/unit/knife/core/subcommand_loader_spec.rb +64 -64
- data/spec/unit/knife/core/ui_spec.rb +639 -639
- data/spec/unit/knife/data_bag_create_spec.rb +175 -175
- data/spec/unit/knife/data_bag_edit_spec.rb +126 -126
- data/spec/unit/knife/data_bag_from_file_spec.rb +173 -173
- data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
- data/spec/unit/knife/data_bag_show_spec.rb +138 -138
- data/spec/unit/knife/environment_compare_spec.rb +112 -112
- data/spec/unit/knife/environment_create_spec.rb +91 -91
- data/spec/unit/knife/environment_delete_spec.rb +71 -71
- data/spec/unit/knife/environment_edit_spec.rb +79 -79
- data/spec/unit/knife/environment_from_file_spec.rb +90 -90
- data/spec/unit/knife/environment_list_spec.rb +54 -54
- data/spec/unit/knife/environment_show_spec.rb +52 -52
- data/spec/unit/knife/key_create_spec.rb +223 -223
- data/spec/unit/knife/key_delete_spec.rb +133 -133
- data/spec/unit/knife/key_edit_spec.rb +264 -264
- data/spec/unit/knife/key_helper.rb +74 -74
- data/spec/unit/knife/key_list_spec.rb +216 -216
- data/spec/unit/knife/key_show_spec.rb +126 -126
- data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
- data/spec/unit/knife/node_delete_spec.rb +77 -77
- data/spec/unit/knife/node_edit_spec.rb +116 -116
- data/spec/unit/knife/node_environment_set_spec.rb +56 -56
- data/spec/unit/knife/node_from_file_spec.rb +59 -59
- data/spec/unit/knife/node_list_spec.rb +62 -62
- data/spec/unit/knife/node_policy_set_spec.rb +122 -122
- data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
- data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
- data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
- data/spec/unit/knife/node_show_spec.rb +65 -65
- data/spec/unit/knife/osc_user_create_spec.rb +93 -93
- data/spec/unit/knife/osc_user_delete_spec.rb +44 -44
- data/spec/unit/knife/osc_user_edit_spec.rb +52 -52
- data/spec/unit/knife/osc_user_list_spec.rb +37 -37
- data/spec/unit/knife/osc_user_reregister_spec.rb +58 -58
- data/spec/unit/knife/osc_user_show_spec.rb +46 -46
- data/spec/unit/knife/raw_spec.rb +43 -43
- data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
- data/spec/unit/knife/role_create_spec.rb +80 -80
- data/spec/unit/knife/role_delete_spec.rb +67 -67
- data/spec/unit/knife/role_edit_spec.rb +77 -77
- data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
- data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
- data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
- data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
- data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
- data/spec/unit/knife/role_from_file_spec.rb +69 -69
- data/spec/unit/knife/role_list_spec.rb +54 -54
- data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
- data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
- data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
- data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
- data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
- data/spec/unit/knife/role_show_spec.rb +59 -59
- data/spec/unit/knife/ssh_spec.rb +496 -496
- data/spec/unit/knife/ssl_check_spec.rb +256 -256
- data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
- data/spec/unit/knife/status_spec.rb +111 -111
- data/spec/unit/knife/supermarket_download_spec.rb +152 -152
- data/spec/unit/knife/supermarket_install_spec.rb +201 -201
- data/spec/unit/knife/supermarket_share_spec.rb +209 -209
- data/spec/unit/knife/supermarket_unshare_spec.rb +78 -78
- data/spec/unit/knife/tag_create_spec.rb +23 -23
- data/spec/unit/knife/tag_delete_spec.rb +25 -25
- data/spec/unit/knife/tag_list_spec.rb +23 -23
- data/spec/unit/knife/user_create_spec.rb +214 -214
- data/spec/unit/knife/user_delete_spec.rb +65 -65
- data/spec/unit/knife/user_edit_spec.rb +66 -66
- data/spec/unit/knife/user_list_spec.rb +36 -36
- data/spec/unit/knife/user_reregister_spec.rb +74 -74
- data/spec/unit/knife/user_show_spec.rb +65 -65
- data/spec/unit/knife_spec.rb +588 -588
- data/spec/unit/log/syslog_spec.rb +51 -51
- data/spec/unit/log/winevt_spec.rb +54 -54
- data/spec/unit/log_spec.rb +24 -24
- data/spec/unit/lwrp_spec.rb +690 -690
- data/spec/unit/mash_spec.rb +51 -51
- data/spec/unit/mixin/api_version_request_handling_spec.rb +126 -126
- data/spec/unit/mixin/checksum_spec.rb +54 -54
- data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -54
- data/spec/unit/mixin/deep_merge_spec.rb +342 -342
- data/spec/unit/mixin/deprecation_spec.rb +57 -57
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -96
- data/spec/unit/mixin/homebrew_user_spec.rb +96 -96
- data/spec/unit/mixin/lazy_module_include.rb +71 -71
- data/spec/unit/mixin/openssl_helper_spec.rb +857 -857
- data/spec/unit/mixin/params_validate_spec.rb +421 -421
- data/spec/unit/mixin/path_sanity_spec.rb +92 -92
- data/spec/unit/mixin/powershell_exec_spec.rb +43 -43
- data/spec/unit/mixin/powershell_out_spec.rb +94 -94
- data/spec/unit/mixin/powershell_type_coercions_spec.rb +84 -84
- data/spec/unit/mixin/properties_spec.rb +107 -107
- data/spec/unit/mixin/proxified_socket_spec.rb +97 -97
- data/spec/unit/mixin/securable_spec.rb +314 -314
- data/spec/unit/mixin/shell_out_spec.rb +450 -450
- data/spec/unit/mixin/subclass_directive_spec.rb +45 -45
- data/spec/unit/mixin/template_spec.rb +321 -321
- data/spec/unit/mixin/unformatter_spec.rb +61 -61
- data/spec/unit/mixin/uris_spec.rb +57 -57
- data/spec/unit/mixin/user_context_spec.rb +108 -108
- data/spec/unit/mixin/versioned_api_spec.rb +128 -128
- data/spec/unit/mixin/which.rb +160 -160
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +85 -85
- data/spec/unit/mixin/xml_escape_spec.rb +54 -54
- data/spec/unit/monkey_patches/uri_spec.rb +34 -34
- data/spec/unit/monologger_spec.rb +45 -45
- data/spec/unit/node/attribute_spec.rb +1276 -1276
- data/spec/unit/node/immutable_collections_spec.rb +327 -327
- data/spec/unit/node/vivid_mash_spec.rb +353 -353
- data/spec/unit/node_map_spec.rb +242 -242
- data/spec/unit/node_spec.rb +1851 -1851
- data/spec/unit/org_spec.rb +196 -196
- data/spec/unit/platform/query_helpers_spec.rb +207 -207
- data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
- data/spec/unit/policy_builder/expand_node_object_spec.rb +311 -311
- data/spec/unit/policy_builder/policyfile_spec.rb +872 -872
- data/spec/unit/policy_builder_spec.rb +26 -26
- data/spec/unit/property/state_spec.rb +508 -508
- data/spec/unit/property/validation_spec.rb +758 -758
- data/spec/unit/property_spec.rb +1231 -1231
- data/spec/unit/provider/apt_preference_spec.rb +87 -87
- data/spec/unit/provider/apt_repository_spec.rb +254 -254
- data/spec/unit/provider/apt_update_spec.rb +116 -116
- data/spec/unit/provider/cookbook_file/content_spec.rb +39 -39
- data/spec/unit/provider/cookbook_file_spec.rb +59 -59
- data/spec/unit/provider/cron/unix_spec.rb +144 -144
- data/spec/unit/provider/cron_spec.rb +1084 -1084
- data/spec/unit/provider/directory_spec.rb +300 -300
- data/spec/unit/provider/dsc_resource_spec.rb +343 -343
- data/spec/unit/provider/dsc_script_spec.rb +173 -173
- data/spec/unit/provider/execute_spec.rb +251 -251
- data/spec/unit/provider/file/content_spec.rb +114 -114
- data/spec/unit/provider/file_spec.rb +57 -57
- data/spec/unit/provider/git_spec.rb +782 -782
- data/spec/unit/provider/group/dscl_spec.rb +339 -339
- data/spec/unit/provider/group/gpasswd_spec.rb +119 -119
- data/spec/unit/provider/group/groupadd_spec.rb +194 -194
- data/spec/unit/provider/group/groupmod_spec.rb +136 -136
- data/spec/unit/provider/group/pw_spec.rb +141 -141
- data/spec/unit/provider/group/suse_spec.rb +90 -90
- data/spec/unit/provider/group/usermod_spec.rb +115 -115
- data/spec/unit/provider/group/windows_spec.rb +124 -124
- data/spec/unit/provider/group_spec.rb +286 -286
- data/spec/unit/provider/http_request_spec.rb +159 -159
- data/spec/unit/provider/ifconfig/aix_spec.rb +180 -180
- data/spec/unit/provider/ifconfig/debian_spec.rb +332 -332
- data/spec/unit/provider/ifconfig/redhat_spec.rb +83 -83
- data/spec/unit/provider/ifconfig_spec.rb +206 -206
- data/spec/unit/provider/launchd_spec.rb +268 -268
- data/spec/unit/provider/link_spec.rb +409 -409
- data/spec/unit/provider/log_spec.rb +94 -94
- data/spec/unit/provider/mdadm_spec.rb +140 -140
- data/spec/unit/provider/mount/aix_spec.rb +277 -277
- data/spec/unit/provider/mount/mount_spec.rb +527 -527
- data/spec/unit/provider/mount/solaris_spec.rb +822 -822
- data/spec/unit/provider/mount/windows_spec.rb +149 -149
- data/spec/unit/provider/mount_spec.rb +191 -191
- data/spec/unit/provider/ohai_spec.rb +84 -84
- data/spec/unit/provider/osx_profile_spec.rb +257 -257
- data/spec/unit/provider/package/apt_spec.rb +610 -610
- data/spec/unit/provider/package/bff_spec.rb +187 -187
- data/spec/unit/provider/package/cab_spec.rb +272 -272
- data/spec/unit/provider/package/chocolatey_spec.rb +507 -507
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -29
- data/spec/unit/provider/package/dpkg_spec.rb +287 -287
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -274
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +148 -148
- data/spec/unit/provider/package/freebsd/port_spec.rb +163 -163
- data/spec/unit/provider/package/homebrew_spec.rb +293 -293
- data/spec/unit/provider/package/ips_spec.rb +233 -233
- data/spec/unit/provider/package/macports_spec.rb +203 -203
- data/spec/unit/provider/package/msu_spec.rb +283 -283
- data/spec/unit/provider/package/openbsd_spec.rb +132 -132
- data/spec/unit/provider/package/pacman_spec.rb +194 -194
- data/spec/unit/provider/package/paludis_spec.rb +134 -134
- data/spec/unit/provider/package/portage_spec.rb +179 -179
- data/spec/unit/provider/package/powershell_spec.rb +501 -501
- data/spec/unit/provider/package/rpm_spec.rb +429 -429
- data/spec/unit/provider/package/rubygems_spec.rb +981 -981
- data/spec/unit/provider/package/smartos_spec.rb +110 -110
- data/spec/unit/provider/package/solaris_spec.rb +167 -167
- data/spec/unit/provider/package/windows/exe_spec.rb +201 -201
- data/spec/unit/provider/package/windows/msi_spec.rb +168 -168
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +78 -78
- data/spec/unit/provider/package/windows_spec.rb +463 -463
- data/spec/unit/provider/package/yum/python_helper_spec.rb +29 -29
- data/spec/unit/provider/package/yum/yum_cache_spec.rb +109 -109
- data/spec/unit/provider/package/zypper_spec.rb +487 -478
- data/spec/unit/provider/package_spec.rb +1013 -1013
- data/spec/unit/provider/powershell_script_spec.rb +116 -116
- data/spec/unit/provider/registry_key_spec.rb +487 -487
- data/spec/unit/provider/remote_directory_spec.rb +236 -236
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +245 -245
- data/spec/unit/provider/remote_file/content_spec.rb +253 -253
- data/spec/unit/provider/remote_file/fetcher_spec.rb +95 -95
- data/spec/unit/provider/remote_file/ftp_spec.rb +217 -217
- data/spec/unit/provider/remote_file/http_spec.rb +324 -324
- data/spec/unit/provider/remote_file/local_file_spec.rb +105 -105
- data/spec/unit/provider/remote_file/network_file_spec.rb +50 -50
- data/spec/unit/provider/remote_file/sftp_spec.rb +150 -150
- data/spec/unit/provider/remote_file_spec.rb +62 -62
- data/spec/unit/provider/route_spec.rb +270 -270
- data/spec/unit/provider/ruby_block_spec.rb +45 -45
- data/spec/unit/provider/script_spec.rb +157 -157
- data/spec/unit/provider/service/aix_service_spec.rb +195 -195
- data/spec/unit/provider/service/aixinit_service_spec.rb +272 -272
- data/spec/unit/provider/service/arch_service_spec.rb +324 -324
- data/spec/unit/provider/service/debian_service_spec.rb +249 -249
- data/spec/unit/provider/service/freebsd_service_spec.rb +617 -617
- data/spec/unit/provider/service/gentoo_service_spec.rb +144 -144
- data/spec/unit/provider/service/init_service_spec.rb +235 -235
- data/spec/unit/provider/service/insserv_service_spec.rb +75 -75
- data/spec/unit/provider/service/invokercd_service_spec.rb +211 -211
- data/spec/unit/provider/service/macosx_spec.rb +340 -340
- data/spec/unit/provider/service/openbsd_service_spec.rb +549 -549
- data/spec/unit/provider/service/redhat_spec.rb +250 -250
- data/spec/unit/provider/service/simple_service_spec.rb +169 -169
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +292 -292
- data/spec/unit/provider/service/systemd_service_spec.rb +364 -364
- data/spec/unit/provider/service/upstart_service_spec.rb +351 -351
- data/spec/unit/provider/service/windows_spec.rb +910 -910
- data/spec/unit/provider/service_spec.rb +168 -168
- data/spec/unit/provider/subversion_spec.rb +361 -361
- data/spec/unit/provider/systemd_unit_spec.rb +967 -967
- data/spec/unit/provider/template/content_spec.rb +169 -169
- data/spec/unit/provider/template_spec.rb +87 -87
- data/spec/unit/provider/user/aix_spec.rb +96 -96
- data/spec/unit/provider/user/dscl_spec.rb +920 -920
- data/spec/unit/provider/user/linux_spec.rb +74 -74
- data/spec/unit/provider/user/pw_spec.rb +235 -235
- data/spec/unit/provider/user/solaris_spec.rb +177 -177
- data/spec/unit/provider/user/windows_spec.rb +197 -197
- data/spec/unit/provider/user_spec.rb +478 -478
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
- data/spec/unit/provider/windows_env_spec.rb +400 -400
- data/spec/unit/provider/windows_path_spec.rb +65 -65
- data/spec/unit/provider/windows_task_spec.rb +430 -430
- data/spec/unit/provider/yum_repository_spec.rb +35 -35
- data/spec/unit/provider/zypper_repository_spec.rb +126 -126
- data/spec/unit/provider_resolver_spec.rb +923 -923
- data/spec/unit/provider_spec.rb +201 -201
- data/spec/unit/pure_application_spec.rb +32 -32
- data/spec/unit/recipe_spec.rb +589 -589
- data/spec/unit/resource/apt_package_spec.rb +56 -56
- data/spec/unit/resource/apt_preference_spec.rb +57 -57
- data/spec/unit/resource/apt_repository_spec.rb +92 -92
- data/spec/unit/resource/apt_update_spec.rb +62 -62
- data/spec/unit/resource/bash_spec.rb +45 -45
- data/spec/unit/resource/batch_spec.rb +46 -46
- data/spec/unit/resource/bff_package_spec.rb +51 -51
- data/spec/unit/resource/breakpoint_spec.rb +64 -64
- data/spec/unit/resource/build_essential_spec.rb +43 -43
- data/spec/unit/resource/cab_package_spec.rb +64 -64
- data/spec/unit/resource/chef_gem_spec.rb +125 -125
- data/spec/unit/resource/chef_handler_spec.rb +40 -40
- data/spec/unit/resource/chocolatey_config_spec.rb +98 -98
- data/spec/unit/resource/chocolatey_package_spec.rb +91 -91
- data/spec/unit/resource/chocolatey_source_spec.rb +102 -102
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
- data/spec/unit/resource/conditional_spec.rb +254 -254
- data/spec/unit/resource/cookbook_file_spec.rb +93 -93
- data/spec/unit/resource/cron_access_spec.rb +36 -36
- data/spec/unit/resource/cron_d_spec.rb +90 -90
- data/spec/unit/resource/cron_spec.rb +173 -173
- data/spec/unit/resource/csh_spec.rb +45 -45
- data/spec/unit/resource/directory_spec.rb +69 -69
- data/spec/unit/resource/dmg_package_spec.rb +39 -39
- data/spec/unit/resource/dnf_package_spec.rb +108 -108
- data/spec/unit/resource/dpkg_package_spec.rb +50 -50
- data/spec/unit/resource/dsc_resource_spec.rb +102 -102
- data/spec/unit/resource/dsc_script_spec.rb +134 -134
- data/spec/unit/resource/execute_spec.rb +277 -277
- data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -103
- data/spec/unit/resource/file/verification_spec.rb +147 -147
- data/spec/unit/resource/file_spec.rb +127 -127
- data/spec/unit/resource/freebsd_package_spec.rb +103 -103
- data/spec/unit/resource/gem_package_spec.rb +67 -67
- data/spec/unit/resource/git_spec.rb +62 -62
- data/spec/unit/resource/group_spec.rb +165 -165
- data/spec/unit/resource/homebrew_cask_spec.rb +40 -40
- data/spec/unit/resource/homebrew_package_spec.rb +68 -68
- data/spec/unit/resource/homebrew_tap_spec.rb +44 -44
- data/spec/unit/resource/hostname_spec.rb +47 -47
- data/spec/unit/resource/http_request_spec.rb +65 -65
- data/spec/unit/resource/ifconfig_spec.rb +109 -109
- data/spec/unit/resource/ips_package_spec.rb +54 -54
- data/spec/unit/resource/kernel_module_spec.rb +48 -48
- data/spec/unit/resource/ksh_spec.rb +45 -45
- data/spec/unit/resource/launchd_spec.rb +40 -40
- data/spec/unit/resource/link_spec.rb +124 -124
- data/spec/unit/resource/locale_spec.rb +60 -60
- data/spec/unit/resource/log_spec.rb +64 -64
- data/spec/unit/resource/macos_user_defaults_spec.rb +35 -35
- data/spec/unit/resource/macports_package_spec.rb +51 -51
- data/spec/unit/resource/mdadm_spec.rb +104 -104
- data/spec/unit/resource/mount_spec.rb +178 -178
- data/spec/unit/resource/msu_package_spec.rb +63 -63
- data/spec/unit/resource/ohai_hint_spec.rb +44 -44
- data/spec/unit/resource/ohai_spec.rb +62 -62
- data/spec/unit/resource/openbsd_package_spec.rb +58 -58
- data/spec/unit/resource/openssl_dhparam.rb +61 -61
- data/spec/unit/resource/openssl_ec_private_key_spec.rb +64 -64
- data/spec/unit/resource/openssl_ec_public_key_spec.rb +43 -43
- data/spec/unit/resource/openssl_rsa_private_key_spec.rb +64 -64
- data/spec/unit/resource/openssl_rsa_public_key_spec.rb +43 -43
- data/spec/unit/resource/openssl_x509_certificate_spec.rb +72 -72
- data/spec/unit/resource/openssl_x509_crl_spec.rb +61 -61
- data/spec/unit/resource/openssl_x509_request.rb +68 -68
- data/spec/unit/resource/osx_profile_spec.rb +60 -60
- data/spec/unit/resource/package_spec.rb +108 -108
- data/spec/unit/resource/pacman_package_spec.rb +46 -46
- data/spec/unit/resource/paludis_package_spec.rb +36 -36
- data/spec/unit/resource/perl_spec.rb +44 -44
- data/spec/unit/resource/portage_package_spec.rb +46 -46
- data/spec/unit/resource/powershell_package_source_spec.rb +219 -219
- data/spec/unit/resource/powershell_package_spec.rb +98 -98
- data/spec/unit/resource/powershell_script_spec.rb +136 -136
- data/spec/unit/resource/python_spec.rb +40 -40
- data/spec/unit/resource/reboot_spec.rb +47 -47
- data/spec/unit/resource/registry_key_spec.rb +215 -215
- data/spec/unit/resource/remote_directory_spec.rb +105 -105
- data/spec/unit/resource/remote_file_spec.rb +220 -220
- data/spec/unit/resource/resource_notification_spec.rb +169 -169
- data/spec/unit/resource/rhsm_errata_level_spec.rb +50 -50
- data/spec/unit/resource/rhsm_errata_spec.rb +39 -39
- data/spec/unit/resource/rhsm_register_spec.rb +204 -204
- data/spec/unit/resource/rhsm_repo_spec.rb +64 -64
- data/spec/unit/resource/rhsm_subscription_spec.rb +98 -98
- data/spec/unit/resource/route_spec.rb +95 -95
- data/spec/unit/resource/rpm_package_spec.rb +62 -62
- data/spec/unit/resource/ruby_block_spec.rb +58 -58
- data/spec/unit/resource/ruby_spec.rb +39 -39
- data/spec/unit/resource/scm_spec.rb +173 -173
- data/spec/unit/resource/script_spec.rb +52 -52
- data/spec/unit/resource/service_spec.rb +206 -206
- data/spec/unit/resource/smartos_package_spec.rb +52 -52
- data/spec/unit/resource/solaris_package_spec.rb +54 -54
- data/spec/unit/resource/ssh_known_hosts_entry_spec.rb +55 -55
- data/spec/unit/resource/subversion_spec.rb +91 -91
- data/spec/unit/resource/sudo_spec.rb +99 -99
- data/spec/unit/resource/swap_file_spec.rb +39 -39
- data/spec/unit/resource/sysctl_spec.rb +54 -54
- data/spec/unit/resource/systemd_unit_spec.rb +130 -130
- data/spec/unit/resource/template_spec.rb +222 -222
- data/spec/unit/resource/timezone.rb +39 -39
- data/spec/unit/resource/user_spec.rb +122 -122
- data/spec/unit/resource/windows_ad_join_spec.rb +51 -51
- data/spec/unit/resource/windows_auto_run_spec.rb +50 -50
- data/spec/unit/resource/windows_certificate.rb +83 -83
- data/spec/unit/resource/windows_env_spec.rb +75 -75
- data/spec/unit/resource/windows_feature.rb +64 -64
- data/spec/unit/resource/windows_feature_dism.rb +72 -72
- data/spec/unit/resource/windows_feature_powershell.rb +72 -72
- data/spec/unit/resource/windows_firewall_rule_spec.rb +401 -401
- data/spec/unit/resource/windows_font_spec.rb +43 -43
- data/spec/unit/resource/windows_package_spec.rb +105 -105
- data/spec/unit/resource/windows_pagefile_spec.rb +49 -49
- data/spec/unit/resource/windows_path_spec.rb +40 -40
- data/spec/unit/resource/windows_printer_port_spec.rb +62 -62
- data/spec/unit/resource/windows_printer_spec.rb +52 -52
- data/spec/unit/resource/windows_service_spec.rb +93 -93
- data/spec/unit/resource/windows_share.rb +39 -39
- data/spec/unit/resource/windows_shortcut_spec.rb +38 -38
- data/spec/unit/resource/windows_task_spec.rb +399 -399
- data/spec/unit/resource/windows_workgroup_spec.rb +74 -74
- data/spec/unit/resource/yum_package_spec.rb +150 -150
- data/spec/unit/resource/yum_repository_spec.rb +152 -152
- data/spec/unit/resource/zypper_package_spec.rb +51 -51
- data/spec/unit/resource/zypper_repository_spec.rb +115 -115
- data/spec/unit/resource_builder_spec.rb +1 -1
- data/spec/unit/resource_collection/resource_list_spec.rb +137 -137
- data/spec/unit/resource_collection/resource_set_spec.rb +244 -244
- data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
- data/spec/unit/resource_collection_spec.rb +408 -408
- data/spec/unit/resource_definition_spec.rb +117 -117
- data/spec/unit/resource_inspector_spec.rb +60 -60
- data/spec/unit/resource_reporter_spec.rb +782 -782
- data/spec/unit/resource_resolver_spec.rb +52 -52
- data/spec/unit/resource_spec.rb +1195 -1195
- data/spec/unit/role_spec.rb +358 -358
- data/spec/unit/run_context/child_run_context_spec.rb +133 -133
- data/spec/unit/run_context/cookbook_compiler_spec.rb +224 -224
- data/spec/unit/run_context_spec.rb +241 -241
- data/spec/unit/run_list/run_list_expansion_spec.rb +144 -144
- data/spec/unit/run_list/run_list_item_spec.rb +117 -117
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +197 -197
- data/spec/unit/run_list_spec.rb +312 -312
- data/spec/unit/run_lock_spec.rb +140 -140
- data/spec/unit/run_status_spec.rb +144 -144
- data/spec/unit/runner_spec.rb +398 -398
- data/spec/unit/scan_access_control_spec.rb +183 -183
- data/spec/unit/search/query_spec.rb +283 -283
- data/spec/unit/server_api_spec.rb +124 -124
- data/spec/unit/server_api_versions_spec.rb +66 -66
- data/spec/unit/shell/model_wrapper_spec.rb +96 -96
- data/spec/unit/shell/shell_ext_spec.rb +153 -153
- data/spec/unit/shell/shell_session_spec.rb +250 -250
- data/spec/unit/shell_spec.rb +162 -162
- data/spec/unit/user_spec.rb +275 -275
- data/spec/unit/user_v1_spec.rb +583 -583
- data/spec/unit/util/backup_spec.rb +141 -141
- data/spec/unit/util/diff_spec.rb +576 -576
- data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -193
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +248 -248
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +200 -200
- data/spec/unit/util/dsc/resource_store.rb +78 -78
- data/spec/unit/util/editor_spec.rb +152 -152
- data/spec/unit/util/file_edit_spec.rb +224 -224
- data/spec/unit/util/powershell/cmdlet_spec.rb +106 -106
- data/spec/unit/util/powershell/ps_credential_spec.rb +44 -44
- data/spec/unit/util/selinux_spec.rb +157 -157
- data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
- data/spec/unit/util/windows/logon_session_spec.rb +285 -285
- data/spec/unit/version/platform_spec.rb +60 -60
- data/spec/unit/version_class_spec.rb +171 -171
- data/spec/unit/version_constraint/platform_spec.rb +45 -45
- data/spec/unit/version_constraint_spec.rb +179 -179
- data/spec/unit/version_string_spec.rb +79 -79
- data/spec/unit/win32/error_spec.rb +77 -77
- data/spec/unit/win32/link_spec.rb +73 -73
- data/spec/unit/win32/registry_spec.rb +394 -394
- data/spec/unit/win32/security_spec.rb +134 -134
- data/spec/unit/windows_service_spec.rb +118 -118
- data/tasks/.DS_Store +0 -0
- data/tasks/announce.rb +58 -58
- data/tasks/bin/run_external_test +29 -29
- data/tasks/dependencies.rb +58 -58
- data/tasks/maintainers.rb +211 -211
- data/tasks/rspec.rb +90 -90
- data/tasks/templates/prerelease.md.erb +35 -35
- data/tasks/templates/release.md.erb +34 -34
- metadata +34 -6
@@ -1,85 +1,85 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Edwards (<adamed@chef.io>)
|
3
|
-
# Copyright:: Copyright 2013-2016, Chef Software Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
require "spec_helper"
|
20
|
-
require "chef/mixin/windows_architecture_helper"
|
21
|
-
|
22
|
-
describe Chef::Mixin::WindowsArchitectureHelper do
|
23
|
-
include Chef::Mixin::WindowsArchitectureHelper
|
24
|
-
|
25
|
-
before do
|
26
|
-
@valid_architectures = [ :i386, :x86_64 ]
|
27
|
-
@invalid_architectures = [ "i386", "x86_64", :x64, :x86, :arm ]
|
28
|
-
|
29
|
-
@node_i386 = Chef::Node.new
|
30
|
-
@node_x86_64 = Chef::Node.new
|
31
|
-
end
|
32
|
-
|
33
|
-
it "returns true when valid architectures are passed to valid_windows_architecture?" do
|
34
|
-
@valid_architectures.each do |architecture|
|
35
|
-
expect(valid_windows_architecture?(architecture)).to eq(true)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
it "returns false when invalid architectures are passed to valid_windows_architecture?" do
|
40
|
-
@invalid_architectures.each do |architecture|
|
41
|
-
expect(valid_windows_architecture?(architecture)).to eq(false)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
it "does not raise an exception when a valid architecture is passed to assert_valid_windows_architecture!" do
|
46
|
-
@valid_architectures.each do |architecture|
|
47
|
-
assert_valid_windows_architecture!(architecture)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
it "raises an error if an invalid architecture is passed to assert_valid_windows_architecture!" do
|
52
|
-
@invalid_architectures.each do |architecture|
|
53
|
-
begin
|
54
|
-
expect(assert_valid_windows_architecture!(architecture)).to raise_error Chef::Exceptions::Win32ArchitectureIncorrect
|
55
|
-
rescue Chef::Exceptions::Win32ArchitectureIncorrect
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
it "returns true only for supported desired architecture passed to node_supports_windows_architecture" do
|
61
|
-
with_node_architecture_combinations do |node, desired_arch|
|
62
|
-
expect(node_supports_windows_architecture?(node, desired_arch)).to be true if node_windows_architecture(node) == :x86_64 || desired_arch == :i386
|
63
|
-
expect(node_supports_windows_architecture?(node, desired_arch)).to be false if node_windows_architecture(node) == :i386 && desired_arch == :x86_64
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
it "returns true only when forced_32bit_override_required? has 64-bit node architecture and 32-bit desired architecture" do
|
68
|
-
with_node_architecture_combinations do |node, desired_arch|
|
69
|
-
expect(forced_32bit_override_required?(node, desired_arch)).to be true if (node_windows_architecture(node) == :x86_64) && (desired_arch == :i386) && !is_i386_process_on_x86_64_windows?
|
70
|
-
expect(forced_32bit_override_required?(node, desired_arch)).to be false if ! ((node_windows_architecture(node) == :x86_64) && (desired_arch == :i386))
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def with_node_architecture_combinations
|
75
|
-
@valid_architectures.each do |node_architecture|
|
76
|
-
new_node = Chef::Node.new
|
77
|
-
new_node.default["kernel"] = Hash.new
|
78
|
-
new_node.default["kernel"][:machine] = node_architecture.to_s
|
79
|
-
|
80
|
-
@valid_architectures.each do |architecture|
|
81
|
-
yield new_node, architecture if block_given?
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Adam Edwards (<adamed@chef.io>)
|
3
|
+
# Copyright:: Copyright 2013-2016, Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require "spec_helper"
|
20
|
+
require "chef/mixin/windows_architecture_helper"
|
21
|
+
|
22
|
+
describe Chef::Mixin::WindowsArchitectureHelper do
|
23
|
+
include Chef::Mixin::WindowsArchitectureHelper
|
24
|
+
|
25
|
+
before do
|
26
|
+
@valid_architectures = [ :i386, :x86_64 ]
|
27
|
+
@invalid_architectures = [ "i386", "x86_64", :x64, :x86, :arm ]
|
28
|
+
|
29
|
+
@node_i386 = Chef::Node.new
|
30
|
+
@node_x86_64 = Chef::Node.new
|
31
|
+
end
|
32
|
+
|
33
|
+
it "returns true when valid architectures are passed to valid_windows_architecture?" do
|
34
|
+
@valid_architectures.each do |architecture|
|
35
|
+
expect(valid_windows_architecture?(architecture)).to eq(true)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns false when invalid architectures are passed to valid_windows_architecture?" do
|
40
|
+
@invalid_architectures.each do |architecture|
|
41
|
+
expect(valid_windows_architecture?(architecture)).to eq(false)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "does not raise an exception when a valid architecture is passed to assert_valid_windows_architecture!" do
|
46
|
+
@valid_architectures.each do |architecture|
|
47
|
+
assert_valid_windows_architecture!(architecture)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "raises an error if an invalid architecture is passed to assert_valid_windows_architecture!" do
|
52
|
+
@invalid_architectures.each do |architecture|
|
53
|
+
begin
|
54
|
+
expect(assert_valid_windows_architecture!(architecture)).to raise_error Chef::Exceptions::Win32ArchitectureIncorrect
|
55
|
+
rescue Chef::Exceptions::Win32ArchitectureIncorrect
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it "returns true only for supported desired architecture passed to node_supports_windows_architecture" do
|
61
|
+
with_node_architecture_combinations do |node, desired_arch|
|
62
|
+
expect(node_supports_windows_architecture?(node, desired_arch)).to be true if node_windows_architecture(node) == :x86_64 || desired_arch == :i386
|
63
|
+
expect(node_supports_windows_architecture?(node, desired_arch)).to be false if node_windows_architecture(node) == :i386 && desired_arch == :x86_64
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns true only when forced_32bit_override_required? has 64-bit node architecture and 32-bit desired architecture" do
|
68
|
+
with_node_architecture_combinations do |node, desired_arch|
|
69
|
+
expect(forced_32bit_override_required?(node, desired_arch)).to be true if (node_windows_architecture(node) == :x86_64) && (desired_arch == :i386) && !is_i386_process_on_x86_64_windows?
|
70
|
+
expect(forced_32bit_override_required?(node, desired_arch)).to be false if ! ((node_windows_architecture(node) == :x86_64) && (desired_arch == :i386))
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def with_node_architecture_combinations
|
75
|
+
@valid_architectures.each do |node_architecture|
|
76
|
+
new_node = Chef::Node.new
|
77
|
+
new_node.default["kernel"] = Hash.new
|
78
|
+
new_node.default["kernel"][:machine] = node_architecture.to_s
|
79
|
+
|
80
|
+
@valid_architectures.each do |architecture|
|
81
|
+
yield new_node, architecture if block_given?
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -1,54 +1,54 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
3
|
-
# Copyright:: Copyright 2008-2016, Chef Software Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
require "spec_helper"
|
20
|
-
|
21
|
-
class XMLEscapingTestHarness
|
22
|
-
include Chef::Mixin::XMLEscape
|
23
|
-
end
|
24
|
-
|
25
|
-
describe Chef::Mixin::XMLEscape do
|
26
|
-
before do
|
27
|
-
@escaper = XMLEscapingTestHarness.new
|
28
|
-
end
|
29
|
-
|
30
|
-
it "escapes ampersands to '&'" do
|
31
|
-
expect(@escaper.xml_escape("&")).to eq("&")
|
32
|
-
end
|
33
|
-
|
34
|
-
it "escapes angle brackets to < or >" do
|
35
|
-
expect(@escaper.xml_escape("<")).to eq("<")
|
36
|
-
expect(@escaper.xml_escape(">")).to eq(">")
|
37
|
-
end
|
38
|
-
|
39
|
-
it "does not modify ASCII strings" do
|
40
|
-
expect(@escaper.xml_escape("foobarbaz!@\#$%^*()")).to eq("foobarbaz!@\#$%^*()")
|
41
|
-
end
|
42
|
-
|
43
|
-
it "converts invalid bytes to asterisks" do
|
44
|
-
expect(@escaper.xml_escape("\x00")).to eq("*")
|
45
|
-
end
|
46
|
-
|
47
|
-
it "converts UTF-8 correctly" do
|
48
|
-
expect(@escaper.xml_escape("\xC2\xA9")).to eq("©")
|
49
|
-
end
|
50
|
-
|
51
|
-
it "converts win 1252 characters correctly" do
|
52
|
-
expect(@escaper.xml_escape((0x80.chr).to_s)).to eq("€")
|
53
|
-
end
|
54
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Adam Jacob (<adam@chef.io>)
|
3
|
+
# Copyright:: Copyright 2008-2016, Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require "spec_helper"
|
20
|
+
|
21
|
+
class XMLEscapingTestHarness
|
22
|
+
include Chef::Mixin::XMLEscape
|
23
|
+
end
|
24
|
+
|
25
|
+
describe Chef::Mixin::XMLEscape do
|
26
|
+
before do
|
27
|
+
@escaper = XMLEscapingTestHarness.new
|
28
|
+
end
|
29
|
+
|
30
|
+
it "escapes ampersands to '&'" do
|
31
|
+
expect(@escaper.xml_escape("&")).to eq("&")
|
32
|
+
end
|
33
|
+
|
34
|
+
it "escapes angle brackets to < or >" do
|
35
|
+
expect(@escaper.xml_escape("<")).to eq("<")
|
36
|
+
expect(@escaper.xml_escape(">")).to eq(">")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "does not modify ASCII strings" do
|
40
|
+
expect(@escaper.xml_escape("foobarbaz!@\#$%^*()")).to eq("foobarbaz!@\#$%^*()")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "converts invalid bytes to asterisks" do
|
44
|
+
expect(@escaper.xml_escape("\x00")).to eq("*")
|
45
|
+
end
|
46
|
+
|
47
|
+
it "converts UTF-8 correctly" do
|
48
|
+
expect(@escaper.xml_escape("\xC2\xA9")).to eq("©")
|
49
|
+
end
|
50
|
+
|
51
|
+
it "converts win 1252 characters correctly" do
|
52
|
+
expect(@escaper.xml_escape((0x80.chr).to_s)).to eq("€")
|
53
|
+
end
|
54
|
+
end
|
@@ -1,34 +1,34 @@
|
|
1
|
-
#--
|
2
|
-
# Author:: Daniel DeLeo (<dan@chef.io>)
|
3
|
-
# Copyright:: Copyright 2013-2016, Chef Software 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
|
-
describe URI do
|
21
|
-
|
22
|
-
describe "when a URI contains an IPv6 literal" do
|
23
|
-
|
24
|
-
let(:ipv6_uri) do
|
25
|
-
URI.parse("https://[2a00:1450:4009:809::1008]:8443")
|
26
|
-
end
|
27
|
-
|
28
|
-
it "returns the hostname without brackets" do
|
29
|
-
expect(ipv6_uri.hostname).to eq("2a00:1450:4009:809::1008")
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
1
|
+
#--
|
2
|
+
# Author:: Daniel DeLeo (<dan@chef.io>)
|
3
|
+
# Copyright:: Copyright 2013-2016, Chef Software 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
|
+
describe URI do
|
21
|
+
|
22
|
+
describe "when a URI contains an IPv6 literal" do
|
23
|
+
|
24
|
+
let(:ipv6_uri) do
|
25
|
+
URI.parse("https://[2a00:1450:4009:809::1008]:8443")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "returns the hostname without brackets" do
|
29
|
+
expect(ipv6_uri.hostname).to eq("2a00:1450:4009:809::1008")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -1,45 +1,45 @@
|
|
1
|
-
#
|
2
|
-
# Copyright:: Copyright 2014-2016, Chef Software Inc.
|
3
|
-
# License:: Apache License, Version 2.0
|
4
|
-
#
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
# you may not use this file except in compliance with the License.
|
7
|
-
# You may obtain a copy of the License at
|
8
|
-
#
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
#
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
# See the License for the specific language governing permissions and
|
15
|
-
# limitations under the License.
|
16
|
-
#
|
17
|
-
|
18
|
-
require "chef/monologger"
|
19
|
-
require "tempfile"
|
20
|
-
require "spec_helper"
|
21
|
-
|
22
|
-
describe MonoLogger do
|
23
|
-
it "should disable buffering when passed an IO stream" do
|
24
|
-
STDOUT.sync = false
|
25
|
-
MonoLogger.new(STDOUT)
|
26
|
-
expect(STDOUT.sync).to eq(true)
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "when given an object that responds to write and close e.g. IO" do
|
30
|
-
it "should use the object directly" do
|
31
|
-
stream = StringIO.new
|
32
|
-
MonoLogger.new(stream).fatal("Houston, we've had a problem.")
|
33
|
-
expect(stream.string).to match(/Houston, we've had a problem./)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "when given an object that is stringable (to_str)" do
|
38
|
-
it "should open a File object with the given path" do
|
39
|
-
temp_file = Tempfile.new("rspec-monologger-log")
|
40
|
-
temp_file.close
|
41
|
-
MonoLogger.new(temp_file.path).fatal("Do, or do not. There is no try.")
|
42
|
-
expect(File.read(temp_file.path)).to match(/Do, or do not. There is no try./)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2014-2016, Chef Software Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require "chef/monologger"
|
19
|
+
require "tempfile"
|
20
|
+
require "spec_helper"
|
21
|
+
|
22
|
+
describe MonoLogger do
|
23
|
+
it "should disable buffering when passed an IO stream" do
|
24
|
+
STDOUT.sync = false
|
25
|
+
MonoLogger.new(STDOUT)
|
26
|
+
expect(STDOUT.sync).to eq(true)
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "when given an object that responds to write and close e.g. IO" do
|
30
|
+
it "should use the object directly" do
|
31
|
+
stream = StringIO.new
|
32
|
+
MonoLogger.new(stream).fatal("Houston, we've had a problem.")
|
33
|
+
expect(stream.string).to match(/Houston, we've had a problem./)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "when given an object that is stringable (to_str)" do
|
38
|
+
it "should open a File object with the given path" do
|
39
|
+
temp_file = Tempfile.new("rspec-monologger-log")
|
40
|
+
temp_file.close
|
41
|
+
MonoLogger.new(temp_file.path).fatal("Do, or do not. There is no try.")
|
42
|
+
expect(File.read(temp_file.path)).to match(/Do, or do not. There is no try./)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,1276 +1,1276 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
3
|
-
# Author:: AJ Christensen (<aj@chef.io>)
|
4
|
-
# Copyright:: Copyright 2008-2018, Chef Software 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/node/attribute"
|
22
|
-
|
23
|
-
describe Chef::Node::Attribute do
|
24
|
-
let(:events) { instance_double(Chef::EventDispatch::Dispatcher) }
|
25
|
-
let(:run_context) { instance_double(Chef::RunContext, events: events) }
|
26
|
-
let(:node) { instance_double(Chef::Node, run_context: run_context) }
|
27
|
-
before(:each) do
|
28
|
-
allow(events).to receive(:attribute_changed)
|
29
|
-
@attribute_hash =
|
30
|
-
{ "dmi" => {},
|
31
|
-
"command" => { "ps" => "ps -ef" },
|
32
|
-
"platform_version" => "10.5.7",
|
33
|
-
"platform" => "mac_os_x",
|
34
|
-
"ipaddress" => "192.168.0.117",
|
35
|
-
"network" => { "default_interface" => "en1",
|
36
|
-
"interfaces" => { "vmnet1" => { "flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
37
|
-
"number" => "1",
|
38
|
-
"addresses" => { "00:50:56:c0:00:01" => { "family" => "lladdr" },
|
39
|
-
"192.168.110.1" => { "broadcast" => "192.168.110.255",
|
40
|
-
"netmask" => "255.255.255.0",
|
41
|
-
"family" => "inet" } },
|
42
|
-
"mtu" => "1500",
|
43
|
-
"type" => "vmnet",
|
44
|
-
"arp" => { "192.168.110.255" => "ff:ff:ff:ff:ff:ff" },
|
45
|
-
"encapsulation" => "Ethernet" },
|
46
|
-
"stf0" => { "flags" => [],
|
47
|
-
"number" => "0",
|
48
|
-
"addresses" => {},
|
49
|
-
"mtu" => "1280",
|
50
|
-
"type" => "stf",
|
51
|
-
"encapsulation" => "6to4" },
|
52
|
-
"lo0" => { "flags" => %w{UP LOOPBACK RUNNING MULTICAST},
|
53
|
-
"number" => "0",
|
54
|
-
"addresses" => { "::1" => { "scope" => "Node", "prefixlen" => "128", "family" => "inet6" },
|
55
|
-
"127.0.0.1" => { "netmask" => "255.0.0.0", "family" => "inet" },
|
56
|
-
"fe80::1" => { "scope" => "Link", "prefixlen" => "64", "family" => "inet6" } },
|
57
|
-
"mtu" => "16384",
|
58
|
-
"type" => "lo",
|
59
|
-
"encapsulation" => "Loopback" },
|
60
|
-
"gif0" => { "flags" => %w{POINTOPOINT MULTICAST},
|
61
|
-
"number" => "0",
|
62
|
-
"addresses" => {},
|
63
|
-
"mtu" => "1280",
|
64
|
-
"type" => "gif",
|
65
|
-
"encapsulation" => "IPIP" },
|
66
|
-
"vmnet8" => { "flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
67
|
-
"number" => "8",
|
68
|
-
"addresses" => { "192.168.4.1" => { "broadcast" => "192.168.4.255",
|
69
|
-
"netmask" => "255.255.255.0",
|
70
|
-
"family" => "inet" },
|
71
|
-
"00:50:56:c0:00:08" => { "family" => "lladdr" } },
|
72
|
-
"mtu" => "1500",
|
73
|
-
"type" => "vmnet",
|
74
|
-
"arp" => { "192.168.4.255" => "ff:ff:ff:ff:ff:ff" },
|
75
|
-
"encapsulation" => "Ethernet" },
|
76
|
-
"en0" => { "status" => "inactive",
|
77
|
-
"flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
78
|
-
"number" => "0",
|
79
|
-
"addresses" => { "00:23:32:b0:32:f2" => { "family" => "lladdr" } },
|
80
|
-
"mtu" => "1500",
|
81
|
-
"media" => { "supported" => { "autoselect" => { "options" => [] },
|
82
|
-
"none" => { "options" => [] },
|
83
|
-
"1000baseT" => { "options" => ["full-duplex", "flow-control", "hw-loopback"] },
|
84
|
-
"10baseT/UTP" => { "options" => ["half-duplex", "full-duplex", "flow-control", "hw-loopback"] },
|
85
|
-
"100baseTX" => { "options" => ["half-duplex", "full-duplex", "flow-control", "hw-loopback"] } },
|
86
|
-
"selected" => { "autoselect" => { "options" => [] } } },
|
87
|
-
"type" => "en",
|
88
|
-
"encapsulation" => "Ethernet" },
|
89
|
-
"en1" => { "status" => "active",
|
90
|
-
"flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
91
|
-
"number" => "1",
|
92
|
-
"addresses" => { "fe80::223:6cff:fe7f:676c" => { "scope" => "Link", "prefixlen" => "64", "family" => "inet6" },
|
93
|
-
"00:23:6c:7f:67:6c" => { "family" => "lladdr" },
|
94
|
-
"192.168.0.117" => { "broadcast" => "192.168.0.255",
|
95
|
-
"netmask" => "255.255.255.0",
|
96
|
-
"family" => "inet" } },
|
97
|
-
"mtu" => "1500",
|
98
|
-
"media" => { "supported" => { "autoselect" => { "options" => [] } },
|
99
|
-
"selected" => { "autoselect" => { "options" => [] } } },
|
100
|
-
"type" => "en",
|
101
|
-
"arp" => { "192.168.0.72" => "0:f:ea:39:fa:d5",
|
102
|
-
"192.168.0.1" => "0:1c:fb:fc:6f:20",
|
103
|
-
"192.168.0.255" => "ff:ff:ff:ff:ff:ff",
|
104
|
-
"192.168.0.3" => "0:1f:33:ea:26:9b",
|
105
|
-
"192.168.0.77" => "0:23:12:70:f8:cf",
|
106
|
-
"192.168.0.152" => "0:26:8:7d:2:4c" },
|
107
|
-
"encapsulation" => "Ethernet" },
|
108
|
-
"en2" => { "status" => "active",
|
109
|
-
"flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
110
|
-
"number" => "2",
|
111
|
-
"addresses" => { "169.254.206.152" => { "broadcast" => "169.254.255.255",
|
112
|
-
"netmask" => "255.255.0.0",
|
113
|
-
"family" => "inet" },
|
114
|
-
"00:1c:42:00:00:01" => { "family" => "lladdr" },
|
115
|
-
"fe80::21c:42ff:fe00:1" => { "scope" => "Link", "prefixlen" => "64", "family" => "inet6" } },
|
116
|
-
"mtu" => "1500",
|
117
|
-
"media" => { "supported" => { "autoselect" => { "options" => [] } },
|
118
|
-
"selected" => { "autoselect" => { "options" => [] } } },
|
119
|
-
"type" => "en",
|
120
|
-
"encapsulation" => "Ethernet" },
|
121
|
-
"fw0" => { "status" => "inactive",
|
122
|
-
"flags" => %w{BROADCAST SIMPLEX MULTICAST},
|
123
|
-
"number" => "0",
|
124
|
-
"addresses" => { "00:23:32:ff:fe:b0:32:f2" => { "family" => "lladdr" } },
|
125
|
-
"mtu" => "4078",
|
126
|
-
"media" => { "supported" => { "autoselect" => { "options" => ["full-duplex"] } },
|
127
|
-
"selected" => { "autoselect" => { "options" => ["full-duplex"] } } },
|
128
|
-
"type" => "fw",
|
129
|
-
"encapsulation" => "1394" },
|
130
|
-
"en3" => { "status" => "active",
|
131
|
-
"flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
132
|
-
"number" => "3",
|
133
|
-
"addresses" => { "169.254.206.152" => { "broadcast" => "169.254.255.255",
|
134
|
-
"netmask" => "255.255.0.0",
|
135
|
-
"family" => "inet" },
|
136
|
-
"00:1c:42:00:00:00" => { "family" => "lladdr" },
|
137
|
-
"fe80::21c:42ff:fe00:0" => { "scope" => "Link", "prefixlen" => "64", "family" => "inet6" } },
|
138
|
-
"mtu" => "1500",
|
139
|
-
"media" => { "supported" => { "autoselect" => { "options" => [] } },
|
140
|
-
"selected" => { "autoselect" => { "options" => [] } } },
|
141
|
-
"type" => "en",
|
142
|
-
"encapsulation" => "Ethernet" } } },
|
143
|
-
"fqdn" => "latte.local",
|
144
|
-
"ohai_time" => 1249065590.90391,
|
145
|
-
"domain" => "local",
|
146
|
-
"os" => "darwin",
|
147
|
-
"platform_build" => "9J61",
|
148
|
-
"os_version" => "9.7.0",
|
149
|
-
"hostname" => "latte",
|
150
|
-
"macaddress" => "00:23:6c:7f:67:6c",
|
151
|
-
"music" => { "jimmy_eat_world" => "nice", "apophis" => false },
|
152
|
-
}
|
153
|
-
@default_hash = {
|
154
|
-
"domain" => "opscode.com",
|
155
|
-
"hot" => { "day" => "saturday" },
|
156
|
-
"music" => {
|
157
|
-
"jimmy_eat_world" => "is fun!",
|
158
|
-
"mastodon" => "rocks",
|
159
|
-
"mars_volta" => "is loud and nutty",
|
160
|
-
"deeper" => { "gates_of_ishtar" => nil },
|
161
|
-
"this" => { "apparatus" => { "must" => "be unearthed" } },
|
162
|
-
},
|
163
|
-
}
|
164
|
-
@override_hash = {
|
165
|
-
"macaddress" => "00:00:00:00:00:00",
|
166
|
-
"hot" => { "day" => "sunday" },
|
167
|
-
"fire" => "still burn",
|
168
|
-
"music" => {
|
169
|
-
"mars_volta" => "cicatriz",
|
170
|
-
},
|
171
|
-
}
|
172
|
-
@automatic_hash = { "week" => "friday" }
|
173
|
-
@attributes = Chef::Node::Attribute.new(@attribute_hash, @default_hash, @override_hash, @automatic_hash, node)
|
174
|
-
end
|
175
|
-
|
176
|
-
describe "initialize" do
|
177
|
-
it "should return a Chef::Node::Attribute" do
|
178
|
-
expect(@attributes).to be_a_kind_of(Chef::Node::Attribute)
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should take an Automatioc, Normal, Default and Override hash" do
|
182
|
-
expect { Chef::Node::Attribute.new({}, {}, {}, {}) }.not_to raise_error
|
183
|
-
end
|
184
|
-
|
185
|
-
[ :normal, :default, :override, :automatic ].each do |accessor|
|
186
|
-
it "should set #{accessor}" do
|
187
|
-
na = Chef::Node::Attribute.new({ normal: true }, { default: true }, { override: true }, { automatic: true })
|
188
|
-
expect(na.send(accessor)).to eq({ accessor.to_s => true })
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
it "should be enumerable" do
|
193
|
-
expect(@attributes).to be_is_a(Enumerable)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
describe "when printing attribute components" do
|
198
|
-
|
199
|
-
it "does not cause a type error" do
|
200
|
-
# See CHEF-3799; IO#puts implicitly calls #to_ary on its argument. This
|
201
|
-
# is expected to raise a NoMethodError or return an Array. `to_ary` is
|
202
|
-
# the "strict" conversion method that should only be implemented by
|
203
|
-
# things that are truly Array-like, so NoMethodError is the right choice.
|
204
|
-
# (cf. there is no Hash#to_ary).
|
205
|
-
expect { @attributes.default.to_ary }.to raise_error(NoMethodError)
|
206
|
-
end
|
207
|
-
|
208
|
-
end
|
209
|
-
|
210
|
-
describe "when debugging attributes" do
|
211
|
-
it "gives the value at each level of precedence for a path spec" do
|
212
|
-
@attributes.default[:foo][:bar] = "default"
|
213
|
-
@attributes.env_default[:foo][:bar] = "env_default"
|
214
|
-
@attributes.role_default[:foo][:bar] = "role_default"
|
215
|
-
@attributes.force_default[:foo][:bar] = "force_default"
|
216
|
-
@attributes.normal[:foo][:bar] = "normal"
|
217
|
-
@attributes.override[:foo][:bar] = "override"
|
218
|
-
@attributes.role_override[:foo][:bar] = "role_override"
|
219
|
-
@attributes.env_override[:foo][:bar] = "env_override"
|
220
|
-
@attributes.force_override[:foo][:bar] = "force_override"
|
221
|
-
@attributes.automatic[:foo][:bar] = "automatic"
|
222
|
-
|
223
|
-
expected = [
|
224
|
-
%w{default default},
|
225
|
-
%w{env_default env_default},
|
226
|
-
%w{role_default role_default},
|
227
|
-
%w{force_default force_default},
|
228
|
-
%w{normal normal},
|
229
|
-
%w{override override},
|
230
|
-
%w{role_override role_override},
|
231
|
-
%w{env_override env_override},
|
232
|
-
%w{force_override force_override},
|
233
|
-
%w{automatic automatic},
|
234
|
-
]
|
235
|
-
expect(@attributes.debug_value(:foo, :bar)).to eq(expected)
|
236
|
-
end
|
237
|
-
|
238
|
-
it "works through arrays" do
|
239
|
-
@attributes.default["foo"] = [ { "bar" => "baz" } ]
|
240
|
-
|
241
|
-
expect(@attributes.debug_value(:foo, 0)).to eq(
|
242
|
-
[
|
243
|
-
["default", { "bar" => "baz" }],
|
244
|
-
["env_default", :not_present],
|
245
|
-
["role_default", :not_present],
|
246
|
-
["force_default", :not_present],
|
247
|
-
["normal", :not_present],
|
248
|
-
["override", :not_present],
|
249
|
-
["role_override", :not_present],
|
250
|
-
["env_override", :not_present],
|
251
|
-
["force_override", :not_present],
|
252
|
-
["automatic", :not_present],
|
253
|
-
]
|
254
|
-
)
|
255
|
-
end
|
256
|
-
end
|
257
|
-
|
258
|
-
describe "when fetching values based on precedence" do
|
259
|
-
before do
|
260
|
-
@attributes.default["default"] = "cookbook default"
|
261
|
-
@attributes.override["override"] = "cookbook override"
|
262
|
-
end
|
263
|
-
|
264
|
-
it "prefers 'forced default' over any other default" do
|
265
|
-
@attributes.force_default["default"] = "force default"
|
266
|
-
@attributes.role_default["default"] = "role default"
|
267
|
-
@attributes.env_default["default"] = "environment default"
|
268
|
-
expect(@attributes["default"]).to eq("force default")
|
269
|
-
end
|
270
|
-
|
271
|
-
it "prefers role_default over environment or cookbook default" do
|
272
|
-
@attributes.role_default["default"] = "role default"
|
273
|
-
@attributes.env_default["default"] = "environment default"
|
274
|
-
expect(@attributes["default"]).to eq("role default")
|
275
|
-
end
|
276
|
-
|
277
|
-
it "prefers environment default over cookbook default" do
|
278
|
-
@attributes.env_default["default"] = "environment default"
|
279
|
-
expect(@attributes["default"]).to eq("environment default")
|
280
|
-
end
|
281
|
-
|
282
|
-
it "returns the cookbook default when no other default values are present" do
|
283
|
-
expect(@attributes["default"]).to eq("cookbook default")
|
284
|
-
end
|
285
|
-
|
286
|
-
it "prefers 'forced overrides' over role or cookbook overrides" do
|
287
|
-
@attributes.force_override["override"] = "force override"
|
288
|
-
@attributes.env_override["override"] = "environment override"
|
289
|
-
@attributes.role_override["override"] = "role override"
|
290
|
-
expect(@attributes["override"]).to eq("force override")
|
291
|
-
end
|
292
|
-
|
293
|
-
it "prefers environment overrides over role or cookbook overrides" do
|
294
|
-
@attributes.env_override["override"] = "environment override"
|
295
|
-
@attributes.role_override["override"] = "role override"
|
296
|
-
expect(@attributes["override"]).to eq("environment override")
|
297
|
-
end
|
298
|
-
|
299
|
-
it "prefers role overrides over cookbook overrides" do
|
300
|
-
@attributes.role_override["override"] = "role override"
|
301
|
-
expect(@attributes["override"]).to eq("role override")
|
302
|
-
end
|
303
|
-
|
304
|
-
it "returns cookbook overrides when no other overrides are present" do
|
305
|
-
expect(@attributes["override"]).to eq("cookbook override")
|
306
|
-
end
|
307
|
-
|
308
|
-
it "merges arrays within the default precedence" do
|
309
|
-
@attributes.role_default["array"] = %w{role}
|
310
|
-
@attributes.env_default["array"] = %w{env}
|
311
|
-
expect(@attributes["array"]).to eq(%w{env role})
|
312
|
-
end
|
313
|
-
|
314
|
-
it "merges arrays within the override precedence" do
|
315
|
-
@attributes.role_override["array"] = %w{role}
|
316
|
-
@attributes.env_override["array"] = %w{env}
|
317
|
-
expect(@attributes["array"]).to eq(%w{role env})
|
318
|
-
end
|
319
|
-
|
320
|
-
it "does not merge arrays between default and normal" do
|
321
|
-
@attributes.role_default["array"] = %w{role}
|
322
|
-
@attributes.normal["array"] = %w{normal}
|
323
|
-
expect(@attributes["array"]).to eq(%w{normal})
|
324
|
-
end
|
325
|
-
|
326
|
-
it "does not merge arrays between normal and override" do
|
327
|
-
@attributes.normal["array"] = %w{normal}
|
328
|
-
@attributes.role_override["array"] = %w{role}
|
329
|
-
expect(@attributes["array"]).to eq(%w{role})
|
330
|
-
end
|
331
|
-
|
332
|
-
it "merges nested hashes between precedence levels" do
|
333
|
-
@attributes = Chef::Node::Attribute.new({}, {}, {}, {})
|
334
|
-
@attributes.env_default = { "a" => { "b" => { "default" => "default" } } }
|
335
|
-
@attributes.normal = { "a" => { "b" => { "normal" => "normal" } } }
|
336
|
-
@attributes.override = { "a" => { "override" => "role" } }
|
337
|
-
@attributes.automatic = { "a" => { "automatic" => "auto" } }
|
338
|
-
expect(@attributes["a"]).to eq({ "b" => { "default" => "default", "normal" => "normal" },
|
339
|
-
"override" => "role",
|
340
|
-
"automatic" => "auto" })
|
341
|
-
end
|
342
|
-
end
|
343
|
-
|
344
|
-
describe "when reading combined default or override values" do
|
345
|
-
before do
|
346
|
-
@attributes.default["cd"] = "cookbook default"
|
347
|
-
@attributes.role_default["rd"] = "role default"
|
348
|
-
@attributes.env_default["ed"] = "env default"
|
349
|
-
@attributes.default!["fd"] = "force default"
|
350
|
-
@attributes.override["co"] = "cookbook override"
|
351
|
-
@attributes.role_override["ro"] = "role override"
|
352
|
-
@attributes.env_override["eo"] = "env override"
|
353
|
-
@attributes.override!["fo"] = "force override"
|
354
|
-
end
|
355
|
-
|
356
|
-
it "merges all types of overrides into a combined override" do
|
357
|
-
expect(@attributes.combined_override["co"]).to eq("cookbook override")
|
358
|
-
expect(@attributes.combined_override["ro"]).to eq("role override")
|
359
|
-
expect(@attributes.combined_override["eo"]).to eq("env override")
|
360
|
-
expect(@attributes.combined_override["fo"]).to eq("force override")
|
361
|
-
end
|
362
|
-
|
363
|
-
it "merges all types of defaults into a combined default" do
|
364
|
-
expect(@attributes.combined_default["cd"]).to eq("cookbook default")
|
365
|
-
expect(@attributes.combined_default["rd"]).to eq("role default")
|
366
|
-
expect(@attributes.combined_default["ed"]).to eq("env default")
|
367
|
-
expect(@attributes.combined_default["fd"]).to eq("force default")
|
368
|
-
end
|
369
|
-
|
370
|
-
end
|
371
|
-
|
372
|
-
describe "[]" do
|
373
|
-
it "should return override data if it exists" do
|
374
|
-
expect(@attributes["macaddress"]).to eq("00:00:00:00:00:00")
|
375
|
-
end
|
376
|
-
|
377
|
-
it "should return attribute data if it is not overridden" do
|
378
|
-
expect(@attributes["platform"]).to eq("mac_os_x")
|
379
|
-
end
|
380
|
-
|
381
|
-
it "should return data that doesn't have corresponding keys in every hash" do
|
382
|
-
expect(@attributes["command"]["ps"]).to eq("ps -ef")
|
383
|
-
end
|
384
|
-
|
385
|
-
it "should return default data if it is not overriden or in attribute data" do
|
386
|
-
expect(@attributes["music"]["mastodon"]).to eq("rocks")
|
387
|
-
end
|
388
|
-
|
389
|
-
it "should prefer the override data over an available default" do
|
390
|
-
expect(@attributes["music"]["mars_volta"]).to eq("cicatriz")
|
391
|
-
end
|
392
|
-
|
393
|
-
it "should prefer the attribute data over an available default" do
|
394
|
-
expect(@attributes["music"]["jimmy_eat_world"]).to eq("nice")
|
395
|
-
end
|
396
|
-
|
397
|
-
it "should prefer override data over default data if there is no attribute data" do
|
398
|
-
expect(@attributes["hot"]["day"]).to eq("sunday")
|
399
|
-
end
|
400
|
-
|
401
|
-
it "should return the merged hash if all three have values" do
|
402
|
-
result = @attributes["music"]
|
403
|
-
expect(result["mars_volta"]).to eq("cicatriz")
|
404
|
-
expect(result["jimmy_eat_world"]).to eq("nice")
|
405
|
-
expect(result["mastodon"]).to eq("rocks")
|
406
|
-
end
|
407
|
-
end
|
408
|
-
|
409
|
-
describe "[]=" do
|
410
|
-
it "should error out when the type of attribute to set has not been specified" do
|
411
|
-
@attributes.normal["the_ghost"] = {}
|
412
|
-
expect { @attributes["the_ghost"]["exterminate"] = false }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
|
413
|
-
end
|
414
|
-
|
415
|
-
it "should let you set an attribute value when another hash has an intermediate value" do
|
416
|
-
@attributes.normal["the_ghost"] = { "exterminate" => "the future" }
|
417
|
-
expect { @attributes.normal["the_ghost"]["eviscerate"]["tomorrow"] = false }.not_to raise_error
|
418
|
-
end
|
419
|
-
|
420
|
-
it "should set the attribute value" do
|
421
|
-
@attributes.normal["longboard"] = "surfing"
|
422
|
-
expect(@attributes.normal["longboard"]).to eq("surfing")
|
423
|
-
expect(@attributes.normal["longboard"]).to eq("surfing")
|
424
|
-
end
|
425
|
-
|
426
|
-
it "should set deeply nested attribute values when a precedence level is specified" do
|
427
|
-
@attributes.normal["deftones"]["hunters"]["nap"] = "surfing"
|
428
|
-
expect(@attributes.normal["deftones"]["hunters"]["nap"]).to eq("surfing")
|
429
|
-
end
|
430
|
-
|
431
|
-
it "should die if you try and do nested attributes that do not exist without read vivification" do
|
432
|
-
expect { @attributes["foo"]["bar"] = :baz }.to raise_error(NoMethodError)
|
433
|
-
end
|
434
|
-
|
435
|
-
it "should let you set attributes manually without vivification" do
|
436
|
-
@attributes.normal["foo"] = Mash.new
|
437
|
-
@attributes.normal["foo"]["bar"] = :baz
|
438
|
-
expect(@attributes.normal["foo"]["bar"]).to eq(:baz)
|
439
|
-
end
|
440
|
-
|
441
|
-
it "does not support ||= when setting" do
|
442
|
-
# This is a limitation of auto-vivification.
|
443
|
-
# Users who need this behavior can use set_unless and friends
|
444
|
-
@attributes.normal["foo"] = Mash.new
|
445
|
-
@attributes.normal["foo"]["bar"] ||= "stop the world"
|
446
|
-
expect(@attributes.normal["foo"]["bar"]).to eq({})
|
447
|
-
end
|
448
|
-
end
|
449
|
-
|
450
|
-
describe "to_hash" do
|
451
|
-
it "should convert to a hash" do
|
452
|
-
expect(@attributes.to_hash.class).to eq(Hash)
|
453
|
-
end
|
454
|
-
|
455
|
-
it "should convert to a hash based on current state" do
|
456
|
-
hash = @attributes["hot"].to_hash
|
457
|
-
expect(hash.class).to eq(Hash)
|
458
|
-
expect(hash["day"]).to eq("sunday")
|
459
|
-
end
|
460
|
-
|
461
|
-
it "should create a deep copy of the node attribute" do
|
462
|
-
@attributes.default["foo"]["bar"]["baz"] = "fizz"
|
463
|
-
hash = @attributes["foo"].to_hash
|
464
|
-
expect(hash).to eql({ "bar" => { "baz" => "fizz" } })
|
465
|
-
hash["bar"]["baz"] = "buzz"
|
466
|
-
expect(hash).to eql({ "bar" => { "baz" => "buzz" } })
|
467
|
-
expect(@attributes.default["foo"]).to eql({ "bar" => { "baz" => "fizz" } })
|
468
|
-
end
|
469
|
-
|
470
|
-
it "should create a deep copy of arrays in the node attribute" do
|
471
|
-
@attributes.default["foo"]["bar"] = ["fizz"]
|
472
|
-
hash = @attributes["foo"].to_hash
|
473
|
-
expect(hash).to eql({ "bar" => [ "fizz" ] })
|
474
|
-
hash["bar"].push("buzz")
|
475
|
-
expect(hash).to eql({ "bar" => %w{fizz buzz} })
|
476
|
-
expect(@attributes.default["foo"]).to eql({ "bar" => [ "fizz" ] })
|
477
|
-
end
|
478
|
-
|
479
|
-
it "mutating strings should not mutate the attributes in a hash" do
|
480
|
-
@attributes.default["foo"]["bar"]["baz"] = "fizz"
|
481
|
-
hash = @attributes["foo"].to_hash
|
482
|
-
expect(hash).to eql({ "bar" => { "baz" => "fizz" } })
|
483
|
-
hash["bar"]["baz"] << "buzz"
|
484
|
-
expect(hash).to eql({ "bar" => { "baz" => "fizzbuzz" } })
|
485
|
-
expect(@attributes.default["foo"]).to eql({ "bar" => { "baz" => "fizz" } })
|
486
|
-
end
|
487
|
-
|
488
|
-
it "mutating array elements should not mutate the attributes" do
|
489
|
-
@attributes.default["foo"]["bar"] = [ "fizz" ]
|
490
|
-
hash = @attributes["foo"].to_hash
|
491
|
-
expect(hash).to eql({ "bar" => [ "fizz" ] })
|
492
|
-
hash["bar"][0] << "buzz"
|
493
|
-
expect(hash).to eql({ "bar" => [ "fizzbuzz" ] })
|
494
|
-
expect(@attributes.default["foo"]).to eql({ "bar" => [ "fizz" ] })
|
495
|
-
end
|
496
|
-
end
|
497
|
-
|
498
|
-
describe "dup" do
|
499
|
-
it "array can be duped even if some elements can't" do
|
500
|
-
@attributes.default[:foo] = %w{foo bar baz} + Array(1..3) + [nil, true, false, [ "el", 0, nil ] ]
|
501
|
-
@attributes.default[:foo].dup
|
502
|
-
end
|
503
|
-
|
504
|
-
it "mutating strings should not mutate the attributes in a hash" do
|
505
|
-
@attributes.default["foo"]["bar"]["baz"] = "fizz"
|
506
|
-
hash = @attributes["foo"].dup
|
507
|
-
expect(hash).to eql({ "bar" => { "baz" => "fizz" } })
|
508
|
-
hash["bar"]["baz"] << "buzz"
|
509
|
-
expect(hash).to eql({ "bar" => { "baz" => "fizzbuzz" } })
|
510
|
-
expect(@attributes.default["foo"]).to eql({ "bar" => { "baz" => "fizz" } })
|
511
|
-
end
|
512
|
-
|
513
|
-
it "mutating array elements should not mutate the attributes" do
|
514
|
-
@attributes.default["foo"]["bar"] = [ "fizz" ]
|
515
|
-
hash = @attributes["foo"].dup
|
516
|
-
expect(hash).to eql({ "bar" => [ "fizz" ] })
|
517
|
-
hash["bar"][0] << "buzz"
|
518
|
-
expect(hash).to eql({ "bar" => [ "fizzbuzz" ] })
|
519
|
-
expect(@attributes.default["foo"]).to eql({ "bar" => [ "fizz" ] })
|
520
|
-
end
|
521
|
-
end
|
522
|
-
|
523
|
-
describe "has_key?" do
|
524
|
-
it "should return true if an attribute exists" do
|
525
|
-
expect(@attributes.key?("music")).to eq(true)
|
526
|
-
end
|
527
|
-
|
528
|
-
it "should return false if an attribute does not exist" do
|
529
|
-
expect(@attributes.key?("ninja")).to eq(false)
|
530
|
-
end
|
531
|
-
|
532
|
-
it "should return false if an attribute does not exist using dot notation" do
|
533
|
-
expect(@attributes.key?("does_not_exist_at_all")).to eq(false)
|
534
|
-
end
|
535
|
-
|
536
|
-
it "should return true if an attribute exists but is set to false" do
|
537
|
-
@attributes.key?("music")
|
538
|
-
expect(@attributes["music"].key?("apophis")).to eq(true)
|
539
|
-
end
|
540
|
-
|
541
|
-
it "does not find keys above the current nesting level" do
|
542
|
-
expect(@attributes["music"]["this"]["apparatus"]).not_to have_key("this")
|
543
|
-
end
|
544
|
-
|
545
|
-
it "does not find keys below the current nesting level" do
|
546
|
-
expect(@attributes["music"]["this"]).not_to have_key("must")
|
547
|
-
end
|
548
|
-
|
549
|
-
[:include?, :key?, :member?].each do |method|
|
550
|
-
it "should alias the method #{method} to itself" do
|
551
|
-
expect(@attributes).to respond_to(method)
|
552
|
-
end
|
553
|
-
|
554
|
-
it "#{method} should behave like has_key?" do
|
555
|
-
expect(@attributes.send(method, "music")).to eq(true)
|
556
|
-
end
|
557
|
-
end
|
558
|
-
end
|
559
|
-
|
560
|
-
describe "attribute?" do
|
561
|
-
it "should return true if an attribute exists" do
|
562
|
-
expect(@attributes.attribute?("music")).to eq(true)
|
563
|
-
end
|
564
|
-
|
565
|
-
it "should return false if an attribute does not exist" do
|
566
|
-
expect(@attributes.attribute?("ninja")).to eq(false)
|
567
|
-
end
|
568
|
-
|
569
|
-
end
|
570
|
-
|
571
|
-
describe "keys" do
|
572
|
-
before(:each) do
|
573
|
-
@attributes = Chef::Node::Attribute.new(
|
574
|
-
{
|
575
|
-
"one" => { "two" => "three" },
|
576
|
-
"hut" => { "two" => "three" },
|
577
|
-
"place" => {},
|
578
|
-
},
|
579
|
-
{
|
580
|
-
"one" => { "four" => "five" },
|
581
|
-
"snakes" => "on a plane",
|
582
|
-
},
|
583
|
-
{
|
584
|
-
"one" => { "six" => "seven" },
|
585
|
-
"snack" => "cookies",
|
586
|
-
},
|
587
|
-
{}
|
588
|
-
)
|
589
|
-
end
|
590
|
-
|
591
|
-
it "should yield each top level key" do
|
592
|
-
collect = Array.new
|
593
|
-
@attributes.each_key do |k|
|
594
|
-
collect << k
|
595
|
-
end
|
596
|
-
expect(collect.include?("one")).to eq(true)
|
597
|
-
expect(collect.include?("hut")).to eq(true)
|
598
|
-
expect(collect.include?("snakes")).to eq(true)
|
599
|
-
expect(collect.include?("snack")).to eq(true)
|
600
|
-
expect(collect.include?("place")).to eq(true)
|
601
|
-
expect(collect.length).to eq(5)
|
602
|
-
end
|
603
|
-
|
604
|
-
it "should yield lower if we go deeper" do
|
605
|
-
collect = Array.new
|
606
|
-
@attributes["one"].each_key do |k|
|
607
|
-
collect << k
|
608
|
-
end
|
609
|
-
expect(collect.include?("two")).to eq(true)
|
610
|
-
expect(collect.include?("four")).to eq(true)
|
611
|
-
expect(collect.include?("six")).to eq(true)
|
612
|
-
expect(collect.length).to eq(3)
|
613
|
-
end
|
614
|
-
|
615
|
-
it "should not raise an exception if one of the hashes has a nil value on a deep lookup" do
|
616
|
-
expect { @attributes["place"].keys { |k| } }.not_to raise_error
|
617
|
-
end
|
618
|
-
end
|
619
|
-
|
620
|
-
describe "each" do
|
621
|
-
before(:each) do
|
622
|
-
@attributes = Chef::Node::Attribute.new(
|
623
|
-
{
|
624
|
-
"one" => "two",
|
625
|
-
"hut" => "three",
|
626
|
-
},
|
627
|
-
{
|
628
|
-
"one" => "four",
|
629
|
-
"snakes" => "on a plane",
|
630
|
-
},
|
631
|
-
{
|
632
|
-
"one" => "six",
|
633
|
-
"snack" => "cookies",
|
634
|
-
},
|
635
|
-
{}
|
636
|
-
)
|
637
|
-
end
|
638
|
-
|
639
|
-
it "should yield each top level key and value, post merge rules" do
|
640
|
-
collect = Hash.new
|
641
|
-
@attributes.each do |k, v|
|
642
|
-
collect[k] = v
|
643
|
-
end
|
644
|
-
|
645
|
-
expect(collect["one"]).to eq("six")
|
646
|
-
expect(collect["hut"]).to eq("three")
|
647
|
-
expect(collect["snakes"]).to eq("on a plane")
|
648
|
-
expect(collect["snack"]).to eq("cookies")
|
649
|
-
end
|
650
|
-
|
651
|
-
it "should yield as a two-element array" do
|
652
|
-
@attributes.each do |a|
|
653
|
-
expect(a).to be_an_instance_of(Array)
|
654
|
-
end
|
655
|
-
end
|
656
|
-
end
|
657
|
-
|
658
|
-
describe "each_key" do
|
659
|
-
before do
|
660
|
-
@attributes = Chef::Node::Attribute.new(
|
661
|
-
{
|
662
|
-
"one" => "two",
|
663
|
-
"hut" => "three",
|
664
|
-
},
|
665
|
-
{
|
666
|
-
"one" => "four",
|
667
|
-
"snakes" => "on a plane",
|
668
|
-
},
|
669
|
-
{
|
670
|
-
"one" => "six",
|
671
|
-
"snack" => "cookies",
|
672
|
-
},
|
673
|
-
{}
|
674
|
-
)
|
675
|
-
end
|
676
|
-
|
677
|
-
it "should respond to each_key" do
|
678
|
-
expect(@attributes).to respond_to(:each_key)
|
679
|
-
end
|
680
|
-
|
681
|
-
it "should yield each top level key, post merge rules" do
|
682
|
-
collect = Array.new
|
683
|
-
@attributes.each_key do |k|
|
684
|
-
collect << k
|
685
|
-
end
|
686
|
-
|
687
|
-
expect(collect).to include("one")
|
688
|
-
expect(collect).to include("snack")
|
689
|
-
expect(collect).to include("hut")
|
690
|
-
expect(collect).to include("snakes")
|
691
|
-
end
|
692
|
-
end
|
693
|
-
|
694
|
-
describe "each_pair" do
|
695
|
-
before do
|
696
|
-
@attributes = Chef::Node::Attribute.new(
|
697
|
-
{
|
698
|
-
"one" => "two",
|
699
|
-
"hut" => "three",
|
700
|
-
},
|
701
|
-
{
|
702
|
-
"one" => "four",
|
703
|
-
"snakes" => "on a plane",
|
704
|
-
},
|
705
|
-
{
|
706
|
-
"one" => "six",
|
707
|
-
"snack" => "cookies",
|
708
|
-
},
|
709
|
-
{}
|
710
|
-
)
|
711
|
-
end
|
712
|
-
|
713
|
-
it "should respond to each_pair" do
|
714
|
-
expect(@attributes).to respond_to(:each_pair)
|
715
|
-
end
|
716
|
-
|
717
|
-
it "should yield each top level key and value pair, post merge rules" do
|
718
|
-
collect = Hash.new
|
719
|
-
@attributes.each_pair do |k, v|
|
720
|
-
collect[k] = v
|
721
|
-
end
|
722
|
-
|
723
|
-
expect(collect["one"]).to eq("six")
|
724
|
-
expect(collect["hut"]).to eq("three")
|
725
|
-
expect(collect["snakes"]).to eq("on a plane")
|
726
|
-
expect(collect["snack"]).to eq("cookies")
|
727
|
-
end
|
728
|
-
end
|
729
|
-
|
730
|
-
describe "each_value" do
|
731
|
-
before do
|
732
|
-
@attributes = Chef::Node::Attribute.new(
|
733
|
-
{
|
734
|
-
"one" => "two",
|
735
|
-
"hut" => "three",
|
736
|
-
},
|
737
|
-
{
|
738
|
-
"one" => "four",
|
739
|
-
"snakes" => "on a plane",
|
740
|
-
},
|
741
|
-
{
|
742
|
-
"one" => "six",
|
743
|
-
"snack" => "cookies",
|
744
|
-
},
|
745
|
-
{}
|
746
|
-
)
|
747
|
-
end
|
748
|
-
|
749
|
-
it "should respond to each_value" do
|
750
|
-
expect(@attributes).to respond_to(:each_value)
|
751
|
-
end
|
752
|
-
|
753
|
-
it "should yield each value, post merge rules" do
|
754
|
-
collect = Array.new
|
755
|
-
@attributes.each_value do |v|
|
756
|
-
collect << v
|
757
|
-
end
|
758
|
-
|
759
|
-
expect(collect).to include("cookies")
|
760
|
-
expect(collect).to include("three")
|
761
|
-
expect(collect).to include("on a plane")
|
762
|
-
end
|
763
|
-
|
764
|
-
it "should yield four elements" do
|
765
|
-
collect = Array.new
|
766
|
-
@attributes.each_value do |v|
|
767
|
-
collect << v
|
768
|
-
end
|
769
|
-
|
770
|
-
expect(collect.length).to eq(4)
|
771
|
-
end
|
772
|
-
end
|
773
|
-
|
774
|
-
describe "empty?" do
|
775
|
-
before do
|
776
|
-
@attributes = Chef::Node::Attribute.new(
|
777
|
-
{
|
778
|
-
"one" => "two",
|
779
|
-
"hut" => "three",
|
780
|
-
},
|
781
|
-
{
|
782
|
-
"one" => "four",
|
783
|
-
"snakes" => "on a plane",
|
784
|
-
},
|
785
|
-
{
|
786
|
-
"one" => "six",
|
787
|
-
"snack" => "cookies",
|
788
|
-
},
|
789
|
-
{}
|
790
|
-
)
|
791
|
-
@empty = Chef::Node::Attribute.new({}, {}, {}, {})
|
792
|
-
end
|
793
|
-
|
794
|
-
it "should respond to empty?" do
|
795
|
-
expect(@attributes).to respond_to(:empty?)
|
796
|
-
end
|
797
|
-
|
798
|
-
it "should return true when there are no keys" do
|
799
|
-
expect(@empty.empty?).to eq(true)
|
800
|
-
end
|
801
|
-
|
802
|
-
it "should return false when there are keys" do
|
803
|
-
expect(@attributes.empty?).to eq(false)
|
804
|
-
end
|
805
|
-
|
806
|
-
end
|
807
|
-
|
808
|
-
describe "fetch" do
|
809
|
-
before do
|
810
|
-
@attributes = Chef::Node::Attribute.new(
|
811
|
-
{
|
812
|
-
"one" => "two",
|
813
|
-
"hut" => "three",
|
814
|
-
},
|
815
|
-
{
|
816
|
-
"one" => "four",
|
817
|
-
"snakes" => "on a plane",
|
818
|
-
},
|
819
|
-
{
|
820
|
-
"one" => "six",
|
821
|
-
"snack" => "cookies",
|
822
|
-
},
|
823
|
-
{}
|
824
|
-
)
|
825
|
-
end
|
826
|
-
|
827
|
-
it "should respond to fetch" do
|
828
|
-
expect(@attributes).to respond_to(:fetch)
|
829
|
-
end
|
830
|
-
|
831
|
-
describe "when the key exists" do
|
832
|
-
it "should return the value of the key, post merge (same result as each)" do
|
833
|
-
{
|
834
|
-
"one" => "six",
|
835
|
-
"hut" => "three",
|
836
|
-
"snakes" => "on a plane",
|
837
|
-
"snack" => "cookies",
|
838
|
-
}.each do |k, v|
|
839
|
-
expect(@attributes.fetch(k)).to eq(v)
|
840
|
-
end
|
841
|
-
end
|
842
|
-
end
|
843
|
-
|
844
|
-
describe "when the key does not exist" do
|
845
|
-
describe "and no args are passed" do
|
846
|
-
it "should raise an indexerror" do
|
847
|
-
expect { @attributes.fetch("lololol") }.to raise_error(IndexError)
|
848
|
-
end
|
849
|
-
end
|
850
|
-
|
851
|
-
describe "and a default arg is passed" do
|
852
|
-
it "should return the value of the default arg" do
|
853
|
-
expect(@attributes.fetch("lol", "blah")).to eq("blah")
|
854
|
-
end
|
855
|
-
end
|
856
|
-
|
857
|
-
describe "and a block is passed" do
|
858
|
-
it "should run the block and return its value" do
|
859
|
-
expect(@attributes.fetch("lol") { |x| "#{x}, blah" }).to eq("lol, blah")
|
860
|
-
end
|
861
|
-
end
|
862
|
-
end
|
863
|
-
end
|
864
|
-
|
865
|
-
describe "has_value?" do
|
866
|
-
before do
|
867
|
-
@attributes = Chef::Node::Attribute.new(
|
868
|
-
{
|
869
|
-
"one" => "two",
|
870
|
-
"hut" => "three",
|
871
|
-
},
|
872
|
-
{
|
873
|
-
"one" => "four",
|
874
|
-
"snakes" => "on a plane",
|
875
|
-
},
|
876
|
-
{
|
877
|
-
"one" => "six",
|
878
|
-
"snack" => "cookies",
|
879
|
-
},
|
880
|
-
{}
|
881
|
-
)
|
882
|
-
end
|
883
|
-
|
884
|
-
it "should respond to has_value?" do
|
885
|
-
expect(@attributes).to respond_to(:has_value?)
|
886
|
-
end
|
887
|
-
|
888
|
-
it "should return true if any key has the value supplied" do
|
889
|
-
expect(@attributes.value?("cookies")).to eq(true)
|
890
|
-
end
|
891
|
-
|
892
|
-
it "should return false no key has the value supplied" do
|
893
|
-
expect(@attributes.value?("lololol")).to eq(false)
|
894
|
-
end
|
895
|
-
|
896
|
-
it "should alias value?" do
|
897
|
-
expect(@attributes).to respond_to(:value?)
|
898
|
-
end
|
899
|
-
end
|
900
|
-
|
901
|
-
describe "index" do
|
902
|
-
# Hash#index is deprecated and triggers warnings.
|
903
|
-
def silence
|
904
|
-
old_verbose = $VERBOSE
|
905
|
-
$VERBOSE = nil
|
906
|
-
yield
|
907
|
-
ensure
|
908
|
-
$VERBOSE = old_verbose
|
909
|
-
end
|
910
|
-
|
911
|
-
before do
|
912
|
-
@attributes = Chef::Node::Attribute.new(
|
913
|
-
{
|
914
|
-
"one" => "two",
|
915
|
-
"hut" => "three",
|
916
|
-
},
|
917
|
-
{
|
918
|
-
"one" => "four",
|
919
|
-
"snakes" => "on a plane",
|
920
|
-
},
|
921
|
-
{
|
922
|
-
"one" => "six",
|
923
|
-
"snack" => "cookies",
|
924
|
-
},
|
925
|
-
{}
|
926
|
-
)
|
927
|
-
end
|
928
|
-
|
929
|
-
it "should respond to index" do
|
930
|
-
expect(@attributes).to respond_to(:index)
|
931
|
-
end
|
932
|
-
|
933
|
-
describe "when the value is indexed" do
|
934
|
-
it "should return the index" do
|
935
|
-
silence do
|
936
|
-
expect(@attributes.index("six")).to eq("one")
|
937
|
-
end
|
938
|
-
end
|
939
|
-
end
|
940
|
-
|
941
|
-
describe "when the value is not indexed" do
|
942
|
-
it "should return nil" do
|
943
|
-
silence do
|
944
|
-
expect(@attributes.index("lolol")).to eq(nil)
|
945
|
-
end
|
946
|
-
end
|
947
|
-
end
|
948
|
-
|
949
|
-
end
|
950
|
-
|
951
|
-
describe "values" do
|
952
|
-
before do
|
953
|
-
@attributes = Chef::Node::Attribute.new(
|
954
|
-
{
|
955
|
-
"one" => "two",
|
956
|
-
"hut" => "three",
|
957
|
-
},
|
958
|
-
{
|
959
|
-
"one" => "four",
|
960
|
-
"snakes" => "on a plane",
|
961
|
-
},
|
962
|
-
{
|
963
|
-
"one" => "six",
|
964
|
-
"snack" => "cookies",
|
965
|
-
},
|
966
|
-
{}
|
967
|
-
)
|
968
|
-
end
|
969
|
-
|
970
|
-
it "should respond to values" do
|
971
|
-
expect(@attributes).to respond_to(:values)
|
972
|
-
end
|
973
|
-
|
974
|
-
it "should return an array of values" do
|
975
|
-
expect(@attributes.values.length).to eq(4)
|
976
|
-
end
|
977
|
-
|
978
|
-
it "should match the values output from each" do
|
979
|
-
expect(@attributes.values).to include("six")
|
980
|
-
expect(@attributes.values).to include("cookies")
|
981
|
-
expect(@attributes.values).to include("three")
|
982
|
-
expect(@attributes.values).to include("on a plane")
|
983
|
-
end
|
984
|
-
|
985
|
-
end
|
986
|
-
|
987
|
-
describe "select" do
|
988
|
-
before do
|
989
|
-
@attributes = Chef::Node::Attribute.new(
|
990
|
-
{
|
991
|
-
"one" => "two",
|
992
|
-
"hut" => "three",
|
993
|
-
},
|
994
|
-
{
|
995
|
-
"one" => "four",
|
996
|
-
"snakes" => "on a plane",
|
997
|
-
},
|
998
|
-
{
|
999
|
-
"one" => "six",
|
1000
|
-
"snack" => "cookies",
|
1001
|
-
},
|
1002
|
-
{}
|
1003
|
-
)
|
1004
|
-
end
|
1005
|
-
|
1006
|
-
it "should respond to select" do
|
1007
|
-
expect(@attributes).to respond_to(:select)
|
1008
|
-
end
|
1009
|
-
|
1010
|
-
if RUBY_VERSION >= "1.8.7"
|
1011
|
-
it "should not raise a LocalJumpError if no block is given" do
|
1012
|
-
expect { @attributes.select }.not_to raise_error
|
1013
|
-
end
|
1014
|
-
else
|
1015
|
-
it "should raise a LocalJumpError if no block is given" do
|
1016
|
-
expect { @attributes.select }.to raise_error(LocalJumpError)
|
1017
|
-
end
|
1018
|
-
end
|
1019
|
-
|
1020
|
-
it "should return an empty hash/array (ruby-version-dependent) for a block containing nil" do
|
1021
|
-
expect(@attributes.select { nil }).to eq({}.select { nil })
|
1022
|
-
end
|
1023
|
-
|
1024
|
-
# sorted for spec clarity
|
1025
|
-
it "should return a new array of k,v pairs for which the block returns true" do
|
1026
|
-
expect(@attributes.select { true }.sort).to eq(
|
1027
|
-
[
|
1028
|
-
%w{hut three},
|
1029
|
-
%w{one six},
|
1030
|
-
%w{snack cookies},
|
1031
|
-
["snakes", "on a plane"],
|
1032
|
-
]
|
1033
|
-
)
|
1034
|
-
end
|
1035
|
-
end
|
1036
|
-
|
1037
|
-
describe "size" do
|
1038
|
-
before do
|
1039
|
-
@attributes = Chef::Node::Attribute.new(
|
1040
|
-
{
|
1041
|
-
"one" => "two",
|
1042
|
-
"hut" => "three",
|
1043
|
-
},
|
1044
|
-
{
|
1045
|
-
"one" => "four",
|
1046
|
-
"snakes" => "on a plane",
|
1047
|
-
},
|
1048
|
-
{
|
1049
|
-
"one" => "six",
|
1050
|
-
"snack" => "cookies",
|
1051
|
-
},
|
1052
|
-
{}
|
1053
|
-
)
|
1054
|
-
|
1055
|
-
@empty = Chef::Node::Attribute.new({}, {}, {}, {})
|
1056
|
-
end
|
1057
|
-
|
1058
|
-
it "should respond to size" do
|
1059
|
-
expect(@attributes).to respond_to(:size)
|
1060
|
-
end
|
1061
|
-
|
1062
|
-
it "should alias length to size" do
|
1063
|
-
expect(@attributes).to respond_to(:length)
|
1064
|
-
end
|
1065
|
-
|
1066
|
-
it "should return 0 for an empty attribute" do
|
1067
|
-
expect(@empty.size).to eq(0)
|
1068
|
-
end
|
1069
|
-
|
1070
|
-
it "should return the number of pairs" do
|
1071
|
-
expect(@attributes.size).to eq(4)
|
1072
|
-
end
|
1073
|
-
end
|
1074
|
-
|
1075
|
-
describe "kind_of?" do
|
1076
|
-
it "should falsely inform you that it is a Hash" do
|
1077
|
-
expect(@attributes).to be_a_kind_of(Hash)
|
1078
|
-
end
|
1079
|
-
|
1080
|
-
it "should falsely inform you that it is a Mash" do
|
1081
|
-
expect(@attributes).to be_a_kind_of(Mash)
|
1082
|
-
end
|
1083
|
-
|
1084
|
-
it "should inform you that it is a Chef::Node::Attribute" do
|
1085
|
-
expect(@attributes).to be_a_kind_of(Chef::Node::Attribute)
|
1086
|
-
end
|
1087
|
-
|
1088
|
-
it "should inform you that it is anything else" do
|
1089
|
-
expect(@attributes).not_to be_a_kind_of(Chef::Node)
|
1090
|
-
end
|
1091
|
-
end
|
1092
|
-
|
1093
|
-
describe "to_s" do
|
1094
|
-
it "should output simple attributes" do
|
1095
|
-
attributes = Chef::Node::Attribute.new(nil, nil, nil, nil)
|
1096
|
-
expect(attributes.to_s).to eq("{}")
|
1097
|
-
end
|
1098
|
-
|
1099
|
-
it "should output merged attributes" do
|
1100
|
-
default_hash = {
|
1101
|
-
"a" => 1,
|
1102
|
-
"b" => 2,
|
1103
|
-
}
|
1104
|
-
override_hash = {
|
1105
|
-
"b" => 3,
|
1106
|
-
"c" => 4,
|
1107
|
-
}
|
1108
|
-
attributes = Chef::Node::Attribute.new(nil, default_hash, override_hash, nil)
|
1109
|
-
expect(attributes.to_s).to eq('{"a"=>1, "b"=>3, "c"=>4}')
|
1110
|
-
end
|
1111
|
-
end
|
1112
|
-
|
1113
|
-
describe "inspect" do
|
1114
|
-
it "should be readable" do
|
1115
|
-
# NOTE: previous implementation hid the values, showing @automatic={...}
|
1116
|
-
# That is nice and compact, but hides a lot of info, which seems counter
|
1117
|
-
# to the point of calling #inspect...
|
1118
|
-
expect(@attributes.inspect).to match(/@automatic=\{.*\}/)
|
1119
|
-
expect(@attributes.inspect).to match(/@normal=\{.*\}/)
|
1120
|
-
end
|
1121
|
-
end
|
1122
|
-
|
1123
|
-
describe "when not mutated" do
|
1124
|
-
|
1125
|
-
it "does not reset the cache when dup'd [CHEF-3680]" do
|
1126
|
-
@attributes.default[:foo][:bar] = "set on original"
|
1127
|
-
subtree = @attributes[:foo]
|
1128
|
-
@attributes.default[:foo].dup[:bar] = "set on dup"
|
1129
|
-
expect(subtree[:bar]).to eq("set on original")
|
1130
|
-
end
|
1131
|
-
|
1132
|
-
end
|
1133
|
-
|
1134
|
-
describe "when setting a component attribute to a new value" do
|
1135
|
-
it "converts the input in to a VividMash tree (default)" do
|
1136
|
-
@attributes.default = {}
|
1137
|
-
@attributes.default["foo"] = "bar"
|
1138
|
-
expect(@attributes.merged_attributes[:foo]).to eq("bar")
|
1139
|
-
end
|
1140
|
-
|
1141
|
-
it "converts the input in to a VividMash tree (normal)" do
|
1142
|
-
@attributes.normal = {}
|
1143
|
-
@attributes.normal["foo"] = "bar"
|
1144
|
-
expect(@attributes.merged_attributes[:foo]).to eq("bar")
|
1145
|
-
end
|
1146
|
-
|
1147
|
-
it "converts the input in to a VividMash tree (override)" do
|
1148
|
-
@attributes.override = {}
|
1149
|
-
@attributes.override["foo"] = "bar"
|
1150
|
-
expect(@attributes.merged_attributes[:foo]).to eq("bar")
|
1151
|
-
end
|
1152
|
-
|
1153
|
-
it "converts the input in to a VividMash tree (automatic)" do
|
1154
|
-
@attributes.automatic = {}
|
1155
|
-
@attributes.automatic["foo"] = "bar"
|
1156
|
-
expect(@attributes.merged_attributes[:foo]).to eq("bar")
|
1157
|
-
end
|
1158
|
-
end
|
1159
|
-
|
1160
|
-
describe "when deep-merging between precedence levels" do
|
1161
|
-
it "correctly deep merges hashes and preserves the original contents" do
|
1162
|
-
@attributes.default = { "arglebargle" => { "foo" => "bar" } }
|
1163
|
-
@attributes.override = { "arglebargle" => { "fizz" => "buzz" } }
|
1164
|
-
expect(@attributes.merged_attributes[:arglebargle]).to eq({ "foo" => "bar", "fizz" => "buzz" })
|
1165
|
-
expect(@attributes.default[:arglebargle]).to eq({ "foo" => "bar" })
|
1166
|
-
expect(@attributes.override[:arglebargle]).to eq({ "fizz" => "buzz" })
|
1167
|
-
end
|
1168
|
-
|
1169
|
-
it "does not deep merge arrays, and preserves the original contents" do
|
1170
|
-
@attributes.default = { "arglebargle" => [ 1, 2, 3 ] }
|
1171
|
-
@attributes.override = { "arglebargle" => [ 4, 5, 6 ] }
|
1172
|
-
expect(@attributes.merged_attributes[:arglebargle]).to eq([ 4, 5, 6 ])
|
1173
|
-
expect(@attributes.default[:arglebargle]).to eq([ 1, 2, 3 ])
|
1174
|
-
expect(@attributes.override[:arglebargle]).to eq([ 4, 5, 6 ])
|
1175
|
-
end
|
1176
|
-
|
1177
|
-
it "correctly deep merges hashes and preserves the original contents when merging default and role_default" do
|
1178
|
-
@attributes.default = { "arglebargle" => { "foo" => "bar" } }
|
1179
|
-
@attributes.role_default = { "arglebargle" => { "fizz" => "buzz" } }
|
1180
|
-
expect(@attributes.merged_attributes[:arglebargle]).to eq({ "foo" => "bar", "fizz" => "buzz" })
|
1181
|
-
expect(@attributes.default[:arglebargle]).to eq({ "foo" => "bar" })
|
1182
|
-
expect(@attributes.role_default[:arglebargle]).to eq({ "fizz" => "buzz" })
|
1183
|
-
end
|
1184
|
-
|
1185
|
-
it "correctly deep merges arrays, and preserves the original contents when merging default and role_default" do
|
1186
|
-
@attributes.default = { "arglebargle" => [ 1, 2, 3 ] }
|
1187
|
-
@attributes.role_default = { "arglebargle" => [ 4, 5, 6 ] }
|
1188
|
-
expect(@attributes.merged_attributes[:arglebargle]).to eq([ 1, 2, 3, 4, 5, 6 ])
|
1189
|
-
expect(@attributes.default[:arglebargle]).to eq([ 1, 2, 3 ])
|
1190
|
-
expect(@attributes.role_default[:arglebargle]).to eq([ 4, 5, 6 ])
|
1191
|
-
end
|
1192
|
-
end
|
1193
|
-
|
1194
|
-
describe "when attemping to write without specifying precedence" do
|
1195
|
-
it "raises an error when using []=" do
|
1196
|
-
expect { @attributes[:new_key] = "new value" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
|
1197
|
-
end
|
1198
|
-
end
|
1199
|
-
|
1200
|
-
describe "deeply converting values" do
|
1201
|
-
it "converts values through an array" do
|
1202
|
-
@attributes.default[:foo] = [ { bar: true } ]
|
1203
|
-
expect(@attributes["foo"].class).to eql(Chef::Node::ImmutableArray)
|
1204
|
-
expect(@attributes["foo"][0].class).to eql(Chef::Node::ImmutableMash)
|
1205
|
-
expect(@attributes["foo"][0]["bar"]).to be true
|
1206
|
-
end
|
1207
|
-
|
1208
|
-
it "converts values through nested arrays" do
|
1209
|
-
@attributes.default[:foo] = [ [ { bar: true } ] ]
|
1210
|
-
expect(@attributes["foo"].class).to eql(Chef::Node::ImmutableArray)
|
1211
|
-
expect(@attributes["foo"][0].class).to eql(Chef::Node::ImmutableArray)
|
1212
|
-
expect(@attributes["foo"][0][0].class).to eql(Chef::Node::ImmutableMash)
|
1213
|
-
expect(@attributes["foo"][0][0]["bar"]).to be true
|
1214
|
-
end
|
1215
|
-
|
1216
|
-
it "converts values through nested hashes" do
|
1217
|
-
@attributes.default[:foo] = { baz: { bar: true } }
|
1218
|
-
expect(@attributes["foo"].class).to eql(Chef::Node::ImmutableMash)
|
1219
|
-
expect(@attributes["foo"]["baz"].class).to eql(Chef::Node::ImmutableMash)
|
1220
|
-
expect(@attributes["foo"]["baz"]["bar"]).to be true
|
1221
|
-
end
|
1222
|
-
end
|
1223
|
-
|
1224
|
-
describe "node state" do
|
1225
|
-
it "sets __root__ correctly" do
|
1226
|
-
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1227
|
-
expect(@attributes["foo"].__root__).to eql(@attributes)
|
1228
|
-
expect(@attributes["foo"]["bar"].__root__).to eql(@attributes)
|
1229
|
-
expect(@attributes.default["foo"].__root__).to eql(@attributes)
|
1230
|
-
expect(@attributes.default["foo"]["bar"].__root__).to eql(@attributes)
|
1231
|
-
end
|
1232
|
-
|
1233
|
-
it "sets __node__ correctly" do
|
1234
|
-
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1235
|
-
expect(@attributes["foo"].__node__).to eql(node)
|
1236
|
-
expect(@attributes["foo"]["bar"].__node__).to eql(node)
|
1237
|
-
expect(@attributes.default["foo"].__node__).to eql(node)
|
1238
|
-
expect(@attributes.default["foo"]["bar"].__node__).to eql(node)
|
1239
|
-
end
|
1240
|
-
|
1241
|
-
it "sets __path__ correctly" do
|
1242
|
-
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1243
|
-
expect(@attributes["foo"].__path__).to eql(["foo"])
|
1244
|
-
expect(@attributes["foo"]["bar"].__path__).to eql(%w{foo bar})
|
1245
|
-
expect(@attributes.default["foo"].__path__).to eql(["foo"])
|
1246
|
-
expect(@attributes.default["foo"]["bar"].__path__).to eql(%w{foo bar})
|
1247
|
-
end
|
1248
|
-
|
1249
|
-
it "sets __precedence__ correctly" do
|
1250
|
-
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1251
|
-
expect(@attributes["foo"].__precedence__).to eql(:merged)
|
1252
|
-
expect(@attributes["foo"]["bar"].__precedence__).to eql(:merged)
|
1253
|
-
expect(@attributes.default["foo"].__precedence__).to eql(:default)
|
1254
|
-
expect(@attributes.default["foo"]["bar"].__precedence__).to eql(:default)
|
1255
|
-
end
|
1256
|
-
|
1257
|
-
it "notifies on attribute changes" do
|
1258
|
-
expect(events).to receive(:attribute_changed).with(:default, ["foo"], {})
|
1259
|
-
expect(events).to receive(:attribute_changed).with(:default, %w{foo bar}, {})
|
1260
|
-
expect(events).to receive(:attribute_changed).with(:default, %w{foo bar baz}, "quux")
|
1261
|
-
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1262
|
-
end
|
1263
|
-
end
|
1264
|
-
|
1265
|
-
describe "frozen immutable strings" do
|
1266
|
-
it "strings in hashes should be frozen" do
|
1267
|
-
@attributes.default["foo"]["bar"]["baz"] = "fizz"
|
1268
|
-
expect { @attributes["foo"]["bar"]["baz"] << "buzz" }.to raise_error(RuntimeError, "can't modify frozen String")
|
1269
|
-
end
|
1270
|
-
|
1271
|
-
it "strings in arrays should be frozen" do
|
1272
|
-
@attributes.default["foo"]["bar"] = [ "fizz" ]
|
1273
|
-
expect { @attributes["foo"]["bar"][0] << "buzz" }.to raise_error(RuntimeError, "can't modify frozen String")
|
1274
|
-
end
|
1275
|
-
end
|
1276
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Adam Jacob (<adam@chef.io>)
|
3
|
+
# Author:: AJ Christensen (<aj@chef.io>)
|
4
|
+
# Copyright:: Copyright 2008-2018, Chef Software 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/node/attribute"
|
22
|
+
|
23
|
+
describe Chef::Node::Attribute do
|
24
|
+
let(:events) { instance_double(Chef::EventDispatch::Dispatcher) }
|
25
|
+
let(:run_context) { instance_double(Chef::RunContext, events: events) }
|
26
|
+
let(:node) { instance_double(Chef::Node, run_context: run_context) }
|
27
|
+
before(:each) do
|
28
|
+
allow(events).to receive(:attribute_changed)
|
29
|
+
@attribute_hash =
|
30
|
+
{ "dmi" => {},
|
31
|
+
"command" => { "ps" => "ps -ef" },
|
32
|
+
"platform_version" => "10.5.7",
|
33
|
+
"platform" => "mac_os_x",
|
34
|
+
"ipaddress" => "192.168.0.117",
|
35
|
+
"network" => { "default_interface" => "en1",
|
36
|
+
"interfaces" => { "vmnet1" => { "flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
37
|
+
"number" => "1",
|
38
|
+
"addresses" => { "00:50:56:c0:00:01" => { "family" => "lladdr" },
|
39
|
+
"192.168.110.1" => { "broadcast" => "192.168.110.255",
|
40
|
+
"netmask" => "255.255.255.0",
|
41
|
+
"family" => "inet" } },
|
42
|
+
"mtu" => "1500",
|
43
|
+
"type" => "vmnet",
|
44
|
+
"arp" => { "192.168.110.255" => "ff:ff:ff:ff:ff:ff" },
|
45
|
+
"encapsulation" => "Ethernet" },
|
46
|
+
"stf0" => { "flags" => [],
|
47
|
+
"number" => "0",
|
48
|
+
"addresses" => {},
|
49
|
+
"mtu" => "1280",
|
50
|
+
"type" => "stf",
|
51
|
+
"encapsulation" => "6to4" },
|
52
|
+
"lo0" => { "flags" => %w{UP LOOPBACK RUNNING MULTICAST},
|
53
|
+
"number" => "0",
|
54
|
+
"addresses" => { "::1" => { "scope" => "Node", "prefixlen" => "128", "family" => "inet6" },
|
55
|
+
"127.0.0.1" => { "netmask" => "255.0.0.0", "family" => "inet" },
|
56
|
+
"fe80::1" => { "scope" => "Link", "prefixlen" => "64", "family" => "inet6" } },
|
57
|
+
"mtu" => "16384",
|
58
|
+
"type" => "lo",
|
59
|
+
"encapsulation" => "Loopback" },
|
60
|
+
"gif0" => { "flags" => %w{POINTOPOINT MULTICAST},
|
61
|
+
"number" => "0",
|
62
|
+
"addresses" => {},
|
63
|
+
"mtu" => "1280",
|
64
|
+
"type" => "gif",
|
65
|
+
"encapsulation" => "IPIP" },
|
66
|
+
"vmnet8" => { "flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
67
|
+
"number" => "8",
|
68
|
+
"addresses" => { "192.168.4.1" => { "broadcast" => "192.168.4.255",
|
69
|
+
"netmask" => "255.255.255.0",
|
70
|
+
"family" => "inet" },
|
71
|
+
"00:50:56:c0:00:08" => { "family" => "lladdr" } },
|
72
|
+
"mtu" => "1500",
|
73
|
+
"type" => "vmnet",
|
74
|
+
"arp" => { "192.168.4.255" => "ff:ff:ff:ff:ff:ff" },
|
75
|
+
"encapsulation" => "Ethernet" },
|
76
|
+
"en0" => { "status" => "inactive",
|
77
|
+
"flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
78
|
+
"number" => "0",
|
79
|
+
"addresses" => { "00:23:32:b0:32:f2" => { "family" => "lladdr" } },
|
80
|
+
"mtu" => "1500",
|
81
|
+
"media" => { "supported" => { "autoselect" => { "options" => [] },
|
82
|
+
"none" => { "options" => [] },
|
83
|
+
"1000baseT" => { "options" => ["full-duplex", "flow-control", "hw-loopback"] },
|
84
|
+
"10baseT/UTP" => { "options" => ["half-duplex", "full-duplex", "flow-control", "hw-loopback"] },
|
85
|
+
"100baseTX" => { "options" => ["half-duplex", "full-duplex", "flow-control", "hw-loopback"] } },
|
86
|
+
"selected" => { "autoselect" => { "options" => [] } } },
|
87
|
+
"type" => "en",
|
88
|
+
"encapsulation" => "Ethernet" },
|
89
|
+
"en1" => { "status" => "active",
|
90
|
+
"flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
91
|
+
"number" => "1",
|
92
|
+
"addresses" => { "fe80::223:6cff:fe7f:676c" => { "scope" => "Link", "prefixlen" => "64", "family" => "inet6" },
|
93
|
+
"00:23:6c:7f:67:6c" => { "family" => "lladdr" },
|
94
|
+
"192.168.0.117" => { "broadcast" => "192.168.0.255",
|
95
|
+
"netmask" => "255.255.255.0",
|
96
|
+
"family" => "inet" } },
|
97
|
+
"mtu" => "1500",
|
98
|
+
"media" => { "supported" => { "autoselect" => { "options" => [] } },
|
99
|
+
"selected" => { "autoselect" => { "options" => [] } } },
|
100
|
+
"type" => "en",
|
101
|
+
"arp" => { "192.168.0.72" => "0:f:ea:39:fa:d5",
|
102
|
+
"192.168.0.1" => "0:1c:fb:fc:6f:20",
|
103
|
+
"192.168.0.255" => "ff:ff:ff:ff:ff:ff",
|
104
|
+
"192.168.0.3" => "0:1f:33:ea:26:9b",
|
105
|
+
"192.168.0.77" => "0:23:12:70:f8:cf",
|
106
|
+
"192.168.0.152" => "0:26:8:7d:2:4c" },
|
107
|
+
"encapsulation" => "Ethernet" },
|
108
|
+
"en2" => { "status" => "active",
|
109
|
+
"flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
110
|
+
"number" => "2",
|
111
|
+
"addresses" => { "169.254.206.152" => { "broadcast" => "169.254.255.255",
|
112
|
+
"netmask" => "255.255.0.0",
|
113
|
+
"family" => "inet" },
|
114
|
+
"00:1c:42:00:00:01" => { "family" => "lladdr" },
|
115
|
+
"fe80::21c:42ff:fe00:1" => { "scope" => "Link", "prefixlen" => "64", "family" => "inet6" } },
|
116
|
+
"mtu" => "1500",
|
117
|
+
"media" => { "supported" => { "autoselect" => { "options" => [] } },
|
118
|
+
"selected" => { "autoselect" => { "options" => [] } } },
|
119
|
+
"type" => "en",
|
120
|
+
"encapsulation" => "Ethernet" },
|
121
|
+
"fw0" => { "status" => "inactive",
|
122
|
+
"flags" => %w{BROADCAST SIMPLEX MULTICAST},
|
123
|
+
"number" => "0",
|
124
|
+
"addresses" => { "00:23:32:ff:fe:b0:32:f2" => { "family" => "lladdr" } },
|
125
|
+
"mtu" => "4078",
|
126
|
+
"media" => { "supported" => { "autoselect" => { "options" => ["full-duplex"] } },
|
127
|
+
"selected" => { "autoselect" => { "options" => ["full-duplex"] } } },
|
128
|
+
"type" => "fw",
|
129
|
+
"encapsulation" => "1394" },
|
130
|
+
"en3" => { "status" => "active",
|
131
|
+
"flags" => %w{UP BROADCAST SMART RUNNING SIMPLEX MULTICAST},
|
132
|
+
"number" => "3",
|
133
|
+
"addresses" => { "169.254.206.152" => { "broadcast" => "169.254.255.255",
|
134
|
+
"netmask" => "255.255.0.0",
|
135
|
+
"family" => "inet" },
|
136
|
+
"00:1c:42:00:00:00" => { "family" => "lladdr" },
|
137
|
+
"fe80::21c:42ff:fe00:0" => { "scope" => "Link", "prefixlen" => "64", "family" => "inet6" } },
|
138
|
+
"mtu" => "1500",
|
139
|
+
"media" => { "supported" => { "autoselect" => { "options" => [] } },
|
140
|
+
"selected" => { "autoselect" => { "options" => [] } } },
|
141
|
+
"type" => "en",
|
142
|
+
"encapsulation" => "Ethernet" } } },
|
143
|
+
"fqdn" => "latte.local",
|
144
|
+
"ohai_time" => 1249065590.90391,
|
145
|
+
"domain" => "local",
|
146
|
+
"os" => "darwin",
|
147
|
+
"platform_build" => "9J61",
|
148
|
+
"os_version" => "9.7.0",
|
149
|
+
"hostname" => "latte",
|
150
|
+
"macaddress" => "00:23:6c:7f:67:6c",
|
151
|
+
"music" => { "jimmy_eat_world" => "nice", "apophis" => false },
|
152
|
+
}
|
153
|
+
@default_hash = {
|
154
|
+
"domain" => "opscode.com",
|
155
|
+
"hot" => { "day" => "saturday" },
|
156
|
+
"music" => {
|
157
|
+
"jimmy_eat_world" => "is fun!",
|
158
|
+
"mastodon" => "rocks",
|
159
|
+
"mars_volta" => "is loud and nutty",
|
160
|
+
"deeper" => { "gates_of_ishtar" => nil },
|
161
|
+
"this" => { "apparatus" => { "must" => "be unearthed" } },
|
162
|
+
},
|
163
|
+
}
|
164
|
+
@override_hash = {
|
165
|
+
"macaddress" => "00:00:00:00:00:00",
|
166
|
+
"hot" => { "day" => "sunday" },
|
167
|
+
"fire" => "still burn",
|
168
|
+
"music" => {
|
169
|
+
"mars_volta" => "cicatriz",
|
170
|
+
},
|
171
|
+
}
|
172
|
+
@automatic_hash = { "week" => "friday" }
|
173
|
+
@attributes = Chef::Node::Attribute.new(@attribute_hash, @default_hash, @override_hash, @automatic_hash, node)
|
174
|
+
end
|
175
|
+
|
176
|
+
describe "initialize" do
|
177
|
+
it "should return a Chef::Node::Attribute" do
|
178
|
+
expect(@attributes).to be_a_kind_of(Chef::Node::Attribute)
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should take an Automatioc, Normal, Default and Override hash" do
|
182
|
+
expect { Chef::Node::Attribute.new({}, {}, {}, {}) }.not_to raise_error
|
183
|
+
end
|
184
|
+
|
185
|
+
[ :normal, :default, :override, :automatic ].each do |accessor|
|
186
|
+
it "should set #{accessor}" do
|
187
|
+
na = Chef::Node::Attribute.new({ normal: true }, { default: true }, { override: true }, { automatic: true })
|
188
|
+
expect(na.send(accessor)).to eq({ accessor.to_s => true })
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should be enumerable" do
|
193
|
+
expect(@attributes).to be_is_a(Enumerable)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe "when printing attribute components" do
|
198
|
+
|
199
|
+
it "does not cause a type error" do
|
200
|
+
# See CHEF-3799; IO#puts implicitly calls #to_ary on its argument. This
|
201
|
+
# is expected to raise a NoMethodError or return an Array. `to_ary` is
|
202
|
+
# the "strict" conversion method that should only be implemented by
|
203
|
+
# things that are truly Array-like, so NoMethodError is the right choice.
|
204
|
+
# (cf. there is no Hash#to_ary).
|
205
|
+
expect { @attributes.default.to_ary }.to raise_error(NoMethodError)
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
describe "when debugging attributes" do
|
211
|
+
it "gives the value at each level of precedence for a path spec" do
|
212
|
+
@attributes.default[:foo][:bar] = "default"
|
213
|
+
@attributes.env_default[:foo][:bar] = "env_default"
|
214
|
+
@attributes.role_default[:foo][:bar] = "role_default"
|
215
|
+
@attributes.force_default[:foo][:bar] = "force_default"
|
216
|
+
@attributes.normal[:foo][:bar] = "normal"
|
217
|
+
@attributes.override[:foo][:bar] = "override"
|
218
|
+
@attributes.role_override[:foo][:bar] = "role_override"
|
219
|
+
@attributes.env_override[:foo][:bar] = "env_override"
|
220
|
+
@attributes.force_override[:foo][:bar] = "force_override"
|
221
|
+
@attributes.automatic[:foo][:bar] = "automatic"
|
222
|
+
|
223
|
+
expected = [
|
224
|
+
%w{default default},
|
225
|
+
%w{env_default env_default},
|
226
|
+
%w{role_default role_default},
|
227
|
+
%w{force_default force_default},
|
228
|
+
%w{normal normal},
|
229
|
+
%w{override override},
|
230
|
+
%w{role_override role_override},
|
231
|
+
%w{env_override env_override},
|
232
|
+
%w{force_override force_override},
|
233
|
+
%w{automatic automatic},
|
234
|
+
]
|
235
|
+
expect(@attributes.debug_value(:foo, :bar)).to eq(expected)
|
236
|
+
end
|
237
|
+
|
238
|
+
it "works through arrays" do
|
239
|
+
@attributes.default["foo"] = [ { "bar" => "baz" } ]
|
240
|
+
|
241
|
+
expect(@attributes.debug_value(:foo, 0)).to eq(
|
242
|
+
[
|
243
|
+
["default", { "bar" => "baz" }],
|
244
|
+
["env_default", :not_present],
|
245
|
+
["role_default", :not_present],
|
246
|
+
["force_default", :not_present],
|
247
|
+
["normal", :not_present],
|
248
|
+
["override", :not_present],
|
249
|
+
["role_override", :not_present],
|
250
|
+
["env_override", :not_present],
|
251
|
+
["force_override", :not_present],
|
252
|
+
["automatic", :not_present],
|
253
|
+
]
|
254
|
+
)
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
describe "when fetching values based on precedence" do
|
259
|
+
before do
|
260
|
+
@attributes.default["default"] = "cookbook default"
|
261
|
+
@attributes.override["override"] = "cookbook override"
|
262
|
+
end
|
263
|
+
|
264
|
+
it "prefers 'forced default' over any other default" do
|
265
|
+
@attributes.force_default["default"] = "force default"
|
266
|
+
@attributes.role_default["default"] = "role default"
|
267
|
+
@attributes.env_default["default"] = "environment default"
|
268
|
+
expect(@attributes["default"]).to eq("force default")
|
269
|
+
end
|
270
|
+
|
271
|
+
it "prefers role_default over environment or cookbook default" do
|
272
|
+
@attributes.role_default["default"] = "role default"
|
273
|
+
@attributes.env_default["default"] = "environment default"
|
274
|
+
expect(@attributes["default"]).to eq("role default")
|
275
|
+
end
|
276
|
+
|
277
|
+
it "prefers environment default over cookbook default" do
|
278
|
+
@attributes.env_default["default"] = "environment default"
|
279
|
+
expect(@attributes["default"]).to eq("environment default")
|
280
|
+
end
|
281
|
+
|
282
|
+
it "returns the cookbook default when no other default values are present" do
|
283
|
+
expect(@attributes["default"]).to eq("cookbook default")
|
284
|
+
end
|
285
|
+
|
286
|
+
it "prefers 'forced overrides' over role or cookbook overrides" do
|
287
|
+
@attributes.force_override["override"] = "force override"
|
288
|
+
@attributes.env_override["override"] = "environment override"
|
289
|
+
@attributes.role_override["override"] = "role override"
|
290
|
+
expect(@attributes["override"]).to eq("force override")
|
291
|
+
end
|
292
|
+
|
293
|
+
it "prefers environment overrides over role or cookbook overrides" do
|
294
|
+
@attributes.env_override["override"] = "environment override"
|
295
|
+
@attributes.role_override["override"] = "role override"
|
296
|
+
expect(@attributes["override"]).to eq("environment override")
|
297
|
+
end
|
298
|
+
|
299
|
+
it "prefers role overrides over cookbook overrides" do
|
300
|
+
@attributes.role_override["override"] = "role override"
|
301
|
+
expect(@attributes["override"]).to eq("role override")
|
302
|
+
end
|
303
|
+
|
304
|
+
it "returns cookbook overrides when no other overrides are present" do
|
305
|
+
expect(@attributes["override"]).to eq("cookbook override")
|
306
|
+
end
|
307
|
+
|
308
|
+
it "merges arrays within the default precedence" do
|
309
|
+
@attributes.role_default["array"] = %w{role}
|
310
|
+
@attributes.env_default["array"] = %w{env}
|
311
|
+
expect(@attributes["array"]).to eq(%w{env role})
|
312
|
+
end
|
313
|
+
|
314
|
+
it "merges arrays within the override precedence" do
|
315
|
+
@attributes.role_override["array"] = %w{role}
|
316
|
+
@attributes.env_override["array"] = %w{env}
|
317
|
+
expect(@attributes["array"]).to eq(%w{role env})
|
318
|
+
end
|
319
|
+
|
320
|
+
it "does not merge arrays between default and normal" do
|
321
|
+
@attributes.role_default["array"] = %w{role}
|
322
|
+
@attributes.normal["array"] = %w{normal}
|
323
|
+
expect(@attributes["array"]).to eq(%w{normal})
|
324
|
+
end
|
325
|
+
|
326
|
+
it "does not merge arrays between normal and override" do
|
327
|
+
@attributes.normal["array"] = %w{normal}
|
328
|
+
@attributes.role_override["array"] = %w{role}
|
329
|
+
expect(@attributes["array"]).to eq(%w{role})
|
330
|
+
end
|
331
|
+
|
332
|
+
it "merges nested hashes between precedence levels" do
|
333
|
+
@attributes = Chef::Node::Attribute.new({}, {}, {}, {})
|
334
|
+
@attributes.env_default = { "a" => { "b" => { "default" => "default" } } }
|
335
|
+
@attributes.normal = { "a" => { "b" => { "normal" => "normal" } } }
|
336
|
+
@attributes.override = { "a" => { "override" => "role" } }
|
337
|
+
@attributes.automatic = { "a" => { "automatic" => "auto" } }
|
338
|
+
expect(@attributes["a"]).to eq({ "b" => { "default" => "default", "normal" => "normal" },
|
339
|
+
"override" => "role",
|
340
|
+
"automatic" => "auto" })
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
describe "when reading combined default or override values" do
|
345
|
+
before do
|
346
|
+
@attributes.default["cd"] = "cookbook default"
|
347
|
+
@attributes.role_default["rd"] = "role default"
|
348
|
+
@attributes.env_default["ed"] = "env default"
|
349
|
+
@attributes.default!["fd"] = "force default"
|
350
|
+
@attributes.override["co"] = "cookbook override"
|
351
|
+
@attributes.role_override["ro"] = "role override"
|
352
|
+
@attributes.env_override["eo"] = "env override"
|
353
|
+
@attributes.override!["fo"] = "force override"
|
354
|
+
end
|
355
|
+
|
356
|
+
it "merges all types of overrides into a combined override" do
|
357
|
+
expect(@attributes.combined_override["co"]).to eq("cookbook override")
|
358
|
+
expect(@attributes.combined_override["ro"]).to eq("role override")
|
359
|
+
expect(@attributes.combined_override["eo"]).to eq("env override")
|
360
|
+
expect(@attributes.combined_override["fo"]).to eq("force override")
|
361
|
+
end
|
362
|
+
|
363
|
+
it "merges all types of defaults into a combined default" do
|
364
|
+
expect(@attributes.combined_default["cd"]).to eq("cookbook default")
|
365
|
+
expect(@attributes.combined_default["rd"]).to eq("role default")
|
366
|
+
expect(@attributes.combined_default["ed"]).to eq("env default")
|
367
|
+
expect(@attributes.combined_default["fd"]).to eq("force default")
|
368
|
+
end
|
369
|
+
|
370
|
+
end
|
371
|
+
|
372
|
+
describe "[]" do
|
373
|
+
it "should return override data if it exists" do
|
374
|
+
expect(@attributes["macaddress"]).to eq("00:00:00:00:00:00")
|
375
|
+
end
|
376
|
+
|
377
|
+
it "should return attribute data if it is not overridden" do
|
378
|
+
expect(@attributes["platform"]).to eq("mac_os_x")
|
379
|
+
end
|
380
|
+
|
381
|
+
it "should return data that doesn't have corresponding keys in every hash" do
|
382
|
+
expect(@attributes["command"]["ps"]).to eq("ps -ef")
|
383
|
+
end
|
384
|
+
|
385
|
+
it "should return default data if it is not overriden or in attribute data" do
|
386
|
+
expect(@attributes["music"]["mastodon"]).to eq("rocks")
|
387
|
+
end
|
388
|
+
|
389
|
+
it "should prefer the override data over an available default" do
|
390
|
+
expect(@attributes["music"]["mars_volta"]).to eq("cicatriz")
|
391
|
+
end
|
392
|
+
|
393
|
+
it "should prefer the attribute data over an available default" do
|
394
|
+
expect(@attributes["music"]["jimmy_eat_world"]).to eq("nice")
|
395
|
+
end
|
396
|
+
|
397
|
+
it "should prefer override data over default data if there is no attribute data" do
|
398
|
+
expect(@attributes["hot"]["day"]).to eq("sunday")
|
399
|
+
end
|
400
|
+
|
401
|
+
it "should return the merged hash if all three have values" do
|
402
|
+
result = @attributes["music"]
|
403
|
+
expect(result["mars_volta"]).to eq("cicatriz")
|
404
|
+
expect(result["jimmy_eat_world"]).to eq("nice")
|
405
|
+
expect(result["mastodon"]).to eq("rocks")
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
409
|
+
describe "[]=" do
|
410
|
+
it "should error out when the type of attribute to set has not been specified" do
|
411
|
+
@attributes.normal["the_ghost"] = {}
|
412
|
+
expect { @attributes["the_ghost"]["exterminate"] = false }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
|
413
|
+
end
|
414
|
+
|
415
|
+
it "should let you set an attribute value when another hash has an intermediate value" do
|
416
|
+
@attributes.normal["the_ghost"] = { "exterminate" => "the future" }
|
417
|
+
expect { @attributes.normal["the_ghost"]["eviscerate"]["tomorrow"] = false }.not_to raise_error
|
418
|
+
end
|
419
|
+
|
420
|
+
it "should set the attribute value" do
|
421
|
+
@attributes.normal["longboard"] = "surfing"
|
422
|
+
expect(@attributes.normal["longboard"]).to eq("surfing")
|
423
|
+
expect(@attributes.normal["longboard"]).to eq("surfing")
|
424
|
+
end
|
425
|
+
|
426
|
+
it "should set deeply nested attribute values when a precedence level is specified" do
|
427
|
+
@attributes.normal["deftones"]["hunters"]["nap"] = "surfing"
|
428
|
+
expect(@attributes.normal["deftones"]["hunters"]["nap"]).to eq("surfing")
|
429
|
+
end
|
430
|
+
|
431
|
+
it "should die if you try and do nested attributes that do not exist without read vivification" do
|
432
|
+
expect { @attributes["foo"]["bar"] = :baz }.to raise_error(NoMethodError)
|
433
|
+
end
|
434
|
+
|
435
|
+
it "should let you set attributes manually without vivification" do
|
436
|
+
@attributes.normal["foo"] = Mash.new
|
437
|
+
@attributes.normal["foo"]["bar"] = :baz
|
438
|
+
expect(@attributes.normal["foo"]["bar"]).to eq(:baz)
|
439
|
+
end
|
440
|
+
|
441
|
+
it "does not support ||= when setting" do
|
442
|
+
# This is a limitation of auto-vivification.
|
443
|
+
# Users who need this behavior can use set_unless and friends
|
444
|
+
@attributes.normal["foo"] = Mash.new
|
445
|
+
@attributes.normal["foo"]["bar"] ||= "stop the world"
|
446
|
+
expect(@attributes.normal["foo"]["bar"]).to eq({})
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
describe "to_hash" do
|
451
|
+
it "should convert to a hash" do
|
452
|
+
expect(@attributes.to_hash.class).to eq(Hash)
|
453
|
+
end
|
454
|
+
|
455
|
+
it "should convert to a hash based on current state" do
|
456
|
+
hash = @attributes["hot"].to_hash
|
457
|
+
expect(hash.class).to eq(Hash)
|
458
|
+
expect(hash["day"]).to eq("sunday")
|
459
|
+
end
|
460
|
+
|
461
|
+
it "should create a deep copy of the node attribute" do
|
462
|
+
@attributes.default["foo"]["bar"]["baz"] = "fizz"
|
463
|
+
hash = @attributes["foo"].to_hash
|
464
|
+
expect(hash).to eql({ "bar" => { "baz" => "fizz" } })
|
465
|
+
hash["bar"]["baz"] = "buzz"
|
466
|
+
expect(hash).to eql({ "bar" => { "baz" => "buzz" } })
|
467
|
+
expect(@attributes.default["foo"]).to eql({ "bar" => { "baz" => "fizz" } })
|
468
|
+
end
|
469
|
+
|
470
|
+
it "should create a deep copy of arrays in the node attribute" do
|
471
|
+
@attributes.default["foo"]["bar"] = ["fizz"]
|
472
|
+
hash = @attributes["foo"].to_hash
|
473
|
+
expect(hash).to eql({ "bar" => [ "fizz" ] })
|
474
|
+
hash["bar"].push("buzz")
|
475
|
+
expect(hash).to eql({ "bar" => %w{fizz buzz} })
|
476
|
+
expect(@attributes.default["foo"]).to eql({ "bar" => [ "fizz" ] })
|
477
|
+
end
|
478
|
+
|
479
|
+
it "mutating strings should not mutate the attributes in a hash" do
|
480
|
+
@attributes.default["foo"]["bar"]["baz"] = "fizz"
|
481
|
+
hash = @attributes["foo"].to_hash
|
482
|
+
expect(hash).to eql({ "bar" => { "baz" => "fizz" } })
|
483
|
+
hash["bar"]["baz"] << "buzz"
|
484
|
+
expect(hash).to eql({ "bar" => { "baz" => "fizzbuzz" } })
|
485
|
+
expect(@attributes.default["foo"]).to eql({ "bar" => { "baz" => "fizz" } })
|
486
|
+
end
|
487
|
+
|
488
|
+
it "mutating array elements should not mutate the attributes" do
|
489
|
+
@attributes.default["foo"]["bar"] = [ "fizz" ]
|
490
|
+
hash = @attributes["foo"].to_hash
|
491
|
+
expect(hash).to eql({ "bar" => [ "fizz" ] })
|
492
|
+
hash["bar"][0] << "buzz"
|
493
|
+
expect(hash).to eql({ "bar" => [ "fizzbuzz" ] })
|
494
|
+
expect(@attributes.default["foo"]).to eql({ "bar" => [ "fizz" ] })
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
498
|
+
describe "dup" do
|
499
|
+
it "array can be duped even if some elements can't" do
|
500
|
+
@attributes.default[:foo] = %w{foo bar baz} + Array(1..3) + [nil, true, false, [ "el", 0, nil ] ]
|
501
|
+
@attributes.default[:foo].dup
|
502
|
+
end
|
503
|
+
|
504
|
+
it "mutating strings should not mutate the attributes in a hash" do
|
505
|
+
@attributes.default["foo"]["bar"]["baz"] = "fizz"
|
506
|
+
hash = @attributes["foo"].dup
|
507
|
+
expect(hash).to eql({ "bar" => { "baz" => "fizz" } })
|
508
|
+
hash["bar"]["baz"] << "buzz"
|
509
|
+
expect(hash).to eql({ "bar" => { "baz" => "fizzbuzz" } })
|
510
|
+
expect(@attributes.default["foo"]).to eql({ "bar" => { "baz" => "fizz" } })
|
511
|
+
end
|
512
|
+
|
513
|
+
it "mutating array elements should not mutate the attributes" do
|
514
|
+
@attributes.default["foo"]["bar"] = [ "fizz" ]
|
515
|
+
hash = @attributes["foo"].dup
|
516
|
+
expect(hash).to eql({ "bar" => [ "fizz" ] })
|
517
|
+
hash["bar"][0] << "buzz"
|
518
|
+
expect(hash).to eql({ "bar" => [ "fizzbuzz" ] })
|
519
|
+
expect(@attributes.default["foo"]).to eql({ "bar" => [ "fizz" ] })
|
520
|
+
end
|
521
|
+
end
|
522
|
+
|
523
|
+
describe "has_key?" do
|
524
|
+
it "should return true if an attribute exists" do
|
525
|
+
expect(@attributes.key?("music")).to eq(true)
|
526
|
+
end
|
527
|
+
|
528
|
+
it "should return false if an attribute does not exist" do
|
529
|
+
expect(@attributes.key?("ninja")).to eq(false)
|
530
|
+
end
|
531
|
+
|
532
|
+
it "should return false if an attribute does not exist using dot notation" do
|
533
|
+
expect(@attributes.key?("does_not_exist_at_all")).to eq(false)
|
534
|
+
end
|
535
|
+
|
536
|
+
it "should return true if an attribute exists but is set to false" do
|
537
|
+
@attributes.key?("music")
|
538
|
+
expect(@attributes["music"].key?("apophis")).to eq(true)
|
539
|
+
end
|
540
|
+
|
541
|
+
it "does not find keys above the current nesting level" do
|
542
|
+
expect(@attributes["music"]["this"]["apparatus"]).not_to have_key("this")
|
543
|
+
end
|
544
|
+
|
545
|
+
it "does not find keys below the current nesting level" do
|
546
|
+
expect(@attributes["music"]["this"]).not_to have_key("must")
|
547
|
+
end
|
548
|
+
|
549
|
+
[:include?, :key?, :member?].each do |method|
|
550
|
+
it "should alias the method #{method} to itself" do
|
551
|
+
expect(@attributes).to respond_to(method)
|
552
|
+
end
|
553
|
+
|
554
|
+
it "#{method} should behave like has_key?" do
|
555
|
+
expect(@attributes.send(method, "music")).to eq(true)
|
556
|
+
end
|
557
|
+
end
|
558
|
+
end
|
559
|
+
|
560
|
+
describe "attribute?" do
|
561
|
+
it "should return true if an attribute exists" do
|
562
|
+
expect(@attributes.attribute?("music")).to eq(true)
|
563
|
+
end
|
564
|
+
|
565
|
+
it "should return false if an attribute does not exist" do
|
566
|
+
expect(@attributes.attribute?("ninja")).to eq(false)
|
567
|
+
end
|
568
|
+
|
569
|
+
end
|
570
|
+
|
571
|
+
describe "keys" do
|
572
|
+
before(:each) do
|
573
|
+
@attributes = Chef::Node::Attribute.new(
|
574
|
+
{
|
575
|
+
"one" => { "two" => "three" },
|
576
|
+
"hut" => { "two" => "three" },
|
577
|
+
"place" => {},
|
578
|
+
},
|
579
|
+
{
|
580
|
+
"one" => { "four" => "five" },
|
581
|
+
"snakes" => "on a plane",
|
582
|
+
},
|
583
|
+
{
|
584
|
+
"one" => { "six" => "seven" },
|
585
|
+
"snack" => "cookies",
|
586
|
+
},
|
587
|
+
{}
|
588
|
+
)
|
589
|
+
end
|
590
|
+
|
591
|
+
it "should yield each top level key" do
|
592
|
+
collect = Array.new
|
593
|
+
@attributes.each_key do |k|
|
594
|
+
collect << k
|
595
|
+
end
|
596
|
+
expect(collect.include?("one")).to eq(true)
|
597
|
+
expect(collect.include?("hut")).to eq(true)
|
598
|
+
expect(collect.include?("snakes")).to eq(true)
|
599
|
+
expect(collect.include?("snack")).to eq(true)
|
600
|
+
expect(collect.include?("place")).to eq(true)
|
601
|
+
expect(collect.length).to eq(5)
|
602
|
+
end
|
603
|
+
|
604
|
+
it "should yield lower if we go deeper" do
|
605
|
+
collect = Array.new
|
606
|
+
@attributes["one"].each_key do |k|
|
607
|
+
collect << k
|
608
|
+
end
|
609
|
+
expect(collect.include?("two")).to eq(true)
|
610
|
+
expect(collect.include?("four")).to eq(true)
|
611
|
+
expect(collect.include?("six")).to eq(true)
|
612
|
+
expect(collect.length).to eq(3)
|
613
|
+
end
|
614
|
+
|
615
|
+
it "should not raise an exception if one of the hashes has a nil value on a deep lookup" do
|
616
|
+
expect { @attributes["place"].keys { |k| } }.not_to raise_error
|
617
|
+
end
|
618
|
+
end
|
619
|
+
|
620
|
+
describe "each" do
|
621
|
+
before(:each) do
|
622
|
+
@attributes = Chef::Node::Attribute.new(
|
623
|
+
{
|
624
|
+
"one" => "two",
|
625
|
+
"hut" => "three",
|
626
|
+
},
|
627
|
+
{
|
628
|
+
"one" => "four",
|
629
|
+
"snakes" => "on a plane",
|
630
|
+
},
|
631
|
+
{
|
632
|
+
"one" => "six",
|
633
|
+
"snack" => "cookies",
|
634
|
+
},
|
635
|
+
{}
|
636
|
+
)
|
637
|
+
end
|
638
|
+
|
639
|
+
it "should yield each top level key and value, post merge rules" do
|
640
|
+
collect = Hash.new
|
641
|
+
@attributes.each do |k, v|
|
642
|
+
collect[k] = v
|
643
|
+
end
|
644
|
+
|
645
|
+
expect(collect["one"]).to eq("six")
|
646
|
+
expect(collect["hut"]).to eq("three")
|
647
|
+
expect(collect["snakes"]).to eq("on a plane")
|
648
|
+
expect(collect["snack"]).to eq("cookies")
|
649
|
+
end
|
650
|
+
|
651
|
+
it "should yield as a two-element array" do
|
652
|
+
@attributes.each do |a|
|
653
|
+
expect(a).to be_an_instance_of(Array)
|
654
|
+
end
|
655
|
+
end
|
656
|
+
end
|
657
|
+
|
658
|
+
describe "each_key" do
|
659
|
+
before do
|
660
|
+
@attributes = Chef::Node::Attribute.new(
|
661
|
+
{
|
662
|
+
"one" => "two",
|
663
|
+
"hut" => "three",
|
664
|
+
},
|
665
|
+
{
|
666
|
+
"one" => "four",
|
667
|
+
"snakes" => "on a plane",
|
668
|
+
},
|
669
|
+
{
|
670
|
+
"one" => "six",
|
671
|
+
"snack" => "cookies",
|
672
|
+
},
|
673
|
+
{}
|
674
|
+
)
|
675
|
+
end
|
676
|
+
|
677
|
+
it "should respond to each_key" do
|
678
|
+
expect(@attributes).to respond_to(:each_key)
|
679
|
+
end
|
680
|
+
|
681
|
+
it "should yield each top level key, post merge rules" do
|
682
|
+
collect = Array.new
|
683
|
+
@attributes.each_key do |k|
|
684
|
+
collect << k
|
685
|
+
end
|
686
|
+
|
687
|
+
expect(collect).to include("one")
|
688
|
+
expect(collect).to include("snack")
|
689
|
+
expect(collect).to include("hut")
|
690
|
+
expect(collect).to include("snakes")
|
691
|
+
end
|
692
|
+
end
|
693
|
+
|
694
|
+
describe "each_pair" do
|
695
|
+
before do
|
696
|
+
@attributes = Chef::Node::Attribute.new(
|
697
|
+
{
|
698
|
+
"one" => "two",
|
699
|
+
"hut" => "three",
|
700
|
+
},
|
701
|
+
{
|
702
|
+
"one" => "four",
|
703
|
+
"snakes" => "on a plane",
|
704
|
+
},
|
705
|
+
{
|
706
|
+
"one" => "six",
|
707
|
+
"snack" => "cookies",
|
708
|
+
},
|
709
|
+
{}
|
710
|
+
)
|
711
|
+
end
|
712
|
+
|
713
|
+
it "should respond to each_pair" do
|
714
|
+
expect(@attributes).to respond_to(:each_pair)
|
715
|
+
end
|
716
|
+
|
717
|
+
it "should yield each top level key and value pair, post merge rules" do
|
718
|
+
collect = Hash.new
|
719
|
+
@attributes.each_pair do |k, v|
|
720
|
+
collect[k] = v
|
721
|
+
end
|
722
|
+
|
723
|
+
expect(collect["one"]).to eq("six")
|
724
|
+
expect(collect["hut"]).to eq("three")
|
725
|
+
expect(collect["snakes"]).to eq("on a plane")
|
726
|
+
expect(collect["snack"]).to eq("cookies")
|
727
|
+
end
|
728
|
+
end
|
729
|
+
|
730
|
+
describe "each_value" do
|
731
|
+
before do
|
732
|
+
@attributes = Chef::Node::Attribute.new(
|
733
|
+
{
|
734
|
+
"one" => "two",
|
735
|
+
"hut" => "three",
|
736
|
+
},
|
737
|
+
{
|
738
|
+
"one" => "four",
|
739
|
+
"snakes" => "on a plane",
|
740
|
+
},
|
741
|
+
{
|
742
|
+
"one" => "six",
|
743
|
+
"snack" => "cookies",
|
744
|
+
},
|
745
|
+
{}
|
746
|
+
)
|
747
|
+
end
|
748
|
+
|
749
|
+
it "should respond to each_value" do
|
750
|
+
expect(@attributes).to respond_to(:each_value)
|
751
|
+
end
|
752
|
+
|
753
|
+
it "should yield each value, post merge rules" do
|
754
|
+
collect = Array.new
|
755
|
+
@attributes.each_value do |v|
|
756
|
+
collect << v
|
757
|
+
end
|
758
|
+
|
759
|
+
expect(collect).to include("cookies")
|
760
|
+
expect(collect).to include("three")
|
761
|
+
expect(collect).to include("on a plane")
|
762
|
+
end
|
763
|
+
|
764
|
+
it "should yield four elements" do
|
765
|
+
collect = Array.new
|
766
|
+
@attributes.each_value do |v|
|
767
|
+
collect << v
|
768
|
+
end
|
769
|
+
|
770
|
+
expect(collect.length).to eq(4)
|
771
|
+
end
|
772
|
+
end
|
773
|
+
|
774
|
+
describe "empty?" do
|
775
|
+
before do
|
776
|
+
@attributes = Chef::Node::Attribute.new(
|
777
|
+
{
|
778
|
+
"one" => "two",
|
779
|
+
"hut" => "three",
|
780
|
+
},
|
781
|
+
{
|
782
|
+
"one" => "four",
|
783
|
+
"snakes" => "on a plane",
|
784
|
+
},
|
785
|
+
{
|
786
|
+
"one" => "six",
|
787
|
+
"snack" => "cookies",
|
788
|
+
},
|
789
|
+
{}
|
790
|
+
)
|
791
|
+
@empty = Chef::Node::Attribute.new({}, {}, {}, {})
|
792
|
+
end
|
793
|
+
|
794
|
+
it "should respond to empty?" do
|
795
|
+
expect(@attributes).to respond_to(:empty?)
|
796
|
+
end
|
797
|
+
|
798
|
+
it "should return true when there are no keys" do
|
799
|
+
expect(@empty.empty?).to eq(true)
|
800
|
+
end
|
801
|
+
|
802
|
+
it "should return false when there are keys" do
|
803
|
+
expect(@attributes.empty?).to eq(false)
|
804
|
+
end
|
805
|
+
|
806
|
+
end
|
807
|
+
|
808
|
+
describe "fetch" do
|
809
|
+
before do
|
810
|
+
@attributes = Chef::Node::Attribute.new(
|
811
|
+
{
|
812
|
+
"one" => "two",
|
813
|
+
"hut" => "three",
|
814
|
+
},
|
815
|
+
{
|
816
|
+
"one" => "four",
|
817
|
+
"snakes" => "on a plane",
|
818
|
+
},
|
819
|
+
{
|
820
|
+
"one" => "six",
|
821
|
+
"snack" => "cookies",
|
822
|
+
},
|
823
|
+
{}
|
824
|
+
)
|
825
|
+
end
|
826
|
+
|
827
|
+
it "should respond to fetch" do
|
828
|
+
expect(@attributes).to respond_to(:fetch)
|
829
|
+
end
|
830
|
+
|
831
|
+
describe "when the key exists" do
|
832
|
+
it "should return the value of the key, post merge (same result as each)" do
|
833
|
+
{
|
834
|
+
"one" => "six",
|
835
|
+
"hut" => "three",
|
836
|
+
"snakes" => "on a plane",
|
837
|
+
"snack" => "cookies",
|
838
|
+
}.each do |k, v|
|
839
|
+
expect(@attributes.fetch(k)).to eq(v)
|
840
|
+
end
|
841
|
+
end
|
842
|
+
end
|
843
|
+
|
844
|
+
describe "when the key does not exist" do
|
845
|
+
describe "and no args are passed" do
|
846
|
+
it "should raise an indexerror" do
|
847
|
+
expect { @attributes.fetch("lololol") }.to raise_error(IndexError)
|
848
|
+
end
|
849
|
+
end
|
850
|
+
|
851
|
+
describe "and a default arg is passed" do
|
852
|
+
it "should return the value of the default arg" do
|
853
|
+
expect(@attributes.fetch("lol", "blah")).to eq("blah")
|
854
|
+
end
|
855
|
+
end
|
856
|
+
|
857
|
+
describe "and a block is passed" do
|
858
|
+
it "should run the block and return its value" do
|
859
|
+
expect(@attributes.fetch("lol") { |x| "#{x}, blah" }).to eq("lol, blah")
|
860
|
+
end
|
861
|
+
end
|
862
|
+
end
|
863
|
+
end
|
864
|
+
|
865
|
+
describe "has_value?" do
|
866
|
+
before do
|
867
|
+
@attributes = Chef::Node::Attribute.new(
|
868
|
+
{
|
869
|
+
"one" => "two",
|
870
|
+
"hut" => "three",
|
871
|
+
},
|
872
|
+
{
|
873
|
+
"one" => "four",
|
874
|
+
"snakes" => "on a plane",
|
875
|
+
},
|
876
|
+
{
|
877
|
+
"one" => "six",
|
878
|
+
"snack" => "cookies",
|
879
|
+
},
|
880
|
+
{}
|
881
|
+
)
|
882
|
+
end
|
883
|
+
|
884
|
+
it "should respond to has_value?" do
|
885
|
+
expect(@attributes).to respond_to(:has_value?)
|
886
|
+
end
|
887
|
+
|
888
|
+
it "should return true if any key has the value supplied" do
|
889
|
+
expect(@attributes.value?("cookies")).to eq(true)
|
890
|
+
end
|
891
|
+
|
892
|
+
it "should return false no key has the value supplied" do
|
893
|
+
expect(@attributes.value?("lololol")).to eq(false)
|
894
|
+
end
|
895
|
+
|
896
|
+
it "should alias value?" do
|
897
|
+
expect(@attributes).to respond_to(:value?)
|
898
|
+
end
|
899
|
+
end
|
900
|
+
|
901
|
+
describe "index" do
|
902
|
+
# Hash#index is deprecated and triggers warnings.
|
903
|
+
def silence
|
904
|
+
old_verbose = $VERBOSE
|
905
|
+
$VERBOSE = nil
|
906
|
+
yield
|
907
|
+
ensure
|
908
|
+
$VERBOSE = old_verbose
|
909
|
+
end
|
910
|
+
|
911
|
+
before do
|
912
|
+
@attributes = Chef::Node::Attribute.new(
|
913
|
+
{
|
914
|
+
"one" => "two",
|
915
|
+
"hut" => "three",
|
916
|
+
},
|
917
|
+
{
|
918
|
+
"one" => "four",
|
919
|
+
"snakes" => "on a plane",
|
920
|
+
},
|
921
|
+
{
|
922
|
+
"one" => "six",
|
923
|
+
"snack" => "cookies",
|
924
|
+
},
|
925
|
+
{}
|
926
|
+
)
|
927
|
+
end
|
928
|
+
|
929
|
+
it "should respond to index" do
|
930
|
+
expect(@attributes).to respond_to(:index)
|
931
|
+
end
|
932
|
+
|
933
|
+
describe "when the value is indexed" do
|
934
|
+
it "should return the index" do
|
935
|
+
silence do
|
936
|
+
expect(@attributes.index("six")).to eq("one")
|
937
|
+
end
|
938
|
+
end
|
939
|
+
end
|
940
|
+
|
941
|
+
describe "when the value is not indexed" do
|
942
|
+
it "should return nil" do
|
943
|
+
silence do
|
944
|
+
expect(@attributes.index("lolol")).to eq(nil)
|
945
|
+
end
|
946
|
+
end
|
947
|
+
end
|
948
|
+
|
949
|
+
end
|
950
|
+
|
951
|
+
describe "values" do
|
952
|
+
before do
|
953
|
+
@attributes = Chef::Node::Attribute.new(
|
954
|
+
{
|
955
|
+
"one" => "two",
|
956
|
+
"hut" => "three",
|
957
|
+
},
|
958
|
+
{
|
959
|
+
"one" => "four",
|
960
|
+
"snakes" => "on a plane",
|
961
|
+
},
|
962
|
+
{
|
963
|
+
"one" => "six",
|
964
|
+
"snack" => "cookies",
|
965
|
+
},
|
966
|
+
{}
|
967
|
+
)
|
968
|
+
end
|
969
|
+
|
970
|
+
it "should respond to values" do
|
971
|
+
expect(@attributes).to respond_to(:values)
|
972
|
+
end
|
973
|
+
|
974
|
+
it "should return an array of values" do
|
975
|
+
expect(@attributes.values.length).to eq(4)
|
976
|
+
end
|
977
|
+
|
978
|
+
it "should match the values output from each" do
|
979
|
+
expect(@attributes.values).to include("six")
|
980
|
+
expect(@attributes.values).to include("cookies")
|
981
|
+
expect(@attributes.values).to include("three")
|
982
|
+
expect(@attributes.values).to include("on a plane")
|
983
|
+
end
|
984
|
+
|
985
|
+
end
|
986
|
+
|
987
|
+
describe "select" do
|
988
|
+
before do
|
989
|
+
@attributes = Chef::Node::Attribute.new(
|
990
|
+
{
|
991
|
+
"one" => "two",
|
992
|
+
"hut" => "three",
|
993
|
+
},
|
994
|
+
{
|
995
|
+
"one" => "four",
|
996
|
+
"snakes" => "on a plane",
|
997
|
+
},
|
998
|
+
{
|
999
|
+
"one" => "six",
|
1000
|
+
"snack" => "cookies",
|
1001
|
+
},
|
1002
|
+
{}
|
1003
|
+
)
|
1004
|
+
end
|
1005
|
+
|
1006
|
+
it "should respond to select" do
|
1007
|
+
expect(@attributes).to respond_to(:select)
|
1008
|
+
end
|
1009
|
+
|
1010
|
+
if RUBY_VERSION >= "1.8.7"
|
1011
|
+
it "should not raise a LocalJumpError if no block is given" do
|
1012
|
+
expect { @attributes.select }.not_to raise_error
|
1013
|
+
end
|
1014
|
+
else
|
1015
|
+
it "should raise a LocalJumpError if no block is given" do
|
1016
|
+
expect { @attributes.select }.to raise_error(LocalJumpError)
|
1017
|
+
end
|
1018
|
+
end
|
1019
|
+
|
1020
|
+
it "should return an empty hash/array (ruby-version-dependent) for a block containing nil" do
|
1021
|
+
expect(@attributes.select { nil }).to eq({}.select { nil })
|
1022
|
+
end
|
1023
|
+
|
1024
|
+
# sorted for spec clarity
|
1025
|
+
it "should return a new array of k,v pairs for which the block returns true" do
|
1026
|
+
expect(@attributes.select { true }.sort).to eq(
|
1027
|
+
[
|
1028
|
+
%w{hut three},
|
1029
|
+
%w{one six},
|
1030
|
+
%w{snack cookies},
|
1031
|
+
["snakes", "on a plane"],
|
1032
|
+
]
|
1033
|
+
)
|
1034
|
+
end
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
describe "size" do
|
1038
|
+
before do
|
1039
|
+
@attributes = Chef::Node::Attribute.new(
|
1040
|
+
{
|
1041
|
+
"one" => "two",
|
1042
|
+
"hut" => "three",
|
1043
|
+
},
|
1044
|
+
{
|
1045
|
+
"one" => "four",
|
1046
|
+
"snakes" => "on a plane",
|
1047
|
+
},
|
1048
|
+
{
|
1049
|
+
"one" => "six",
|
1050
|
+
"snack" => "cookies",
|
1051
|
+
},
|
1052
|
+
{}
|
1053
|
+
)
|
1054
|
+
|
1055
|
+
@empty = Chef::Node::Attribute.new({}, {}, {}, {})
|
1056
|
+
end
|
1057
|
+
|
1058
|
+
it "should respond to size" do
|
1059
|
+
expect(@attributes).to respond_to(:size)
|
1060
|
+
end
|
1061
|
+
|
1062
|
+
it "should alias length to size" do
|
1063
|
+
expect(@attributes).to respond_to(:length)
|
1064
|
+
end
|
1065
|
+
|
1066
|
+
it "should return 0 for an empty attribute" do
|
1067
|
+
expect(@empty.size).to eq(0)
|
1068
|
+
end
|
1069
|
+
|
1070
|
+
it "should return the number of pairs" do
|
1071
|
+
expect(@attributes.size).to eq(4)
|
1072
|
+
end
|
1073
|
+
end
|
1074
|
+
|
1075
|
+
describe "kind_of?" do
|
1076
|
+
it "should falsely inform you that it is a Hash" do
|
1077
|
+
expect(@attributes).to be_a_kind_of(Hash)
|
1078
|
+
end
|
1079
|
+
|
1080
|
+
it "should falsely inform you that it is a Mash" do
|
1081
|
+
expect(@attributes).to be_a_kind_of(Mash)
|
1082
|
+
end
|
1083
|
+
|
1084
|
+
it "should inform you that it is a Chef::Node::Attribute" do
|
1085
|
+
expect(@attributes).to be_a_kind_of(Chef::Node::Attribute)
|
1086
|
+
end
|
1087
|
+
|
1088
|
+
it "should inform you that it is anything else" do
|
1089
|
+
expect(@attributes).not_to be_a_kind_of(Chef::Node)
|
1090
|
+
end
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
describe "to_s" do
|
1094
|
+
it "should output simple attributes" do
|
1095
|
+
attributes = Chef::Node::Attribute.new(nil, nil, nil, nil)
|
1096
|
+
expect(attributes.to_s).to eq("{}")
|
1097
|
+
end
|
1098
|
+
|
1099
|
+
it "should output merged attributes" do
|
1100
|
+
default_hash = {
|
1101
|
+
"a" => 1,
|
1102
|
+
"b" => 2,
|
1103
|
+
}
|
1104
|
+
override_hash = {
|
1105
|
+
"b" => 3,
|
1106
|
+
"c" => 4,
|
1107
|
+
}
|
1108
|
+
attributes = Chef::Node::Attribute.new(nil, default_hash, override_hash, nil)
|
1109
|
+
expect(attributes.to_s).to eq('{"a"=>1, "b"=>3, "c"=>4}')
|
1110
|
+
end
|
1111
|
+
end
|
1112
|
+
|
1113
|
+
describe "inspect" do
|
1114
|
+
it "should be readable" do
|
1115
|
+
# NOTE: previous implementation hid the values, showing @automatic={...}
|
1116
|
+
# That is nice and compact, but hides a lot of info, which seems counter
|
1117
|
+
# to the point of calling #inspect...
|
1118
|
+
expect(@attributes.inspect).to match(/@automatic=\{.*\}/)
|
1119
|
+
expect(@attributes.inspect).to match(/@normal=\{.*\}/)
|
1120
|
+
end
|
1121
|
+
end
|
1122
|
+
|
1123
|
+
describe "when not mutated" do
|
1124
|
+
|
1125
|
+
it "does not reset the cache when dup'd [CHEF-3680]" do
|
1126
|
+
@attributes.default[:foo][:bar] = "set on original"
|
1127
|
+
subtree = @attributes[:foo]
|
1128
|
+
@attributes.default[:foo].dup[:bar] = "set on dup"
|
1129
|
+
expect(subtree[:bar]).to eq("set on original")
|
1130
|
+
end
|
1131
|
+
|
1132
|
+
end
|
1133
|
+
|
1134
|
+
describe "when setting a component attribute to a new value" do
|
1135
|
+
it "converts the input in to a VividMash tree (default)" do
|
1136
|
+
@attributes.default = {}
|
1137
|
+
@attributes.default["foo"] = "bar"
|
1138
|
+
expect(@attributes.merged_attributes[:foo]).to eq("bar")
|
1139
|
+
end
|
1140
|
+
|
1141
|
+
it "converts the input in to a VividMash tree (normal)" do
|
1142
|
+
@attributes.normal = {}
|
1143
|
+
@attributes.normal["foo"] = "bar"
|
1144
|
+
expect(@attributes.merged_attributes[:foo]).to eq("bar")
|
1145
|
+
end
|
1146
|
+
|
1147
|
+
it "converts the input in to a VividMash tree (override)" do
|
1148
|
+
@attributes.override = {}
|
1149
|
+
@attributes.override["foo"] = "bar"
|
1150
|
+
expect(@attributes.merged_attributes[:foo]).to eq("bar")
|
1151
|
+
end
|
1152
|
+
|
1153
|
+
it "converts the input in to a VividMash tree (automatic)" do
|
1154
|
+
@attributes.automatic = {}
|
1155
|
+
@attributes.automatic["foo"] = "bar"
|
1156
|
+
expect(@attributes.merged_attributes[:foo]).to eq("bar")
|
1157
|
+
end
|
1158
|
+
end
|
1159
|
+
|
1160
|
+
describe "when deep-merging between precedence levels" do
|
1161
|
+
it "correctly deep merges hashes and preserves the original contents" do
|
1162
|
+
@attributes.default = { "arglebargle" => { "foo" => "bar" } }
|
1163
|
+
@attributes.override = { "arglebargle" => { "fizz" => "buzz" } }
|
1164
|
+
expect(@attributes.merged_attributes[:arglebargle]).to eq({ "foo" => "bar", "fizz" => "buzz" })
|
1165
|
+
expect(@attributes.default[:arglebargle]).to eq({ "foo" => "bar" })
|
1166
|
+
expect(@attributes.override[:arglebargle]).to eq({ "fizz" => "buzz" })
|
1167
|
+
end
|
1168
|
+
|
1169
|
+
it "does not deep merge arrays, and preserves the original contents" do
|
1170
|
+
@attributes.default = { "arglebargle" => [ 1, 2, 3 ] }
|
1171
|
+
@attributes.override = { "arglebargle" => [ 4, 5, 6 ] }
|
1172
|
+
expect(@attributes.merged_attributes[:arglebargle]).to eq([ 4, 5, 6 ])
|
1173
|
+
expect(@attributes.default[:arglebargle]).to eq([ 1, 2, 3 ])
|
1174
|
+
expect(@attributes.override[:arglebargle]).to eq([ 4, 5, 6 ])
|
1175
|
+
end
|
1176
|
+
|
1177
|
+
it "correctly deep merges hashes and preserves the original contents when merging default and role_default" do
|
1178
|
+
@attributes.default = { "arglebargle" => { "foo" => "bar" } }
|
1179
|
+
@attributes.role_default = { "arglebargle" => { "fizz" => "buzz" } }
|
1180
|
+
expect(@attributes.merged_attributes[:arglebargle]).to eq({ "foo" => "bar", "fizz" => "buzz" })
|
1181
|
+
expect(@attributes.default[:arglebargle]).to eq({ "foo" => "bar" })
|
1182
|
+
expect(@attributes.role_default[:arglebargle]).to eq({ "fizz" => "buzz" })
|
1183
|
+
end
|
1184
|
+
|
1185
|
+
it "correctly deep merges arrays, and preserves the original contents when merging default and role_default" do
|
1186
|
+
@attributes.default = { "arglebargle" => [ 1, 2, 3 ] }
|
1187
|
+
@attributes.role_default = { "arglebargle" => [ 4, 5, 6 ] }
|
1188
|
+
expect(@attributes.merged_attributes[:arglebargle]).to eq([ 1, 2, 3, 4, 5, 6 ])
|
1189
|
+
expect(@attributes.default[:arglebargle]).to eq([ 1, 2, 3 ])
|
1190
|
+
expect(@attributes.role_default[:arglebargle]).to eq([ 4, 5, 6 ])
|
1191
|
+
end
|
1192
|
+
end
|
1193
|
+
|
1194
|
+
describe "when attemping to write without specifying precedence" do
|
1195
|
+
it "raises an error when using []=" do
|
1196
|
+
expect { @attributes[:new_key] = "new value" }.to raise_error(Chef::Exceptions::ImmutableAttributeModification)
|
1197
|
+
end
|
1198
|
+
end
|
1199
|
+
|
1200
|
+
describe "deeply converting values" do
|
1201
|
+
it "converts values through an array" do
|
1202
|
+
@attributes.default[:foo] = [ { bar: true } ]
|
1203
|
+
expect(@attributes["foo"].class).to eql(Chef::Node::ImmutableArray)
|
1204
|
+
expect(@attributes["foo"][0].class).to eql(Chef::Node::ImmutableMash)
|
1205
|
+
expect(@attributes["foo"][0]["bar"]).to be true
|
1206
|
+
end
|
1207
|
+
|
1208
|
+
it "converts values through nested arrays" do
|
1209
|
+
@attributes.default[:foo] = [ [ { bar: true } ] ]
|
1210
|
+
expect(@attributes["foo"].class).to eql(Chef::Node::ImmutableArray)
|
1211
|
+
expect(@attributes["foo"][0].class).to eql(Chef::Node::ImmutableArray)
|
1212
|
+
expect(@attributes["foo"][0][0].class).to eql(Chef::Node::ImmutableMash)
|
1213
|
+
expect(@attributes["foo"][0][0]["bar"]).to be true
|
1214
|
+
end
|
1215
|
+
|
1216
|
+
it "converts values through nested hashes" do
|
1217
|
+
@attributes.default[:foo] = { baz: { bar: true } }
|
1218
|
+
expect(@attributes["foo"].class).to eql(Chef::Node::ImmutableMash)
|
1219
|
+
expect(@attributes["foo"]["baz"].class).to eql(Chef::Node::ImmutableMash)
|
1220
|
+
expect(@attributes["foo"]["baz"]["bar"]).to be true
|
1221
|
+
end
|
1222
|
+
end
|
1223
|
+
|
1224
|
+
describe "node state" do
|
1225
|
+
it "sets __root__ correctly" do
|
1226
|
+
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1227
|
+
expect(@attributes["foo"].__root__).to eql(@attributes)
|
1228
|
+
expect(@attributes["foo"]["bar"].__root__).to eql(@attributes)
|
1229
|
+
expect(@attributes.default["foo"].__root__).to eql(@attributes)
|
1230
|
+
expect(@attributes.default["foo"]["bar"].__root__).to eql(@attributes)
|
1231
|
+
end
|
1232
|
+
|
1233
|
+
it "sets __node__ correctly" do
|
1234
|
+
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1235
|
+
expect(@attributes["foo"].__node__).to eql(node)
|
1236
|
+
expect(@attributes["foo"]["bar"].__node__).to eql(node)
|
1237
|
+
expect(@attributes.default["foo"].__node__).to eql(node)
|
1238
|
+
expect(@attributes.default["foo"]["bar"].__node__).to eql(node)
|
1239
|
+
end
|
1240
|
+
|
1241
|
+
it "sets __path__ correctly" do
|
1242
|
+
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1243
|
+
expect(@attributes["foo"].__path__).to eql(["foo"])
|
1244
|
+
expect(@attributes["foo"]["bar"].__path__).to eql(%w{foo bar})
|
1245
|
+
expect(@attributes.default["foo"].__path__).to eql(["foo"])
|
1246
|
+
expect(@attributes.default["foo"]["bar"].__path__).to eql(%w{foo bar})
|
1247
|
+
end
|
1248
|
+
|
1249
|
+
it "sets __precedence__ correctly" do
|
1250
|
+
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1251
|
+
expect(@attributes["foo"].__precedence__).to eql(:merged)
|
1252
|
+
expect(@attributes["foo"]["bar"].__precedence__).to eql(:merged)
|
1253
|
+
expect(@attributes.default["foo"].__precedence__).to eql(:default)
|
1254
|
+
expect(@attributes.default["foo"]["bar"].__precedence__).to eql(:default)
|
1255
|
+
end
|
1256
|
+
|
1257
|
+
it "notifies on attribute changes" do
|
1258
|
+
expect(events).to receive(:attribute_changed).with(:default, ["foo"], {})
|
1259
|
+
expect(events).to receive(:attribute_changed).with(:default, %w{foo bar}, {})
|
1260
|
+
expect(events).to receive(:attribute_changed).with(:default, %w{foo bar baz}, "quux")
|
1261
|
+
@attributes.default["foo"]["bar"]["baz"] = "quux"
|
1262
|
+
end
|
1263
|
+
end
|
1264
|
+
|
1265
|
+
describe "frozen immutable strings" do
|
1266
|
+
it "strings in hashes should be frozen" do
|
1267
|
+
@attributes.default["foo"]["bar"]["baz"] = "fizz"
|
1268
|
+
expect { @attributes["foo"]["bar"]["baz"] << "buzz" }.to raise_error(RuntimeError, "can't modify frozen String")
|
1269
|
+
end
|
1270
|
+
|
1271
|
+
it "strings in arrays should be frozen" do
|
1272
|
+
@attributes.default["foo"]["bar"] = [ "fizz" ]
|
1273
|
+
expect { @attributes["foo"]["bar"][0] << "buzz" }.to raise_error(RuntimeError, "can't modify frozen String")
|
1274
|
+
end
|
1275
|
+
end
|
1276
|
+
end
|