puppet 5.5.22 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (1407) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +46 -72
  3. data/Gemfile.lock +86 -102
  4. data/MAINTAINERS +47 -0
  5. data/Rakefile +15 -19
  6. data/ext/build_defaults.yaml +0 -1
  7. data/ext/cert_inspector +3 -3
  8. data/ext/debian/copyright +0 -22
  9. data/ext/project_data.yaml +8 -10
  10. data/ext/puppet-test +2 -2
  11. data/ext/redhat/puppet.spec.erb +0 -4
  12. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  13. data/ext/solaris/smf/puppet.xml +0 -2
  14. data/ext/solaris/smf/svc-puppetd +1 -8
  15. data/ext/solaris/smf/svc-puppetmasterd +1 -8
  16. data/ext/windows/eventlog/Rakefile +32 -0
  17. data/ext/windows/eventlog/puppetres.dll +0 -0
  18. data/ext/windows/eventlog/puppetres.mc +18 -0
  19. data/ext/windows/service/daemon.rb +8 -54
  20. data/install.rb +24 -6
  21. data/lib/hiera/scope.rb +0 -7
  22. data/lib/puppet.rb +10 -21
  23. data/lib/puppet/agent.rb +13 -5
  24. data/lib/puppet/application.rb +10 -8
  25. data/lib/puppet/application/agent.rb +3 -21
  26. data/lib/puppet/application/apply.rb +22 -12
  27. data/lib/puppet/application/cert.rb +25 -180
  28. data/lib/puppet/application/describe.rb +9 -3
  29. data/lib/puppet/application/device.rb +41 -74
  30. data/lib/puppet/application/doc.rb +5 -3
  31. data/lib/puppet/application/filebucket.rb +1 -23
  32. data/lib/puppet/application/lookup.rb +2 -2
  33. data/lib/puppet/application/resource.rb +4 -4
  34. data/lib/puppet/application/script.rb +3 -3
  35. data/lib/puppet/application/ssl.rb +133 -0
  36. data/lib/puppet/application_support.rb +1 -2
  37. data/lib/puppet/configurer.rb +62 -127
  38. data/lib/puppet/configurer/downloader.rb +17 -34
  39. data/lib/puppet/configurer/fact_handler.rb +5 -1
  40. data/lib/puppet/configurer/plugin_handler.rb +2 -3
  41. data/lib/puppet/confine/false.rb +1 -7
  42. data/lib/puppet/confine/true.rb +1 -7
  43. data/lib/puppet/daemon.rb +2 -2
  44. data/lib/puppet/datatypes.rb +1 -1
  45. data/lib/puppet/defaults.rb +126 -286
  46. data/lib/puppet/environments.rb +2 -7
  47. data/lib/puppet/error.rb +14 -10
  48. data/lib/puppet/etc.rb +4 -25
  49. data/lib/puppet/external/dot.rb +23 -17
  50. data/lib/puppet/face/config.rb +50 -12
  51. data/lib/puppet/face/epp.rb +2 -2
  52. data/lib/puppet/face/facts.rb +1 -1
  53. data/lib/puppet/face/help.rb +21 -7
  54. data/lib/puppet/face/help/global.erb +2 -2
  55. data/lib/puppet/face/module/build.rb +4 -59
  56. data/lib/puppet/face/module/generate.rb +5 -247
  57. data/lib/puppet/face/module/install.rb +0 -4
  58. data/lib/puppet/face/module/list.rb +5 -10
  59. data/lib/puppet/face/module/search.rb +2 -2
  60. data/lib/puppet/face/module/uninstall.rb +1 -5
  61. data/lib/puppet/face/module/upgrade.rb +1 -5
  62. data/lib/puppet/face/node/clean.rb +14 -10
  63. data/lib/puppet/face/plugin.rb +2 -9
  64. data/lib/puppet/feature/base.rb +7 -26
  65. data/lib/puppet/feature/eventlog.rb +1 -1
  66. data/lib/puppet/file_bucket/dipper.rb +1 -1
  67. data/lib/puppet/file_serving/base.rb +7 -7
  68. data/lib/puppet/file_serving/fileset.rb +2 -2
  69. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  70. data/lib/puppet/file_serving/metadata.rb +4 -3
  71. data/lib/puppet/file_serving/mount/locales.rb +2 -1
  72. data/lib/puppet/file_serving/mount/pluginfacts.rb +2 -1
  73. data/lib/puppet/file_serving/mount/plugins.rb +2 -1
  74. data/lib/puppet/file_system.rb +8 -0
  75. data/lib/puppet/file_system/memory_file.rb +1 -1
  76. data/lib/puppet/file_system/posix.rb +2 -3
  77. data/lib/puppet/file_system/uniquefile.rb +0 -4
  78. data/lib/puppet/forge.rb +8 -12
  79. data/lib/puppet/functions.rb +138 -0
  80. data/lib/puppet/functions/abs.rb +61 -0
  81. data/lib/puppet/functions/call.rb +38 -2
  82. data/lib/puppet/functions/camelcase.rb +62 -0
  83. data/lib/puppet/functions/capitalize.rb +61 -0
  84. data/lib/puppet/functions/ceiling.rb +37 -0
  85. data/lib/puppet/functions/chomp.rb +57 -0
  86. data/lib/puppet/functions/chop.rb +67 -0
  87. data/lib/puppet/functions/compare.rb +125 -0
  88. data/lib/puppet/functions/convert_to.rb +3 -2
  89. data/lib/puppet/functions/dig.rb +21 -1
  90. data/lib/puppet/functions/downcase.rb +89 -0
  91. data/lib/puppet/functions/epp.rb +4 -4
  92. data/lib/puppet/functions/eyaml_lookup_key.rb +4 -5
  93. data/lib/puppet/functions/filter.rb +7 -6
  94. data/lib/puppet/functions/floor.rb +37 -0
  95. data/lib/puppet/functions/get.rb +150 -0
  96. data/lib/puppet/functions/getvar.rb +87 -0
  97. data/lib/puppet/functions/inline_epp.rb +5 -5
  98. data/lib/puppet/functions/lstrip.rb +58 -0
  99. data/lib/puppet/functions/max.rb +183 -0
  100. data/lib/puppet/functions/min.rb +182 -0
  101. data/lib/puppet/functions/new.rb +3 -8
  102. data/lib/puppet/functions/reduce.rb +4 -2
  103. data/lib/puppet/functions/reverse_each.rb +1 -1
  104. data/lib/puppet/functions/round.rb +24 -0
  105. data/lib/puppet/functions/rstrip.rb +58 -0
  106. data/lib/puppet/functions/size.rb +15 -0
  107. data/lib/puppet/functions/sort.rb +74 -0
  108. data/lib/puppet/functions/step.rb +1 -1
  109. data/lib/puppet/functions/strip.rb +58 -0
  110. data/lib/puppet/functions/upcase.rb +89 -0
  111. data/lib/puppet/functions/yaml_data.rb +4 -5
  112. data/lib/puppet/gettext/config.rb +1 -1
  113. data/lib/puppet/gettext/module_translations.rb +1 -1
  114. data/lib/puppet/graph.rb +0 -2
  115. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  116. data/lib/puppet/graph/simple_graph.rb +10 -7
  117. data/lib/puppet/indirector/catalog/compiler.rb +0 -8
  118. data/lib/puppet/indirector/catalog/json.rb +14 -3
  119. data/lib/puppet/indirector/catalog/yaml.rb +0 -16
  120. data/lib/puppet/indirector/certificate/file.rb +0 -1
  121. data/lib/puppet/indirector/facts/yaml.rb +4 -2
  122. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  123. data/lib/puppet/indirector/hiera.rb +0 -6
  124. data/lib/puppet/indirector/indirection.rb +8 -12
  125. data/lib/puppet/indirector/key/file.rb +1 -6
  126. data/lib/puppet/indirector/node/exec.rb +1 -3
  127. data/lib/puppet/indirector/node/yaml.rb +0 -6
  128. data/lib/puppet/indirector/request.rb +20 -27
  129. data/lib/puppet/indirector/resource/ral.rb +3 -1
  130. data/lib/puppet/indirector/resource/validator.rb +1 -1
  131. data/lib/puppet/indirector/rest.rb +7 -65
  132. data/lib/puppet/indirector/ssl_file.rb +3 -44
  133. data/lib/puppet/indirector/terminus.rb +1 -1
  134. data/lib/puppet/indirector/yaml.rb +4 -4
  135. data/lib/puppet/info_service/task_information_service.rb +7 -3
  136. data/lib/puppet/interface.rb +2 -3
  137. data/lib/puppet/interface/action.rb +2 -5
  138. data/lib/puppet/interface/face_collection.rb +3 -1
  139. data/lib/puppet/loaders.rb +2 -0
  140. data/lib/puppet/metatype/manager.rb +3 -5
  141. data/lib/puppet/module.rb +5 -31
  142. data/lib/puppet/module/task.rb +208 -30
  143. data/lib/puppet/module_tool.rb +2 -5
  144. data/lib/puppet/module_tool/applications.rb +0 -1
  145. data/lib/puppet/module_tool/applications/application.rb +1 -1
  146. data/lib/puppet/module_tool/applications/installer.rb +7 -8
  147. data/lib/puppet/module_tool/applications/uninstaller.rb +4 -5
  148. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  149. data/lib/puppet/module_tool/applications/upgrader.rb +5 -6
  150. data/lib/puppet/module_tool/installed_modules.rb +2 -2
  151. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  152. data/lib/puppet/module_tool/metadata.rb +1 -2
  153. data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
  154. data/lib/puppet/module_tool/tar/mini.rb +2 -12
  155. data/lib/puppet/network/authconfig.rb +0 -13
  156. data/lib/puppet/network/format_support.rb +13 -8
  157. data/lib/puppet/network/formats.rb +93 -2
  158. data/lib/puppet/network/http.rb +0 -2
  159. data/lib/puppet/network/http/api.rb +1 -10
  160. data/lib/puppet/network/http/api/indirected_routes.rb +22 -16
  161. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -3
  162. data/lib/puppet/network/http/connection.rb +14 -57
  163. data/lib/puppet/network/http/factory.rb +13 -7
  164. data/lib/puppet/network/http/handler.rb +59 -27
  165. data/lib/puppet/network/http/pool.rb +1 -7
  166. data/lib/puppet/network/http/site.rb +1 -1
  167. data/lib/puppet/network/resolver.rb +140 -67
  168. data/lib/puppet/node.rb +1 -2
  169. data/lib/puppet/node/environment.rb +5 -30
  170. data/lib/puppet/node/facts.rb +11 -1
  171. data/lib/puppet/parameter.rb +4 -7
  172. data/lib/puppet/parser/ast.rb +5 -9
  173. data/lib/puppet/parser/ast/branch.rb +3 -3
  174. data/lib/puppet/parser/ast/leaf.rb +5 -0
  175. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  176. data/lib/puppet/parser/catalog_compiler.rb +32 -0
  177. data/lib/puppet/parser/compiler.rb +2 -3
  178. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -2
  179. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -2
  180. data/lib/puppet/parser/environment_compiler.rb +0 -3
  181. data/lib/puppet/parser/functions.rb +48 -18
  182. data/lib/puppet/parser/functions/epp.rb +3 -3
  183. data/lib/puppet/parser/functions/filter.rb +1 -1
  184. data/lib/puppet/parser/functions/generate.rb +1 -1
  185. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  186. data/lib/puppet/parser/resource.rb +2 -4
  187. data/lib/puppet/parser/resource/param.rb +12 -11
  188. data/lib/puppet/parser/scope.rb +6 -8
  189. data/lib/puppet/parser/script_compiler.rb +7 -2
  190. data/lib/puppet/pops.rb +1 -0
  191. data/lib/puppet/pops/adaptable.rb +13 -7
  192. data/lib/puppet/pops/adapters.rb +18 -8
  193. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  194. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +4 -4
  195. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  196. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  197. data/lib/puppet/pops/evaluator/compare_operator.rb +3 -1
  198. data/lib/puppet/pops/evaluator/deferred_resolver.rb +127 -0
  199. data/lib/puppet/pops/evaluator/evaluator_impl.rb +17 -2
  200. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -3
  201. data/lib/puppet/pops/evaluator/runtime3_converter.rb +23 -4
  202. data/lib/puppet/pops/evaluator/runtime3_support.rb +7 -8
  203. data/lib/puppet/pops/functions/dispatch.rb +6 -0
  204. data/lib/puppet/pops/issues.rb +9 -10
  205. data/lib/puppet/pops/loader/loader.rb +1 -1
  206. data/lib/puppet/pops/loader/loader_paths.rb +5 -3
  207. data/lib/puppet/pops/loader/module_loaders.rb +47 -21
  208. data/lib/puppet/pops/loader/null_loader.rb +60 -0
  209. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +54 -0
  210. data/lib/puppet/pops/loader/static_loader.rb +0 -36
  211. data/lib/puppet/pops/loader/task_instantiator.rb +72 -44
  212. data/lib/puppet/pops/loaders.rb +21 -33
  213. data/lib/puppet/pops/lookup/hiera_config.rb +1 -2
  214. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  215. data/lib/puppet/pops/merge_strategy.rb +18 -22
  216. data/lib/puppet/pops/model/ast.pp +16 -0
  217. data/lib/puppet/pops/model/ast.rb +94 -0
  218. data/lib/puppet/pops/model/factory.rb +17 -38
  219. data/lib/puppet/pops/model/model_label_provider.rb +8 -1
  220. data/lib/puppet/pops/parser/egrammar.ra +14 -3
  221. data/lib/puppet/pops/parser/eparser.rb +1537 -1492
  222. data/lib/puppet/pops/parser/epp_support.rb +6 -2
  223. data/lib/puppet/pops/parser/heredoc_support.rb +8 -17
  224. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  225. data/lib/puppet/pops/parser/lexer2.rb +2 -7
  226. data/lib/puppet/pops/parser/locator.rb +87 -107
  227. data/lib/puppet/pops/parser/parser_support.rb +2 -11
  228. data/lib/puppet/pops/parser/pn_parser.rb +16 -17
  229. data/lib/puppet/pops/pcore.rb +19 -8
  230. data/lib/puppet/pops/puppet_stack.rb +48 -51
  231. data/lib/puppet/pops/resource/resource_type_impl.rb +0 -2
  232. data/lib/puppet/pops/serialization.rb +3 -2
  233. data/lib/puppet/pops/serialization/from_data_converter.rb +4 -3
  234. data/lib/puppet/pops/serialization/to_data_converter.rb +3 -3
  235. data/lib/puppet/pops/serialization/to_stringified_converter.rb +226 -0
  236. data/lib/puppet/pops/types/iterable.rb +8 -34
  237. data/lib/puppet/pops/types/p_binary_type.rb +1 -2
  238. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  239. data/lib/puppet/pops/types/p_object_type.rb +3 -0
  240. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  241. data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
  242. data/lib/puppet/pops/types/p_type_set_type.rb +0 -4
  243. data/lib/puppet/pops/types/string_converter.rb +12 -21
  244. data/lib/puppet/pops/types/type_calculator.rb +0 -24
  245. data/lib/puppet/pops/types/type_factory.rb +17 -0
  246. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  247. data/lib/puppet/pops/types/types.rb +7 -32
  248. data/lib/puppet/pops/validation/checker4_0.rb +23 -33
  249. data/lib/puppet/pops/validation/tasks_checker.rb +47 -6
  250. data/lib/puppet/pops/validation/validator_factory_4_0.rb +7 -10
  251. data/lib/puppet/property.rb +1 -1
  252. data/lib/puppet/property/ensure.rb +1 -1
  253. data/lib/puppet/provider.rb +14 -2
  254. data/lib/puppet/provider/exec.rb +58 -59
  255. data/lib/puppet/provider/file/posix.rb +0 -5
  256. data/lib/puppet/provider/file/windows.rb +2 -50
  257. data/lib/puppet/provider/group/aix.rb +2 -18
  258. data/lib/puppet/provider/group/groupadd.rb +19 -19
  259. data/lib/puppet/provider/group/windows_adsi.rb +4 -11
  260. data/lib/puppet/provider/nameservice.rb +28 -11
  261. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  262. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  263. data/lib/puppet/provider/package.rb +0 -2
  264. data/lib/puppet/provider/package/aix.rb +2 -17
  265. data/lib/puppet/provider/package/apt.rb +3 -14
  266. data/lib/puppet/provider/package/dnf.rb +3 -3
  267. data/lib/puppet/provider/package/dpkg.rb +7 -18
  268. data/lib/puppet/provider/package/fink.rb +3 -20
  269. data/lib/puppet/provider/package/gem.rb +43 -105
  270. data/lib/puppet/provider/package/openbsd.rb +2 -14
  271. data/lib/puppet/provider/package/pip.rb +108 -160
  272. data/lib/puppet/provider/package/pip3.rb +1 -1
  273. data/lib/puppet/provider/package/pkg.rb +5 -18
  274. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  275. data/lib/puppet/provider/package/pkgng.rb +4 -16
  276. data/lib/puppet/provider/package/portage.rb +6 -6
  277. data/lib/puppet/provider/package/puppet_gem.rb +2 -7
  278. data/lib/puppet/provider/package/rpm.rb +33 -82
  279. data/lib/puppet/provider/package/windows.rb +2 -6
  280. data/lib/puppet/provider/package/windows/exe_package.rb +10 -16
  281. data/lib/puppet/provider/package/windows/msi_package.rb +0 -8
  282. data/lib/puppet/provider/package/windows/package.rb +2 -10
  283. data/lib/puppet/provider/package/yum.rb +25 -37
  284. data/lib/puppet/provider/package/zypper.rb +0 -1
  285. data/lib/puppet/provider/parsedfile.rb +5 -26
  286. data/lib/puppet/provider/service/base.rb +1 -1
  287. data/lib/puppet/provider/service/daemontools.rb +9 -9
  288. data/lib/puppet/provider/service/debian.rb +1 -0
  289. data/lib/puppet/provider/service/launchd.rb +8 -39
  290. data/lib/puppet/provider/service/openbsd.rb +1 -1
  291. data/lib/puppet/provider/service/rcng.rb +2 -2
  292. data/lib/puppet/provider/service/runit.rb +8 -2
  293. data/lib/puppet/provider/service/smf.rb +0 -54
  294. data/lib/puppet/provider/service/systemd.rb +24 -35
  295. data/lib/puppet/provider/service/upstart.rb +1 -3
  296. data/lib/puppet/provider/service/windows.rb +3 -23
  297. data/lib/puppet/provider/user/aix.rb +2 -48
  298. data/lib/puppet/provider/user/directoryservice.rb +8 -45
  299. data/lib/puppet/provider/user/hpux.rb +1 -1
  300. data/lib/puppet/provider/user/pw.rb +3 -12
  301. data/lib/puppet/provider/user/user_role_add.rb +1 -5
  302. data/lib/puppet/provider/user/useradd.rb +44 -74
  303. data/lib/puppet/provider/user/windows_adsi.rb +0 -7
  304. data/lib/puppet/reference/indirection.rb +2 -2
  305. data/lib/puppet/reference/metaparameter.rb +3 -1
  306. data/lib/puppet/reference/providers.rb +1 -1
  307. data/lib/puppet/reference/type.rb +9 -3
  308. data/lib/puppet/reports.rb +3 -3
  309. data/lib/puppet/resource.rb +22 -22
  310. data/lib/puppet/resource/catalog.rb +8 -14
  311. data/lib/puppet/resource/type.rb +1 -10
  312. data/lib/puppet/rest/client.rb +83 -0
  313. data/lib/puppet/rest/errors.rb +14 -0
  314. data/lib/puppet/rest/response.rb +34 -0
  315. data/lib/puppet/rest/route.rb +84 -0
  316. data/lib/puppet/rest/routes.rb +154 -0
  317. data/lib/puppet/rest/ssl_context.rb +13 -0
  318. data/lib/puppet/settings.rb +9 -54
  319. data/lib/puppet/settings/config_file.rb +1 -2
  320. data/lib/puppet/settings/environment_conf.rb +0 -1
  321. data/lib/puppet/settings/file_setting.rb +1 -1
  322. data/lib/puppet/settings/server_list_setting.rb +0 -9
  323. data/lib/puppet/ssl.rb +0 -1
  324. data/lib/puppet/ssl/base.rb +1 -9
  325. data/lib/puppet/ssl/certificate.rb +7 -4
  326. data/lib/puppet/ssl/certificate_request.rb +6 -14
  327. data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
  328. data/lib/puppet/ssl/host.rb +400 -174
  329. data/lib/puppet/ssl/key.rb +1 -5
  330. data/lib/puppet/ssl/oids.rb +3 -3
  331. data/lib/puppet/ssl/validator/default_validator.rb +33 -49
  332. data/lib/puppet/test/test_helper.rb +12 -18
  333. data/lib/puppet/transaction.rb +7 -12
  334. data/lib/puppet/transaction/event.rb +37 -14
  335. data/lib/puppet/transaction/event_manager.rb +3 -11
  336. data/lib/puppet/transaction/persistence.rb +1 -1
  337. data/lib/puppet/transaction/report.rb +1 -1
  338. data/lib/puppet/transaction/resource_harness.rb +2 -5
  339. data/lib/puppet/type.rb +7 -10
  340. data/lib/puppet/type/exec.rb +16 -50
  341. data/lib/puppet/type/file.rb +7 -16
  342. data/lib/puppet/type/file/content.rb +2 -3
  343. data/lib/puppet/type/file/data_sync.rb +1 -5
  344. data/lib/puppet/type/file/mode.rb +2 -7
  345. data/lib/puppet/type/file/source.rb +2 -1
  346. data/lib/puppet/type/filebucket.rb +8 -12
  347. data/lib/puppet/type/group.rb +3 -33
  348. data/lib/puppet/type/notify.rb +2 -3
  349. data/lib/puppet/type/package.rb +18 -154
  350. data/lib/puppet/type/resources.rb +2 -12
  351. data/lib/puppet/type/schedule.rb +34 -96
  352. data/lib/puppet/type/service.rb +10 -9
  353. data/lib/puppet/type/tidy.rb +1 -1
  354. data/lib/puppet/type/user.rb +30 -14
  355. data/lib/puppet/util.rb +28 -52
  356. data/lib/puppet/util/autoload.rb +62 -56
  357. data/lib/puppet/util/character_encoding.rb +0 -22
  358. data/lib/puppet/util/classgen.rb +0 -6
  359. data/lib/puppet/util/command_line.rb +4 -7
  360. data/lib/puppet/util/command_line/trollop.rb +1 -1
  361. data/lib/puppet/util/connection.rb +74 -0
  362. data/lib/puppet/util/execution.rb +7 -22
  363. data/lib/puppet/util/feature.rb +63 -41
  364. data/lib/puppet/util/fileparsing.rb +27 -5
  365. data/lib/puppet/util/filetype.rb +8 -56
  366. data/lib/puppet/util/http_proxy.rb +18 -27
  367. data/lib/puppet/util/instance_loader.rb +3 -21
  368. data/lib/puppet/util/json.rb +0 -8
  369. data/lib/puppet/util/ldap/connection.rb +7 -7
  370. data/lib/puppet/util/log.rb +3 -8
  371. data/lib/puppet/util/log/destinations.rb +13 -5
  372. data/lib/puppet/util/logging.rb +19 -31
  373. data/lib/puppet/util/metric.rb +2 -2
  374. data/lib/puppet/util/monkey_patches.rb +1 -1
  375. data/lib/puppet/util/network_device/base.rb +1 -1
  376. data/lib/puppet/util/pidlock.rb +3 -23
  377. data/lib/puppet/util/platform.rb +3 -0
  378. data/lib/puppet/util/plist.rb +0 -6
  379. data/lib/puppet/util/posix.rb +0 -15
  380. data/lib/puppet/util/provider_features.rb +6 -7
  381. data/lib/puppet/util/rdoc.rb +2 -2
  382. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  383. data/lib/puppet/util/reference.rb +8 -7
  384. data/lib/puppet/util/resource_template.rb +1 -1
  385. data/lib/puppet/util/rubygems.rb +1 -13
  386. data/lib/puppet/util/run_mode.rb +1 -1
  387. data/lib/puppet/util/selinux.rb +3 -9
  388. data/lib/puppet/util/ssl.rb +40 -1
  389. data/lib/puppet/util/storage.rb +1 -13
  390. data/lib/puppet/util/suidmanager.rb +7 -5
  391. data/lib/puppet/util/tag_set.rb +1 -1
  392. data/lib/puppet/util/tagging.rb +1 -1
  393. data/lib/puppet/util/windows.rb +15 -0
  394. data/lib/puppet/util/windows/adsi.rb +7 -116
  395. data/lib/puppet/util/windows/api_types.rb +33 -46
  396. data/lib/puppet/util/windows/eventlog.rb +6 -1
  397. data/lib/puppet/util/windows/principal.rb +6 -8
  398. data/lib/puppet/util/windows/process.rb +3 -94
  399. data/lib/puppet/util/windows/registry.rb +14 -46
  400. data/lib/puppet/util/windows/security.rb +2 -40
  401. data/lib/puppet/util/windows/service.rb +72 -431
  402. data/lib/puppet/util/windows/sid.rb +3 -4
  403. data/lib/puppet/util/windows/user.rb +9 -17
  404. data/lib/puppet/util/yaml.rb +41 -5
  405. data/lib/puppet/vendor.rb +1 -1
  406. data/lib/puppet/version.rb +1 -1
  407. data/lib/puppet_pal.rb +246 -23
  408. data/locales/ja/puppet.po +11128 -0
  409. data/locales/puppet.pot +1321 -2527
  410. data/man/man5/puppet.conf.5 +31 -191
  411. data/man/man8/puppet-agent.8 +2 -2
  412. data/man/man8/puppet-apply.8 +1 -1
  413. data/man/man8/puppet-catalog.8 +1 -1
  414. data/man/man8/puppet-config.8 +3 -3
  415. data/man/man8/puppet-describe.8 +1 -1
  416. data/man/man8/puppet-device.8 +19 -23
  417. data/man/man8/puppet-doc.8 +1 -1
  418. data/man/man8/puppet-epp.8 +1 -1
  419. data/man/man8/puppet-facts.8 +1 -1
  420. data/man/man8/puppet-filebucket.8 +2 -21
  421. data/man/man8/puppet-generate.8 +1 -1
  422. data/man/man8/puppet-help.8 +1 -1
  423. data/man/man8/puppet-key.8 +1 -7
  424. data/man/man8/puppet-lookup.8 +1 -1
  425. data/man/man8/puppet-man.8 +1 -1
  426. data/man/man8/puppet-module.8 +10 -100
  427. data/man/man8/puppet-node.8 +4 -7
  428. data/man/man8/puppet-parser.8 +1 -1
  429. data/man/man8/puppet-plugin.8 +1 -1
  430. data/man/man8/puppet-report.8 +1 -1
  431. data/man/man8/puppet-resource.8 +1 -1
  432. data/man/man8/puppet-script.8 +1 -1
  433. data/man/man8/puppet-ssl.8 +28 -0
  434. data/man/man8/puppet-status.8 +1 -1
  435. data/man/man8/puppet.8 +12 -3
  436. data/spec/fixtures/unit/functions/hiera/hiera/backend/hieraspec_backend.rb +22 -0
  437. data/spec/fixtures/unit/functions/lookup/hiera/backend/custom_backend.rb +18 -0
  438. data/spec/fixtures/unit/functions/lookup/hiera/backend/other_backend.rb +7 -0
  439. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +6 -6
  440. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +0 -1
  441. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +0 -2
  442. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +0 -9
  443. data/spec/integration/agent/logging_spec.rb +9 -7
  444. data/spec/integration/application/apply_spec.rb +31 -26
  445. data/spec/integration/application/doc_spec.rb +2 -1
  446. data/spec/integration/application/lookup_spec.rb +5 -5
  447. data/spec/integration/configurer_spec.rb +8 -76
  448. data/spec/integration/data_binding_spec.rb +1 -1
  449. data/spec/integration/defaults_spec.rb +13 -16
  450. data/spec/integration/directory_environments_spec.rb +1 -1
  451. data/spec/integration/faces/config_spec.rb +4 -3
  452. data/spec/integration/faces/documentation_spec.rb +1 -0
  453. data/spec/integration/faces/plugin_spec.rb +49 -29
  454. data/spec/integration/file_bucket/file_spec.rb +4 -19
  455. data/spec/integration/file_serving/content_spec.rb +1 -0
  456. data/spec/integration/file_serving/fileset_spec.rb +1 -0
  457. data/spec/integration/file_serving/metadata_spec.rb +1 -0
  458. data/spec/integration/file_serving/terminus_helper_spec.rb +1 -0
  459. data/spec/integration/file_system/uniquefile_spec.rb +26 -29
  460. data/spec/integration/indirector/catalog/compiler_spec.rb +11 -10
  461. data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
  462. data/spec/integration/indirector/facts/facter_spec.rb +8 -22
  463. data/spec/integration/indirector/file_content/file_server_spec.rb +8 -7
  464. data/spec/integration/indirector/file_metadata/file_server_spec.rb +8 -7
  465. data/spec/integration/network/authconfig_spec.rb +24 -23
  466. data/spec/integration/network/formats_spec.rb +1 -0
  467. data/spec/integration/network/http/api/indirected_routes_spec.rb +6 -34
  468. data/spec/integration/node/environment_spec.rb +2 -1
  469. data/spec/integration/node/facts_spec.rb +10 -9
  470. data/spec/integration/node_spec.rb +7 -10
  471. data/spec/integration/parser/catalog_spec.rb +8 -6
  472. data/spec/integration/parser/collection_spec.rb +9 -4
  473. data/spec/integration/parser/compiler_spec.rb +7 -25
  474. data/spec/integration/parser/scope_spec.rb +1 -1
  475. data/spec/integration/parser/undef_param_spec.rb +1 -1
  476. data/spec/integration/provider/service/init_spec.rb +9 -6
  477. data/spec/integration/provider/service/systemd_spec.rb +14 -11
  478. data/spec/integration/provider/service/windows_spec.rb +11 -8
  479. data/spec/integration/reference/providers_spec.rb +7 -0
  480. data/spec/integration/reports_spec.rb +2 -1
  481. data/spec/integration/resource/catalog_spec.rb +17 -14
  482. data/spec/integration/resource/type_collection_spec.rb +5 -4
  483. data/spec/integration/ssl/certificate_request_spec.rb +1 -2
  484. data/spec/integration/ssl/host_spec.rb +17 -24
  485. data/spec/integration/ssl/key_spec.rb +7 -2
  486. data/spec/integration/test/test_helper_spec.rb +32 -0
  487. data/spec/integration/transaction/report_spec.rb +14 -9
  488. data/spec/integration/type/exec_spec.rb +2 -1
  489. data/spec/integration/type/file_spec.rb +38 -46
  490. data/spec/integration/type/package_spec.rb +25 -21
  491. data/spec/integration/type/tidy_spec.rb +2 -1
  492. data/spec/integration/type_spec.rb +1 -0
  493. data/spec/integration/util/autoload_spec.rb +11 -7
  494. data/spec/integration/util/execution_spec.rb +5 -32
  495. data/spec/integration/util/rdoc/parser_spec.rb +14 -23
  496. data/spec/integration/util/settings_spec.rb +2 -1
  497. data/spec/integration/util/windows/adsi_spec.rb +8 -11
  498. data/spec/integration/util/windows/principal_spec.rb +2 -1
  499. data/spec/integration/util/windows/process_spec.rb +9 -7
  500. data/spec/integration/util/windows/registry_spec.rb +46 -127
  501. data/spec/integration/util/windows/security_spec.rb +15 -16
  502. data/spec/integration/util/windows/user_spec.rb +29 -66
  503. data/spec/integration/util_spec.rb +10 -7
  504. data/spec/lib/matchers/json.rb +12 -18
  505. data/{lib/puppet/ssl → spec/lib/puppet}/certificate_factory.rb +5 -6
  506. data/spec/lib/puppet/test_ca.rb +109 -0
  507. data/spec/lib/puppet_spec/compiler.rb +28 -1
  508. data/spec/lib/puppet_spec/files.rb +29 -23
  509. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +1 -1
  510. data/spec/lib/puppet_spec/modules.rb +11 -1
  511. data/spec/lib/puppet_spec/scope.rb +2 -1
  512. data/spec/lib/puppet_spec/ssl.rb +265 -0
  513. data/spec/lib/puppet_spec/validators.rb +37 -0
  514. data/spec/shared_behaviours/all_parsedfile_providers.rb +1 -1
  515. data/spec/shared_behaviours/file_server_terminus.rb +9 -8
  516. data/spec/shared_behaviours/file_serving.rb +8 -6
  517. data/spec/shared_behaviours/file_serving_model.rb +5 -22
  518. data/spec/shared_behaviours/hiera_indirections.rb +4 -3
  519. data/spec/shared_behaviours/iterative_functions.rb +1 -0
  520. data/spec/shared_behaviours/memory_terminus.rb +2 -2
  521. data/spec/shared_behaviours/path_parameters.rb +1 -1
  522. data/spec/shared_contexts/types_setup.rb +0 -2
  523. data/spec/shared_examples/rhel_package_provider.rb +70 -112
  524. data/spec/spec_helper.rb +1 -15
  525. data/spec/unit/agent/disabler_spec.rb +5 -4
  526. data/spec/unit/agent/locker_spec.rb +13 -12
  527. data/spec/unit/agent_spec.rb +102 -105
  528. data/spec/unit/application/agent_spec.rb +95 -114
  529. data/spec/unit/application/apply_spec.rb +92 -119
  530. data/spec/unit/application/config_spec.rb +1 -0
  531. data/spec/unit/application/describe_spec.rb +7 -6
  532. data/spec/unit/application/device_spec.rb +180 -181
  533. data/spec/unit/application/doc_spec.rb +46 -44
  534. data/spec/unit/application/face_base_spec.rb +62 -61
  535. data/spec/unit/application/facts_spec.rb +4 -3
  536. data/spec/unit/application/filebucket_spec.rb +74 -66
  537. data/spec/unit/application/indirection_base_spec.rb +6 -8
  538. data/spec/unit/application/lookup_spec.rb +44 -37
  539. data/spec/unit/application/resource_spec.rb +48 -42
  540. data/spec/unit/application/ssl_spec.rb +322 -0
  541. data/spec/unit/application_spec.rb +108 -90
  542. data/spec/unit/capability_spec.rb +15 -16
  543. data/spec/unit/{ssl/certificate_factory_spec.rb → certificate_factory_spec.rb} +13 -20
  544. data/spec/unit/configurer/downloader_spec.rb +22 -31
  545. data/spec/unit/configurer/fact_handler_spec.rb +7 -2
  546. data/spec/unit/configurer/plugin_handler_spec.rb +8 -41
  547. data/spec/unit/configurer_spec.rb +475 -520
  548. data/spec/unit/confine/exists_spec.rb +15 -17
  549. data/spec/unit/confine/false_spec.rb +6 -32
  550. data/spec/unit/confine/feature_spec.rb +5 -7
  551. data/spec/unit/confine/true_spec.rb +6 -32
  552. data/spec/unit/confine/variable_spec.rb +15 -14
  553. data/spec/unit/confine_collection_spec.rb +29 -28
  554. data/spec/unit/confine_spec.rb +14 -13
  555. data/spec/unit/confiner_spec.rb +11 -10
  556. data/spec/unit/context/trusted_information_spec.rb +4 -3
  557. data/spec/unit/daemon_spec.rb +38 -35
  558. data/spec/unit/data_providers/function_data_provider_spec.rb +1 -0
  559. data/spec/unit/data_providers/hiera_data_provider_spec.rb +1 -0
  560. data/spec/unit/datatypes_spec.rb +4 -3
  561. data/spec/unit/defaults_spec.rb +61 -32
  562. data/spec/unit/environments_spec.rb +7 -7
  563. data/spec/unit/etc_spec.rb +29 -52
  564. data/spec/unit/external/pson_spec.rb +1 -0
  565. data/spec/unit/face/catalog_spec.rb +1 -0
  566. data/spec/unit/face/config_spec.rb +35 -31
  567. data/spec/unit/face/epp_face_spec.rb +4 -3
  568. data/spec/unit/face/facts_spec.rb +6 -14
  569. data/spec/unit/face/generate_spec.rb +5 -4
  570. data/spec/unit/face/help_spec.rb +8 -7
  571. data/spec/unit/face/key_spec.rb +1 -0
  572. data/spec/unit/face/man_spec.rb +2 -1
  573. data/spec/unit/face/module/install_spec.rb +5 -3
  574. data/spec/unit/face/module/list_spec.rb +12 -62
  575. data/spec/unit/face/module/search_spec.rb +9 -11
  576. data/spec/unit/face/module/uninstall_spec.rb +8 -4
  577. data/spec/unit/face/node_spec.rb +30 -52
  578. data/spec/unit/face/parser_spec.rb +3 -3
  579. data/spec/unit/face/plugin_spec.rb +9 -44
  580. data/spec/unit/face/status_spec.rb +1 -0
  581. data/spec/unit/file_bucket/dipper_spec.rb +24 -28
  582. data/spec/unit/file_bucket/file_spec.rb +2 -0
  583. data/spec/unit/file_serving/base_spec.rb +18 -20
  584. data/spec/unit/file_serving/configuration/parser_spec.rb +28 -27
  585. data/spec/unit/file_serving/configuration_spec.rb +66 -63
  586. data/spec/unit/file_serving/content_spec.rb +11 -10
  587. data/spec/unit/file_serving/fileset_spec.rb +58 -63
  588. data/spec/unit/file_serving/http_metadata_spec.rb +7 -8
  589. data/spec/unit/file_serving/metadata_spec.rb +40 -40
  590. data/spec/unit/file_serving/mount/file_spec.rb +32 -31
  591. data/spec/unit/file_serving/mount/locales_spec.rb +26 -25
  592. data/spec/unit/file_serving/mount/modules_spec.rb +15 -14
  593. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +26 -25
  594. data/spec/unit/file_serving/mount/plugins_spec.rb +26 -25
  595. data/spec/unit/file_serving/mount/tasks_spec.rb +15 -14
  596. data/spec/unit/file_serving/mount_spec.rb +1 -0
  597. data/spec/unit/file_serving/terminus_helper_spec.rb +42 -37
  598. data/spec/unit/file_serving/terminus_selector_spec.rb +13 -12
  599. data/spec/unit/file_system/path_pattern_spec.rb +1 -1
  600. data/spec/unit/file_system/uniquefile_spec.rb +6 -17
  601. data/spec/unit/file_system_spec.rb +9 -6
  602. data/spec/unit/forge/errors_spec.rb +1 -1
  603. data/spec/unit/forge/forge_spec.rb +16 -15
  604. data/spec/unit/forge/module_release_spec.rb +18 -18
  605. data/spec/unit/forge/repository_spec.rb +30 -27
  606. data/spec/unit/forge_spec.rb +11 -15
  607. data/spec/unit/functions/abs_spec.rb +70 -0
  608. data/spec/unit/functions/binary_file_spec.rb +3 -3
  609. data/spec/unit/functions/call_spec.rb +59 -5
  610. data/spec/unit/functions/camelcase_spec.rb +34 -0
  611. data/spec/unit/functions/capitalize_spec.rb +34 -0
  612. data/spec/unit/functions/ceiling_spec.rb +65 -0
  613. data/spec/unit/functions/chomp_spec.rb +46 -0
  614. data/spec/unit/functions/chop_spec.rb +38 -0
  615. data/spec/unit/functions/compare_spec.rb +147 -0
  616. data/spec/unit/functions/contain_spec.rb +2 -0
  617. data/spec/unit/functions/convert_to_spec.rb +3 -0
  618. data/spec/unit/functions/defined_spec.rb +1 -0
  619. data/spec/unit/functions/downcase_spec.rb +34 -0
  620. data/spec/unit/functions/epp_spec.rb +2 -2
  621. data/spec/unit/functions/filter_spec.rb +4 -4
  622. data/spec/unit/functions/find_file_spec.rb +7 -7
  623. data/spec/unit/functions/floor_spec.rb +65 -0
  624. data/spec/unit/functions/get_spec.rb +135 -0
  625. data/spec/unit/functions/getvar_spec.rb +121 -0
  626. data/spec/unit/functions/hiera_spec.rb +14 -48
  627. data/spec/unit/functions/include_spec.rb +4 -0
  628. data/spec/unit/functions/lookup_fixture_spec.rb +1 -0
  629. data/spec/unit/functions/lookup_spec.rb +37 -62
  630. data/spec/unit/functions/lstrip_spec.rb +30 -0
  631. data/spec/unit/functions/match_spec.rb +3 -4
  632. data/spec/unit/functions/max_spec.rb +129 -0
  633. data/spec/unit/functions/min_spec.rb +129 -0
  634. data/spec/unit/functions/module_directory_spec.rb +12 -12
  635. data/spec/unit/functions/new_spec.rb +0 -15
  636. data/spec/unit/functions/regsubst_spec.rb +3 -4
  637. data/spec/unit/functions/require_spec.rb +3 -0
  638. data/spec/unit/functions/round_spec.rb +41 -0
  639. data/spec/unit/functions/rstrip_spec.rb +30 -0
  640. data/spec/unit/functions/shared.rb +8 -5
  641. data/spec/unit/functions/size_spec.rb +50 -0
  642. data/spec/unit/functions/sort_spec.rb +79 -0
  643. data/spec/unit/functions/split_spec.rb +3 -4
  644. data/spec/unit/functions/strip_spec.rb +30 -0
  645. data/spec/unit/functions/upcase_spec.rb +34 -0
  646. data/spec/unit/functions/versioncmp_spec.rb +4 -4
  647. data/spec/unit/functions4_spec.rb +78 -51
  648. data/spec/unit/gettext/config_spec.rb +4 -4
  649. data/spec/unit/gettext/module_loading_spec.rb +7 -7
  650. data/spec/unit/graph/rb_tree_map_spec.rb +2 -0
  651. data/spec/unit/graph/relationship_graph_spec.rb +2 -1
  652. data/spec/unit/graph/simple_graph_spec.rb +52 -11
  653. data/spec/unit/hiera/scope_spec.rb +0 -7
  654. data/spec/unit/hiera_puppet_spec.rb +20 -20
  655. data/spec/unit/indirector/catalog/compiler_spec.rb +166 -183
  656. data/spec/unit/indirector/catalog/json_spec.rb +2 -1
  657. data/spec/unit/indirector/catalog/msgpack_spec.rb +1 -0
  658. data/spec/unit/indirector/catalog/rest_spec.rb +1 -0
  659. data/spec/unit/indirector/catalog/store_configs_spec.rb +1 -0
  660. data/spec/unit/indirector/catalog/yaml_spec.rb +1 -0
  661. data/spec/unit/indirector/certificate/file_spec.rb +1 -8
  662. data/spec/unit/indirector/certificate/rest_spec.rb +10 -8
  663. data/spec/unit/indirector/certificate_request/file_spec.rb +1 -0
  664. data/spec/unit/indirector/certificate_request/rest_spec.rb +1 -0
  665. data/spec/unit/indirector/direct_file_server_spec.rb +49 -57
  666. data/spec/unit/indirector/envelope_spec.rb +2 -1
  667. data/spec/unit/indirector/exec_spec.rb +31 -26
  668. data/spec/unit/indirector/face_spec.rb +9 -9
  669. data/spec/unit/indirector/facts/facter_spec.rb +43 -37
  670. data/spec/unit/indirector/facts/network_device_spec.rb +9 -8
  671. data/spec/unit/indirector/facts/rest_spec.rb +8 -7
  672. data/spec/unit/indirector/facts/store_configs_spec.rb +1 -0
  673. data/spec/unit/indirector/facts/yaml_spec.rb +90 -77
  674. data/spec/unit/indirector/file_bucket_file/file_spec.rb +13 -9
  675. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +1 -0
  676. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +5 -4
  677. data/spec/unit/indirector/file_content/file_server_spec.rb +1 -0
  678. data/spec/unit/indirector/file_content/file_spec.rb +1 -0
  679. data/spec/unit/indirector/file_content/rest_spec.rb +1 -0
  680. data/spec/unit/indirector/file_content/selector_spec.rb +1 -0
  681. data/spec/unit/indirector/file_metadata/file_server_spec.rb +1 -0
  682. data/spec/unit/indirector/file_metadata/file_spec.rb +13 -12
  683. data/spec/unit/indirector/file_metadata/rest_spec.rb +1 -0
  684. data/spec/unit/indirector/file_metadata/selector_spec.rb +1 -0
  685. data/spec/unit/indirector/file_server_spec.rb +145 -145
  686. data/spec/unit/indirector/indirection_spec.rb +226 -249
  687. data/spec/unit/indirector/json_spec.rb +9 -7
  688. data/spec/unit/indirector/key/file_spec.rb +22 -38
  689. data/spec/unit/indirector/memory_spec.rb +7 -6
  690. data/spec/unit/indirector/msgpack_spec.rb +9 -7
  691. data/spec/unit/indirector/node/exec_spec.rb +43 -22
  692. data/spec/unit/indirector/node/memory_spec.rb +4 -2
  693. data/spec/unit/indirector/node/msgpack_spec.rb +1 -0
  694. data/spec/unit/indirector/node/plain_spec.rb +4 -2
  695. data/spec/unit/indirector/node/rest_spec.rb +1 -0
  696. data/spec/unit/indirector/node/store_configs_spec.rb +1 -0
  697. data/spec/unit/indirector/node/yaml_spec.rb +1 -0
  698. data/spec/unit/indirector/none_spec.rb +5 -5
  699. data/spec/unit/indirector/plain_spec.rb +8 -7
  700. data/spec/unit/indirector/report/msgpack_spec.rb +1 -0
  701. data/spec/unit/indirector/report/processor_spec.rb +22 -21
  702. data/spec/unit/indirector/report/rest_spec.rb +12 -11
  703. data/spec/unit/indirector/report/yaml_spec.rb +1 -0
  704. data/spec/unit/indirector/request_spec.rb +18 -15
  705. data/spec/unit/indirector/resource/ral_spec.rb +55 -47
  706. data/spec/unit/indirector/resource/store_configs_spec.rb +1 -0
  707. data/spec/unit/indirector/rest_spec.rb +110 -113
  708. data/spec/unit/indirector/ssl_file_spec.rb +100 -119
  709. data/spec/unit/indirector/status/local_spec.rb +1 -0
  710. data/spec/unit/indirector/status/rest_spec.rb +1 -0
  711. data/spec/unit/indirector/store_configs_spec.rb +1 -0
  712. data/spec/unit/indirector/terminus_spec.rb +30 -32
  713. data/spec/unit/indirector/yaml_spec.rb +90 -68
  714. data/spec/unit/indirector_spec.rb +2 -1
  715. data/spec/unit/info_service_spec.rb +144 -10
  716. data/spec/unit/interface/action_builder_spec.rb +1 -0
  717. data/spec/unit/interface/action_manager_spec.rb +1 -0
  718. data/spec/unit/interface/action_spec.rb +3 -2
  719. data/spec/unit/interface/documentation_spec.rb +1 -0
  720. data/spec/unit/interface/face_collection_spec.rb +12 -19
  721. data/spec/unit/interface_spec.rb +3 -3
  722. data/spec/unit/man_spec.rb +4 -3
  723. data/spec/unit/module_spec.rb +52 -102
  724. data/spec/unit/module_tool/applications/installer_spec.rb +13 -12
  725. data/spec/unit/module_tool/applications/searcher_spec.rb +3 -3
  726. data/spec/unit/module_tool/applications/uninstaller_spec.rb +2 -1
  727. data/spec/unit/module_tool/applications/unpacker_spec.rb +13 -13
  728. data/spec/unit/module_tool/applications/upgrader_spec.rb +6 -6
  729. data/spec/unit/module_tool/install_directory_spec.rb +8 -8
  730. data/spec/unit/module_tool/installed_modules_spec.rb +3 -3
  731. data/spec/unit/module_tool/tar/gnu_spec.rb +6 -6
  732. data/spec/unit/module_tool/tar/mini_spec.rb +12 -12
  733. data/spec/unit/module_tool/tar_spec.rb +13 -12
  734. data/spec/unit/module_tool_spec.rb +12 -29
  735. data/spec/unit/network/auth_config_parser_spec.rb +13 -11
  736. data/spec/unit/network/authconfig_spec.rb +18 -17
  737. data/spec/unit/network/authorization_spec.rb +5 -4
  738. data/spec/unit/network/authstore_spec.rb +1 -0
  739. data/spec/unit/network/format_handler_spec.rb +1 -0
  740. data/spec/unit/network/format_spec.rb +10 -9
  741. data/spec/unit/network/format_support_spec.rb +29 -28
  742. data/spec/unit/network/formats_spec.rb +31 -4
  743. data/spec/unit/network/http/api/indirected_routes_spec.rb +41 -51
  744. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +7 -9
  745. data/spec/unit/network/http/api/master/v3/environment_spec.rb +1 -2
  746. data/spec/unit/network/http/api/master/v3/environments_spec.rb +7 -6
  747. data/spec/unit/network/http/api_spec.rb +2 -26
  748. data/spec/unit/network/http/compression_spec.rb +28 -24
  749. data/spec/unit/network/http/connection_spec.rb +122 -72
  750. data/spec/unit/network/http/factory_spec.rb +11 -40
  751. data/spec/unit/network/http/handler_spec.rb +18 -9
  752. data/spec/unit/network/http/nocache_pool_spec.rb +7 -6
  753. data/spec/unit/network/http/pool_spec.rb +29 -60
  754. data/spec/unit/network/http/request_spec.rb +2 -0
  755. data/spec/unit/network/http/response_spec.rb +13 -11
  756. data/spec/unit/network/http/route_spec.rb +1 -0
  757. data/spec/unit/network/http/session_spec.rb +2 -1
  758. data/spec/unit/network/http/site_spec.rb +1 -0
  759. data/spec/unit/network/http_pool_spec.rb +9 -18
  760. data/spec/unit/network/http_spec.rb +1 -0
  761. data/spec/unit/network/resolver_spec.rb +104 -28
  762. data/spec/unit/network/rights_spec.rb +53 -52
  763. data/spec/unit/node/environment_spec.rb +17 -18
  764. data/spec/unit/node/facts_spec.rb +21 -6
  765. data/spec/unit/node_spec.rb +23 -17
  766. data/spec/unit/other/selinux_spec.rb +1 -71
  767. data/spec/unit/parameter/boolean_spec.rb +2 -1
  768. data/spec/unit/parameter/package_options_spec.rb +2 -1
  769. data/spec/unit/parameter/path_spec.rb +1 -0
  770. data/spec/unit/parameter/value_collection_spec.rb +1 -0
  771. data/spec/unit/parameter/value_spec.rb +1 -0
  772. data/spec/unit/parameter_spec.rb +9 -9
  773. data/spec/unit/parser/ast/block_expression_spec.rb +8 -6
  774. data/spec/unit/parser/ast/leaf_spec.rb +21 -20
  775. data/spec/unit/parser/compiler_spec.rb +96 -84
  776. data/spec/unit/parser/environment_compiler_spec.rb +16 -23
  777. data/spec/unit/parser/files_spec.rb +1 -0
  778. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  779. data/spec/unit/parser/functions/digest_spec.rb +1 -4
  780. data/spec/unit/parser/functions/fail_spec.rb +2 -5
  781. data/spec/unit/parser/functions/file_spec.rb +14 -17
  782. data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -5
  783. data/spec/unit/parser/functions/generate_spec.rb +37 -38
  784. data/spec/unit/parser/functions/inline_template_spec.rb +1 -4
  785. data/spec/unit/parser/functions/regsubst_spec.rb +1 -4
  786. data/spec/unit/parser/functions/scanf_spec.rb +1 -4
  787. data/spec/unit/parser/functions/shellquote_spec.rb +1 -0
  788. data/spec/unit/parser/functions/split_spec.rb +1 -4
  789. data/spec/unit/parser/functions/sprintf_spec.rb +1 -4
  790. data/spec/unit/parser/functions/tag_spec.rb +2 -5
  791. data/spec/unit/parser/functions/tagged_spec.rb +3 -6
  792. data/spec/unit/parser/functions/template_spec.rb +13 -17
  793. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -5
  794. data/spec/unit/parser/functions_spec.rb +29 -3
  795. data/spec/unit/parser/relationship_spec.rb +1 -0
  796. data/spec/unit/parser/resource/param_spec.rb +1 -1
  797. data/spec/unit/parser/resource_spec.rb +42 -42
  798. data/spec/unit/parser/scope_spec.rb +35 -39
  799. data/spec/unit/parser/templatewrapper_spec.rb +12 -11
  800. data/spec/unit/parser/type_loader_spec.rb +19 -17
  801. data/spec/unit/pops/adaptable_spec.rb +1 -0
  802. data/spec/unit/pops/benchmark_spec.rb +1 -0
  803. data/spec/unit/pops/evaluator/access_ops_spec.rb +1 -0
  804. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +11 -0
  805. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -0
  806. data/spec/unit/pops/evaluator/collections_ops_spec.rb +1 -0
  807. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +1 -0
  808. data/spec/unit/pops/evaluator/conditionals_spec.rb +1 -0
  809. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +78 -18
  810. data/spec/unit/pops/evaluator/logical_ops_spec.rb +1 -0
  811. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +5 -4
  812. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +1 -0
  813. data/spec/unit/pops/evaluator/variables_spec.rb +1 -0
  814. data/spec/unit/pops/factory_spec.rb +4 -3
  815. data/spec/unit/pops/issues_spec.rb +20 -19
  816. data/spec/unit/pops/loaders/dependency_loader_spec.rb +2 -2
  817. data/spec/unit/pops/loaders/loader_spec.rb +12 -36
  818. data/spec/unit/pops/loaders/loaders_spec.rb +57 -54
  819. data/spec/unit/pops/loaders/module_loaders_spec.rb +35 -3
  820. data/spec/unit/pops/loaders/static_loader_spec.rb +0 -36
  821. data/spec/unit/pops/lookup/context_spec.rb +1 -0
  822. data/spec/unit/pops/lookup/interpolation_spec.rb +3 -2
  823. data/spec/unit/pops/merge_strategy_spec.rb +1 -0
  824. data/spec/unit/pops/migration_spec.rb +5 -3
  825. data/spec/unit/pops/model/model_spec.rb +1 -0
  826. data/spec/unit/pops/model/pn_transformer_spec.rb +1 -0
  827. data/spec/unit/pops/parser/lexer2_spec.rb +60 -21
  828. data/spec/unit/pops/parser/locator_spec.rb +6 -48
  829. data/spec/unit/pops/parser/parse_application_spec.rb +1 -0
  830. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +1 -0
  831. data/spec/unit/pops/parser/parse_calls_spec.rb +1 -0
  832. data/spec/unit/pops/parser/parse_capabilities_spec.rb +1 -0
  833. data/spec/unit/pops/parser/parse_conditionals_spec.rb +1 -0
  834. data/spec/unit/pops/parser/parse_containers_spec.rb +1 -0
  835. data/spec/unit/pops/parser/parse_heredoc_spec.rb +12 -124
  836. data/spec/unit/pops/parser/parse_plan_spec.rb +1 -0
  837. data/spec/unit/pops/parser/parse_resource_spec.rb +1 -0
  838. data/spec/unit/pops/parser/parse_site_spec.rb +1 -0
  839. data/spec/unit/pops/parser/pn_parser_spec.rb +1 -0
  840. data/spec/unit/pops/pn_spec.rb +1 -0
  841. data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -0
  842. data/spec/unit/pops/serialization/serialization_spec.rb +7 -5
  843. data/spec/unit/pops/serialization/to_from_hr_spec.rb +29 -4
  844. data/spec/unit/pops/serialization/to_stringified_spec.rb +157 -0
  845. data/spec/unit/pops/types/deferred_spec.rb +87 -0
  846. data/spec/unit/pops/types/p_object_type_spec.rb +20 -0
  847. data/spec/unit/pops/types/p_timespan_type_spec.rb +0 -22
  848. data/spec/unit/pops/types/p_timestamp_type_spec.rb +0 -19
  849. data/spec/unit/pops/types/recursion_guard_spec.rb +10 -10
  850. data/spec/unit/pops/types/ruby_generator_spec.rb +2 -2
  851. data/spec/unit/pops/types/string_converter_spec.rb +11 -22
  852. data/spec/unit/pops/types/task_spec.rb +148 -16
  853. data/spec/unit/pops/types/type_asserter_spec.rb +2 -2
  854. data/spec/unit/pops/types/type_calculator_spec.rb +36 -36
  855. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +0 -9
  856. data/spec/unit/pops/types/type_parser_spec.rb +13 -13
  857. data/spec/unit/pops/types/types_spec.rb +12 -6
  858. data/spec/unit/pops/validator/validator_spec.rb +162 -82
  859. data/spec/unit/pops/visitor_spec.rb +1 -0
  860. data/spec/unit/property/boolean_spec.rb +1 -1
  861. data/spec/unit/property/ensure_spec.rb +1 -0
  862. data/spec/unit/property/keyvalue_spec.rb +34 -32
  863. data/spec/unit/property/list_spec.rb +27 -26
  864. data/spec/unit/property/ordered_list_spec.rb +14 -10
  865. data/spec/unit/property_spec.rb +53 -43
  866. data/spec/unit/provider/aix_object_spec.rb +45 -47
  867. data/spec/unit/provider/command_spec.rb +9 -9
  868. data/spec/unit/provider/exec/posix_spec.rb +9 -8
  869. data/spec/unit/provider/exec/shell_spec.rb +3 -1
  870. data/spec/unit/provider/exec/windows_spec.rb +6 -4
  871. data/spec/unit/provider/exec_spec.rb +1 -209
  872. data/spec/unit/provider/file/posix_spec.rb +24 -22
  873. data/spec/unit/provider/file/windows_spec.rb +19 -17
  874. data/spec/unit/provider/group/aix_spec.rb +7 -22
  875. data/spec/unit/provider/group/groupadd_spec.rb +27 -60
  876. data/spec/unit/provider/group/ldap_spec.rb +36 -33
  877. data/spec/unit/provider/group/pw_spec.rb +18 -15
  878. data/spec/unit/provider/group/windows_adsi_spec.rb +80 -128
  879. data/spec/unit/provider/ldap_spec.rb +62 -61
  880. data/spec/unit/provider/nameservice/directoryservice_spec.rb +109 -102
  881. data/spec/unit/provider/nameservice_spec.rb +41 -39
  882. data/spec/unit/provider/package/aix_spec.rb +22 -48
  883. data/spec/unit/provider/package/appdmg_spec.rb +13 -13
  884. data/spec/unit/provider/package/apt_spec.rb +35 -60
  885. data/spec/unit/provider/package/aptitude_spec.rb +7 -7
  886. data/spec/unit/provider/package/aptrpm_spec.rb +13 -8
  887. data/spec/unit/provider/package/base_spec.rb +4 -4
  888. data/spec/unit/provider/package/dnf_spec.rb +23 -34
  889. data/spec/unit/provider/package/dpkg_spec.rb +72 -114
  890. data/spec/unit/provider/package/freebsd_spec.rb +18 -15
  891. data/spec/unit/provider/package/gem_spec.rb +86 -163
  892. data/spec/unit/provider/package/hpux_spec.rb +18 -15
  893. data/spec/unit/provider/package/macports_spec.rb +54 -56
  894. data/spec/unit/provider/package/nim_spec.rb +49 -33
  895. data/spec/unit/provider/package/openbsd_spec.rb +49 -60
  896. data/spec/unit/provider/package/opkg_spec.rb +26 -23
  897. data/spec/unit/provider/package/pacman_spec.rb +118 -97
  898. data/spec/unit/provider/package/pip3_spec.rb +6 -20
  899. data/spec/unit/provider/package/pip_spec.rb +129 -185
  900. data/spec/unit/provider/package/pkg_spec.rb +119 -129
  901. data/spec/unit/provider/package/pkgdmg_spec.rb +63 -65
  902. data/spec/unit/provider/package/pkgin_spec.rb +23 -20
  903. data/spec/unit/provider/package/pkgng_spec.rb +35 -67
  904. data/spec/unit/provider/package/pkgutil_spec.rb +49 -45
  905. data/spec/unit/provider/package/portage_spec.rb +76 -72
  906. data/spec/unit/provider/package/puppet_gem_spec.rb +21 -45
  907. data/spec/unit/provider/package/rpm_spec.rb +79 -291
  908. data/spec/unit/provider/package/sun_spec.rb +18 -16
  909. data/spec/unit/provider/package/tdnf_spec.rb +12 -9
  910. data/spec/unit/provider/package/up2date_spec.rb +4 -2
  911. data/spec/unit/provider/package/urpmi_spec.rb +17 -15
  912. data/spec/unit/provider/package/windows/exe_package_spec.rb +18 -15
  913. data/spec/unit/provider/package/windows/msi_package_spec.rb +23 -20
  914. data/spec/unit/provider/package/windows/package_spec.rb +43 -38
  915. data/spec/unit/provider/package/windows_spec.rb +36 -51
  916. data/spec/unit/provider/package/yum_spec.rb +24 -128
  917. data/spec/unit/provider/package/zypper_spec.rb +106 -117
  918. data/spec/unit/provider/parsedfile_spec.rb +45 -44
  919. data/spec/unit/provider/service/base_spec.rb +6 -5
  920. data/spec/unit/provider/service/bsd_spec.rb +54 -47
  921. data/spec/unit/provider/service/daemontools_spec.rb +53 -70
  922. data/spec/unit/provider/service/debian_spec.rb +58 -46
  923. data/spec/unit/provider/service/freebsd_spec.rb +23 -20
  924. data/spec/unit/provider/service/gentoo_spec.rb +81 -74
  925. data/spec/unit/provider/service/init_spec.rb +66 -65
  926. data/spec/unit/provider/service/launchd_spec.rb +114 -181
  927. data/spec/unit/provider/service/openbsd_spec.rb +94 -87
  928. data/spec/unit/provider/service/openrc_spec.rb +74 -70
  929. data/spec/unit/provider/service/openwrt_spec.rb +38 -30
  930. data/spec/unit/provider/service/rcng_spec.rb +24 -19
  931. data/spec/unit/provider/service/redhat_spec.rb +60 -60
  932. data/spec/unit/provider/service/runit_spec.rb +44 -61
  933. data/spec/unit/provider/service/smf_spec.rb +74 -143
  934. data/spec/unit/provider/service/src_spec.rb +69 -60
  935. data/spec/unit/provider/service/systemd_spec.rb +160 -222
  936. data/spec/unit/provider/service/upstart_spec.rb +99 -83
  937. data/spec/unit/provider/service/windows_spec.rb +42 -84
  938. data/spec/unit/provider/user/aix_spec.rb +24 -65
  939. data/spec/unit/provider/user/directoryservice_spec.rb +114 -187
  940. data/spec/unit/provider/user/hpux_spec.rb +21 -17
  941. data/spec/unit/provider/user/ldap_spec.rb +83 -80
  942. data/spec/unit/provider/user/openbsd_spec.rb +12 -11
  943. data/spec/unit/provider/user/pw_spec.rb +44 -80
  944. data/spec/unit/provider/user/user_role_add_spec.rb +94 -94
  945. data/spec/unit/provider/user/useradd_spec.rb +100 -208
  946. data/spec/unit/provider/user/windows_adsi_spec.rb +63 -62
  947. data/spec/unit/provider_spec.rb +189 -41
  948. data/spec/unit/puppet_pal_2pec.rb +26 -12
  949. data/spec/unit/puppet_pal_catalog_spec.rb +801 -0
  950. data/spec/unit/puppet_pal_spec.rb +2 -8
  951. data/spec/unit/puppet_spec.rb +7 -27
  952. data/spec/unit/relationship_spec.rb +1 -0
  953. data/spec/unit/reports/http_spec.rb +23 -21
  954. data/spec/unit/reports/store_spec.rb +4 -3
  955. data/spec/unit/reports_spec.rb +14 -12
  956. data/spec/unit/resource/capability_finder_spec.rb +26 -29
  957. data/spec/unit/resource/catalog_spec.rb +77 -81
  958. data/spec/unit/resource/status_spec.rb +8 -6
  959. data/spec/unit/resource/type_collection_spec.rb +18 -17
  960. data/spec/unit/resource/type_spec.rb +35 -34
  961. data/spec/unit/resource_spec.rb +79 -67
  962. data/spec/unit/rest/client_spec.rb +135 -0
  963. data/spec/unit/rest/route_spec.rb +132 -0
  964. data/spec/unit/scheduler/job_spec.rb +1 -0
  965. data/spec/unit/scheduler/scheduler_spec.rb +1 -0
  966. data/spec/unit/scheduler/splay_job_spec.rb +2 -1
  967. data/spec/unit/settings/array_setting_spec.rb +1 -1
  968. data/spec/unit/settings/autosign_setting_spec.rb +9 -9
  969. data/spec/unit/settings/certificate_revocation_setting_spec.rb +1 -1
  970. data/spec/unit/settings/config_file_spec.rb +10 -0
  971. data/spec/unit/settings/directory_setting_spec.rb +7 -2
  972. data/spec/unit/settings/duration_setting_spec.rb +2 -1
  973. data/spec/unit/settings/enum_setting_spec.rb +1 -1
  974. data/spec/unit/settings/environment_conf_spec.rb +6 -4
  975. data/spec/unit/settings/file_setting_spec.rb +50 -46
  976. data/spec/unit/settings/ini_file_spec.rb +2 -4
  977. data/spec/unit/settings/path_setting_spec.rb +3 -2
  978. data/spec/unit/settings/priority_setting_spec.rb +2 -1
  979. data/spec/unit/settings/string_setting_spec.rb +15 -14
  980. data/spec/unit/settings/terminus_setting_spec.rb +2 -1
  981. data/spec/unit/settings/value_translator_spec.rb +1 -0
  982. data/spec/unit/settings_spec.rb +226 -253
  983. data/spec/unit/ssl/base_spec.rb +15 -14
  984. data/spec/unit/ssl/certificate_request_attributes_spec.rb +22 -8
  985. data/spec/unit/ssl/certificate_request_spec.rb +63 -92
  986. data/spec/unit/ssl/certificate_spec.rb +29 -37
  987. data/spec/unit/ssl/digest_spec.rb +1 -0
  988. data/spec/unit/ssl/host_spec.rb +305 -685
  989. data/spec/unit/ssl/key_spec.rb +34 -46
  990. data/spec/unit/ssl/validator_spec.rb +70 -203
  991. data/spec/unit/task_spec.rb +172 -26
  992. data/spec/unit/transaction/additional_resource_generator_spec.rb +68 -67
  993. data/spec/unit/transaction/event_manager_spec.rb +84 -95
  994. data/spec/unit/transaction/event_spec.rb +15 -16
  995. data/spec/unit/transaction/persistence_spec.rb +18 -17
  996. data/spec/unit/transaction/report_spec.rb +24 -18
  997. data/spec/unit/transaction/resource_harness_spec.rb +33 -72
  998. data/spec/unit/transaction_spec.rb +106 -176
  999. data/spec/unit/type/component_spec.rb +1 -0
  1000. data/spec/unit/type/exec_spec.rb +66 -120
  1001. data/spec/unit/type/file/checksum_spec.rb +11 -10
  1002. data/spec/unit/type/file/checksum_value_spec.rb +32 -31
  1003. data/spec/unit/type/file/content_spec.rb +62 -65
  1004. data/spec/unit/type/file/ctime_spec.rb +1 -0
  1005. data/spec/unit/type/file/ensure_spec.rb +13 -12
  1006. data/spec/unit/type/file/group_spec.rb +7 -5
  1007. data/spec/unit/type/file/mode_spec.rb +6 -4
  1008. data/spec/unit/type/file/mtime_spec.rb +1 -0
  1009. data/spec/unit/type/file/owner_spec.rb +8 -6
  1010. data/spec/unit/type/file/selinux_spec.rb +19 -17
  1011. data/spec/unit/type/file/source_spec.rb +110 -113
  1012. data/spec/unit/type/file/type_spec.rb +1 -0
  1013. data/spec/unit/type/file_spec.rb +190 -204
  1014. data/spec/unit/type/filebucket_spec.rb +10 -11
  1015. data/spec/unit/type/group_spec.rb +9 -15
  1016. data/spec/unit/type/noop_metaparam_spec.rb +2 -1
  1017. data/spec/unit/type/package/package_settings_spec.rb +23 -44
  1018. data/spec/unit/type/package_spec.rb +64 -61
  1019. data/spec/unit/type/resources_spec.rb +101 -103
  1020. data/spec/unit/type/schedule_spec.rb +28 -28
  1021. data/spec/unit/type/service_spec.rb +85 -76
  1022. data/spec/unit/type/stage_spec.rb +1 -0
  1023. data/spec/unit/type/tidy_spec.rb +63 -62
  1024. data/spec/unit/type/user_spec.rb +26 -147
  1025. data/spec/unit/type/whit_spec.rb +1 -0
  1026. data/spec/unit/type_spec.rb +164 -125
  1027. data/spec/unit/util/at_fork_spec.rb +19 -18
  1028. data/spec/unit/util/autoload_spec.rb +122 -93
  1029. data/spec/unit/util/backups_spec.rb +35 -34
  1030. data/spec/unit/util/character_encoding_spec.rb +5 -48
  1031. data/spec/unit/util/checksums_spec.rb +39 -38
  1032. data/spec/unit/util/colors_spec.rb +2 -1
  1033. data/spec/unit/util/command_line_spec.rb +20 -40
  1034. data/spec/unit/util/constant_inflector_spec.rb +1 -0
  1035. data/spec/unit/util/diff_spec.rb +8 -7
  1036. data/spec/unit/util/errors_spec.rb +1 -0
  1037. data/spec/unit/util/execution_spec.rb +167 -285
  1038. data/spec/unit/util/execution_stub_spec.rb +3 -2
  1039. data/spec/unit/util/feature_spec.rb +46 -28
  1040. data/spec/unit/util/filetype_spec.rb +53 -61
  1041. data/spec/unit/util/http_proxy_spec.rb +13 -133
  1042. data/spec/unit/util/inifile_spec.rb +31 -26
  1043. data/spec/unit/util/json_lockfile_spec.rb +5 -3
  1044. data/spec/unit/util/ldap/connection_spec.rb +25 -26
  1045. data/spec/unit/util/ldap/generator_spec.rb +1 -0
  1046. data/spec/unit/util/ldap/manager_spec.rb +102 -118
  1047. data/spec/unit/util/lockfile_spec.rb +2 -1
  1048. data/spec/unit/util/log/destinations_spec.rb +40 -23
  1049. data/spec/unit/util/log_spec.rb +146 -48
  1050. data/spec/unit/util/logging_spec.rb +114 -252
  1051. data/spec/unit/util/metric_spec.rb +1 -0
  1052. data/spec/unit/util/monkey_patches_spec.rb +12 -24
  1053. data/spec/unit/util/multi_match_spec.rb +1 -0
  1054. data/spec/unit/util/network_device/config_spec.rb +1 -0
  1055. data/spec/unit/util/network_device/transport/base_spec.rb +6 -5
  1056. data/spec/unit/util/network_device_spec.rb +9 -7
  1057. data/spec/unit/util/package_spec.rb +1 -0
  1058. data/spec/unit/util/pidlock_spec.rb +14 -86
  1059. data/spec/unit/util/plist_spec.rb +33 -60
  1060. data/spec/unit/util/posix_spec.rb +47 -78
  1061. data/spec/unit/util/profiler/object_counts_spec.rb +2 -1
  1062. data/spec/unit/util/rdoc_spec.rb +10 -9
  1063. data/spec/unit/util/reference_spec.rb +1 -0
  1064. data/spec/unit/util/resource_template_spec.rb +20 -20
  1065. data/spec/unit/util/retry_action_spec.rb +8 -7
  1066. data/spec/unit/util/rubygems_spec.rb +7 -41
  1067. data/spec/unit/util/run_mode_spec.rb +11 -10
  1068. data/spec/unit/util/selinux_spec.rb +73 -84
  1069. data/spec/unit/util/splayer_spec.rb +9 -8
  1070. data/spec/unit/util/ssl_spec.rb +1 -0
  1071. data/spec/unit/util/storage_spec.rb +17 -111
  1072. data/spec/unit/util/suidmanager_spec.rb +58 -47
  1073. data/spec/unit/util/symbolic_file_mode_spec.rb +1 -0
  1074. data/spec/unit/util/tag_set_spec.rb +9 -1
  1075. data/spec/unit/util/tagging_spec.rb +12 -0
  1076. data/spec/unit/util/terminal_spec.rb +10 -9
  1077. data/spec/unit/util/user_attr_spec.rb +2 -1
  1078. data/spec/unit/util/warnings_spec.rb +4 -3
  1079. data/spec/unit/util/watcher/periodic_watcher_spec.rb +2 -2
  1080. data/spec/unit/util/watcher_spec.rb +21 -51
  1081. data/spec/unit/util/windows/access_control_entry_spec.rb +2 -1
  1082. data/spec/unit/util/windows/access_control_list_spec.rb +2 -1
  1083. data/spec/unit/util/windows/adsi_spec.rb +134 -278
  1084. data/spec/unit/util/windows/api_types_spec.rb +42 -105
  1085. data/spec/unit/util/windows/eventlog_spec.rb +13 -10
  1086. data/spec/unit/util/windows/file_spec.rb +1 -0
  1087. data/spec/unit/util/windows/root_certs_spec.rb +1 -0
  1088. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -1
  1089. data/spec/unit/util/windows/service_spec.rb +180 -432
  1090. data/spec/unit/util/windows/sid_spec.rb +17 -15
  1091. data/spec/unit/util/windows/string_spec.rb +2 -1
  1092. data/spec/unit/util/yaml_spec.rb +162 -28
  1093. data/spec/unit/util_spec.rb +74 -119
  1094. data/spec/unit/version_spec.rb +6 -6
  1095. data/tasks/benchmark.rake +5 -1
  1096. data/tasks/ci.rake +0 -5
  1097. data/tasks/manpages.rake +9 -2
  1098. data/tasks/parser.rake +11 -3
  1099. metadata +156 -473
  1100. data/CODEOWNERS +0 -30
  1101. data/ext/rack/config.ru +0 -44
  1102. data/ext/rack/example-passenger-vhost.conf +0 -57
  1103. data/lib/puppet/application/ca.rb +0 -11
  1104. data/lib/puppet/application/certificate.rb +0 -17
  1105. data/lib/puppet/application/certificate_request.rb +0 -7
  1106. data/lib/puppet/application/certificate_revocation_list.rb +0 -7
  1107. data/lib/puppet/application/master.rb +0 -319
  1108. data/lib/puppet/confine/boolean.rb +0 -45
  1109. data/lib/puppet/external/nagios.rb +0 -46
  1110. data/lib/puppet/external/nagios/base.rb +0 -472
  1111. data/lib/puppet/external/nagios/grammar.ry +0 -248
  1112. data/lib/puppet/external/nagios/makefile +0 -9
  1113. data/lib/puppet/external/nagios/parser.rb +0 -400
  1114. data/lib/puppet/face/ca.rb +0 -266
  1115. data/lib/puppet/face/certificate.rb +0 -167
  1116. data/lib/puppet/face/certificate_request.rb +0 -56
  1117. data/lib/puppet/face/certificate_revocation_list.rb +0 -56
  1118. data/lib/puppet/feature/rack.rb +0 -19
  1119. data/lib/puppet/graph/random_prioritizer.rb +0 -16
  1120. data/lib/puppet/graph/title_hash_prioritizer.rb +0 -16
  1121. data/lib/puppet/indirector/certificate/ca.rb +0 -9
  1122. data/lib/puppet/indirector/certificate/disabled_ca.rb +0 -22
  1123. data/lib/puppet/indirector/certificate_request/ca.rb +0 -22
  1124. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +0 -22
  1125. data/lib/puppet/indirector/certificate_revocation_list/ca.rb +0 -8
  1126. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +0 -22
  1127. data/lib/puppet/indirector/certificate_revocation_list/file.rb +0 -8
  1128. data/lib/puppet/indirector/certificate_revocation_list/rest.rb +0 -22
  1129. data/lib/puppet/indirector/certificate_status.rb +0 -4
  1130. data/lib/puppet/indirector/certificate_status/file.rb +0 -91
  1131. data/lib/puppet/indirector/certificate_status/rest.rb +0 -11
  1132. data/lib/puppet/indirector/key/ca.rb +0 -16
  1133. data/lib/puppet/indirector/key/disabled_ca.rb +0 -22
  1134. data/lib/puppet/indirector/ldap.rb +0 -86
  1135. data/lib/puppet/indirector/node/ldap.rb +0 -275
  1136. data/lib/puppet/indirector/node/write_only_yaml.rb +0 -39
  1137. data/lib/puppet/module_tool/applications/builder.rb +0 -152
  1138. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +0 -18
  1139. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +0 -89
  1140. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +0 -32
  1141. data/lib/puppet/module_tool/skeleton/templates/generator/examples/init.pp.erb +0 -12
  1142. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +0 -48
  1143. data/lib/puppet/module_tool/skeleton/templates/generator/metadata.json.erb +0 -1
  1144. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +0 -6
  1145. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +0 -1
  1146. data/lib/puppet/network/http/api/ca.rb +0 -2
  1147. data/lib/puppet/network/http/api/ca/v1.rb +0 -11
  1148. data/lib/puppet/network/http/rack.rb +0 -33
  1149. data/lib/puppet/network/http/rack/rest.rb +0 -162
  1150. data/lib/puppet/network/http/webrick.rb +0 -124
  1151. data/lib/puppet/network/http/webrick/rest.rb +0 -114
  1152. data/lib/puppet/network/server.rb +0 -39
  1153. data/lib/puppet/provider/augeas/augeas.rb +0 -767
  1154. data/lib/puppet/provider/cisco.rb +0 -9
  1155. data/lib/puppet/provider/computer/computer.rb +0 -20
  1156. data/lib/puppet/provider/cron/crontab.rb +0 -297
  1157. data/lib/puppet/provider/host/parsed.rb +0 -46
  1158. data/lib/puppet/provider/interface/cisco.rb +0 -27
  1159. data/lib/puppet/provider/macauthorization/macauthorization.rb +0 -298
  1160. data/lib/puppet/provider/mailalias/aliases.rb +0 -50
  1161. data/lib/puppet/provider/maillist/mailman.rb +0 -108
  1162. data/lib/puppet/provider/mcx/mcxcontent.rb +0 -173
  1163. data/lib/puppet/provider/mount.rb +0 -76
  1164. data/lib/puppet/provider/mount/parsed.rb +0 -285
  1165. data/lib/puppet/provider/naginator.rb +0 -63
  1166. data/lib/puppet/provider/package/dnfmodule.rb +0 -141
  1167. data/lib/puppet/provider/package_targetable.rb +0 -69
  1168. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +0 -590
  1169. data/lib/puppet/provider/selboolean/getsetsebool.rb +0 -47
  1170. data/lib/puppet/provider/selmodule/semodule.rb +0 -157
  1171. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +0 -105
  1172. data/lib/puppet/provider/sshkey/parsed.rb +0 -50
  1173. data/lib/puppet/provider/vlan/cisco.rb +0 -28
  1174. data/lib/puppet/provider/yumrepo/inifile.rb +0 -315
  1175. data/lib/puppet/provider/zfs/zfs.rb +0 -108
  1176. data/lib/puppet/provider/zone/solaris.rb +0 -364
  1177. data/lib/puppet/provider/zpool/zpool.rb +0 -125
  1178. data/lib/puppet/ssl/certificate_authority.rb +0 -554
  1179. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +0 -45
  1180. data/lib/puppet/ssl/certificate_authority/interface.rb +0 -324
  1181. data/lib/puppet/ssl/certificate_revocation_list.rb +0 -111
  1182. data/lib/puppet/ssl/configuration.rb +0 -61
  1183. data/lib/puppet/ssl/inventory.rb +0 -55
  1184. data/lib/puppet/type/augeas.rb +0 -211
  1185. data/lib/puppet/type/computer.rb +0 -66
  1186. data/lib/puppet/type/cron.rb +0 -480
  1187. data/lib/puppet/type/host.rb +0 -95
  1188. data/lib/puppet/type/interface.rb +0 -121
  1189. data/lib/puppet/type/k5login.rb +0 -165
  1190. data/lib/puppet/type/macauthorization.rb +0 -167
  1191. data/lib/puppet/type/mailalias.rb +0 -46
  1192. data/lib/puppet/type/maillist.rb +0 -62
  1193. data/lib/puppet/type/mcx.rb +0 -98
  1194. data/lib/puppet/type/mount.rb +0 -314
  1195. data/lib/puppet/type/nagios_command.rb +0 -3
  1196. data/lib/puppet/type/nagios_contact.rb +0 -3
  1197. data/lib/puppet/type/nagios_contactgroup.rb +0 -3
  1198. data/lib/puppet/type/nagios_host.rb +0 -3
  1199. data/lib/puppet/type/nagios_hostdependency.rb +0 -3
  1200. data/lib/puppet/type/nagios_hostescalation.rb +0 -3
  1201. data/lib/puppet/type/nagios_hostextinfo.rb +0 -3
  1202. data/lib/puppet/type/nagios_hostgroup.rb +0 -3
  1203. data/lib/puppet/type/nagios_service.rb +0 -3
  1204. data/lib/puppet/type/nagios_servicedependency.rb +0 -3
  1205. data/lib/puppet/type/nagios_serviceescalation.rb +0 -3
  1206. data/lib/puppet/type/nagios_serviceextinfo.rb +0 -3
  1207. data/lib/puppet/type/nagios_servicegroup.rb +0 -3
  1208. data/lib/puppet/type/nagios_timeperiod.rb +0 -3
  1209. data/lib/puppet/type/router.rb +0 -17
  1210. data/lib/puppet/type/scheduled_task.rb +0 -183
  1211. data/lib/puppet/type/selboolean.rb +0 -40
  1212. data/lib/puppet/type/selmodule.rb +0 -58
  1213. data/lib/puppet/type/ssh_authorized_key.rb +0 -143
  1214. data/lib/puppet/type/sshkey.rb +0 -83
  1215. data/lib/puppet/type/vlan.rb +0 -26
  1216. data/lib/puppet/type/yumrepo.rb +0 -430
  1217. data/lib/puppet/type/zfs.rb +0 -154
  1218. data/lib/puppet/type/zone.rb +0 -382
  1219. data/lib/puppet/type/zpool.rb +0 -91
  1220. data/lib/puppet/util/methodhelper.rb +0 -32
  1221. data/lib/puppet/util/nagios_maker.rb +0 -85
  1222. data/lib/puppet/util/network_device/cisco.rb +0 -4
  1223. data/lib/puppet/util/network_device/cisco/device.rb +0 -285
  1224. data/lib/puppet/util/network_device/cisco/facts.rb +0 -72
  1225. data/lib/puppet/util/network_device/cisco/interface.rb +0 -94
  1226. data/lib/puppet/util/network_device/ipcalc.rb +0 -68
  1227. data/lib/puppet/util/network_device/transport/ssh.rb +0 -126
  1228. data/lib/puppet/util/network_device/transport/telnet.rb +0 -47
  1229. data/lib/puppet/util/windows/taskscheduler.rb +0 -1267
  1230. data/lib/puppet/vendor/load_semantic.rb +0 -1
  1231. data/lib/puppet/vendor/load_semantic_puppet.rb +0 -1
  1232. data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -5
  1233. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +0 -11
  1234. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency.rb +0 -181
  1235. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph.rb +0 -60
  1236. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph_node.rb +0 -117
  1237. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +0 -58
  1238. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/source.rb +0 -25
  1239. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/unsatisfiable_graph.rb +0 -31
  1240. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +0 -3
  1241. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +0 -203
  1242. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +0 -758
  1243. data/lib/puppet/vendor/semantic_puppet/locales/config.yaml +0 -21
  1244. data/man/man8/puppet-ca.8 +0 -196
  1245. data/man/man8/puppet-cert.8 +0 -118
  1246. data/man/man8/puppet-certificate.8 +0 -240
  1247. data/man/man8/puppet-certificate_request.8 +0 -161
  1248. data/man/man8/puppet-certificate_revocation_list.8 +0 -139
  1249. data/man/man8/puppet-master.8 +0 -85
  1250. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +0 -19
  1251. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +0 -18
  1252. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +0 -15
  1253. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +0 -4
  1254. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +0 -13
  1255. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +0 -15
  1256. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +0 -6
  1257. data/spec/fixtures/integration/provider/cron/crontab/purged +0 -8
  1258. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +0 -12
  1259. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +0 -14
  1260. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +0 -15
  1261. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +0 -32
  1262. data/spec/fixtures/integration/provider/sshkey/sample +0 -21
  1263. data/spec/fixtures/unit/provider/augeas/augeas/augeas/lenses/test.aug +0 -13
  1264. data/spec/fixtures/unit/provider/augeas/augeas/etc/fstab +0 -10
  1265. data/spec/fixtures/unit/provider/augeas/augeas/etc/hosts +0 -6
  1266. data/spec/fixtures/unit/provider/augeas/augeas/etc/test +0 -3
  1267. data/spec/fixtures/unit/provider/augeas/augeas/test.aug +0 -13
  1268. data/spec/fixtures/unit/provider/host/parsed/valid_hosts +0 -19
  1269. data/spec/fixtures/unit/provider/mount/mount-output.aix.txt +0 -7
  1270. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +0 -152
  1271. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +0 -11
  1272. data/spec/fixtures/unit/provider/mount/parsed/darwin.mount +0 -6
  1273. data/spec/fixtures/unit/provider/mount/parsed/freebsd.fstab +0 -9
  1274. data/spec/fixtures/unit/provider/mount/parsed/freebsd.mount +0 -4
  1275. data/spec/fixtures/unit/provider/mount/parsed/hpux.mount +0 -17
  1276. data/spec/fixtures/unit/provider/mount/parsed/linux.fstab +0 -12
  1277. data/spec/fixtures/unit/provider/mount/parsed/linux.mount +0 -6
  1278. data/spec/fixtures/unit/provider/mount/parsed/netbsd.fstab +0 -10
  1279. data/spec/fixtures/unit/provider/mount/parsed/netbsd.mount +0 -9
  1280. data/spec/fixtures/unit/provider/mount/parsed/openbsd.fstab +0 -5
  1281. data/spec/fixtures/unit/provider/mount/parsed/openbsd.mount +0 -5
  1282. data/spec/fixtures/unit/provider/mount/parsed/solaris.fstab +0 -11
  1283. data/spec/fixtures/unit/provider/mount/parsed/solaris.mount +0 -6
  1284. data/spec/fixtures/unit/provider/naginator/define_empty_param +0 -6
  1285. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +0 -19
  1286. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +0 -9
  1287. data/spec/fixtures/unit/provider/service/smf/svcs_fmri.out +0 -6
  1288. data/spec/fixtures/unit/provider/service/smf/svcs_multiple_fmris.out +0 -13
  1289. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys +0 -7
  1290. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys1 +0 -3
  1291. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys2 +0 -1
  1292. data/spec/fixtures/unit/provider/sshkey/parsed/sample +0 -21
  1293. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +0 -8
  1294. data/spec/fixtures/unit/provider/zfs/zfs/zfs-list.out +0 -2
  1295. data/spec/fixtures/unit/provider/zpool/zpool/zpool-list.out +0 -2
  1296. data/spec/integration/faces/ca_spec.rb +0 -353
  1297. data/spec/integration/indirector/node/ldap_spec.rb +0 -13
  1298. data/spec/integration/network/http_pool_spec.rb +0 -120
  1299. data/spec/integration/provider/cron/crontab_spec.rb +0 -240
  1300. data/spec/integration/provider/file/windows_spec.rb +0 -162
  1301. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -9
  1302. data/spec/integration/provider/mount_spec.rb +0 -163
  1303. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -217
  1304. data/spec/integration/provider/sshkey_spec.rb +0 -153
  1305. data/spec/integration/provider/yumrepo_spec.rb +0 -126
  1306. data/spec/integration/ssl/autosign_spec.rb +0 -145
  1307. data/spec/integration/ssl/certificate_authority_spec.rb +0 -161
  1308. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -33
  1309. data/spec/integration/transaction_spec.rb +0 -553
  1310. data/spec/integration/type/nagios_spec.rb +0 -69
  1311. data/spec/integration/type/notify_spec.rb +0 -46
  1312. data/spec/integration/type/user_spec.rb +0 -63
  1313. data/spec/lib/puppet_spec/https.rb +0 -166
  1314. data/spec/unit/application/cert_spec.rb +0 -272
  1315. data/spec/unit/application/certificate_spec.rb +0 -21
  1316. data/spec/unit/application/master_spec.rb +0 -414
  1317. data/spec/unit/face/ca_spec.rb +0 -9
  1318. data/spec/unit/face/certificate_request_spec.rb +0 -9
  1319. data/spec/unit/face/certificate_revocation_list_spec.rb +0 -9
  1320. data/spec/unit/face/certificate_spec.rb +0 -228
  1321. data/spec/unit/face/module/build_spec.rb +0 -69
  1322. data/spec/unit/graph/title_hash_prioritizer_spec.rb +0 -50
  1323. data/spec/unit/indirector/certificate/ca_spec.rb +0 -21
  1324. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -32
  1325. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -56
  1326. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -32
  1327. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -15
  1328. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -32
  1329. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -16
  1330. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -33
  1331. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -190
  1332. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -17
  1333. data/spec/unit/indirector/code_spec.rb +0 -30
  1334. data/spec/unit/indirector/key/ca_spec.rb +0 -22
  1335. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -32
  1336. data/spec/unit/indirector/ldap_spec.rb +0 -151
  1337. data/spec/unit/indirector/node/ldap_spec.rb +0 -463
  1338. data/spec/unit/indirector/node/write_only_yaml_spec.rb +0 -11
  1339. data/spec/unit/module_tool/applications/builder_spec.rb +0 -439
  1340. data/spec/unit/network/http/api/ca/v1_spec.rb +0 -26
  1341. data/spec/unit/network/http/rack/rest_spec.rb +0 -322
  1342. data/spec/unit/network/http/rack_spec.rb +0 -42
  1343. data/spec/unit/network/http/webrick/rest_spec.rb +0 -230
  1344. data/spec/unit/network/http/webrick_spec.rb +0 -277
  1345. data/spec/unit/network/server_spec.rb +0 -94
  1346. data/spec/unit/provider/augeas/augeas_spec.rb +0 -1096
  1347. data/spec/unit/provider/cisco_spec.rb +0 -14
  1348. data/spec/unit/provider/cron/crontab_spec.rb +0 -206
  1349. data/spec/unit/provider/cron/parsed_spec.rb +0 -355
  1350. data/spec/unit/provider/host/parsed_spec.rb +0 -219
  1351. data/spec/unit/provider/interface/cisco_spec.rb +0 -53
  1352. data/spec/unit/provider/macauthorization_spec.rb +0 -134
  1353. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -190
  1354. data/spec/unit/provider/mount/parsed_spec.rb +0 -318
  1355. data/spec/unit/provider/mount_spec.rb +0 -169
  1356. data/spec/unit/provider/naginator_spec.rb +0 -78
  1357. data/spec/unit/provider/network_device_spec.rb +0 -152
  1358. data/spec/unit/provider/package/dnfmodule_spec.rb +0 -247
  1359. data/spec/unit/provider/package_targetable_spec.rb +0 -60
  1360. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +0 -2050
  1361. data/spec/unit/provider/selboolean_spec.rb +0 -34
  1362. data/spec/unit/provider/selmodule-example.pp +0 -0
  1363. data/spec/unit/provider/selmodule_spec.rb +0 -154
  1364. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -259
  1365. data/spec/unit/provider/sshkey/parsed_spec.rb +0 -92
  1366. data/spec/unit/provider/vlan/cisco_spec.rb +0 -53
  1367. data/spec/unit/provider/yumrepo/inifile_spec.rb +0 -413
  1368. data/spec/unit/provider/zfs/zfs_spec.rb +0 -171
  1369. data/spec/unit/provider/zone/solaris_spec.rb +0 -261
  1370. data/spec/unit/provider/zpool/zpool_spec.rb +0 -250
  1371. data/spec/unit/settings/server_list_setting_spec.rb +0 -21
  1372. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +0 -29
  1373. data/spec/unit/ssl/certificate_authority/interface_spec.rb +0 -563
  1374. data/spec/unit/ssl/certificate_authority_spec.rb +0 -1165
  1375. data/spec/unit/ssl/certificate_revocation_list_spec.rb +0 -196
  1376. data/spec/unit/ssl/configuration_spec.rb +0 -138
  1377. data/spec/unit/ssl/inventory_spec.rb +0 -155
  1378. data/spec/unit/test/test_helper_spec.rb +0 -17
  1379. data/spec/unit/type/augeas_spec.rb +0 -120
  1380. data/spec/unit/type/computer_spec.rb +0 -77
  1381. data/spec/unit/type/cron_spec.rb +0 -539
  1382. data/spec/unit/type/host_spec.rb +0 -680
  1383. data/spec/unit/type/interface_spec.rb +0 -128
  1384. data/spec/unit/type/k5login_spec.rb +0 -204
  1385. data/spec/unit/type/macauthorization_spec.rb +0 -111
  1386. data/spec/unit/type/mailalias_spec.rb +0 -48
  1387. data/spec/unit/type/maillist_spec.rb +0 -38
  1388. data/spec/unit/type/mcx_spec.rb +0 -75
  1389. data/spec/unit/type/mount_spec.rb +0 -622
  1390. data/spec/unit/type/nagios_spec.rb +0 -312
  1391. data/spec/unit/type/scheduled_task_spec.rb +0 -117
  1392. data/spec/unit/type/selboolean_spec.rb +0 -41
  1393. data/spec/unit/type/selmodule_spec.rb +0 -16
  1394. data/spec/unit/type/ssh_authorized_key_spec.rb +0 -228
  1395. data/spec/unit/type/sshkey_spec.rb +0 -75
  1396. data/spec/unit/type/vlan_spec.rb +0 -42
  1397. data/spec/unit/type/yumrepo_spec.rb +0 -476
  1398. data/spec/unit/type/zfs_spec.rb +0 -45
  1399. data/spec/unit/type/zone_spec.rb +0 -182
  1400. data/spec/unit/type/zpool_spec.rb +0 -108
  1401. data/spec/unit/util/nagios_maker_spec.rb +0 -121
  1402. data/spec/unit/util/network_device/cisco/device_spec.rb +0 -491
  1403. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -63
  1404. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -97
  1405. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -61
  1406. data/spec/unit/util/network_device/transport/ssh_spec.rb +0 -252
  1407. data/spec/unit/util/network_device/transport/telnet_spec.rb +0 -90
@@ -1,60 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet'
3
- require 'puppet/provider/package_targetable'
4
- require 'puppet/provider/package/gem'
5
-
6
- describe Puppet::Provider::Package::Targetable do
7
- let(:provider) { Puppet::Type.type(:package).provider(:gem) }
8
- let(:command) { '/opt/bin/gem' }
9
-
10
- describe "when prefetching" do
11
- context "with a package without a command attribute" do
12
- let(:resource) { Puppet::Type.type(:package).new(:name => 'noo', :provider => 'gem', :ensure => :present) }
13
- let(:catalog) { Puppet::Resource::Catalog.new }
14
- let(:instance) { provider.new(resource) }
15
- let(:packages) { { 'noo' => resource } }
16
-
17
- it "should pass a command to the instances method of the provider" do
18
- catalog.add_resource(resource)
19
- expect(provider).to receive(:instances).with(nil).and_return([instance])
20
- expect(provider.prefetch(packages)).to eq([nil]) # prefetch arbitrarily returns the array of commands for a provider in the catalog
21
- end
22
- end
23
-
24
- context "with a package with a command attribute" do
25
- let(:resource) { Puppet::Type.type(:package).new(:name => 'noo', :provider => 'gem', :ensure => :present) }
26
- let(:resource_targeted) { Puppet::Type.type(:package).new(:name => 'yes', :provider => 'gem', :command => command, :ensure => :present) }
27
- let(:catalog) { Puppet::Resource::Catalog.new }
28
- let(:instance) { provider.new(resource) }
29
- let(:instance_targeted) { provider.new(resource_targeted) }
30
- let(:packages) { { 'noo' => resource, 'yes' => resource_targeted } }
31
-
32
- it "should pass the command to the instances method of the provider" do
33
- catalog.add_resource(resource)
34
- catalog.add_resource(resource_targeted)
35
- expect(provider).to receive(:instances).with(nil).and_return([instance])
36
- expect(provider).to receive(:instances).with(command).and_return([instance_targeted]).once
37
- expect(provider.prefetch(packages)).to eq([nil, command]) # prefetch arbitrarily returns the array of commands for a provider in the catalog
38
- end
39
- end
40
- end
41
-
42
- describe "when validating a command" do
43
- context "with no command" do
44
- it "report not functional" do
45
- expect { provider.validate_command(nil) }.to raise_error(Puppet::Error, "Provider gem package command is not functional on this host")
46
- end
47
- end
48
- context "with a missing command" do
49
- it "report does not exist" do
50
- expect { provider.validate_command(command) }.to raise_error(Puppet::Error, "Provider gem package command '#{command}' does not exist on this host")
51
- end
52
- end
53
- context "with an existing command" do
54
- it "validates" do
55
- allow(File).to receive(:file?).with(command).and_return(true)
56
- expect { provider.validate_command(command) }.not_to raise_error
57
- end
58
- end
59
- end
60
- end
@@ -1,2050 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'puppet/util/windows/taskscheduler' if Puppet.features.microsoft_windows?
4
-
5
- shared_examples_for "a trigger that handles start_date and start_time" do
6
- let(:trigger) do
7
- described_class.new(
8
- :name => 'Shared Test Task',
9
- :command => 'C:\Windows\System32\notepad.exe'
10
- ).translate_hash_to_trigger(trigger_hash)
11
- end
12
-
13
- before :each do
14
- allow_any_instance_of(Win32::TaskScheduler).to receive(:save)
15
- end
16
-
17
- describe 'the given start_date' do
18
- before :each do
19
- trigger_hash['start_time'] = '00:00'
20
- end
21
-
22
- def date_component
23
- {
24
- 'start_year' => trigger['start_year'],
25
- 'start_month' => trigger['start_month'],
26
- 'start_day' => trigger['start_day']
27
- }
28
- end
29
-
30
- it 'should be able to be specified in ISO 8601 calendar date format' do
31
- trigger_hash['start_date'] = '2011-12-31'
32
-
33
- expect(date_component).to eq({
34
- 'start_year' => 2011,
35
- 'start_month' => 12,
36
- 'start_day' => 31
37
- })
38
- end
39
-
40
- it 'should fail if before 1753-01-01' do
41
- trigger_hash['start_date'] = '1752-12-31'
42
-
43
- expect { date_component }.to raise_error(
44
- Puppet::Error,
45
- 'start_date must be on or after 1753-01-01'
46
- )
47
- end
48
-
49
- it 'should succeed if on 1753-01-01' do
50
- trigger_hash['start_date'] = '1753-01-01'
51
-
52
- expect(date_component).to eq({
53
- 'start_year' => 1753,
54
- 'start_month' => 1,
55
- 'start_day' => 1
56
- })
57
- end
58
-
59
- it 'should succeed if after 1753-01-01' do
60
- trigger_hash['start_date'] = '1753-01-02'
61
-
62
- expect(date_component).to eq({
63
- 'start_year' => 1753,
64
- 'start_month' => 1,
65
- 'start_day' => 2
66
- })
67
- end
68
- end
69
-
70
- describe 'the given start_time' do
71
- before :each do
72
- trigger_hash['start_date'] = '2011-12-31'
73
- end
74
-
75
- def time_component
76
- {
77
- 'start_hour' => trigger['start_hour'],
78
- 'start_minute' => trigger['start_minute']
79
- }
80
- end
81
-
82
- it 'should be able to be specified as a 24-hour "hh:mm"' do
83
- trigger_hash['start_time'] = '17:13'
84
-
85
- expect(time_component).to eq({
86
- 'start_hour' => 17,
87
- 'start_minute' => 13
88
- })
89
- end
90
-
91
- it 'should be able to be specified as a 12-hour "hh:mm am"' do
92
- trigger_hash['start_time'] = '3:13 am'
93
-
94
- expect(time_component).to eq({
95
- 'start_hour' => 3,
96
- 'start_minute' => 13
97
- })
98
- end
99
-
100
- it 'should be able to be specified as a 12-hour "hh:mm pm"' do
101
- trigger_hash['start_time'] = '3:13 pm'
102
-
103
- expect(time_component).to eq({
104
- 'start_hour' => 15,
105
- 'start_minute' => 13
106
- })
107
- end
108
- end
109
- end
110
-
111
- describe Puppet::Type.type(:scheduled_task).provider(:win32_taskscheduler), :if => Puppet.features.microsoft_windows? do
112
- before :each do
113
- allow(Puppet::Type.type(:scheduled_task)).to receive(:defaultprovider).and_return(described_class)
114
- end
115
-
116
- describe 'when retrieving' do
117
- before :each do
118
- @mock_task = double()
119
- allow_any_instance_of(described_class).to receive(:task).and_return(@mock_task)
120
-
121
- allow(Win32::TaskScheduler).to receive(:new).and_return(@mock_task)
122
- end
123
-
124
- let(:resource) { Puppet::Type.type(:scheduled_task).new(:name => 'Test Task', :command => 'C:\Windows\System32\notepad.exe') }
125
-
126
- describe 'the triggers for a task' do
127
- describe 'with only one trigger' do
128
- before :each do
129
- expect(@mock_task).to receive(:trigger_count).and_return(1)
130
- end
131
-
132
- it 'should handle a single daily trigger' do
133
- expect(@mock_task).to receive(:trigger).with(0).and_return({
134
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_DAILY,
135
- 'start_year' => 2011,
136
- 'start_month' => 9,
137
- 'start_day' => 12,
138
- 'start_hour' => 13,
139
- 'start_minute' => 20,
140
- 'flags' => 0,
141
- 'type' => { 'days_interval' => 2 },
142
- })
143
-
144
- expect(resource.provider.trigger).to eq([{
145
- 'start_date' => '2011-9-12',
146
- 'start_time' => '13:20',
147
- 'schedule' => 'daily',
148
- 'every' => '2',
149
- 'minutes_interval' => 0,
150
- 'minutes_duration' => 0,
151
- 'enabled' => true,
152
- 'index' => 0,
153
- }])
154
- end
155
-
156
- it 'should handle a single daily with repeat trigger' do
157
- expect(@mock_task).to receive(:trigger).with(0).and_return({
158
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_DAILY,
159
- 'start_year' => 2011,
160
- 'start_month' => 9,
161
- 'start_day' => 12,
162
- 'start_hour' => 13,
163
- 'start_minute' => 20,
164
- 'minutes_interval' => 60,
165
- 'minutes_duration' => 180,
166
- 'flags' => 0,
167
- 'type' => { 'days_interval' => 2 },
168
- })
169
-
170
- expect(resource.provider.trigger).to eq([{
171
- 'start_date' => '2011-9-12',
172
- 'start_time' => '13:20',
173
- 'schedule' => 'daily',
174
- 'every' => '2',
175
- 'minutes_interval' => 60,
176
- 'minutes_duration' => 180,
177
- 'enabled' => true,
178
- 'index' => 0,
179
- }])
180
- end
181
-
182
- it 'should handle a single weekly trigger' do
183
- scheduled_days_of_week = Win32::TaskScheduler::MONDAY |
184
- Win32::TaskScheduler::WEDNESDAY |
185
- Win32::TaskScheduler::FRIDAY |
186
- Win32::TaskScheduler::SUNDAY
187
- expect(@mock_task).to receive(:trigger).with(0).and_return({
188
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_WEEKLY,
189
- 'start_year' => 2011,
190
- 'start_month' => 9,
191
- 'start_day' => 12,
192
- 'start_hour' => 13,
193
- 'start_minute' => 20,
194
- 'flags' => 0,
195
- 'type' => {
196
- 'weeks_interval' => 2,
197
- 'days_of_week' => scheduled_days_of_week
198
- }
199
- })
200
-
201
- expect(resource.provider.trigger).to eq([{
202
- 'start_date' => '2011-9-12',
203
- 'start_time' => '13:20',
204
- 'schedule' => 'weekly',
205
- 'every' => '2',
206
- 'day_of_week' => ['sun', 'mon', 'wed', 'fri'],
207
- 'minutes_interval' => 0,
208
- 'minutes_duration' => 0,
209
- 'enabled' => true,
210
- 'index' => 0,
211
- }])
212
- end
213
-
214
- it 'should handle a single monthly date-based trigger' do
215
- scheduled_months = Win32::TaskScheduler::JANUARY |
216
- Win32::TaskScheduler::FEBRUARY |
217
- Win32::TaskScheduler::AUGUST |
218
- Win32::TaskScheduler::SEPTEMBER |
219
- Win32::TaskScheduler::DECEMBER
220
- # 1 3 5 15 'last'
221
- scheduled_days = 1 | 1 << 2 | 1 << 4 | 1 << 14 | 1 << 31
222
- expect(@mock_task).to receive(:trigger).with(0).and_return({
223
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_MONTHLYDATE,
224
- 'start_year' => 2011,
225
- 'start_month' => 9,
226
- 'start_day' => 12,
227
- 'start_hour' => 13,
228
- 'start_minute' => 20,
229
- 'flags' => 0,
230
- 'type' => {
231
- 'months' => scheduled_months,
232
- 'days' => scheduled_days
233
- }
234
- })
235
-
236
- expect(resource.provider.trigger).to eq([{
237
- 'start_date' => '2011-9-12',
238
- 'start_time' => '13:20',
239
- 'schedule' => 'monthly',
240
- 'months' => [1, 2, 8, 9, 12],
241
- 'on' => [1, 3, 5, 15, 'last'],
242
- 'minutes_interval' => 0,
243
- 'minutes_duration' => 0,
244
- 'enabled' => true,
245
- 'index' => 0,
246
- }])
247
- end
248
-
249
- it 'should handle a single monthly day-of-week-based trigger' do
250
- scheduled_months = Win32::TaskScheduler::JANUARY |
251
- Win32::TaskScheduler::FEBRUARY |
252
- Win32::TaskScheduler::AUGUST |
253
- Win32::TaskScheduler::SEPTEMBER |
254
- Win32::TaskScheduler::DECEMBER
255
- scheduled_days_of_week = Win32::TaskScheduler::MONDAY |
256
- Win32::TaskScheduler::WEDNESDAY |
257
- Win32::TaskScheduler::FRIDAY |
258
- Win32::TaskScheduler::SUNDAY
259
- expect(@mock_task).to receive(:trigger).with(0).and_return({
260
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_MONTHLYDOW,
261
- 'start_year' => 2011,
262
- 'start_month' => 9,
263
- 'start_day' => 12,
264
- 'start_hour' => 13,
265
- 'start_minute' => 20,
266
- 'flags' => 0,
267
- 'type' => {
268
- 'months' => scheduled_months,
269
- 'weeks' => Win32::TaskScheduler::FIRST_WEEK,
270
- 'days_of_week' => scheduled_days_of_week
271
- }
272
- })
273
-
274
- expect(resource.provider.trigger).to eq([{
275
- 'start_date' => '2011-9-12',
276
- 'start_time' => '13:20',
277
- 'schedule' => 'monthly',
278
- 'months' => [1, 2, 8, 9, 12],
279
- 'which_occurrence' => 'first',
280
- 'day_of_week' => ['sun', 'mon', 'wed', 'fri'],
281
- 'minutes_interval' => 0,
282
- 'minutes_duration' => 0,
283
- 'enabled' => true,
284
- 'index' => 0,
285
- }])
286
- end
287
-
288
- it 'should handle a single one-time trigger' do
289
- expect(@mock_task).to receive(:trigger).with(0).and_return({
290
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
291
- 'start_year' => 2011,
292
- 'start_month' => 9,
293
- 'start_day' => 12,
294
- 'start_hour' => 13,
295
- 'start_minute' => 20,
296
- 'flags' => 0,
297
- })
298
-
299
- expect(resource.provider.trigger).to eq([{
300
- 'start_date' => '2011-9-12',
301
- 'start_time' => '13:20',
302
- 'schedule' => 'once',
303
- 'minutes_interval' => 0,
304
- 'minutes_duration' => 0,
305
- 'enabled' => true,
306
- 'index' => 0,
307
- }])
308
- end
309
- end
310
-
311
- it 'should handle multiple triggers' do
312
- expect(@mock_task).to receive(:trigger_count).and_return(3)
313
- expect(@mock_task).to receive(:trigger).with(0).and_return({
314
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
315
- 'start_year' => 2011,
316
- 'start_month' => 10,
317
- 'start_day' => 13,
318
- 'start_hour' => 14,
319
- 'start_minute' => 21,
320
- 'flags' => 0,
321
- })
322
- expect(@mock_task).to receive(:trigger).with(1).and_return({
323
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
324
- 'start_year' => 2012,
325
- 'start_month' => 11,
326
- 'start_day' => 14,
327
- 'start_hour' => 15,
328
- 'start_minute' => 22,
329
- 'flags' => 0,
330
- })
331
- expect(@mock_task).to receive(:trigger).with(2).and_return({
332
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
333
- 'start_year' => 2013,
334
- 'start_month' => 12,
335
- 'start_day' => 15,
336
- 'start_hour' => 16,
337
- 'start_minute' => 23,
338
- 'flags' => 0,
339
- })
340
-
341
- expect(resource.provider.trigger).to match_array([
342
- {
343
- 'start_date' => '2011-10-13',
344
- 'start_time' => '14:21',
345
- 'schedule' => 'once',
346
- 'minutes_interval' => 0,
347
- 'minutes_duration' => 0,
348
- 'enabled' => true,
349
- 'index' => 0,
350
- },
351
- {
352
- 'start_date' => '2012-11-14',
353
- 'start_time' => '15:22',
354
- 'schedule' => 'once',
355
- 'minutes_interval' => 0,
356
- 'minutes_duration' => 0,
357
- 'enabled' => true,
358
- 'index' => 1,
359
- },
360
- {
361
- 'start_date' => '2013-12-15',
362
- 'start_time' => '16:23',
363
- 'schedule' => 'once',
364
- 'minutes_interval' => 0,
365
- 'minutes_duration' => 0,
366
- 'enabled' => true,
367
- 'index' => 2,
368
- }
369
- ])
370
- end
371
-
372
- it 'should handle multiple triggers with repeat triggers' do
373
- expect(@mock_task).to receive(:trigger_count).and_return(3)
374
- expect(@mock_task).to receive(:trigger).with(0).and_return({
375
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
376
- 'start_year' => 2011,
377
- 'start_month' => 10,
378
- 'start_day' => 13,
379
- 'start_hour' => 14,
380
- 'start_minute' => 21,
381
- 'minutes_interval' => 15,
382
- 'minutes_duration' => 60,
383
- 'flags' => 0,
384
- })
385
- expect(@mock_task).to receive(:trigger).with(1).and_return({
386
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
387
- 'start_year' => 2012,
388
- 'start_month' => 11,
389
- 'start_day' => 14,
390
- 'start_hour' => 15,
391
- 'start_minute' => 22,
392
- 'minutes_interval' => 30,
393
- 'minutes_duration' => 120,
394
- 'flags' => 0,
395
- })
396
- expect(@mock_task).to receive(:trigger).with(2).and_return({
397
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
398
- 'start_year' => 2013,
399
- 'start_month' => 12,
400
- 'start_day' => 15,
401
- 'start_hour' => 16,
402
- 'start_minute' => 23,
403
- 'minutes_interval' => 60,
404
- 'minutes_duration' => 240,
405
- 'flags' => 0,
406
- })
407
-
408
- expect(resource.provider.trigger).to match_array([
409
- {
410
- 'start_date' => '2011-10-13',
411
- 'start_time' => '14:21',
412
- 'schedule' => 'once',
413
- 'minutes_interval' => 15,
414
- 'minutes_duration' => 60,
415
- 'enabled' => true,
416
- 'index' => 0,
417
- },
418
- {
419
- 'start_date' => '2012-11-14',
420
- 'start_time' => '15:22',
421
- 'schedule' => 'once',
422
- 'minutes_interval' => 30,
423
- 'minutes_duration' => 120,
424
- 'enabled' => true,
425
- 'index' => 1,
426
- },
427
- {
428
- 'start_date' => '2013-12-15',
429
- 'start_time' => '16:23',
430
- 'schedule' => 'once',
431
- 'minutes_interval' => 60,
432
- 'minutes_duration' => 240,
433
- 'enabled' => true,
434
- 'index' => 2,
435
- }
436
- ])
437
- end
438
-
439
- it 'should skip triggers Win32::TaskScheduler cannot handle' do
440
- expect(@mock_task).to receive(:trigger_count).and_return(3)
441
- expect(@mock_task).to receive(:trigger).with(0).and_return({
442
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
443
- 'start_year' => 2011,
444
- 'start_month' => 10,
445
- 'start_day' => 13,
446
- 'start_hour' => 14,
447
- 'start_minute' => 21,
448
- 'flags' => 0,
449
- })
450
- expect(@mock_task).to receive(:trigger).with(1).and_raise(
451
- Win32::TaskScheduler::Error.new('Unhandled trigger type!')
452
- )
453
- expect(@mock_task).to receive(:trigger).with(2).and_return({
454
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
455
- 'start_year' => 2013,
456
- 'start_month' => 12,
457
- 'start_day' => 15,
458
- 'start_hour' => 16,
459
- 'start_minute' => 23,
460
- 'flags' => 0,
461
- })
462
-
463
- expect(resource.provider.trigger).to match_array([
464
- {
465
- 'start_date' => '2011-10-13',
466
- 'start_time' => '14:21',
467
- 'schedule' => 'once',
468
- 'minutes_interval' => 0,
469
- 'minutes_duration' => 0,
470
- 'enabled' => true,
471
- 'index' => 0,
472
- },
473
- {
474
- 'start_date' => '2013-12-15',
475
- 'start_time' => '16:23',
476
- 'schedule' => 'once',
477
- 'minutes_interval' => 0,
478
- 'minutes_duration' => 0,
479
- 'enabled' => true,
480
- 'index' => 2,
481
- }
482
- ])
483
- end
484
-
485
- it 'should skip trigger types Puppet does not handle' do
486
- expect(@mock_task).to receive(:trigger_count).and_return(3)
487
- expect(@mock_task).to receive(:trigger).with(0).and_return({
488
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
489
- 'start_year' => 2011,
490
- 'start_month' => 10,
491
- 'start_day' => 13,
492
- 'start_hour' => 14,
493
- 'start_minute' => 21,
494
- 'flags' => 0,
495
- })
496
- expect(@mock_task).to receive(:trigger).with(1).and_return({
497
- 'trigger_type' => Win32::TaskScheduler::TASK_EVENT_TRIGGER_AT_LOGON,
498
- })
499
- expect(@mock_task).to receive(:trigger).with(2).and_return({
500
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
501
- 'start_year' => 2013,
502
- 'start_month' => 12,
503
- 'start_day' => 15,
504
- 'start_hour' => 16,
505
- 'start_minute' => 23,
506
- 'flags' => 0,
507
- })
508
-
509
- expect(resource.provider.trigger).to match_array([
510
- {
511
- 'start_date' => '2011-10-13',
512
- 'start_time' => '14:21',
513
- 'schedule' => 'once',
514
- 'minutes_interval' => 0,
515
- 'minutes_duration' => 0,
516
- 'enabled' => true,
517
- 'index' => 0,
518
- },
519
- {
520
- 'start_date' => '2013-12-15',
521
- 'start_time' => '16:23',
522
- 'schedule' => 'once',
523
- 'minutes_interval' => 0,
524
- 'minutes_duration' => 0,
525
- 'enabled' => true,
526
- 'index' => 2,
527
- }
528
- ])
529
- end
530
- end
531
-
532
- it 'should get the working directory from the working_directory on the task' do
533
- expect(@mock_task).to receive(:working_directory).and_return('C:\Windows\System32')
534
-
535
- expect(resource.provider.working_dir).to eq('C:\Windows\System32')
536
- end
537
-
538
- it 'should get the command from the application_name on the task' do
539
- expect(@mock_task).to receive(:application_name).and_return('C:\Windows\System32\notepad.exe')
540
-
541
- expect(resource.provider.command).to eq('C:\Windows\System32\notepad.exe')
542
- end
543
-
544
- it 'should get the command arguments from the parameters on the task' do
545
- expect(@mock_task).to receive(:parameters).and_return('these are my arguments')
546
-
547
- expect(resource.provider.arguments).to eq('these are my arguments')
548
- end
549
-
550
- it 'should get the user from the account_information on the task' do
551
- expect(@mock_task).to receive(:account_information).and_return('this is my user')
552
-
553
- expect(resource.provider.user).to eq('this is my user')
554
- end
555
-
556
- describe 'whether the task is enabled' do
557
- it 'should report tasks with the disabled bit set as disabled' do
558
- allow(@mock_task).to receive(:flags).and_return(Win32::TaskScheduler::DISABLED)
559
-
560
- expect(resource.provider.enabled).to eq(:false)
561
- end
562
-
563
- it 'should report tasks without the disabled bit set as enabled' do
564
- allow(@mock_task).to receive(:flags).and_return(~Win32::TaskScheduler::DISABLED)
565
-
566
- expect(resource.provider.enabled).to eq(:true)
567
- end
568
-
569
- it 'should not consider triggers for determining if the task is enabled' do
570
- allow(@mock_task).to receive(:flags).and_return(~Win32::TaskScheduler::DISABLED)
571
- allow(@mock_task).to receive(:trigger_count).and_return(1)
572
- allow(@mock_task).to receive(:trigger).with(0).and_return({
573
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
574
- 'start_year' => 2011,
575
- 'start_month' => 10,
576
- 'start_day' => 13,
577
- 'start_hour' => 14,
578
- 'start_minute' => 21,
579
- 'flags' => Win32::TaskScheduler::TASK_TRIGGER_FLAG_DISABLED,
580
- })
581
-
582
- expect(resource.provider.enabled).to eq(:true)
583
- end
584
- end
585
- end
586
-
587
- describe '#exists?' do
588
- before :each do
589
- @mock_task = instance_double(Win32::TaskScheduler)
590
- allow_any_instance_of(described_class).to receive(:task).and_return(@mock_task)
591
-
592
- allow(Win32::TaskScheduler).to receive(:new).and_return(@mock_task)
593
- end
594
- let(:resource) { Puppet::Type.type(:scheduled_task).new(:name => 'Test Task', :command => 'C:\Windows\System32\notepad.exe') }
595
-
596
- it "should delegate to Win32::TaskScheduler using the resource's name" do
597
- expect(@mock_task).to receive(:exists?).with('Test Task').and_return(true)
598
-
599
- expect(resource.provider.exists?).to eq(true)
600
- end
601
- end
602
-
603
- describe '#clear_task' do
604
- before :each do
605
- @mock_task = instance_double(Win32::TaskScheduler)
606
- @new_mock_task = instance_double(Win32::TaskScheduler)
607
- allow(Win32::TaskScheduler).to receive(:new).and_return(@mock_task, @new_mock_task)
608
-
609
- allow_any_instance_of(described_class).to receive(:exists?).and_return(false)
610
- end
611
- let(:resource) { Puppet::Type.type(:scheduled_task).new(:name => 'Test Task', :command => 'C:\Windows\System32\notepad.exe') }
612
-
613
- it 'should clear the cached task object' do
614
- expect(resource.provider.task).to eq(@mock_task)
615
- expect(resource.provider.task).to eq(@mock_task)
616
-
617
- resource.provider.clear_task
618
-
619
- expect(resource.provider.task).to eq(@new_mock_task)
620
- end
621
-
622
- it 'should clear the cached list of triggers for the task' do
623
- allow(@mock_task).to receive(:trigger_count).and_return(1)
624
- allow(@mock_task).to receive(:trigger).with(0).and_return({
625
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
626
- 'start_year' => 2011,
627
- 'start_month' => 10,
628
- 'start_day' => 13,
629
- 'start_hour' => 14,
630
- 'start_minute' => 21,
631
- 'flags' => 0,
632
- })
633
- allow(@new_mock_task).to receive(:trigger_count).and_return(1)
634
- allow(@new_mock_task).to receive(:trigger).with(0).and_return({
635
- 'trigger_type' => Win32::TaskScheduler::TASK_TIME_TRIGGER_ONCE,
636
- 'start_year' => 2012,
637
- 'start_month' => 11,
638
- 'start_day' => 14,
639
- 'start_hour' => 15,
640
- 'start_minute' => 22,
641
- 'flags' => 0,
642
- })
643
-
644
- mock_task_trigger = {
645
- 'start_date' => '2011-10-13',
646
- 'start_time' => '14:21',
647
- 'schedule' => 'once',
648
- 'minutes_interval' => 0,
649
- 'minutes_duration' => 0,
650
- 'enabled' => true,
651
- 'index' => 0,
652
- }
653
-
654
- expect(resource.provider.trigger).to eq([mock_task_trigger])
655
- expect(resource.provider.trigger).to eq([mock_task_trigger])
656
-
657
- resource.provider.clear_task
658
-
659
- expect(resource.provider.trigger).to eq([{
660
- 'start_date' => '2012-11-14',
661
- 'start_time' => '15:22',
662
- 'schedule' => 'once',
663
- 'minutes_interval' => 0,
664
- 'minutes_duration' => 0,
665
- 'enabled' => true,
666
- 'index' => 0,
667
- }])
668
- end
669
- end
670
-
671
- describe '.instances' do
672
- it 'should use the list of .job files to construct the list of scheduled_tasks' do
673
- job_files = ['foo.job', 'bar.job', 'baz.job']
674
- allow_any_instance_of(Win32::TaskScheduler).to receive(:tasks).and_return(job_files)
675
- job_files.each do |job|
676
- job = File.basename(job, '.job')
677
-
678
- expect(described_class).to receive(:new).with(:provider => :win32_taskscheduler, :name => job)
679
- end
680
-
681
- described_class.instances
682
- end
683
- end
684
-
685
- describe '#user_insync?', :if => Puppet.features.microsoft_windows? do
686
- let(:resource) { described_class.new(:name => 'foobar', :command => 'C:\Windows\System32\notepad.exe') }
687
-
688
- it 'should consider the user as in sync if the name matches' do
689
- expect(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('joe').twice.and_return('SID A')
690
-
691
- expect(resource).to be_user_insync('joe', ['joe'])
692
- end
693
-
694
- it 'should consider the user as in sync if the current user is fully qualified' do
695
- expect(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('joe').and_return('SID A')
696
- expect(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('MACHINE\joe').and_return('SID A')
697
-
698
- expect(resource).to be_user_insync('MACHINE\joe', ['joe'])
699
- end
700
-
701
- it 'should consider a current user of the empty string to be the same as the system user' do
702
- expect(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('system').twice.and_return('SYSTEM SID')
703
-
704
- expect(resource).to be_user_insync('', ['system'])
705
- end
706
-
707
- it 'should consider different users as being different' do
708
- expect(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('joe').and_return('SID A')
709
- expect(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('bob').and_return('SID B')
710
-
711
- expect(resource).not_to be_user_insync('joe', ['bob'])
712
- end
713
- end
714
-
715
- describe '#trigger_insync?' do
716
- let(:resource) { described_class.new(:name => 'foobar', :command => 'C:\Windows\System32\notepad.exe') }
717
-
718
- it 'should not consider any extra current triggers as in sync' do
719
- current = [
720
- {'start_date' => '2011-09-12', 'start_time' => '15:15', 'schedule' => 'once'},
721
- {'start_date' => '2012-10-13', 'start_time' => '16:16', 'schedule' => 'once'}
722
- ]
723
- desired = {'start_date' => '2011-09-12', 'start_time' => '15:15', 'schedule' => 'once'}
724
-
725
- expect(resource).not_to be_trigger_insync(current, desired)
726
- end
727
-
728
- it 'should not consider any extra desired triggers as in sync' do
729
- current = {'start_date' => '2011-09-12', 'start_time' => '15:15', 'schedule' => 'once'}
730
- desired = [
731
- {'start_date' => '2011-09-12', 'start_time' => '15:15', 'schedule' => 'once'},
732
- {'start_date' => '2012-10-13', 'start_time' => '16:16', 'schedule' => 'once'}
733
- ]
734
-
735
- expect(resource).not_to be_trigger_insync(current, desired)
736
- end
737
-
738
- it 'should consider triggers to be in sync if the sets of current and desired triggers are equal' do
739
- current = [
740
- {'start_date' => '2011-09-12', 'start_time' => '15:15', 'schedule' => 'once'},
741
- {'start_date' => '2012-10-13', 'start_time' => '16:16', 'schedule' => 'once'}
742
- ]
743
- desired = [
744
- {'start_date' => '2011-09-12', 'start_time' => '15:15', 'schedule' => 'once'},
745
- {'start_date' => '2012-10-13', 'start_time' => '16:16', 'schedule' => 'once'}
746
- ]
747
-
748
- expect(resource).to be_trigger_insync(current, desired)
749
- end
750
- end
751
-
752
- describe '#triggers_same?' do
753
- let(:provider) { described_class.new(:name => 'foobar', :command => 'C:\Windows\System32\notepad.exe') }
754
-
755
- it "should not mutate triggers" do
756
- current = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
757
- current.freeze
758
-
759
- desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30'}
760
- desired.freeze
761
-
762
- expect(provider).to be_triggers_same(current, desired)
763
- end
764
-
765
- it "ignores 'index' in current trigger" do
766
- current = {'index' => 0, 'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
767
- desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
768
-
769
- expect(provider).to be_triggers_same(current, desired)
770
- end
771
-
772
- it "ignores 'enabled' in current triggger" do
773
- current = {'enabled' => true, 'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
774
- desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
775
-
776
- expect(provider).to be_triggers_same(current, desired)
777
- end
778
-
779
- it "should not consider a disabled 'current' trigger to be the same" do
780
- current = {'schedule' => 'once', 'enabled' => false}
781
- desired = {'schedule' => 'once'}
782
-
783
- expect(provider).not_to be_triggers_same(current, desired)
784
- end
785
-
786
- it 'should not consider triggers with different schedules to be the same' do
787
- current = {'schedule' => 'once'}
788
- desired = {'schedule' => 'weekly'}
789
-
790
- expect(provider).not_to be_triggers_same(current, desired)
791
- end
792
-
793
- describe 'start_date' do
794
- it "considers triggers to be equal when start_date is not specified in the 'desired' trigger" do
795
- current = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
796
- desired = {'schedule' => 'daily', 'start_time' => '15:30', 'every' => 3}
797
-
798
- expect(provider).to be_triggers_same(current, desired)
799
- end
800
- end
801
-
802
- describe 'comparing daily triggers' do
803
- it "should consider 'desired' triggers not specifying 'every' to have the same value as the 'current' trigger" do
804
- current = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
805
- desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30'}
806
-
807
- expect(provider).to be_triggers_same(current, desired)
808
- end
809
-
810
- it "should consider different 'start_dates' as different triggers" do
811
- current = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
812
- desired = {'schedule' => 'daily', 'start_date' => '2012-09-12', 'start_time' => '15:30', 'every' => 3}
813
-
814
- expect(provider).not_to be_triggers_same(current, desired)
815
- end
816
-
817
- it "should consider different 'start_times' as different triggers" do
818
- current = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
819
- desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:31', 'every' => 3}
820
-
821
- expect(provider).not_to be_triggers_same(current, desired)
822
- end
823
-
824
- it 'should not consider differences in date formatting to be different triggers' do
825
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
826
- desired = {'schedule' => 'weekly', 'start_date' => '2011-9-12', 'start_time' => '15:30', 'every' => 3}
827
-
828
- expect(provider).to be_triggers_same(current, desired)
829
- end
830
-
831
- it 'should not consider differences in time formatting to be different triggers' do
832
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '5:30', 'every' => 3}
833
- desired = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '05:30', 'every' => 3}
834
-
835
- expect(provider).to be_triggers_same(current, desired)
836
- end
837
-
838
- it "should consider different 'every' as different triggers" do
839
- current = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
840
- desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 1}
841
-
842
- expect(provider).not_to be_triggers_same(current, desired)
843
- end
844
-
845
- it 'should consider triggers that are the same as being the same' do
846
- trigger = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '01:30', 'every' => 1}
847
-
848
- expect(provider).to be_triggers_same(trigger, trigger)
849
- end
850
- end
851
-
852
- describe 'comparing one-time triggers' do
853
- it "should consider different 'start_dates' as different triggers" do
854
- current = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30'}
855
- desired = {'schedule' => 'daily', 'start_date' => '2012-09-12', 'start_time' => '15:30'}
856
-
857
- expect(provider).not_to be_triggers_same(current, desired)
858
- end
859
-
860
- it "should consider different 'start_times' as different triggers" do
861
- current = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30'}
862
- desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:31'}
863
-
864
- expect(provider).not_to be_triggers_same(current, desired)
865
- end
866
-
867
- it 'should not consider differences in date formatting to be different triggers' do
868
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30'}
869
- desired = {'schedule' => 'weekly', 'start_date' => '2011-9-12', 'start_time' => '15:30'}
870
-
871
- expect(provider).to be_triggers_same(current, desired)
872
- end
873
-
874
- it 'should not consider differences in time formatting to be different triggers' do
875
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '1:30'}
876
- desired = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '01:30'}
877
-
878
- expect(provider).to be_triggers_same(current, desired)
879
- end
880
-
881
- it 'should consider triggers that are the same as being the same' do
882
- trigger = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '01:30'}
883
-
884
- expect(provider).to be_triggers_same(trigger, trigger)
885
- end
886
- end
887
-
888
- describe 'comparing monthly date-based triggers' do
889
- it "should consider 'desired' triggers not specifying 'months' to have the same value as the 'current' trigger" do
890
- current = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'months' => [3], 'on' => [1,'last']}
891
- desired = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'on' => [1, 'last']}
892
-
893
- expect(provider).to be_triggers_same(current, desired)
894
- end
895
-
896
- it "should consider different 'start_dates' as different triggers" do
897
- current = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
898
- desired = {'schedule' => 'monthly', 'start_date' => '2011-10-12', 'start_time' => '15:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
899
-
900
- expect(provider).not_to be_triggers_same(current, desired)
901
- end
902
-
903
- it "should consider different 'start_times' as different triggers" do
904
- current = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
905
- desired = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '22:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
906
-
907
- expect(provider).not_to be_triggers_same(current, desired)
908
- end
909
-
910
- it 'should not consider differences in date formatting to be different triggers' do
911
- current = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
912
- desired = {'schedule' => 'monthly', 'start_date' => '2011-9-12', 'start_time' => '15:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
913
-
914
- expect(provider).to be_triggers_same(current, desired)
915
- end
916
-
917
- it 'should not consider differences in time formatting to be different triggers' do
918
- current = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '5:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
919
- desired = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '05:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
920
-
921
- expect(provider).to be_triggers_same(current, desired)
922
- end
923
-
924
- it "should consider different 'months' as different triggers" do
925
- current = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
926
- desired = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'months' => [1], 'on' => [1, 3, 5, 7]}
927
-
928
- expect(provider).not_to be_triggers_same(current, desired)
929
- end
930
-
931
- it "should consider different 'on' as different triggers" do
932
- current = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
933
- desired = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'months' => [1, 2], 'on' => [1, 5, 7]}
934
-
935
- expect(provider).not_to be_triggers_same(current, desired)
936
- end
937
-
938
- it 'should consider triggers that are the same as being the same' do
939
- trigger = {'schedule' => 'monthly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'months' => [1, 2], 'on' => [1, 3, 5, 7]}
940
-
941
- expect(provider).to be_triggers_same(trigger, trigger)
942
- end
943
- end
944
-
945
- describe 'comparing monthly day-of-week-based triggers' do
946
- it "should consider 'desired' triggers not specifying 'months' to have the same value as the 'current' trigger" do
947
- current = {
948
- 'schedule' => 'monthly',
949
- 'start_date' => '2011-09-12',
950
- 'start_time' => '15:30',
951
- 'months' => [3],
952
- 'which_occurrence' => 'first',
953
- 'day_of_week' => ['mon', 'tues', 'sat']
954
- }
955
- desired = {
956
- 'schedule' => 'monthly',
957
- 'start_date' => '2011-09-12',
958
- 'start_time' => '15:30',
959
- 'which_occurrence' => 'first',
960
- 'day_of_week' => ['mon', 'tues', 'sat']
961
- }
962
-
963
- expect(provider).to be_triggers_same(current, desired)
964
- end
965
-
966
- it "should consider different 'start_dates' as different triggers" do
967
- current = {
968
- 'schedule' => 'monthly',
969
- 'start_date' => '2011-09-12',
970
- 'start_time' => '15:30',
971
- 'months' => [3],
972
- 'which_occurrence' => 'first',
973
- 'day_of_week' => ['mon', 'tues', 'sat']
974
- }
975
- desired = {
976
- 'schedule' => 'monthly',
977
- 'start_date' => '2011-10-12',
978
- 'start_time' => '15:30',
979
- 'months' => [3],
980
- 'which_occurrence' => 'first',
981
- 'day_of_week' => ['mon', 'tues', 'sat']
982
- }
983
-
984
- expect(provider).not_to be_triggers_same(current, desired)
985
- end
986
-
987
- it "should consider different 'start_times' as different triggers" do
988
- current = {
989
- 'schedule' => 'monthly',
990
- 'start_date' => '2011-09-12',
991
- 'start_time' => '15:30',
992
- 'months' => [3],
993
- 'which_occurrence' => 'first',
994
- 'day_of_week' => ['mon', 'tues', 'sat']
995
- }
996
- desired = {
997
- 'schedule' => 'monthly',
998
- 'start_date' => '2011-09-12',
999
- 'start_time' => '22:30',
1000
- 'months' => [3],
1001
- 'which_occurrence' => 'first',
1002
- 'day_of_week' => ['mon', 'tues', 'sat']
1003
- }
1004
-
1005
- expect(provider).not_to be_triggers_same(current, desired)
1006
- end
1007
-
1008
- it "should consider different 'months' as different triggers" do
1009
- current = {
1010
- 'schedule' => 'monthly',
1011
- 'start_date' => '2011-09-12',
1012
- 'start_time' => '15:30',
1013
- 'months' => [3],
1014
- 'which_occurrence' => 'first',
1015
- 'day_of_week' => ['mon', 'tues', 'sat']
1016
- }
1017
- desired = {
1018
- 'schedule' => 'monthly',
1019
- 'start_date' => '2011-09-12',
1020
- 'start_time' => '15:30',
1021
- 'months' => [3, 5, 7, 9],
1022
- 'which_occurrence' => 'first',
1023
- 'day_of_week' => ['mon', 'tues', 'sat']
1024
- }
1025
-
1026
- expect(provider).not_to be_triggers_same(current, desired)
1027
- end
1028
-
1029
- it "should consider different 'which_occurrence' as different triggers" do
1030
- current = {
1031
- 'schedule' => 'monthly',
1032
- 'start_date' => '2011-09-12',
1033
- 'start_time' => '15:30',
1034
- 'months' => [3],
1035
- 'which_occurrence' => 'first',
1036
- 'day_of_week' => ['mon', 'tues', 'sat']
1037
- }
1038
- desired = {
1039
- 'schedule' => 'monthly',
1040
- 'start_date' => '2011-09-12',
1041
- 'start_time' => '15:30',
1042
- 'months' => [3],
1043
- 'which_occurrence' => 'last',
1044
- 'day_of_week' => ['mon', 'tues', 'sat']
1045
- }
1046
-
1047
- expect(provider).not_to be_triggers_same(current, desired)
1048
- end
1049
-
1050
- it "should consider different 'day_of_week' as different triggers" do
1051
- current = {
1052
- 'schedule' => 'monthly',
1053
- 'start_date' => '2011-09-12',
1054
- 'start_time' => '15:30',
1055
- 'months' => [3],
1056
- 'which_occurrence' => 'first',
1057
- 'day_of_week' => ['mon', 'tues', 'sat']
1058
- }
1059
- desired = {
1060
- 'schedule' => 'monthly',
1061
- 'start_date' => '2011-09-12',
1062
- 'start_time' => '15:30',
1063
- 'months' => [3],
1064
- 'which_occurrence' => 'first',
1065
- 'day_of_week' => ['fri']
1066
- }
1067
-
1068
- expect(provider).not_to be_triggers_same(current, desired)
1069
- end
1070
-
1071
- it 'should consider triggers that are the same as being the same' do
1072
- trigger = {
1073
- 'schedule' => 'monthly',
1074
- 'start_date' => '2011-09-12',
1075
- 'start_time' => '15:30',
1076
- 'months' => [3],
1077
- 'which_occurrence' => 'first',
1078
- 'day_of_week' => ['mon', 'tues', 'sat']
1079
- }
1080
-
1081
- expect(provider).to be_triggers_same(trigger, trigger)
1082
- end
1083
- end
1084
-
1085
- describe 'comparing weekly triggers' do
1086
- it "should consider 'desired' triggers not specifying 'day_of_week' to have the same value as the 'current' trigger" do
1087
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1088
- desired = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
1089
-
1090
- expect(provider).to be_triggers_same(current, desired)
1091
- end
1092
-
1093
- it "should consider different 'start_dates' as different triggers" do
1094
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1095
- desired = {'schedule' => 'weekly', 'start_date' => '2011-10-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1096
-
1097
- expect(provider).not_to be_triggers_same(current, desired)
1098
- end
1099
-
1100
- it "should consider different 'start_times' as different triggers" do
1101
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1102
- desired = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '22:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1103
-
1104
- expect(provider).not_to be_triggers_same(current, desired)
1105
- end
1106
-
1107
- it 'should not consider differences in date formatting to be different triggers' do
1108
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1109
- desired = {'schedule' => 'weekly', 'start_date' => '2011-9-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1110
-
1111
- expect(provider).to be_triggers_same(current, desired)
1112
- end
1113
-
1114
- it 'should not consider differences in time formatting to be different triggers' do
1115
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '1:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1116
- desired = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '01:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1117
-
1118
- expect(provider).to be_triggers_same(current, desired)
1119
- end
1120
-
1121
- it "should consider different 'every' as different triggers" do
1122
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 1, 'day_of_week' => ['mon', 'wed', 'fri']}
1123
- desired = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1124
-
1125
- expect(provider).not_to be_triggers_same(current, desired)
1126
- end
1127
-
1128
- it "should consider different 'day_of_week' as different triggers" do
1129
- current = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1130
- desired = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['fri']}
1131
-
1132
- expect(provider).not_to be_triggers_same(current, desired)
1133
- end
1134
-
1135
- it 'should consider triggers that are the same as being the same' do
1136
- trigger = {'schedule' => 'weekly', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3, 'day_of_week' => ['mon', 'wed', 'fri']}
1137
-
1138
- expect(provider).to be_triggers_same(trigger, trigger)
1139
- end
1140
- end
1141
- end
1142
-
1143
- describe '#normalized_date' do
1144
- it 'should format the date without leading zeros' do
1145
- expect(described_class.normalized_date('2011-01-01')).to eq('2011-1-1')
1146
- end
1147
- end
1148
-
1149
- describe '#normalized_time' do
1150
- it 'should format the time as {24h}:{minutes}' do
1151
- expect(described_class.normalized_time('8:37 PM')).to eq('20:37')
1152
- end
1153
- end
1154
-
1155
- describe '#translate_hash_to_trigger' do
1156
- before :each do
1157
- @puppet_trigger = {
1158
- 'start_date' => '2011-1-1',
1159
- 'start_time' => '01:10'
1160
- }
1161
- end
1162
- let(:provider) { described_class.new(:name => 'Test Task', :command => 'C:\Windows\System32\notepad.exe') }
1163
- let(:trigger) { provider.translate_hash_to_trigger(@puppet_trigger) }
1164
-
1165
- context "working with repeat every x triggers" do
1166
- before :each do
1167
- @puppet_trigger['schedule'] = 'once'
1168
- end
1169
-
1170
- it 'should succeed if minutes_interval is equal to 0' do
1171
- @puppet_trigger['minutes_interval'] = '0'
1172
-
1173
- expect(trigger['minutes_interval']).to eq(0)
1174
- end
1175
-
1176
- it 'should default minutes_duration to a full day when minutes_interval is greater than 0 without setting minutes_duration' do
1177
- @puppet_trigger['minutes_interval'] = '1'
1178
-
1179
- expect(trigger['minutes_duration']).to eq(1440)
1180
- end
1181
-
1182
- it 'should succeed if minutes_interval is greater than 0 and minutes_duration is also set' do
1183
- @puppet_trigger['minutes_interval'] = '1'
1184
- @puppet_trigger['minutes_duration'] = '2'
1185
-
1186
- expect(trigger['minutes_interval']).to eq(1)
1187
- end
1188
-
1189
- it 'should fail if minutes_interval is less than 0' do
1190
- @puppet_trigger['minutes_interval'] = '-1'
1191
-
1192
- expect { trigger }.to raise_error(
1193
- Puppet::Error,
1194
- 'minutes_interval must be an integer greater or equal to 0'
1195
- )
1196
- end
1197
-
1198
- it 'should fail if minutes_interval is not an integer' do
1199
- @puppet_trigger['minutes_interval'] = 'abc'
1200
- expect { trigger }.to raise_error(ArgumentError)
1201
- end
1202
-
1203
- it 'should succeed if minutes_duration is equal to 0' do
1204
- @puppet_trigger['minutes_duration'] = '0'
1205
- expect(trigger['minutes_duration']).to eq(0)
1206
- end
1207
-
1208
- it 'should succeed if minutes_duration is greater than 0' do
1209
- @puppet_trigger['minutes_duration'] = '1'
1210
- expect(trigger['minutes_duration']).to eq(1)
1211
- end
1212
-
1213
- it 'should fail if minutes_duration is less than 0' do
1214
- @puppet_trigger['minutes_duration'] = '-1'
1215
-
1216
- expect { trigger }.to raise_error(
1217
- Puppet::Error,
1218
- 'minutes_duration must be an integer greater than minutes_interval and equal to or greater than 0'
1219
- )
1220
- end
1221
-
1222
- it 'should fail if minutes_duration is not an integer' do
1223
- @puppet_trigger['minutes_duration'] = 'abc'
1224
- expect { trigger }.to raise_error(ArgumentError)
1225
- end
1226
-
1227
- it 'should succeed if minutes_duration is equal to a full day' do
1228
- @puppet_trigger['minutes_duration'] = '1440'
1229
- expect(trigger['minutes_duration']).to eq(1440)
1230
- end
1231
-
1232
- it 'should succeed if minutes_duration is equal to three days' do
1233
- @puppet_trigger['minutes_duration'] = '4320'
1234
- expect(trigger['minutes_duration']).to eq(4320)
1235
- end
1236
-
1237
- it 'should succeed if minutes_duration is greater than minutes_duration' do
1238
- @puppet_trigger['minutes_interval'] = '10'
1239
- @puppet_trigger['minutes_duration'] = '11'
1240
-
1241
- expect(trigger['minutes_interval']).to eq(10)
1242
- expect(trigger['minutes_duration']).to eq(11)
1243
- end
1244
-
1245
- it 'should fail if minutes_duration is equal to minutes_interval' do
1246
- # On Windows 2003, the duration must be greater than the interval
1247
- # on other platforms the values can be equal.
1248
- @puppet_trigger['minutes_interval'] = '10'
1249
- @puppet_trigger['minutes_duration'] = '10'
1250
-
1251
- expect { trigger }.to raise_error(
1252
- Puppet::Error,
1253
- 'minutes_duration must be an integer greater than minutes_interval and equal to or greater than 0'
1254
- )
1255
- end
1256
-
1257
- it 'should succeed if minutes_duration and minutes_interval are both set to 0' do
1258
- @puppet_trigger['minutes_interval'] = '0'
1259
- @puppet_trigger['minutes_duration'] = '0'
1260
-
1261
- expect(trigger['minutes_interval']).to eq(0)
1262
- expect(trigger['minutes_duration']).to eq(0)
1263
- end
1264
-
1265
- it 'should fail if minutes_duration is less than minutes_interval' do
1266
- @puppet_trigger['minutes_interval'] = '10'
1267
- @puppet_trigger['minutes_duration'] = '9'
1268
-
1269
- expect { trigger }.to raise_error(
1270
- Puppet::Error,
1271
- 'minutes_duration must be an integer greater than minutes_interval and equal to or greater than 0'
1272
- )
1273
- end
1274
-
1275
- it 'should fail if minutes_duration is less than minutes_interval and set to 0' do
1276
- @puppet_trigger['minutes_interval'] = '10'
1277
- @puppet_trigger['minutes_duration'] = '0'
1278
-
1279
- expect { trigger }.to raise_error(
1280
- Puppet::Error,
1281
- 'minutes_interval cannot be set without minutes_duration also being set to a number greater than 0'
1282
- )
1283
- end
1284
- end
1285
-
1286
- describe 'when given a one-time trigger' do
1287
- before :each do
1288
- @puppet_trigger['schedule'] = 'once'
1289
- end
1290
-
1291
- it 'should set the trigger_type to Win32::TaskScheduler::ONCE' do
1292
- expect(trigger['trigger_type']).to eq(Win32::TaskScheduler::ONCE)
1293
- end
1294
-
1295
- it 'should not set a type' do
1296
- expect(trigger).not_to be_has_key('type')
1297
- end
1298
-
1299
- it "should require 'start_date'" do
1300
- @puppet_trigger.delete('start_date')
1301
-
1302
- expect { trigger }.to raise_error(
1303
- Puppet::Error,
1304
- /Must specify 'start_date' when defining a one-time trigger/
1305
- )
1306
- end
1307
-
1308
- it "should require 'start_time'" do
1309
- @puppet_trigger.delete('start_time')
1310
-
1311
- expect { trigger }.to raise_error(
1312
- Puppet::Error,
1313
- /Must specify 'start_time' when defining a trigger/
1314
- )
1315
- end
1316
-
1317
- it_behaves_like "a trigger that handles start_date and start_time" do
1318
- let(:trigger_hash) {{'schedule' => 'once' }}
1319
- end
1320
- end
1321
-
1322
- describe 'when given a daily trigger' do
1323
- before :each do
1324
- @puppet_trigger['schedule'] = 'daily'
1325
- end
1326
-
1327
- it "should default 'every' to 1" do
1328
- expect(trigger['type']['days_interval']).to eq(1)
1329
- end
1330
-
1331
- it "should use the specified value for 'every'" do
1332
- @puppet_trigger['every'] = 5
1333
-
1334
- expect(trigger['type']['days_interval']).to eq(5)
1335
- end
1336
-
1337
- it "should default 'start_date' to 'today'" do
1338
- @puppet_trigger.delete('start_date')
1339
- today = Time.now
1340
-
1341
- expect(trigger['start_year']).to eq(today.year)
1342
- expect(trigger['start_month']).to eq(today.month)
1343
- expect(trigger['start_day']).to eq(today.day)
1344
- end
1345
-
1346
- it_behaves_like "a trigger that handles start_date and start_time" do
1347
- let(:trigger_hash) {{'schedule' => 'daily', 'every' => 1}}
1348
- end
1349
- end
1350
-
1351
- describe 'when given a weekly trigger' do
1352
- before :each do
1353
- @puppet_trigger['schedule'] = 'weekly'
1354
- end
1355
-
1356
- it "should default 'every' to 1" do
1357
- expect(trigger['type']['weeks_interval']).to eq(1)
1358
- end
1359
-
1360
- it "should use the specified value for 'every'" do
1361
- @puppet_trigger['every'] = 4
1362
-
1363
- expect(trigger['type']['weeks_interval']).to eq(4)
1364
- end
1365
-
1366
- it "should default 'day_of_week' to be every day of the week" do
1367
- expect(trigger['type']['days_of_week']).to eq(Win32::TaskScheduler::MONDAY |
1368
- Win32::TaskScheduler::TUESDAY |
1369
- Win32::TaskScheduler::WEDNESDAY |
1370
- Win32::TaskScheduler::THURSDAY |
1371
- Win32::TaskScheduler::FRIDAY |
1372
- Win32::TaskScheduler::SATURDAY |
1373
- Win32::TaskScheduler::SUNDAY)
1374
- end
1375
-
1376
- it "should use the specified value for 'day_of_week'" do
1377
- @puppet_trigger['day_of_week'] = ['mon', 'wed', 'fri']
1378
-
1379
- expect(trigger['type']['days_of_week']).to eq(Win32::TaskScheduler::MONDAY |
1380
- Win32::TaskScheduler::WEDNESDAY |
1381
- Win32::TaskScheduler::FRIDAY)
1382
- end
1383
-
1384
- it "should default 'start_date' to 'today'" do
1385
- @puppet_trigger.delete('start_date')
1386
- today = Time.now
1387
-
1388
- expect(trigger['start_year']).to eq(today.year)
1389
- expect(trigger['start_month']).to eq(today.month)
1390
- expect(trigger['start_day']).to eq(today.day)
1391
- end
1392
-
1393
- it_behaves_like "a trigger that handles start_date and start_time" do
1394
- let(:trigger_hash) {{'schedule' => 'weekly', 'every' => 1, 'day_of_week' => 'mon'}}
1395
- end
1396
- end
1397
-
1398
- shared_examples_for 'a monthly schedule' do
1399
- it "should default 'months' to be every month" do
1400
- expect(trigger['type']['months']).to eq(Win32::TaskScheduler::JANUARY |
1401
- Win32::TaskScheduler::FEBRUARY |
1402
- Win32::TaskScheduler::MARCH |
1403
- Win32::TaskScheduler::APRIL |
1404
- Win32::TaskScheduler::MAY |
1405
- Win32::TaskScheduler::JUNE |
1406
- Win32::TaskScheduler::JULY |
1407
- Win32::TaskScheduler::AUGUST |
1408
- Win32::TaskScheduler::SEPTEMBER |
1409
- Win32::TaskScheduler::OCTOBER |
1410
- Win32::TaskScheduler::NOVEMBER |
1411
- Win32::TaskScheduler::DECEMBER)
1412
- end
1413
-
1414
- it "should use the specified value for 'months'" do
1415
- @puppet_trigger['months'] = [2, 8]
1416
-
1417
- expect(trigger['type']['months']).to eq(Win32::TaskScheduler::FEBRUARY |
1418
- Win32::TaskScheduler::AUGUST)
1419
- end
1420
- end
1421
-
1422
- describe 'when given a monthly date-based trigger' do
1423
- before :each do
1424
- @puppet_trigger['schedule'] = 'monthly'
1425
- @puppet_trigger['on'] = [7, 14]
1426
- end
1427
-
1428
- it_behaves_like 'a monthly schedule'
1429
-
1430
- it "should not allow 'which_occurrence' to be specified" do
1431
- @puppet_trigger['which_occurrence'] = 'first'
1432
-
1433
- expect {trigger}.to raise_error(
1434
- Puppet::Error,
1435
- /Neither 'day_of_week' nor 'which_occurrence' can be specified when creating a monthly date-based trigger/
1436
- )
1437
- end
1438
-
1439
- it "should not allow 'day_of_week' to be specified" do
1440
- @puppet_trigger['day_of_week'] = 'mon'
1441
-
1442
- expect {trigger}.to raise_error(
1443
- Puppet::Error,
1444
- /Neither 'day_of_week' nor 'which_occurrence' can be specified when creating a monthly date-based trigger/
1445
- )
1446
- end
1447
-
1448
- it "should require 'on'" do
1449
- @puppet_trigger.delete('on')
1450
-
1451
- expect {trigger}.to raise_error(
1452
- Puppet::Error,
1453
- /Don't know how to create a 'monthly' schedule with the options: schedule, start_date, start_time/
1454
- )
1455
- end
1456
-
1457
- it "should default 'start_date' to 'today'" do
1458
- @puppet_trigger.delete('start_date')
1459
- today = Time.now
1460
-
1461
- expect(trigger['start_year']).to eq(today.year)
1462
- expect(trigger['start_month']).to eq(today.month)
1463
- expect(trigger['start_day']).to eq(today.day)
1464
- end
1465
-
1466
- it_behaves_like "a trigger that handles start_date and start_time" do
1467
- let(:trigger_hash) {{'schedule' => 'monthly', 'months' => 1, 'on' => 1}}
1468
- end
1469
- end
1470
-
1471
- describe 'when given a monthly day-of-week-based trigger' do
1472
- before :each do
1473
- @puppet_trigger['schedule'] = 'monthly'
1474
- @puppet_trigger['which_occurrence'] = 'first'
1475
- @puppet_trigger['day_of_week'] = 'mon'
1476
- end
1477
-
1478
- it_behaves_like 'a monthly schedule'
1479
-
1480
- it "should not allow 'on' to be specified" do
1481
- @puppet_trigger['on'] = 15
1482
-
1483
- expect {trigger}.to raise_error(
1484
- Puppet::Error,
1485
- /Neither 'day_of_week' nor 'which_occurrence' can be specified when creating a monthly date-based trigger/
1486
- )
1487
- end
1488
-
1489
- it "should require 'which_occurrence'" do
1490
- @puppet_trigger.delete('which_occurrence')
1491
-
1492
- expect {trigger}.to raise_error(
1493
- Puppet::Error,
1494
- /which_occurrence must be specified when creating a monthly day-of-week based trigger/
1495
- )
1496
- end
1497
-
1498
- it "should require 'day_of_week'" do
1499
- @puppet_trigger.delete('day_of_week')
1500
-
1501
- expect {trigger}.to raise_error(
1502
- Puppet::Error,
1503
- /day_of_week must be specified when creating a monthly day-of-week based trigger/
1504
- )
1505
- end
1506
-
1507
- it "should default 'start_date' to 'today'" do
1508
- @puppet_trigger.delete('start_date')
1509
- today = Time.now
1510
-
1511
- expect(trigger['start_year']).to eq(today.year)
1512
- expect(trigger['start_month']).to eq(today.month)
1513
- expect(trigger['start_day']).to eq(today.day)
1514
- end
1515
-
1516
- it_behaves_like "a trigger that handles start_date and start_time" do
1517
- let(:trigger_hash) {{'schedule' => 'monthly', 'months' => 1, 'which_occurrence' => 'first', 'day_of_week' => 'mon'}}
1518
- end
1519
- end
1520
- end
1521
-
1522
- describe '#validate_trigger' do
1523
- let(:provider) { described_class.new(:name => 'Test Task', :command => 'C:\Windows\System32\notepad.exe') }
1524
-
1525
- it 'should succeed if all passed triggers translate from hashes to triggers' do
1526
- triggers_to_validate = [
1527
- {'schedule' => 'once', 'start_date' => '2011-09-13', 'start_time' => '13:50'},
1528
- {'schedule' => 'weekly', 'start_date' => '2011-09-13', 'start_time' => '13:50', 'day_of_week' => 'mon'}
1529
- ]
1530
-
1531
- expect(provider.validate_trigger(triggers_to_validate)).to eq(true)
1532
- end
1533
-
1534
- it 'should use the exception from translate_hash_to_trigger when it fails' do
1535
- triggers_to_validate = [
1536
- {'schedule' => 'once', 'start_date' => '2011-09-13', 'start_time' => '13:50'},
1537
- {'schedule' => 'monthly', 'this is invalid' => true}
1538
- ]
1539
-
1540
- expect {provider.validate_trigger(triggers_to_validate)}.to raise_error(
1541
- Puppet::Error,
1542
- /#{Regexp.escape("Unknown trigger option(s): ['this is invalid']")}/
1543
- )
1544
- end
1545
- end
1546
-
1547
- describe '#flush' do
1548
- let(:resource) do
1549
- Puppet::Type.type(:scheduled_task).new(
1550
- :name => 'Test Task',
1551
- :command => 'C:\Windows\System32\notepad.exe',
1552
- :ensure => @ensure
1553
- )
1554
- end
1555
-
1556
- before :each do
1557
- @mock_task = instance_double(Win32::TaskScheduler)
1558
- allow(@mock_task).to receive(:exists?).and_return(true)
1559
- allow(@mock_task).to receive(:activate)
1560
- allow(Win32::TaskScheduler).to receive(:new).and_return(@mock_task)
1561
-
1562
- @command = 'C:\Windows\System32\notepad.exe'
1563
- end
1564
-
1565
- describe 'when :ensure is :present' do
1566
- before :each do
1567
- @ensure = :present
1568
- end
1569
-
1570
- it 'should save the task' do
1571
- expect(@mock_task).to receive(:set_account_information).with(nil, nil)
1572
- expect(@mock_task).to receive(:save)
1573
-
1574
- resource.provider.flush
1575
- end
1576
-
1577
- it 'should fail if the command is not specified' do
1578
- resource = Puppet::Type.type(:scheduled_task).new(
1579
- :name => 'Test Task',
1580
- :ensure => @ensure
1581
- )
1582
-
1583
- expect { resource.provider.flush }.to raise_error(
1584
- Puppet::Error,
1585
- 'Parameter command is required.'
1586
- )
1587
- end
1588
- end
1589
-
1590
- describe 'when :ensure is :absent' do
1591
- before :each do
1592
- @ensure = :absent
1593
- allow(@mock_task).to receive(:activate)
1594
- end
1595
-
1596
- it 'should not save the task if :ensure is :absent' do
1597
- expect(@mock_task).not_to receive(:save)
1598
-
1599
- resource.provider.flush
1600
- end
1601
-
1602
- it 'should not fail if the command is not specified' do
1603
- allow(@mock_task).to receive(:save)
1604
-
1605
- resource = Puppet::Type.type(:scheduled_task).new(
1606
- :name => 'Test Task',
1607
- :ensure => @ensure
1608
- )
1609
-
1610
- resource.provider.flush
1611
- end
1612
- end
1613
- end
1614
-
1615
- describe 'property setter methods' do
1616
- let(:resource) do
1617
- Puppet::Type.type(:scheduled_task).new(
1618
- :name => 'Test Task',
1619
- :command => 'C:\dummy_task.exe'
1620
- )
1621
- end
1622
-
1623
- before :each do
1624
- @mock_task = instance_double(Win32::TaskScheduler)
1625
- allow(@mock_task).to receive(:exists?).and_return(true)
1626
- allow(@mock_task).to receive(:activate)
1627
- allow(Win32::TaskScheduler).to receive(:new).and_return(@mock_task)
1628
- end
1629
-
1630
- describe '#command=' do
1631
- it 'should set the application_name on the task' do
1632
- expect(@mock_task).to receive(:application_name=).with('C:\Windows\System32\notepad.exe')
1633
-
1634
- resource.provider.command = 'C:\Windows\System32\notepad.exe'
1635
- end
1636
- end
1637
-
1638
- describe '#arguments=' do
1639
- it 'should set the parameters on the task' do
1640
- expect(@mock_task).to receive(:parameters=).with(['/some /arguments /here'])
1641
-
1642
- resource.provider.arguments = ['/some /arguments /here']
1643
- end
1644
- end
1645
-
1646
- describe '#working_dir=' do
1647
- it 'should set the working_directory on the task' do
1648
- expect(@mock_task).to receive(:working_directory=).with('C:\Windows\System32')
1649
-
1650
- resource.provider.working_dir = 'C:\Windows\System32'
1651
- end
1652
- end
1653
-
1654
- describe '#enabled=' do
1655
- it 'should set the disabled flag if the task should be disabled' do
1656
- allow(@mock_task).to receive(:flags).and_return(0)
1657
- expect(@mock_task).to receive(:flags=).with(Win32::TaskScheduler::DISABLED)
1658
-
1659
- resource.provider.enabled = :false
1660
- end
1661
-
1662
- it 'should clear the disabled flag if the task should be enabled' do
1663
- allow(@mock_task).to receive(:flags).and_return(Win32::TaskScheduler::DISABLED)
1664
- expect(@mock_task).to receive(:flags=).with(0)
1665
-
1666
- resource.provider.enabled = :true
1667
- end
1668
- end
1669
-
1670
- describe '#trigger=' do
1671
- let(:resource) do
1672
- Puppet::Type.type(:scheduled_task).new(
1673
- :name => 'Test Task',
1674
- :command => 'C:\Windows\System32\notepad.exe',
1675
- :trigger => @trigger
1676
- )
1677
- end
1678
-
1679
- before :each do
1680
- @mock_task = instance_double(Win32::TaskScheduler)
1681
- allow(@mock_task).to receive(:exists?).and_return(true)
1682
- allow(@mock_task).to receive(:activate)
1683
- allow(Win32::TaskScheduler).to receive(:new).and_return(@mock_task)
1684
- end
1685
-
1686
- it 'should not consider all duplicate current triggers in sync with a single desired trigger' do
1687
- @trigger = {'schedule' => 'once', 'start_date' => '2011-09-15', 'start_time' => '15:10'}
1688
- current_triggers = [
1689
- {'schedule' => 'once', 'start_date' => '2011-09-15', 'start_time' => '15:10', 'index' => 0},
1690
- {'schedule' => 'once', 'start_date' => '2011-09-15', 'start_time' => '15:10', 'index' => 1},
1691
- {'schedule' => 'once', 'start_date' => '2011-09-15', 'start_time' => '15:10', 'index' => 2},
1692
- ]
1693
- allow(resource.provider).to receive(:trigger).and_return(current_triggers)
1694
- expect(@mock_task).to receive(:delete_trigger).with(1)
1695
- expect(@mock_task).to receive(:delete_trigger).with(2)
1696
-
1697
- resource.provider.trigger = @trigger
1698
- end
1699
-
1700
- it 'should remove triggers not defined in the resource' do
1701
- @trigger = {'schedule' => 'once', 'start_date' => '2011-09-15', 'start_time' => '15:10'}
1702
- current_triggers = [
1703
- {'schedule' => 'once', 'start_date' => '2011-09-15', 'start_time' => '15:10', 'index' => 0},
1704
- {'schedule' => 'once', 'start_date' => '2012-09-15', 'start_time' => '15:10', 'index' => 1},
1705
- {'schedule' => 'once', 'start_date' => '2013-09-15', 'start_time' => '15:10', 'index' => 2},
1706
- ]
1707
- allow(resource.provider).to receive(:trigger).and_return(current_triggers)
1708
- expect(@mock_task).to receive(:delete_trigger).with(1)
1709
- expect(@mock_task).to receive(:delete_trigger).with(2)
1710
-
1711
- resource.provider.trigger = @trigger
1712
- end
1713
-
1714
- it 'should add triggers defined in the resource, but not found on the system' do
1715
- @trigger = [
1716
- {'schedule' => 'once', 'start_date' => '2011-09-15', 'start_time' => '15:10'},
1717
- {'schedule' => 'once', 'start_date' => '2012-09-15', 'start_time' => '15:10'},
1718
- {'schedule' => 'once', 'start_date' => '2013-09-15', 'start_time' => '15:10'},
1719
- ]
1720
- current_triggers = [
1721
- {'schedule' => 'once', 'start_date' => '2011-09-15', 'start_time' => '15:10', 'index' => 0},
1722
- ]
1723
- allow(resource.provider).to receive(:trigger).and_return(current_triggers)
1724
- expect(@mock_task).to receive(:trigger=).with(resource.provider.translate_hash_to_trigger(@trigger[1]))
1725
- expect(@mock_task).to receive(:trigger=).with(resource.provider.translate_hash_to_trigger(@trigger[2]))
1726
-
1727
- resource.provider.trigger = @trigger
1728
- end
1729
- end
1730
-
1731
- describe '#user=', :if => Puppet.features.microsoft_windows? do
1732
- before :each do
1733
- @mock_task = instance_double(Win32::TaskScheduler)
1734
- allow(@mock_task).to receive(:exists?).and_return(true)
1735
- allow(@mock_task).to receive(:activate)
1736
- allow(Win32::TaskScheduler).to receive(:new).and_return(@mock_task)
1737
- end
1738
-
1739
- it 'should use nil for user and password when setting the user to the SYSTEM account' do
1740
- allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('system').and_return('SYSTEM SID')
1741
-
1742
- resource = Puppet::Type.type(:scheduled_task).new(
1743
- :name => 'Test Task',
1744
- :command => 'C:\dummy_task.exe',
1745
- :user => 'system'
1746
- )
1747
-
1748
- expect(@mock_task).to receive(:set_account_information).with(nil, nil)
1749
-
1750
- resource.provider.user = 'system'
1751
- end
1752
-
1753
- it 'should use the specified user and password when setting the user to anything other than SYSTEM' do
1754
- allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).with('my_user_name').and_return('SID A')
1755
-
1756
- resource = Puppet::Type.type(:scheduled_task).new(
1757
- :name => 'Test Task',
1758
- :command => 'C:\dummy_task.exe',
1759
- :user => 'my_user_name',
1760
- :password => 'my password'
1761
- )
1762
-
1763
- expect(@mock_task).to receive(:set_account_information).with('my_user_name', 'my password')
1764
-
1765
- resource.provider.user = 'my_user_name'
1766
- end
1767
- end
1768
- end
1769
-
1770
- describe '#create' do
1771
- let(:resource) do
1772
- Puppet::Type.type(:scheduled_task).new(
1773
- :name => 'Test Task',
1774
- :enabled => @enabled,
1775
- :command => @command,
1776
- :arguments => @arguments,
1777
- :working_dir => @working_dir,
1778
- :trigger => { 'schedule' => 'once', 'start_date' => '2011-09-27', 'start_time' => '17:00' }
1779
- )
1780
- end
1781
-
1782
- before :each do
1783
- @enabled = :true
1784
- @command = 'C:\Windows\System32\notepad.exe'
1785
- @arguments = '/a /list /of /arguments'
1786
- @working_dir = 'C:\Windows\Some\Directory'
1787
-
1788
- @mock_task = instance_double(Win32::TaskScheduler)
1789
- allow(@mock_task).to receive(:exists?).and_return(true)
1790
- allow(@mock_task).to receive(:activate)
1791
- allow(@mock_task).to receive(:application_name=)
1792
- allow(@mock_task).to receive(:parameters=)
1793
- allow(@mock_task).to receive(:working_directory=)
1794
- allow(@mock_task).to receive(:set_account_information)
1795
- allow(@mock_task).to receive(:flags)
1796
- allow(@mock_task).to receive(:flags=)
1797
- allow(@mock_task).to receive(:trigger_count).and_return(0)
1798
- allow(@mock_task).to receive(:trigger=)
1799
- allow(@mock_task).to receive(:save)
1800
- allow(Win32::TaskScheduler).to receive(:new).and_return(@mock_task)
1801
-
1802
- allow_any_instance_of(described_class).to receive(:sync_triggers)
1803
- end
1804
-
1805
- it 'should set the command' do
1806
- expect(resource.provider).to receive(:command=).with(@command)
1807
-
1808
- resource.provider.create
1809
- end
1810
-
1811
- it 'should set the arguments' do
1812
- expect(resource.provider).to receive(:arguments=).with(@arguments)
1813
-
1814
- resource.provider.create
1815
- end
1816
-
1817
- it 'should set the working_dir' do
1818
- expect(resource.provider).to receive(:working_dir=).with(@working_dir)
1819
-
1820
- resource.provider.create
1821
- end
1822
-
1823
- it "should set the user" do
1824
- expect(resource.provider).to receive(:user=).with(:system)
1825
-
1826
- resource.provider.create
1827
- end
1828
-
1829
- it 'should set the enabled property' do
1830
- expect(resource.provider).to receive(:enabled=)
1831
-
1832
- resource.provider.create
1833
- end
1834
-
1835
- it 'should sync triggers' do
1836
- expect(resource.provider).to receive(:trigger=)
1837
-
1838
- resource.provider.create
1839
- end
1840
- end
1841
-
1842
- describe "Win32::TaskScheduler", :if => Puppet.features.microsoft_windows? do
1843
- let(:name) { SecureRandom.uuid }
1844
-
1845
- describe 'sets appropriate generic trigger defaults' do
1846
- before(:each) do
1847
- @now = Time.now
1848
- allow(Time).to receive(:now).and_return(@now)
1849
- end
1850
-
1851
- it 'for a ONCE schedule' do
1852
- task = Win32::TaskScheduler.new(name, { 'trigger_type' => Win32::TaskScheduler::ONCE })
1853
- expect(task.trigger(0)['start_year']).to eq(@now.year)
1854
- expect(task.trigger(0)['start_month']).to eq(@now.month)
1855
- expect(task.trigger(0)['start_day']).to eq(@now.day)
1856
- end
1857
-
1858
- it 'for a DAILY schedule' do
1859
- trigger = {
1860
- 'trigger_type' => Win32::TaskScheduler::DAILY,
1861
- 'type' => { 'days_interval' => 1 }
1862
- }
1863
- task = Win32::TaskScheduler.new(name, trigger)
1864
-
1865
- expect(task.trigger(0)['start_year']).to eq(@now.year)
1866
- expect(task.trigger(0)['start_month']).to eq(@now.month)
1867
- expect(task.trigger(0)['start_day']).to eq(@now.day)
1868
- end
1869
-
1870
- it 'for a WEEKLY schedule' do
1871
- trigger = {
1872
- 'trigger_type' => Win32::TaskScheduler::WEEKLY,
1873
- 'type' => { 'weeks_interval' => 1, 'days_of_week' => 1 }
1874
- }
1875
- task = Win32::TaskScheduler.new(name, trigger)
1876
-
1877
- expect(task.trigger(0)['start_year']).to eq(@now.year)
1878
- expect(task.trigger(0)['start_month']).to eq(@now.month)
1879
- expect(task.trigger(0)['start_day']).to eq(@now.day)
1880
- end
1881
-
1882
- it 'for a MONTHLYDATE schedule' do
1883
- trigger = {
1884
- 'trigger_type' => Win32::TaskScheduler::MONTHLYDATE,
1885
- 'type' => { 'days' => 1, 'months' => 1 }
1886
- }
1887
- task = Win32::TaskScheduler.new(name, trigger)
1888
-
1889
- expect(task.trigger(0)['start_year']).to eq(@now.year)
1890
- expect(task.trigger(0)['start_month']).to eq(@now.month)
1891
- expect(task.trigger(0)['start_day']).to eq(@now.day)
1892
- end
1893
-
1894
- it 'for a MONTHLYDOW schedule' do
1895
- trigger = {
1896
- 'trigger_type' => Win32::TaskScheduler::MONTHLYDOW,
1897
- 'type' => { 'weeks' => 1, 'days_of_week' => 1, 'months' => 1 }
1898
- }
1899
- task = Win32::TaskScheduler.new(name, trigger)
1900
-
1901
- expect(task.trigger(0)['start_year']).to eq(@now.year)
1902
- expect(task.trigger(0)['start_month']).to eq(@now.month)
1903
- expect(task.trigger(0)['start_day']).to eq(@now.day)
1904
- end
1905
- end
1906
-
1907
- describe 'enforces maximum lengths' do
1908
- let(:task) { Win32::TaskScheduler.new(name, { 'trigger_type' => Win32::TaskScheduler::ONCE }) }
1909
-
1910
- it 'on account user name' do
1911
- expect {
1912
- task.set_account_information('a' * (Win32::TaskScheduler::MAX_ACCOUNT_LENGTH + 1), 'pass')
1913
- }.to raise_error(Puppet::Error)
1914
- end
1915
-
1916
- it 'on application name' do
1917
- expect {
1918
- task.application_name = 'a' * (Win32::TaskScheduler::MAX_PATH + 1)
1919
- }.to raise_error(Puppet::Error)
1920
- end
1921
-
1922
- it 'on parameters' do
1923
- expect {
1924
- task.parameters = 'a' * (Win32::TaskScheduler::MAX_PARAMETERS_LENGTH + 1)
1925
- }.to raise_error(Puppet::Error)
1926
- end
1927
-
1928
- it 'on working directory' do
1929
- expect {
1930
- task.working_directory = 'a' * (Win32::TaskScheduler::MAX_PATH + 1)
1931
- }.to raise_error(Puppet::Error)
1932
- end
1933
-
1934
- it 'on comment' do
1935
- expect {
1936
- task.comment = 'a' * (Win32::TaskScheduler::MAX_COMMENT_LENGTH + 1)
1937
- }.to raise_error(Puppet::Error)
1938
- end
1939
-
1940
- it 'on creator' do
1941
- expect {
1942
- task.creator = 'a' * (Win32::TaskScheduler::MAX_ACCOUNT_LENGTH + 1)
1943
- }.to raise_error(Puppet::Error)
1944
- end
1945
- end
1946
-
1947
- def delete_task_with_retry(task, name, attempts = 3)
1948
- failed = false
1949
-
1950
- attempts.times do
1951
- begin
1952
- task.delete(name) if Win32::TaskScheduler.new.exists?(name)
1953
- rescue Puppet::Util::Windows::Error
1954
- failed = true
1955
- end
1956
-
1957
- if failed then sleep 1 else break end
1958
- end
1959
- end
1960
-
1961
- describe '#exists?' do
1962
- it 'works with Unicode task names' do
1963
- task_name = name + "\u16A0\u16C7\u16BB" # ᚠᛇᚻ
1964
-
1965
- begin
1966
- task = Win32::TaskScheduler.new(task_name, { 'trigger_type' => Win32::TaskScheduler::ONCE })
1967
- task.save()
1968
-
1969
- expect(Puppet::FileSystem.exist?("C:\\Windows\\Tasks\\#{task_name}.job")).to be_truthy
1970
- expect(task.exists?(task_name)).to be_truthy
1971
- ensure
1972
- delete_task_with_retry(task, task_name)
1973
- end
1974
- end
1975
-
1976
- it 'is case insensitive' do
1977
- task_name = name + 'abc' # name is a guid, but might not have alpha chars
1978
-
1979
- begin
1980
- task = Win32::TaskScheduler.new(task_name.upcase, { 'trigger_type' => Win32::TaskScheduler::ONCE })
1981
- task.save()
1982
-
1983
- expect(task.exists?(task_name.downcase)).to be_truthy
1984
- ensure
1985
- delete_task_with_retry(task, task_name)
1986
- end
1987
- end
1988
- end
1989
-
1990
- describe 'does not corrupt tasks' do
1991
- it 'when setting maximum length values for all settings' do
1992
- begin
1993
- task = Win32::TaskScheduler.new(name, { 'trigger_type' => Win32::TaskScheduler::ONCE })
1994
-
1995
- application_name = 'a' * Win32::TaskScheduler::MAX_PATH
1996
- parameters = 'b' * Win32::TaskScheduler::MAX_PARAMETERS_LENGTH
1997
- working_directory = 'c' * Win32::TaskScheduler::MAX_PATH
1998
- comment = 'd' * Win32::TaskScheduler::MAX_COMMENT_LENGTH
1999
- creator = 'e' * Win32::TaskScheduler::MAX_ACCOUNT_LENGTH
2000
-
2001
- task.application_name = application_name
2002
- task.parameters = parameters
2003
- task.working_directory = working_directory
2004
- task.comment = comment
2005
- task.creator = creator
2006
-
2007
- # saving and reloading (activating) can induce COM load errors when
2008
- # file is corrupted, which can happen when the upper bounds of these lengths are set too high
2009
- task.save()
2010
- task.activate(name)
2011
-
2012
- # furthermore, corrupted values may not necessarily be read back properly
2013
- # note that SYSTEM is always returned as an empty string in account_information
2014
- expect(task.account_information).to eq('')
2015
- expect(task.application_name).to eq(application_name)
2016
- expect(task.parameters).to eq(parameters)
2017
- expect(task.working_directory).to eq(working_directory)
2018
- expect(task.comment).to eq(comment)
2019
- expect(task.creator).to eq(creator)
2020
- ensure
2021
- delete_task_with_retry(task, name)
2022
- end
2023
- end
2024
-
2025
- it 'by preventing a save() not preceded by a set_account_information()' do
2026
- begin
2027
- # creates a default new task with SYSTEM user
2028
- task = Win32::TaskScheduler.new(name, { 'trigger_type' => Win32::TaskScheduler::ONCE })
2029
- # save automatically resets the current task
2030
- task.save()
2031
-
2032
- # re-activate named task, try to modify, and save
2033
- task.activate(name)
2034
- task.application_name = 'c:/windows/system32/notepad.exe'
2035
-
2036
- expect { task.save() }.to raise_error(Puppet::Error, /Account information must be set on the current task to save it properly/)
2037
-
2038
- # on a failed save, the current task is still active - add SYSTEM
2039
- task.set_account_information('', nil)
2040
- expect(task.save()).to be_instance_of(Win32::TaskScheduler::COM::Task)
2041
-
2042
- # the most appropriate additional validation here would be to confirm settings with schtasks.exe
2043
- # but that test can live inside a system-level acceptance test
2044
- ensure
2045
- delete_task_with_retry(task, name)
2046
- end
2047
- end
2048
- end
2049
- end
2050
- end