puppet 5.0.0 → 6.0.0

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