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.
Files changed (1980) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +72 -72
  3. data/LICENSE +201 -201
  4. data/README.md +240 -240
  5. data/Rakefile +72 -72
  6. data/bin/chef-apply +24 -24
  7. data/bin/chef-client +25 -25
  8. data/bin/chef-resource-inspector +26 -26
  9. data/bin/chef-service-manager +37 -37
  10. data/bin/chef-shell +31 -31
  11. data/bin/chef-solo +24 -24
  12. data/bin/chef-windows-service +34 -34
  13. data/bin/knife +24 -24
  14. data/chef-universal-mingw32.gemspec +24 -24
  15. data/chef.gemspec +62 -62
  16. data/distro/powershell/chef/chef.psm1 +459 -459
  17. data/ext/win32-eventlog/Rakefile +53 -53
  18. data/ext/win32-eventlog/chef-log.man +56 -56
  19. data/lib/.DS_Store +0 -0
  20. data/lib/chef.rb +34 -34
  21. data/lib/chef/.DS_Store +0 -0
  22. data/lib/chef/api_client.rb +228 -228
  23. data/lib/chef/api_client/registration.rb +200 -200
  24. data/lib/chef/api_client_v1.rb +326 -326
  25. data/lib/chef/application.rb +398 -398
  26. data/lib/chef/application/apply.rb +226 -226
  27. data/lib/chef/application/client.rb +559 -559
  28. data/lib/chef/application/exit_code.rb +164 -164
  29. data/lib/chef/application/knife.rb +221 -221
  30. data/lib/chef/application/solo.rb +381 -381
  31. data/lib/chef/application/windows_service.rb +337 -337
  32. data/lib/chef/application/windows_service_manager.rb +204 -204
  33. data/lib/chef/applications.rb +4 -4
  34. data/lib/chef/audit/audit_event_proxy.rb +93 -93
  35. data/lib/chef/audit/audit_reporter.rb +176 -176
  36. data/lib/chef/audit/control_group_data.rb +145 -145
  37. data/lib/chef/audit/logger.rb +36 -36
  38. data/lib/chef/audit/rspec_formatter.rb +37 -37
  39. data/lib/chef/audit/runner.rb +196 -196
  40. data/lib/chef/blacklist.rb +81 -81
  41. data/lib/chef/chef_class.rb +248 -248
  42. data/lib/chef/chef_fs.rb +59 -59
  43. data/lib/chef/chef_fs/chef_fs_data_store.rb +870 -870
  44. data/lib/chef/chef_fs/command_line.rb +291 -291
  45. data/lib/chef/chef_fs/config.rb +284 -284
  46. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -26
  47. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +39 -39
  48. data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +11 -11
  49. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -35
  50. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -38
  51. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +67 -67
  52. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +207 -207
  53. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -40
  54. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -55
  55. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -36
  56. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +36 -36
  57. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -17
  58. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -17
  59. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +48 -48
  60. data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -33
  61. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -40
  62. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -29
  63. data/lib/chef/chef_fs/file_pattern.rb +301 -301
  64. data/lib/chef/chef_fs/file_system.rb +431 -431
  65. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
  66. data/lib/chef/chef_fs/file_system/base_fs_object.rb +187 -187
  67. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +65 -65
  68. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +67 -67
  69. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +75 -75
  70. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +196 -196
  71. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +38 -38
  72. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +106 -106
  73. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +208 -208
  74. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +78 -78
  75. data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +61 -61
  76. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +42 -42
  77. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +105 -105
  78. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +76 -76
  79. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -19
  80. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +67 -67
  81. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +56 -56
  82. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +51 -51
  83. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +35 -35
  84. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +65 -65
  85. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +64 -64
  86. data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +41 -41
  87. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +158 -158
  88. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +135 -135
  89. data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +43 -43
  90. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +38 -38
  91. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +176 -176
  92. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +207 -207
  93. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +45 -45
  94. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +111 -111
  95. data/lib/chef/chef_fs/file_system/exceptions.rb +105 -105
  96. data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +53 -53
  97. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +20 -20
  98. data/lib/chef/chef_fs/file_system/memory/memory_root.rb +23 -23
  99. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +62 -62
  100. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +32 -32
  101. data/lib/chef/chef_fs/file_system/repository/acl.rb +45 -45
  102. data/lib/chef/chef_fs/file_system/repository/acls_dir.rb +50 -50
  103. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +38 -38
  104. data/lib/chef/chef_fs/file_system/repository/base_file.rb +155 -155
  105. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +41 -41
  106. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +143 -143
  107. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +177 -177
  108. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +232 -232
  109. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +42 -42
  110. data/lib/chef/chef_fs/file_system/repository/client.rb +38 -38
  111. data/lib/chef/chef_fs/file_system/repository/client_key.rb +38 -38
  112. data/lib/chef/chef_fs/file_system/repository/client_keys_dir.rb +42 -42
  113. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +38 -38
  114. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +37 -37
  115. data/lib/chef/chef_fs/file_system/repository/container.rb +38 -38
  116. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +37 -37
  117. data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +36 -36
  118. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +51 -51
  119. data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -39
  120. data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +38 -38
  121. data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -39
  122. data/lib/chef/chef_fs/file_system/repository/directory.rb +167 -167
  123. data/lib/chef/chef_fs/file_system/repository/environment.rb +38 -38
  124. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +37 -37
  125. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +151 -151
  126. data/lib/chef/chef_fs/file_system/repository/group.rb +38 -38
  127. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +37 -37
  128. data/lib/chef/chef_fs/file_system/repository/node.rb +38 -38
  129. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +59 -59
  130. data/lib/chef/chef_fs/file_system/repository/policies_dir.rb +42 -42
  131. data/lib/chef/chef_fs/file_system/repository/policy.rb +38 -38
  132. data/lib/chef/chef_fs/file_system/repository/policy_group.rb +38 -38
  133. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +37 -37
  134. data/lib/chef/chef_fs/file_system/repository/role.rb +38 -38
  135. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +37 -37
  136. data/lib/chef/chef_fs/file_system/repository/user.rb +38 -38
  137. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +37 -37
  138. data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +34 -34
  139. data/lib/chef/chef_fs/file_system_cache.rb +80 -80
  140. data/lib/chef/chef_fs/knife.rb +161 -161
  141. data/lib/chef/chef_fs/parallelizer.rb +103 -103
  142. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
  143. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +277 -277
  144. data/lib/chef/chef_fs/path_utils.rb +127 -127
  145. data/lib/chef/client.rb +1037 -1037
  146. data/lib/chef/config.rb +84 -84
  147. data/lib/chef/config_fetcher.rb +72 -72
  148. data/lib/chef/constants.rb +28 -28
  149. data/lib/chef/cookbook/chefignore.rb +78 -78
  150. data/lib/chef/cookbook/cookbook_collection.rb +63 -63
  151. data/lib/chef/cookbook/cookbook_version_loader.rb +267 -267
  152. data/lib/chef/cookbook/file_system_file_vendor.rb +58 -58
  153. data/lib/chef/cookbook/file_vendor.rb +71 -71
  154. data/lib/chef/cookbook/gem_installer.rb +100 -95
  155. data/lib/chef/cookbook/manifest_v0.rb +73 -73
  156. data/lib/chef/cookbook/manifest_v2.rb +45 -45
  157. data/lib/chef/cookbook/metadata.rb +804 -804
  158. data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
  159. data/lib/chef/cookbook/synchronizer.rb +312 -312
  160. data/lib/chef/cookbook/syntax_check.rb +260 -260
  161. data/lib/chef/cookbook_loader.rb +208 -208
  162. data/lib/chef/cookbook_manifest.rb +328 -328
  163. data/lib/chef/cookbook_site_streaming_uploader.rb +241 -241
  164. data/lib/chef/cookbook_uploader.rb +156 -156
  165. data/lib/chef/cookbook_version.rb +544 -544
  166. data/lib/chef/daemon.rb +131 -131
  167. data/lib/chef/data_bag.rb +174 -174
  168. data/lib/chef/data_bag_item.rb +209 -209
  169. data/lib/chef/data_collector.rb +565 -565
  170. data/lib/chef/data_collector/messages.rb +100 -100
  171. data/lib/chef/data_collector/messages/helpers.rb +159 -159
  172. data/lib/chef/data_collector/resource_report.rb +123 -123
  173. data/lib/chef/decorator.rb +81 -81
  174. data/lib/chef/decorator/lazy.rb +60 -60
  175. data/lib/chef/decorator/lazy_array.rb +59 -59
  176. data/lib/chef/decorator/unchain.rb +43 -43
  177. data/lib/chef/delayed_evaluator.rb +21 -21
  178. data/lib/chef/deprecated.rb +248 -248
  179. data/lib/chef/deprecation/warnings.rb +38 -38
  180. data/lib/chef/digester.rb +74 -74
  181. data/lib/chef/dsl.rb +6 -6
  182. data/lib/chef/dsl/.DS_Store +0 -0
  183. data/lib/chef/dsl/audit.rb +51 -51
  184. data/lib/chef/dsl/chef_provisioning.rb +57 -57
  185. data/lib/chef/dsl/cheffish.rb +65 -65
  186. data/lib/chef/dsl/core.rb +52 -52
  187. data/lib/chef/dsl/data_query.rb +103 -103
  188. data/lib/chef/dsl/declare_resource.rb +319 -319
  189. data/lib/chef/dsl/definitions.rb +43 -43
  190. data/lib/chef/dsl/include_attribute.rb +57 -57
  191. data/lib/chef/dsl/include_recipe.rb +40 -40
  192. data/lib/chef/dsl/platform_introspection.rb +269 -269
  193. data/lib/chef/dsl/powershell.rb +29 -29
  194. data/lib/chef/dsl/reboot_pending.rb +57 -57
  195. data/lib/chef/dsl/recipe.rb +76 -76
  196. data/lib/chef/dsl/registry_helper.rb +63 -63
  197. data/lib/chef/dsl/resources.rb +49 -49
  198. data/lib/chef/dsl/universal.rb +60 -60
  199. data/lib/chef/encrypted_data_bag_item.rb +157 -157
  200. data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -54
  201. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -56
  202. data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -22
  203. data/lib/chef/encrypted_data_bag_item/decryptor.rb +227 -227
  204. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -37
  205. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -22
  206. data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -225
  207. data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -22
  208. data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -22
  209. data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -22
  210. data/lib/chef/environment.rb +319 -319
  211. data/lib/chef/event_dispatch/base.rb +445 -445
  212. data/lib/chef/event_dispatch/dispatcher.rb +62 -62
  213. data/lib/chef/event_dispatch/dsl.rb +65 -65
  214. data/lib/chef/event_dispatch/events_output_stream.rb +37 -37
  215. data/lib/chef/event_loggers/base.rb +62 -62
  216. data/lib/chef/event_loggers/windows_eventlog.rb +101 -101
  217. data/lib/chef/exceptions.rb +543 -531
  218. data/lib/chef/file_access_control.rb +75 -75
  219. data/lib/chef/file_access_control/unix.rb +290 -290
  220. data/lib/chef/file_access_control/windows.rb +337 -337
  221. data/lib/chef/file_cache.rb +223 -223
  222. data/lib/chef/file_content_management/content_base.rb +58 -58
  223. data/lib/chef/file_content_management/deploy.rb +37 -37
  224. data/lib/chef/file_content_management/deploy/cp.rb +48 -48
  225. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -77
  226. data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
  227. data/lib/chef/file_content_management/tempfile.rb +107 -107
  228. data/lib/chef/formatters/base.rb +246 -246
  229. data/lib/chef/formatters/doc.rb +443 -443
  230. data/lib/chef/formatters/error_description.rb +86 -86
  231. data/lib/chef/formatters/error_inspectors.rb +19 -19
  232. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +183 -183
  233. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +154 -154
  234. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -168
  235. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +82 -82
  236. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +128 -128
  237. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +147 -147
  238. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +124 -124
  239. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +121 -121
  240. data/lib/chef/formatters/error_mapper.rb +85 -85
  241. data/lib/chef/formatters/indentable_output_stream.rb +182 -182
  242. data/lib/chef/formatters/minimal.rb +233 -233
  243. data/lib/chef/guard_interpreter.rb +32 -32
  244. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +47 -47
  245. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
  246. data/lib/chef/handler.rb +266 -266
  247. data/lib/chef/handler/error_report.rb +33 -33
  248. data/lib/chef/handler/json_file.rb +62 -62
  249. data/lib/chef/http.rb +539 -539
  250. data/lib/chef/http/api_versions.rb +56 -56
  251. data/lib/chef/http/auth_credentials.rb +59 -59
  252. data/lib/chef/http/authenticator.rb +118 -118
  253. data/lib/chef/http/basic_client.rb +157 -157
  254. data/lib/chef/http/cookie_jar.rb +31 -31
  255. data/lib/chef/http/cookie_manager.rb +59 -59
  256. data/lib/chef/http/decompressor.rb +142 -142
  257. data/lib/chef/http/http_request.rb +189 -189
  258. data/lib/chef/http/json_input.rb +73 -73
  259. data/lib/chef/http/json_output.rb +81 -81
  260. data/lib/chef/http/json_to_model_output.rb +34 -34
  261. data/lib/chef/http/remote_request_id.rb +46 -46
  262. data/lib/chef/http/simple.rb +40 -40
  263. data/lib/chef/http/simple_json.rb +43 -43
  264. data/lib/chef/http/socketless_chef_zero_client.rb +209 -209
  265. data/lib/chef/http/ssl_policies.rb +130 -130
  266. data/lib/chef/http/validate_content_length.rb +114 -114
  267. data/lib/chef/json_compat.rb +68 -68
  268. data/lib/chef/key.rb +269 -269
  269. data/lib/chef/knife.rb +620 -620
  270. data/lib/chef/knife/.DS_Store +0 -0
  271. data/lib/chef/knife/bootstrap.rb +525 -501
  272. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +159 -159
  273. data/lib/chef/knife/bootstrap/client_builder.rb +208 -208
  274. data/lib/chef/knife/bootstrap/templates/README.md +11 -11
  275. data/lib/chef/knife/bootstrap/templates/chef-full.erb +243 -243
  276. data/lib/chef/knife/client_bulk_delete.rb +103 -103
  277. data/lib/chef/knife/client_create.rb +110 -110
  278. data/lib/chef/knife/client_delete.rb +62 -62
  279. data/lib/chef/knife/client_edit.rb +52 -52
  280. data/lib/chef/knife/client_key_create.rb +70 -70
  281. data/lib/chef/knife/client_key_delete.rb +77 -77
  282. data/lib/chef/knife/client_key_edit.rb +80 -80
  283. data/lib/chef/knife/client_key_list.rb +70 -70
  284. data/lib/chef/knife/client_key_show.rb +77 -77
  285. data/lib/chef/knife/client_list.rb +41 -41
  286. data/lib/chef/knife/client_reregister.rb +58 -58
  287. data/lib/chef/knife/client_show.rb +48 -48
  288. data/lib/chef/knife/config_get.rb +126 -126
  289. data/lib/chef/knife/config_get_profile.rb +37 -37
  290. data/lib/chef/knife/config_list_profiles.rb +121 -121
  291. data/lib/chef/knife/config_use_profile.rb +50 -50
  292. data/lib/chef/knife/configure.rb +147 -147
  293. data/lib/chef/knife/configure_client.rb +48 -48
  294. data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
  295. data/lib/chef/knife/cookbook_create.rb +29 -29
  296. data/lib/chef/knife/cookbook_delete.rb +151 -151
  297. data/lib/chef/knife/cookbook_download.rb +142 -142
  298. data/lib/chef/knife/cookbook_list.rb +47 -47
  299. data/lib/chef/knife/cookbook_metadata.rb +106 -106
  300. data/lib/chef/knife/cookbook_metadata_from_file.rb +43 -43
  301. data/lib/chef/knife/cookbook_show.rb +98 -98
  302. data/lib/chef/knife/cookbook_site_download.rb +40 -40
  303. data/lib/chef/knife/cookbook_site_install.rb +40 -40
  304. data/lib/chef/knife/cookbook_site_list.rb +40 -40
  305. data/lib/chef/knife/cookbook_site_search.rb +40 -40
  306. data/lib/chef/knife/cookbook_site_share.rb +41 -41
  307. data/lib/chef/knife/cookbook_site_show.rb +40 -40
  308. data/lib/chef/knife/cookbook_site_unshare.rb +41 -41
  309. data/lib/chef/knife/cookbook_test.rb +95 -95
  310. data/lib/chef/knife/cookbook_upload.rb +308 -308
  311. data/lib/chef/knife/core/bootstrap_context.rb +273 -273
  312. data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
  313. data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
  314. data/lib/chef/knife/core/generic_presenter.rb +231 -231
  315. data/lib/chef/knife/core/hashed_command_loader.rb +99 -99
  316. data/lib/chef/knife/core/node_editor.rb +130 -130
  317. data/lib/chef/knife/core/node_presenter.rb +158 -158
  318. data/lib/chef/knife/core/object_loader.rb +115 -115
  319. data/lib/chef/knife/core/status_presenter.rb +172 -172
  320. data/lib/chef/knife/core/subcommand_loader.rb +183 -183
  321. data/lib/chef/knife/core/text_formatter.rb +85 -85
  322. data/lib/chef/knife/core/ui.rb +286 -286
  323. data/lib/chef/knife/data_bag_create.rb +80 -80
  324. data/lib/chef/knife/data_bag_delete.rb +49 -49
  325. data/lib/chef/knife/data_bag_edit.rb +74 -74
  326. data/lib/chef/knife/data_bag_from_file.rb +113 -113
  327. data/lib/chef/knife/data_bag_list.rb +42 -42
  328. data/lib/chef/knife/data_bag_secret_options.rb +142 -142
  329. data/lib/chef/knife/data_bag_show.rb +69 -69
  330. data/lib/chef/knife/delete.rb +125 -125
  331. data/lib/chef/knife/deps.rb +154 -154
  332. data/lib/chef/knife/diff.rb +84 -84
  333. data/lib/chef/knife/download.rb +84 -84
  334. data/lib/chef/knife/edit.rb +88 -88
  335. data/lib/chef/knife/environment_compare.rb +127 -127
  336. data/lib/chef/knife/environment_create.rb +52 -52
  337. data/lib/chef/knife/environment_delete.rb +44 -44
  338. data/lib/chef/knife/environment_edit.rb +44 -44
  339. data/lib/chef/knife/environment_from_file.rb +84 -84
  340. data/lib/chef/knife/environment_list.rb +41 -41
  341. data/lib/chef/knife/environment_show.rb +47 -47
  342. data/lib/chef/knife/exec.rb +87 -87
  343. data/lib/chef/knife/key_create.rb +112 -112
  344. data/lib/chef/knife/key_create_base.rb +50 -50
  345. data/lib/chef/knife/key_delete.rb +55 -55
  346. data/lib/chef/knife/key_edit.rb +118 -118
  347. data/lib/chef/knife/key_edit_base.rb +55 -55
  348. data/lib/chef/knife/key_list.rb +88 -88
  349. data/lib/chef/knife/key_list_base.rb +45 -45
  350. data/lib/chef/knife/key_show.rb +53 -53
  351. data/lib/chef/knife/list.rb +172 -172
  352. data/lib/chef/knife/node_bulk_delete.rb +74 -74
  353. data/lib/chef/knife/node_create.rb +47 -47
  354. data/lib/chef/knife/node_delete.rb +46 -46
  355. data/lib/chef/knife/node_edit.rb +70 -70
  356. data/lib/chef/knife/node_environment_set.rb +54 -54
  357. data/lib/chef/knife/node_from_file.rb +51 -51
  358. data/lib/chef/knife/node_list.rb +44 -44
  359. data/lib/chef/knife/node_policy_set.rb +79 -79
  360. data/lib/chef/knife/node_run_list_add.rb +104 -104
  361. data/lib/chef/knife/node_run_list_remove.rb +67 -67
  362. data/lib/chef/knife/node_run_list_set.rb +66 -66
  363. data/lib/chef/knife/node_show.rb +61 -61
  364. data/lib/chef/knife/null.rb +10 -10
  365. data/lib/chef/knife/osc_user_create.rb +97 -97
  366. data/lib/chef/knife/osc_user_delete.rb +51 -51
  367. data/lib/chef/knife/osc_user_edit.rb +58 -58
  368. data/lib/chef/knife/osc_user_list.rb +47 -47
  369. data/lib/chef/knife/osc_user_reregister.rb +64 -64
  370. data/lib/chef/knife/osc_user_show.rb +53 -53
  371. data/lib/chef/knife/raw.rb +124 -124
  372. data/lib/chef/knife/recipe_list.rb +32 -32
  373. data/lib/chef/knife/rehash.rb +65 -65
  374. data/lib/chef/knife/role_bulk_delete.rb +65 -65
  375. data/lib/chef/knife/role_create.rb +53 -53
  376. data/lib/chef/knife/role_delete.rb +46 -46
  377. data/lib/chef/knife/role_edit.rb +45 -45
  378. data/lib/chef/knife/role_env_run_list_add.rb +87 -87
  379. data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
  380. data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
  381. data/lib/chef/knife/role_env_run_list_replace.rb +60 -60
  382. data/lib/chef/knife/role_env_run_list_set.rb +70 -70
  383. data/lib/chef/knife/role_from_file.rb +51 -51
  384. data/lib/chef/knife/role_list.rb +42 -42
  385. data/lib/chef/knife/role_run_list_add.rb +87 -87
  386. data/lib/chef/knife/role_run_list_clear.rb +55 -55
  387. data/lib/chef/knife/role_run_list_remove.rb +56 -56
  388. data/lib/chef/knife/role_run_list_replace.rb +60 -60
  389. data/lib/chef/knife/role_run_list_set.rb +69 -69
  390. data/lib/chef/knife/role_show.rb +48 -48
  391. data/lib/chef/knife/search.rb +194 -194
  392. data/lib/chef/knife/serve.rb +64 -64
  393. data/lib/chef/knife/show.rb +72 -72
  394. data/lib/chef/knife/ssh.rb +634 -634
  395. data/lib/chef/knife/ssl_check.rb +283 -283
  396. data/lib/chef/knife/ssl_fetch.rb +161 -161
  397. data/lib/chef/knife/status.rb +110 -110
  398. data/lib/chef/knife/supermarket_download.rb +122 -122
  399. data/lib/chef/knife/supermarket_install.rb +193 -193
  400. data/lib/chef/knife/supermarket_list.rb +65 -65
  401. data/lib/chef/knife/supermarket_search.rb +53 -53
  402. data/lib/chef/knife/supermarket_share.rb +166 -166
  403. data/lib/chef/knife/supermarket_show.rb +67 -67
  404. data/lib/chef/knife/supermarket_unshare.rb +61 -61
  405. data/lib/chef/knife/tag_create.rb +52 -52
  406. data/lib/chef/knife/tag_delete.rb +60 -60
  407. data/lib/chef/knife/tag_list.rb +47 -47
  408. data/lib/chef/knife/upload.rb +86 -86
  409. data/lib/chef/knife/user_create.rb +151 -151
  410. data/lib/chef/knife/user_delete.rb +96 -96
  411. data/lib/chef/knife/user_edit.rb +82 -82
  412. data/lib/chef/knife/user_key_create.rb +70 -70
  413. data/lib/chef/knife/user_key_delete.rb +77 -77
  414. data/lib/chef/knife/user_key_edit.rb +80 -80
  415. data/lib/chef/knife/user_key_list.rb +70 -70
  416. data/lib/chef/knife/user_key_show.rb +77 -77
  417. data/lib/chef/knife/user_list.rb +44 -44
  418. data/lib/chef/knife/user_reregister.rb +90 -90
  419. data/lib/chef/knife/user_show.rb +79 -79
  420. data/lib/chef/knife/xargs.rb +282 -282
  421. data/lib/chef/local_mode.rb +129 -129
  422. data/lib/chef/log.rb +70 -70
  423. data/lib/chef/log/syslog.rb +45 -45
  424. data/lib/chef/log/winevt.rb +99 -99
  425. data/lib/chef/mash.rb +232 -232
  426. data/lib/chef/mixin/.DS_Store +0 -0
  427. data/lib/chef/mixin/api_version_request_handling.rb +64 -64
  428. data/lib/chef/mixin/checksum.rb +37 -37
  429. data/lib/chef/mixin/convert_to_class_name.rb +126 -126
  430. data/lib/chef/mixin/create_path.rb +71 -71
  431. data/lib/chef/mixin/deep_merge.rb +140 -140
  432. data/lib/chef/mixin/deprecation.rb +117 -117
  433. data/lib/chef/mixin/descendants_tracker.rb +81 -81
  434. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -39
  435. data/lib/chef/mixin/file_class.rb +35 -35
  436. data/lib/chef/mixin/from_file.rb +55 -55
  437. data/lib/chef/mixin/get_source_from_package.rb +47 -47
  438. data/lib/chef/mixin/homebrew_user.rb +79 -79
  439. data/lib/chef/mixin/lazy_module_include.rb +77 -77
  440. data/lib/chef/mixin/notifying_block.rb +51 -51
  441. data/lib/chef/mixin/openssl_helper.rb +402 -402
  442. data/lib/chef/mixin/params_validate.rb +498 -498
  443. data/lib/chef/mixin/path_sanity.rb +66 -66
  444. data/lib/chef/mixin/powershell_exec.rb +105 -105
  445. data/lib/chef/mixin/powershell_out.rb +98 -98
  446. data/lib/chef/mixin/powershell_type_coercions.rb +84 -84
  447. data/lib/chef/mixin/properties.rb +323 -323
  448. data/lib/chef/mixin/provides.rb +29 -29
  449. data/lib/chef/mixin/proxified_socket.rb +42 -42
  450. data/lib/chef/mixin/securable.rb +192 -192
  451. data/lib/chef/mixin/shell_out.rb +258 -258
  452. data/lib/chef/mixin/subclass_directive.rb +37 -37
  453. data/lib/chef/mixin/template.rb +265 -265
  454. data/lib/chef/mixin/unformatter.rb +32 -32
  455. data/lib/chef/mixin/uris.rb +42 -42
  456. data/lib/chef/mixin/user_context.rb +55 -55
  457. data/lib/chef/mixin/versioned_api.rb +84 -84
  458. data/lib/chef/mixin/which.rb +52 -52
  459. data/lib/chef/mixin/why_run.rb +326 -326
  460. data/lib/chef/mixin/wide_string.rb +54 -54
  461. data/lib/chef/mixin/windows_architecture_helper.rb +113 -113
  462. data/lib/chef/mixin/windows_env_helper.rb +67 -67
  463. data/lib/chef/mixin/xml_escape.rb +138 -138
  464. data/lib/chef/mixins.rb +12 -12
  465. data/lib/chef/monkey_patches/net_http.rb +64 -64
  466. data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
  467. data/lib/chef/monkey_patches/win32/registry.rb +86 -86
  468. data/lib/chef/monologger.rb +4 -4
  469. data/lib/chef/nil_argument.rb +3 -3
  470. data/lib/chef/node.rb +688 -688
  471. data/lib/chef/node/attribute.rb +649 -649
  472. data/lib/chef/node/attribute_collections.rb +213 -213
  473. data/lib/chef/node/common_api.rb +121 -121
  474. data/lib/chef/node/immutable_collections.rb +182 -182
  475. data/lib/chef/node/mixin/deep_merge_cache.rb +61 -61
  476. data/lib/chef/node/mixin/immutablize_array.rb +180 -180
  477. data/lib/chef/node/mixin/immutablize_hash.rb +165 -165
  478. data/lib/chef/node/mixin/state_tracking.rb +96 -96
  479. data/lib/chef/node_map.rb +315 -315
  480. data/lib/chef/null_logger.rb +79 -79
  481. data/lib/chef/org.rb +144 -144
  482. data/lib/chef/platform.rb +30 -30
  483. data/lib/chef/platform/priority_map.rb +41 -41
  484. data/lib/chef/platform/provider_handler_map.rb +29 -29
  485. data/lib/chef/platform/provider_mapping.rb +55 -55
  486. data/lib/chef/platform/provider_priority_map.rb +11 -11
  487. data/lib/chef/platform/query_helpers.rb +100 -100
  488. data/lib/chef/platform/rebooter.rb +71 -71
  489. data/lib/chef/platform/resource_handler_map.rb +29 -29
  490. data/lib/chef/platform/resource_priority_map.rb +11 -11
  491. data/lib/chef/platform/service_helpers.rb +122 -122
  492. data/lib/chef/policy_builder.rb +42 -42
  493. data/lib/chef/policy_builder/dynamic.rb +185 -185
  494. data/lib/chef/policy_builder/expand_node_object.rb +252 -252
  495. data/lib/chef/policy_builder/policyfile.rb +569 -569
  496. data/lib/chef/powershell.rb +57 -57
  497. data/lib/chef/property.rb +731 -731
  498. data/lib/chef/provider.rb +410 -408
  499. data/lib/chef/provider/.DS_Store +0 -0
  500. data/lib/chef/provider/apt_preference.rb +94 -94
  501. data/lib/chef/provider/apt_repository.rb +360 -360
  502. data/lib/chef/provider/apt_update.rb +80 -80
  503. data/lib/chef/provider/batch.rb +45 -45
  504. data/lib/chef/provider/cookbook_file.rb +47 -47
  505. data/lib/chef/provider/cookbook_file/content.rb +49 -49
  506. data/lib/chef/provider/cron.rb +256 -256
  507. data/lib/chef/provider/cron/aix.rb +50 -50
  508. data/lib/chef/provider/cron/solaris.rb +22 -22
  509. data/lib/chef/provider/cron/unix.rb +83 -83
  510. data/lib/chef/provider/directory.rb +164 -164
  511. data/lib/chef/provider/dsc_resource.rb +209 -209
  512. data/lib/chef/provider/dsc_script.rb +185 -185
  513. data/lib/chef/provider/execute.rb +130 -130
  514. data/lib/chef/provider/file.rb +478 -478
  515. data/lib/chef/provider/file/content.rb +39 -39
  516. data/lib/chef/provider/git.rb +357 -357
  517. data/lib/chef/provider/group.rb +179 -179
  518. data/lib/chef/provider/group/aix.rb +79 -79
  519. data/lib/chef/provider/group/dscl.rb +177 -177
  520. data/lib/chef/provider/group/gpasswd.rb +58 -58
  521. data/lib/chef/provider/group/groupadd.rb +133 -133
  522. data/lib/chef/provider/group/groupmod.rb +123 -123
  523. data/lib/chef/provider/group/pw.rb +137 -137
  524. data/lib/chef/provider/group/suse.rb +83 -83
  525. data/lib/chef/provider/group/usermod.rb +90 -90
  526. data/lib/chef/provider/group/windows.rb +110 -110
  527. data/lib/chef/provider/http_request.rb +132 -132
  528. data/lib/chef/provider/ifconfig.rb +271 -271
  529. data/lib/chef/provider/ifconfig/aix.rb +94 -94
  530. data/lib/chef/provider/ifconfig/debian.rb +88 -88
  531. data/lib/chef/provider/ifconfig/redhat.rb +54 -54
  532. data/lib/chef/provider/launchd.rb +231 -231
  533. data/lib/chef/provider/link.rb +168 -168
  534. data/lib/chef/provider/log.rb +43 -43
  535. data/lib/chef/provider/lwrp_base.rb +89 -89
  536. data/lib/chef/provider/mdadm.rb +85 -85
  537. data/lib/chef/provider/mount.rb +175 -175
  538. data/lib/chef/provider/mount/aix.rb +221 -221
  539. data/lib/chef/provider/mount/mount.rb +283 -283
  540. data/lib/chef/provider/mount/solaris.rb +275 -275
  541. data/lib/chef/provider/mount/windows.rb +92 -92
  542. data/lib/chef/provider/noop.rb +37 -37
  543. data/lib/chef/provider/ohai.rb +45 -45
  544. data/lib/chef/provider/osx_profile.rb +251 -251
  545. data/lib/chef/provider/package.rb +687 -687
  546. data/lib/chef/provider/package/.DS_Store +0 -0
  547. data/lib/chef/provider/package/apt.rb +249 -249
  548. data/lib/chef/provider/package/bff.rb +142 -142
  549. data/lib/chef/provider/package/cab.rb +187 -187
  550. data/lib/chef/provider/package/chocolatey.rb +285 -285
  551. data/lib/chef/provider/package/dnf.rb +196 -196
  552. data/lib/chef/provider/package/dnf/dnf_helper.py +114 -100
  553. data/lib/chef/provider/package/dnf/python_helper.rb +173 -173
  554. data/lib/chef/provider/package/dnf/version.rb +56 -56
  555. data/lib/chef/provider/package/dpkg.rb +241 -241
  556. data/lib/chef/provider/package/freebsd/.DS_Store +0 -0
  557. data/lib/chef/provider/package/freebsd/base.rb +89 -89
  558. data/lib/chef/provider/package/freebsd/pkg.rb +114 -114
  559. data/lib/chef/provider/package/freebsd/pkgng.rb +76 -76
  560. data/lib/chef/provider/package/freebsd/port.rb +60 -60
  561. data/lib/chef/provider/package/homebrew.rb +138 -138
  562. data/lib/chef/provider/package/ips.rb +85 -85
  563. data/lib/chef/provider/package/macports.rb +101 -101
  564. data/lib/chef/provider/package/msu.rb +161 -161
  565. data/lib/chef/provider/package/openbsd.rb +139 -139
  566. data/lib/chef/provider/package/pacman.rb +103 -103
  567. data/lib/chef/provider/package/paludis.rb +85 -85
  568. data/lib/chef/provider/package/portage.rb +133 -133
  569. data/lib/chef/provider/package/powershell.rb +133 -133
  570. data/lib/chef/provider/package/rpm.rb +126 -126
  571. data/lib/chef/provider/package/rubygems.rb +617 -617
  572. data/lib/chef/provider/package/smartos.rb +92 -92
  573. data/lib/chef/provider/package/solaris.rb +137 -137
  574. data/lib/chef/provider/package/windows.rb +317 -317
  575. data/lib/chef/provider/package/windows/exe.rb +117 -117
  576. data/lib/chef/provider/package/windows/msi.rb +96 -96
  577. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +99 -99
  578. data/lib/chef/provider/package/yum.rb +289 -289
  579. data/lib/chef/provider/package/yum/python_helper.rb +222 -222
  580. data/lib/chef/provider/package/yum/rpm_utils.rb +651 -651
  581. data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +79 -79
  582. data/lib/chef/provider/package/yum/simplejson/__init__.py +318 -318
  583. data/lib/chef/provider/package/yum/simplejson/decoder.py +354 -354
  584. data/lib/chef/provider/package/yum/simplejson/encoder.py +440 -440
  585. data/lib/chef/provider/package/yum/simplejson/scanner.py +65 -65
  586. data/lib/chef/provider/package/yum/simplejson/tool.py +37 -37
  587. data/lib/chef/provider/package/yum/version.rb +56 -56
  588. data/lib/chef/provider/package/yum/yum_cache.rb +93 -93
  589. data/lib/chef/provider/package/yum/yum_helper.py +211 -211
  590. data/lib/chef/provider/package/zypper.rb +167 -167
  591. data/lib/chef/provider/powershell_script.rb +223 -223
  592. data/lib/chef/provider/reboot.rb +78 -78
  593. data/lib/chef/provider/registry_key.rb +199 -199
  594. data/lib/chef/provider/remote_directory.rb +269 -269
  595. data/lib/chef/provider/remote_file.rb +66 -66
  596. data/lib/chef/provider/remote_file/cache_control_data.rb +195 -195
  597. data/lib/chef/provider/remote_file/content.rb +81 -81
  598. data/lib/chef/provider/remote_file/fetcher.rb +60 -60
  599. data/lib/chef/provider/remote_file/ftp.rb +172 -172
  600. data/lib/chef/provider/remote_file/http.rb +143 -143
  601. data/lib/chef/provider/remote_file/local_file.rb +60 -60
  602. data/lib/chef/provider/remote_file/network_file.rb +61 -61
  603. data/lib/chef/provider/remote_file/sftp.rb +105 -105
  604. data/lib/chef/provider/resource_update.rb +52 -52
  605. data/lib/chef/provider/route.rb +248 -248
  606. data/lib/chef/provider/ruby_block.rb +40 -40
  607. data/lib/chef/provider/script.rb +121 -121
  608. data/lib/chef/provider/service.rb +252 -252
  609. data/lib/chef/provider/service/aix.rb +125 -125
  610. data/lib/chef/provider/service/aixinit.rb +117 -117
  611. data/lib/chef/provider/service/arch.rb +118 -118
  612. data/lib/chef/provider/service/debian.rb +193 -193
  613. data/lib/chef/provider/service/freebsd.rb +194 -194
  614. data/lib/chef/provider/service/gentoo.rb +70 -70
  615. data/lib/chef/provider/service/init.rb +93 -93
  616. data/lib/chef/provider/service/insserv.rb +61 -61
  617. data/lib/chef/provider/service/invokercd.rb +41 -41
  618. data/lib/chef/provider/service/macosx.rb +252 -252
  619. data/lib/chef/provider/service/openbsd.rb +216 -216
  620. data/lib/chef/provider/service/redhat.rb +126 -126
  621. data/lib/chef/provider/service/simple.rb +172 -172
  622. data/lib/chef/provider/service/solaris.rb +127 -127
  623. data/lib/chef/provider/service/systemd.rb +189 -189
  624. data/lib/chef/provider/service/upstart.rb +260 -260
  625. data/lib/chef/provider/service/windows.rb +488 -488
  626. data/lib/chef/provider/subversion.rb +227 -227
  627. data/lib/chef/provider/support/yum_repo.erb +138 -138
  628. data/lib/chef/provider/support/zypper_repo.erb +17 -17
  629. data/lib/chef/provider/systemd_unit.rb +261 -261
  630. data/lib/chef/provider/template.rb +59 -59
  631. data/lib/chef/provider/template/content.rb +93 -93
  632. data/lib/chef/provider/template_finder.rb +62 -62
  633. data/lib/chef/provider/user.rb +221 -221
  634. data/lib/chef/provider/user/aix.rb +131 -131
  635. data/lib/chef/provider/user/dscl.rb +712 -712
  636. data/lib/chef/provider/user/linux.rb +116 -116
  637. data/lib/chef/provider/user/pw.rb +105 -105
  638. data/lib/chef/provider/user/solaris.rb +160 -160
  639. data/lib/chef/provider/user/useradd.rb +161 -161
  640. data/lib/chef/provider/user/windows.rb +126 -126
  641. data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
  642. data/lib/chef/provider/windows_env.rb +207 -207
  643. data/lib/chef/provider/windows_path.rb +61 -61
  644. data/lib/chef/provider/windows_script.rb +75 -75
  645. data/lib/chef/provider/windows_task.rb +631 -631
  646. data/lib/chef/provider/yum_repository.rb +130 -130
  647. data/lib/chef/provider/zypper_repository.rb +169 -169
  648. data/lib/chef/provider_resolver.rb +146 -146
  649. data/lib/chef/providers.rb +146 -146
  650. data/lib/chef/recipe.rb +110 -110
  651. data/lib/chef/request_id.rb +37 -37
  652. data/lib/chef/reserved_names.rb +9 -9
  653. data/lib/chef/resource.rb +1593 -1584
  654. data/lib/chef/resource/.DS_Store +0 -0
  655. data/lib/chef/resource/action_class.rb +90 -90
  656. data/lib/chef/resource/apt_package.rb +40 -40
  657. data/lib/chef/resource/apt_preference.rb +52 -52
  658. data/lib/chef/resource/apt_repository.rb +86 -86
  659. data/lib/chef/resource/apt_update.rb +41 -41
  660. data/lib/chef/resource/bash.rb +34 -34
  661. data/lib/chef/resource/batch.rb +34 -34
  662. data/lib/chef/resource/bff_package.rb +31 -31
  663. data/lib/chef/resource/breakpoint.rb +47 -47
  664. data/lib/chef/resource/build_essential.rb +142 -142
  665. data/lib/chef/resource/cab_package.rb +45 -45
  666. data/lib/chef/resource/chef_gem.rb +59 -59
  667. data/lib/chef/resource/chef_handler.rb +132 -132
  668. data/lib/chef/resource/chocolatey_config.rb +83 -83
  669. data/lib/chef/resource/chocolatey_package.rb +50 -50
  670. data/lib/chef/resource/chocolatey_source.rb +95 -95
  671. data/lib/chef/resource/conditional.rb +135 -135
  672. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
  673. data/lib/chef/resource/cookbook_file.rb +45 -45
  674. data/lib/chef/resource/cron.rb +174 -174
  675. data/lib/chef/resource/cron_access.rb +70 -70
  676. data/lib/chef/resource/cron_d.rb +238 -238
  677. data/lib/chef/resource/csh.rb +39 -39
  678. data/lib/chef/resource/directory.rb +51 -51
  679. data/lib/chef/resource/dmg_package.rb +171 -171
  680. data/lib/chef/resource/dnf_package.rb +79 -79
  681. data/lib/chef/resource/dpkg_package.rb +33 -33
  682. data/lib/chef/resource/dsc_resource.rb +120 -120
  683. data/lib/chef/resource/dsc_script.rb +124 -124
  684. data/lib/chef/resource/execute.rb +201 -201
  685. data/lib/chef/resource/file.rb +105 -105
  686. data/lib/chef/resource/file/.DS_Store +0 -0
  687. data/lib/chef/resource/file/verification.rb +139 -139
  688. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -67
  689. data/lib/chef/resource/freebsd_package.rb +73 -73
  690. data/lib/chef/resource/gem_package.rb +58 -58
  691. data/lib/chef/resource/git.rb +35 -35
  692. data/lib/chef/resource/group.rb +61 -61
  693. data/lib/chef/resource/homebrew_cask.rb +100 -100
  694. data/lib/chef/resource/homebrew_package.rb +38 -38
  695. data/lib/chef/resource/homebrew_tap.rb +87 -87
  696. data/lib/chef/resource/hostname.rb +265 -265
  697. data/lib/chef/resource/http_request.rb +55 -55
  698. data/lib/chef/resource/ifconfig.rb +105 -105
  699. data/lib/chef/resource/ips_package.rb +38 -38
  700. data/lib/chef/resource/kernel_module.rb +135 -135
  701. data/lib/chef/resource/ksh.rb +39 -39
  702. data/lib/chef/resource/launchd.rb +252 -252
  703. data/lib/chef/resource/link.rb +93 -93
  704. data/lib/chef/resource/locale.rb +94 -94
  705. data/lib/chef/resource/log.rb +52 -52
  706. data/lib/chef/resource/lwrp_base.rb +123 -123
  707. data/lib/chef/resource/macos_userdefaults.rb +132 -132
  708. data/lib/chef/resource/macosx_service.rb +41 -41
  709. data/lib/chef/resource/macports_package.rb +29 -29
  710. data/lib/chef/resource/mdadm.rb +67 -67
  711. data/lib/chef/resource/mount.rb +96 -96
  712. data/lib/chef/resource/msu_package.rb +49 -49
  713. data/lib/chef/resource/ohai.rb +41 -41
  714. data/lib/chef/resource/ohai_hint.rb +95 -95
  715. data/lib/chef/resource/openbsd_package.rb +38 -38
  716. data/lib/chef/resource/openssl_dhparam.rb +77 -77
  717. data/lib/chef/resource/openssl_ec_private_key.rb +93 -93
  718. data/lib/chef/resource/openssl_ec_public_key.rb +75 -75
  719. data/lib/chef/resource/openssl_rsa_private_key.rb +91 -91
  720. data/lib/chef/resource/openssl_rsa_public_key.rb +74 -74
  721. data/lib/chef/resource/openssl_x509_certificate.rb +221 -221
  722. data/lib/chef/resource/openssl_x509_crl.rb +132 -132
  723. data/lib/chef/resource/openssl_x509_request.rb +151 -151
  724. data/lib/chef/resource/osx_profile.rb +48 -48
  725. data/lib/chef/resource/package.rb +73 -73
  726. data/lib/chef/resource/pacman_package.rb +30 -30
  727. data/lib/chef/resource/paludis_package.rb +38 -38
  728. data/lib/chef/resource/perl.rb +38 -38
  729. data/lib/chef/resource/portage_package.rb +33 -33
  730. data/lib/chef/resource/powershell_package.rb +52 -52
  731. data/lib/chef/resource/powershell_package_source.rb +169 -169
  732. data/lib/chef/resource/powershell_script.rb +59 -59
  733. data/lib/chef/resource/python.rb +36 -36
  734. data/lib/chef/resource/reboot.rb +46 -46
  735. data/lib/chef/resource/registry_key.rb +130 -130
  736. data/lib/chef/resource/remote_directory.rb +87 -87
  737. data/lib/chef/resource/remote_file.rb +181 -181
  738. data/lib/chef/resource/resource_notification.rb +143 -139
  739. data/lib/chef/resource/rhsm_errata.rb +46 -46
  740. data/lib/chef/resource/rhsm_errata_level.rb +51 -51
  741. data/lib/chef/resource/rhsm_register.rb +168 -168
  742. data/lib/chef/resource/rhsm_repo.rb +65 -65
  743. data/lib/chef/resource/rhsm_subscription.rb +98 -98
  744. data/lib/chef/resource/route.rb +46 -46
  745. data/lib/chef/resource/rpm_package.rb +33 -33
  746. data/lib/chef/resource/ruby.rb +37 -37
  747. data/lib/chef/resource/ruby_block.rb +45 -45
  748. data/lib/chef/resource/scm.rb +75 -75
  749. data/lib/chef/resource/script.rb +54 -54
  750. data/lib/chef/resource/service.rb +221 -221
  751. data/lib/chef/resource/smartos_package.rb +31 -31
  752. data/lib/chef/resource/solaris_package.rb +33 -33
  753. data/lib/chef/resource/ssh_known_hosts_entry.rb +146 -146
  754. data/lib/chef/resource/subversion.rb +55 -55
  755. data/lib/chef/resource/sudo.rb +230 -230
  756. data/lib/chef/resource/support/cron.d.erb +28 -28
  757. data/lib/chef/resource/support/cron_access.erb +4 -4
  758. data/lib/chef/resource/support/ssh_known_hosts.erb +3 -3
  759. data/lib/chef/resource/support/sudoer.erb +18 -18
  760. data/lib/chef/resource/swap_file.rb +209 -209
  761. data/lib/chef/resource/sysctl.rb +151 -151
  762. data/lib/chef/resource/systemd_unit.rb +86 -86
  763. data/lib/chef/resource/template.rb +211 -211
  764. data/lib/chef/resource/timezone.rb +135 -135
  765. data/lib/chef/resource/user.rb +159 -159
  766. data/lib/chef/resource/user/aix_user.rb +31 -31
  767. data/lib/chef/resource/user/dscl_user.rb +31 -31
  768. data/lib/chef/resource/user/linux_user.rb +32 -32
  769. data/lib/chef/resource/user/pw_user.rb +31 -31
  770. data/lib/chef/resource/user/solaris_user.rb +31 -31
  771. data/lib/chef/resource/user/windows_user.rb +35 -35
  772. data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
  773. data/lib/chef/resource/windows_ad_join.rb +120 -120
  774. data/lib/chef/resource/windows_auto_run.rb +87 -87
  775. data/lib/chef/resource/windows_certificate.rb +332 -332
  776. data/lib/chef/resource/windows_env.rb +49 -49
  777. data/lib/chef/resource/windows_feature.rb +90 -90
  778. data/lib/chef/resource/windows_feature_dism.rb +222 -222
  779. data/lib/chef/resource/windows_feature_powershell.rb +262 -262
  780. data/lib/chef/resource/windows_firewall_rule.rb +205 -205
  781. data/lib/chef/resource/windows_font.rb +125 -125
  782. data/lib/chef/resource/windows_package.rb +61 -61
  783. data/lib/chef/resource/windows_pagefile.rb +206 -206
  784. data/lib/chef/resource/windows_path.rb +38 -38
  785. data/lib/chef/resource/windows_printer.rb +146 -146
  786. data/lib/chef/resource/windows_printer_port.rb +136 -136
  787. data/lib/chef/resource/windows_script.rb +65 -65
  788. data/lib/chef/resource/windows_service.rb +121 -121
  789. data/lib/chef/resource/windows_share.rb +324 -324
  790. data/lib/chef/resource/windows_shortcut.rb +79 -79
  791. data/lib/chef/resource/windows_task.rb +349 -349
  792. data/lib/chef/resource/windows_workgroup.rb +112 -112
  793. data/lib/chef/resource/yum_package.rb +77 -77
  794. data/lib/chef/resource/yum_repository.rb +187 -187
  795. data/lib/chef/resource/zypper_package.rb +44 -44
  796. data/lib/chef/resource/zypper_repository.rb +103 -103
  797. data/lib/chef/resource_builder.rb +92 -92
  798. data/lib/chef/resource_collection.rb +153 -147
  799. data/lib/chef/resource_collection/resource_collection_serialization.rb +68 -68
  800. data/lib/chef/resource_collection/resource_list.rb +106 -106
  801. data/lib/chef/resource_collection/resource_set.rb +200 -200
  802. data/lib/chef/resource_collection/stepable_iterator.rb +122 -122
  803. data/lib/chef/resource_definition.rb +68 -68
  804. data/lib/chef/resource_definition_list.rb +38 -38
  805. data/lib/chef/resource_inspector.rb +108 -108
  806. data/lib/chef/resource_reporter.rb +337 -337
  807. data/lib/chef/resource_resolver.rb +160 -160
  808. data/lib/chef/resources.rb +147 -147
  809. data/lib/chef/role.rb +274 -274
  810. data/lib/chef/run_context.rb +708 -682
  811. data/lib/chef/run_context/cookbook_compiler.rb +344 -344
  812. data/lib/chef/run_list.rb +168 -168
  813. data/lib/chef/run_list/run_list_expansion.rb +236 -236
  814. data/lib/chef/run_list/run_list_item.rb +98 -98
  815. data/lib/chef/run_list/versioned_recipe_list.rb +104 -104
  816. data/lib/chef/run_lock.rb +197 -197
  817. data/lib/chef/run_status.rb +127 -127
  818. data/lib/chef/runner.rb +184 -144
  819. data/lib/chef/sandbox.rb +20 -20
  820. data/lib/chef/scan_access_control.rb +138 -138
  821. data/lib/chef/search/query.rb +182 -182
  822. data/lib/chef/server_api.rb +83 -83
  823. data/lib/chef/server_api_versions.rb +59 -59
  824. data/lib/chef/shell.rb +353 -353
  825. data/lib/chef/shell/ext.rb +593 -593
  826. data/lib/chef/shell/model_wrapper.rb +120 -120
  827. data/lib/chef/shell/shell_session.rb +310 -310
  828. data/lib/chef/user.rb +194 -194
  829. data/lib/chef/user_v1.rb +325 -325
  830. data/lib/chef/util/backup.rb +94 -94
  831. data/lib/chef/util/diff.rb +184 -184
  832. data/lib/chef/util/dsc/configuration_generator.rb +139 -139
  833. data/lib/chef/util/dsc/lcm_output_parser.rb +192 -192
  834. data/lib/chef/util/dsc/local_configuration_manager.rb +151 -151
  835. data/lib/chef/util/dsc/resource_info.rb +26 -26
  836. data/lib/chef/util/dsc/resource_store.rb +109 -109
  837. data/lib/chef/util/editor.rb +91 -91
  838. data/lib/chef/util/file_edit.rb +100 -100
  839. data/lib/chef/util/path_helper.rb +25 -25
  840. data/lib/chef/util/powershell/cmdlet.rb +173 -173
  841. data/lib/chef/util/powershell/cmdlet_result.rb +61 -61
  842. data/lib/chef/util/powershell/ps_credential.rb +41 -41
  843. data/lib/chef/util/selinux.rb +93 -93
  844. data/lib/chef/util/threaded_job_queue.rb +61 -61
  845. data/lib/chef/util/windows.rb +24 -24
  846. data/lib/chef/util/windows/logon_session.rb +129 -129
  847. data/lib/chef/util/windows/net_group.rb +78 -78
  848. data/lib/chef/util/windows/net_use.rb +81 -81
  849. data/lib/chef/util/windows/net_user.rb +172 -172
  850. data/lib/chef/util/windows/volume.rb +49 -49
  851. data/lib/chef/version.rb +36 -36
  852. data/lib/chef/version/platform.rb +62 -62
  853. data/lib/chef/version_class.rb +75 -75
  854. data/lib/chef/version_constraint.rb +118 -118
  855. data/lib/chef/version_constraint/platform.rb +28 -28
  856. data/lib/chef/version_string.rb +143 -143
  857. data/lib/chef/whitelist.rb +86 -86
  858. data/lib/chef/win32/api.rb +372 -372
  859. data/lib/chef/win32/api/crypto.rb +63 -63
  860. data/lib/chef/win32/api/error.rb +953 -953
  861. data/lib/chef/win32/api/file.rb +620 -620
  862. data/lib/chef/win32/api/installer.rb +165 -165
  863. data/lib/chef/win32/api/memory.rb +105 -105
  864. data/lib/chef/win32/api/net.rb +328 -328
  865. data/lib/chef/win32/api/process.rb +42 -42
  866. data/lib/chef/win32/api/psapi.rb +51 -51
  867. data/lib/chef/win32/api/registry.rb +51 -51
  868. data/lib/chef/win32/api/security.rb +476 -476
  869. data/lib/chef/win32/api/synchronization.rb +89 -89
  870. data/lib/chef/win32/api/system.rb +238 -238
  871. data/lib/chef/win32/api/unicode.rb +135 -135
  872. data/lib/chef/win32/crypto.rb +50 -50
  873. data/lib/chef/win32/error.rb +86 -86
  874. data/lib/chef/win32/eventlog.rb +31 -31
  875. data/lib/chef/win32/file.rb +226 -226
  876. data/lib/chef/win32/file/info.rb +99 -99
  877. data/lib/chef/win32/file/version_info.rb +93 -93
  878. data/lib/chef/win32/handle.rb +55 -55
  879. data/lib/chef/win32/memory.rb +101 -101
  880. data/lib/chef/win32/mutex.rb +116 -116
  881. data/lib/chef/win32/net.rb +326 -326
  882. data/lib/chef/win32/process.rb +97 -97
  883. data/lib/chef/win32/registry.rb +374 -374
  884. data/lib/chef/win32/security.rb +698 -698
  885. data/lib/chef/win32/security/ace.rb +123 -123
  886. data/lib/chef/win32/security/acl.rb +103 -103
  887. data/lib/chef/win32/security/securable_object.rb +109 -109
  888. data/lib/chef/win32/security/security_descriptor.rb +93 -93
  889. data/lib/chef/win32/security/sid.rb +347 -347
  890. data/lib/chef/win32/security/token.rb +72 -72
  891. data/lib/chef/win32/system.rb +62 -62
  892. data/lib/chef/win32/unicode.rb +66 -66
  893. data/lib/chef/win32/version.rb +151 -151
  894. data/lib/chef/win32_service_constants.rb +143 -143
  895. data/lib/chef/workstation_config_loader.rb +23 -23
  896. data/spec/.DS_Store +0 -0
  897. data/spec/data/.DS_Store +0 -0
  898. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  899. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  900. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  901. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
  902. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  903. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  904. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  905. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  906. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  907. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  908. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
  909. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  910. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  911. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  912. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
  913. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
  914. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
  915. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
  916. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
  917. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
  918. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
  919. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
  920. data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
  921. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
  922. data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
  923. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
  924. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
  925. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
  926. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
  927. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
  928. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  929. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  930. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  931. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  932. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  933. data/spec/data/apt/var/www/apt/db/version +4 -4
  934. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  935. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  936. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  937. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  938. data/spec/data/bootstrap/no_proxy.erb +2 -2
  939. data/spec/data/bootstrap/secret.erb +9 -9
  940. data/spec/data/bootstrap/test-hints.erb +12 -12
  941. data/spec/data/bootstrap/test.erb +1 -1
  942. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  943. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  944. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  945. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  946. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  947. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  948. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  949. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  950. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  951. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  952. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  953. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  954. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  955. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  956. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  957. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  958. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  959. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  960. data/spec/data/client.d_00/00-foo.rb +2 -2
  961. data/spec/data/client.d_00/01-bar.rb +1 -1
  962. data/spec/data/client.d_00/02-strings.rb +2 -2
  963. data/spec/data/client.d_00/bar +1 -1
  964. data/spec/data/client.d_01/foo/bar.rb +1 -1
  965. data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
  966. data/spec/data/config.rb +6 -6
  967. data/spec/data/cookbooks/.DS_Store +0 -0
  968. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  969. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  970. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  971. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  972. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  973. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  974. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  975. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  976. data/spec/data/cookbooks/chefignore +8 -8
  977. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  978. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  979. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  980. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  981. data/spec/data/cookbooks/java/.DS_Store +0 -0
  982. data/spec/data/cookbooks/java/files/.DS_Store +0 -0
  983. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  984. data/spec/data/cookbooks/java/metadata.rb +2 -2
  985. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  986. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  987. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
  988. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  989. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  990. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  991. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  992. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  993. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  994. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  995. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  996. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  997. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  998. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  999. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  1000. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  1001. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  1002. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  1003. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  1004. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  1005. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  1006. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  1007. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  1008. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  1009. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
  1010. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  1011. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
  1012. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
  1013. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  1014. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -1
  1015. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  1016. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  1017. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  1018. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  1019. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  1020. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  1021. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  1022. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
  1023. data/spec/data/definitions/test.rb +4 -4
  1024. data/spec/data/environment-config.rb +4 -4
  1025. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  1026. data/spec/data/fileedit/hosts +4 -4
  1027. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  1028. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  1029. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
  1030. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  1031. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
  1032. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
  1033. data/spec/data/kitchen/chefignore +6 -6
  1034. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  1035. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  1036. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  1037. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  1038. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  1039. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  1040. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  1041. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  1042. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  1043. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  1044. data/spec/data/lwrp/providers/buck_passer.rb +28 -28
  1045. data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
  1046. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
  1047. data/spec/data/lwrp/providers/inline_compiler.rb +24 -24
  1048. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  1049. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  1050. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  1051. data/spec/data/lwrp/resources/bar.rb +2 -2
  1052. data/spec/data/lwrp/resources/buck_passer.rb +5 -5
  1053. data/spec/data/lwrp/resources/buck_passer_2.rb +3 -3
  1054. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -3
  1055. data/spec/data/lwrp/resources/foo.rb +4 -4
  1056. data/spec/data/lwrp/resources/inline_compiler.rb +3 -3
  1057. data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -5
  1058. data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -3
  1059. data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -3
  1060. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  1061. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  1062. data/spec/data/lwrp_override/resources/foo.rb +10 -10
  1063. data/spec/data/mac_users/.DS_Store +0 -0
  1064. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  1065. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  1066. data/spec/data/mac_users/10.7.plist.xml +559 -559
  1067. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  1068. data/spec/data/mac_users/10.8.plist.xml +559 -559
  1069. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  1070. data/spec/data/mac_users/10.9.plist.xml +560 -560
  1071. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  1072. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  1073. data/spec/data/mixin/invalid_data.rb +3 -3
  1074. data/spec/data/mixin/real_data.rb +2 -2
  1075. data/spec/data/nested.json +2 -2
  1076. data/spec/data/nodes/Tim.local.json +3 -0
  1077. data/spec/data/nodes/Tims-MBP.local.json +3 -0
  1078. data/spec/data/nodes/default.rb +15 -15
  1079. data/spec/data/nodes/test.example.com.rb +17 -17
  1080. data/spec/data/nodes/test.rb +15 -15
  1081. data/spec/data/null_config.rb +1 -1
  1082. data/spec/data/object_loader/environments/test.json +7 -7
  1083. data/spec/data/object_loader/environments/test.rb +2 -2
  1084. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  1085. data/spec/data/object_loader/nodes/test.json +7 -7
  1086. data/spec/data/object_loader/nodes/test.rb +2 -2
  1087. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  1088. data/spec/data/object_loader/roles/test.json +7 -7
  1089. data/spec/data/object_loader/roles/test.rb +2 -2
  1090. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  1091. data/spec/data/partial_one.erb +1 -1
  1092. data/spec/data/prefer_metadata_json/metadata.json +51 -51
  1093. data/spec/data/prefer_metadata_json/metadata.rb +6 -6
  1094. data/spec/data/recipes/test.rb +7 -7
  1095. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -1
  1096. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -1
  1097. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -2
  1098. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -3
  1099. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -1
  1100. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -2
  1101. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -3
  1102. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -3
  1103. data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -1
  1104. data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -2
  1105. data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -3
  1106. data/spec/data/run_context/.DS_Store +0 -0
  1107. data/spec/data/run_context/cookbooks/.DS_Store +0 -0
  1108. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
  1109. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  1110. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  1111. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  1112. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  1113. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  1114. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
  1115. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  1116. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  1117. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  1118. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  1119. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  1120. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  1121. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  1122. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -2
  1123. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  1124. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  1125. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  1126. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  1127. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -2
  1128. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  1129. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  1130. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  1131. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  1132. data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
  1133. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
  1134. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -2
  1135. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  1136. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  1137. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  1138. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
  1139. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  1140. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  1141. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  1142. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  1143. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  1144. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
  1145. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  1146. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  1147. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  1148. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  1149. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  1150. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  1151. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  1152. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  1153. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  1154. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  1155. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  1156. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  1157. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  1158. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  1159. data/spec/data/run_context/nodes/run_context.rb +5 -5
  1160. data/spec/data/sample_msu1.xml +10 -10
  1161. data/spec/data/sample_msu2.xml +14 -14
  1162. data/spec/data/sample_msu3.xml +16 -16
  1163. data/spec/data/search_queries_to_transform.txt +98 -98
  1164. data/spec/data/shef-config.rb +11 -11
  1165. data/spec/data/ssl/5e707473.0 +18 -18
  1166. data/spec/data/ssl/chef-rspec.cert +27 -27
  1167. data/spec/data/ssl/chef-rspec.key +27 -27
  1168. data/spec/data/ssl/key.pem +15 -15
  1169. data/spec/data/ssl/private_key.pem +27 -27
  1170. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  1171. data/spec/data/standalone_cookbook/chefignore +9 -9
  1172. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  1173. data/spec/data/templates/failed.erb +5 -5
  1174. data/spec/data/trusted_certs/example.crt +22 -22
  1175. data/spec/data/trusted_certs/example_no_cn.crt +36 -36
  1176. data/spec/data/trusted_certs/intermediate.pem +27 -27
  1177. data/spec/data/trusted_certs/opscode.pem +57 -57
  1178. data/spec/data/trusted_certs/root.pem +22 -22
  1179. data/spec/data/windows_certificates/base64_test.cer +22 -22
  1180. data/spec/data/windows_certificates/test.pem +21 -21
  1181. data/spec/functional/.DS_Store +0 -0
  1182. data/spec/functional/application_spec.rb +58 -58
  1183. data/spec/functional/assets/chefinittest +36 -36
  1184. data/spec/functional/assets/inittest +36 -36
  1185. data/spec/functional/assets/testchefsubsys +10 -10
  1186. data/spec/functional/assets/yumrepo/repodata/repomd.xml +21 -21
  1187. data/spec/functional/audit/rspec_formatter_spec.rb +54 -54
  1188. data/spec/functional/audit/runner_spec.rb +121 -121
  1189. data/spec/functional/dsl/reboot_pending_spec.rb +106 -106
  1190. data/spec/functional/dsl/registry_helper_spec.rb +61 -61
  1191. data/spec/functional/event_loggers/windows_eventlog_spec.rb +104 -104
  1192. data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
  1193. data/spec/functional/http/simple_spec.rb +146 -146
  1194. data/spec/functional/knife/configure_spec.rb +33 -33
  1195. data/spec/functional/knife/cookbook_delete_spec.rb +156 -156
  1196. data/spec/functional/knife/exec_spec.rb +55 -55
  1197. data/spec/functional/knife/rehash_spec.rb +39 -39
  1198. data/spec/functional/knife/smoke_test.rb +42 -42
  1199. data/spec/functional/knife/ssh_spec.rb +359 -359
  1200. data/spec/functional/mixin/from_file_spec.rb +82 -82
  1201. data/spec/functional/mixin/powershell_out_spec.rb +43 -43
  1202. data/spec/functional/mixin/shell_out_spec.rb +78 -78
  1203. data/spec/functional/mixin/user_context_spec.rb +117 -117
  1204. data/spec/functional/notifications_spec.rb +238 -238
  1205. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +100 -100
  1206. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -51
  1207. data/spec/functional/rebooter_spec.rb +117 -117
  1208. data/spec/functional/resource/.DS_Store +0 -0
  1209. data/spec/functional/resource/aix_service_spec.rb +138 -138
  1210. data/spec/functional/resource/aixinit_service_spec.rb +211 -211
  1211. data/spec/functional/resource/apt_package_spec.rb +386 -386
  1212. data/spec/functional/resource/base.rb +28 -28
  1213. data/spec/functional/resource/bash_spec.rb +54 -54
  1214. data/spec/functional/resource/batch_spec.rb +34 -34
  1215. data/spec/functional/resource/bff_spec.rb +120 -120
  1216. data/spec/functional/resource/chocolatey_package_spec.rb +118 -118
  1217. data/spec/functional/resource/cookbook_file_spec.rb +81 -81
  1218. data/spec/functional/resource/cron_spec.rb +179 -179
  1219. data/spec/functional/resource/directory_spec.rb +43 -43
  1220. data/spec/functional/resource/dnf_package_spec.rb +686 -686
  1221. data/spec/functional/resource/dpkg_package_spec.rb +339 -339
  1222. data/spec/functional/resource/dsc_resource_spec.rb +90 -90
  1223. data/spec/functional/resource/dsc_script_spec.rb +484 -484
  1224. data/spec/functional/resource/execute_spec.rb +171 -171
  1225. data/spec/functional/resource/file_spec.rb +167 -167
  1226. data/spec/functional/resource/git_spec.rb +257 -257
  1227. data/spec/functional/resource/group_spec.rb +497 -497
  1228. data/spec/functional/resource/ifconfig_spec.rb +172 -172
  1229. data/spec/functional/resource/insserv_spec.rb +206 -205
  1230. data/spec/functional/resource/link_spec.rb +699 -699
  1231. data/spec/functional/resource/mount_spec.rb +207 -207
  1232. data/spec/functional/resource/msu_package_spec.rb +98 -98
  1233. data/spec/functional/resource/ohai_spec.rb +62 -62
  1234. data/spec/functional/resource/powershell_script_spec.rb +599 -599
  1235. data/spec/functional/resource/reboot_spec.rb +103 -103
  1236. data/spec/functional/resource/registry_spec.rb +676 -676
  1237. data/spec/functional/resource/remote_directory_spec.rb +220 -220
  1238. data/spec/functional/resource/remote_file_spec.rb +424 -424
  1239. data/spec/functional/resource/rpm_spec.rb +120 -120
  1240. data/spec/functional/resource/template_spec.rb +245 -245
  1241. data/spec/functional/resource/timezone_spec.rb +39 -39
  1242. data/spec/functional/resource/user/dscl_spec.rb +195 -195
  1243. data/spec/functional/resource/user/windows_spec.rb +245 -245
  1244. data/spec/functional/resource/windows_certificate_spec.rb +492 -492
  1245. data/spec/functional/resource/windows_env_spec.rb +285 -285
  1246. data/spec/functional/resource/windows_package_spec.rb +168 -168
  1247. data/spec/functional/resource/windows_path_spec.rb +64 -64
  1248. data/spec/functional/resource/windows_service_spec.rb +102 -102
  1249. data/spec/functional/resource/windows_task_spec.rb +1917 -1917
  1250. data/spec/functional/resource/yum_package_spec.rb +959 -959
  1251. data/spec/functional/resource/zypper_package_spec.rb +233 -233
  1252. data/spec/functional/root_alias_spec.rb +78 -78
  1253. data/spec/functional/run_lock_spec.rb +473 -473
  1254. data/spec/functional/shell_spec.rb +146 -146
  1255. data/spec/functional/tiny_server_spec.rb +79 -79
  1256. data/spec/functional/util/.DS_Store +0 -0
  1257. data/spec/functional/util/path_helper_spec.rb +37 -37
  1258. data/spec/functional/util/powershell/cmdlet_spec.rb +111 -111
  1259. data/spec/functional/version_spec.rb +35 -35
  1260. data/spec/functional/win32/crypto_spec.rb +54 -54
  1261. data/spec/functional/win32/registry_spec.rb +624 -624
  1262. data/spec/functional/win32/security_spec.rb +206 -206
  1263. data/spec/functional/win32/service_manager_spec.rb +220 -220
  1264. data/spec/functional/win32/sid_spec.rb +55 -55
  1265. data/spec/functional/win32/version_info_spec.rb +50 -50
  1266. data/spec/functional/win32/versions_spec.rb +115 -115
  1267. data/spec/integration/.DS_Store +0 -0
  1268. data/spec/integration/client/client_spec.rb +732 -732
  1269. data/spec/integration/client/exit_code_spec.rb +142 -142
  1270. data/spec/integration/client/ipv6_spec.rb +134 -134
  1271. data/spec/integration/knife/chef_fs_data_store_spec.rb +556 -556
  1272. data/spec/integration/knife/chef_repo_path_spec.rb +961 -959
  1273. data/spec/integration/knife/chef_repository_file_system_spec.rb +199 -199
  1274. data/spec/integration/knife/chefignore_spec.rb +300 -300
  1275. data/spec/integration/knife/client_bulk_delete_spec.rb +130 -130
  1276. data/spec/integration/knife/client_create_spec.rb +69 -69
  1277. data/spec/integration/knife/client_delete_spec.rb +63 -63
  1278. data/spec/integration/knife/client_key_create_spec.rb +65 -65
  1279. data/spec/integration/knife/client_key_delete_spec.rb +42 -42
  1280. data/spec/integration/knife/client_key_list_spec.rb +60 -60
  1281. data/spec/integration/knife/client_key_show_spec.rb +44 -44
  1282. data/spec/integration/knife/client_list_spec.rb +48 -48
  1283. data/spec/integration/knife/client_show_spec.rb +36 -36
  1284. data/spec/integration/knife/common_options_spec.rb +173 -173
  1285. data/spec/integration/knife/config_get_profile_spec.rb +112 -112
  1286. data/spec/integration/knife/config_get_spec.rb +183 -183
  1287. data/spec/integration/knife/config_list_profiles_spec.rb +188 -188
  1288. data/spec/integration/knife/config_use_profile_spec.rb +100 -100
  1289. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
  1290. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -64
  1291. data/spec/integration/knife/cookbook_download_spec.rb +71 -71
  1292. data/spec/integration/knife/cookbook_list_spec.rb +54 -54
  1293. data/spec/integration/knife/cookbook_show_spec.rb +148 -148
  1294. data/spec/integration/knife/cookbook_upload_spec.rb +90 -90
  1295. data/spec/integration/knife/data_bag_create_spec.rb +124 -124
  1296. data/spec/integration/knife/data_bag_delete_spec.rb +58 -58
  1297. data/spec/integration/knife/data_bag_edit_spec.rb +104 -104
  1298. data/spec/integration/knife/data_bag_from_file_spec.rb +115 -115
  1299. data/spec/integration/knife/data_bag_list_spec.rb +43 -43
  1300. data/spec/integration/knife/data_bag_show_spec.rb +94 -94
  1301. data/spec/integration/knife/delete_spec.rb +1017 -1017
  1302. data/spec/integration/knife/deps_spec.rb +702 -702
  1303. data/spec/integration/knife/diff_spec.rb +602 -602
  1304. data/spec/integration/knife/download_spec.rb +1333 -1333
  1305. data/spec/integration/knife/environment_compare_spec.rb +74 -74
  1306. data/spec/integration/knife/environment_create_spec.rb +40 -40
  1307. data/spec/integration/knife/environment_delete_spec.rb +36 -36
  1308. data/spec/integration/knife/environment_from_file_spec.rb +115 -115
  1309. data/spec/integration/knife/environment_list_spec.rb +41 -41
  1310. data/spec/integration/knife/environment_show_spec.rb +76 -76
  1311. data/spec/integration/knife/list_spec.rb +1059 -1059
  1312. data/spec/integration/knife/node_bulk_delete_spec.rb +51 -51
  1313. data/spec/integration/knife/node_create_spec.rb +46 -46
  1314. data/spec/integration/knife/node_delete_spec.rb +47 -47
  1315. data/spec/integration/knife/node_environment_set_spec.rb +45 -45
  1316. data/spec/integration/knife/node_from_file_spec.rb +58 -58
  1317. data/spec/integration/knife/node_list_spec.rb +44 -44
  1318. data/spec/integration/knife/node_run_list_add_spec.rb +53 -53
  1319. data/spec/integration/knife/node_run_list_remove_spec.rb +35 -35
  1320. data/spec/integration/knife/node_run_list_set_spec.rb +40 -40
  1321. data/spec/integration/knife/node_show_spec.rb +35 -35
  1322. data/spec/integration/knife/raw_spec.rb +248 -248
  1323. data/spec/integration/knife/redirection_spec.rb +54 -54
  1324. data/spec/integration/knife/role_bulk_delete_spec.rb +51 -51
  1325. data/spec/integration/knife/role_create_spec.rb +40 -40
  1326. data/spec/integration/knife/role_delete_spec.rb +47 -47
  1327. data/spec/integration/knife/role_from_file_spec.rb +95 -95
  1328. data/spec/integration/knife/role_list_spec.rb +44 -44
  1329. data/spec/integration/knife/role_show_spec.rb +50 -50
  1330. data/spec/integration/knife/search_node_spec.rb +39 -39
  1331. data/spec/integration/knife/serve_spec.rb +93 -93
  1332. data/spec/integration/knife/show_spec.rb +167 -167
  1333. data/spec/integration/knife/upload_spec.rb +1540 -1540
  1334. data/spec/integration/recipes/accumulator_spec.rb +232 -232
  1335. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +171 -171
  1336. data/spec/integration/recipes/lwrp_spec.rb +53 -53
  1337. data/spec/integration/recipes/noop_resource_spec.rb +24 -24
  1338. data/spec/integration/recipes/notifies_spec.rb +394 -394
  1339. data/spec/integration/recipes/notifying_block_spec.rb +111 -111
  1340. data/spec/integration/recipes/provider_choice.rb +37 -37
  1341. data/spec/integration/recipes/recipe_dsl_spec.rb +1373 -1373
  1342. data/spec/integration/recipes/remote_directory.rb +74 -74
  1343. data/spec/integration/recipes/resource_action_spec.rb +504 -504
  1344. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +552 -552
  1345. data/spec/integration/recipes/resource_load_spec.rb +192 -192
  1346. data/spec/integration/recipes/unified_mode_spec.rb +876 -0
  1347. data/spec/integration/solo/solo_spec.rb +217 -217
  1348. data/spec/rcov.opts +2 -2
  1349. data/spec/scripts/ssl-serve.rb +47 -47
  1350. data/spec/spec_helper.rb +332 -328
  1351. data/spec/stress/.DS_Store +0 -0
  1352. data/spec/stress/win32/file_spec.rb +37 -37
  1353. data/spec/stress/win32/memory_spec.rb +22 -22
  1354. data/spec/stress/win32/security_spec.rb +69 -69
  1355. data/spec/support/.DS_Store +0 -0
  1356. data/spec/support/chef_helpers.rb +115 -115
  1357. data/spec/support/key_helpers.rb +104 -104
  1358. data/spec/support/lib/chef/provider/easy.rb +35 -35
  1359. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -29
  1360. data/spec/support/lib/chef/provider/snakeoil.rb +42 -42
  1361. data/spec/support/lib/chef/resource/cat.rb +39 -39
  1362. data/spec/support/lib/chef/resource/one_two_three_four.rb +36 -36
  1363. data/spec/support/lib/chef/resource/openldap_includer.rb +28 -28
  1364. data/spec/support/lib/chef/resource/with_state.rb +30 -30
  1365. data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
  1366. data/spec/support/lib/chef/resource/zen_master.rb +40 -40
  1367. data/spec/support/lib/library_load_order.rb +20 -20
  1368. data/spec/support/matchers/leak.rb +98 -98
  1369. data/spec/support/mock/constant.rb +52 -52
  1370. data/spec/support/mock/platform.rb +25 -25
  1371. data/spec/support/platform_helpers.rb +276 -268
  1372. data/spec/support/platforms/prof/gc.rb +51 -51
  1373. data/spec/support/platforms/prof/win32.rb +45 -45
  1374. data/spec/support/platforms/win32/spec_service.rb +59 -59
  1375. data/spec/support/shared/context/client.rb +305 -305
  1376. data/spec/support/shared/context/config.rb +21 -21
  1377. data/spec/support/shared/context/win32.rb +34 -34
  1378. data/spec/support/shared/examples/client.rb +104 -104
  1379. data/spec/support/shared/functional/diff_disabled.rb +10 -10
  1380. data/spec/support/shared/functional/directory_resource.rb +178 -178
  1381. data/spec/support/shared/functional/execute_resource.rb +150 -150
  1382. data/spec/support/shared/functional/file_resource.rb +1050 -1050
  1383. data/spec/support/shared/functional/http.rb +248 -248
  1384. data/spec/support/shared/functional/knife.rb +37 -37
  1385. data/spec/support/shared/functional/securable_resource.rb +578 -578
  1386. data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
  1387. data/spec/support/shared/functional/win32_service.rb +57 -57
  1388. data/spec/support/shared/functional/windows_script.rb +272 -272
  1389. data/spec/support/shared/integration/app_server_support.rb +40 -40
  1390. data/spec/support/shared/integration/integration_helper.rb +154 -154
  1391. data/spec/support/shared/integration/knife_support.rb +196 -196
  1392. data/spec/support/shared/matchers/exit_with_code.rb +32 -32
  1393. data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
  1394. data/spec/support/shared/shared_examples.rb +14 -14
  1395. data/spec/support/shared/unit/api_error_inspector.rb +190 -190
  1396. data/spec/support/shared/unit/api_versioning.rb +77 -77
  1397. data/spec/support/shared/unit/application_dot_d.rb +75 -75
  1398. data/spec/support/shared/unit/execute_resource.rb +168 -168
  1399. data/spec/support/shared/unit/file_system_support.rb +69 -69
  1400. data/spec/support/shared/unit/knife_shared.rb +39 -39
  1401. data/spec/support/shared/unit/mock_shellout.rb +49 -49
  1402. data/spec/support/shared/unit/platform_introspector.rb +189 -189
  1403. data/spec/support/shared/unit/provider/file.rb +854 -854
  1404. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +402 -402
  1405. data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
  1406. data/spec/support/shared/unit/script_resource.rb +90 -90
  1407. data/spec/support/shared/unit/user_and_client_shared.rb +114 -114
  1408. data/spec/support/shared/unit/windows_script_resource.rb +80 -80
  1409. data/spec/tiny_server.rb +191 -191
  1410. data/spec/unit/.DS_Store +0 -0
  1411. data/spec/unit/api_client/registration_spec.rb +278 -278
  1412. data/spec/unit/api_client_spec.rb +341 -341
  1413. data/spec/unit/api_client_v1_spec.rb +455 -455
  1414. data/spec/unit/application/apply_spec.rb +113 -113
  1415. data/spec/unit/application/client_spec.rb +559 -559
  1416. data/spec/unit/application/exit_code_spec.rb +144 -144
  1417. data/spec/unit/application/knife_spec.rb +229 -229
  1418. data/spec/unit/application/solo_spec.rb +225 -225
  1419. data/spec/unit/application_spec.rb +486 -486
  1420. data/spec/unit/audit/audit_event_proxy_spec.rb +318 -318
  1421. data/spec/unit/audit/audit_reporter_spec.rb +435 -435
  1422. data/spec/unit/audit/control_group_data_spec.rb +482 -482
  1423. data/spec/unit/audit/logger_spec.rb +42 -42
  1424. data/spec/unit/audit/rspec_formatter_spec.rb +29 -29
  1425. data/spec/unit/audit/runner_spec.rb +144 -144
  1426. data/spec/unit/chef_class_spec.rb +240 -240
  1427. data/spec/unit/chef_fs/config_spec.rb +235 -235
  1428. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +82 -82
  1429. data/spec/unit/chef_fs/data_handler/data_handler_base_spec.rb +65 -65
  1430. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -63
  1431. data/spec/unit/chef_fs/diff_spec.rb +328 -328
  1432. data/spec/unit/chef_fs/file_pattern_spec.rb +512 -512
  1433. data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -34
  1434. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -47
  1435. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +126 -126
  1436. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +175 -175
  1437. data/spec/unit/chef_fs/file_system_spec.rb +148 -148
  1438. data/spec/unit/chef_fs/parallelizer.rb +477 -477
  1439. data/spec/unit/chef_fs/path_util_spec.rb +108 -108
  1440. data/spec/unit/chef_spec.rb +25 -25
  1441. data/spec/unit/client_spec.rb +595 -595
  1442. data/spec/unit/config_fetcher_spec.rb +125 -125
  1443. data/spec/unit/config_spec.rb +31 -31
  1444. data/spec/unit/cookbook/chefignore_spec.rb +49 -49
  1445. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +210 -210
  1446. data/spec/unit/cookbook/file_vendor_spec.rb +123 -123
  1447. data/spec/unit/cookbook/gem_installer_spec.rb +113 -92
  1448. data/spec/unit/cookbook/manifest_v0_spec.rb +133 -133
  1449. data/spec/unit/cookbook/manifest_v2_spec.rb +70 -70
  1450. data/spec/unit/cookbook/metadata_spec.rb +892 -892
  1451. data/spec/unit/cookbook/synchronizer_spec.rb +557 -557
  1452. data/spec/unit/cookbook/syntax_check_spec.rb +226 -226
  1453. data/spec/unit/cookbook_loader_spec.rb +302 -302
  1454. data/spec/unit/cookbook_manifest_spec.rb +228 -228
  1455. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +199 -199
  1456. data/spec/unit/cookbook_spec.rb +62 -62
  1457. data/spec/unit/cookbook_uploader_spec.rb +199 -199
  1458. data/spec/unit/cookbook_version_file_specificity_spec.rb +623 -623
  1459. data/spec/unit/cookbook_version_spec.rb +250 -250
  1460. data/spec/unit/daemon_spec.rb +183 -183
  1461. data/spec/unit/data_bag_item_spec.rb +392 -392
  1462. data/spec/unit/data_bag_spec.rb +260 -260
  1463. data/spec/unit/data_collector/messages/helpers_spec.rb +202 -202
  1464. data/spec/unit/data_collector/messages_spec.rb +329 -329
  1465. data/spec/unit/data_collector/resource_report_spec.rb +145 -145
  1466. data/spec/unit/data_collector_spec.rb +876 -876
  1467. data/spec/unit/decorator/lazy_array_spec.rb +58 -58
  1468. data/spec/unit/decorator/lazy_spec.rb +39 -39
  1469. data/spec/unit/decorator_spec.rb +142 -142
  1470. data/spec/unit/deprecated_spec.rb +65 -65
  1471. data/spec/unit/deprecation_spec.rb +129 -129
  1472. data/spec/unit/digester_spec.rb +49 -49
  1473. data/spec/unit/dsl/audit_spec.rb +43 -43
  1474. data/spec/unit/dsl/data_query_spec.rb +107 -107
  1475. data/spec/unit/dsl/declare_resource_spec.rb +374 -374
  1476. data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
  1477. data/spec/unit/dsl/reboot_pending_spec.rb +87 -87
  1478. data/spec/unit/dsl/recipe_spec.rb +76 -76
  1479. data/spec/unit/dsl/registry_helper_spec.rb +52 -52
  1480. data/spec/unit/dsl/resources_spec.rb +85 -85
  1481. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +96 -96
  1482. data/spec/unit/encrypted_data_bag_item_spec.rb +438 -438
  1483. data/spec/unit/environment_spec.rb +470 -470
  1484. data/spec/unit/event_dispatch/dispatcher_spec.rb +122 -122
  1485. data/spec/unit/event_dispatch/dsl_spec.rb +83 -83
  1486. data/spec/unit/exceptions_spec.rb +132 -132
  1487. data/spec/unit/file_access_control_spec.rb +308 -308
  1488. data/spec/unit/file_cache_spec.rb +114 -114
  1489. data/spec/unit/file_content_management/deploy/cp_spec.rb +44 -44
  1490. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +113 -113
  1491. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
  1492. data/spec/unit/file_content_management/tempfile_spec.rb +115 -115
  1493. data/spec/unit/formatters/base_spec.rb +100 -100
  1494. data/spec/unit/formatters/doc_spec.rb +110 -92
  1495. data/spec/unit/formatters/error_description_spec.rb +141 -141
  1496. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +76 -76
  1497. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +265 -265
  1498. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +126 -126
  1499. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -43
  1500. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +26 -26
  1501. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +26 -26
  1502. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +191 -191
  1503. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +91 -91
  1504. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +155 -155
  1505. data/spec/unit/guard_interpreter_spec.rb +41 -41
  1506. data/spec/unit/handler/json_file_spec.rb +63 -63
  1507. data/spec/unit/handler_spec.rb +302 -302
  1508. data/spec/unit/http/api_versions_spec.rb +82 -82
  1509. data/spec/unit/http/authenticator_spec.rb +125 -125
  1510. data/spec/unit/http/basic_client_spec.rb +72 -72
  1511. data/spec/unit/http/http_request_spec.rb +97 -97
  1512. data/spec/unit/http/json_input_spec.rb +128 -128
  1513. data/spec/unit/http/simple_spec.rb +32 -32
  1514. data/spec/unit/http/socketless_chef_zero_client_spec.rb +174 -174
  1515. data/spec/unit/http/ssl_policies_spec.rb +169 -169
  1516. data/spec/unit/http/validate_content_length_spec.rb +207 -207
  1517. data/spec/unit/http_spec.rb +229 -229
  1518. data/spec/unit/json_compat_spec.rb +73 -73
  1519. data/spec/unit/key_spec.rb +631 -631
  1520. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
  1521. data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
  1522. data/spec/unit/knife/bootstrap_spec.rb +972 -886
  1523. data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
  1524. data/spec/unit/knife/client_create_spec.rb +186 -186
  1525. data/spec/unit/knife/client_delete_spec.rb +99 -99
  1526. data/spec/unit/knife/client_edit_spec.rb +53 -53
  1527. data/spec/unit/knife/client_list_spec.rb +34 -34
  1528. data/spec/unit/knife/client_reregister_spec.rb +62 -62
  1529. data/spec/unit/knife/client_show_spec.rb +52 -52
  1530. data/spec/unit/knife/configure_client_spec.rb +81 -81
  1531. data/spec/unit/knife/configure_spec.rb +190 -190
  1532. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
  1533. data/spec/unit/knife/cookbook_create_spec.rb +42 -42
  1534. data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
  1535. data/spec/unit/knife/cookbook_download_spec.rb +255 -255
  1536. data/spec/unit/knife/cookbook_list_spec.rb +88 -88
  1537. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
  1538. data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
  1539. data/spec/unit/knife/cookbook_show_spec.rb +254 -254
  1540. data/spec/unit/knife/cookbook_test_spec.rb +84 -84
  1541. data/spec/unit/knife/cookbook_upload_spec.rb +331 -331
  1542. data/spec/unit/knife/core/bootstrap_context_spec.rb +324 -324
  1543. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
  1544. data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
  1545. data/spec/unit/knife/core/hashed_command_loader_spec.rb +110 -110
  1546. data/spec/unit/knife/core/node_editor_spec.rb +211 -211
  1547. data/spec/unit/knife/core/object_loader_spec.rb +81 -81
  1548. data/spec/unit/knife/core/subcommand_loader_spec.rb +64 -64
  1549. data/spec/unit/knife/core/ui_spec.rb +639 -639
  1550. data/spec/unit/knife/data_bag_create_spec.rb +175 -175
  1551. data/spec/unit/knife/data_bag_edit_spec.rb +126 -126
  1552. data/spec/unit/knife/data_bag_from_file_spec.rb +173 -173
  1553. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
  1554. data/spec/unit/knife/data_bag_show_spec.rb +138 -138
  1555. data/spec/unit/knife/environment_compare_spec.rb +112 -112
  1556. data/spec/unit/knife/environment_create_spec.rb +91 -91
  1557. data/spec/unit/knife/environment_delete_spec.rb +71 -71
  1558. data/spec/unit/knife/environment_edit_spec.rb +79 -79
  1559. data/spec/unit/knife/environment_from_file_spec.rb +90 -90
  1560. data/spec/unit/knife/environment_list_spec.rb +54 -54
  1561. data/spec/unit/knife/environment_show_spec.rb +52 -52
  1562. data/spec/unit/knife/key_create_spec.rb +223 -223
  1563. data/spec/unit/knife/key_delete_spec.rb +133 -133
  1564. data/spec/unit/knife/key_edit_spec.rb +264 -264
  1565. data/spec/unit/knife/key_helper.rb +74 -74
  1566. data/spec/unit/knife/key_list_spec.rb +216 -216
  1567. data/spec/unit/knife/key_show_spec.rb +126 -126
  1568. data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
  1569. data/spec/unit/knife/node_delete_spec.rb +77 -77
  1570. data/spec/unit/knife/node_edit_spec.rb +116 -116
  1571. data/spec/unit/knife/node_environment_set_spec.rb +56 -56
  1572. data/spec/unit/knife/node_from_file_spec.rb +59 -59
  1573. data/spec/unit/knife/node_list_spec.rb +62 -62
  1574. data/spec/unit/knife/node_policy_set_spec.rb +122 -122
  1575. data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
  1576. data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
  1577. data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
  1578. data/spec/unit/knife/node_show_spec.rb +65 -65
  1579. data/spec/unit/knife/osc_user_create_spec.rb +93 -93
  1580. data/spec/unit/knife/osc_user_delete_spec.rb +44 -44
  1581. data/spec/unit/knife/osc_user_edit_spec.rb +52 -52
  1582. data/spec/unit/knife/osc_user_list_spec.rb +37 -37
  1583. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -58
  1584. data/spec/unit/knife/osc_user_show_spec.rb +46 -46
  1585. data/spec/unit/knife/raw_spec.rb +43 -43
  1586. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
  1587. data/spec/unit/knife/role_create_spec.rb +80 -80
  1588. data/spec/unit/knife/role_delete_spec.rb +67 -67
  1589. data/spec/unit/knife/role_edit_spec.rb +77 -77
  1590. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
  1591. data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
  1592. data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
  1593. data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
  1594. data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
  1595. data/spec/unit/knife/role_from_file_spec.rb +69 -69
  1596. data/spec/unit/knife/role_list_spec.rb +54 -54
  1597. data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
  1598. data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
  1599. data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
  1600. data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
  1601. data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
  1602. data/spec/unit/knife/role_show_spec.rb +59 -59
  1603. data/spec/unit/knife/ssh_spec.rb +496 -496
  1604. data/spec/unit/knife/ssl_check_spec.rb +256 -256
  1605. data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
  1606. data/spec/unit/knife/status_spec.rb +111 -111
  1607. data/spec/unit/knife/supermarket_download_spec.rb +152 -152
  1608. data/spec/unit/knife/supermarket_install_spec.rb +201 -201
  1609. data/spec/unit/knife/supermarket_share_spec.rb +209 -209
  1610. data/spec/unit/knife/supermarket_unshare_spec.rb +78 -78
  1611. data/spec/unit/knife/tag_create_spec.rb +23 -23
  1612. data/spec/unit/knife/tag_delete_spec.rb +25 -25
  1613. data/spec/unit/knife/tag_list_spec.rb +23 -23
  1614. data/spec/unit/knife/user_create_spec.rb +214 -214
  1615. data/spec/unit/knife/user_delete_spec.rb +65 -65
  1616. data/spec/unit/knife/user_edit_spec.rb +66 -66
  1617. data/spec/unit/knife/user_list_spec.rb +36 -36
  1618. data/spec/unit/knife/user_reregister_spec.rb +74 -74
  1619. data/spec/unit/knife/user_show_spec.rb +65 -65
  1620. data/spec/unit/knife_spec.rb +588 -588
  1621. data/spec/unit/log/syslog_spec.rb +51 -51
  1622. data/spec/unit/log/winevt_spec.rb +54 -54
  1623. data/spec/unit/log_spec.rb +24 -24
  1624. data/spec/unit/lwrp_spec.rb +690 -690
  1625. data/spec/unit/mash_spec.rb +51 -51
  1626. data/spec/unit/mixin/api_version_request_handling_spec.rb +126 -126
  1627. data/spec/unit/mixin/checksum_spec.rb +54 -54
  1628. data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -54
  1629. data/spec/unit/mixin/deep_merge_spec.rb +342 -342
  1630. data/spec/unit/mixin/deprecation_spec.rb +57 -57
  1631. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -96
  1632. data/spec/unit/mixin/homebrew_user_spec.rb +96 -96
  1633. data/spec/unit/mixin/lazy_module_include.rb +71 -71
  1634. data/spec/unit/mixin/openssl_helper_spec.rb +857 -857
  1635. data/spec/unit/mixin/params_validate_spec.rb +421 -421
  1636. data/spec/unit/mixin/path_sanity_spec.rb +92 -92
  1637. data/spec/unit/mixin/powershell_exec_spec.rb +43 -43
  1638. data/spec/unit/mixin/powershell_out_spec.rb +94 -94
  1639. data/spec/unit/mixin/powershell_type_coercions_spec.rb +84 -84
  1640. data/spec/unit/mixin/properties_spec.rb +107 -107
  1641. data/spec/unit/mixin/proxified_socket_spec.rb +97 -97
  1642. data/spec/unit/mixin/securable_spec.rb +314 -314
  1643. data/spec/unit/mixin/shell_out_spec.rb +450 -450
  1644. data/spec/unit/mixin/subclass_directive_spec.rb +45 -45
  1645. data/spec/unit/mixin/template_spec.rb +321 -321
  1646. data/spec/unit/mixin/unformatter_spec.rb +61 -61
  1647. data/spec/unit/mixin/uris_spec.rb +57 -57
  1648. data/spec/unit/mixin/user_context_spec.rb +108 -108
  1649. data/spec/unit/mixin/versioned_api_spec.rb +128 -128
  1650. data/spec/unit/mixin/which.rb +160 -160
  1651. data/spec/unit/mixin/windows_architecture_helper_spec.rb +85 -85
  1652. data/spec/unit/mixin/xml_escape_spec.rb +54 -54
  1653. data/spec/unit/monkey_patches/uri_spec.rb +34 -34
  1654. data/spec/unit/monologger_spec.rb +45 -45
  1655. data/spec/unit/node/attribute_spec.rb +1276 -1276
  1656. data/spec/unit/node/immutable_collections_spec.rb +327 -327
  1657. data/spec/unit/node/vivid_mash_spec.rb +353 -353
  1658. data/spec/unit/node_map_spec.rb +242 -242
  1659. data/spec/unit/node_spec.rb +1851 -1851
  1660. data/spec/unit/org_spec.rb +196 -196
  1661. data/spec/unit/platform/query_helpers_spec.rb +207 -207
  1662. data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
  1663. data/spec/unit/policy_builder/expand_node_object_spec.rb +311 -311
  1664. data/spec/unit/policy_builder/policyfile_spec.rb +872 -872
  1665. data/spec/unit/policy_builder_spec.rb +26 -26
  1666. data/spec/unit/property/state_spec.rb +508 -508
  1667. data/spec/unit/property/validation_spec.rb +758 -758
  1668. data/spec/unit/property_spec.rb +1231 -1231
  1669. data/spec/unit/provider/apt_preference_spec.rb +87 -87
  1670. data/spec/unit/provider/apt_repository_spec.rb +254 -254
  1671. data/spec/unit/provider/apt_update_spec.rb +116 -116
  1672. data/spec/unit/provider/cookbook_file/content_spec.rb +39 -39
  1673. data/spec/unit/provider/cookbook_file_spec.rb +59 -59
  1674. data/spec/unit/provider/cron/unix_spec.rb +144 -144
  1675. data/spec/unit/provider/cron_spec.rb +1084 -1084
  1676. data/spec/unit/provider/directory_spec.rb +300 -300
  1677. data/spec/unit/provider/dsc_resource_spec.rb +343 -343
  1678. data/spec/unit/provider/dsc_script_spec.rb +173 -173
  1679. data/spec/unit/provider/execute_spec.rb +251 -251
  1680. data/spec/unit/provider/file/content_spec.rb +114 -114
  1681. data/spec/unit/provider/file_spec.rb +57 -57
  1682. data/spec/unit/provider/git_spec.rb +782 -782
  1683. data/spec/unit/provider/group/dscl_spec.rb +339 -339
  1684. data/spec/unit/provider/group/gpasswd_spec.rb +119 -119
  1685. data/spec/unit/provider/group/groupadd_spec.rb +194 -194
  1686. data/spec/unit/provider/group/groupmod_spec.rb +136 -136
  1687. data/spec/unit/provider/group/pw_spec.rb +141 -141
  1688. data/spec/unit/provider/group/suse_spec.rb +90 -90
  1689. data/spec/unit/provider/group/usermod_spec.rb +115 -115
  1690. data/spec/unit/provider/group/windows_spec.rb +124 -124
  1691. data/spec/unit/provider/group_spec.rb +286 -286
  1692. data/spec/unit/provider/http_request_spec.rb +159 -159
  1693. data/spec/unit/provider/ifconfig/aix_spec.rb +180 -180
  1694. data/spec/unit/provider/ifconfig/debian_spec.rb +332 -332
  1695. data/spec/unit/provider/ifconfig/redhat_spec.rb +83 -83
  1696. data/spec/unit/provider/ifconfig_spec.rb +206 -206
  1697. data/spec/unit/provider/launchd_spec.rb +268 -268
  1698. data/spec/unit/provider/link_spec.rb +409 -409
  1699. data/spec/unit/provider/log_spec.rb +94 -94
  1700. data/spec/unit/provider/mdadm_spec.rb +140 -140
  1701. data/spec/unit/provider/mount/aix_spec.rb +277 -277
  1702. data/spec/unit/provider/mount/mount_spec.rb +527 -527
  1703. data/spec/unit/provider/mount/solaris_spec.rb +822 -822
  1704. data/spec/unit/provider/mount/windows_spec.rb +149 -149
  1705. data/spec/unit/provider/mount_spec.rb +191 -191
  1706. data/spec/unit/provider/ohai_spec.rb +84 -84
  1707. data/spec/unit/provider/osx_profile_spec.rb +257 -257
  1708. data/spec/unit/provider/package/apt_spec.rb +610 -610
  1709. data/spec/unit/provider/package/bff_spec.rb +187 -187
  1710. data/spec/unit/provider/package/cab_spec.rb +272 -272
  1711. data/spec/unit/provider/package/chocolatey_spec.rb +507 -507
  1712. data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -29
  1713. data/spec/unit/provider/package/dpkg_spec.rb +287 -287
  1714. data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -274
  1715. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +148 -148
  1716. data/spec/unit/provider/package/freebsd/port_spec.rb +163 -163
  1717. data/spec/unit/provider/package/homebrew_spec.rb +293 -293
  1718. data/spec/unit/provider/package/ips_spec.rb +233 -233
  1719. data/spec/unit/provider/package/macports_spec.rb +203 -203
  1720. data/spec/unit/provider/package/msu_spec.rb +283 -283
  1721. data/spec/unit/provider/package/openbsd_spec.rb +132 -132
  1722. data/spec/unit/provider/package/pacman_spec.rb +194 -194
  1723. data/spec/unit/provider/package/paludis_spec.rb +134 -134
  1724. data/spec/unit/provider/package/portage_spec.rb +179 -179
  1725. data/spec/unit/provider/package/powershell_spec.rb +501 -501
  1726. data/spec/unit/provider/package/rpm_spec.rb +429 -429
  1727. data/spec/unit/provider/package/rubygems_spec.rb +981 -981
  1728. data/spec/unit/provider/package/smartos_spec.rb +110 -110
  1729. data/spec/unit/provider/package/solaris_spec.rb +167 -167
  1730. data/spec/unit/provider/package/windows/exe_spec.rb +201 -201
  1731. data/spec/unit/provider/package/windows/msi_spec.rb +168 -168
  1732. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +78 -78
  1733. data/spec/unit/provider/package/windows_spec.rb +463 -463
  1734. data/spec/unit/provider/package/yum/python_helper_spec.rb +29 -29
  1735. data/spec/unit/provider/package/yum/yum_cache_spec.rb +109 -109
  1736. data/spec/unit/provider/package/zypper_spec.rb +487 -478
  1737. data/spec/unit/provider/package_spec.rb +1013 -1013
  1738. data/spec/unit/provider/powershell_script_spec.rb +116 -116
  1739. data/spec/unit/provider/registry_key_spec.rb +487 -487
  1740. data/spec/unit/provider/remote_directory_spec.rb +236 -236
  1741. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +245 -245
  1742. data/spec/unit/provider/remote_file/content_spec.rb +253 -253
  1743. data/spec/unit/provider/remote_file/fetcher_spec.rb +95 -95
  1744. data/spec/unit/provider/remote_file/ftp_spec.rb +217 -217
  1745. data/spec/unit/provider/remote_file/http_spec.rb +324 -324
  1746. data/spec/unit/provider/remote_file/local_file_spec.rb +105 -105
  1747. data/spec/unit/provider/remote_file/network_file_spec.rb +50 -50
  1748. data/spec/unit/provider/remote_file/sftp_spec.rb +150 -150
  1749. data/spec/unit/provider/remote_file_spec.rb +62 -62
  1750. data/spec/unit/provider/route_spec.rb +270 -270
  1751. data/spec/unit/provider/ruby_block_spec.rb +45 -45
  1752. data/spec/unit/provider/script_spec.rb +157 -157
  1753. data/spec/unit/provider/service/aix_service_spec.rb +195 -195
  1754. data/spec/unit/provider/service/aixinit_service_spec.rb +272 -272
  1755. data/spec/unit/provider/service/arch_service_spec.rb +324 -324
  1756. data/spec/unit/provider/service/debian_service_spec.rb +249 -249
  1757. data/spec/unit/provider/service/freebsd_service_spec.rb +617 -617
  1758. data/spec/unit/provider/service/gentoo_service_spec.rb +144 -144
  1759. data/spec/unit/provider/service/init_service_spec.rb +235 -235
  1760. data/spec/unit/provider/service/insserv_service_spec.rb +75 -75
  1761. data/spec/unit/provider/service/invokercd_service_spec.rb +211 -211
  1762. data/spec/unit/provider/service/macosx_spec.rb +340 -340
  1763. data/spec/unit/provider/service/openbsd_service_spec.rb +549 -549
  1764. data/spec/unit/provider/service/redhat_spec.rb +250 -250
  1765. data/spec/unit/provider/service/simple_service_spec.rb +169 -169
  1766. data/spec/unit/provider/service/solaris_smf_service_spec.rb +292 -292
  1767. data/spec/unit/provider/service/systemd_service_spec.rb +364 -364
  1768. data/spec/unit/provider/service/upstart_service_spec.rb +351 -351
  1769. data/spec/unit/provider/service/windows_spec.rb +910 -910
  1770. data/spec/unit/provider/service_spec.rb +168 -168
  1771. data/spec/unit/provider/subversion_spec.rb +361 -361
  1772. data/spec/unit/provider/systemd_unit_spec.rb +967 -967
  1773. data/spec/unit/provider/template/content_spec.rb +169 -169
  1774. data/spec/unit/provider/template_spec.rb +87 -87
  1775. data/spec/unit/provider/user/aix_spec.rb +96 -96
  1776. data/spec/unit/provider/user/dscl_spec.rb +920 -920
  1777. data/spec/unit/provider/user/linux_spec.rb +74 -74
  1778. data/spec/unit/provider/user/pw_spec.rb +235 -235
  1779. data/spec/unit/provider/user/solaris_spec.rb +177 -177
  1780. data/spec/unit/provider/user/windows_spec.rb +197 -197
  1781. data/spec/unit/provider/user_spec.rb +478 -478
  1782. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
  1783. data/spec/unit/provider/windows_env_spec.rb +400 -400
  1784. data/spec/unit/provider/windows_path_spec.rb +65 -65
  1785. data/spec/unit/provider/windows_task_spec.rb +430 -430
  1786. data/spec/unit/provider/yum_repository_spec.rb +35 -35
  1787. data/spec/unit/provider/zypper_repository_spec.rb +126 -126
  1788. data/spec/unit/provider_resolver_spec.rb +923 -923
  1789. data/spec/unit/provider_spec.rb +201 -201
  1790. data/spec/unit/pure_application_spec.rb +32 -32
  1791. data/spec/unit/recipe_spec.rb +589 -589
  1792. data/spec/unit/resource/apt_package_spec.rb +56 -56
  1793. data/spec/unit/resource/apt_preference_spec.rb +57 -57
  1794. data/spec/unit/resource/apt_repository_spec.rb +92 -92
  1795. data/spec/unit/resource/apt_update_spec.rb +62 -62
  1796. data/spec/unit/resource/bash_spec.rb +45 -45
  1797. data/spec/unit/resource/batch_spec.rb +46 -46
  1798. data/spec/unit/resource/bff_package_spec.rb +51 -51
  1799. data/spec/unit/resource/breakpoint_spec.rb +64 -64
  1800. data/spec/unit/resource/build_essential_spec.rb +43 -43
  1801. data/spec/unit/resource/cab_package_spec.rb +64 -64
  1802. data/spec/unit/resource/chef_gem_spec.rb +125 -125
  1803. data/spec/unit/resource/chef_handler_spec.rb +40 -40
  1804. data/spec/unit/resource/chocolatey_config_spec.rb +98 -98
  1805. data/spec/unit/resource/chocolatey_package_spec.rb +91 -91
  1806. data/spec/unit/resource/chocolatey_source_spec.rb +102 -102
  1807. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
  1808. data/spec/unit/resource/conditional_spec.rb +254 -254
  1809. data/spec/unit/resource/cookbook_file_spec.rb +93 -93
  1810. data/spec/unit/resource/cron_access_spec.rb +36 -36
  1811. data/spec/unit/resource/cron_d_spec.rb +90 -90
  1812. data/spec/unit/resource/cron_spec.rb +173 -173
  1813. data/spec/unit/resource/csh_spec.rb +45 -45
  1814. data/spec/unit/resource/directory_spec.rb +69 -69
  1815. data/spec/unit/resource/dmg_package_spec.rb +39 -39
  1816. data/spec/unit/resource/dnf_package_spec.rb +108 -108
  1817. data/spec/unit/resource/dpkg_package_spec.rb +50 -50
  1818. data/spec/unit/resource/dsc_resource_spec.rb +102 -102
  1819. data/spec/unit/resource/dsc_script_spec.rb +134 -134
  1820. data/spec/unit/resource/execute_spec.rb +277 -277
  1821. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -103
  1822. data/spec/unit/resource/file/verification_spec.rb +147 -147
  1823. data/spec/unit/resource/file_spec.rb +127 -127
  1824. data/spec/unit/resource/freebsd_package_spec.rb +103 -103
  1825. data/spec/unit/resource/gem_package_spec.rb +67 -67
  1826. data/spec/unit/resource/git_spec.rb +62 -62
  1827. data/spec/unit/resource/group_spec.rb +165 -165
  1828. data/spec/unit/resource/homebrew_cask_spec.rb +40 -40
  1829. data/spec/unit/resource/homebrew_package_spec.rb +68 -68
  1830. data/spec/unit/resource/homebrew_tap_spec.rb +44 -44
  1831. data/spec/unit/resource/hostname_spec.rb +47 -47
  1832. data/spec/unit/resource/http_request_spec.rb +65 -65
  1833. data/spec/unit/resource/ifconfig_spec.rb +109 -109
  1834. data/spec/unit/resource/ips_package_spec.rb +54 -54
  1835. data/spec/unit/resource/kernel_module_spec.rb +48 -48
  1836. data/spec/unit/resource/ksh_spec.rb +45 -45
  1837. data/spec/unit/resource/launchd_spec.rb +40 -40
  1838. data/spec/unit/resource/link_spec.rb +124 -124
  1839. data/spec/unit/resource/locale_spec.rb +60 -60
  1840. data/spec/unit/resource/log_spec.rb +64 -64
  1841. data/spec/unit/resource/macos_user_defaults_spec.rb +35 -35
  1842. data/spec/unit/resource/macports_package_spec.rb +51 -51
  1843. data/spec/unit/resource/mdadm_spec.rb +104 -104
  1844. data/spec/unit/resource/mount_spec.rb +178 -178
  1845. data/spec/unit/resource/msu_package_spec.rb +63 -63
  1846. data/spec/unit/resource/ohai_hint_spec.rb +44 -44
  1847. data/spec/unit/resource/ohai_spec.rb +62 -62
  1848. data/spec/unit/resource/openbsd_package_spec.rb +58 -58
  1849. data/spec/unit/resource/openssl_dhparam.rb +61 -61
  1850. data/spec/unit/resource/openssl_ec_private_key_spec.rb +64 -64
  1851. data/spec/unit/resource/openssl_ec_public_key_spec.rb +43 -43
  1852. data/spec/unit/resource/openssl_rsa_private_key_spec.rb +64 -64
  1853. data/spec/unit/resource/openssl_rsa_public_key_spec.rb +43 -43
  1854. data/spec/unit/resource/openssl_x509_certificate_spec.rb +72 -72
  1855. data/spec/unit/resource/openssl_x509_crl_spec.rb +61 -61
  1856. data/spec/unit/resource/openssl_x509_request.rb +68 -68
  1857. data/spec/unit/resource/osx_profile_spec.rb +60 -60
  1858. data/spec/unit/resource/package_spec.rb +108 -108
  1859. data/spec/unit/resource/pacman_package_spec.rb +46 -46
  1860. data/spec/unit/resource/paludis_package_spec.rb +36 -36
  1861. data/spec/unit/resource/perl_spec.rb +44 -44
  1862. data/spec/unit/resource/portage_package_spec.rb +46 -46
  1863. data/spec/unit/resource/powershell_package_source_spec.rb +219 -219
  1864. data/spec/unit/resource/powershell_package_spec.rb +98 -98
  1865. data/spec/unit/resource/powershell_script_spec.rb +136 -136
  1866. data/spec/unit/resource/python_spec.rb +40 -40
  1867. data/spec/unit/resource/reboot_spec.rb +47 -47
  1868. data/spec/unit/resource/registry_key_spec.rb +215 -215
  1869. data/spec/unit/resource/remote_directory_spec.rb +105 -105
  1870. data/spec/unit/resource/remote_file_spec.rb +220 -220
  1871. data/spec/unit/resource/resource_notification_spec.rb +169 -169
  1872. data/spec/unit/resource/rhsm_errata_level_spec.rb +50 -50
  1873. data/spec/unit/resource/rhsm_errata_spec.rb +39 -39
  1874. data/spec/unit/resource/rhsm_register_spec.rb +204 -204
  1875. data/spec/unit/resource/rhsm_repo_spec.rb +64 -64
  1876. data/spec/unit/resource/rhsm_subscription_spec.rb +98 -98
  1877. data/spec/unit/resource/route_spec.rb +95 -95
  1878. data/spec/unit/resource/rpm_package_spec.rb +62 -62
  1879. data/spec/unit/resource/ruby_block_spec.rb +58 -58
  1880. data/spec/unit/resource/ruby_spec.rb +39 -39
  1881. data/spec/unit/resource/scm_spec.rb +173 -173
  1882. data/spec/unit/resource/script_spec.rb +52 -52
  1883. data/spec/unit/resource/service_spec.rb +206 -206
  1884. data/spec/unit/resource/smartos_package_spec.rb +52 -52
  1885. data/spec/unit/resource/solaris_package_spec.rb +54 -54
  1886. data/spec/unit/resource/ssh_known_hosts_entry_spec.rb +55 -55
  1887. data/spec/unit/resource/subversion_spec.rb +91 -91
  1888. data/spec/unit/resource/sudo_spec.rb +99 -99
  1889. data/spec/unit/resource/swap_file_spec.rb +39 -39
  1890. data/spec/unit/resource/sysctl_spec.rb +54 -54
  1891. data/spec/unit/resource/systemd_unit_spec.rb +130 -130
  1892. data/spec/unit/resource/template_spec.rb +222 -222
  1893. data/spec/unit/resource/timezone.rb +39 -39
  1894. data/spec/unit/resource/user_spec.rb +122 -122
  1895. data/spec/unit/resource/windows_ad_join_spec.rb +51 -51
  1896. data/spec/unit/resource/windows_auto_run_spec.rb +50 -50
  1897. data/spec/unit/resource/windows_certificate.rb +83 -83
  1898. data/spec/unit/resource/windows_env_spec.rb +75 -75
  1899. data/spec/unit/resource/windows_feature.rb +64 -64
  1900. data/spec/unit/resource/windows_feature_dism.rb +72 -72
  1901. data/spec/unit/resource/windows_feature_powershell.rb +72 -72
  1902. data/spec/unit/resource/windows_firewall_rule_spec.rb +401 -401
  1903. data/spec/unit/resource/windows_font_spec.rb +43 -43
  1904. data/spec/unit/resource/windows_package_spec.rb +105 -105
  1905. data/spec/unit/resource/windows_pagefile_spec.rb +49 -49
  1906. data/spec/unit/resource/windows_path_spec.rb +40 -40
  1907. data/spec/unit/resource/windows_printer_port_spec.rb +62 -62
  1908. data/spec/unit/resource/windows_printer_spec.rb +52 -52
  1909. data/spec/unit/resource/windows_service_spec.rb +93 -93
  1910. data/spec/unit/resource/windows_share.rb +39 -39
  1911. data/spec/unit/resource/windows_shortcut_spec.rb +38 -38
  1912. data/spec/unit/resource/windows_task_spec.rb +399 -399
  1913. data/spec/unit/resource/windows_workgroup_spec.rb +74 -74
  1914. data/spec/unit/resource/yum_package_spec.rb +150 -150
  1915. data/spec/unit/resource/yum_repository_spec.rb +152 -152
  1916. data/spec/unit/resource/zypper_package_spec.rb +51 -51
  1917. data/spec/unit/resource/zypper_repository_spec.rb +115 -115
  1918. data/spec/unit/resource_builder_spec.rb +1 -1
  1919. data/spec/unit/resource_collection/resource_list_spec.rb +137 -137
  1920. data/spec/unit/resource_collection/resource_set_spec.rb +244 -244
  1921. data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
  1922. data/spec/unit/resource_collection_spec.rb +408 -408
  1923. data/spec/unit/resource_definition_spec.rb +117 -117
  1924. data/spec/unit/resource_inspector_spec.rb +60 -60
  1925. data/spec/unit/resource_reporter_spec.rb +782 -782
  1926. data/spec/unit/resource_resolver_spec.rb +52 -52
  1927. data/spec/unit/resource_spec.rb +1195 -1195
  1928. data/spec/unit/role_spec.rb +358 -358
  1929. data/spec/unit/run_context/child_run_context_spec.rb +133 -133
  1930. data/spec/unit/run_context/cookbook_compiler_spec.rb +224 -224
  1931. data/spec/unit/run_context_spec.rb +241 -241
  1932. data/spec/unit/run_list/run_list_expansion_spec.rb +144 -144
  1933. data/spec/unit/run_list/run_list_item_spec.rb +117 -117
  1934. data/spec/unit/run_list/versioned_recipe_list_spec.rb +197 -197
  1935. data/spec/unit/run_list_spec.rb +312 -312
  1936. data/spec/unit/run_lock_spec.rb +140 -140
  1937. data/spec/unit/run_status_spec.rb +144 -144
  1938. data/spec/unit/runner_spec.rb +398 -398
  1939. data/spec/unit/scan_access_control_spec.rb +183 -183
  1940. data/spec/unit/search/query_spec.rb +283 -283
  1941. data/spec/unit/server_api_spec.rb +124 -124
  1942. data/spec/unit/server_api_versions_spec.rb +66 -66
  1943. data/spec/unit/shell/model_wrapper_spec.rb +96 -96
  1944. data/spec/unit/shell/shell_ext_spec.rb +153 -153
  1945. data/spec/unit/shell/shell_session_spec.rb +250 -250
  1946. data/spec/unit/shell_spec.rb +162 -162
  1947. data/spec/unit/user_spec.rb +275 -275
  1948. data/spec/unit/user_v1_spec.rb +583 -583
  1949. data/spec/unit/util/backup_spec.rb +141 -141
  1950. data/spec/unit/util/diff_spec.rb +576 -576
  1951. data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -193
  1952. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +248 -248
  1953. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +200 -200
  1954. data/spec/unit/util/dsc/resource_store.rb +78 -78
  1955. data/spec/unit/util/editor_spec.rb +152 -152
  1956. data/spec/unit/util/file_edit_spec.rb +224 -224
  1957. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -106
  1958. data/spec/unit/util/powershell/ps_credential_spec.rb +44 -44
  1959. data/spec/unit/util/selinux_spec.rb +157 -157
  1960. data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
  1961. data/spec/unit/util/windows/logon_session_spec.rb +285 -285
  1962. data/spec/unit/version/platform_spec.rb +60 -60
  1963. data/spec/unit/version_class_spec.rb +171 -171
  1964. data/spec/unit/version_constraint/platform_spec.rb +45 -45
  1965. data/spec/unit/version_constraint_spec.rb +179 -179
  1966. data/spec/unit/version_string_spec.rb +79 -79
  1967. data/spec/unit/win32/error_spec.rb +77 -77
  1968. data/spec/unit/win32/link_spec.rb +73 -73
  1969. data/spec/unit/win32/registry_spec.rb +394 -394
  1970. data/spec/unit/win32/security_spec.rb +134 -134
  1971. data/spec/unit/windows_service_spec.rb +118 -118
  1972. data/tasks/.DS_Store +0 -0
  1973. data/tasks/announce.rb +58 -58
  1974. data/tasks/bin/run_external_test +29 -29
  1975. data/tasks/dependencies.rb +58 -58
  1976. data/tasks/maintainers.rb +211 -211
  1977. data/tasks/rspec.rb +90 -90
  1978. data/tasks/templates/prerelease.md.erb +35 -35
  1979. data/tasks/templates/release.md.erb +34 -34
  1980. 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