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