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,102 +1,102 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Chris Doherty (<cdoherty@chef.io>)
|
3
|
-
# Copyright:: Copyright 2014-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
|
-
describe Chef::Resource::WindowsService, :windows_only, :system_windows_service_gem_only, :appveyor_only, broken: true do
|
22
|
-
# Marking as broken. This test is causing appveyor tests to exit with 116.
|
23
|
-
|
24
|
-
include_context "using Win32::Service"
|
25
|
-
|
26
|
-
let(:username) { "service_spec_user" }
|
27
|
-
let(:qualified_username) { "#{ENV['COMPUTERNAME']}\\#{username}" }
|
28
|
-
let(:password) { "1a2b3c4X!&narf" }
|
29
|
-
|
30
|
-
let(:user_resource) do
|
31
|
-
r = Chef::Resource::User::WindowsUser.new(username, run_context)
|
32
|
-
r.username(username)
|
33
|
-
r.password(password)
|
34
|
-
r.comment("temp spec user")
|
35
|
-
r
|
36
|
-
end
|
37
|
-
|
38
|
-
let(:global_service_file_path) do
|
39
|
-
"#{ENV['WINDIR']}\\temp\\#{File.basename(test_service[:service_file_path])}"
|
40
|
-
end
|
41
|
-
|
42
|
-
let(:service_params) do
|
43
|
-
|
44
|
-
id = "#{$$}_#{rand(1000)}"
|
45
|
-
|
46
|
-
test_service.merge( {
|
47
|
-
run_as_user: qualified_username,
|
48
|
-
run_as_password: password,
|
49
|
-
service_name: "spec_service_#{id}",
|
50
|
-
service_display_name: "windows_service spec #{id}}",
|
51
|
-
service_description: "Test service for running the windows_service functional spec.",
|
52
|
-
service_file_path: global_service_file_path,
|
53
|
-
} )
|
54
|
-
end
|
55
|
-
|
56
|
-
let(:manager) do
|
57
|
-
Chef::Application::WindowsServiceManager.new(service_params)
|
58
|
-
end
|
59
|
-
|
60
|
-
let(:service_resource) do
|
61
|
-
r = Chef::Resource::WindowsService.new(service_params[:service_name], run_context)
|
62
|
-
[:run_as_user, :run_as_password].each { |prop| r.send(prop, service_params[prop]) }
|
63
|
-
r
|
64
|
-
end
|
65
|
-
|
66
|
-
before do
|
67
|
-
user_resource.run_action(:create)
|
68
|
-
|
69
|
-
# the service executable has to be outside the current user's home
|
70
|
-
# directory in order for the logon user to execute it.
|
71
|
-
FileUtils.copy_file(test_service[:service_file_path], global_service_file_path)
|
72
|
-
|
73
|
-
# if you don't make the file executable by the service user, you'll get
|
74
|
-
# the not-very-helpful "service did not respond fast enough" error.
|
75
|
-
|
76
|
-
# #mode may break in a post-Windows 8.1 release, and have to be replaced
|
77
|
-
# with the rights stuff in the file resource.
|
78
|
-
file = Chef::Resource::File.new(global_service_file_path, run_context)
|
79
|
-
file.mode("0777")
|
80
|
-
|
81
|
-
file.run_action(:create)
|
82
|
-
|
83
|
-
manager.run(%w{--action install})
|
84
|
-
end
|
85
|
-
|
86
|
-
after do
|
87
|
-
user_resource.run_action(:remove)
|
88
|
-
manager.run(%w{--action uninstall})
|
89
|
-
File.delete(global_service_file_path)
|
90
|
-
end
|
91
|
-
|
92
|
-
describe "logon as a service" do
|
93
|
-
it "successfully runs a service as another user" do
|
94
|
-
service_resource.run_action(:start)
|
95
|
-
end
|
96
|
-
|
97
|
-
it "grants the user the log on as service right" do
|
98
|
-
service_resource.run_action(:start)
|
99
|
-
expect(Chef::ReservedNames::Win32::Security.get_account_right(qualified_username)).to include("SeServiceLogonRight")
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Chris Doherty (<cdoherty@chef.io>)
|
3
|
+
# Copyright:: Copyright 2014-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
|
+
describe Chef::Resource::WindowsService, :windows_only, :system_windows_service_gem_only, :appveyor_only, broken: true do
|
22
|
+
# Marking as broken. This test is causing appveyor tests to exit with 116.
|
23
|
+
|
24
|
+
include_context "using Win32::Service"
|
25
|
+
|
26
|
+
let(:username) { "service_spec_user" }
|
27
|
+
let(:qualified_username) { "#{ENV['COMPUTERNAME']}\\#{username}" }
|
28
|
+
let(:password) { "1a2b3c4X!&narf" }
|
29
|
+
|
30
|
+
let(:user_resource) do
|
31
|
+
r = Chef::Resource::User::WindowsUser.new(username, run_context)
|
32
|
+
r.username(username)
|
33
|
+
r.password(password)
|
34
|
+
r.comment("temp spec user")
|
35
|
+
r
|
36
|
+
end
|
37
|
+
|
38
|
+
let(:global_service_file_path) do
|
39
|
+
"#{ENV['WINDIR']}\\temp\\#{File.basename(test_service[:service_file_path])}"
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:service_params) do
|
43
|
+
|
44
|
+
id = "#{$$}_#{rand(1000)}"
|
45
|
+
|
46
|
+
test_service.merge( {
|
47
|
+
run_as_user: qualified_username,
|
48
|
+
run_as_password: password,
|
49
|
+
service_name: "spec_service_#{id}",
|
50
|
+
service_display_name: "windows_service spec #{id}}",
|
51
|
+
service_description: "Test service for running the windows_service functional spec.",
|
52
|
+
service_file_path: global_service_file_path,
|
53
|
+
} )
|
54
|
+
end
|
55
|
+
|
56
|
+
let(:manager) do
|
57
|
+
Chef::Application::WindowsServiceManager.new(service_params)
|
58
|
+
end
|
59
|
+
|
60
|
+
let(:service_resource) do
|
61
|
+
r = Chef::Resource::WindowsService.new(service_params[:service_name], run_context)
|
62
|
+
[:run_as_user, :run_as_password].each { |prop| r.send(prop, service_params[prop]) }
|
63
|
+
r
|
64
|
+
end
|
65
|
+
|
66
|
+
before do
|
67
|
+
user_resource.run_action(:create)
|
68
|
+
|
69
|
+
# the service executable has to be outside the current user's home
|
70
|
+
# directory in order for the logon user to execute it.
|
71
|
+
FileUtils.copy_file(test_service[:service_file_path], global_service_file_path)
|
72
|
+
|
73
|
+
# if you don't make the file executable by the service user, you'll get
|
74
|
+
# the not-very-helpful "service did not respond fast enough" error.
|
75
|
+
|
76
|
+
# #mode may break in a post-Windows 8.1 release, and have to be replaced
|
77
|
+
# with the rights stuff in the file resource.
|
78
|
+
file = Chef::Resource::File.new(global_service_file_path, run_context)
|
79
|
+
file.mode("0777")
|
80
|
+
|
81
|
+
file.run_action(:create)
|
82
|
+
|
83
|
+
manager.run(%w{--action install})
|
84
|
+
end
|
85
|
+
|
86
|
+
after do
|
87
|
+
user_resource.run_action(:remove)
|
88
|
+
manager.run(%w{--action uninstall})
|
89
|
+
File.delete(global_service_file_path)
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "logon as a service" do
|
93
|
+
it "successfully runs a service as another user" do
|
94
|
+
service_resource.run_action(:start)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "grants the user the log on as service right" do
|
98
|
+
service_resource.run_action(:start)
|
99
|
+
expect(Chef::ReservedNames::Win32::Security.get_account_right(qualified_username)).to include("SeServiceLogonRight")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -1,1917 +1,1917 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>)
|
3
|
-
# Copyright:: Copyright (c) 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/provider/windows_task"
|
21
|
-
|
22
|
-
describe Chef::Resource::WindowsTask, :windows_only do
|
23
|
-
# resource.task.application_name will default to task_name unless resource.command is set
|
24
|
-
let(:task_name) { "chef-client-functional-test" }
|
25
|
-
let(:new_resource) { Chef::Resource::WindowsTask.new(task_name) }
|
26
|
-
let(:windows_task_provider) do
|
27
|
-
node = Chef::Node.new
|
28
|
-
events = Chef::EventDispatch::Dispatcher.new
|
29
|
-
run_context = Chef::RunContext.new(node, {}, events)
|
30
|
-
Chef::Provider::WindowsTask.new(new_resource, run_context)
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "action :create" do
|
34
|
-
after { delete_task }
|
35
|
-
context "when command is with arguments" do
|
36
|
-
subject do
|
37
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
38
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
39
|
-
# Make sure MM/DD/YYYY is accepted
|
40
|
-
|
41
|
-
new_resource.start_day "09/20/2017"
|
42
|
-
new_resource.frequency :hourly
|
43
|
-
new_resource
|
44
|
-
end
|
45
|
-
|
46
|
-
context "With Arguments" do
|
47
|
-
it "creates scheduled task and sets command arguments" do
|
48
|
-
subject.command "chef-client -W"
|
49
|
-
call_for_create_action
|
50
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
51
|
-
current_resource = call_for_load_current_resource
|
52
|
-
expect(current_resource.exists).to eq(true)
|
53
|
-
expect(current_resource.task.application_name).to eq("chef-client")
|
54
|
-
expect(current_resource.task.parameters).to eq("-W")
|
55
|
-
end
|
56
|
-
|
57
|
-
it "does not converge the resource if it is already converged" do
|
58
|
-
subject.command "chef-client -W"
|
59
|
-
subject.run_action(:create)
|
60
|
-
subject.command "chef-client -W"
|
61
|
-
subject.run_action(:create)
|
62
|
-
expect(subject).not_to be_updated_by_last_action
|
63
|
-
end
|
64
|
-
|
65
|
-
it "creates scheduled task and sets command arguments when arguments inclusive single quotes" do
|
66
|
-
subject.command "chef-client -W -L 'C:\\chef\\chef-ad-join.log'"
|
67
|
-
call_for_create_action
|
68
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
69
|
-
current_resource = call_for_load_current_resource
|
70
|
-
expect(current_resource.exists).to eq(true)
|
71
|
-
expect(current_resource.task.application_name).to eq("chef-client")
|
72
|
-
expect(current_resource.task.parameters).to eq("-W -L 'C:\\chef\\chef-ad-join.log'")
|
73
|
-
end
|
74
|
-
|
75
|
-
it "does not converge the resource if it is already converged" do
|
76
|
-
subject.command "chef-client -W -L 'C:\\chef\\chef-ad-join.log'"
|
77
|
-
subject.run_action(:create)
|
78
|
-
subject.command "chef-client -W -L 'C:\\chef\\chef-ad-join.log'"
|
79
|
-
subject.run_action(:create)
|
80
|
-
expect(subject).not_to be_updated_by_last_action
|
81
|
-
end
|
82
|
-
|
83
|
-
it "creates scheduled task and sets command arguments with spaces in command" do
|
84
|
-
subject.command '"C:\\Program Files\\example\\program.exe" -arg1 --arg2'
|
85
|
-
call_for_create_action
|
86
|
-
current_resource = call_for_load_current_resource
|
87
|
-
expect(current_resource.exists).to eq(true)
|
88
|
-
expect(current_resource.task.application_name).to eq('"C:\\Program Files\\example\\program.exe"')
|
89
|
-
expect(current_resource.task.parameters).to eq("-arg1 --arg2")
|
90
|
-
end
|
91
|
-
|
92
|
-
it "does not converge the resource if it is already converged" do
|
93
|
-
subject.command '"C:\\Program Files\\example\\program.exe" -arg1 --arg2'
|
94
|
-
subject.run_action(:create)
|
95
|
-
subject.command '"C:\\Program Files\\example\\program.exe" -arg1 --arg2'
|
96
|
-
subject.run_action(:create)
|
97
|
-
expect(subject).not_to be_updated_by_last_action
|
98
|
-
end
|
99
|
-
|
100
|
-
it "creates scheduled task and sets command arguments with spaces in arguments" do
|
101
|
-
subject.command 'powershell.exe -file "C:\\Program Files\\app\\script.ps1"'
|
102
|
-
call_for_create_action
|
103
|
-
current_resource = call_for_load_current_resource
|
104
|
-
expect(current_resource.exists).to eq(true)
|
105
|
-
expect(current_resource.task.application_name).to eq("powershell.exe")
|
106
|
-
expect(current_resource.task.parameters).to eq('-file "C:\\Program Files\\app\\script.ps1"')
|
107
|
-
end
|
108
|
-
|
109
|
-
it "does not converge the resource if it is already converged" do
|
110
|
-
subject.command 'powershell.exe -file "C:\\Program Files\\app\\script.ps1"'
|
111
|
-
subject.run_action(:create)
|
112
|
-
subject.command 'powershell.exe -file "C:\\Program Files\\app\\script.ps1"'
|
113
|
-
subject.run_action(:create)
|
114
|
-
expect(subject).not_to be_updated_by_last_action
|
115
|
-
end
|
116
|
-
|
117
|
-
it "creates scheduled task and sets command arguments" do
|
118
|
-
subject.command "ping http://www.google.com"
|
119
|
-
call_for_create_action
|
120
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
121
|
-
current_resource = call_for_load_current_resource
|
122
|
-
expect(current_resource.exists).to eq(true)
|
123
|
-
expect(current_resource.task.application_name).to eq("ping")
|
124
|
-
expect(current_resource.task.parameters).to eq("http://www.google.com")
|
125
|
-
end
|
126
|
-
|
127
|
-
it "does not converge the resource if it is already converged" do
|
128
|
-
subject.command "ping http://www.google.com"
|
129
|
-
subject.run_action(:create)
|
130
|
-
subject.command "ping http://www.google.com"
|
131
|
-
subject.run_action(:create)
|
132
|
-
expect(subject).not_to be_updated_by_last_action
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
context "Without Arguments" do
|
137
|
-
it "creates scheduled task and sets command arguments" do
|
138
|
-
subject.command "chef-client"
|
139
|
-
call_for_create_action
|
140
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
141
|
-
current_resource = call_for_load_current_resource
|
142
|
-
expect(current_resource.exists).to eq(true)
|
143
|
-
expect(current_resource.task.application_name).to eq("chef-client")
|
144
|
-
expect(current_resource.task.parameters).to be_empty
|
145
|
-
end
|
146
|
-
|
147
|
-
it "does not converge the resource if it is already converged" do
|
148
|
-
subject.command "chef-client"
|
149
|
-
subject.run_action(:create)
|
150
|
-
subject.command "chef-client"
|
151
|
-
subject.run_action(:create)
|
152
|
-
expect(subject).not_to be_updated_by_last_action
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
it "creates scheduled task and Re-sets command arguments" do
|
157
|
-
subject.command 'powershell.exe -file "C:\\Program Files\\app\\script.ps1"'
|
158
|
-
subject.run_action(:create)
|
159
|
-
current_resource = call_for_load_current_resource
|
160
|
-
expect(current_resource.task.application_name).to eq("powershell.exe")
|
161
|
-
expect(current_resource.task.parameters).to eq('-file "C:\\Program Files\\app\\script.ps1"')
|
162
|
-
|
163
|
-
subject.command "powershell.exe"
|
164
|
-
subject.run_action(:create)
|
165
|
-
current_resource = call_for_load_current_resource
|
166
|
-
expect(current_resource.task.application_name).to eq("powershell.exe")
|
167
|
-
expect(current_resource.task.parameters).to be_empty
|
168
|
-
expect(subject).to be_updated_by_last_action
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
context "when description is passed" do
|
173
|
-
subject do
|
174
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
175
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
176
|
-
new_resource.command task_name
|
177
|
-
# Make sure MM/DD/YYYY is accepted
|
178
|
-
new_resource.start_day "09/20/2017"
|
179
|
-
new_resource.frequency :hourly
|
180
|
-
new_resource
|
181
|
-
end
|
182
|
-
|
183
|
-
let(:some_description) { "this is test description" }
|
184
|
-
|
185
|
-
it "create the task and sets its description" do
|
186
|
-
subject.description some_description
|
187
|
-
call_for_create_action
|
188
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
189
|
-
current_resource = call_for_load_current_resource
|
190
|
-
expect(current_resource.exists).to eq(true)
|
191
|
-
expect(current_resource.task.description).to eq(some_description)
|
192
|
-
end
|
193
|
-
|
194
|
-
it "does not converge the resource if it is already converged" do
|
195
|
-
subject.description some_description
|
196
|
-
subject.run_action(:create)
|
197
|
-
subject.description some_description
|
198
|
-
subject.run_action(:create)
|
199
|
-
expect(subject).not_to be_updated_by_last_action
|
200
|
-
end
|
201
|
-
|
202
|
-
it "updates task with new description if task already exist" do
|
203
|
-
subject.description some_description
|
204
|
-
subject.run_action(:create)
|
205
|
-
subject.description "test description"
|
206
|
-
subject.run_action(:create)
|
207
|
-
expect(subject).to be_updated_by_last_action
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
context "when frequency_modifier are not passed" do
|
212
|
-
subject do
|
213
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
214
|
-
new_resource.command task_name
|
215
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
216
|
-
# Make sure MM/DD/YYYY is accepted
|
217
|
-
new_resource.start_day "09/20/2017"
|
218
|
-
new_resource.frequency :hourly
|
219
|
-
new_resource
|
220
|
-
end
|
221
|
-
|
222
|
-
it "creates a scheduled task to run every 1 hr starting on 09/20/2017" do
|
223
|
-
call_for_create_action
|
224
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
225
|
-
current_resource = call_for_load_current_resource
|
226
|
-
expect(current_resource.exists).to eq(true)
|
227
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
228
|
-
trigger_details = current_resource.task.trigger(0)
|
229
|
-
expect(trigger_details[:start_year]).to eq("2017")
|
230
|
-
expect(trigger_details[:start_month]).to eq("09")
|
231
|
-
expect(trigger_details[:start_day]).to eq("20")
|
232
|
-
expect(trigger_details[:minutes_interval]).to eq(60)
|
233
|
-
expect(trigger_details[:trigger_type]).to eq(1)
|
234
|
-
end
|
235
|
-
|
236
|
-
it "does not converge the resource if it is already converged" do
|
237
|
-
subject.run_action(:create)
|
238
|
-
subject.run_action(:create)
|
239
|
-
expect(subject).not_to be_updated_by_last_action
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
context "frequency :minute" do
|
244
|
-
subject do
|
245
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
246
|
-
new_resource.command task_name
|
247
|
-
new_resource.run_level :highest
|
248
|
-
new_resource.frequency :minute
|
249
|
-
new_resource.frequency_modifier 15
|
250
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
251
|
-
new_resource
|
252
|
-
end
|
253
|
-
|
254
|
-
it "creates a scheduled task that runs after every 15 minutes" do
|
255
|
-
call_for_create_action
|
256
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
257
|
-
current_resource = call_for_load_current_resource
|
258
|
-
expect(current_resource.exists).to eq(true)
|
259
|
-
trigger_details = current_resource.task.trigger(0)
|
260
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
261
|
-
expect(trigger_details[:minutes_interval]).to eq(15)
|
262
|
-
expect(trigger_details[:trigger_type]).to eq(1)
|
263
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
264
|
-
end
|
265
|
-
|
266
|
-
it "does not converge the resource if it is already converged" do
|
267
|
-
subject.run_action(:create)
|
268
|
-
subject.run_action(:create)
|
269
|
-
expect(subject).not_to be_updated_by_last_action
|
270
|
-
end
|
271
|
-
|
272
|
-
it "updates a scheduled task when frequency_modifier updated to 20" do
|
273
|
-
subject.run_action(:create)
|
274
|
-
current_resource = call_for_load_current_resource
|
275
|
-
trigger_details = current_resource.task.trigger(0)
|
276
|
-
expect(trigger_details[:minutes_interval]).to eq(15)
|
277
|
-
subject.frequency_modifier 20
|
278
|
-
subject.run_action(:create)
|
279
|
-
expect(subject).to be_updated_by_last_action
|
280
|
-
# #loading current resource again to check new task is creted and it matches task parameters
|
281
|
-
current_resource = call_for_load_current_resource
|
282
|
-
expect(current_resource.exists).to eq(true)
|
283
|
-
trigger_details = current_resource.task.trigger(0)
|
284
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
285
|
-
expect(trigger_details[:minutes_interval]).to eq(20)
|
286
|
-
expect(trigger_details[:trigger_type]).to eq(1)
|
287
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
288
|
-
end
|
289
|
-
end
|
290
|
-
|
291
|
-
context "frequency :hourly" do
|
292
|
-
subject do
|
293
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
294
|
-
new_resource.command task_name
|
295
|
-
new_resource.run_level :highest
|
296
|
-
new_resource.frequency :hourly
|
297
|
-
new_resource.frequency_modifier 3
|
298
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
299
|
-
new_resource
|
300
|
-
end
|
301
|
-
|
302
|
-
it "creates a scheduled task that runs after every 3 hrs" do
|
303
|
-
call_for_create_action
|
304
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
305
|
-
current_resource = call_for_load_current_resource
|
306
|
-
expect(current_resource.exists).to eq(true)
|
307
|
-
trigger_details = current_resource.task.trigger(0)
|
308
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
309
|
-
expect(trigger_details[:minutes_interval]).to eq(180)
|
310
|
-
expect(trigger_details[:trigger_type]).to eq(1)
|
311
|
-
end
|
312
|
-
|
313
|
-
it "does not converge the resource if it is already converged" do
|
314
|
-
subject.run_action(:create)
|
315
|
-
subject.run_action(:create)
|
316
|
-
expect(subject).not_to be_updated_by_last_action
|
317
|
-
end
|
318
|
-
|
319
|
-
it "updates a scheduled task to run every 5 hrs when frequency modifer updated to 5" do
|
320
|
-
subject.run_action(:create)
|
321
|
-
current_resource = call_for_load_current_resource
|
322
|
-
trigger_details = current_resource.task.trigger(0)
|
323
|
-
expect(trigger_details[:minutes_interval]).to eq(180)
|
324
|
-
# updating frequency modifer to 5 from 3
|
325
|
-
subject.frequency_modifier 5
|
326
|
-
subject.run_action(:create)
|
327
|
-
expect(subject).to be_updated_by_last_action
|
328
|
-
current_resource = call_for_load_current_resource
|
329
|
-
expect(current_resource.exists).to eq(true)
|
330
|
-
trigger_details = current_resource.task.trigger(0)
|
331
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
332
|
-
expect(trigger_details[:minutes_interval]).to eq(300)
|
333
|
-
expect(trigger_details[:trigger_type]).to eq(1)
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
|
-
context "frequency :daily" do
|
338
|
-
subject do
|
339
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
340
|
-
new_resource.command task_name
|
341
|
-
new_resource.run_level :highest
|
342
|
-
new_resource.frequency :daily
|
343
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
344
|
-
new_resource
|
345
|
-
end
|
346
|
-
|
347
|
-
it "creates a scheduled task to run daily" do
|
348
|
-
call_for_create_action
|
349
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
350
|
-
current_resource = call_for_load_current_resource
|
351
|
-
expect(current_resource.exists).to eq(true)
|
352
|
-
trigger_details = current_resource.task.trigger(0)
|
353
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
354
|
-
expect(trigger_details[:trigger_type]).to eq(2)
|
355
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
356
|
-
expect(trigger_details[:type][:days_interval]).to eq(1)
|
357
|
-
end
|
358
|
-
|
359
|
-
it "does not converge the resource if it is already converged" do
|
360
|
-
subject.run_action(:create)
|
361
|
-
subject.run_action(:create)
|
362
|
-
expect(subject).not_to be_updated_by_last_action
|
363
|
-
end
|
364
|
-
end
|
365
|
-
|
366
|
-
describe "frequency :monthly" do
|
367
|
-
subject do
|
368
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
369
|
-
new_resource.command task_name
|
370
|
-
new_resource.run_level :highest
|
371
|
-
new_resource.frequency :monthly
|
372
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
373
|
-
new_resource
|
374
|
-
end
|
375
|
-
|
376
|
-
context "with start_day and start_time" do
|
377
|
-
before do
|
378
|
-
subject.start_day "02/12/2018"
|
379
|
-
subject.start_time "05:15"
|
380
|
-
end
|
381
|
-
|
382
|
-
it "if day property is not set creates a scheduled task to run monthly on first day of the month" do
|
383
|
-
call_for_create_action
|
384
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
385
|
-
current_resource = call_for_load_current_resource
|
386
|
-
expect(current_resource.exists).to eq(true)
|
387
|
-
trigger_details = current_resource.task.trigger(0)
|
388
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
389
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
390
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
391
|
-
expect(trigger_details[:type][:days]).to eq(1)
|
392
|
-
expect(trigger_details[:type][:months]).to eq(4095)
|
393
|
-
end
|
394
|
-
|
395
|
-
it "does not converge the resource if it is already converged" do
|
396
|
-
subject.run_action(:create)
|
397
|
-
subject.run_action(:create)
|
398
|
-
expect(subject).not_to be_updated_by_last_action
|
399
|
-
end
|
400
|
-
|
401
|
-
it "creates a scheduled task to run monthly on first, second and third day of the month" do
|
402
|
-
subject.day "1, 2, 3"
|
403
|
-
call_for_create_action
|
404
|
-
# loading current resource again to check new task is created and it matches task parameters
|
405
|
-
current_resource = call_for_load_current_resource
|
406
|
-
expect(current_resource.exists).to eq(true)
|
407
|
-
trigger_details = current_resource.task.trigger(0)
|
408
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
409
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
410
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
411
|
-
expect(trigger_details[:type][:days]).to eq(7)
|
412
|
-
expect(trigger_details[:type][:months]).to eq(4095)
|
413
|
-
end
|
414
|
-
|
415
|
-
it "does not converge the resource if it is already converged" do
|
416
|
-
subject.day "1, 2, 3"
|
417
|
-
subject.run_action(:create)
|
418
|
-
subject.run_action(:create)
|
419
|
-
expect(subject).not_to be_updated_by_last_action
|
420
|
-
end
|
421
|
-
|
422
|
-
it "creates a scheduled task to run monthly on 1, 2, 3, 4, 8, 20, 21, 15, 28, 31 day of the month" do
|
423
|
-
subject.day "1, 2, 3, 4, 8, 20, 21, 15, 28, 31"
|
424
|
-
call_for_create_action
|
425
|
-
# loading current resource again to check new task is created and it matches task parameters
|
426
|
-
current_resource = call_for_load_current_resource
|
427
|
-
expect(current_resource.exists).to eq(true)
|
428
|
-
trigger_details = current_resource.task.trigger(0)
|
429
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
430
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
431
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
432
|
-
expect(trigger_details[:type][:days]).to eq(1209548943) # TODO:: windows_task_provider.send(:days_of_month)
|
433
|
-
expect(trigger_details[:type][:months]).to eq(4095) # windows_task_provider.send(:months_of_year)
|
434
|
-
end
|
435
|
-
|
436
|
-
it "does not converge the resource if it is already converged" do
|
437
|
-
subject.day "1, 2, 3, 4, 8, 20, 21, 15, 28, 31"
|
438
|
-
subject.run_action(:create)
|
439
|
-
subject.run_action(:create)
|
440
|
-
expect(subject).not_to be_updated_by_last_action
|
441
|
-
end
|
442
|
-
|
443
|
-
it "creates a scheduled task to run monthly on Jan, Feb, Apr, Dec on 1st 2nd 3rd 4th 8th and 20th day of these months" do
|
444
|
-
subject.day "1, 2, 3, 4, 8, 20, 21, 30"
|
445
|
-
subject.months "Jan, Feb, May, Sep, Dec"
|
446
|
-
call_for_create_action
|
447
|
-
# loading current resource again to check new task is created and it matches task parameters
|
448
|
-
current_resource = call_for_load_current_resource
|
449
|
-
expect(current_resource.exists).to eq(true)
|
450
|
-
trigger_details = current_resource.task.trigger(0)
|
451
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
452
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
453
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
454
|
-
expect(trigger_details[:type][:days]).to eq(538443919) # TODO:windows_task_provider.send(:days_of_month)
|
455
|
-
expect(trigger_details[:type][:months]).to eq(2323) # windows_task_provider.send(:months_of_year)
|
456
|
-
end
|
457
|
-
|
458
|
-
it "does not converge the resource if it is already converged" do
|
459
|
-
subject.day "1, 2, 3, 4, 8, 20, 21, 30"
|
460
|
-
subject.months "Jan, Feb, May, Sep, Dec"
|
461
|
-
subject.run_action(:create)
|
462
|
-
subject.run_action(:create)
|
463
|
-
expect(subject).not_to be_updated_by_last_action
|
464
|
-
end
|
465
|
-
|
466
|
-
it "creates a scheduled task to run monthly by giving day option with frequency_modifier" do
|
467
|
-
subject.frequency_modifier "First"
|
468
|
-
subject.day "Mon, Fri, Sun"
|
469
|
-
call_for_create_action
|
470
|
-
# loading current resource again to check new task is created and it matches task parameters
|
471
|
-
current_resource = call_for_load_current_resource
|
472
|
-
expect(current_resource.exists).to eq(true)
|
473
|
-
trigger_details = current_resource.task.trigger(0)
|
474
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
475
|
-
expect(trigger_details[:trigger_type]).to eq(5)
|
476
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
477
|
-
expect(trigger_details[:type][:days_of_week]).to eq(35)
|
478
|
-
expect(trigger_details[:type][:weeks_of_month]).to eq(1)
|
479
|
-
expect(trigger_details[:type][:months]).to eq(4095) # windows_task_provider.send(:months_of_year)
|
480
|
-
end
|
481
|
-
|
482
|
-
it "does not converge the resource if it is already converged" do
|
483
|
-
subject.frequency_modifier "First"
|
484
|
-
subject.day "Mon, Fri, Sun"
|
485
|
-
subject.run_action(:create)
|
486
|
-
subject.run_action(:create)
|
487
|
-
expect(subject).not_to be_updated_by_last_action
|
488
|
-
end
|
489
|
-
end
|
490
|
-
|
491
|
-
context "with frequency_modifier" do
|
492
|
-
subject do
|
493
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
494
|
-
new_resource.command task_name
|
495
|
-
new_resource.run_level :highest
|
496
|
-
new_resource.frequency :monthly
|
497
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
498
|
-
new_resource
|
499
|
-
end
|
500
|
-
|
501
|
-
it "raises argument error if frequency_modifier is 'first, second' and day is not provided." do
|
502
|
-
subject.frequency_modifier "first, second"
|
503
|
-
expect { subject.after_created }.to raise_error("Please select day on which you want to run the task e.g. 'Mon, Tue'. Multiple values must be seprated by comma.")
|
504
|
-
end
|
505
|
-
|
506
|
-
it "raises argument error if months is passed along with frequency_modifier" do
|
507
|
-
subject.frequency_modifier 3
|
508
|
-
subject.months "Jan, Mar"
|
509
|
-
expect { subject.after_created }.to raise_error("For frequency :monthly either use property months or frequency_modifier to set months.")
|
510
|
-
end
|
511
|
-
|
512
|
-
it "not raises any Argument error if frequency_modifier set as 'first, second, third' and day is provided" do
|
513
|
-
subject.frequency_modifier "first, second, third"
|
514
|
-
subject.day "Mon, Fri"
|
515
|
-
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
516
|
-
end
|
517
|
-
|
518
|
-
it "not raises any Argument error if frequency_modifier 2 " do
|
519
|
-
subject.frequency_modifier 2
|
520
|
-
subject.day "Mon, Sun"
|
521
|
-
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
522
|
-
end
|
523
|
-
|
524
|
-
it "raises argument error if frequency_modifier > 12" do
|
525
|
-
subject.frequency_modifier 13
|
526
|
-
expect { subject.after_created }.to raise_error("frequency_modifier value 13 is invalid. Valid values for :monthly frequency are 1 - 12, 'FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST'.")
|
527
|
-
end
|
528
|
-
|
529
|
-
it "raises argument error if frequency_modifier < 1" do
|
530
|
-
subject.frequency_modifier 0
|
531
|
-
expect { subject.after_created }.to raise_error("frequency_modifier value 0 is invalid. Valid values for :monthly frequency are 1 - 12, 'FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST'.")
|
532
|
-
end
|
533
|
-
|
534
|
-
it "creates scheduled task to run task monthly on Monday and Friday of first, second and thrid week of month" do
|
535
|
-
subject.frequency_modifier "first, second, third"
|
536
|
-
subject.day "Mon, Fri"
|
537
|
-
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
538
|
-
call_for_create_action
|
539
|
-
current_resource = call_for_load_current_resource
|
540
|
-
expect(current_resource.exists).to eq(true)
|
541
|
-
trigger_details = current_resource.task.trigger(0)
|
542
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
543
|
-
expect(trigger_details[:trigger_type]).to eq(5)
|
544
|
-
expect(trigger_details[:type][:months]).to eq(4095)
|
545
|
-
expect(trigger_details[:type][:weeks_of_month]).to eq(7)
|
546
|
-
expect(trigger_details[:type][:days_of_week]).to eq(34)
|
547
|
-
end
|
548
|
-
|
549
|
-
it "does not converge the resource if it is already converged" do
|
550
|
-
subject.frequency_modifier "first, second, third"
|
551
|
-
subject.day "Mon, Fri"
|
552
|
-
subject.run_action(:create)
|
553
|
-
subject.run_action(:create)
|
554
|
-
expect(subject).not_to be_updated_by_last_action
|
555
|
-
end
|
556
|
-
|
557
|
-
it "creates scheduled task to run task monthly on every 6 months when frequency_modifier is 6 and to run on 1st and 2nd day of month" do
|
558
|
-
subject.frequency_modifier 6
|
559
|
-
subject.day "1, 2"
|
560
|
-
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
561
|
-
call_for_create_action
|
562
|
-
current_resource = call_for_load_current_resource
|
563
|
-
expect(current_resource.exists).to eq(true)
|
564
|
-
trigger_details = current_resource.task.trigger(0)
|
565
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
566
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
567
|
-
expect(trigger_details[:type][:months]).to eq(2080)
|
568
|
-
expect(trigger_details[:type][:days]).to eq(3)
|
569
|
-
end
|
570
|
-
|
571
|
-
it "does not converge the resource if it is already converged" do
|
572
|
-
subject.frequency_modifier 6
|
573
|
-
subject.day "1, 2"
|
574
|
-
subject.run_action(:create)
|
575
|
-
subject.run_action(:create)
|
576
|
-
expect(subject).not_to be_updated_by_last_action
|
577
|
-
end
|
578
|
-
end
|
579
|
-
|
580
|
-
context "when day is set as last or lastday for frequency :monthly" do
|
581
|
-
subject do
|
582
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
583
|
-
new_resource.command task_name
|
584
|
-
new_resource.run_level :highest
|
585
|
-
new_resource.frequency :monthly
|
586
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
587
|
-
new_resource
|
588
|
-
end
|
589
|
-
|
590
|
-
it "creates scheduled task to run monthly to run last day of the month" do
|
591
|
-
subject.day "last"
|
592
|
-
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
593
|
-
call_for_create_action
|
594
|
-
current_resource = call_for_load_current_resource
|
595
|
-
expect(current_resource.exists).to eq(true)
|
596
|
-
trigger_details = current_resource.task.trigger(0)
|
597
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
598
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
599
|
-
expect(trigger_details[:type][:months]).to eq(4095)
|
600
|
-
expect(trigger_details[:type][:days]).to eq(0)
|
601
|
-
expect(trigger_details[:run_on_last_day_of_month]).to eq(true)
|
602
|
-
end
|
603
|
-
|
604
|
-
it "does not converge the resource if it is already converged" do
|
605
|
-
subject.day "last"
|
606
|
-
subject.run_action(:create)
|
607
|
-
subject.run_action(:create)
|
608
|
-
expect(subject).not_to be_updated_by_last_action
|
609
|
-
end
|
610
|
-
|
611
|
-
it "day property set as 'lastday' creates scheduled task to run monthly to run last day of the month" do
|
612
|
-
subject.day "lastday"
|
613
|
-
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
614
|
-
call_for_create_action
|
615
|
-
current_resource = call_for_load_current_resource
|
616
|
-
expect(current_resource.exists).to eq(true)
|
617
|
-
trigger_details = current_resource.task.trigger(0)
|
618
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
619
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
620
|
-
expect(trigger_details[:type][:months]).to eq(4095)
|
621
|
-
expect(trigger_details[:type][:days]).to eq(0)
|
622
|
-
expect(trigger_details[:run_on_last_day_of_month]).to eq(true)
|
623
|
-
end
|
624
|
-
|
625
|
-
it "does not converge the resource if it is already converged" do
|
626
|
-
subject.day "lastday"
|
627
|
-
subject.run_action(:create)
|
628
|
-
subject.run_action(:create)
|
629
|
-
expect(subject).not_to be_updated_by_last_action
|
630
|
-
end
|
631
|
-
end
|
632
|
-
|
633
|
-
context "when frequency_modifier is set as last for frequency :monthly" do
|
634
|
-
it "creates scheduled task to run monthly on last week of the month" do
|
635
|
-
subject.frequency_modifier "last"
|
636
|
-
subject.day "Mon, Fri"
|
637
|
-
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
638
|
-
call_for_create_action
|
639
|
-
current_resource = call_for_load_current_resource
|
640
|
-
expect(current_resource.exists).to eq(true)
|
641
|
-
trigger_details = current_resource.task.trigger(0)
|
642
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
643
|
-
expect(trigger_details[:trigger_type]).to eq(5)
|
644
|
-
expect(trigger_details[:type][:months]).to eq(4095)
|
645
|
-
expect(trigger_details[:type][:days_of_week]).to eq(34)
|
646
|
-
expect(trigger_details[:run_on_last_week_of_month]).to eq(true)
|
647
|
-
end
|
648
|
-
|
649
|
-
it "does not converge the resource if it is already converged" do
|
650
|
-
subject.frequency_modifier "last"
|
651
|
-
subject.day "Mon, Fri"
|
652
|
-
subject.run_action(:create)
|
653
|
-
subject.run_action(:create)
|
654
|
-
expect(subject).not_to be_updated_by_last_action
|
655
|
-
end
|
656
|
-
end
|
657
|
-
|
658
|
-
context "when wild card (*) set as months" do
|
659
|
-
it "creates the scheduled task to run on 1st day of the all months" do
|
660
|
-
subject.months "*"
|
661
|
-
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
662
|
-
call_for_create_action
|
663
|
-
current_resource = call_for_load_current_resource
|
664
|
-
expect(current_resource.exists).to eq(true)
|
665
|
-
trigger_details = current_resource.task.trigger(0)
|
666
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
667
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
668
|
-
expect(trigger_details[:type][:months]).to eq(4095)
|
669
|
-
expect(trigger_details[:type][:days]).to eq(1)
|
670
|
-
end
|
671
|
-
|
672
|
-
it "does not converge the resource if it is already converged" do
|
673
|
-
subject.months "*"
|
674
|
-
subject.run_action(:create)
|
675
|
-
subject.run_action(:create)
|
676
|
-
expect(subject).not_to be_updated_by_last_action
|
677
|
-
end
|
678
|
-
end
|
679
|
-
|
680
|
-
context "when wild card (*) set as day" do
|
681
|
-
it "raises argument error" do
|
682
|
-
subject.day "*"
|
683
|
-
expect { subject.after_created }.to raise_error("day wild card (*) is only valid with frequency :weekly")
|
684
|
-
end
|
685
|
-
end
|
686
|
-
|
687
|
-
context "Pass either start day or start time by passing day compulsory or only pass frequency_modifier" do
|
688
|
-
subject do
|
689
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
690
|
-
new_resource.command task_name
|
691
|
-
new_resource.run_level :highest
|
692
|
-
new_resource.frequency :monthly
|
693
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
694
|
-
new_resource
|
695
|
-
end
|
696
|
-
|
697
|
-
it "creates a scheduled task to run monthly on second day of the month" do
|
698
|
-
subject.day "2"
|
699
|
-
subject.start_day "03/07/2018"
|
700
|
-
call_for_create_action
|
701
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
702
|
-
current_resource = call_for_load_current_resource
|
703
|
-
expect(current_resource.exists).to eq(true)
|
704
|
-
trigger_details = current_resource.task.trigger(0)
|
705
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
706
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
707
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
708
|
-
expect(trigger_details[:type][:days]).to eq(2)
|
709
|
-
expect(trigger_details[:type][:months]).to eq(4095)
|
710
|
-
end
|
711
|
-
|
712
|
-
it "does not converge the resource if it is already converged" do
|
713
|
-
subject.day "2"
|
714
|
-
subject.start_day "03/07/2018"
|
715
|
-
subject.run_action(:create)
|
716
|
-
subject.run_action(:create)
|
717
|
-
expect(subject).not_to be_updated_by_last_action
|
718
|
-
end
|
719
|
-
|
720
|
-
it "creates a scheduled task to run monthly on first, second and third day of the month" do
|
721
|
-
subject.day "1,2,3"
|
722
|
-
call_for_create_action
|
723
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
724
|
-
current_resource = call_for_load_current_resource
|
725
|
-
expect(current_resource.exists).to eq(true)
|
726
|
-
trigger_details = current_resource.task.trigger(0)
|
727
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
728
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
729
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
730
|
-
expect(trigger_details[:type][:days]).to eq(7)
|
731
|
-
expect(trigger_details[:type][:months]).to eq(4095)
|
732
|
-
end
|
733
|
-
|
734
|
-
it "does not converge the resource if it is already converged" do
|
735
|
-
subject.day "1,2,3"
|
736
|
-
subject.run_action(:create)
|
737
|
-
subject.run_action(:create)
|
738
|
-
expect(subject).not_to be_updated_by_last_action
|
739
|
-
end
|
740
|
-
|
741
|
-
it "creates a scheduled task to run monthly on each wednesday of the month" do
|
742
|
-
subject.frequency_modifier "1"
|
743
|
-
call_for_create_action
|
744
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
745
|
-
current_resource = call_for_load_current_resource
|
746
|
-
expect(current_resource.exists).to eq(true)
|
747
|
-
trigger_details = current_resource.task.trigger(0)
|
748
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
749
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
750
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
751
|
-
expect(trigger_details[:type][:days]).to eq(1)
|
752
|
-
expect(trigger_details[:type][:months]).to eq(4095) # windows_task_provider.send(:months_of_year)
|
753
|
-
end
|
754
|
-
|
755
|
-
it "does not converge the resource if it is already converged" do
|
756
|
-
subject.frequency_modifier "2"
|
757
|
-
subject.run_action(:create)
|
758
|
-
subject.run_action(:create)
|
759
|
-
expect(subject).not_to be_updated_by_last_action
|
760
|
-
end
|
761
|
-
|
762
|
-
it "creates a scheduled task to run monthly on each wednesday of the month" do
|
763
|
-
subject.frequency_modifier "2"
|
764
|
-
subject.months = nil
|
765
|
-
call_for_create_action
|
766
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
767
|
-
current_resource = call_for_load_current_resource
|
768
|
-
expect(current_resource.exists).to eq(true)
|
769
|
-
trigger_details = current_resource.task.trigger(0)
|
770
|
-
# loading current resource
|
771
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
772
|
-
expect(trigger_details[:trigger_type]).to eq(4)
|
773
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
774
|
-
expect(trigger_details[:type][:days]).to eq(1)
|
775
|
-
expect(trigger_details[:type][:months]).to eq(2730) # windows_task_provider.send(:months_of_year)
|
776
|
-
end
|
777
|
-
|
778
|
-
it "does not converge the resource if it is already converged" do
|
779
|
-
subject.frequency_modifier "2"
|
780
|
-
subject.months = nil
|
781
|
-
subject.run_action(:create)
|
782
|
-
subject.run_action(:create)
|
783
|
-
expect(subject).not_to be_updated_by_last_action
|
784
|
-
end
|
785
|
-
end
|
786
|
-
end
|
787
|
-
|
788
|
-
## ToDO: Add functional specs to handle frequency monthly with frequency modifier set as 1-12
|
789
|
-
context "frequency :once" do
|
790
|
-
subject do
|
791
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
792
|
-
new_resource.command task_name
|
793
|
-
new_resource.run_level :highest
|
794
|
-
new_resource.frequency :once
|
795
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
796
|
-
new_resource
|
797
|
-
end
|
798
|
-
|
799
|
-
context "when start_time is not provided" do
|
800
|
-
it "raises argument error" do
|
801
|
-
expect { subject.after_created }.to raise_error("`start_time` needs to be provided with `frequency :once`")
|
802
|
-
end
|
803
|
-
end
|
804
|
-
|
805
|
-
context "when start_time is provided" do
|
806
|
-
it "creates the scheduled task to run once at 5pm" do
|
807
|
-
subject.start_time "17:00"
|
808
|
-
call_for_create_action
|
809
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
810
|
-
current_resource = call_for_load_current_resource
|
811
|
-
expect(current_resource.exists).to eq(true)
|
812
|
-
trigger_details = current_resource.task.trigger(0)
|
813
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
814
|
-
expect(trigger_details[:trigger_type]).to eq(1)
|
815
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
816
|
-
expect("#{trigger_details[:start_hour]}:#{trigger_details[:start_minute]}" ).to eq(subject.start_time)
|
817
|
-
end
|
818
|
-
|
819
|
-
it "does not converge the resource if it is already converged" do
|
820
|
-
subject.start_time "17:00"
|
821
|
-
subject.run_action(:create)
|
822
|
-
subject.run_action(:create)
|
823
|
-
expect(subject).not_to be_updated_by_last_action
|
824
|
-
end
|
825
|
-
end
|
826
|
-
end
|
827
|
-
|
828
|
-
context "frequency :weekly" do
|
829
|
-
subject do
|
830
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
831
|
-
new_resource.command task_name
|
832
|
-
new_resource.run_level :highest
|
833
|
-
new_resource.frequency :weekly
|
834
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
835
|
-
new_resource
|
836
|
-
end
|
837
|
-
|
838
|
-
it "creates the scheduled task to run weekly" do
|
839
|
-
call_for_create_action
|
840
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
841
|
-
current_resource = call_for_load_current_resource
|
842
|
-
expect(current_resource.exists).to eq(true)
|
843
|
-
trigger_details = current_resource.task.trigger(0)
|
844
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
845
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
846
|
-
expect(trigger_details[:trigger_type]).to eq(3)
|
847
|
-
expect(trigger_details[:type][:weeks_interval]).to eq(1)
|
848
|
-
end
|
849
|
-
|
850
|
-
it "does not converge the resource if it is already converged" do
|
851
|
-
subject.run_action(:create)
|
852
|
-
subject.run_action(:create)
|
853
|
-
expect(subject).not_to be_updated_by_last_action
|
854
|
-
end
|
855
|
-
|
856
|
-
context "when wild card (*) is set as day" do
|
857
|
-
it "creates hte scheduled task for all days of week" do
|
858
|
-
subject.day "*"
|
859
|
-
call_for_create_action
|
860
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
861
|
-
current_resource = call_for_load_current_resource
|
862
|
-
expect(current_resource.exists).to eq(true)
|
863
|
-
trigger_details = current_resource.task.trigger(0)
|
864
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
865
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
866
|
-
expect(trigger_details[:trigger_type]).to eq(3)
|
867
|
-
expect(trigger_details[:type][:weeks_interval]).to eq(1)
|
868
|
-
expect(trigger_details[:type][:days_of_week]).to eq(127)
|
869
|
-
end
|
870
|
-
|
871
|
-
it "does not converge the resource if it is already converged" do
|
872
|
-
subject.day "*"
|
873
|
-
subject.run_action(:create)
|
874
|
-
subject.run_action(:create)
|
875
|
-
expect(subject).not_to be_updated_by_last_action
|
876
|
-
end
|
877
|
-
end
|
878
|
-
|
879
|
-
context "when days are provided" do
|
880
|
-
it "creates the scheduled task to run on particular days" do
|
881
|
-
subject.day "Mon, Fri"
|
882
|
-
subject.frequency_modifier 2
|
883
|
-
call_for_create_action
|
884
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
885
|
-
current_resource = call_for_load_current_resource
|
886
|
-
expect(current_resource.exists).to eq(true)
|
887
|
-
trigger_details = current_resource.task.trigger(0)
|
888
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
889
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
890
|
-
expect(trigger_details[:trigger_type]).to eq(3)
|
891
|
-
expect(trigger_details[:type][:weeks_interval]).to eq(2)
|
892
|
-
expect(trigger_details[:type][:days_of_week]).to eq(34)
|
893
|
-
end
|
894
|
-
|
895
|
-
it "updates the scheduled task to run on if frequency_modifier is updated" do
|
896
|
-
subject.day "sun"
|
897
|
-
subject.frequency_modifier 2
|
898
|
-
subject.run_action(:create)
|
899
|
-
current_resource = call_for_load_current_resource
|
900
|
-
trigger_details = current_resource.task.trigger(0)
|
901
|
-
expect(trigger_details[:type][:weeks_interval]).to eq(2)
|
902
|
-
expect(trigger_details[:type][:days_of_week]).to eq(1)
|
903
|
-
subject.day "Mon, Sun"
|
904
|
-
subject.frequency_modifier 3
|
905
|
-
# call for update
|
906
|
-
subject.run_action(:create)
|
907
|
-
expect(subject).to be_updated_by_last_action
|
908
|
-
current_resource = call_for_load_current_resource
|
909
|
-
expect(current_resource.exists).to eq(true)
|
910
|
-
trigger_details = current_resource.task.trigger(0)
|
911
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
912
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
913
|
-
expect(trigger_details[:trigger_type]).to eq(3)
|
914
|
-
expect(trigger_details[:type][:weeks_interval]).to eq(3)
|
915
|
-
expect(trigger_details[:type][:days_of_week]).to eq(3)
|
916
|
-
end
|
917
|
-
|
918
|
-
it "does not converge the resource if it is already converged" do
|
919
|
-
subject.day "Mon, Fri"
|
920
|
-
subject.frequency_modifier 3
|
921
|
-
subject.run_action(:create)
|
922
|
-
subject.run_action(:create)
|
923
|
-
expect(subject).not_to be_updated_by_last_action
|
924
|
-
end
|
925
|
-
end
|
926
|
-
|
927
|
-
context "when day property set as last" do
|
928
|
-
it "raises argument error" do
|
929
|
-
subject.day "last"
|
930
|
-
expect { subject.after_created }.to raise_error("day values 1-31 or last is only valid with frequency :monthly")
|
931
|
-
end
|
932
|
-
end
|
933
|
-
|
934
|
-
context "when invalid day is passed" do
|
935
|
-
it "raises error" do
|
936
|
-
subject.day "abc"
|
937
|
-
expect { subject.after_created }.to raise_error("day property invalid. Only valid values are: MON, TUE, WED, THU, FRI, SAT, SUN, *. Multiple values must be separated by a comma.")
|
938
|
-
end
|
939
|
-
end
|
940
|
-
|
941
|
-
context "when months are passed" do
|
942
|
-
it "raises error that months are supported only when frequency=:monthly" do
|
943
|
-
subject.months "Jan"
|
944
|
-
expect { subject.after_created }.to raise_error("months property is only valid for tasks that run monthly")
|
945
|
-
end
|
946
|
-
end
|
947
|
-
|
948
|
-
context "when start_day is not set" do
|
949
|
-
it "does not converge the resource if it is already converged" do
|
950
|
-
subject.run_action(:create)
|
951
|
-
subject.run_action(:create)
|
952
|
-
expect(subject).not_to be_updated_by_last_action
|
953
|
-
end
|
954
|
-
|
955
|
-
it "updates the day if start_day is not provided and user updates day property" do
|
956
|
-
skip "Unable to run this test case since start_day is current system date which can be different each time so can't verify the dynamic values"
|
957
|
-
subject.run_action(:create)
|
958
|
-
current_resource = call_for_load_current_resource
|
959
|
-
expect(current_resource.exists).to eq(true)
|
960
|
-
trigger_details = current_resource.task.trigger(0)
|
961
|
-
expect(trigger_details[:type][:days_of_week]).to eq(8)
|
962
|
-
subject.day "Sat"
|
963
|
-
subject.run_action(:create)
|
964
|
-
# #loading current resource again to check new task is creted and it matches task parameters
|
965
|
-
current_resource = call_for_load_current_resource
|
966
|
-
expect(current_resource.exists).to eq(true)
|
967
|
-
trigger_details = current_resource.task.trigger(0)
|
968
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
969
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
970
|
-
expect(trigger_details[:trigger_type]).to eq(3)
|
971
|
-
expect(trigger_details[:type][:weeks_interval]).to eq(1)
|
972
|
-
expect(trigger_details[:type][:days_of_week]).to eq(64)
|
973
|
-
end
|
974
|
-
end
|
975
|
-
end
|
976
|
-
|
977
|
-
context "frequency :onstart" do
|
978
|
-
subject do
|
979
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
980
|
-
new_resource.command task_name
|
981
|
-
new_resource.run_level :highest
|
982
|
-
new_resource.frequency :onstart
|
983
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
984
|
-
new_resource
|
985
|
-
end
|
986
|
-
|
987
|
-
it "creates the scheduled task to run at system start up" do
|
988
|
-
call_for_create_action
|
989
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
990
|
-
current_resource = call_for_load_current_resource
|
991
|
-
expect(current_resource.exists).to eq(true)
|
992
|
-
trigger_details = current_resource.task.trigger(0)
|
993
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
994
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
995
|
-
expect(trigger_details[:trigger_type]).to eq(8)
|
996
|
-
end
|
997
|
-
|
998
|
-
it "does not converge the resource if it is already converged" do
|
999
|
-
subject.run_action(:create)
|
1000
|
-
subject.run_action(:create)
|
1001
|
-
expect(subject).not_to be_updated_by_last_action
|
1002
|
-
end
|
1003
|
-
|
1004
|
-
context "when start_day and start_time is set" do
|
1005
|
-
it "creates task to activate on '09/10/2018' at '15:00' when start_day = '09/10/2018' and start_time = '15:00' provided" do
|
1006
|
-
subject.start_day "09/10/2018"
|
1007
|
-
subject.start_time "15:00"
|
1008
|
-
call_for_create_action
|
1009
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
1010
|
-
current_resource = call_for_load_current_resource
|
1011
|
-
expect(current_resource.exists).to eq(true)
|
1012
|
-
trigger_details = current_resource.task.trigger(0)
|
1013
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
1014
|
-
expect(trigger_details[:trigger_type]).to eq(8)
|
1015
|
-
expect(trigger_details[:start_year]).to eq("2018")
|
1016
|
-
expect(trigger_details[:start_month]).to eq("09")
|
1017
|
-
expect(trigger_details[:start_day]).to eq("10")
|
1018
|
-
expect(trigger_details[:start_hour]).to eq("15")
|
1019
|
-
expect(trigger_details[:start_minute]).to eq("00")
|
1020
|
-
end
|
1021
|
-
end
|
1022
|
-
end
|
1023
|
-
|
1024
|
-
context "frequency :on_logon" do
|
1025
|
-
subject do
|
1026
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1027
|
-
new_resource.command task_name
|
1028
|
-
new_resource.run_level :highest
|
1029
|
-
new_resource.frequency :on_logon
|
1030
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1031
|
-
new_resource
|
1032
|
-
end
|
1033
|
-
|
1034
|
-
it "creates the scheduled task to on logon" do
|
1035
|
-
call_for_create_action
|
1036
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
1037
|
-
current_resource = call_for_load_current_resource
|
1038
|
-
expect(current_resource.exists).to eq(true)
|
1039
|
-
trigger_details = current_resource.task.trigger(0)
|
1040
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
1041
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
1042
|
-
expect(trigger_details[:trigger_type]).to eq(9)
|
1043
|
-
end
|
1044
|
-
|
1045
|
-
it "does not converge the resource if it is already converged" do
|
1046
|
-
subject.run_action(:create)
|
1047
|
-
subject.run_action(:create)
|
1048
|
-
expect(subject).not_to be_updated_by_last_action
|
1049
|
-
end
|
1050
|
-
|
1051
|
-
context "when start_day and start_time is set" do
|
1052
|
-
it "creates task to activate on '09/10/2018' at '15:00' when start_day = '09/10/2018' and start_time = '15:00' provided" do
|
1053
|
-
subject.start_day "09/10/2018"
|
1054
|
-
subject.start_time "15:00"
|
1055
|
-
call_for_create_action
|
1056
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
1057
|
-
current_resource = call_for_load_current_resource
|
1058
|
-
expect(current_resource.exists).to eq(true)
|
1059
|
-
trigger_details = current_resource.task.trigger(0)
|
1060
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
1061
|
-
expect(trigger_details[:trigger_type]).to eq(9)
|
1062
|
-
expect(trigger_details[:start_year]).to eq("2018")
|
1063
|
-
expect(trigger_details[:start_month]).to eq("09")
|
1064
|
-
expect(trigger_details[:start_day]).to eq("10")
|
1065
|
-
expect(trigger_details[:start_hour]).to eq("15")
|
1066
|
-
expect(trigger_details[:start_minute]).to eq("00")
|
1067
|
-
end
|
1068
|
-
end
|
1069
|
-
end
|
1070
|
-
|
1071
|
-
context "frequency :on_idle" do
|
1072
|
-
subject do
|
1073
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1074
|
-
new_resource.command task_name
|
1075
|
-
new_resource.run_level :highest
|
1076
|
-
new_resource.frequency :on_idle
|
1077
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1078
|
-
new_resource
|
1079
|
-
end
|
1080
|
-
|
1081
|
-
context "when idle_time is not passed" do
|
1082
|
-
it "raises error" do
|
1083
|
-
expect { subject.after_created }.to raise_error("idle_time value should be set for :on_idle frequency.")
|
1084
|
-
end
|
1085
|
-
end
|
1086
|
-
|
1087
|
-
context "when idle_time is passed" do
|
1088
|
-
it "creates the scheduled task to run when system is idle" do
|
1089
|
-
subject.idle_time 20
|
1090
|
-
call_for_create_action
|
1091
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
1092
|
-
current_resource = call_for_load_current_resource
|
1093
|
-
expect(current_resource.exists).to eq(true)
|
1094
|
-
trigger_details = current_resource.task.trigger(0)
|
1095
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
1096
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
1097
|
-
expect(trigger_details[:trigger_type]).to eq(6)
|
1098
|
-
expect(current_resource.task.settings[:idle_settings][:idle_duration]).to eq("PT20M")
|
1099
|
-
expect(current_resource.task.settings[:run_only_if_idle]).to eq(true)
|
1100
|
-
end
|
1101
|
-
|
1102
|
-
it "does not converge the resource if it is already converged" do
|
1103
|
-
subject.idle_time 20
|
1104
|
-
subject.run_action(:create)
|
1105
|
-
subject.run_action(:create)
|
1106
|
-
expect(subject).not_to be_updated_by_last_action
|
1107
|
-
end
|
1108
|
-
end
|
1109
|
-
|
1110
|
-
context "when start_day and start_time is set" do
|
1111
|
-
it "creates task to activate on '09/10/2018' at '15:00' when start_day = '09/10/2018' and start_time = '15:00' provided" do
|
1112
|
-
subject.idle_time 20
|
1113
|
-
subject.start_day "09/10/2018"
|
1114
|
-
subject.start_time "15:00"
|
1115
|
-
call_for_create_action
|
1116
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
1117
|
-
current_resource = call_for_load_current_resource
|
1118
|
-
expect(current_resource.exists).to eq(true)
|
1119
|
-
trigger_details = current_resource.task.trigger(0)
|
1120
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
1121
|
-
expect(trigger_details[:trigger_type]).to eq(6)
|
1122
|
-
expect(trigger_details[:start_year]).to eq("2018")
|
1123
|
-
expect(trigger_details[:start_month]).to eq("09")
|
1124
|
-
expect(trigger_details[:start_day]).to eq("10")
|
1125
|
-
expect(trigger_details[:start_hour]).to eq("15")
|
1126
|
-
expect(trigger_details[:start_minute]).to eq("00")
|
1127
|
-
end
|
1128
|
-
end
|
1129
|
-
end
|
1130
|
-
|
1131
|
-
context "when random_delay is passed" do
|
1132
|
-
subject do
|
1133
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1134
|
-
new_resource.command task_name
|
1135
|
-
new_resource.run_level :highest
|
1136
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1137
|
-
new_resource
|
1138
|
-
end
|
1139
|
-
|
1140
|
-
it "sets the random_delay for frequency :minute" do
|
1141
|
-
subject.frequency :minute
|
1142
|
-
subject.random_delay "20"
|
1143
|
-
call_for_create_action
|
1144
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
1145
|
-
current_resource = call_for_load_current_resource
|
1146
|
-
expect(current_resource.exists).to eq(true)
|
1147
|
-
trigger_details = current_resource.task.trigger(0)
|
1148
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
1149
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
1150
|
-
expect(trigger_details[:trigger_type]).to eq(1)
|
1151
|
-
expect(trigger_details[:random_minutes_interval]).to eq(20)
|
1152
|
-
end
|
1153
|
-
|
1154
|
-
it "does not converge the resource if it is already converged" do
|
1155
|
-
subject.frequency :minute
|
1156
|
-
subject.random_delay "20"
|
1157
|
-
subject.run_action(:create)
|
1158
|
-
subject.run_action(:create)
|
1159
|
-
expect(subject).not_to be_updated_by_last_action
|
1160
|
-
end
|
1161
|
-
|
1162
|
-
it "raises error if invalid random_delay is passed" do
|
1163
|
-
subject.frequency :minute
|
1164
|
-
subject.random_delay "abc"
|
1165
|
-
expect { subject.after_created }.to raise_error("Invalid value passed for `random_delay`. Please pass seconds as an Integer (e.g. 60) or a String with numeric values only (e.g. '60').")
|
1166
|
-
end
|
1167
|
-
|
1168
|
-
it "raises error if random_delay is passed with frequency on_idle" do
|
1169
|
-
subject.frequency :on_idle
|
1170
|
-
subject.random_delay "20"
|
1171
|
-
expect { subject.after_created }.to raise_error("`random_delay` property is supported only for frequency :once, :minute, :hourly, :daily, :weekly and :monthly")
|
1172
|
-
end
|
1173
|
-
end
|
1174
|
-
|
1175
|
-
context "when battery options are passed" do
|
1176
|
-
subject do
|
1177
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1178
|
-
new_resource.command task_name
|
1179
|
-
new_resource.run_level :highest
|
1180
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1181
|
-
new_resource
|
1182
|
-
end
|
1183
|
-
|
1184
|
-
it "sets the default if options are not provided" do
|
1185
|
-
subject.frequency :minute
|
1186
|
-
call_for_create_action
|
1187
|
-
# loading current resource again to check new task is created and it matches task parameters
|
1188
|
-
current_resource = call_for_load_current_resource
|
1189
|
-
expect(current_resource.exists).to eq(true)
|
1190
|
-
expect(current_resource.stop_if_going_on_batteries).to eql(false)
|
1191
|
-
expect(current_resource.disallow_start_if_on_batteries).to eql(false)
|
1192
|
-
end
|
1193
|
-
|
1194
|
-
it "sets disallow_start_if_on_batteries to true" do
|
1195
|
-
subject.frequency :minute
|
1196
|
-
subject.disallow_start_if_on_batteries true
|
1197
|
-
call_for_create_action
|
1198
|
-
# loading current resource again to check new task is created and it matches task parameters
|
1199
|
-
current_resource = call_for_load_current_resource
|
1200
|
-
expect(current_resource.exists).to eq(true)
|
1201
|
-
expect(current_resource.task.settings[:disallow_start_if_on_batteries]).to eql(true)
|
1202
|
-
end
|
1203
|
-
|
1204
|
-
it "sets disallow_start_if_on_batteries to false" do
|
1205
|
-
subject.frequency :minute
|
1206
|
-
subject.disallow_start_if_on_batteries false
|
1207
|
-
call_for_create_action
|
1208
|
-
# loading current resource again to check new task is created and it matches task parameters
|
1209
|
-
current_resource = call_for_load_current_resource
|
1210
|
-
expect(current_resource.exists).to eq(true)
|
1211
|
-
expect(current_resource.task.settings[:disallow_start_if_on_batteries]).to eql(false)
|
1212
|
-
end
|
1213
|
-
|
1214
|
-
it "sets stop_if_going_on_batteries to true" do
|
1215
|
-
subject.frequency :minute
|
1216
|
-
subject.stop_if_going_on_batteries true
|
1217
|
-
call_for_create_action
|
1218
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
1219
|
-
current_resource = call_for_load_current_resource
|
1220
|
-
expect(current_resource.exists).to eq(true)
|
1221
|
-
expect(current_resource.task.settings[:stop_if_going_on_batteries]).to eql(true)
|
1222
|
-
end
|
1223
|
-
|
1224
|
-
it "sets stop_if_going_on_batteries to false" do
|
1225
|
-
subject.frequency :minute
|
1226
|
-
subject.stop_if_going_on_batteries false
|
1227
|
-
call_for_create_action
|
1228
|
-
# loading current resource again to check new task is created and it matches task parameters
|
1229
|
-
current_resource = call_for_load_current_resource
|
1230
|
-
expect(current_resource.exists).to eq(true)
|
1231
|
-
expect(current_resource.task.settings[:stop_if_going_on_batteries]).to eql(false)
|
1232
|
-
end
|
1233
|
-
|
1234
|
-
it "sets the default if options are nil" do
|
1235
|
-
subject.frequency :minute
|
1236
|
-
subject.stop_if_going_on_batteries nil
|
1237
|
-
subject.disallow_start_if_on_batteries nil
|
1238
|
-
call_for_create_action
|
1239
|
-
# loading current resource again to check new task is created and it matches task parameters
|
1240
|
-
current_resource = call_for_load_current_resource
|
1241
|
-
expect(current_resource.exists).to eq(true)
|
1242
|
-
expect(current_resource.task.settings[:stop_if_going_on_batteries]).to eql(false)
|
1243
|
-
expect(current_resource.task.settings[:disallow_start_if_on_batteries]).to eql(false)
|
1244
|
-
end
|
1245
|
-
|
1246
|
-
it "does not converge the resource if it is already converged" do
|
1247
|
-
subject.frequency :minute
|
1248
|
-
subject.stop_if_going_on_batteries true
|
1249
|
-
subject.disallow_start_if_on_batteries false
|
1250
|
-
subject.run_action(:create)
|
1251
|
-
subject.frequency :minute
|
1252
|
-
subject.stop_if_going_on_batteries true
|
1253
|
-
subject.disallow_start_if_on_batteries false
|
1254
|
-
subject.run_action(:create)
|
1255
|
-
expect(subject).not_to be_updated_by_last_action
|
1256
|
-
end
|
1257
|
-
end
|
1258
|
-
|
1259
|
-
context "frequency :none" do
|
1260
|
-
subject do
|
1261
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1262
|
-
new_resource.command task_name
|
1263
|
-
new_resource.run_level :highest
|
1264
|
-
new_resource.frequency :none
|
1265
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1266
|
-
new_resource
|
1267
|
-
end
|
1268
|
-
|
1269
|
-
it "creates the scheduled task to run on demand only" do
|
1270
|
-
call_for_create_action
|
1271
|
-
# loading current resource again to check new task is creted and it matches task parameters
|
1272
|
-
current_resource = call_for_load_current_resource
|
1273
|
-
expect(current_resource.exists).to eq(true)
|
1274
|
-
|
1275
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
1276
|
-
expect(current_resource.task.principals[:run_level]).to eq(1)
|
1277
|
-
expect(current_resource.task.trigger_count).to eq(0)
|
1278
|
-
end
|
1279
|
-
|
1280
|
-
it "does not converge the resource if it is already converged" do
|
1281
|
-
subject.run_action(:create)
|
1282
|
-
subject.run_action(:create)
|
1283
|
-
expect(subject).not_to be_updated_by_last_action
|
1284
|
-
end
|
1285
|
-
end
|
1286
|
-
end
|
1287
|
-
|
1288
|
-
context "task_name with parent folder" do
|
1289
|
-
describe "task_name with path '\\foo\\chef-client-functional-test' " do
|
1290
|
-
let(:task_name) { "\\foo\\chef-client-functional-test" }
|
1291
|
-
after { delete_task }
|
1292
|
-
subject do
|
1293
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1294
|
-
new_resource.command task_name
|
1295
|
-
new_resource.run_level :highest
|
1296
|
-
new_resource.frequency :once
|
1297
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1298
|
-
new_resource
|
1299
|
-
end
|
1300
|
-
|
1301
|
-
it "creates the scheduled task with task name 'chef-client-functional-test' inside path '\\foo'" do
|
1302
|
-
call_for_create_action
|
1303
|
-
current_resource = call_for_load_current_resource
|
1304
|
-
expect(current_resource.exists).to eq(true)
|
1305
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
1306
|
-
end
|
1307
|
-
|
1308
|
-
it "does not converge the resource if it is already converged" do
|
1309
|
-
subject.run_action(:create)
|
1310
|
-
subject.run_action(:create)
|
1311
|
-
expect(subject).not_to be_updated_by_last_action
|
1312
|
-
end
|
1313
|
-
end
|
1314
|
-
|
1315
|
-
describe "task_name with path '\\foo\\bar\\chef-client-functional-test' " do
|
1316
|
-
let(:task_name) { "\\foo\\bar\\chef-client-functional-test" }
|
1317
|
-
after { delete_task }
|
1318
|
-
subject do
|
1319
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1320
|
-
new_resource.command task_name
|
1321
|
-
new_resource.run_level :highest
|
1322
|
-
new_resource.frequency :once
|
1323
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1324
|
-
new_resource
|
1325
|
-
end
|
1326
|
-
|
1327
|
-
it "creates the scheduled task with task with name 'chef-client-functional-test' inside path '\\foo\\bar' " do
|
1328
|
-
call_for_create_action
|
1329
|
-
current_resource = call_for_load_current_resource
|
1330
|
-
expect(current_resource.exists).to eq(true)
|
1331
|
-
expect(current_resource.task.application_name).to eq(task_name)
|
1332
|
-
end
|
1333
|
-
|
1334
|
-
it "does not converge the resource if it is already converged" do
|
1335
|
-
subject.run_action(:create)
|
1336
|
-
subject.run_action(:create)
|
1337
|
-
expect(subject).not_to be_updated_by_last_action
|
1338
|
-
end
|
1339
|
-
end
|
1340
|
-
end
|
1341
|
-
|
1342
|
-
describe "priority" do
|
1343
|
-
after { delete_task }
|
1344
|
-
subject do
|
1345
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1346
|
-
new_resource.command task_name
|
1347
|
-
new_resource.frequency :once
|
1348
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1349
|
-
new_resource
|
1350
|
-
end
|
1351
|
-
|
1352
|
-
it "default sets to 7" do
|
1353
|
-
call_for_create_action
|
1354
|
-
current_resource = call_for_load_current_resource
|
1355
|
-
expect(current_resource.task.priority).to eq("below_normal_7")
|
1356
|
-
end
|
1357
|
-
|
1358
|
-
it "0 sets priority level to critical" do
|
1359
|
-
subject.priority = 0
|
1360
|
-
call_for_create_action
|
1361
|
-
current_resource = call_for_load_current_resource
|
1362
|
-
expect(current_resource.task.priority).to eq("critical")
|
1363
|
-
end
|
1364
|
-
|
1365
|
-
it "2 sets priority level to highest" do
|
1366
|
-
subject.priority = 1
|
1367
|
-
call_for_create_action
|
1368
|
-
current_resource = call_for_load_current_resource
|
1369
|
-
expect(current_resource.task.priority).to eq("highest")
|
1370
|
-
end
|
1371
|
-
|
1372
|
-
it "2 sets priority level to above_normal" do
|
1373
|
-
subject.priority = 2
|
1374
|
-
call_for_create_action
|
1375
|
-
current_resource = call_for_load_current_resource
|
1376
|
-
expect(current_resource.task.priority).to eq("above_normal_2")
|
1377
|
-
end
|
1378
|
-
|
1379
|
-
it "3 sets priority level to above_normal" do
|
1380
|
-
subject.priority = 3
|
1381
|
-
call_for_create_action
|
1382
|
-
current_resource = call_for_load_current_resource
|
1383
|
-
expect(current_resource.task.priority).to eq("above_normal_3")
|
1384
|
-
end
|
1385
|
-
|
1386
|
-
it "4 sets priority level to normal" do
|
1387
|
-
subject.priority = 4
|
1388
|
-
call_for_create_action
|
1389
|
-
current_resource = call_for_load_current_resource
|
1390
|
-
expect(current_resource.task.priority).to eq("normal_4")
|
1391
|
-
end
|
1392
|
-
|
1393
|
-
it "5 sets priority level to normal" do
|
1394
|
-
subject.priority = 5
|
1395
|
-
call_for_create_action
|
1396
|
-
current_resource = call_for_load_current_resource
|
1397
|
-
expect(current_resource.task.priority).to eq("normal_5")
|
1398
|
-
end
|
1399
|
-
|
1400
|
-
it "6 sets priority level to normal" do
|
1401
|
-
subject.priority = 6
|
1402
|
-
call_for_create_action
|
1403
|
-
current_resource = call_for_load_current_resource
|
1404
|
-
expect(current_resource.task.priority).to eq("normal_6")
|
1405
|
-
end
|
1406
|
-
|
1407
|
-
it "7 sets priority level to below_normal" do
|
1408
|
-
subject.priority = 7
|
1409
|
-
call_for_create_action
|
1410
|
-
current_resource = call_for_load_current_resource
|
1411
|
-
expect(current_resource.task.priority).to eq("below_normal_7")
|
1412
|
-
end
|
1413
|
-
|
1414
|
-
it "8 sets priority level to below_normal" do
|
1415
|
-
subject.priority = 8
|
1416
|
-
call_for_create_action
|
1417
|
-
current_resource = call_for_load_current_resource
|
1418
|
-
expect(current_resource.task.priority).to eq("below_normal_8")
|
1419
|
-
end
|
1420
|
-
|
1421
|
-
it "9 sets priority level to lowest" do
|
1422
|
-
subject.priority = 9
|
1423
|
-
call_for_create_action
|
1424
|
-
current_resource = call_for_load_current_resource
|
1425
|
-
expect(current_resource.task.priority).to eq("lowest")
|
1426
|
-
end
|
1427
|
-
|
1428
|
-
it "10 sets priority level to idle" do
|
1429
|
-
subject.priority = 10
|
1430
|
-
call_for_create_action
|
1431
|
-
current_resource = call_for_load_current_resource
|
1432
|
-
expect(current_resource.task.priority).to eq("idle")
|
1433
|
-
end
|
1434
|
-
|
1435
|
-
it "is idempotent" do
|
1436
|
-
subject.priority 8
|
1437
|
-
subject.run_action(:create)
|
1438
|
-
subject.run_action(:create)
|
1439
|
-
expect(subject).not_to be_updated_by_last_action
|
1440
|
-
end
|
1441
|
-
|
1442
|
-
end
|
1443
|
-
|
1444
|
-
describe "Examples of idempotent checks for each frequency" do
|
1445
|
-
after { delete_task }
|
1446
|
-
context "For frequency :once" do
|
1447
|
-
subject do
|
1448
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1449
|
-
new_resource.command task_name
|
1450
|
-
new_resource.run_level :highest
|
1451
|
-
new_resource.frequency :once
|
1452
|
-
new_resource.start_time "17:00"
|
1453
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1454
|
-
new_resource
|
1455
|
-
end
|
1456
|
-
|
1457
|
-
it "create task by adding frequency_modifier as 1" do
|
1458
|
-
subject.frequency_modifier 1
|
1459
|
-
subject.run_action(:create)
|
1460
|
-
subject.run_action(:create)
|
1461
|
-
expect(subject).not_to be_updated_by_last_action
|
1462
|
-
end
|
1463
|
-
|
1464
|
-
it "create task by adding frequency_modifier as 5" do
|
1465
|
-
subject.frequency_modifier 5
|
1466
|
-
subject.run_action(:create)
|
1467
|
-
subject.run_action(:create)
|
1468
|
-
expect(subject).not_to be_updated_by_last_action
|
1469
|
-
end
|
1470
|
-
end
|
1471
|
-
|
1472
|
-
context "For frequency :none" do
|
1473
|
-
subject do
|
1474
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1475
|
-
new_resource.command task_name
|
1476
|
-
new_resource.run_level :highest
|
1477
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1478
|
-
new_resource.frequency :none
|
1479
|
-
new_resource
|
1480
|
-
end
|
1481
|
-
|
1482
|
-
it "create task by adding frequency_modifier as 1" do
|
1483
|
-
subject.frequency_modifier 1
|
1484
|
-
subject.run_action(:create)
|
1485
|
-
subject.run_action(:create)
|
1486
|
-
expect(subject).not_to be_updated_by_last_action
|
1487
|
-
end
|
1488
|
-
|
1489
|
-
it "create task by adding frequency_modifier as 5" do
|
1490
|
-
subject.frequency_modifier 5
|
1491
|
-
subject.run_action(:create)
|
1492
|
-
subject.run_action(:create)
|
1493
|
-
expect(subject).not_to be_updated_by_last_action
|
1494
|
-
end
|
1495
|
-
end
|
1496
|
-
|
1497
|
-
context "For frequency :weekly" do
|
1498
|
-
subject do
|
1499
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1500
|
-
new_resource.command task_name
|
1501
|
-
new_resource.run_level :highest
|
1502
|
-
new_resource.frequency :weekly
|
1503
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1504
|
-
new_resource
|
1505
|
-
end
|
1506
|
-
|
1507
|
-
it "create task by adding start_day" do
|
1508
|
-
subject.start_day "12/28/2018"
|
1509
|
-
subject.run_action(:create)
|
1510
|
-
subject.run_action(:create)
|
1511
|
-
expect(subject).not_to be_updated_by_last_action
|
1512
|
-
end
|
1513
|
-
|
1514
|
-
it "create task by adding frequency_modifier and random_delay" do
|
1515
|
-
subject.frequency_modifier 3
|
1516
|
-
subject.random_delay "60"
|
1517
|
-
subject.run_action(:create)
|
1518
|
-
subject.run_action(:create)
|
1519
|
-
expect(subject).not_to be_updated_by_last_action
|
1520
|
-
end
|
1521
|
-
end
|
1522
|
-
|
1523
|
-
context "For frequency :monthly" do
|
1524
|
-
subject do
|
1525
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1526
|
-
new_resource.command task_name
|
1527
|
-
new_resource.run_level :highest
|
1528
|
-
new_resource.frequency :once
|
1529
|
-
new_resource.start_time "17:00"
|
1530
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1531
|
-
new_resource
|
1532
|
-
end
|
1533
|
-
|
1534
|
-
it "create task by adding frequency_modifier as 1" do
|
1535
|
-
subject.frequency_modifier 1
|
1536
|
-
subject.run_action(:create)
|
1537
|
-
subject.run_action(:create)
|
1538
|
-
expect(subject).not_to be_updated_by_last_action
|
1539
|
-
end
|
1540
|
-
|
1541
|
-
it "create task by adding frequency_modifier as 5" do
|
1542
|
-
subject.frequency_modifier 5
|
1543
|
-
subject.run_action(:create)
|
1544
|
-
subject.run_action(:create)
|
1545
|
-
expect(subject).not_to be_updated_by_last_action
|
1546
|
-
end
|
1547
|
-
end
|
1548
|
-
|
1549
|
-
context "For frequency :hourly" do
|
1550
|
-
subject do
|
1551
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1552
|
-
new_resource.command task_name
|
1553
|
-
new_resource.run_level :highest
|
1554
|
-
new_resource.frequency :hourly
|
1555
|
-
new_resource.frequency_modifier 5
|
1556
|
-
new_resource.random_delay "2400"
|
1557
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1558
|
-
new_resource
|
1559
|
-
end
|
1560
|
-
|
1561
|
-
it "create task by adding frequency_modifier and random_delay" do
|
1562
|
-
subject.run_action(:create)
|
1563
|
-
subject.run_action(:create)
|
1564
|
-
expect(subject).not_to be_updated_by_last_action
|
1565
|
-
end
|
1566
|
-
end
|
1567
|
-
|
1568
|
-
context "For frequency :daily" do
|
1569
|
-
subject do
|
1570
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1571
|
-
new_resource.command task_name
|
1572
|
-
new_resource.run_level :highest
|
1573
|
-
new_resource.frequency :daily
|
1574
|
-
new_resource.frequency_modifier 2
|
1575
|
-
new_resource.random_delay "2400"
|
1576
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1577
|
-
new_resource
|
1578
|
-
end
|
1579
|
-
|
1580
|
-
it "create task by adding frequency_modifier and random_delay" do
|
1581
|
-
subject.run_action(:create)
|
1582
|
-
subject.run_action(:create)
|
1583
|
-
expect(subject).not_to be_updated_by_last_action
|
1584
|
-
end
|
1585
|
-
end
|
1586
|
-
|
1587
|
-
context "For frequency :on_logon" do
|
1588
|
-
subject do
|
1589
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1590
|
-
new_resource.command task_name
|
1591
|
-
new_resource.frequency :on_logon
|
1592
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1593
|
-
new_resource
|
1594
|
-
end
|
1595
|
-
|
1596
|
-
it "create task by adding frequency_modifier and random_delay" do
|
1597
|
-
subject.run_action(:create)
|
1598
|
-
subject.run_action(:create)
|
1599
|
-
expect(subject).not_to be_updated_by_last_action
|
1600
|
-
end
|
1601
|
-
|
1602
|
-
it "create task by adding frequency_modifier as 5" do
|
1603
|
-
subject.frequency_modifier 5
|
1604
|
-
subject.run_action(:create)
|
1605
|
-
subject.run_action(:create)
|
1606
|
-
expect(subject).not_to be_updated_by_last_action
|
1607
|
-
end
|
1608
|
-
end
|
1609
|
-
|
1610
|
-
context "For frequency :onstart" do
|
1611
|
-
subject do
|
1612
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1613
|
-
new_resource.command task_name
|
1614
|
-
new_resource.run_level :highest
|
1615
|
-
new_resource.frequency :onstart
|
1616
|
-
new_resource.frequency_modifier 20
|
1617
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1618
|
-
new_resource
|
1619
|
-
end
|
1620
|
-
|
1621
|
-
it "create task by adding frequency_modifier as 20" do
|
1622
|
-
subject.run_action(:create)
|
1623
|
-
subject.run_action(:create)
|
1624
|
-
expect(subject).not_to be_updated_by_last_action
|
1625
|
-
end
|
1626
|
-
end
|
1627
|
-
end
|
1628
|
-
|
1629
|
-
describe "#after_created" do
|
1630
|
-
subject do
|
1631
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1632
|
-
new_resource.command task_name
|
1633
|
-
new_resource.run_level :highest
|
1634
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1635
|
-
new_resource
|
1636
|
-
end
|
1637
|
-
|
1638
|
-
context "when start_day is passed with frequency :onstart" do
|
1639
|
-
it "does not raises error" do
|
1640
|
-
subject.frequency :onstart
|
1641
|
-
subject.start_day "09/20/2017"
|
1642
|
-
expect { subject.after_created }.not_to raise_error
|
1643
|
-
end
|
1644
|
-
end
|
1645
|
-
|
1646
|
-
context "when a non system user is passed without password" do
|
1647
|
-
it "raises error" do
|
1648
|
-
subject.user "USER"
|
1649
|
-
subject.frequency :onstart
|
1650
|
-
expect { subject.after_created }.to raise_error(%q{Please provide a password or check if this task needs to be interactive! Valid passwordless users are: 'SYSTEM', 'NT AUTHORITY\SYSTEM', 'LOCAL SERVICE', 'NT AUTHORITY\LOCAL SERVICE', 'NETWORK SERVICE', 'NT AUTHORITY\NETWORK SERVICE', 'ADMINISTRATORS', 'BUILTIN\ADMINISTRATORS', 'USERS', 'BUILTIN\USERS', 'GUESTS', 'BUILTIN\GUESTS'})
|
1651
|
-
end
|
1652
|
-
it "does not raises error when task is interactive" do
|
1653
|
-
subject.user "USER"
|
1654
|
-
subject.frequency :onstart
|
1655
|
-
subject.interactive_enabled true
|
1656
|
-
expect { subject.after_created }.not_to raise_error
|
1657
|
-
end
|
1658
|
-
end
|
1659
|
-
|
1660
|
-
context "when a system user is passed without password" do
|
1661
|
-
it "does not raises error" do
|
1662
|
-
subject.user "ADMINISTRATORS"
|
1663
|
-
subject.frequency :onstart
|
1664
|
-
expect { subject.after_created }.not_to raise_error
|
1665
|
-
end
|
1666
|
-
it "does not raises error when task is interactive" do
|
1667
|
-
subject.user "ADMINISTRATORS"
|
1668
|
-
subject.frequency :onstart
|
1669
|
-
subject.interactive_enabled true
|
1670
|
-
expect { subject.after_created }.not_to raise_error
|
1671
|
-
end
|
1672
|
-
end
|
1673
|
-
|
1674
|
-
context "when a non system user is passed with password" do
|
1675
|
-
it "does not raises error" do
|
1676
|
-
subject.user "USER"
|
1677
|
-
subject.password "XXXX"
|
1678
|
-
subject.frequency :onstart
|
1679
|
-
expect { subject.after_created }.not_to raise_error
|
1680
|
-
end
|
1681
|
-
it "does not raises error when task is interactive" do
|
1682
|
-
subject.user "USER"
|
1683
|
-
subject.password "XXXX"
|
1684
|
-
subject.frequency :onstart
|
1685
|
-
subject.interactive_enabled true
|
1686
|
-
expect { subject.after_created }.not_to raise_error
|
1687
|
-
end
|
1688
|
-
end
|
1689
|
-
|
1690
|
-
context "when a system user is passed with password" do
|
1691
|
-
it "raises error" do
|
1692
|
-
subject.user "ADMINISTRATORS"
|
1693
|
-
subject.password "XXXX"
|
1694
|
-
subject.frequency :onstart
|
1695
|
-
expect { subject.after_created }.to raise_error("Password is not required for system users.")
|
1696
|
-
end
|
1697
|
-
it "raises error when task is interactive" do
|
1698
|
-
subject.user "ADMINISTRATORS"
|
1699
|
-
subject.password "XXXX"
|
1700
|
-
subject.frequency :onstart
|
1701
|
-
subject.interactive_enabled true
|
1702
|
-
expect { subject.after_created }.to raise_error("Password is not required for system users.")
|
1703
|
-
end
|
1704
|
-
end
|
1705
|
-
|
1706
|
-
context "when frequency_modifier > 1439 is passed for frequency=:minute" do
|
1707
|
-
it "raises error" do
|
1708
|
-
subject.frequency_modifier 1450
|
1709
|
-
subject.frequency :minute
|
1710
|
-
expect { subject.after_created }.to raise_error("frequency_modifier value 1450 is invalid. Valid values for :minute frequency are 1 - 1439.")
|
1711
|
-
end
|
1712
|
-
end
|
1713
|
-
|
1714
|
-
context "when frequency_modifier > 23 is passed for frequency=:minute" do
|
1715
|
-
it "raises error" do
|
1716
|
-
subject.frequency_modifier 24
|
1717
|
-
subject.frequency :hourly
|
1718
|
-
expect { subject.after_created }.to raise_error("frequency_modifier value 24 is invalid. Valid values for :hourly frequency are 1 - 23.")
|
1719
|
-
end
|
1720
|
-
end
|
1721
|
-
|
1722
|
-
context "when frequency_modifier > 23 is passed for frequency=:minute" do
|
1723
|
-
it "raises error" do
|
1724
|
-
subject.frequency_modifier 366
|
1725
|
-
subject.frequency :daily
|
1726
|
-
expect { subject.after_created }.to raise_error("frequency_modifier value 366 is invalid. Valid values for :daily frequency are 1 - 365.")
|
1727
|
-
end
|
1728
|
-
end
|
1729
|
-
|
1730
|
-
context "when frequency_modifier > 52 is passed for frequency=:minute" do
|
1731
|
-
it "raises error" do
|
1732
|
-
subject.frequency_modifier 53
|
1733
|
-
subject.frequency :weekly
|
1734
|
-
expect { subject.after_created }.to raise_error("frequency_modifier value 53 is invalid. Valid values for :weekly frequency are 1 - 52.")
|
1735
|
-
end
|
1736
|
-
end
|
1737
|
-
|
1738
|
-
context "when invalid frequency_modifier is passed for :monthly frequency" do
|
1739
|
-
it "raises error" do
|
1740
|
-
subject.frequency :monthly
|
1741
|
-
subject.frequency_modifier "13"
|
1742
|
-
expect { subject.after_created }.to raise_error("frequency_modifier value 13 is invalid. Valid values for :monthly frequency are 1 - 12, 'FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST'.")
|
1743
|
-
end
|
1744
|
-
end
|
1745
|
-
|
1746
|
-
context "when invalid frequency_modifier is passed for :monthly frequency" do
|
1747
|
-
it "raises error" do
|
1748
|
-
subject.frequency :monthly
|
1749
|
-
subject.frequency_modifier "xyz"
|
1750
|
-
expect { subject.after_created }.to raise_error("frequency_modifier value xyz is invalid. Valid values for :monthly frequency are 1 - 12, 'FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST'.")
|
1751
|
-
end
|
1752
|
-
end
|
1753
|
-
|
1754
|
-
context "when invalid months are passed" do
|
1755
|
-
it "raises error" do
|
1756
|
-
subject.months "xyz"
|
1757
|
-
subject.frequency :monthly
|
1758
|
-
expect { subject.after_created }.to raise_error("months property invalid. Only valid values are: JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, *. Multiple values must be separated by a comma.")
|
1759
|
-
end
|
1760
|
-
end
|
1761
|
-
|
1762
|
-
context "when idle_time > 999 is passed" do
|
1763
|
-
it "raises error" do
|
1764
|
-
subject.idle_time 1000
|
1765
|
-
subject.frequency :on_idle
|
1766
|
-
expect { subject.after_created }.to raise_error("idle_time value 1000 is invalid. Valid values for :on_idle frequency are 1 - 999.")
|
1767
|
-
end
|
1768
|
-
end
|
1769
|
-
|
1770
|
-
context "when idle_time is passed for frequency=:monthly" do
|
1771
|
-
it "raises error" do
|
1772
|
-
subject.idle_time 300
|
1773
|
-
subject.frequency :monthly
|
1774
|
-
expect { subject.after_created }.to raise_error("idle_time property is only valid for tasks that run on_idle")
|
1775
|
-
end
|
1776
|
-
end
|
1777
|
-
end
|
1778
|
-
|
1779
|
-
describe "action :delete" do
|
1780
|
-
subject do
|
1781
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1782
|
-
new_resource.command task_name
|
1783
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1784
|
-
new_resource.frequency :hourly
|
1785
|
-
new_resource
|
1786
|
-
end
|
1787
|
-
|
1788
|
-
it "does not converge the resource if it is already converged" do
|
1789
|
-
subject.run_action(:create)
|
1790
|
-
subject.run_action(:delete)
|
1791
|
-
subject.run_action(:delete)
|
1792
|
-
expect(subject).not_to be_updated_by_last_action
|
1793
|
-
end
|
1794
|
-
|
1795
|
-
it "does not converge the resource if it is already converged" do
|
1796
|
-
subject.run_action(:create)
|
1797
|
-
subject.run_action(:delete)
|
1798
|
-
subject.run_action(:delete)
|
1799
|
-
expect(subject).not_to be_updated_by_last_action
|
1800
|
-
end
|
1801
|
-
end
|
1802
|
-
|
1803
|
-
describe "action :run" do
|
1804
|
-
after { delete_task }
|
1805
|
-
|
1806
|
-
subject do
|
1807
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1808
|
-
new_resource.command "dir"
|
1809
|
-
new_resource.run_level :highest
|
1810
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1811
|
-
new_resource.frequency :hourly
|
1812
|
-
new_resource
|
1813
|
-
end
|
1814
|
-
|
1815
|
-
it "runs the existing task" do
|
1816
|
-
subject.run_action(:create)
|
1817
|
-
subject.run_action(:run)
|
1818
|
-
current_resource = call_for_load_current_resource
|
1819
|
-
expect(current_resource.task.status).to eq("queued").or eq("running").or eq("ready") # queued or can be running
|
1820
|
-
end
|
1821
|
-
end
|
1822
|
-
|
1823
|
-
describe "action :end", :volatile do
|
1824
|
-
after { delete_task }
|
1825
|
-
|
1826
|
-
subject do
|
1827
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1828
|
-
new_resource.command "dir"
|
1829
|
-
new_resource.run_level :highest
|
1830
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1831
|
-
new_resource
|
1832
|
-
end
|
1833
|
-
|
1834
|
-
it "ends the running task" do
|
1835
|
-
subject.run_action(:create)
|
1836
|
-
subject.run_action(:run)
|
1837
|
-
subject.run_action(:end)
|
1838
|
-
current_resource = call_for_load_current_resource
|
1839
|
-
expect(current_resource.task.status).to eq("queued").or eq("ready") # queued or can be ready
|
1840
|
-
end
|
1841
|
-
end
|
1842
|
-
|
1843
|
-
describe "action :enable" do
|
1844
|
-
let(:task_name) { "chef-client-functional-test-enable" }
|
1845
|
-
after { delete_task }
|
1846
|
-
|
1847
|
-
subject do
|
1848
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1849
|
-
new_resource.command task_name
|
1850
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1851
|
-
new_resource.frequency :hourly
|
1852
|
-
new_resource
|
1853
|
-
end
|
1854
|
-
|
1855
|
-
it "enables the disabled task" do
|
1856
|
-
subject.run_action(:create)
|
1857
|
-
subject.run_action(:disable)
|
1858
|
-
current_resource = call_for_load_current_resource
|
1859
|
-
expect(current_resource.task.status).to eq("not scheduled")
|
1860
|
-
subject.run_action(:enable)
|
1861
|
-
current_resource = call_for_load_current_resource
|
1862
|
-
expect(current_resource.task.status).to eq("ready")
|
1863
|
-
end
|
1864
|
-
end
|
1865
|
-
|
1866
|
-
describe "action :disable" do
|
1867
|
-
let(:task_name) { "chef-client-functional-test-disable" }
|
1868
|
-
after { delete_task }
|
1869
|
-
|
1870
|
-
subject do
|
1871
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1872
|
-
new_resource.command task_name
|
1873
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1874
|
-
new_resource.frequency :hourly
|
1875
|
-
new_resource
|
1876
|
-
end
|
1877
|
-
|
1878
|
-
it "disables the task" do
|
1879
|
-
subject.run_action(:create)
|
1880
|
-
subject.run_action(:disable)
|
1881
|
-
current_resource = call_for_load_current_resource
|
1882
|
-
expect(current_resource.task.status).to eq("not scheduled")
|
1883
|
-
end
|
1884
|
-
end
|
1885
|
-
|
1886
|
-
describe "action :change" do
|
1887
|
-
after { delete_task }
|
1888
|
-
subject do
|
1889
|
-
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1890
|
-
new_resource.command task_name
|
1891
|
-
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1892
|
-
new_resource.frequency :hourly
|
1893
|
-
new_resource
|
1894
|
-
end
|
1895
|
-
|
1896
|
-
it "call action_create since change action is alias for create" do
|
1897
|
-
subject.run_action(:change)
|
1898
|
-
expect(subject).to be_updated_by_last_action
|
1899
|
-
end
|
1900
|
-
end
|
1901
|
-
|
1902
|
-
def delete_task
|
1903
|
-
task_to_delete = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1904
|
-
task_to_delete.run_action(:delete)
|
1905
|
-
end
|
1906
|
-
|
1907
|
-
def call_for_create_action
|
1908
|
-
current_resource = call_for_load_current_resource
|
1909
|
-
expect(current_resource.exists).to eq(false)
|
1910
|
-
subject.run_action(:create)
|
1911
|
-
expect(subject).to be_updated_by_last_action
|
1912
|
-
end
|
1913
|
-
|
1914
|
-
def call_for_load_current_resource
|
1915
|
-
windows_task_provider.send(:load_current_resource)
|
1916
|
-
end
|
1917
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>)
|
3
|
+
# Copyright:: Copyright (c) 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/provider/windows_task"
|
21
|
+
|
22
|
+
describe Chef::Resource::WindowsTask, :windows_only do
|
23
|
+
# resource.task.application_name will default to task_name unless resource.command is set
|
24
|
+
let(:task_name) { "chef-client-functional-test" }
|
25
|
+
let(:new_resource) { Chef::Resource::WindowsTask.new(task_name) }
|
26
|
+
let(:windows_task_provider) do
|
27
|
+
node = Chef::Node.new
|
28
|
+
events = Chef::EventDispatch::Dispatcher.new
|
29
|
+
run_context = Chef::RunContext.new(node, {}, events)
|
30
|
+
Chef::Provider::WindowsTask.new(new_resource, run_context)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "action :create" do
|
34
|
+
after { delete_task }
|
35
|
+
context "when command is with arguments" do
|
36
|
+
subject do
|
37
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
38
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
39
|
+
# Make sure MM/DD/YYYY is accepted
|
40
|
+
|
41
|
+
new_resource.start_day "09/20/2017"
|
42
|
+
new_resource.frequency :hourly
|
43
|
+
new_resource
|
44
|
+
end
|
45
|
+
|
46
|
+
context "With Arguments" do
|
47
|
+
it "creates scheduled task and sets command arguments" do
|
48
|
+
subject.command "chef-client -W"
|
49
|
+
call_for_create_action
|
50
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
51
|
+
current_resource = call_for_load_current_resource
|
52
|
+
expect(current_resource.exists).to eq(true)
|
53
|
+
expect(current_resource.task.application_name).to eq("chef-client")
|
54
|
+
expect(current_resource.task.parameters).to eq("-W")
|
55
|
+
end
|
56
|
+
|
57
|
+
it "does not converge the resource if it is already converged" do
|
58
|
+
subject.command "chef-client -W"
|
59
|
+
subject.run_action(:create)
|
60
|
+
subject.command "chef-client -W"
|
61
|
+
subject.run_action(:create)
|
62
|
+
expect(subject).not_to be_updated_by_last_action
|
63
|
+
end
|
64
|
+
|
65
|
+
it "creates scheduled task and sets command arguments when arguments inclusive single quotes" do
|
66
|
+
subject.command "chef-client -W -L 'C:\\chef\\chef-ad-join.log'"
|
67
|
+
call_for_create_action
|
68
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
69
|
+
current_resource = call_for_load_current_resource
|
70
|
+
expect(current_resource.exists).to eq(true)
|
71
|
+
expect(current_resource.task.application_name).to eq("chef-client")
|
72
|
+
expect(current_resource.task.parameters).to eq("-W -L 'C:\\chef\\chef-ad-join.log'")
|
73
|
+
end
|
74
|
+
|
75
|
+
it "does not converge the resource if it is already converged" do
|
76
|
+
subject.command "chef-client -W -L 'C:\\chef\\chef-ad-join.log'"
|
77
|
+
subject.run_action(:create)
|
78
|
+
subject.command "chef-client -W -L 'C:\\chef\\chef-ad-join.log'"
|
79
|
+
subject.run_action(:create)
|
80
|
+
expect(subject).not_to be_updated_by_last_action
|
81
|
+
end
|
82
|
+
|
83
|
+
it "creates scheduled task and sets command arguments with spaces in command" do
|
84
|
+
subject.command '"C:\\Program Files\\example\\program.exe" -arg1 --arg2'
|
85
|
+
call_for_create_action
|
86
|
+
current_resource = call_for_load_current_resource
|
87
|
+
expect(current_resource.exists).to eq(true)
|
88
|
+
expect(current_resource.task.application_name).to eq('"C:\\Program Files\\example\\program.exe"')
|
89
|
+
expect(current_resource.task.parameters).to eq("-arg1 --arg2")
|
90
|
+
end
|
91
|
+
|
92
|
+
it "does not converge the resource if it is already converged" do
|
93
|
+
subject.command '"C:\\Program Files\\example\\program.exe" -arg1 --arg2'
|
94
|
+
subject.run_action(:create)
|
95
|
+
subject.command '"C:\\Program Files\\example\\program.exe" -arg1 --arg2'
|
96
|
+
subject.run_action(:create)
|
97
|
+
expect(subject).not_to be_updated_by_last_action
|
98
|
+
end
|
99
|
+
|
100
|
+
it "creates scheduled task and sets command arguments with spaces in arguments" do
|
101
|
+
subject.command 'powershell.exe -file "C:\\Program Files\\app\\script.ps1"'
|
102
|
+
call_for_create_action
|
103
|
+
current_resource = call_for_load_current_resource
|
104
|
+
expect(current_resource.exists).to eq(true)
|
105
|
+
expect(current_resource.task.application_name).to eq("powershell.exe")
|
106
|
+
expect(current_resource.task.parameters).to eq('-file "C:\\Program Files\\app\\script.ps1"')
|
107
|
+
end
|
108
|
+
|
109
|
+
it "does not converge the resource if it is already converged" do
|
110
|
+
subject.command 'powershell.exe -file "C:\\Program Files\\app\\script.ps1"'
|
111
|
+
subject.run_action(:create)
|
112
|
+
subject.command 'powershell.exe -file "C:\\Program Files\\app\\script.ps1"'
|
113
|
+
subject.run_action(:create)
|
114
|
+
expect(subject).not_to be_updated_by_last_action
|
115
|
+
end
|
116
|
+
|
117
|
+
it "creates scheduled task and sets command arguments" do
|
118
|
+
subject.command "ping http://www.google.com"
|
119
|
+
call_for_create_action
|
120
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
121
|
+
current_resource = call_for_load_current_resource
|
122
|
+
expect(current_resource.exists).to eq(true)
|
123
|
+
expect(current_resource.task.application_name).to eq("ping")
|
124
|
+
expect(current_resource.task.parameters).to eq("http://www.google.com")
|
125
|
+
end
|
126
|
+
|
127
|
+
it "does not converge the resource if it is already converged" do
|
128
|
+
subject.command "ping http://www.google.com"
|
129
|
+
subject.run_action(:create)
|
130
|
+
subject.command "ping http://www.google.com"
|
131
|
+
subject.run_action(:create)
|
132
|
+
expect(subject).not_to be_updated_by_last_action
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
context "Without Arguments" do
|
137
|
+
it "creates scheduled task and sets command arguments" do
|
138
|
+
subject.command "chef-client"
|
139
|
+
call_for_create_action
|
140
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
141
|
+
current_resource = call_for_load_current_resource
|
142
|
+
expect(current_resource.exists).to eq(true)
|
143
|
+
expect(current_resource.task.application_name).to eq("chef-client")
|
144
|
+
expect(current_resource.task.parameters).to be_empty
|
145
|
+
end
|
146
|
+
|
147
|
+
it "does not converge the resource if it is already converged" do
|
148
|
+
subject.command "chef-client"
|
149
|
+
subject.run_action(:create)
|
150
|
+
subject.command "chef-client"
|
151
|
+
subject.run_action(:create)
|
152
|
+
expect(subject).not_to be_updated_by_last_action
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
it "creates scheduled task and Re-sets command arguments" do
|
157
|
+
subject.command 'powershell.exe -file "C:\\Program Files\\app\\script.ps1"'
|
158
|
+
subject.run_action(:create)
|
159
|
+
current_resource = call_for_load_current_resource
|
160
|
+
expect(current_resource.task.application_name).to eq("powershell.exe")
|
161
|
+
expect(current_resource.task.parameters).to eq('-file "C:\\Program Files\\app\\script.ps1"')
|
162
|
+
|
163
|
+
subject.command "powershell.exe"
|
164
|
+
subject.run_action(:create)
|
165
|
+
current_resource = call_for_load_current_resource
|
166
|
+
expect(current_resource.task.application_name).to eq("powershell.exe")
|
167
|
+
expect(current_resource.task.parameters).to be_empty
|
168
|
+
expect(subject).to be_updated_by_last_action
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context "when description is passed" do
|
173
|
+
subject do
|
174
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
175
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
176
|
+
new_resource.command task_name
|
177
|
+
# Make sure MM/DD/YYYY is accepted
|
178
|
+
new_resource.start_day "09/20/2017"
|
179
|
+
new_resource.frequency :hourly
|
180
|
+
new_resource
|
181
|
+
end
|
182
|
+
|
183
|
+
let(:some_description) { "this is test description" }
|
184
|
+
|
185
|
+
it "create the task and sets its description" do
|
186
|
+
subject.description some_description
|
187
|
+
call_for_create_action
|
188
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
189
|
+
current_resource = call_for_load_current_resource
|
190
|
+
expect(current_resource.exists).to eq(true)
|
191
|
+
expect(current_resource.task.description).to eq(some_description)
|
192
|
+
end
|
193
|
+
|
194
|
+
it "does not converge the resource if it is already converged" do
|
195
|
+
subject.description some_description
|
196
|
+
subject.run_action(:create)
|
197
|
+
subject.description some_description
|
198
|
+
subject.run_action(:create)
|
199
|
+
expect(subject).not_to be_updated_by_last_action
|
200
|
+
end
|
201
|
+
|
202
|
+
it "updates task with new description if task already exist" do
|
203
|
+
subject.description some_description
|
204
|
+
subject.run_action(:create)
|
205
|
+
subject.description "test description"
|
206
|
+
subject.run_action(:create)
|
207
|
+
expect(subject).to be_updated_by_last_action
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
context "when frequency_modifier are not passed" do
|
212
|
+
subject do
|
213
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
214
|
+
new_resource.command task_name
|
215
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
216
|
+
# Make sure MM/DD/YYYY is accepted
|
217
|
+
new_resource.start_day "09/20/2017"
|
218
|
+
new_resource.frequency :hourly
|
219
|
+
new_resource
|
220
|
+
end
|
221
|
+
|
222
|
+
it "creates a scheduled task to run every 1 hr starting on 09/20/2017" do
|
223
|
+
call_for_create_action
|
224
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
225
|
+
current_resource = call_for_load_current_resource
|
226
|
+
expect(current_resource.exists).to eq(true)
|
227
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
228
|
+
trigger_details = current_resource.task.trigger(0)
|
229
|
+
expect(trigger_details[:start_year]).to eq("2017")
|
230
|
+
expect(trigger_details[:start_month]).to eq("09")
|
231
|
+
expect(trigger_details[:start_day]).to eq("20")
|
232
|
+
expect(trigger_details[:minutes_interval]).to eq(60)
|
233
|
+
expect(trigger_details[:trigger_type]).to eq(1)
|
234
|
+
end
|
235
|
+
|
236
|
+
it "does not converge the resource if it is already converged" do
|
237
|
+
subject.run_action(:create)
|
238
|
+
subject.run_action(:create)
|
239
|
+
expect(subject).not_to be_updated_by_last_action
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
context "frequency :minute" do
|
244
|
+
subject do
|
245
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
246
|
+
new_resource.command task_name
|
247
|
+
new_resource.run_level :highest
|
248
|
+
new_resource.frequency :minute
|
249
|
+
new_resource.frequency_modifier 15
|
250
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
251
|
+
new_resource
|
252
|
+
end
|
253
|
+
|
254
|
+
it "creates a scheduled task that runs after every 15 minutes" do
|
255
|
+
call_for_create_action
|
256
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
257
|
+
current_resource = call_for_load_current_resource
|
258
|
+
expect(current_resource.exists).to eq(true)
|
259
|
+
trigger_details = current_resource.task.trigger(0)
|
260
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
261
|
+
expect(trigger_details[:minutes_interval]).to eq(15)
|
262
|
+
expect(trigger_details[:trigger_type]).to eq(1)
|
263
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
264
|
+
end
|
265
|
+
|
266
|
+
it "does not converge the resource if it is already converged" do
|
267
|
+
subject.run_action(:create)
|
268
|
+
subject.run_action(:create)
|
269
|
+
expect(subject).not_to be_updated_by_last_action
|
270
|
+
end
|
271
|
+
|
272
|
+
it "updates a scheduled task when frequency_modifier updated to 20" do
|
273
|
+
subject.run_action(:create)
|
274
|
+
current_resource = call_for_load_current_resource
|
275
|
+
trigger_details = current_resource.task.trigger(0)
|
276
|
+
expect(trigger_details[:minutes_interval]).to eq(15)
|
277
|
+
subject.frequency_modifier 20
|
278
|
+
subject.run_action(:create)
|
279
|
+
expect(subject).to be_updated_by_last_action
|
280
|
+
# #loading current resource again to check new task is creted and it matches task parameters
|
281
|
+
current_resource = call_for_load_current_resource
|
282
|
+
expect(current_resource.exists).to eq(true)
|
283
|
+
trigger_details = current_resource.task.trigger(0)
|
284
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
285
|
+
expect(trigger_details[:minutes_interval]).to eq(20)
|
286
|
+
expect(trigger_details[:trigger_type]).to eq(1)
|
287
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
context "frequency :hourly" do
|
292
|
+
subject do
|
293
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
294
|
+
new_resource.command task_name
|
295
|
+
new_resource.run_level :highest
|
296
|
+
new_resource.frequency :hourly
|
297
|
+
new_resource.frequency_modifier 3
|
298
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
299
|
+
new_resource
|
300
|
+
end
|
301
|
+
|
302
|
+
it "creates a scheduled task that runs after every 3 hrs" do
|
303
|
+
call_for_create_action
|
304
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
305
|
+
current_resource = call_for_load_current_resource
|
306
|
+
expect(current_resource.exists).to eq(true)
|
307
|
+
trigger_details = current_resource.task.trigger(0)
|
308
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
309
|
+
expect(trigger_details[:minutes_interval]).to eq(180)
|
310
|
+
expect(trigger_details[:trigger_type]).to eq(1)
|
311
|
+
end
|
312
|
+
|
313
|
+
it "does not converge the resource if it is already converged" do
|
314
|
+
subject.run_action(:create)
|
315
|
+
subject.run_action(:create)
|
316
|
+
expect(subject).not_to be_updated_by_last_action
|
317
|
+
end
|
318
|
+
|
319
|
+
it "updates a scheduled task to run every 5 hrs when frequency modifer updated to 5" do
|
320
|
+
subject.run_action(:create)
|
321
|
+
current_resource = call_for_load_current_resource
|
322
|
+
trigger_details = current_resource.task.trigger(0)
|
323
|
+
expect(trigger_details[:minutes_interval]).to eq(180)
|
324
|
+
# updating frequency modifer to 5 from 3
|
325
|
+
subject.frequency_modifier 5
|
326
|
+
subject.run_action(:create)
|
327
|
+
expect(subject).to be_updated_by_last_action
|
328
|
+
current_resource = call_for_load_current_resource
|
329
|
+
expect(current_resource.exists).to eq(true)
|
330
|
+
trigger_details = current_resource.task.trigger(0)
|
331
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
332
|
+
expect(trigger_details[:minutes_interval]).to eq(300)
|
333
|
+
expect(trigger_details[:trigger_type]).to eq(1)
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
context "frequency :daily" do
|
338
|
+
subject do
|
339
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
340
|
+
new_resource.command task_name
|
341
|
+
new_resource.run_level :highest
|
342
|
+
new_resource.frequency :daily
|
343
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
344
|
+
new_resource
|
345
|
+
end
|
346
|
+
|
347
|
+
it "creates a scheduled task to run daily" do
|
348
|
+
call_for_create_action
|
349
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
350
|
+
current_resource = call_for_load_current_resource
|
351
|
+
expect(current_resource.exists).to eq(true)
|
352
|
+
trigger_details = current_resource.task.trigger(0)
|
353
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
354
|
+
expect(trigger_details[:trigger_type]).to eq(2)
|
355
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
356
|
+
expect(trigger_details[:type][:days_interval]).to eq(1)
|
357
|
+
end
|
358
|
+
|
359
|
+
it "does not converge the resource if it is already converged" do
|
360
|
+
subject.run_action(:create)
|
361
|
+
subject.run_action(:create)
|
362
|
+
expect(subject).not_to be_updated_by_last_action
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
describe "frequency :monthly" do
|
367
|
+
subject do
|
368
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
369
|
+
new_resource.command task_name
|
370
|
+
new_resource.run_level :highest
|
371
|
+
new_resource.frequency :monthly
|
372
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
373
|
+
new_resource
|
374
|
+
end
|
375
|
+
|
376
|
+
context "with start_day and start_time" do
|
377
|
+
before do
|
378
|
+
subject.start_day "02/12/2018"
|
379
|
+
subject.start_time "05:15"
|
380
|
+
end
|
381
|
+
|
382
|
+
it "if day property is not set creates a scheduled task to run monthly on first day of the month" do
|
383
|
+
call_for_create_action
|
384
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
385
|
+
current_resource = call_for_load_current_resource
|
386
|
+
expect(current_resource.exists).to eq(true)
|
387
|
+
trigger_details = current_resource.task.trigger(0)
|
388
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
389
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
390
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
391
|
+
expect(trigger_details[:type][:days]).to eq(1)
|
392
|
+
expect(trigger_details[:type][:months]).to eq(4095)
|
393
|
+
end
|
394
|
+
|
395
|
+
it "does not converge the resource if it is already converged" do
|
396
|
+
subject.run_action(:create)
|
397
|
+
subject.run_action(:create)
|
398
|
+
expect(subject).not_to be_updated_by_last_action
|
399
|
+
end
|
400
|
+
|
401
|
+
it "creates a scheduled task to run monthly on first, second and third day of the month" do
|
402
|
+
subject.day "1, 2, 3"
|
403
|
+
call_for_create_action
|
404
|
+
# loading current resource again to check new task is created and it matches task parameters
|
405
|
+
current_resource = call_for_load_current_resource
|
406
|
+
expect(current_resource.exists).to eq(true)
|
407
|
+
trigger_details = current_resource.task.trigger(0)
|
408
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
409
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
410
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
411
|
+
expect(trigger_details[:type][:days]).to eq(7)
|
412
|
+
expect(trigger_details[:type][:months]).to eq(4095)
|
413
|
+
end
|
414
|
+
|
415
|
+
it "does not converge the resource if it is already converged" do
|
416
|
+
subject.day "1, 2, 3"
|
417
|
+
subject.run_action(:create)
|
418
|
+
subject.run_action(:create)
|
419
|
+
expect(subject).not_to be_updated_by_last_action
|
420
|
+
end
|
421
|
+
|
422
|
+
it "creates a scheduled task to run monthly on 1, 2, 3, 4, 8, 20, 21, 15, 28, 31 day of the month" do
|
423
|
+
subject.day "1, 2, 3, 4, 8, 20, 21, 15, 28, 31"
|
424
|
+
call_for_create_action
|
425
|
+
# loading current resource again to check new task is created and it matches task parameters
|
426
|
+
current_resource = call_for_load_current_resource
|
427
|
+
expect(current_resource.exists).to eq(true)
|
428
|
+
trigger_details = current_resource.task.trigger(0)
|
429
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
430
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
431
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
432
|
+
expect(trigger_details[:type][:days]).to eq(1209548943) # TODO:: windows_task_provider.send(:days_of_month)
|
433
|
+
expect(trigger_details[:type][:months]).to eq(4095) # windows_task_provider.send(:months_of_year)
|
434
|
+
end
|
435
|
+
|
436
|
+
it "does not converge the resource if it is already converged" do
|
437
|
+
subject.day "1, 2, 3, 4, 8, 20, 21, 15, 28, 31"
|
438
|
+
subject.run_action(:create)
|
439
|
+
subject.run_action(:create)
|
440
|
+
expect(subject).not_to be_updated_by_last_action
|
441
|
+
end
|
442
|
+
|
443
|
+
it "creates a scheduled task to run monthly on Jan, Feb, Apr, Dec on 1st 2nd 3rd 4th 8th and 20th day of these months" do
|
444
|
+
subject.day "1, 2, 3, 4, 8, 20, 21, 30"
|
445
|
+
subject.months "Jan, Feb, May, Sep, Dec"
|
446
|
+
call_for_create_action
|
447
|
+
# loading current resource again to check new task is created and it matches task parameters
|
448
|
+
current_resource = call_for_load_current_resource
|
449
|
+
expect(current_resource.exists).to eq(true)
|
450
|
+
trigger_details = current_resource.task.trigger(0)
|
451
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
452
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
453
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
454
|
+
expect(trigger_details[:type][:days]).to eq(538443919) # TODO:windows_task_provider.send(:days_of_month)
|
455
|
+
expect(trigger_details[:type][:months]).to eq(2323) # windows_task_provider.send(:months_of_year)
|
456
|
+
end
|
457
|
+
|
458
|
+
it "does not converge the resource if it is already converged" do
|
459
|
+
subject.day "1, 2, 3, 4, 8, 20, 21, 30"
|
460
|
+
subject.months "Jan, Feb, May, Sep, Dec"
|
461
|
+
subject.run_action(:create)
|
462
|
+
subject.run_action(:create)
|
463
|
+
expect(subject).not_to be_updated_by_last_action
|
464
|
+
end
|
465
|
+
|
466
|
+
it "creates a scheduled task to run monthly by giving day option with frequency_modifier" do
|
467
|
+
subject.frequency_modifier "First"
|
468
|
+
subject.day "Mon, Fri, Sun"
|
469
|
+
call_for_create_action
|
470
|
+
# loading current resource again to check new task is created and it matches task parameters
|
471
|
+
current_resource = call_for_load_current_resource
|
472
|
+
expect(current_resource.exists).to eq(true)
|
473
|
+
trigger_details = current_resource.task.trigger(0)
|
474
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
475
|
+
expect(trigger_details[:trigger_type]).to eq(5)
|
476
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
477
|
+
expect(trigger_details[:type][:days_of_week]).to eq(35)
|
478
|
+
expect(trigger_details[:type][:weeks_of_month]).to eq(1)
|
479
|
+
expect(trigger_details[:type][:months]).to eq(4095) # windows_task_provider.send(:months_of_year)
|
480
|
+
end
|
481
|
+
|
482
|
+
it "does not converge the resource if it is already converged" do
|
483
|
+
subject.frequency_modifier "First"
|
484
|
+
subject.day "Mon, Fri, Sun"
|
485
|
+
subject.run_action(:create)
|
486
|
+
subject.run_action(:create)
|
487
|
+
expect(subject).not_to be_updated_by_last_action
|
488
|
+
end
|
489
|
+
end
|
490
|
+
|
491
|
+
context "with frequency_modifier" do
|
492
|
+
subject do
|
493
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
494
|
+
new_resource.command task_name
|
495
|
+
new_resource.run_level :highest
|
496
|
+
new_resource.frequency :monthly
|
497
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
498
|
+
new_resource
|
499
|
+
end
|
500
|
+
|
501
|
+
it "raises argument error if frequency_modifier is 'first, second' and day is not provided." do
|
502
|
+
subject.frequency_modifier "first, second"
|
503
|
+
expect { subject.after_created }.to raise_error("Please select day on which you want to run the task e.g. 'Mon, Tue'. Multiple values must be seprated by comma.")
|
504
|
+
end
|
505
|
+
|
506
|
+
it "raises argument error if months is passed along with frequency_modifier" do
|
507
|
+
subject.frequency_modifier 3
|
508
|
+
subject.months "Jan, Mar"
|
509
|
+
expect { subject.after_created }.to raise_error("For frequency :monthly either use property months or frequency_modifier to set months.")
|
510
|
+
end
|
511
|
+
|
512
|
+
it "not raises any Argument error if frequency_modifier set as 'first, second, third' and day is provided" do
|
513
|
+
subject.frequency_modifier "first, second, third"
|
514
|
+
subject.day "Mon, Fri"
|
515
|
+
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
516
|
+
end
|
517
|
+
|
518
|
+
it "not raises any Argument error if frequency_modifier 2 " do
|
519
|
+
subject.frequency_modifier 2
|
520
|
+
subject.day "Mon, Sun"
|
521
|
+
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
522
|
+
end
|
523
|
+
|
524
|
+
it "raises argument error if frequency_modifier > 12" do
|
525
|
+
subject.frequency_modifier 13
|
526
|
+
expect { subject.after_created }.to raise_error("frequency_modifier value 13 is invalid. Valid values for :monthly frequency are 1 - 12, 'FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST'.")
|
527
|
+
end
|
528
|
+
|
529
|
+
it "raises argument error if frequency_modifier < 1" do
|
530
|
+
subject.frequency_modifier 0
|
531
|
+
expect { subject.after_created }.to raise_error("frequency_modifier value 0 is invalid. Valid values for :monthly frequency are 1 - 12, 'FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST'.")
|
532
|
+
end
|
533
|
+
|
534
|
+
it "creates scheduled task to run task monthly on Monday and Friday of first, second and thrid week of month" do
|
535
|
+
subject.frequency_modifier "first, second, third"
|
536
|
+
subject.day "Mon, Fri"
|
537
|
+
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
538
|
+
call_for_create_action
|
539
|
+
current_resource = call_for_load_current_resource
|
540
|
+
expect(current_resource.exists).to eq(true)
|
541
|
+
trigger_details = current_resource.task.trigger(0)
|
542
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
543
|
+
expect(trigger_details[:trigger_type]).to eq(5)
|
544
|
+
expect(trigger_details[:type][:months]).to eq(4095)
|
545
|
+
expect(trigger_details[:type][:weeks_of_month]).to eq(7)
|
546
|
+
expect(trigger_details[:type][:days_of_week]).to eq(34)
|
547
|
+
end
|
548
|
+
|
549
|
+
it "does not converge the resource if it is already converged" do
|
550
|
+
subject.frequency_modifier "first, second, third"
|
551
|
+
subject.day "Mon, Fri"
|
552
|
+
subject.run_action(:create)
|
553
|
+
subject.run_action(:create)
|
554
|
+
expect(subject).not_to be_updated_by_last_action
|
555
|
+
end
|
556
|
+
|
557
|
+
it "creates scheduled task to run task monthly on every 6 months when frequency_modifier is 6 and to run on 1st and 2nd day of month" do
|
558
|
+
subject.frequency_modifier 6
|
559
|
+
subject.day "1, 2"
|
560
|
+
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
561
|
+
call_for_create_action
|
562
|
+
current_resource = call_for_load_current_resource
|
563
|
+
expect(current_resource.exists).to eq(true)
|
564
|
+
trigger_details = current_resource.task.trigger(0)
|
565
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
566
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
567
|
+
expect(trigger_details[:type][:months]).to eq(2080)
|
568
|
+
expect(trigger_details[:type][:days]).to eq(3)
|
569
|
+
end
|
570
|
+
|
571
|
+
it "does not converge the resource if it is already converged" do
|
572
|
+
subject.frequency_modifier 6
|
573
|
+
subject.day "1, 2"
|
574
|
+
subject.run_action(:create)
|
575
|
+
subject.run_action(:create)
|
576
|
+
expect(subject).not_to be_updated_by_last_action
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
580
|
+
context "when day is set as last or lastday for frequency :monthly" do
|
581
|
+
subject do
|
582
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
583
|
+
new_resource.command task_name
|
584
|
+
new_resource.run_level :highest
|
585
|
+
new_resource.frequency :monthly
|
586
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
587
|
+
new_resource
|
588
|
+
end
|
589
|
+
|
590
|
+
it "creates scheduled task to run monthly to run last day of the month" do
|
591
|
+
subject.day "last"
|
592
|
+
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
593
|
+
call_for_create_action
|
594
|
+
current_resource = call_for_load_current_resource
|
595
|
+
expect(current_resource.exists).to eq(true)
|
596
|
+
trigger_details = current_resource.task.trigger(0)
|
597
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
598
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
599
|
+
expect(trigger_details[:type][:months]).to eq(4095)
|
600
|
+
expect(trigger_details[:type][:days]).to eq(0)
|
601
|
+
expect(trigger_details[:run_on_last_day_of_month]).to eq(true)
|
602
|
+
end
|
603
|
+
|
604
|
+
it "does not converge the resource if it is already converged" do
|
605
|
+
subject.day "last"
|
606
|
+
subject.run_action(:create)
|
607
|
+
subject.run_action(:create)
|
608
|
+
expect(subject).not_to be_updated_by_last_action
|
609
|
+
end
|
610
|
+
|
611
|
+
it "day property set as 'lastday' creates scheduled task to run monthly to run last day of the month" do
|
612
|
+
subject.day "lastday"
|
613
|
+
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
614
|
+
call_for_create_action
|
615
|
+
current_resource = call_for_load_current_resource
|
616
|
+
expect(current_resource.exists).to eq(true)
|
617
|
+
trigger_details = current_resource.task.trigger(0)
|
618
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
619
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
620
|
+
expect(trigger_details[:type][:months]).to eq(4095)
|
621
|
+
expect(trigger_details[:type][:days]).to eq(0)
|
622
|
+
expect(trigger_details[:run_on_last_day_of_month]).to eq(true)
|
623
|
+
end
|
624
|
+
|
625
|
+
it "does not converge the resource if it is already converged" do
|
626
|
+
subject.day "lastday"
|
627
|
+
subject.run_action(:create)
|
628
|
+
subject.run_action(:create)
|
629
|
+
expect(subject).not_to be_updated_by_last_action
|
630
|
+
end
|
631
|
+
end
|
632
|
+
|
633
|
+
context "when frequency_modifier is set as last for frequency :monthly" do
|
634
|
+
it "creates scheduled task to run monthly on last week of the month" do
|
635
|
+
subject.frequency_modifier "last"
|
636
|
+
subject.day "Mon, Fri"
|
637
|
+
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
638
|
+
call_for_create_action
|
639
|
+
current_resource = call_for_load_current_resource
|
640
|
+
expect(current_resource.exists).to eq(true)
|
641
|
+
trigger_details = current_resource.task.trigger(0)
|
642
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
643
|
+
expect(trigger_details[:trigger_type]).to eq(5)
|
644
|
+
expect(trigger_details[:type][:months]).to eq(4095)
|
645
|
+
expect(trigger_details[:type][:days_of_week]).to eq(34)
|
646
|
+
expect(trigger_details[:run_on_last_week_of_month]).to eq(true)
|
647
|
+
end
|
648
|
+
|
649
|
+
it "does not converge the resource if it is already converged" do
|
650
|
+
subject.frequency_modifier "last"
|
651
|
+
subject.day "Mon, Fri"
|
652
|
+
subject.run_action(:create)
|
653
|
+
subject.run_action(:create)
|
654
|
+
expect(subject).not_to be_updated_by_last_action
|
655
|
+
end
|
656
|
+
end
|
657
|
+
|
658
|
+
context "when wild card (*) set as months" do
|
659
|
+
it "creates the scheduled task to run on 1st day of the all months" do
|
660
|
+
subject.months "*"
|
661
|
+
expect { subject.after_created }.not_to raise_error(ArgumentError)
|
662
|
+
call_for_create_action
|
663
|
+
current_resource = call_for_load_current_resource
|
664
|
+
expect(current_resource.exists).to eq(true)
|
665
|
+
trigger_details = current_resource.task.trigger(0)
|
666
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
667
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
668
|
+
expect(trigger_details[:type][:months]).to eq(4095)
|
669
|
+
expect(trigger_details[:type][:days]).to eq(1)
|
670
|
+
end
|
671
|
+
|
672
|
+
it "does not converge the resource if it is already converged" do
|
673
|
+
subject.months "*"
|
674
|
+
subject.run_action(:create)
|
675
|
+
subject.run_action(:create)
|
676
|
+
expect(subject).not_to be_updated_by_last_action
|
677
|
+
end
|
678
|
+
end
|
679
|
+
|
680
|
+
context "when wild card (*) set as day" do
|
681
|
+
it "raises argument error" do
|
682
|
+
subject.day "*"
|
683
|
+
expect { subject.after_created }.to raise_error("day wild card (*) is only valid with frequency :weekly")
|
684
|
+
end
|
685
|
+
end
|
686
|
+
|
687
|
+
context "Pass either start day or start time by passing day compulsory or only pass frequency_modifier" do
|
688
|
+
subject do
|
689
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
690
|
+
new_resource.command task_name
|
691
|
+
new_resource.run_level :highest
|
692
|
+
new_resource.frequency :monthly
|
693
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
694
|
+
new_resource
|
695
|
+
end
|
696
|
+
|
697
|
+
it "creates a scheduled task to run monthly on second day of the month" do
|
698
|
+
subject.day "2"
|
699
|
+
subject.start_day "03/07/2018"
|
700
|
+
call_for_create_action
|
701
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
702
|
+
current_resource = call_for_load_current_resource
|
703
|
+
expect(current_resource.exists).to eq(true)
|
704
|
+
trigger_details = current_resource.task.trigger(0)
|
705
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
706
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
707
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
708
|
+
expect(trigger_details[:type][:days]).to eq(2)
|
709
|
+
expect(trigger_details[:type][:months]).to eq(4095)
|
710
|
+
end
|
711
|
+
|
712
|
+
it "does not converge the resource if it is already converged" do
|
713
|
+
subject.day "2"
|
714
|
+
subject.start_day "03/07/2018"
|
715
|
+
subject.run_action(:create)
|
716
|
+
subject.run_action(:create)
|
717
|
+
expect(subject).not_to be_updated_by_last_action
|
718
|
+
end
|
719
|
+
|
720
|
+
it "creates a scheduled task to run monthly on first, second and third day of the month" do
|
721
|
+
subject.day "1,2,3"
|
722
|
+
call_for_create_action
|
723
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
724
|
+
current_resource = call_for_load_current_resource
|
725
|
+
expect(current_resource.exists).to eq(true)
|
726
|
+
trigger_details = current_resource.task.trigger(0)
|
727
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
728
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
729
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
730
|
+
expect(trigger_details[:type][:days]).to eq(7)
|
731
|
+
expect(trigger_details[:type][:months]).to eq(4095)
|
732
|
+
end
|
733
|
+
|
734
|
+
it "does not converge the resource if it is already converged" do
|
735
|
+
subject.day "1,2,3"
|
736
|
+
subject.run_action(:create)
|
737
|
+
subject.run_action(:create)
|
738
|
+
expect(subject).not_to be_updated_by_last_action
|
739
|
+
end
|
740
|
+
|
741
|
+
it "creates a scheduled task to run monthly on each wednesday of the month" do
|
742
|
+
subject.frequency_modifier "1"
|
743
|
+
call_for_create_action
|
744
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
745
|
+
current_resource = call_for_load_current_resource
|
746
|
+
expect(current_resource.exists).to eq(true)
|
747
|
+
trigger_details = current_resource.task.trigger(0)
|
748
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
749
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
750
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
751
|
+
expect(trigger_details[:type][:days]).to eq(1)
|
752
|
+
expect(trigger_details[:type][:months]).to eq(4095) # windows_task_provider.send(:months_of_year)
|
753
|
+
end
|
754
|
+
|
755
|
+
it "does not converge the resource if it is already converged" do
|
756
|
+
subject.frequency_modifier "2"
|
757
|
+
subject.run_action(:create)
|
758
|
+
subject.run_action(:create)
|
759
|
+
expect(subject).not_to be_updated_by_last_action
|
760
|
+
end
|
761
|
+
|
762
|
+
it "creates a scheduled task to run monthly on each wednesday of the month" do
|
763
|
+
subject.frequency_modifier "2"
|
764
|
+
subject.months = nil
|
765
|
+
call_for_create_action
|
766
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
767
|
+
current_resource = call_for_load_current_resource
|
768
|
+
expect(current_resource.exists).to eq(true)
|
769
|
+
trigger_details = current_resource.task.trigger(0)
|
770
|
+
# loading current resource
|
771
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
772
|
+
expect(trigger_details[:trigger_type]).to eq(4)
|
773
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
774
|
+
expect(trigger_details[:type][:days]).to eq(1)
|
775
|
+
expect(trigger_details[:type][:months]).to eq(2730) # windows_task_provider.send(:months_of_year)
|
776
|
+
end
|
777
|
+
|
778
|
+
it "does not converge the resource if it is already converged" do
|
779
|
+
subject.frequency_modifier "2"
|
780
|
+
subject.months = nil
|
781
|
+
subject.run_action(:create)
|
782
|
+
subject.run_action(:create)
|
783
|
+
expect(subject).not_to be_updated_by_last_action
|
784
|
+
end
|
785
|
+
end
|
786
|
+
end
|
787
|
+
|
788
|
+
## ToDO: Add functional specs to handle frequency monthly with frequency modifier set as 1-12
|
789
|
+
context "frequency :once" do
|
790
|
+
subject do
|
791
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
792
|
+
new_resource.command task_name
|
793
|
+
new_resource.run_level :highest
|
794
|
+
new_resource.frequency :once
|
795
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
796
|
+
new_resource
|
797
|
+
end
|
798
|
+
|
799
|
+
context "when start_time is not provided" do
|
800
|
+
it "raises argument error" do
|
801
|
+
expect { subject.after_created }.to raise_error("`start_time` needs to be provided with `frequency :once`")
|
802
|
+
end
|
803
|
+
end
|
804
|
+
|
805
|
+
context "when start_time is provided" do
|
806
|
+
it "creates the scheduled task to run once at 5pm" do
|
807
|
+
subject.start_time "17:00"
|
808
|
+
call_for_create_action
|
809
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
810
|
+
current_resource = call_for_load_current_resource
|
811
|
+
expect(current_resource.exists).to eq(true)
|
812
|
+
trigger_details = current_resource.task.trigger(0)
|
813
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
814
|
+
expect(trigger_details[:trigger_type]).to eq(1)
|
815
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
816
|
+
expect("#{trigger_details[:start_hour]}:#{trigger_details[:start_minute]}" ).to eq(subject.start_time)
|
817
|
+
end
|
818
|
+
|
819
|
+
it "does not converge the resource if it is already converged" do
|
820
|
+
subject.start_time "17:00"
|
821
|
+
subject.run_action(:create)
|
822
|
+
subject.run_action(:create)
|
823
|
+
expect(subject).not_to be_updated_by_last_action
|
824
|
+
end
|
825
|
+
end
|
826
|
+
end
|
827
|
+
|
828
|
+
context "frequency :weekly" do
|
829
|
+
subject do
|
830
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
831
|
+
new_resource.command task_name
|
832
|
+
new_resource.run_level :highest
|
833
|
+
new_resource.frequency :weekly
|
834
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
835
|
+
new_resource
|
836
|
+
end
|
837
|
+
|
838
|
+
it "creates the scheduled task to run weekly" do
|
839
|
+
call_for_create_action
|
840
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
841
|
+
current_resource = call_for_load_current_resource
|
842
|
+
expect(current_resource.exists).to eq(true)
|
843
|
+
trigger_details = current_resource.task.trigger(0)
|
844
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
845
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
846
|
+
expect(trigger_details[:trigger_type]).to eq(3)
|
847
|
+
expect(trigger_details[:type][:weeks_interval]).to eq(1)
|
848
|
+
end
|
849
|
+
|
850
|
+
it "does not converge the resource if it is already converged" do
|
851
|
+
subject.run_action(:create)
|
852
|
+
subject.run_action(:create)
|
853
|
+
expect(subject).not_to be_updated_by_last_action
|
854
|
+
end
|
855
|
+
|
856
|
+
context "when wild card (*) is set as day" do
|
857
|
+
it "creates hte scheduled task for all days of week" do
|
858
|
+
subject.day "*"
|
859
|
+
call_for_create_action
|
860
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
861
|
+
current_resource = call_for_load_current_resource
|
862
|
+
expect(current_resource.exists).to eq(true)
|
863
|
+
trigger_details = current_resource.task.trigger(0)
|
864
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
865
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
866
|
+
expect(trigger_details[:trigger_type]).to eq(3)
|
867
|
+
expect(trigger_details[:type][:weeks_interval]).to eq(1)
|
868
|
+
expect(trigger_details[:type][:days_of_week]).to eq(127)
|
869
|
+
end
|
870
|
+
|
871
|
+
it "does not converge the resource if it is already converged" do
|
872
|
+
subject.day "*"
|
873
|
+
subject.run_action(:create)
|
874
|
+
subject.run_action(:create)
|
875
|
+
expect(subject).not_to be_updated_by_last_action
|
876
|
+
end
|
877
|
+
end
|
878
|
+
|
879
|
+
context "when days are provided" do
|
880
|
+
it "creates the scheduled task to run on particular days" do
|
881
|
+
subject.day "Mon, Fri"
|
882
|
+
subject.frequency_modifier 2
|
883
|
+
call_for_create_action
|
884
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
885
|
+
current_resource = call_for_load_current_resource
|
886
|
+
expect(current_resource.exists).to eq(true)
|
887
|
+
trigger_details = current_resource.task.trigger(0)
|
888
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
889
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
890
|
+
expect(trigger_details[:trigger_type]).to eq(3)
|
891
|
+
expect(trigger_details[:type][:weeks_interval]).to eq(2)
|
892
|
+
expect(trigger_details[:type][:days_of_week]).to eq(34)
|
893
|
+
end
|
894
|
+
|
895
|
+
it "updates the scheduled task to run on if frequency_modifier is updated" do
|
896
|
+
subject.day "sun"
|
897
|
+
subject.frequency_modifier 2
|
898
|
+
subject.run_action(:create)
|
899
|
+
current_resource = call_for_load_current_resource
|
900
|
+
trigger_details = current_resource.task.trigger(0)
|
901
|
+
expect(trigger_details[:type][:weeks_interval]).to eq(2)
|
902
|
+
expect(trigger_details[:type][:days_of_week]).to eq(1)
|
903
|
+
subject.day "Mon, Sun"
|
904
|
+
subject.frequency_modifier 3
|
905
|
+
# call for update
|
906
|
+
subject.run_action(:create)
|
907
|
+
expect(subject).to be_updated_by_last_action
|
908
|
+
current_resource = call_for_load_current_resource
|
909
|
+
expect(current_resource.exists).to eq(true)
|
910
|
+
trigger_details = current_resource.task.trigger(0)
|
911
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
912
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
913
|
+
expect(trigger_details[:trigger_type]).to eq(3)
|
914
|
+
expect(trigger_details[:type][:weeks_interval]).to eq(3)
|
915
|
+
expect(trigger_details[:type][:days_of_week]).to eq(3)
|
916
|
+
end
|
917
|
+
|
918
|
+
it "does not converge the resource if it is already converged" do
|
919
|
+
subject.day "Mon, Fri"
|
920
|
+
subject.frequency_modifier 3
|
921
|
+
subject.run_action(:create)
|
922
|
+
subject.run_action(:create)
|
923
|
+
expect(subject).not_to be_updated_by_last_action
|
924
|
+
end
|
925
|
+
end
|
926
|
+
|
927
|
+
context "when day property set as last" do
|
928
|
+
it "raises argument error" do
|
929
|
+
subject.day "last"
|
930
|
+
expect { subject.after_created }.to raise_error("day values 1-31 or last is only valid with frequency :monthly")
|
931
|
+
end
|
932
|
+
end
|
933
|
+
|
934
|
+
context "when invalid day is passed" do
|
935
|
+
it "raises error" do
|
936
|
+
subject.day "abc"
|
937
|
+
expect { subject.after_created }.to raise_error("day property invalid. Only valid values are: MON, TUE, WED, THU, FRI, SAT, SUN, *. Multiple values must be separated by a comma.")
|
938
|
+
end
|
939
|
+
end
|
940
|
+
|
941
|
+
context "when months are passed" do
|
942
|
+
it "raises error that months are supported only when frequency=:monthly" do
|
943
|
+
subject.months "Jan"
|
944
|
+
expect { subject.after_created }.to raise_error("months property is only valid for tasks that run monthly")
|
945
|
+
end
|
946
|
+
end
|
947
|
+
|
948
|
+
context "when start_day is not set" do
|
949
|
+
it "does not converge the resource if it is already converged" do
|
950
|
+
subject.run_action(:create)
|
951
|
+
subject.run_action(:create)
|
952
|
+
expect(subject).not_to be_updated_by_last_action
|
953
|
+
end
|
954
|
+
|
955
|
+
it "updates the day if start_day is not provided and user updates day property" do
|
956
|
+
skip "Unable to run this test case since start_day is current system date which can be different each time so can't verify the dynamic values"
|
957
|
+
subject.run_action(:create)
|
958
|
+
current_resource = call_for_load_current_resource
|
959
|
+
expect(current_resource.exists).to eq(true)
|
960
|
+
trigger_details = current_resource.task.trigger(0)
|
961
|
+
expect(trigger_details[:type][:days_of_week]).to eq(8)
|
962
|
+
subject.day "Sat"
|
963
|
+
subject.run_action(:create)
|
964
|
+
# #loading current resource again to check new task is creted and it matches task parameters
|
965
|
+
current_resource = call_for_load_current_resource
|
966
|
+
expect(current_resource.exists).to eq(true)
|
967
|
+
trigger_details = current_resource.task.trigger(0)
|
968
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
969
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
970
|
+
expect(trigger_details[:trigger_type]).to eq(3)
|
971
|
+
expect(trigger_details[:type][:weeks_interval]).to eq(1)
|
972
|
+
expect(trigger_details[:type][:days_of_week]).to eq(64)
|
973
|
+
end
|
974
|
+
end
|
975
|
+
end
|
976
|
+
|
977
|
+
context "frequency :onstart" do
|
978
|
+
subject do
|
979
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
980
|
+
new_resource.command task_name
|
981
|
+
new_resource.run_level :highest
|
982
|
+
new_resource.frequency :onstart
|
983
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
984
|
+
new_resource
|
985
|
+
end
|
986
|
+
|
987
|
+
it "creates the scheduled task to run at system start up" do
|
988
|
+
call_for_create_action
|
989
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
990
|
+
current_resource = call_for_load_current_resource
|
991
|
+
expect(current_resource.exists).to eq(true)
|
992
|
+
trigger_details = current_resource.task.trigger(0)
|
993
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
994
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
995
|
+
expect(trigger_details[:trigger_type]).to eq(8)
|
996
|
+
end
|
997
|
+
|
998
|
+
it "does not converge the resource if it is already converged" do
|
999
|
+
subject.run_action(:create)
|
1000
|
+
subject.run_action(:create)
|
1001
|
+
expect(subject).not_to be_updated_by_last_action
|
1002
|
+
end
|
1003
|
+
|
1004
|
+
context "when start_day and start_time is set" do
|
1005
|
+
it "creates task to activate on '09/10/2018' at '15:00' when start_day = '09/10/2018' and start_time = '15:00' provided" do
|
1006
|
+
subject.start_day "09/10/2018"
|
1007
|
+
subject.start_time "15:00"
|
1008
|
+
call_for_create_action
|
1009
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
1010
|
+
current_resource = call_for_load_current_resource
|
1011
|
+
expect(current_resource.exists).to eq(true)
|
1012
|
+
trigger_details = current_resource.task.trigger(0)
|
1013
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
1014
|
+
expect(trigger_details[:trigger_type]).to eq(8)
|
1015
|
+
expect(trigger_details[:start_year]).to eq("2018")
|
1016
|
+
expect(trigger_details[:start_month]).to eq("09")
|
1017
|
+
expect(trigger_details[:start_day]).to eq("10")
|
1018
|
+
expect(trigger_details[:start_hour]).to eq("15")
|
1019
|
+
expect(trigger_details[:start_minute]).to eq("00")
|
1020
|
+
end
|
1021
|
+
end
|
1022
|
+
end
|
1023
|
+
|
1024
|
+
context "frequency :on_logon" do
|
1025
|
+
subject do
|
1026
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1027
|
+
new_resource.command task_name
|
1028
|
+
new_resource.run_level :highest
|
1029
|
+
new_resource.frequency :on_logon
|
1030
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1031
|
+
new_resource
|
1032
|
+
end
|
1033
|
+
|
1034
|
+
it "creates the scheduled task to on logon" do
|
1035
|
+
call_for_create_action
|
1036
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
1037
|
+
current_resource = call_for_load_current_resource
|
1038
|
+
expect(current_resource.exists).to eq(true)
|
1039
|
+
trigger_details = current_resource.task.trigger(0)
|
1040
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
1041
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
1042
|
+
expect(trigger_details[:trigger_type]).to eq(9)
|
1043
|
+
end
|
1044
|
+
|
1045
|
+
it "does not converge the resource if it is already converged" do
|
1046
|
+
subject.run_action(:create)
|
1047
|
+
subject.run_action(:create)
|
1048
|
+
expect(subject).not_to be_updated_by_last_action
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
context "when start_day and start_time is set" do
|
1052
|
+
it "creates task to activate on '09/10/2018' at '15:00' when start_day = '09/10/2018' and start_time = '15:00' provided" do
|
1053
|
+
subject.start_day "09/10/2018"
|
1054
|
+
subject.start_time "15:00"
|
1055
|
+
call_for_create_action
|
1056
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
1057
|
+
current_resource = call_for_load_current_resource
|
1058
|
+
expect(current_resource.exists).to eq(true)
|
1059
|
+
trigger_details = current_resource.task.trigger(0)
|
1060
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
1061
|
+
expect(trigger_details[:trigger_type]).to eq(9)
|
1062
|
+
expect(trigger_details[:start_year]).to eq("2018")
|
1063
|
+
expect(trigger_details[:start_month]).to eq("09")
|
1064
|
+
expect(trigger_details[:start_day]).to eq("10")
|
1065
|
+
expect(trigger_details[:start_hour]).to eq("15")
|
1066
|
+
expect(trigger_details[:start_minute]).to eq("00")
|
1067
|
+
end
|
1068
|
+
end
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
context "frequency :on_idle" do
|
1072
|
+
subject do
|
1073
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1074
|
+
new_resource.command task_name
|
1075
|
+
new_resource.run_level :highest
|
1076
|
+
new_resource.frequency :on_idle
|
1077
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1078
|
+
new_resource
|
1079
|
+
end
|
1080
|
+
|
1081
|
+
context "when idle_time is not passed" do
|
1082
|
+
it "raises error" do
|
1083
|
+
expect { subject.after_created }.to raise_error("idle_time value should be set for :on_idle frequency.")
|
1084
|
+
end
|
1085
|
+
end
|
1086
|
+
|
1087
|
+
context "when idle_time is passed" do
|
1088
|
+
it "creates the scheduled task to run when system is idle" do
|
1089
|
+
subject.idle_time 20
|
1090
|
+
call_for_create_action
|
1091
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
1092
|
+
current_resource = call_for_load_current_resource
|
1093
|
+
expect(current_resource.exists).to eq(true)
|
1094
|
+
trigger_details = current_resource.task.trigger(0)
|
1095
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
1096
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
1097
|
+
expect(trigger_details[:trigger_type]).to eq(6)
|
1098
|
+
expect(current_resource.task.settings[:idle_settings][:idle_duration]).to eq("PT20M")
|
1099
|
+
expect(current_resource.task.settings[:run_only_if_idle]).to eq(true)
|
1100
|
+
end
|
1101
|
+
|
1102
|
+
it "does not converge the resource if it is already converged" do
|
1103
|
+
subject.idle_time 20
|
1104
|
+
subject.run_action(:create)
|
1105
|
+
subject.run_action(:create)
|
1106
|
+
expect(subject).not_to be_updated_by_last_action
|
1107
|
+
end
|
1108
|
+
end
|
1109
|
+
|
1110
|
+
context "when start_day and start_time is set" do
|
1111
|
+
it "creates task to activate on '09/10/2018' at '15:00' when start_day = '09/10/2018' and start_time = '15:00' provided" do
|
1112
|
+
subject.idle_time 20
|
1113
|
+
subject.start_day "09/10/2018"
|
1114
|
+
subject.start_time "15:00"
|
1115
|
+
call_for_create_action
|
1116
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
1117
|
+
current_resource = call_for_load_current_resource
|
1118
|
+
expect(current_resource.exists).to eq(true)
|
1119
|
+
trigger_details = current_resource.task.trigger(0)
|
1120
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
1121
|
+
expect(trigger_details[:trigger_type]).to eq(6)
|
1122
|
+
expect(trigger_details[:start_year]).to eq("2018")
|
1123
|
+
expect(trigger_details[:start_month]).to eq("09")
|
1124
|
+
expect(trigger_details[:start_day]).to eq("10")
|
1125
|
+
expect(trigger_details[:start_hour]).to eq("15")
|
1126
|
+
expect(trigger_details[:start_minute]).to eq("00")
|
1127
|
+
end
|
1128
|
+
end
|
1129
|
+
end
|
1130
|
+
|
1131
|
+
context "when random_delay is passed" do
|
1132
|
+
subject do
|
1133
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1134
|
+
new_resource.command task_name
|
1135
|
+
new_resource.run_level :highest
|
1136
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1137
|
+
new_resource
|
1138
|
+
end
|
1139
|
+
|
1140
|
+
it "sets the random_delay for frequency :minute" do
|
1141
|
+
subject.frequency :minute
|
1142
|
+
subject.random_delay "20"
|
1143
|
+
call_for_create_action
|
1144
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
1145
|
+
current_resource = call_for_load_current_resource
|
1146
|
+
expect(current_resource.exists).to eq(true)
|
1147
|
+
trigger_details = current_resource.task.trigger(0)
|
1148
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
1149
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
1150
|
+
expect(trigger_details[:trigger_type]).to eq(1)
|
1151
|
+
expect(trigger_details[:random_minutes_interval]).to eq(20)
|
1152
|
+
end
|
1153
|
+
|
1154
|
+
it "does not converge the resource if it is already converged" do
|
1155
|
+
subject.frequency :minute
|
1156
|
+
subject.random_delay "20"
|
1157
|
+
subject.run_action(:create)
|
1158
|
+
subject.run_action(:create)
|
1159
|
+
expect(subject).not_to be_updated_by_last_action
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
it "raises error if invalid random_delay is passed" do
|
1163
|
+
subject.frequency :minute
|
1164
|
+
subject.random_delay "abc"
|
1165
|
+
expect { subject.after_created }.to raise_error("Invalid value passed for `random_delay`. Please pass seconds as an Integer (e.g. 60) or a String with numeric values only (e.g. '60').")
|
1166
|
+
end
|
1167
|
+
|
1168
|
+
it "raises error if random_delay is passed with frequency on_idle" do
|
1169
|
+
subject.frequency :on_idle
|
1170
|
+
subject.random_delay "20"
|
1171
|
+
expect { subject.after_created }.to raise_error("`random_delay` property is supported only for frequency :once, :minute, :hourly, :daily, :weekly and :monthly")
|
1172
|
+
end
|
1173
|
+
end
|
1174
|
+
|
1175
|
+
context "when battery options are passed" do
|
1176
|
+
subject do
|
1177
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1178
|
+
new_resource.command task_name
|
1179
|
+
new_resource.run_level :highest
|
1180
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1181
|
+
new_resource
|
1182
|
+
end
|
1183
|
+
|
1184
|
+
it "sets the default if options are not provided" do
|
1185
|
+
subject.frequency :minute
|
1186
|
+
call_for_create_action
|
1187
|
+
# loading current resource again to check new task is created and it matches task parameters
|
1188
|
+
current_resource = call_for_load_current_resource
|
1189
|
+
expect(current_resource.exists).to eq(true)
|
1190
|
+
expect(current_resource.stop_if_going_on_batteries).to eql(false)
|
1191
|
+
expect(current_resource.disallow_start_if_on_batteries).to eql(false)
|
1192
|
+
end
|
1193
|
+
|
1194
|
+
it "sets disallow_start_if_on_batteries to true" do
|
1195
|
+
subject.frequency :minute
|
1196
|
+
subject.disallow_start_if_on_batteries true
|
1197
|
+
call_for_create_action
|
1198
|
+
# loading current resource again to check new task is created and it matches task parameters
|
1199
|
+
current_resource = call_for_load_current_resource
|
1200
|
+
expect(current_resource.exists).to eq(true)
|
1201
|
+
expect(current_resource.task.settings[:disallow_start_if_on_batteries]).to eql(true)
|
1202
|
+
end
|
1203
|
+
|
1204
|
+
it "sets disallow_start_if_on_batteries to false" do
|
1205
|
+
subject.frequency :minute
|
1206
|
+
subject.disallow_start_if_on_batteries false
|
1207
|
+
call_for_create_action
|
1208
|
+
# loading current resource again to check new task is created and it matches task parameters
|
1209
|
+
current_resource = call_for_load_current_resource
|
1210
|
+
expect(current_resource.exists).to eq(true)
|
1211
|
+
expect(current_resource.task.settings[:disallow_start_if_on_batteries]).to eql(false)
|
1212
|
+
end
|
1213
|
+
|
1214
|
+
it "sets stop_if_going_on_batteries to true" do
|
1215
|
+
subject.frequency :minute
|
1216
|
+
subject.stop_if_going_on_batteries true
|
1217
|
+
call_for_create_action
|
1218
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
1219
|
+
current_resource = call_for_load_current_resource
|
1220
|
+
expect(current_resource.exists).to eq(true)
|
1221
|
+
expect(current_resource.task.settings[:stop_if_going_on_batteries]).to eql(true)
|
1222
|
+
end
|
1223
|
+
|
1224
|
+
it "sets stop_if_going_on_batteries to false" do
|
1225
|
+
subject.frequency :minute
|
1226
|
+
subject.stop_if_going_on_batteries false
|
1227
|
+
call_for_create_action
|
1228
|
+
# loading current resource again to check new task is created and it matches task parameters
|
1229
|
+
current_resource = call_for_load_current_resource
|
1230
|
+
expect(current_resource.exists).to eq(true)
|
1231
|
+
expect(current_resource.task.settings[:stop_if_going_on_batteries]).to eql(false)
|
1232
|
+
end
|
1233
|
+
|
1234
|
+
it "sets the default if options are nil" do
|
1235
|
+
subject.frequency :minute
|
1236
|
+
subject.stop_if_going_on_batteries nil
|
1237
|
+
subject.disallow_start_if_on_batteries nil
|
1238
|
+
call_for_create_action
|
1239
|
+
# loading current resource again to check new task is created and it matches task parameters
|
1240
|
+
current_resource = call_for_load_current_resource
|
1241
|
+
expect(current_resource.exists).to eq(true)
|
1242
|
+
expect(current_resource.task.settings[:stop_if_going_on_batteries]).to eql(false)
|
1243
|
+
expect(current_resource.task.settings[:disallow_start_if_on_batteries]).to eql(false)
|
1244
|
+
end
|
1245
|
+
|
1246
|
+
it "does not converge the resource if it is already converged" do
|
1247
|
+
subject.frequency :minute
|
1248
|
+
subject.stop_if_going_on_batteries true
|
1249
|
+
subject.disallow_start_if_on_batteries false
|
1250
|
+
subject.run_action(:create)
|
1251
|
+
subject.frequency :minute
|
1252
|
+
subject.stop_if_going_on_batteries true
|
1253
|
+
subject.disallow_start_if_on_batteries false
|
1254
|
+
subject.run_action(:create)
|
1255
|
+
expect(subject).not_to be_updated_by_last_action
|
1256
|
+
end
|
1257
|
+
end
|
1258
|
+
|
1259
|
+
context "frequency :none" do
|
1260
|
+
subject do
|
1261
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1262
|
+
new_resource.command task_name
|
1263
|
+
new_resource.run_level :highest
|
1264
|
+
new_resource.frequency :none
|
1265
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1266
|
+
new_resource
|
1267
|
+
end
|
1268
|
+
|
1269
|
+
it "creates the scheduled task to run on demand only" do
|
1270
|
+
call_for_create_action
|
1271
|
+
# loading current resource again to check new task is creted and it matches task parameters
|
1272
|
+
current_resource = call_for_load_current_resource
|
1273
|
+
expect(current_resource.exists).to eq(true)
|
1274
|
+
|
1275
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
1276
|
+
expect(current_resource.task.principals[:run_level]).to eq(1)
|
1277
|
+
expect(current_resource.task.trigger_count).to eq(0)
|
1278
|
+
end
|
1279
|
+
|
1280
|
+
it "does not converge the resource if it is already converged" do
|
1281
|
+
subject.run_action(:create)
|
1282
|
+
subject.run_action(:create)
|
1283
|
+
expect(subject).not_to be_updated_by_last_action
|
1284
|
+
end
|
1285
|
+
end
|
1286
|
+
end
|
1287
|
+
|
1288
|
+
context "task_name with parent folder" do
|
1289
|
+
describe "task_name with path '\\foo\\chef-client-functional-test' " do
|
1290
|
+
let(:task_name) { "\\foo\\chef-client-functional-test" }
|
1291
|
+
after { delete_task }
|
1292
|
+
subject do
|
1293
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1294
|
+
new_resource.command task_name
|
1295
|
+
new_resource.run_level :highest
|
1296
|
+
new_resource.frequency :once
|
1297
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1298
|
+
new_resource
|
1299
|
+
end
|
1300
|
+
|
1301
|
+
it "creates the scheduled task with task name 'chef-client-functional-test' inside path '\\foo'" do
|
1302
|
+
call_for_create_action
|
1303
|
+
current_resource = call_for_load_current_resource
|
1304
|
+
expect(current_resource.exists).to eq(true)
|
1305
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
1306
|
+
end
|
1307
|
+
|
1308
|
+
it "does not converge the resource if it is already converged" do
|
1309
|
+
subject.run_action(:create)
|
1310
|
+
subject.run_action(:create)
|
1311
|
+
expect(subject).not_to be_updated_by_last_action
|
1312
|
+
end
|
1313
|
+
end
|
1314
|
+
|
1315
|
+
describe "task_name with path '\\foo\\bar\\chef-client-functional-test' " do
|
1316
|
+
let(:task_name) { "\\foo\\bar\\chef-client-functional-test" }
|
1317
|
+
after { delete_task }
|
1318
|
+
subject do
|
1319
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1320
|
+
new_resource.command task_name
|
1321
|
+
new_resource.run_level :highest
|
1322
|
+
new_resource.frequency :once
|
1323
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1324
|
+
new_resource
|
1325
|
+
end
|
1326
|
+
|
1327
|
+
it "creates the scheduled task with task with name 'chef-client-functional-test' inside path '\\foo\\bar' " do
|
1328
|
+
call_for_create_action
|
1329
|
+
current_resource = call_for_load_current_resource
|
1330
|
+
expect(current_resource.exists).to eq(true)
|
1331
|
+
expect(current_resource.task.application_name).to eq(task_name)
|
1332
|
+
end
|
1333
|
+
|
1334
|
+
it "does not converge the resource if it is already converged" do
|
1335
|
+
subject.run_action(:create)
|
1336
|
+
subject.run_action(:create)
|
1337
|
+
expect(subject).not_to be_updated_by_last_action
|
1338
|
+
end
|
1339
|
+
end
|
1340
|
+
end
|
1341
|
+
|
1342
|
+
describe "priority" do
|
1343
|
+
after { delete_task }
|
1344
|
+
subject do
|
1345
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1346
|
+
new_resource.command task_name
|
1347
|
+
new_resource.frequency :once
|
1348
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1349
|
+
new_resource
|
1350
|
+
end
|
1351
|
+
|
1352
|
+
it "default sets to 7" do
|
1353
|
+
call_for_create_action
|
1354
|
+
current_resource = call_for_load_current_resource
|
1355
|
+
expect(current_resource.task.priority).to eq("below_normal_7")
|
1356
|
+
end
|
1357
|
+
|
1358
|
+
it "0 sets priority level to critical" do
|
1359
|
+
subject.priority = 0
|
1360
|
+
call_for_create_action
|
1361
|
+
current_resource = call_for_load_current_resource
|
1362
|
+
expect(current_resource.task.priority).to eq("critical")
|
1363
|
+
end
|
1364
|
+
|
1365
|
+
it "2 sets priority level to highest" do
|
1366
|
+
subject.priority = 1
|
1367
|
+
call_for_create_action
|
1368
|
+
current_resource = call_for_load_current_resource
|
1369
|
+
expect(current_resource.task.priority).to eq("highest")
|
1370
|
+
end
|
1371
|
+
|
1372
|
+
it "2 sets priority level to above_normal" do
|
1373
|
+
subject.priority = 2
|
1374
|
+
call_for_create_action
|
1375
|
+
current_resource = call_for_load_current_resource
|
1376
|
+
expect(current_resource.task.priority).to eq("above_normal_2")
|
1377
|
+
end
|
1378
|
+
|
1379
|
+
it "3 sets priority level to above_normal" do
|
1380
|
+
subject.priority = 3
|
1381
|
+
call_for_create_action
|
1382
|
+
current_resource = call_for_load_current_resource
|
1383
|
+
expect(current_resource.task.priority).to eq("above_normal_3")
|
1384
|
+
end
|
1385
|
+
|
1386
|
+
it "4 sets priority level to normal" do
|
1387
|
+
subject.priority = 4
|
1388
|
+
call_for_create_action
|
1389
|
+
current_resource = call_for_load_current_resource
|
1390
|
+
expect(current_resource.task.priority).to eq("normal_4")
|
1391
|
+
end
|
1392
|
+
|
1393
|
+
it "5 sets priority level to normal" do
|
1394
|
+
subject.priority = 5
|
1395
|
+
call_for_create_action
|
1396
|
+
current_resource = call_for_load_current_resource
|
1397
|
+
expect(current_resource.task.priority).to eq("normal_5")
|
1398
|
+
end
|
1399
|
+
|
1400
|
+
it "6 sets priority level to normal" do
|
1401
|
+
subject.priority = 6
|
1402
|
+
call_for_create_action
|
1403
|
+
current_resource = call_for_load_current_resource
|
1404
|
+
expect(current_resource.task.priority).to eq("normal_6")
|
1405
|
+
end
|
1406
|
+
|
1407
|
+
it "7 sets priority level to below_normal" do
|
1408
|
+
subject.priority = 7
|
1409
|
+
call_for_create_action
|
1410
|
+
current_resource = call_for_load_current_resource
|
1411
|
+
expect(current_resource.task.priority).to eq("below_normal_7")
|
1412
|
+
end
|
1413
|
+
|
1414
|
+
it "8 sets priority level to below_normal" do
|
1415
|
+
subject.priority = 8
|
1416
|
+
call_for_create_action
|
1417
|
+
current_resource = call_for_load_current_resource
|
1418
|
+
expect(current_resource.task.priority).to eq("below_normal_8")
|
1419
|
+
end
|
1420
|
+
|
1421
|
+
it "9 sets priority level to lowest" do
|
1422
|
+
subject.priority = 9
|
1423
|
+
call_for_create_action
|
1424
|
+
current_resource = call_for_load_current_resource
|
1425
|
+
expect(current_resource.task.priority).to eq("lowest")
|
1426
|
+
end
|
1427
|
+
|
1428
|
+
it "10 sets priority level to idle" do
|
1429
|
+
subject.priority = 10
|
1430
|
+
call_for_create_action
|
1431
|
+
current_resource = call_for_load_current_resource
|
1432
|
+
expect(current_resource.task.priority).to eq("idle")
|
1433
|
+
end
|
1434
|
+
|
1435
|
+
it "is idempotent" do
|
1436
|
+
subject.priority 8
|
1437
|
+
subject.run_action(:create)
|
1438
|
+
subject.run_action(:create)
|
1439
|
+
expect(subject).not_to be_updated_by_last_action
|
1440
|
+
end
|
1441
|
+
|
1442
|
+
end
|
1443
|
+
|
1444
|
+
describe "Examples of idempotent checks for each frequency" do
|
1445
|
+
after { delete_task }
|
1446
|
+
context "For frequency :once" do
|
1447
|
+
subject do
|
1448
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1449
|
+
new_resource.command task_name
|
1450
|
+
new_resource.run_level :highest
|
1451
|
+
new_resource.frequency :once
|
1452
|
+
new_resource.start_time "17:00"
|
1453
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1454
|
+
new_resource
|
1455
|
+
end
|
1456
|
+
|
1457
|
+
it "create task by adding frequency_modifier as 1" do
|
1458
|
+
subject.frequency_modifier 1
|
1459
|
+
subject.run_action(:create)
|
1460
|
+
subject.run_action(:create)
|
1461
|
+
expect(subject).not_to be_updated_by_last_action
|
1462
|
+
end
|
1463
|
+
|
1464
|
+
it "create task by adding frequency_modifier as 5" do
|
1465
|
+
subject.frequency_modifier 5
|
1466
|
+
subject.run_action(:create)
|
1467
|
+
subject.run_action(:create)
|
1468
|
+
expect(subject).not_to be_updated_by_last_action
|
1469
|
+
end
|
1470
|
+
end
|
1471
|
+
|
1472
|
+
context "For frequency :none" do
|
1473
|
+
subject do
|
1474
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1475
|
+
new_resource.command task_name
|
1476
|
+
new_resource.run_level :highest
|
1477
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1478
|
+
new_resource.frequency :none
|
1479
|
+
new_resource
|
1480
|
+
end
|
1481
|
+
|
1482
|
+
it "create task by adding frequency_modifier as 1" do
|
1483
|
+
subject.frequency_modifier 1
|
1484
|
+
subject.run_action(:create)
|
1485
|
+
subject.run_action(:create)
|
1486
|
+
expect(subject).not_to be_updated_by_last_action
|
1487
|
+
end
|
1488
|
+
|
1489
|
+
it "create task by adding frequency_modifier as 5" do
|
1490
|
+
subject.frequency_modifier 5
|
1491
|
+
subject.run_action(:create)
|
1492
|
+
subject.run_action(:create)
|
1493
|
+
expect(subject).not_to be_updated_by_last_action
|
1494
|
+
end
|
1495
|
+
end
|
1496
|
+
|
1497
|
+
context "For frequency :weekly" do
|
1498
|
+
subject do
|
1499
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1500
|
+
new_resource.command task_name
|
1501
|
+
new_resource.run_level :highest
|
1502
|
+
new_resource.frequency :weekly
|
1503
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1504
|
+
new_resource
|
1505
|
+
end
|
1506
|
+
|
1507
|
+
it "create task by adding start_day" do
|
1508
|
+
subject.start_day "12/28/2018"
|
1509
|
+
subject.run_action(:create)
|
1510
|
+
subject.run_action(:create)
|
1511
|
+
expect(subject).not_to be_updated_by_last_action
|
1512
|
+
end
|
1513
|
+
|
1514
|
+
it "create task by adding frequency_modifier and random_delay" do
|
1515
|
+
subject.frequency_modifier 3
|
1516
|
+
subject.random_delay "60"
|
1517
|
+
subject.run_action(:create)
|
1518
|
+
subject.run_action(:create)
|
1519
|
+
expect(subject).not_to be_updated_by_last_action
|
1520
|
+
end
|
1521
|
+
end
|
1522
|
+
|
1523
|
+
context "For frequency :monthly" do
|
1524
|
+
subject do
|
1525
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1526
|
+
new_resource.command task_name
|
1527
|
+
new_resource.run_level :highest
|
1528
|
+
new_resource.frequency :once
|
1529
|
+
new_resource.start_time "17:00"
|
1530
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1531
|
+
new_resource
|
1532
|
+
end
|
1533
|
+
|
1534
|
+
it "create task by adding frequency_modifier as 1" do
|
1535
|
+
subject.frequency_modifier 1
|
1536
|
+
subject.run_action(:create)
|
1537
|
+
subject.run_action(:create)
|
1538
|
+
expect(subject).not_to be_updated_by_last_action
|
1539
|
+
end
|
1540
|
+
|
1541
|
+
it "create task by adding frequency_modifier as 5" do
|
1542
|
+
subject.frequency_modifier 5
|
1543
|
+
subject.run_action(:create)
|
1544
|
+
subject.run_action(:create)
|
1545
|
+
expect(subject).not_to be_updated_by_last_action
|
1546
|
+
end
|
1547
|
+
end
|
1548
|
+
|
1549
|
+
context "For frequency :hourly" do
|
1550
|
+
subject do
|
1551
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1552
|
+
new_resource.command task_name
|
1553
|
+
new_resource.run_level :highest
|
1554
|
+
new_resource.frequency :hourly
|
1555
|
+
new_resource.frequency_modifier 5
|
1556
|
+
new_resource.random_delay "2400"
|
1557
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1558
|
+
new_resource
|
1559
|
+
end
|
1560
|
+
|
1561
|
+
it "create task by adding frequency_modifier and random_delay" do
|
1562
|
+
subject.run_action(:create)
|
1563
|
+
subject.run_action(:create)
|
1564
|
+
expect(subject).not_to be_updated_by_last_action
|
1565
|
+
end
|
1566
|
+
end
|
1567
|
+
|
1568
|
+
context "For frequency :daily" do
|
1569
|
+
subject do
|
1570
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1571
|
+
new_resource.command task_name
|
1572
|
+
new_resource.run_level :highest
|
1573
|
+
new_resource.frequency :daily
|
1574
|
+
new_resource.frequency_modifier 2
|
1575
|
+
new_resource.random_delay "2400"
|
1576
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1577
|
+
new_resource
|
1578
|
+
end
|
1579
|
+
|
1580
|
+
it "create task by adding frequency_modifier and random_delay" do
|
1581
|
+
subject.run_action(:create)
|
1582
|
+
subject.run_action(:create)
|
1583
|
+
expect(subject).not_to be_updated_by_last_action
|
1584
|
+
end
|
1585
|
+
end
|
1586
|
+
|
1587
|
+
context "For frequency :on_logon" do
|
1588
|
+
subject do
|
1589
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1590
|
+
new_resource.command task_name
|
1591
|
+
new_resource.frequency :on_logon
|
1592
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1593
|
+
new_resource
|
1594
|
+
end
|
1595
|
+
|
1596
|
+
it "create task by adding frequency_modifier and random_delay" do
|
1597
|
+
subject.run_action(:create)
|
1598
|
+
subject.run_action(:create)
|
1599
|
+
expect(subject).not_to be_updated_by_last_action
|
1600
|
+
end
|
1601
|
+
|
1602
|
+
it "create task by adding frequency_modifier as 5" do
|
1603
|
+
subject.frequency_modifier 5
|
1604
|
+
subject.run_action(:create)
|
1605
|
+
subject.run_action(:create)
|
1606
|
+
expect(subject).not_to be_updated_by_last_action
|
1607
|
+
end
|
1608
|
+
end
|
1609
|
+
|
1610
|
+
context "For frequency :onstart" do
|
1611
|
+
subject do
|
1612
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1613
|
+
new_resource.command task_name
|
1614
|
+
new_resource.run_level :highest
|
1615
|
+
new_resource.frequency :onstart
|
1616
|
+
new_resource.frequency_modifier 20
|
1617
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1618
|
+
new_resource
|
1619
|
+
end
|
1620
|
+
|
1621
|
+
it "create task by adding frequency_modifier as 20" do
|
1622
|
+
subject.run_action(:create)
|
1623
|
+
subject.run_action(:create)
|
1624
|
+
expect(subject).not_to be_updated_by_last_action
|
1625
|
+
end
|
1626
|
+
end
|
1627
|
+
end
|
1628
|
+
|
1629
|
+
describe "#after_created" do
|
1630
|
+
subject do
|
1631
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1632
|
+
new_resource.command task_name
|
1633
|
+
new_resource.run_level :highest
|
1634
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1635
|
+
new_resource
|
1636
|
+
end
|
1637
|
+
|
1638
|
+
context "when start_day is passed with frequency :onstart" do
|
1639
|
+
it "does not raises error" do
|
1640
|
+
subject.frequency :onstart
|
1641
|
+
subject.start_day "09/20/2017"
|
1642
|
+
expect { subject.after_created }.not_to raise_error
|
1643
|
+
end
|
1644
|
+
end
|
1645
|
+
|
1646
|
+
context "when a non system user is passed without password" do
|
1647
|
+
it "raises error" do
|
1648
|
+
subject.user "USER"
|
1649
|
+
subject.frequency :onstart
|
1650
|
+
expect { subject.after_created }.to raise_error(%q{Please provide a password or check if this task needs to be interactive! Valid passwordless users are: 'SYSTEM', 'NT AUTHORITY\SYSTEM', 'LOCAL SERVICE', 'NT AUTHORITY\LOCAL SERVICE', 'NETWORK SERVICE', 'NT AUTHORITY\NETWORK SERVICE', 'ADMINISTRATORS', 'BUILTIN\ADMINISTRATORS', 'USERS', 'BUILTIN\USERS', 'GUESTS', 'BUILTIN\GUESTS'})
|
1651
|
+
end
|
1652
|
+
it "does not raises error when task is interactive" do
|
1653
|
+
subject.user "USER"
|
1654
|
+
subject.frequency :onstart
|
1655
|
+
subject.interactive_enabled true
|
1656
|
+
expect { subject.after_created }.not_to raise_error
|
1657
|
+
end
|
1658
|
+
end
|
1659
|
+
|
1660
|
+
context "when a system user is passed without password" do
|
1661
|
+
it "does not raises error" do
|
1662
|
+
subject.user "ADMINISTRATORS"
|
1663
|
+
subject.frequency :onstart
|
1664
|
+
expect { subject.after_created }.not_to raise_error
|
1665
|
+
end
|
1666
|
+
it "does not raises error when task is interactive" do
|
1667
|
+
subject.user "ADMINISTRATORS"
|
1668
|
+
subject.frequency :onstart
|
1669
|
+
subject.interactive_enabled true
|
1670
|
+
expect { subject.after_created }.not_to raise_error
|
1671
|
+
end
|
1672
|
+
end
|
1673
|
+
|
1674
|
+
context "when a non system user is passed with password" do
|
1675
|
+
it "does not raises error" do
|
1676
|
+
subject.user "USER"
|
1677
|
+
subject.password "XXXX"
|
1678
|
+
subject.frequency :onstart
|
1679
|
+
expect { subject.after_created }.not_to raise_error
|
1680
|
+
end
|
1681
|
+
it "does not raises error when task is interactive" do
|
1682
|
+
subject.user "USER"
|
1683
|
+
subject.password "XXXX"
|
1684
|
+
subject.frequency :onstart
|
1685
|
+
subject.interactive_enabled true
|
1686
|
+
expect { subject.after_created }.not_to raise_error
|
1687
|
+
end
|
1688
|
+
end
|
1689
|
+
|
1690
|
+
context "when a system user is passed with password" do
|
1691
|
+
it "raises error" do
|
1692
|
+
subject.user "ADMINISTRATORS"
|
1693
|
+
subject.password "XXXX"
|
1694
|
+
subject.frequency :onstart
|
1695
|
+
expect { subject.after_created }.to raise_error("Password is not required for system users.")
|
1696
|
+
end
|
1697
|
+
it "raises error when task is interactive" do
|
1698
|
+
subject.user "ADMINISTRATORS"
|
1699
|
+
subject.password "XXXX"
|
1700
|
+
subject.frequency :onstart
|
1701
|
+
subject.interactive_enabled true
|
1702
|
+
expect { subject.after_created }.to raise_error("Password is not required for system users.")
|
1703
|
+
end
|
1704
|
+
end
|
1705
|
+
|
1706
|
+
context "when frequency_modifier > 1439 is passed for frequency=:minute" do
|
1707
|
+
it "raises error" do
|
1708
|
+
subject.frequency_modifier 1450
|
1709
|
+
subject.frequency :minute
|
1710
|
+
expect { subject.after_created }.to raise_error("frequency_modifier value 1450 is invalid. Valid values for :minute frequency are 1 - 1439.")
|
1711
|
+
end
|
1712
|
+
end
|
1713
|
+
|
1714
|
+
context "when frequency_modifier > 23 is passed for frequency=:minute" do
|
1715
|
+
it "raises error" do
|
1716
|
+
subject.frequency_modifier 24
|
1717
|
+
subject.frequency :hourly
|
1718
|
+
expect { subject.after_created }.to raise_error("frequency_modifier value 24 is invalid. Valid values for :hourly frequency are 1 - 23.")
|
1719
|
+
end
|
1720
|
+
end
|
1721
|
+
|
1722
|
+
context "when frequency_modifier > 23 is passed for frequency=:minute" do
|
1723
|
+
it "raises error" do
|
1724
|
+
subject.frequency_modifier 366
|
1725
|
+
subject.frequency :daily
|
1726
|
+
expect { subject.after_created }.to raise_error("frequency_modifier value 366 is invalid. Valid values for :daily frequency are 1 - 365.")
|
1727
|
+
end
|
1728
|
+
end
|
1729
|
+
|
1730
|
+
context "when frequency_modifier > 52 is passed for frequency=:minute" do
|
1731
|
+
it "raises error" do
|
1732
|
+
subject.frequency_modifier 53
|
1733
|
+
subject.frequency :weekly
|
1734
|
+
expect { subject.after_created }.to raise_error("frequency_modifier value 53 is invalid. Valid values for :weekly frequency are 1 - 52.")
|
1735
|
+
end
|
1736
|
+
end
|
1737
|
+
|
1738
|
+
context "when invalid frequency_modifier is passed for :monthly frequency" do
|
1739
|
+
it "raises error" do
|
1740
|
+
subject.frequency :monthly
|
1741
|
+
subject.frequency_modifier "13"
|
1742
|
+
expect { subject.after_created }.to raise_error("frequency_modifier value 13 is invalid. Valid values for :monthly frequency are 1 - 12, 'FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST'.")
|
1743
|
+
end
|
1744
|
+
end
|
1745
|
+
|
1746
|
+
context "when invalid frequency_modifier is passed for :monthly frequency" do
|
1747
|
+
it "raises error" do
|
1748
|
+
subject.frequency :monthly
|
1749
|
+
subject.frequency_modifier "xyz"
|
1750
|
+
expect { subject.after_created }.to raise_error("frequency_modifier value xyz is invalid. Valid values for :monthly frequency are 1 - 12, 'FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST'.")
|
1751
|
+
end
|
1752
|
+
end
|
1753
|
+
|
1754
|
+
context "when invalid months are passed" do
|
1755
|
+
it "raises error" do
|
1756
|
+
subject.months "xyz"
|
1757
|
+
subject.frequency :monthly
|
1758
|
+
expect { subject.after_created }.to raise_error("months property invalid. Only valid values are: JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, *. Multiple values must be separated by a comma.")
|
1759
|
+
end
|
1760
|
+
end
|
1761
|
+
|
1762
|
+
context "when idle_time > 999 is passed" do
|
1763
|
+
it "raises error" do
|
1764
|
+
subject.idle_time 1000
|
1765
|
+
subject.frequency :on_idle
|
1766
|
+
expect { subject.after_created }.to raise_error("idle_time value 1000 is invalid. Valid values for :on_idle frequency are 1 - 999.")
|
1767
|
+
end
|
1768
|
+
end
|
1769
|
+
|
1770
|
+
context "when idle_time is passed for frequency=:monthly" do
|
1771
|
+
it "raises error" do
|
1772
|
+
subject.idle_time 300
|
1773
|
+
subject.frequency :monthly
|
1774
|
+
expect { subject.after_created }.to raise_error("idle_time property is only valid for tasks that run on_idle")
|
1775
|
+
end
|
1776
|
+
end
|
1777
|
+
end
|
1778
|
+
|
1779
|
+
describe "action :delete" do
|
1780
|
+
subject do
|
1781
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1782
|
+
new_resource.command task_name
|
1783
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
|
1784
|
+
new_resource.frequency :hourly
|
1785
|
+
new_resource
|
1786
|
+
end
|
1787
|
+
|
1788
|
+
it "does not converge the resource if it is already converged" do
|
1789
|
+
subject.run_action(:create)
|
1790
|
+
subject.run_action(:delete)
|
1791
|
+
subject.run_action(:delete)
|
1792
|
+
expect(subject).not_to be_updated_by_last_action
|
1793
|
+
end
|
1794
|
+
|
1795
|
+
it "does not converge the resource if it is already converged" do
|
1796
|
+
subject.run_action(:create)
|
1797
|
+
subject.run_action(:delete)
|
1798
|
+
subject.run_action(:delete)
|
1799
|
+
expect(subject).not_to be_updated_by_last_action
|
1800
|
+
end
|
1801
|
+
end
|
1802
|
+
|
1803
|
+
describe "action :run" do
|
1804
|
+
after { delete_task }
|
1805
|
+
|
1806
|
+
subject do
|
1807
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1808
|
+
new_resource.command "dir"
|
1809
|
+
new_resource.run_level :highest
|
1810
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1811
|
+
new_resource.frequency :hourly
|
1812
|
+
new_resource
|
1813
|
+
end
|
1814
|
+
|
1815
|
+
it "runs the existing task" do
|
1816
|
+
subject.run_action(:create)
|
1817
|
+
subject.run_action(:run)
|
1818
|
+
current_resource = call_for_load_current_resource
|
1819
|
+
expect(current_resource.task.status).to eq("queued").or eq("running").or eq("ready") # queued or can be running
|
1820
|
+
end
|
1821
|
+
end
|
1822
|
+
|
1823
|
+
describe "action :end", :volatile do
|
1824
|
+
after { delete_task }
|
1825
|
+
|
1826
|
+
subject do
|
1827
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1828
|
+
new_resource.command "dir"
|
1829
|
+
new_resource.run_level :highest
|
1830
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1831
|
+
new_resource
|
1832
|
+
end
|
1833
|
+
|
1834
|
+
it "ends the running task" do
|
1835
|
+
subject.run_action(:create)
|
1836
|
+
subject.run_action(:run)
|
1837
|
+
subject.run_action(:end)
|
1838
|
+
current_resource = call_for_load_current_resource
|
1839
|
+
expect(current_resource.task.status).to eq("queued").or eq("ready") # queued or can be ready
|
1840
|
+
end
|
1841
|
+
end
|
1842
|
+
|
1843
|
+
describe "action :enable" do
|
1844
|
+
let(:task_name) { "chef-client-functional-test-enable" }
|
1845
|
+
after { delete_task }
|
1846
|
+
|
1847
|
+
subject do
|
1848
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1849
|
+
new_resource.command task_name
|
1850
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1851
|
+
new_resource.frequency :hourly
|
1852
|
+
new_resource
|
1853
|
+
end
|
1854
|
+
|
1855
|
+
it "enables the disabled task" do
|
1856
|
+
subject.run_action(:create)
|
1857
|
+
subject.run_action(:disable)
|
1858
|
+
current_resource = call_for_load_current_resource
|
1859
|
+
expect(current_resource.task.status).to eq("not scheduled")
|
1860
|
+
subject.run_action(:enable)
|
1861
|
+
current_resource = call_for_load_current_resource
|
1862
|
+
expect(current_resource.task.status).to eq("ready")
|
1863
|
+
end
|
1864
|
+
end
|
1865
|
+
|
1866
|
+
describe "action :disable" do
|
1867
|
+
let(:task_name) { "chef-client-functional-test-disable" }
|
1868
|
+
after { delete_task }
|
1869
|
+
|
1870
|
+
subject do
|
1871
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1872
|
+
new_resource.command task_name
|
1873
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1874
|
+
new_resource.frequency :hourly
|
1875
|
+
new_resource
|
1876
|
+
end
|
1877
|
+
|
1878
|
+
it "disables the task" do
|
1879
|
+
subject.run_action(:create)
|
1880
|
+
subject.run_action(:disable)
|
1881
|
+
current_resource = call_for_load_current_resource
|
1882
|
+
expect(current_resource.task.status).to eq("not scheduled")
|
1883
|
+
end
|
1884
|
+
end
|
1885
|
+
|
1886
|
+
describe "action :change" do
|
1887
|
+
after { delete_task }
|
1888
|
+
subject do
|
1889
|
+
new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1890
|
+
new_resource.command task_name
|
1891
|
+
new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since
|
1892
|
+
new_resource.frequency :hourly
|
1893
|
+
new_resource
|
1894
|
+
end
|
1895
|
+
|
1896
|
+
it "call action_create since change action is alias for create" do
|
1897
|
+
subject.run_action(:change)
|
1898
|
+
expect(subject).to be_updated_by_last_action
|
1899
|
+
end
|
1900
|
+
end
|
1901
|
+
|
1902
|
+
def delete_task
|
1903
|
+
task_to_delete = Chef::Resource::WindowsTask.new(task_name, run_context)
|
1904
|
+
task_to_delete.run_action(:delete)
|
1905
|
+
end
|
1906
|
+
|
1907
|
+
def call_for_create_action
|
1908
|
+
current_resource = call_for_load_current_resource
|
1909
|
+
expect(current_resource.exists).to eq(false)
|
1910
|
+
subject.run_action(:create)
|
1911
|
+
expect(subject).to be_updated_by_last_action
|
1912
|
+
end
|
1913
|
+
|
1914
|
+
def call_for_load_current_resource
|
1915
|
+
windows_task_provider.send(:load_current_resource)
|
1916
|
+
end
|
1917
|
+
end
|