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,8 +1,11 @@
1
- #! /usr/bin/env ruby
1
+ #!/usr/bin/env ruby
2
2
  require 'spec_helper'
3
+ require 'puppet/test_ca'
3
4
 
4
5
  require 'puppet/ssl/host'
5
6
  require 'matchers/json'
7
+ require 'puppet_spec/ssl'
8
+ require 'puppet/rest/routes'
6
9
 
7
10
  def base_json_comparison(result, json_hash)
8
11
  expect(result["fingerprint"]).to eq(json_hash["fingerprint"])
@@ -10,13 +13,11 @@ def base_json_comparison(result, json_hash)
10
13
  expect(result["state"]).to eq(json_hash["desired_state"])
11
14
  end
12
15
 
13
- describe Puppet::SSL::Host do
16
+ describe Puppet::SSL::Host, if: !Puppet::Util::Platform.jruby? do
14
17
  include JSONMatchers
15
18
  include PuppetSpec::Files
16
19
 
17
20
  before do
18
- Puppet::SSL::Host.indirection.terminus_class = :file
19
-
20
21
  # Get a safe temporary file
21
22
  dir = tmpdir("ssl_host_testing")
22
23
  Puppet.settings[:confdir] = dir
@@ -29,7 +30,6 @@ describe Puppet::SSL::Host do
29
30
  after do
30
31
  # Cleaned out any cached localhost instance.
31
32
  Puppet::SSL::Host.reset
32
- Puppet::SSL::Host.ca_location = :none
33
33
  end
34
34
 
35
35
  it "should use any provided name as its name" do
@@ -46,59 +46,45 @@ describe Puppet::SSL::Host do
46
46
  expect(@host.public_key).to equal(pubkey)
47
47
  end
48
48
 
49
- it "should default to being a non-ca host" do
50
- expect(@host.ca?).to be_falsey
51
- end
52
-
53
- it "should be a ca host if its name matches the CA_NAME" do
54
- Puppet::SSL::Host.stubs(:ca_name).returns "yayca"
55
- expect(Puppet::SSL::Host.new("yayca")).to be_ca
56
- end
57
-
58
- it "should have a method for determining the CA location" do
59
- expect(Puppet::SSL::Host).to respond_to(:ca_location)
60
- end
61
-
62
- it "should have a method for specifying the CA location" do
63
- expect(Puppet::SSL::Host).to respond_to(:ca_location=)
64
- end
65
-
66
- it "should have a method for retrieving the default ssl host" do
67
- expect(Puppet::SSL::Host).to respond_to(:ca_location=)
68
- end
49
+ describe 'localhost' do
50
+ before(:each) do
51
+ Puppet::SSL::Host.any_instance.stubs(:certificate).returns nil
52
+ Puppet::SSL::Host.any_instance.stubs(:generate)
53
+ end
69
54
 
70
- it "should have a method for producing an instance to manage the local host's keys" do
71
- expect(Puppet::SSL::Host).to respond_to(:localhost)
72
- end
55
+ it "should have a method for producing an instance to manage the local host's keys" do
56
+ expect(Puppet::SSL::Host).to respond_to(:localhost)
57
+ end
73
58
 
74
- it "should allow to reset localhost" do
75
- previous_host = Puppet::SSL::Host.localhost
76
- Puppet::SSL::Host.reset
77
- expect(Puppet::SSL::Host.localhost).not_to eq(previous_host)
78
- end
59
+ it "should allow to reset localhost" do
60
+ previous_host = Puppet::SSL::Host.localhost
61
+ Puppet::SSL::Host.reset
62
+ expect(Puppet::SSL::Host.localhost).not_to eq(previous_host)
63
+ end
79
64
 
80
- it "should generate the certificate for the localhost instance if no certificate is available" do
81
- host = stub 'host', :key => nil
82
- Puppet::SSL::Host.expects(:new).returns host
65
+ it "should generate the certificate for the localhost instance if no certificate is available" do
66
+ host = stub 'host', :key => nil
67
+ Puppet::SSL::Host.expects(:new).returns host
83
68
 
84
- host.expects(:certificate).returns nil
85
- host.expects(:generate)
69
+ host.expects(:certificate).returns nil
70
+ host.expects(:generate)
86
71
 
87
- expect(Puppet::SSL::Host.localhost).to equal(host)
88
- end
72
+ expect(Puppet::SSL::Host.localhost).to equal(host)
73
+ end
89
74
 
90
- it "should create a localhost cert if no cert is available and it is a CA with autosign and it is using DNS alt names", :unless => Puppet.features.microsoft_windows? do
91
- Puppet[:autosign] = true
92
- Puppet[:confdir] = tmpdir('conf')
93
- Puppet[:dns_alt_names] = "foo,bar,baz"
94
- ca = Puppet::SSL::CertificateAuthority.new
95
- Puppet::SSL::CertificateAuthority.stubs(:instance).returns ca
75
+ it "should always read the key for the localhost instance in from disk" do
76
+ host = stub 'host', :certificate => "eh"
77
+ host.expects(:key)
78
+ Puppet::SSL::Host.expects(:new).returns host
96
79
 
97
- localhost = Puppet::SSL::Host.localhost
98
- cert = localhost.certificate
80
+ Puppet::SSL::Host.localhost
81
+ end
99
82
 
100
- expect(cert).to be_a(Puppet::SSL::Certificate)
101
- expect(cert.subject_alt_names).to match_array(%W[DNS:#{Puppet[:certname]} DNS:foo DNS:bar DNS:baz])
83
+ it "should cache the localhost instance" do
84
+ host = stub 'host', :certificate => "eh", :key => 'foo'
85
+ Puppet::SSL::Host.expects(:new).once.returns host
86
+ expect(Puppet::SSL::Host.localhost).to eq(Puppet::SSL::Host.localhost)
87
+ end
102
88
  end
103
89
 
104
90
  context "with dns_alt_names" do
@@ -108,9 +94,9 @@ describe Puppet::SSL::Host do
108
94
  Puppet::SSL::Key.stubs(:new).returns key
109
95
  Puppet::SSL::Key.indirection.stubs(:save).with(key)
110
96
 
111
- @cr = stub('certificate request')
97
+ @cr = stub('certificate request', :render => "csr pem")
112
98
  Puppet::SSL::CertificateRequest.stubs(:new).returns @cr
113
- Puppet::SSL::CertificateRequest.indirection.stubs(:save).with(@cr)
99
+ Puppet::SSL::Host.any_instance.stubs(:submit_certificate_request)
114
100
  end
115
101
 
116
102
  describe "explicitly specified" do
@@ -121,78 +107,17 @@ describe Puppet::SSL::Host do
121
107
  it "should not include subjectAltName if not the local node" do
122
108
  @cr.expects(:generate).with(@key, {})
123
109
 
124
- Puppet::SSL::Host.new('not-the-' + Puppet[:certname]).generate
125
- end
126
-
127
- it "should include subjectAltName if I am a CA" do
128
- @cr.expects(:generate).
129
- with(@key, { :dns_alt_names => Puppet[:dns_alt_names] })
130
-
131
- Puppet::SSL::Host.localhost
132
- end
133
- end
134
-
135
- describe "implicitly defaulted" do
136
- let(:ca) { stub('ca', :sign => nil) }
137
-
138
- before :each do
139
- Puppet[:dns_alt_names] = ''
140
-
141
- Puppet::SSL::CertificateAuthority.stubs(:instance).returns ca
142
- end
143
-
144
- it "should not include defaults if we're not the CA" do
145
- Puppet::SSL::CertificateAuthority.stubs(:ca?).returns false
146
-
147
- @cr.expects(:generate).with(@key, {})
148
-
149
- Puppet::SSL::Host.localhost
110
+ Puppet::SSL::Host.new('not-the-' + Puppet[:certname]).generate_certificate_request
150
111
  end
151
112
 
152
- it "should not include defaults if not the local node" do
153
- Puppet::SSL::CertificateAuthority.stubs(:ca?).returns true
154
-
155
- @cr.expects(:generate).with(@key, {})
156
-
157
- Puppet::SSL::Host.new('not-the-' + Puppet[:certname]).generate
158
- end
159
-
160
- it "should not include defaults if we can't resolve our fqdn" do
161
- Puppet::SSL::CertificateAuthority.stubs(:ca?).returns true
162
- Facter.stubs(:value).with(:fqdn).returns nil
163
-
164
- @cr.expects(:generate).with(@key, {})
165
-
166
- Puppet::SSL::Host.localhost
167
- end
168
-
169
- it "should provide defaults if we're bootstrapping the local master" do
170
- Puppet::SSL::CertificateAuthority.stubs(:ca?).returns true
171
- Facter.stubs(:value).with(:fqdn).returns 'web.foo.com'
172
- Facter.stubs(:value).with(:domain).returns 'foo.com'
173
-
174
- @cr.expects(:generate).with(@key, {:dns_alt_names => "puppet, web.foo.com, puppet.foo.com"})
113
+ it "should include subjectAltName if the local node" do
114
+ @cr.expects(:generate).with(@key, { :dns_alt_names => 'one, two' })
175
115
 
176
- Puppet::SSL::Host.localhost
116
+ Puppet::SSL::Host.new(Puppet[:certname]).generate_certificate_request
177
117
  end
178
118
  end
179
119
  end
180
120
 
181
- it "should always read the key for the localhost instance in from disk" do
182
- host = stub 'host', :certificate => "eh"
183
- Puppet::SSL::Host.expects(:new).returns host
184
-
185
- host.expects(:key)
186
-
187
- Puppet::SSL::Host.localhost
188
- end
189
-
190
- it "should cache the localhost instance" do
191
- host = stub 'host', :certificate => "eh", :key => 'foo'
192
- Puppet::SSL::Host.expects(:new).once.returns host
193
- expect(Puppet::SSL::Host.localhost).to eq(Puppet::SSL::Host.localhost)
194
- end
195
-
196
121
  it "should be able to verify its certificate matches its key" do
197
122
  expect(Puppet::SSL::Host.new("foo")).to respond_to(:validate_certificate_with_key)
198
123
  end
@@ -200,16 +125,14 @@ describe Puppet::SSL::Host do
200
125
  it "should consider the certificate invalid if it cannot find a key" do
201
126
  host = Puppet::SSL::Host.new("foo")
202
127
  certificate = mock('cert', :fingerprint => 'DEADBEEF')
203
- host.expects(:certificate).twice.returns certificate
204
128
  host.expects(:key).returns nil
205
- expect { host.validate_certificate_with_key }.to raise_error(Puppet::Error, "No private key with which to validate certificate with fingerprint: DEADBEEF")
129
+ expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, "No private key with which to validate certificate with fingerprint: DEADBEEF")
206
130
  end
207
131
 
208
132
  it "should consider the certificate invalid if it cannot find a certificate" do
209
133
  host = Puppet::SSL::Host.new("foo")
210
134
  host.expects(:key).never
211
- host.expects(:certificate).returns nil
212
- expect { host.validate_certificate_with_key }.to raise_error(Puppet::Error, "No certificate to validate.")
135
+ expect { host.validate_certificate_with_key(nil) }.to raise_error(Puppet::Error, "No certificate to validate.")
213
136
  end
214
137
 
215
138
  it "should consider the certificate invalid if the SSL certificate's key verification fails" do
@@ -218,9 +141,8 @@ describe Puppet::SSL::Host do
218
141
  sslcert = mock 'sslcert'
219
142
  certificate = mock 'cert', {:content => sslcert, :fingerprint => 'DEADBEEF'}
220
143
  host.stubs(:key).returns key
221
- host.stubs(:certificate).returns certificate
222
144
  sslcert.expects(:check_private_key).with("private_key").returns false
223
- expect { host.validate_certificate_with_key }.to raise_error(Puppet::Error, /DEADBEEF/)
145
+ expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, /DEADBEEF/)
224
146
  end
225
147
 
226
148
  it "should consider the certificate valid if the SSL certificate's key verification succeeds" do
@@ -229,147 +151,8 @@ describe Puppet::SSL::Host do
229
151
  sslcert = mock 'sslcert'
230
152
  certificate = mock 'cert', :content => sslcert
231
153
  host.stubs(:key).returns key
232
- host.stubs(:certificate).returns certificate
233
154
  sslcert.expects(:check_private_key).with("private_key").returns true
234
- expect{ host.validate_certificate_with_key }.not_to raise_error
235
- end
236
-
237
- describe "when specifying the CA location" do
238
- it "should support the location ':local'" do
239
- expect { Puppet::SSL::Host.ca_location = :local }.not_to raise_error
240
- end
241
-
242
- it "should support the location ':remote'" do
243
- expect { Puppet::SSL::Host.ca_location = :remote }.not_to raise_error
244
- end
245
-
246
- it "should support the location ':none'" do
247
- expect { Puppet::SSL::Host.ca_location = :none }.not_to raise_error
248
- end
249
-
250
- it "should support the location ':only'" do
251
- expect { Puppet::SSL::Host.ca_location = :only }.not_to raise_error
252
- end
253
-
254
- it "should not support other modes" do
255
- expect { Puppet::SSL::Host.ca_location = :whatever }.to raise_error(ArgumentError)
256
- end
257
-
258
- describe "as 'local'" do
259
- before do
260
- Puppet::SSL::Host.ca_location = :local
261
- end
262
-
263
- it "should set the cache class for Certificate, CertificateRevocationList, and CertificateRequest as :file" do
264
- expect(Puppet::SSL::Certificate.indirection.cache_class).to eq(:file)
265
- expect(Puppet::SSL::CertificateRequest.indirection.cache_class).to eq(:file)
266
- expect(Puppet::SSL::CertificateRevocationList.indirection.cache_class).to eq(:file)
267
- end
268
-
269
- it "should set the terminus class for Key and Host as :file" do
270
- expect(Puppet::SSL::Key.indirection.terminus_class).to eq(:file)
271
- expect(Puppet::SSL::Host.indirection.terminus_class).to eq(:file)
272
- end
273
-
274
- it "should set the terminus class for Certificate, CertificateRevocationList, and CertificateRequest as :ca" do
275
- expect(Puppet::SSL::Certificate.indirection.terminus_class).to eq(:ca)
276
- expect(Puppet::SSL::CertificateRequest.indirection.terminus_class).to eq(:ca)
277
- expect(Puppet::SSL::CertificateRevocationList.indirection.terminus_class).to eq(:ca)
278
- end
279
- end
280
-
281
- describe "as 'remote'" do
282
- before do
283
- Puppet::SSL::Host.ca_location = :remote
284
- end
285
-
286
- it "should set the cache class for Certificate, CertificateRevocationList, and CertificateRequest as :file" do
287
- expect(Puppet::SSL::Certificate.indirection.cache_class).to eq(:file)
288
- expect(Puppet::SSL::CertificateRequest.indirection.cache_class).to eq(:file)
289
- expect(Puppet::SSL::CertificateRevocationList.indirection.cache_class).to eq(:file)
290
- end
291
-
292
- it "should set the terminus class for Key as :file" do
293
- expect(Puppet::SSL::Key.indirection.terminus_class).to eq(:file)
294
- end
295
-
296
- it "should set the terminus class for Host, Certificate, CertificateRevocationList, and CertificateRequest as :rest" do
297
- expect(Puppet::SSL::Host.indirection.terminus_class).to eq(:rest)
298
- expect(Puppet::SSL::Certificate.indirection.terminus_class).to eq(:rest)
299
- expect(Puppet::SSL::CertificateRequest.indirection.terminus_class).to eq(:rest)
300
- expect(Puppet::SSL::CertificateRevocationList.indirection.terminus_class).to eq(:rest)
301
- end
302
- end
303
-
304
- describe "as 'only'" do
305
- before do
306
- Puppet::SSL::Host.ca_location = :only
307
- end
308
-
309
- it "should set the terminus class for Key, Certificate, CertificateRevocationList, and CertificateRequest as :ca" do
310
- expect(Puppet::SSL::Key.indirection.terminus_class).to eq(:ca)
311
- expect(Puppet::SSL::Certificate.indirection.terminus_class).to eq(:ca)
312
- expect(Puppet::SSL::CertificateRequest.indirection.terminus_class).to eq(:ca)
313
- expect(Puppet::SSL::CertificateRevocationList.indirection.terminus_class).to eq(:ca)
314
- end
315
-
316
- it "should set the cache class for Certificate, CertificateRevocationList, and CertificateRequest to nil" do
317
- expect(Puppet::SSL::Certificate.indirection.cache_class).to be_nil
318
- expect(Puppet::SSL::CertificateRequest.indirection.cache_class).to be_nil
319
- expect(Puppet::SSL::CertificateRevocationList.indirection.cache_class).to be_nil
320
- end
321
-
322
- it "should set the terminus class for Host to :file" do
323
- expect(Puppet::SSL::Host.indirection.terminus_class).to eq(:file)
324
- end
325
- end
326
-
327
- describe "as 'none'" do
328
- before do
329
- Puppet::SSL::Host.ca_location = :none
330
- end
331
-
332
- it "should set the terminus class for Key, Certificate, CertificateRevocationList, and CertificateRequest as :file" do
333
- expect(Puppet::SSL::Key.indirection.terminus_class).to eq(:disabled_ca)
334
- expect(Puppet::SSL::Certificate.indirection.terminus_class).to eq(:disabled_ca)
335
- expect(Puppet::SSL::CertificateRequest.indirection.terminus_class).to eq(:disabled_ca)
336
- expect(Puppet::SSL::CertificateRevocationList.indirection.terminus_class).to eq(:disabled_ca)
337
- end
338
-
339
- it "should set the terminus class for Host to 'none'" do
340
- expect { Puppet::SSL::Host.indirection.terminus_class }.to raise_error(Puppet::DevError)
341
- end
342
- end
343
- end
344
-
345
- it "should have a class method for destroying all files related to a given host" do
346
- expect(Puppet::SSL::Host).to respond_to(:destroy)
347
- end
348
-
349
- describe "when destroying a host's SSL files" do
350
- before do
351
- Puppet::SSL::Key.indirection.stubs(:destroy).returns false
352
- Puppet::SSL::Certificate.indirection.stubs(:destroy).returns false
353
- Puppet::SSL::CertificateRequest.indirection.stubs(:destroy).returns false
354
- end
355
-
356
- it "should destroy its certificate, certificate request, and key" do
357
- Puppet::SSL::Key.indirection.expects(:destroy).with("myhost")
358
- Puppet::SSL::Certificate.indirection.expects(:destroy).with("myhost")
359
- Puppet::SSL::CertificateRequest.indirection.expects(:destroy).with("myhost")
360
-
361
- Puppet::SSL::Host.destroy("myhost")
362
- end
363
-
364
- it "should return true if any of the classes returned true" do
365
- Puppet::SSL::Certificate.indirection.expects(:destroy).with("myhost").returns true
366
-
367
- expect(Puppet::SSL::Host.destroy("myhost")).to be_truthy
368
- end
369
-
370
- it "should report that nothing was deleted if none of the classes returned true" do
371
- expect(Puppet::SSL::Host.destroy("myhost")).to eq("Nothing was deleted")
372
- end
155
+ expect{ host.validate_certificate_with_key(certificate) }.not_to raise_error
373
156
  end
374
157
 
375
158
  describe "when initializing" do
@@ -382,11 +165,6 @@ describe Puppet::SSL::Host do
382
165
  it "should downcase a passed in name" do
383
166
  expect(Puppet::SSL::Host.new("Host.Domain.Com").name).to eq("host.domain.com")
384
167
  end
385
-
386
- it "should indicate that it is a CA host if its name matches the ca_name constant" do
387
- Puppet::SSL::Host.stubs(:ca_name).returns "myca"
388
- expect(Puppet::SSL::Host.new("myca")).to be_ca
389
- end
390
168
  end
391
169
 
392
170
  describe "when managing its private key" do
@@ -434,67 +212,63 @@ describe Puppet::SSL::Host do
434
212
  end
435
213
 
436
214
  describe "when managing its certificate request" do
437
- before do
438
- @realrequest = "real request"
439
- @request = Puppet::SSL::CertificateRequest.new("myname")
440
- @request.content = @realrequest
215
+ before(:all) do
216
+ @pki = PuppetSpec::SSL.create_chained_pki
441
217
  end
442
218
 
443
- it "should return nil if the key is not set and cannot be found" do
444
- Puppet::SSL::CertificateRequest.indirection.expects(:find).with("myname").returns(nil)
445
- expect(@host.certificate_request).to be_nil
219
+ before(:each) do
220
+ Puppet[:requestdir] = tmpdir('requests')
446
221
  end
447
222
 
448
- it "should find the request in the Key class and return it and return the Puppet SSL request" do
449
- Puppet::SSL::CertificateRequest.indirection.expects(:find).with("myname").returns @request
450
-
451
- expect(@host.certificate_request).to equal(@request)
452
- end
223
+ let(:key) { Puppet::SSL::Key.from_s(@pki[:leaf_key].to_s, @host.name) }
453
224
 
454
225
  it "should generate a new key when generating the cert request if no key exists" do
455
- Puppet::SSL::CertificateRequest.expects(:new).with("myname").returns @request
456
-
457
- key = stub 'key', :public_key => mock("public_key"), :content => "mycontent"
458
-
459
226
  @host.expects(:key).times(2).returns(nil).then.returns(key)
460
227
  @host.expects(:generate_key).returns(key)
461
228
 
462
- @request.stubs(:generate)
463
- Puppet::SSL::CertificateRequest.indirection.stubs(:save)
229
+ @host.stubs(:submit_certificate_request)
464
230
 
465
231
  @host.generate_certificate_request
232
+ expect(Puppet::FileSystem.exist?(File.join(Puppet[:requestdir], "#{@host.name}.pem"))).to be true
466
233
  end
467
234
 
468
235
  it "should be able to generate and save a new request using the private key" do
469
- Puppet::SSL::CertificateRequest.expects(:new).with("myname").returns @request
470
-
471
- key = stub 'key', :public_key => mock("public_key"), :content => "mycontent"
472
236
  @host.stubs(:key).returns(key)
473
- @request.expects(:generate).with("mycontent", {})
474
- Puppet::SSL::CertificateRequest.indirection.expects(:save).with(@request)
237
+ @host.stubs(:submit_certificate_request)
475
238
 
476
239
  expect(@host.generate_certificate_request).to be_truthy
477
- expect(@host.certificate_request).to equal(@request)
240
+ expect(Puppet::FileSystem.exist?(File.join(Puppet[:requestdir], "#{@host.name}.pem"))).to be true
241
+ end
242
+
243
+ it "should send a new request to the CA for signing" do
244
+ @http = mock("http")
245
+ @host.stubs(:http_client).returns(@http)
246
+ @host.stubs(:ssl_store).returns(mock("ssl store"))
247
+ @host.stubs(:key).returns(key)
248
+ request = mock("request")
249
+ request.stubs(:generate)
250
+ request.expects(:render).returns("my request").twice
251
+ Puppet::SSL::CertificateRequest.expects(:new).returns(request)
252
+
253
+ Puppet::Rest::Routes.expects(:put_certificate_request)
254
+ .with("my request", @host.name, anything)
255
+ .returns(nil)
256
+
257
+ expect(@host.generate_certificate_request).to be true
478
258
  end
479
259
 
480
260
  it "should return any previously found request without requerying" do
481
- Puppet::SSL::CertificateRequest.indirection.expects(:find).with("myname").returns(@request).once
261
+ request = mock("request")
262
+ @host.expects(:load_certificate_request_from_file).returns(request).once
482
263
 
483
- expect(@host.certificate_request).to equal(@request)
484
- expect(@host.certificate_request).to equal(@request)
264
+ expect(@host.certificate_request).to equal(request)
265
+ expect(@host.certificate_request).to equal(request)
485
266
  end
486
267
 
487
268
  it "should not keep its certificate request in memory if the request cannot be saved" do
488
- Puppet::SSL::CertificateRequest.expects(:new).with("myname").returns @request
489
-
490
- key = stub 'key', :public_key => mock("public_key"), :content => "mycontent"
491
269
  @host.stubs(:key).returns(key)
492
- @request.stubs(:generate)
493
- @request.stubs(:name).returns("myname")
494
- terminus = stub 'terminus'
495
- terminus.stubs(:validate)
496
- Puppet::SSL::CertificateRequest.indirection.expects(:prepare).returns(terminus)
497
- terminus.expects(:save).with { |req| req.instance == @request && req.key == "myname" }.raises "eh"
270
+ @host.stubs(:submit_certificate_request)
271
+ Puppet::Util.expects(:replace_file).raises(RuntimeError)
498
272
 
499
273
  expect { @host.generate_certificate_request }.to raise_error(RuntimeError)
500
274
 
@@ -503,114 +277,113 @@ describe Puppet::SSL::Host do
503
277
  end
504
278
 
505
279
  describe "when managing its certificate" do
506
- before do
507
- @realcert = mock 'certificate'
508
- @cert = stub 'cert', :content => @realcert
509
- @host.stubs(:key).returns mock("key")
510
- @host.stubs(:validate_certificate_with_key)
280
+ before(:all) do
281
+ @pki = PuppetSpec::SSL.create_chained_pki
511
282
  end
512
283
 
513
- it "should find the CA certificate if it does not have a certificate" do
514
- Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true).returns mock("cacert")
515
- Puppet::SSL::Certificate.indirection.stubs(:find).with("myname").returns @cert
516
- @host.certificate
284
+ before(:each) do
285
+ Puppet[:certdir] = tmpdir('certs')
286
+ @host.stubs(:key).returns mock("key")
287
+ @host.stubs(:validate_certificate_with_key)
288
+ @host.stubs(:http_client).returns(@http)
289
+ @host.stubs(:ssl_store).returns(mock("ssl store"))
517
290
  end
518
291
 
519
- it "should not find the CA certificate if it is the CA host" do
520
- @host.expects(:ca?).returns true
521
- Puppet::SSL::Certificate.indirection.stubs(:find)
522
- Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true).never
292
+ let(:ca_cert_response) { @pki[:ca_bundle] }
293
+ let(:host_cert_response) { @pki[:unrevoked_leaf_node_cert] }
523
294
 
295
+ it "should find the CA certificate and save it to disk" do
296
+ Puppet::Rest::Routes.expects(:get_certificate)
297
+ .with(Puppet::SSL::CA_NAME, anything)
298
+ .returns(ca_cert_response)
299
+ Puppet::Rest::Routes.expects(:get_certificate)
300
+ .with(@host.name, anything)
301
+ .raises(Puppet::Rest::ResponseError.new('no client cert',
302
+ mock('response', code: '404')))
524
303
  @host.certificate
304
+ actual_ca_bundle = Puppet::FileSystem.read(Puppet[:localcacert])
305
+ expect(actual_ca_bundle).to match(/BEGIN CERTIFICATE.*END CERTIFICATE.*BEGIN CERTIFICATE/m)
525
306
  end
526
307
 
527
308
  it "should return nil if it cannot find a CA certificate" do
528
- Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true).returns nil
529
- Puppet::SSL::Certificate.indirection.expects(:find).with("myname").never
309
+ @host.expects(:ensure_ca_certificate).returns(false)
310
+ @host.expects(:get_host_certificate).never
530
311
 
531
312
  expect(@host.certificate).to be_nil
532
313
  end
533
314
 
534
315
  it "should find the key if it does not have one" do
535
- Puppet::SSL::Certificate.indirection.stubs(:find)
316
+ @host.expects(:ensure_ca_certificate).returns(true)
317
+ @host.expects(:get_host_certificate).returns(nil)
536
318
  @host.expects(:key).returns mock("key")
537
319
  @host.certificate
538
320
  end
539
321
 
540
322
  it "should generate the key if one cannot be found" do
541
- Puppet::SSL::Certificate.indirection.stubs(:find)
323
+ @host.expects(:ensure_ca_certificate).returns(true)
324
+ @host.expects(:get_host_certificate).returns(nil)
542
325
  @host.expects(:key).returns nil
543
326
  @host.expects(:generate_key)
544
327
  @host.certificate
545
328
  end
546
329
 
547
- it "should find the certificate in the Certificate class and return the Puppet certificate instance" do
548
- Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true).returns mock("cacert")
549
- Puppet::SSL::Certificate.indirection.expects(:find).with("myname").returns @cert
550
- expect(@host.certificate).to equal(@cert)
330
+ it "should find the host certificate, write it to file, and return the Puppet certificate instance" do
331
+ Puppet::Rest::Routes.expects(:get_certificate)
332
+ .with(Puppet::SSL::CA_NAME, anything)
333
+ .returns(ca_cert_response)
334
+ Puppet::Rest::Routes.expects(:get_certificate)
335
+ .with(@host.name, anything)
336
+ .returns(host_cert_response)
337
+ expected_cert = Puppet::SSL::Certificate.from_s(@pki[:unrevoked_leaf_node_cert])
338
+ actual_cert = @host.certificate
339
+ expect(actual_cert).to be_a(Puppet::SSL::Certificate)
340
+ expect(actual_cert.to_s).to eq(expected_cert.to_s)
341
+ host_cert_from_file = Puppet::FileSystem.read(File.join(Puppet[:certdir], "#{@host.name}.pem"))
342
+ expect(host_cert_from_file).to eq(expected_cert.to_s)
551
343
  end
552
344
 
553
345
  it "should return any previously found certificate" do
554
- Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true).returns mock("cacert")
555
- Puppet::SSL::Certificate.indirection.expects(:find).with("myname").returns(@cert).once
346
+ cert = mock 'cert'
347
+ @host.expects(:ensure_ca_certificate).returns(true).once
348
+ @host.expects(:get_host_certificate).returns(cert).once
556
349
 
557
- expect(@host.certificate).to equal(@cert)
558
- expect(@host.certificate).to equal(@cert)
559
- end
560
- end
561
-
562
- it "should have a method for listing certificate hosts" do
563
- expect(Puppet::SSL::Host).to respond_to(:search)
564
- end
565
-
566
- describe "when listing certificate hosts" do
567
- it "should default to listing all clients with any file types" do
568
- Puppet::SSL::Key.indirection.expects(:search).returns []
569
- Puppet::SSL::Certificate.indirection.expects(:search).returns []
570
- Puppet::SSL::CertificateRequest.indirection.expects(:search).returns []
571
- Puppet::SSL::Host.search
572
- end
573
-
574
- it "should be able to list only clients with a key" do
575
- Puppet::SSL::Key.indirection.expects(:search).returns []
576
- Puppet::SSL::Certificate.indirection.expects(:search).never
577
- Puppet::SSL::CertificateRequest.indirection.expects(:search).never
578
- Puppet::SSL::Host.search :for => Puppet::SSL::Key
350
+ expect(@host.certificate).to equal(cert)
351
+ expect(@host.certificate).to equal(cert)
579
352
  end
580
353
 
581
- it "should be able to list only clients with a certificate" do
582
- Puppet::SSL::Key.indirection.expects(:search).never
583
- Puppet::SSL::Certificate.indirection.expects(:search).returns []
584
- Puppet::SSL::CertificateRequest.indirection.expects(:search).never
585
- Puppet::SSL::Host.search :for => Puppet::SSL::Certificate
586
- end
587
-
588
- it "should be able to list only clients with a certificate request" do
589
- Puppet::SSL::Key.indirection.expects(:search).never
590
- Puppet::SSL::Certificate.indirection.expects(:search).never
591
- Puppet::SSL::CertificateRequest.indirection.expects(:search).returns []
592
- Puppet::SSL::Host.search :for => Puppet::SSL::CertificateRequest
593
- end
594
-
595
- it "should return a Host instance created with the name of each found instance" do
596
- key = stub 'key', :name => "key", :to_ary => nil
597
- cert = stub 'cert', :name => "cert", :to_ary => nil
598
- csr = stub 'csr', :name => "csr", :to_ary => nil
354
+ context 'invalid certificates' do
355
+ it "should raise if the CA certificate downloaded from CA is invalid" do
356
+ Puppet::Rest::Routes.expects(:get_certificate)
357
+ .with(Puppet::SSL::CA_NAME, anything)
358
+ .returns('garbage')
359
+ expect { @host.certificate }.to raise_error(Puppet::Error, /did not contain a valid CA certificate/)
360
+ end
599
361
 
600
- Puppet::SSL::Key.indirection.expects(:search).returns [key]
601
- Puppet::SSL::Certificate.indirection.expects(:search).returns [cert]
602
- Puppet::SSL::CertificateRequest.indirection.expects(:search).returns [csr]
362
+ it "should warn if the host certificate downloaded from CA is invalid" do
363
+ Puppet::Rest::Routes.expects(:get_certificate)
364
+ .with(Puppet::SSL::CA_NAME, anything)
365
+ .returns(ca_cert_response)
366
+ Puppet::Rest::Routes.expects(:get_certificate)
367
+ .with(@host.name, anything)
368
+ .returns('garbage')
369
+ expect { @host.certificate }.to raise_error(Puppet::Error, /did not contain a valid certificate for #{@host.name}/)
370
+ end
603
371
 
604
- returned = []
605
- %w{key cert csr}.each do |name|
606
- result = mock(name)
607
- returned << result
608
- Puppet::SSL::Host.expects(:new).with(name).returns result
372
+ it 'should warn if the CA certificate loaded from disk is invalid' do
373
+ Puppet::FileSystem.open(Puppet[:localcacert], nil, "w:ASCII") do |f|
374
+ f.puts 'garbage'
375
+ end
376
+ expect { @host.certificate }.to raise_error(Puppet::Error, /The CA certificate.*invalid/)
609
377
  end
610
378
 
611
- result = Puppet::SSL::Host.search
612
- returned.each do |r|
613
- expect(result).to be_include(r)
379
+ it 'should warn if the host certificate loaded from disk in invalid' do
380
+ Puppet::Rest::Routes.expects(:get_certificate)
381
+ .with(Puppet::SSL::CA_NAME, anything)
382
+ .returns(ca_cert_response)
383
+ Puppet::FileSystem.open(File.join(Puppet[:certdir], "#{@host.name}.pem"), nil, "w:ASCII") do |f|
384
+ f.puts 'garbage'
385
+ end
386
+ expect { @host.certificate }.to raise_error(Puppet::Error, /The certificate.*invalid/)
614
387
  end
615
388
  end
616
389
  end
@@ -624,6 +397,8 @@ describe Puppet::SSL::Host do
624
397
  @host = Puppet::SSL::Host.new("me")
625
398
  @host.stubs(:generate_key)
626
399
  @host.stubs(:generate_certificate_request)
400
+ @host.stubs(:certificate_request)
401
+ @host.stubs(:certificate)
627
402
  end
628
403
 
629
404
  it "should generate a key if one is not present" do
@@ -639,110 +414,135 @@ describe Puppet::SSL::Host do
639
414
 
640
415
  @host.generate
641
416
  end
417
+ end
642
418
 
643
- describe "and it can create a certificate authority" do
644
- before do
645
- @ca = mock 'ca'
646
- Puppet::SSL::CertificateAuthority.stubs(:instance).returns @ca
647
- end
419
+ it "should have a method for creating an SSL store" do
420
+ expect(Puppet::SSL::Host.new("me")).to respond_to(:ssl_store)
421
+ end
648
422
 
649
- it "should use the CA to sign its certificate request if it does not have a certificate" do
650
- @host.expects(:certificate).returns nil
423
+ describe "when creating an SSL store" do
424
+ before do
425
+ Puppet[:localcacert] = "ssl_host_testing"
426
+ end
651
427
 
652
- @ca.expects(:sign).with(@host.name, {allow_dns_alt_names: true})
428
+ it "should accept a purpose" do
429
+ store = mock 'store'
430
+ store.stub_everything
431
+ OpenSSL::X509::Store.expects(:new).returns store
432
+ store.expects(:purpose=).with(OpenSSL::X509::PURPOSE_SSL_SERVER)
433
+ host = Puppet::SSL::Host.new("me")
434
+ host.crl_usage = false
653
435
 
654
- @host.generate
655
- end
436
+ host.ssl_store(OpenSSL::X509::PURPOSE_SSL_SERVER)
656
437
  end
657
438
 
658
- describe "and it cannot create a certificate authority" do
439
+ context "and the CRL is not on disk" do
659
440
  before do
660
- Puppet::SSL::CertificateAuthority.stubs(:instance).returns nil
441
+ @pki = PuppetSpec::SSL.create_chained_pki
442
+ @revoked_cert = @pki[:revoked_root_node_cert]
443
+ localcacert = Puppet.settings[:localcacert]
444
+ Puppet::Util.replace_file(localcacert, 0644) {|f| f.write @pki[:ca_bundle] }
445
+ @http = mock 'http'
446
+ @host.stubs(:http_client).returns(@http)
661
447
  end
662
448
 
663
- it "should seek its certificate" do
664
- @host.expects(:certificate)
449
+ after do
450
+ Puppet::FileSystem.unlink(Puppet.settings[:localcacert])
451
+ Puppet::FileSystem.unlink(Puppet.settings[:hostcrl])
452
+ end
453
+
454
+ it "retrieves it from the server" do
455
+ Puppet::Rest::Routes.expects(:get_crls)
456
+ .with(Puppet::SSL::CA_NAME, anything)
457
+ .returns(@pki[:crl_chain])
665
458
 
666
- @host.generate
459
+ @host.ssl_store
460
+ expect(Puppet::FileSystem.read(Puppet.settings[:hostcrl], :encoding => Encoding::UTF_8)).to eq(@pki[:crl_chain])
667
461
  end
668
462
  end
669
- end
670
463
 
671
- it "should have a method for creating an SSL store" do
672
- expect(Puppet::SSL::Host.new("me")).to respond_to(:ssl_store)
673
- end
464
+ describe "and a CRL is available" do
465
+ before do
466
+ pki = PuppetSpec::SSL.create_chained_pki
674
467
 
675
- it "should always return the same store" do
676
- host = Puppet::SSL::Host.new("foo")
677
- store = mock 'store'
678
- store.stub_everything
679
- OpenSSL::X509::Store.expects(:new).returns store
680
- expect(host.ssl_store).to equal(host.ssl_store)
681
- end
468
+ @revoked_cert_from_self_signed_root = pki[:revoked_root_node_cert]
469
+ @revoked_cert_from_ca_with_untrusted_chain = pki[:revoked_leaf_node_cert]
470
+ @unrevoked_cert_from_self_signed_root = pki[:unrevoked_root_node_cert]
471
+ @unrevoked_cert_from_revoked_ca = pki[:unrevoked_int_node_cert]
472
+ @unrevoked_cert_from_ca_with_untrusted_chain = pki[:unrevoked_leaf_node_cert]
682
473
 
683
- describe "when creating an SSL store" do
684
- before do
685
- @host = Puppet::SSL::Host.new("me")
686
- @store = mock 'store'
687
- @store.stub_everything
688
- OpenSSL::X509::Store.stubs(:new).returns @store
689
-
690
- Puppet[:localcacert] = "ssl_host_testing"
474
+ localcacert = Puppet.settings[:localcacert]
475
+ hostcrl = Puppet.settings[:hostcrl]
691
476
 
692
- Puppet::SSL::CertificateRevocationList.indirection.stubs(:find).returns(nil)
693
- end
477
+ Puppet::Util.replace_file(localcacert, 0644) {|f| f.write pki[:ca_bundle] }
478
+ Puppet::Util.replace_file(hostcrl, 0644) {|f| f.write pki[:crl_chain] }
479
+ end
694
480
 
695
- it "should accept a purpose" do
696
- @store.expects(:purpose=).with "my special purpose"
697
- @host.ssl_store("my special purpose")
698
- end
481
+ after do
482
+ Puppet::FileSystem.unlink(Puppet.settings[:localcacert])
483
+ Puppet::FileSystem.unlink(Puppet.settings[:hostcrl])
484
+ end
699
485
 
700
- it "should default to OpenSSL::X509::PURPOSE_ANY as the purpose" do
701
- @store.expects(:purpose=).with OpenSSL::X509::PURPOSE_ANY
702
- @host.ssl_store
703
- end
486
+ [true, :chain].each do |crl_setting|
487
+ describe "and 'certificate_revocation' is #{crl_setting}" do
488
+ before do
489
+ @host = Puppet::SSL::Host.new(crl_setting.to_s)
490
+ @host.crl_usage = crl_setting
491
+ end
704
492
 
705
- it "should add the local CA cert file" do
706
- Puppet[:localcacert] = "/ca/cert/file"
707
- @store.expects(:add_file).with Puppet[:localcacert]
708
- @host.ssl_store
709
- end
493
+ it "should verify unrevoked certs" do
494
+ expect(
495
+ @host.ssl_store.verify(@unrevoked_cert_from_self_signed_root)
496
+ ).to be true
497
+ end
710
498
 
711
- describe "and a CRL is available" do
712
- before do
713
- @crl = stub 'crl', :content => "real_crl"
714
- Puppet::SSL::CertificateRevocationList.indirection.stubs(:find).returns @crl
499
+ it "should not verify revoked certs" do
500
+ [@revoked_cert_from_self_signed_root,
501
+ @revoked_cert_from_ca_with_untrusted_chain,
502
+ @unrevoked_cert_from_revoked_ca,
503
+ @unrevoked_cert_from_ca_with_untrusted_chain].each do |cert|
504
+ expect(@host.ssl_store.verify(cert)).to be false
505
+ end
506
+ end
507
+ end
715
508
  end
716
509
 
717
- describe "and 'certificate_revocation' is true" do
510
+ describe "and 'certificate_revocation' is leaf" do
718
511
  before do
719
- Puppet[:certificate_revocation] = true
512
+ @host = Puppet::SSL::Host.new("leaf")
513
+ @host.crl_usage = :leaf
720
514
  end
721
515
 
722
- it "should add the CRL" do
723
- @store.expects(:add_crl).with "real_crl"
724
- @host.ssl_store
516
+ it "should verify unrevoked certs regardless of signing CA's revocation status" do
517
+ [@unrevoked_cert_from_self_signed_root,
518
+ @unrevoked_cert_from_revoked_ca,
519
+ @unrevoked_cert_from_ca_with_untrusted_chain].each do |cert|
520
+ expect(@host.ssl_store.verify(cert)).to be true
521
+ end
725
522
  end
726
523
 
727
- it "should set the flags to OpenSSL::X509::V_FLAG_CRL_CHECK_ALL|OpenSSL::X509::V_FLAG_CRL_CHECK" do
728
- @store.expects(:flags=).with OpenSSL::X509::V_FLAG_CRL_CHECK_ALL|OpenSSL::X509::V_FLAG_CRL_CHECK
729
- @host.ssl_store
524
+ it "should not verify certs revoked by their signing CA" do
525
+ [@revoked_cert_from_self_signed_root,
526
+ @revoked_cert_from_ca_with_untrusted_chain].each do |cert|
527
+ expect(@host.ssl_store.verify(cert)).to be false
528
+ end
730
529
  end
731
530
  end
732
531
 
733
532
  describe "and 'certificate_revocation' is false" do
734
533
  before do
735
- Puppet[:certificate_revocation] = false
736
- end
737
-
738
- it "should not add the CRL" do
739
- @store.expects(:add_crl).never
740
- @host.ssl_store
534
+ @host = Puppet::SSL::Host.new("host")
535
+ @host.crl_usage = false
741
536
  end
742
537
 
743
- it "should not set the flags" do
744
- @store.expects(:flags=).never
745
- @host.ssl_store
538
+ it "should verify valid certs regardless of revocation status" do
539
+ [@revoked_cert_from_self_signed_root,
540
+ @revoked_cert_from_ca_with_untrusted_chain,
541
+ @unrevoked_cert_from_self_signed_root,
542
+ @unrevoked_cert_from_revoked_ca,
543
+ @unrevoked_cert_from_ca_with_untrusted_chain].each do |cert|
544
+ expect(@host.ssl_store.verify(cert)).to be true
545
+ end
746
546
  end
747
547
  end
748
548
  end
@@ -806,135 +606,4 @@ describe Puppet::SSL::Host do
806
606
  @host.wait_for_cert(1)
807
607
  end
808
608
  end
809
-
810
- describe "when handling JSON", :unless => Puppet.features.microsoft_windows? do
811
- include PuppetSpec::Files
812
-
813
- before do
814
- Puppet[:vardir] = tmpdir("ssl_test_vardir")
815
- Puppet[:ssldir] = tmpdir("ssl_test_ssldir")
816
- # localcacert is where each client stores the CA certificate
817
- # cacert is where the master stores the CA certificate
818
- # Since we need to play the role of both for testing we need them to be the same and exist
819
- Puppet[:cacert] = Puppet[:localcacert]
820
-
821
- @ca=Puppet::SSL::CertificateAuthority.new
822
- end
823
-
824
- describe "when converting to JSON" do
825
- let(:host) do
826
- Puppet::SSL::Host.new("bazinga")
827
- end
828
-
829
- let(:json_hash) do
830
- {
831
- "fingerprint" => host.certificate_request.fingerprint,
832
- "desired_state" => 'requested',
833
- "name" => host.name
834
- }
835
- end
836
-
837
- it "should be able to identify a host with an unsigned certificate request" do
838
- host.generate_certificate_request
839
-
840
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
841
-
842
- base_json_comparison result, json_hash
843
- end
844
-
845
- it "should validate against the schema" do
846
- host.generate_certificate_request
847
-
848
- expect(host.to_json).to validate_against('api/schemas/host.json')
849
- end
850
-
851
- describe "explicit fingerprints" do
852
- [:SHA1, :SHA256, :SHA512].each do |md|
853
- it "should include #{md}" do
854
- mds = md.to_s
855
- host.generate_certificate_request
856
- json_hash["fingerprints"] = {}
857
- json_hash["fingerprints"][mds] = host.certificate_request.fingerprint(md)
858
-
859
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
860
- base_json_comparison result, json_hash
861
- expect(result["fingerprints"][mds]).to eq(json_hash["fingerprints"][mds])
862
- end
863
- end
864
- end
865
-
866
- describe "dns_alt_names" do
867
- describe "when not specified" do
868
- it "should include the dns_alt_names associated with the certificate" do
869
- host.generate_certificate_request
870
- json_hash["desired_alt_names"] = host.certificate_request.subject_alt_names
871
-
872
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
873
- base_json_comparison result, json_hash
874
- expect(result["dns_alt_names"]).to eq(json_hash["desired_alt_names"])
875
- end
876
- end
877
-
878
- [ "",
879
- "test, alt, names"
880
- ].each do |alt_names|
881
- describe "when #{alt_names}" do
882
- before(:each) do
883
- host.generate_certificate_request :dns_alt_names => alt_names
884
- end
885
-
886
- it "should include the dns_alt_names associated with the certificate" do
887
- json_hash["desired_alt_names"] = host.certificate_request.subject_alt_names
888
-
889
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
890
- base_json_comparison result, json_hash
891
- expect(result["dns_alt_names"]).to eq(json_hash["desired_alt_names"])
892
- end
893
-
894
- it "should validate against the schema" do
895
- expect(host.to_json).to validate_against('api/schemas/host.json')
896
- end
897
- end
898
- end
899
- end
900
-
901
- it "should be able to identify a host with a signed certificate" do
902
- host.generate_certificate_request
903
- @ca.sign(host.name)
904
- json_hash = {
905
- "fingerprint" => Puppet::SSL::Certificate.indirection.find(host.name).fingerprint,
906
- "desired_state" => 'signed',
907
- "name" => host.name,
908
- }
909
-
910
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
911
- base_json_comparison result, json_hash
912
- end
913
-
914
- it "should be able to identify a host with a revoked certificate" do
915
- host.generate_certificate_request
916
- @ca.sign(host.name)
917
- @ca.revoke(host.name)
918
- json_hash["fingerprint"] = Puppet::SSL::Certificate.indirection.find(host.name).fingerprint
919
- json_hash["desired_state"] = 'revoked'
920
-
921
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
922
- base_json_comparison result, json_hash
923
- end
924
- end
925
-
926
- describe "when converting from JSON" do
927
- it "should return a Puppet::SSL::Host object with the specified desired state" do
928
- host = Puppet::SSL::Host.new("bazinga")
929
- host.desired_state="signed"
930
- json_hash = {
931
- "name" => host.name,
932
- "desired_state" => host.desired_state,
933
- }
934
- generated_host = Puppet::SSL::Host.from_data_hash(json_hash)
935
- expect(generated_host.desired_state).to eq(host.desired_state)
936
- expect(generated_host.name).to eq(host.name)
937
- end
938
- end
939
- end
940
609
  end