puppet 5.5.22 → 6.0.0

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

Potentially problematic release.


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

Files changed (1407) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +46 -72
  3. data/Gemfile.lock +86 -102
  4. data/MAINTAINERS +47 -0
  5. data/Rakefile +15 -19
  6. data/ext/build_defaults.yaml +0 -1
  7. data/ext/cert_inspector +3 -3
  8. data/ext/debian/copyright +0 -22
  9. data/ext/project_data.yaml +8 -10
  10. data/ext/puppet-test +2 -2
  11. data/ext/redhat/puppet.spec.erb +0 -4
  12. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  13. data/ext/solaris/smf/puppet.xml +0 -2
  14. data/ext/solaris/smf/svc-puppetd +1 -8
  15. data/ext/solaris/smf/svc-puppetmasterd +1 -8
  16. data/ext/windows/eventlog/Rakefile +32 -0
  17. data/ext/windows/eventlog/puppetres.dll +0 -0
  18. data/ext/windows/eventlog/puppetres.mc +18 -0
  19. data/ext/windows/service/daemon.rb +8 -54
  20. data/install.rb +24 -6
  21. data/lib/hiera/scope.rb +0 -7
  22. data/lib/puppet.rb +10 -21
  23. data/lib/puppet/agent.rb +13 -5
  24. data/lib/puppet/application.rb +10 -8
  25. data/lib/puppet/application/agent.rb +3 -21
  26. data/lib/puppet/application/apply.rb +22 -12
  27. data/lib/puppet/application/cert.rb +25 -180
  28. data/lib/puppet/application/describe.rb +9 -3
  29. data/lib/puppet/application/device.rb +41 -74
  30. data/lib/puppet/application/doc.rb +5 -3
  31. data/lib/puppet/application/filebucket.rb +1 -23
  32. data/lib/puppet/application/lookup.rb +2 -2
  33. data/lib/puppet/application/resource.rb +4 -4
  34. data/lib/puppet/application/script.rb +3 -3
  35. data/lib/puppet/application/ssl.rb +133 -0
  36. data/lib/puppet/application_support.rb +1 -2
  37. data/lib/puppet/configurer.rb +62 -127
  38. data/lib/puppet/configurer/downloader.rb +17 -34
  39. data/lib/puppet/configurer/fact_handler.rb +5 -1
  40. data/lib/puppet/configurer/plugin_handler.rb +2 -3
  41. data/lib/puppet/confine/false.rb +1 -7
  42. data/lib/puppet/confine/true.rb +1 -7
  43. data/lib/puppet/daemon.rb +2 -2
  44. data/lib/puppet/datatypes.rb +1 -1
  45. data/lib/puppet/defaults.rb +126 -286
  46. data/lib/puppet/environments.rb +2 -7
  47. data/lib/puppet/error.rb +14 -10
  48. data/lib/puppet/etc.rb +4 -25
  49. data/lib/puppet/external/dot.rb +23 -17
  50. data/lib/puppet/face/config.rb +50 -12
  51. data/lib/puppet/face/epp.rb +2 -2
  52. data/lib/puppet/face/facts.rb +1 -1
  53. data/lib/puppet/face/help.rb +21 -7
  54. data/lib/puppet/face/help/global.erb +2 -2
  55. data/lib/puppet/face/module/build.rb +4 -59
  56. data/lib/puppet/face/module/generate.rb +5 -247
  57. data/lib/puppet/face/module/install.rb +0 -4
  58. data/lib/puppet/face/module/list.rb +5 -10
  59. data/lib/puppet/face/module/search.rb +2 -2
  60. data/lib/puppet/face/module/uninstall.rb +1 -5
  61. data/lib/puppet/face/module/upgrade.rb +1 -5
  62. data/lib/puppet/face/node/clean.rb +14 -10
  63. data/lib/puppet/face/plugin.rb +2 -9
  64. data/lib/puppet/feature/base.rb +7 -26
  65. data/lib/puppet/feature/eventlog.rb +1 -1
  66. data/lib/puppet/file_bucket/dipper.rb +1 -1
  67. data/lib/puppet/file_serving/base.rb +7 -7
  68. data/lib/puppet/file_serving/fileset.rb +2 -2
  69. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  70. data/lib/puppet/file_serving/metadata.rb +4 -3
  71. data/lib/puppet/file_serving/mount/locales.rb +2 -1
  72. data/lib/puppet/file_serving/mount/pluginfacts.rb +2 -1
  73. data/lib/puppet/file_serving/mount/plugins.rb +2 -1
  74. data/lib/puppet/file_system.rb +8 -0
  75. data/lib/puppet/file_system/memory_file.rb +1 -1
  76. data/lib/puppet/file_system/posix.rb +2 -3
  77. data/lib/puppet/file_system/uniquefile.rb +0 -4
  78. data/lib/puppet/forge.rb +8 -12
  79. data/lib/puppet/functions.rb +138 -0
  80. data/lib/puppet/functions/abs.rb +61 -0
  81. data/lib/puppet/functions/call.rb +38 -2
  82. data/lib/puppet/functions/camelcase.rb +62 -0
  83. data/lib/puppet/functions/capitalize.rb +61 -0
  84. data/lib/puppet/functions/ceiling.rb +37 -0
  85. data/lib/puppet/functions/chomp.rb +57 -0
  86. data/lib/puppet/functions/chop.rb +67 -0
  87. data/lib/puppet/functions/compare.rb +125 -0
  88. data/lib/puppet/functions/convert_to.rb +3 -2
  89. data/lib/puppet/functions/dig.rb +21 -1
  90. data/lib/puppet/functions/downcase.rb +89 -0
  91. data/lib/puppet/functions/epp.rb +4 -4
  92. data/lib/puppet/functions/eyaml_lookup_key.rb +4 -5
  93. data/lib/puppet/functions/filter.rb +7 -6
  94. data/lib/puppet/functions/floor.rb +37 -0
  95. data/lib/puppet/functions/get.rb +150 -0
  96. data/lib/puppet/functions/getvar.rb +87 -0
  97. data/lib/puppet/functions/inline_epp.rb +5 -5
  98. data/lib/puppet/functions/lstrip.rb +58 -0
  99. data/lib/puppet/functions/max.rb +183 -0
  100. data/lib/puppet/functions/min.rb +182 -0
  101. data/lib/puppet/functions/new.rb +3 -8
  102. data/lib/puppet/functions/reduce.rb +4 -2
  103. data/lib/puppet/functions/reverse_each.rb +1 -1
  104. data/lib/puppet/functions/round.rb +24 -0
  105. data/lib/puppet/functions/rstrip.rb +58 -0
  106. data/lib/puppet/functions/size.rb +15 -0
  107. data/lib/puppet/functions/sort.rb +74 -0
  108. data/lib/puppet/functions/step.rb +1 -1
  109. data/lib/puppet/functions/strip.rb +58 -0
  110. data/lib/puppet/functions/upcase.rb +89 -0
  111. data/lib/puppet/functions/yaml_data.rb +4 -5
  112. data/lib/puppet/gettext/config.rb +1 -1
  113. data/lib/puppet/gettext/module_translations.rb +1 -1
  114. data/lib/puppet/graph.rb +0 -2
  115. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  116. data/lib/puppet/graph/simple_graph.rb +10 -7
  117. data/lib/puppet/indirector/catalog/compiler.rb +0 -8
  118. data/lib/puppet/indirector/catalog/json.rb +14 -3
  119. data/lib/puppet/indirector/catalog/yaml.rb +0 -16
  120. data/lib/puppet/indirector/certificate/file.rb +0 -1
  121. data/lib/puppet/indirector/facts/yaml.rb +4 -2
  122. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  123. data/lib/puppet/indirector/hiera.rb +0 -6
  124. data/lib/puppet/indirector/indirection.rb +8 -12
  125. data/lib/puppet/indirector/key/file.rb +1 -6
  126. data/lib/puppet/indirector/node/exec.rb +1 -3
  127. data/lib/puppet/indirector/node/yaml.rb +0 -6
  128. data/lib/puppet/indirector/request.rb +20 -27
  129. data/lib/puppet/indirector/resource/ral.rb +3 -1
  130. data/lib/puppet/indirector/resource/validator.rb +1 -1
  131. data/lib/puppet/indirector/rest.rb +7 -65
  132. data/lib/puppet/indirector/ssl_file.rb +3 -44
  133. data/lib/puppet/indirector/terminus.rb +1 -1
  134. data/lib/puppet/indirector/yaml.rb +4 -4
  135. data/lib/puppet/info_service/task_information_service.rb +7 -3
  136. data/lib/puppet/interface.rb +2 -3
  137. data/lib/puppet/interface/action.rb +2 -5
  138. data/lib/puppet/interface/face_collection.rb +3 -1
  139. data/lib/puppet/loaders.rb +2 -0
  140. data/lib/puppet/metatype/manager.rb +3 -5
  141. data/lib/puppet/module.rb +5 -31
  142. data/lib/puppet/module/task.rb +208 -30
  143. data/lib/puppet/module_tool.rb +2 -5
  144. data/lib/puppet/module_tool/applications.rb +0 -1
  145. data/lib/puppet/module_tool/applications/application.rb +1 -1
  146. data/lib/puppet/module_tool/applications/installer.rb +7 -8
  147. data/lib/puppet/module_tool/applications/uninstaller.rb +4 -5
  148. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  149. data/lib/puppet/module_tool/applications/upgrader.rb +5 -6
  150. data/lib/puppet/module_tool/installed_modules.rb +2 -2
  151. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  152. data/lib/puppet/module_tool/metadata.rb +1 -2
  153. data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
  154. data/lib/puppet/module_tool/tar/mini.rb +2 -12
  155. data/lib/puppet/network/authconfig.rb +0 -13
  156. data/lib/puppet/network/format_support.rb +13 -8
  157. data/lib/puppet/network/formats.rb +93 -2
  158. data/lib/puppet/network/http.rb +0 -2
  159. data/lib/puppet/network/http/api.rb +1 -10
  160. data/lib/puppet/network/http/api/indirected_routes.rb +22 -16
  161. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -3
  162. data/lib/puppet/network/http/connection.rb +14 -57
  163. data/lib/puppet/network/http/factory.rb +13 -7
  164. data/lib/puppet/network/http/handler.rb +59 -27
  165. data/lib/puppet/network/http/pool.rb +1 -7
  166. data/lib/puppet/network/http/site.rb +1 -1
  167. data/lib/puppet/network/resolver.rb +140 -67
  168. data/lib/puppet/node.rb +1 -2
  169. data/lib/puppet/node/environment.rb +5 -30
  170. data/lib/puppet/node/facts.rb +11 -1
  171. data/lib/puppet/parameter.rb +4 -7
  172. data/lib/puppet/parser/ast.rb +5 -9
  173. data/lib/puppet/parser/ast/branch.rb +3 -3
  174. data/lib/puppet/parser/ast/leaf.rb +5 -0
  175. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  176. data/lib/puppet/parser/catalog_compiler.rb +32 -0
  177. data/lib/puppet/parser/compiler.rb +2 -3
  178. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -2
  179. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -2
  180. data/lib/puppet/parser/environment_compiler.rb +0 -3
  181. data/lib/puppet/parser/functions.rb +48 -18
  182. data/lib/puppet/parser/functions/epp.rb +3 -3
  183. data/lib/puppet/parser/functions/filter.rb +1 -1
  184. data/lib/puppet/parser/functions/generate.rb +1 -1
  185. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  186. data/lib/puppet/parser/resource.rb +2 -4
  187. data/lib/puppet/parser/resource/param.rb +12 -11
  188. data/lib/puppet/parser/scope.rb +6 -8
  189. data/lib/puppet/parser/script_compiler.rb +7 -2
  190. data/lib/puppet/pops.rb +1 -0
  191. data/lib/puppet/pops/adaptable.rb +13 -7
  192. data/lib/puppet/pops/adapters.rb +18 -8
  193. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  194. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +4 -4
  195. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  196. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  197. data/lib/puppet/pops/evaluator/compare_operator.rb +3 -1
  198. data/lib/puppet/pops/evaluator/deferred_resolver.rb +127 -0
  199. data/lib/puppet/pops/evaluator/evaluator_impl.rb +17 -2
  200. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -3
  201. data/lib/puppet/pops/evaluator/runtime3_converter.rb +23 -4
  202. data/lib/puppet/pops/evaluator/runtime3_support.rb +7 -8
  203. data/lib/puppet/pops/functions/dispatch.rb +6 -0
  204. data/lib/puppet/pops/issues.rb +9 -10
  205. data/lib/puppet/pops/loader/loader.rb +1 -1
  206. data/lib/puppet/pops/loader/loader_paths.rb +5 -3
  207. data/lib/puppet/pops/loader/module_loaders.rb +47 -21
  208. data/lib/puppet/pops/loader/null_loader.rb +60 -0
  209. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +54 -0
  210. data/lib/puppet/pops/loader/static_loader.rb +0 -36
  211. data/lib/puppet/pops/loader/task_instantiator.rb +72 -44
  212. data/lib/puppet/pops/loaders.rb +21 -33
  213. data/lib/puppet/pops/lookup/hiera_config.rb +1 -2
  214. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  215. data/lib/puppet/pops/merge_strategy.rb +18 -22
  216. data/lib/puppet/pops/model/ast.pp +16 -0
  217. data/lib/puppet/pops/model/ast.rb +94 -0
  218. data/lib/puppet/pops/model/factory.rb +17 -38
  219. data/lib/puppet/pops/model/model_label_provider.rb +8 -1
  220. data/lib/puppet/pops/parser/egrammar.ra +14 -3
  221. data/lib/puppet/pops/parser/eparser.rb +1537 -1492
  222. data/lib/puppet/pops/parser/epp_support.rb +6 -2
  223. data/lib/puppet/pops/parser/heredoc_support.rb +8 -17
  224. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  225. data/lib/puppet/pops/parser/lexer2.rb +2 -7
  226. data/lib/puppet/pops/parser/locator.rb +87 -107
  227. data/lib/puppet/pops/parser/parser_support.rb +2 -11
  228. data/lib/puppet/pops/parser/pn_parser.rb +16 -17
  229. data/lib/puppet/pops/pcore.rb +19 -8
  230. data/lib/puppet/pops/puppet_stack.rb +48 -51
  231. data/lib/puppet/pops/resource/resource_type_impl.rb +0 -2
  232. data/lib/puppet/pops/serialization.rb +3 -2
  233. data/lib/puppet/pops/serialization/from_data_converter.rb +4 -3
  234. data/lib/puppet/pops/serialization/to_data_converter.rb +3 -3
  235. data/lib/puppet/pops/serialization/to_stringified_converter.rb +226 -0
  236. data/lib/puppet/pops/types/iterable.rb +8 -34
  237. data/lib/puppet/pops/types/p_binary_type.rb +1 -2
  238. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  239. data/lib/puppet/pops/types/p_object_type.rb +3 -0
  240. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  241. data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
  242. data/lib/puppet/pops/types/p_type_set_type.rb +0 -4
  243. data/lib/puppet/pops/types/string_converter.rb +12 -21
  244. data/lib/puppet/pops/types/type_calculator.rb +0 -24
  245. data/lib/puppet/pops/types/type_factory.rb +17 -0
  246. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  247. data/lib/puppet/pops/types/types.rb +7 -32
  248. data/lib/puppet/pops/validation/checker4_0.rb +23 -33
  249. data/lib/puppet/pops/validation/tasks_checker.rb +47 -6
  250. data/lib/puppet/pops/validation/validator_factory_4_0.rb +7 -10
  251. data/lib/puppet/property.rb +1 -1
  252. data/lib/puppet/property/ensure.rb +1 -1
  253. data/lib/puppet/provider.rb +14 -2
  254. data/lib/puppet/provider/exec.rb +58 -59
  255. data/lib/puppet/provider/file/posix.rb +0 -5
  256. data/lib/puppet/provider/file/windows.rb +2 -50
  257. data/lib/puppet/provider/group/aix.rb +2 -18
  258. data/lib/puppet/provider/group/groupadd.rb +19 -19
  259. data/lib/puppet/provider/group/windows_adsi.rb +4 -11
  260. data/lib/puppet/provider/nameservice.rb +28 -11
  261. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  262. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  263. data/lib/puppet/provider/package.rb +0 -2
  264. data/lib/puppet/provider/package/aix.rb +2 -17
  265. data/lib/puppet/provider/package/apt.rb +3 -14
  266. data/lib/puppet/provider/package/dnf.rb +3 -3
  267. data/lib/puppet/provider/package/dpkg.rb +7 -18
  268. data/lib/puppet/provider/package/fink.rb +3 -20
  269. data/lib/puppet/provider/package/gem.rb +43 -105
  270. data/lib/puppet/provider/package/openbsd.rb +2 -14
  271. data/lib/puppet/provider/package/pip.rb +108 -160
  272. data/lib/puppet/provider/package/pip3.rb +1 -1
  273. data/lib/puppet/provider/package/pkg.rb +5 -18
  274. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  275. data/lib/puppet/provider/package/pkgng.rb +4 -16
  276. data/lib/puppet/provider/package/portage.rb +6 -6
  277. data/lib/puppet/provider/package/puppet_gem.rb +2 -7
  278. data/lib/puppet/provider/package/rpm.rb +33 -82
  279. data/lib/puppet/provider/package/windows.rb +2 -6
  280. data/lib/puppet/provider/package/windows/exe_package.rb +10 -16
  281. data/lib/puppet/provider/package/windows/msi_package.rb +0 -8
  282. data/lib/puppet/provider/package/windows/package.rb +2 -10
  283. data/lib/puppet/provider/package/yum.rb +25 -37
  284. data/lib/puppet/provider/package/zypper.rb +0 -1
  285. data/lib/puppet/provider/parsedfile.rb +5 -26
  286. data/lib/puppet/provider/service/base.rb +1 -1
  287. data/lib/puppet/provider/service/daemontools.rb +9 -9
  288. data/lib/puppet/provider/service/debian.rb +1 -0
  289. data/lib/puppet/provider/service/launchd.rb +8 -39
  290. data/lib/puppet/provider/service/openbsd.rb +1 -1
  291. data/lib/puppet/provider/service/rcng.rb +2 -2
  292. data/lib/puppet/provider/service/runit.rb +8 -2
  293. data/lib/puppet/provider/service/smf.rb +0 -54
  294. data/lib/puppet/provider/service/systemd.rb +24 -35
  295. data/lib/puppet/provider/service/upstart.rb +1 -3
  296. data/lib/puppet/provider/service/windows.rb +3 -23
  297. data/lib/puppet/provider/user/aix.rb +2 -48
  298. data/lib/puppet/provider/user/directoryservice.rb +8 -45
  299. data/lib/puppet/provider/user/hpux.rb +1 -1
  300. data/lib/puppet/provider/user/pw.rb +3 -12
  301. data/lib/puppet/provider/user/user_role_add.rb +1 -5
  302. data/lib/puppet/provider/user/useradd.rb +44 -74
  303. data/lib/puppet/provider/user/windows_adsi.rb +0 -7
  304. data/lib/puppet/reference/indirection.rb +2 -2
  305. data/lib/puppet/reference/metaparameter.rb +3 -1
  306. data/lib/puppet/reference/providers.rb +1 -1
  307. data/lib/puppet/reference/type.rb +9 -3
  308. data/lib/puppet/reports.rb +3 -3
  309. data/lib/puppet/resource.rb +22 -22
  310. data/lib/puppet/resource/catalog.rb +8 -14
  311. data/lib/puppet/resource/type.rb +1 -10
  312. data/lib/puppet/rest/client.rb +83 -0
  313. data/lib/puppet/rest/errors.rb +14 -0
  314. data/lib/puppet/rest/response.rb +34 -0
  315. data/lib/puppet/rest/route.rb +84 -0
  316. data/lib/puppet/rest/routes.rb +154 -0
  317. data/lib/puppet/rest/ssl_context.rb +13 -0
  318. data/lib/puppet/settings.rb +9 -54
  319. data/lib/puppet/settings/config_file.rb +1 -2
  320. data/lib/puppet/settings/environment_conf.rb +0 -1
  321. data/lib/puppet/settings/file_setting.rb +1 -1
  322. data/lib/puppet/settings/server_list_setting.rb +0 -9
  323. data/lib/puppet/ssl.rb +0 -1
  324. data/lib/puppet/ssl/base.rb +1 -9
  325. data/lib/puppet/ssl/certificate.rb +7 -4
  326. data/lib/puppet/ssl/certificate_request.rb +6 -14
  327. data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
  328. data/lib/puppet/ssl/host.rb +400 -174
  329. data/lib/puppet/ssl/key.rb +1 -5
  330. data/lib/puppet/ssl/oids.rb +3 -3
  331. data/lib/puppet/ssl/validator/default_validator.rb +33 -49
  332. data/lib/puppet/test/test_helper.rb +12 -18
  333. data/lib/puppet/transaction.rb +7 -12
  334. data/lib/puppet/transaction/event.rb +37 -14
  335. data/lib/puppet/transaction/event_manager.rb +3 -11
  336. data/lib/puppet/transaction/persistence.rb +1 -1
  337. data/lib/puppet/transaction/report.rb +1 -1
  338. data/lib/puppet/transaction/resource_harness.rb +2 -5
  339. data/lib/puppet/type.rb +7 -10
  340. data/lib/puppet/type/exec.rb +16 -50
  341. data/lib/puppet/type/file.rb +7 -16
  342. data/lib/puppet/type/file/content.rb +2 -3
  343. data/lib/puppet/type/file/data_sync.rb +1 -5
  344. data/lib/puppet/type/file/mode.rb +2 -7
  345. data/lib/puppet/type/file/source.rb +2 -1
  346. data/lib/puppet/type/filebucket.rb +8 -12
  347. data/lib/puppet/type/group.rb +3 -33
  348. data/lib/puppet/type/notify.rb +2 -3
  349. data/lib/puppet/type/package.rb +18 -154
  350. data/lib/puppet/type/resources.rb +2 -12
  351. data/lib/puppet/type/schedule.rb +34 -96
  352. data/lib/puppet/type/service.rb +10 -9
  353. data/lib/puppet/type/tidy.rb +1 -1
  354. data/lib/puppet/type/user.rb +30 -14
  355. data/lib/puppet/util.rb +28 -52
  356. data/lib/puppet/util/autoload.rb +62 -56
  357. data/lib/puppet/util/character_encoding.rb +0 -22
  358. data/lib/puppet/util/classgen.rb +0 -6
  359. data/lib/puppet/util/command_line.rb +4 -7
  360. data/lib/puppet/util/command_line/trollop.rb +1 -1
  361. data/lib/puppet/util/connection.rb +74 -0
  362. data/lib/puppet/util/execution.rb +7 -22
  363. data/lib/puppet/util/feature.rb +63 -41
  364. data/lib/puppet/util/fileparsing.rb +27 -5
  365. data/lib/puppet/util/filetype.rb +8 -56
  366. data/lib/puppet/util/http_proxy.rb +18 -27
  367. data/lib/puppet/util/instance_loader.rb +3 -21
  368. data/lib/puppet/util/json.rb +0 -8
  369. data/lib/puppet/util/ldap/connection.rb +7 -7
  370. data/lib/puppet/util/log.rb +3 -8
  371. data/lib/puppet/util/log/destinations.rb +13 -5
  372. data/lib/puppet/util/logging.rb +19 -31
  373. data/lib/puppet/util/metric.rb +2 -2
  374. data/lib/puppet/util/monkey_patches.rb +1 -1
  375. data/lib/puppet/util/network_device/base.rb +1 -1
  376. data/lib/puppet/util/pidlock.rb +3 -23
  377. data/lib/puppet/util/platform.rb +3 -0
  378. data/lib/puppet/util/plist.rb +0 -6
  379. data/lib/puppet/util/posix.rb +0 -15
  380. data/lib/puppet/util/provider_features.rb +6 -7
  381. data/lib/puppet/util/rdoc.rb +2 -2
  382. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  383. data/lib/puppet/util/reference.rb +8 -7
  384. data/lib/puppet/util/resource_template.rb +1 -1
  385. data/lib/puppet/util/rubygems.rb +1 -13
  386. data/lib/puppet/util/run_mode.rb +1 -1
  387. data/lib/puppet/util/selinux.rb +3 -9
  388. data/lib/puppet/util/ssl.rb +40 -1
  389. data/lib/puppet/util/storage.rb +1 -13
  390. data/lib/puppet/util/suidmanager.rb +7 -5
  391. data/lib/puppet/util/tag_set.rb +1 -1
  392. data/lib/puppet/util/tagging.rb +1 -1
  393. data/lib/puppet/util/windows.rb +15 -0
  394. data/lib/puppet/util/windows/adsi.rb +7 -116
  395. data/lib/puppet/util/windows/api_types.rb +33 -46
  396. data/lib/puppet/util/windows/eventlog.rb +6 -1
  397. data/lib/puppet/util/windows/principal.rb +6 -8
  398. data/lib/puppet/util/windows/process.rb +3 -94
  399. data/lib/puppet/util/windows/registry.rb +14 -46
  400. data/lib/puppet/util/windows/security.rb +2 -40
  401. data/lib/puppet/util/windows/service.rb +72 -431
  402. data/lib/puppet/util/windows/sid.rb +3 -4
  403. data/lib/puppet/util/windows/user.rb +9 -17
  404. data/lib/puppet/util/yaml.rb +41 -5
  405. data/lib/puppet/vendor.rb +1 -1
  406. data/lib/puppet/version.rb +1 -1
  407. data/lib/puppet_pal.rb +246 -23
  408. data/locales/ja/puppet.po +11128 -0
  409. data/locales/puppet.pot +1321 -2527
  410. data/man/man5/puppet.conf.5 +31 -191
  411. data/man/man8/puppet-agent.8 +2 -2
  412. data/man/man8/puppet-apply.8 +1 -1
  413. data/man/man8/puppet-catalog.8 +1 -1
  414. data/man/man8/puppet-config.8 +3 -3
  415. data/man/man8/puppet-describe.8 +1 -1
  416. data/man/man8/puppet-device.8 +19 -23
  417. data/man/man8/puppet-doc.8 +1 -1
  418. data/man/man8/puppet-epp.8 +1 -1
  419. data/man/man8/puppet-facts.8 +1 -1
  420. data/man/man8/puppet-filebucket.8 +2 -21
  421. data/man/man8/puppet-generate.8 +1 -1
  422. data/man/man8/puppet-help.8 +1 -1
  423. data/man/man8/puppet-key.8 +1 -7
  424. data/man/man8/puppet-lookup.8 +1 -1
  425. data/man/man8/puppet-man.8 +1 -1
  426. data/man/man8/puppet-module.8 +10 -100
  427. data/man/man8/puppet-node.8 +4 -7
  428. data/man/man8/puppet-parser.8 +1 -1
  429. data/man/man8/puppet-plugin.8 +1 -1
  430. data/man/man8/puppet-report.8 +1 -1
  431. data/man/man8/puppet-resource.8 +1 -1
  432. data/man/man8/puppet-script.8 +1 -1
  433. data/man/man8/puppet-ssl.8 +28 -0
  434. data/man/man8/puppet-status.8 +1 -1
  435. data/man/man8/puppet.8 +12 -3
  436. data/spec/fixtures/unit/functions/hiera/hiera/backend/hieraspec_backend.rb +22 -0
  437. data/spec/fixtures/unit/functions/lookup/hiera/backend/custom_backend.rb +18 -0
  438. data/spec/fixtures/unit/functions/lookup/hiera/backend/other_backend.rb +7 -0
  439. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +6 -6
  440. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +0 -1
  441. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +0 -2
  442. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +0 -9
  443. data/spec/integration/agent/logging_spec.rb +9 -7
  444. data/spec/integration/application/apply_spec.rb +31 -26
  445. data/spec/integration/application/doc_spec.rb +2 -1
  446. data/spec/integration/application/lookup_spec.rb +5 -5
  447. data/spec/integration/configurer_spec.rb +8 -76
  448. data/spec/integration/data_binding_spec.rb +1 -1
  449. data/spec/integration/defaults_spec.rb +13 -16
  450. data/spec/integration/directory_environments_spec.rb +1 -1
  451. data/spec/integration/faces/config_spec.rb +4 -3
  452. data/spec/integration/faces/documentation_spec.rb +1 -0
  453. data/spec/integration/faces/plugin_spec.rb +49 -29
  454. data/spec/integration/file_bucket/file_spec.rb +4 -19
  455. data/spec/integration/file_serving/content_spec.rb +1 -0
  456. data/spec/integration/file_serving/fileset_spec.rb +1 -0
  457. data/spec/integration/file_serving/metadata_spec.rb +1 -0
  458. data/spec/integration/file_serving/terminus_helper_spec.rb +1 -0
  459. data/spec/integration/file_system/uniquefile_spec.rb +26 -29
  460. data/spec/integration/indirector/catalog/compiler_spec.rb +11 -10
  461. data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
  462. data/spec/integration/indirector/facts/facter_spec.rb +8 -22
  463. data/spec/integration/indirector/file_content/file_server_spec.rb +8 -7
  464. data/spec/integration/indirector/file_metadata/file_server_spec.rb +8 -7
  465. data/spec/integration/network/authconfig_spec.rb +24 -23
  466. data/spec/integration/network/formats_spec.rb +1 -0
  467. data/spec/integration/network/http/api/indirected_routes_spec.rb +6 -34
  468. data/spec/integration/node/environment_spec.rb +2 -1
  469. data/spec/integration/node/facts_spec.rb +10 -9
  470. data/spec/integration/node_spec.rb +7 -10
  471. data/spec/integration/parser/catalog_spec.rb +8 -6
  472. data/spec/integration/parser/collection_spec.rb +9 -4
  473. data/spec/integration/parser/compiler_spec.rb +7 -25
  474. data/spec/integration/parser/scope_spec.rb +1 -1
  475. data/spec/integration/parser/undef_param_spec.rb +1 -1
  476. data/spec/integration/provider/service/init_spec.rb +9 -6
  477. data/spec/integration/provider/service/systemd_spec.rb +14 -11
  478. data/spec/integration/provider/service/windows_spec.rb +11 -8
  479. data/spec/integration/reference/providers_spec.rb +7 -0
  480. data/spec/integration/reports_spec.rb +2 -1
  481. data/spec/integration/resource/catalog_spec.rb +17 -14
  482. data/spec/integration/resource/type_collection_spec.rb +5 -4
  483. data/spec/integration/ssl/certificate_request_spec.rb +1 -2
  484. data/spec/integration/ssl/host_spec.rb +17 -24
  485. data/spec/integration/ssl/key_spec.rb +7 -2
  486. data/spec/integration/test/test_helper_spec.rb +32 -0
  487. data/spec/integration/transaction/report_spec.rb +14 -9
  488. data/spec/integration/type/exec_spec.rb +2 -1
  489. data/spec/integration/type/file_spec.rb +38 -46
  490. data/spec/integration/type/package_spec.rb +25 -21
  491. data/spec/integration/type/tidy_spec.rb +2 -1
  492. data/spec/integration/type_spec.rb +1 -0
  493. data/spec/integration/util/autoload_spec.rb +11 -7
  494. data/spec/integration/util/execution_spec.rb +5 -32
  495. data/spec/integration/util/rdoc/parser_spec.rb +14 -23
  496. data/spec/integration/util/settings_spec.rb +2 -1
  497. data/spec/integration/util/windows/adsi_spec.rb +8 -11
  498. data/spec/integration/util/windows/principal_spec.rb +2 -1
  499. data/spec/integration/util/windows/process_spec.rb +9 -7
  500. data/spec/integration/util/windows/registry_spec.rb +46 -127
  501. data/spec/integration/util/windows/security_spec.rb +15 -16
  502. data/spec/integration/util/windows/user_spec.rb +29 -66
  503. data/spec/integration/util_spec.rb +10 -7
  504. data/spec/lib/matchers/json.rb +12 -18
  505. data/{lib/puppet/ssl → spec/lib/puppet}/certificate_factory.rb +5 -6
  506. data/spec/lib/puppet/test_ca.rb +109 -0
  507. data/spec/lib/puppet_spec/compiler.rb +28 -1
  508. data/spec/lib/puppet_spec/files.rb +29 -23
  509. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +1 -1
  510. data/spec/lib/puppet_spec/modules.rb +11 -1
  511. data/spec/lib/puppet_spec/scope.rb +2 -1
  512. data/spec/lib/puppet_spec/ssl.rb +265 -0
  513. data/spec/lib/puppet_spec/validators.rb +37 -0
  514. data/spec/shared_behaviours/all_parsedfile_providers.rb +1 -1
  515. data/spec/shared_behaviours/file_server_terminus.rb +9 -8
  516. data/spec/shared_behaviours/file_serving.rb +8 -6
  517. data/spec/shared_behaviours/file_serving_model.rb +5 -22
  518. data/spec/shared_behaviours/hiera_indirections.rb +4 -3
  519. data/spec/shared_behaviours/iterative_functions.rb +1 -0
  520. data/spec/shared_behaviours/memory_terminus.rb +2 -2
  521. data/spec/shared_behaviours/path_parameters.rb +1 -1
  522. data/spec/shared_contexts/types_setup.rb +0 -2
  523. data/spec/shared_examples/rhel_package_provider.rb +70 -112
  524. data/spec/spec_helper.rb +1 -15
  525. data/spec/unit/agent/disabler_spec.rb +5 -4
  526. data/spec/unit/agent/locker_spec.rb +13 -12
  527. data/spec/unit/agent_spec.rb +102 -105
  528. data/spec/unit/application/agent_spec.rb +95 -114
  529. data/spec/unit/application/apply_spec.rb +92 -119
  530. data/spec/unit/application/config_spec.rb +1 -0
  531. data/spec/unit/application/describe_spec.rb +7 -6
  532. data/spec/unit/application/device_spec.rb +180 -181
  533. data/spec/unit/application/doc_spec.rb +46 -44
  534. data/spec/unit/application/face_base_spec.rb +62 -61
  535. data/spec/unit/application/facts_spec.rb +4 -3
  536. data/spec/unit/application/filebucket_spec.rb +74 -66
  537. data/spec/unit/application/indirection_base_spec.rb +6 -8
  538. data/spec/unit/application/lookup_spec.rb +44 -37
  539. data/spec/unit/application/resource_spec.rb +48 -42
  540. data/spec/unit/application/ssl_spec.rb +322 -0
  541. data/spec/unit/application_spec.rb +108 -90
  542. data/spec/unit/capability_spec.rb +15 -16
  543. data/spec/unit/{ssl/certificate_factory_spec.rb → certificate_factory_spec.rb} +13 -20
  544. data/spec/unit/configurer/downloader_spec.rb +22 -31
  545. data/spec/unit/configurer/fact_handler_spec.rb +7 -2
  546. data/spec/unit/configurer/plugin_handler_spec.rb +8 -41
  547. data/spec/unit/configurer_spec.rb +475 -520
  548. data/spec/unit/confine/exists_spec.rb +15 -17
  549. data/spec/unit/confine/false_spec.rb +6 -32
  550. data/spec/unit/confine/feature_spec.rb +5 -7
  551. data/spec/unit/confine/true_spec.rb +6 -32
  552. data/spec/unit/confine/variable_spec.rb +15 -14
  553. data/spec/unit/confine_collection_spec.rb +29 -28
  554. data/spec/unit/confine_spec.rb +14 -13
  555. data/spec/unit/confiner_spec.rb +11 -10
  556. data/spec/unit/context/trusted_information_spec.rb +4 -3
  557. data/spec/unit/daemon_spec.rb +38 -35
  558. data/spec/unit/data_providers/function_data_provider_spec.rb +1 -0
  559. data/spec/unit/data_providers/hiera_data_provider_spec.rb +1 -0
  560. data/spec/unit/datatypes_spec.rb +4 -3
  561. data/spec/unit/defaults_spec.rb +61 -32
  562. data/spec/unit/environments_spec.rb +7 -7
  563. data/spec/unit/etc_spec.rb +29 -52
  564. data/spec/unit/external/pson_spec.rb +1 -0
  565. data/spec/unit/face/catalog_spec.rb +1 -0
  566. data/spec/unit/face/config_spec.rb +35 -31
  567. data/spec/unit/face/epp_face_spec.rb +4 -3
  568. data/spec/unit/face/facts_spec.rb +6 -14
  569. data/spec/unit/face/generate_spec.rb +5 -4
  570. data/spec/unit/face/help_spec.rb +8 -7
  571. data/spec/unit/face/key_spec.rb +1 -0
  572. data/spec/unit/face/man_spec.rb +2 -1
  573. data/spec/unit/face/module/install_spec.rb +5 -3
  574. data/spec/unit/face/module/list_spec.rb +12 -62
  575. data/spec/unit/face/module/search_spec.rb +9 -11
  576. data/spec/unit/face/module/uninstall_spec.rb +8 -4
  577. data/spec/unit/face/node_spec.rb +30 -52
  578. data/spec/unit/face/parser_spec.rb +3 -3
  579. data/spec/unit/face/plugin_spec.rb +9 -44
  580. data/spec/unit/face/status_spec.rb +1 -0
  581. data/spec/unit/file_bucket/dipper_spec.rb +24 -28
  582. data/spec/unit/file_bucket/file_spec.rb +2 -0
  583. data/spec/unit/file_serving/base_spec.rb +18 -20
  584. data/spec/unit/file_serving/configuration/parser_spec.rb +28 -27
  585. data/spec/unit/file_serving/configuration_spec.rb +66 -63
  586. data/spec/unit/file_serving/content_spec.rb +11 -10
  587. data/spec/unit/file_serving/fileset_spec.rb +58 -63
  588. data/spec/unit/file_serving/http_metadata_spec.rb +7 -8
  589. data/spec/unit/file_serving/metadata_spec.rb +40 -40
  590. data/spec/unit/file_serving/mount/file_spec.rb +32 -31
  591. data/spec/unit/file_serving/mount/locales_spec.rb +26 -25
  592. data/spec/unit/file_serving/mount/modules_spec.rb +15 -14
  593. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +26 -25
  594. data/spec/unit/file_serving/mount/plugins_spec.rb +26 -25
  595. data/spec/unit/file_serving/mount/tasks_spec.rb +15 -14
  596. data/spec/unit/file_serving/mount_spec.rb +1 -0
  597. data/spec/unit/file_serving/terminus_helper_spec.rb +42 -37
  598. data/spec/unit/file_serving/terminus_selector_spec.rb +13 -12
  599. data/spec/unit/file_system/path_pattern_spec.rb +1 -1
  600. data/spec/unit/file_system/uniquefile_spec.rb +6 -17
  601. data/spec/unit/file_system_spec.rb +9 -6
  602. data/spec/unit/forge/errors_spec.rb +1 -1
  603. data/spec/unit/forge/forge_spec.rb +16 -15
  604. data/spec/unit/forge/module_release_spec.rb +18 -18
  605. data/spec/unit/forge/repository_spec.rb +30 -27
  606. data/spec/unit/forge_spec.rb +11 -15
  607. data/spec/unit/functions/abs_spec.rb +70 -0
  608. data/spec/unit/functions/binary_file_spec.rb +3 -3
  609. data/spec/unit/functions/call_spec.rb +59 -5
  610. data/spec/unit/functions/camelcase_spec.rb +34 -0
  611. data/spec/unit/functions/capitalize_spec.rb +34 -0
  612. data/spec/unit/functions/ceiling_spec.rb +65 -0
  613. data/spec/unit/functions/chomp_spec.rb +46 -0
  614. data/spec/unit/functions/chop_spec.rb +38 -0
  615. data/spec/unit/functions/compare_spec.rb +147 -0
  616. data/spec/unit/functions/contain_spec.rb +2 -0
  617. data/spec/unit/functions/convert_to_spec.rb +3 -0
  618. data/spec/unit/functions/defined_spec.rb +1 -0
  619. data/spec/unit/functions/downcase_spec.rb +34 -0
  620. data/spec/unit/functions/epp_spec.rb +2 -2
  621. data/spec/unit/functions/filter_spec.rb +4 -4
  622. data/spec/unit/functions/find_file_spec.rb +7 -7
  623. data/spec/unit/functions/floor_spec.rb +65 -0
  624. data/spec/unit/functions/get_spec.rb +135 -0
  625. data/spec/unit/functions/getvar_spec.rb +121 -0
  626. data/spec/unit/functions/hiera_spec.rb +14 -48
  627. data/spec/unit/functions/include_spec.rb +4 -0
  628. data/spec/unit/functions/lookup_fixture_spec.rb +1 -0
  629. data/spec/unit/functions/lookup_spec.rb +37 -62
  630. data/spec/unit/functions/lstrip_spec.rb +30 -0
  631. data/spec/unit/functions/match_spec.rb +3 -4
  632. data/spec/unit/functions/max_spec.rb +129 -0
  633. data/spec/unit/functions/min_spec.rb +129 -0
  634. data/spec/unit/functions/module_directory_spec.rb +12 -12
  635. data/spec/unit/functions/new_spec.rb +0 -15
  636. data/spec/unit/functions/regsubst_spec.rb +3 -4
  637. data/spec/unit/functions/require_spec.rb +3 -0
  638. data/spec/unit/functions/round_spec.rb +41 -0
  639. data/spec/unit/functions/rstrip_spec.rb +30 -0
  640. data/spec/unit/functions/shared.rb +8 -5
  641. data/spec/unit/functions/size_spec.rb +50 -0
  642. data/spec/unit/functions/sort_spec.rb +79 -0
  643. data/spec/unit/functions/split_spec.rb +3 -4
  644. data/spec/unit/functions/strip_spec.rb +30 -0
  645. data/spec/unit/functions/upcase_spec.rb +34 -0
  646. data/spec/unit/functions/versioncmp_spec.rb +4 -4
  647. data/spec/unit/functions4_spec.rb +78 -51
  648. data/spec/unit/gettext/config_spec.rb +4 -4
  649. data/spec/unit/gettext/module_loading_spec.rb +7 -7
  650. data/spec/unit/graph/rb_tree_map_spec.rb +2 -0
  651. data/spec/unit/graph/relationship_graph_spec.rb +2 -1
  652. data/spec/unit/graph/simple_graph_spec.rb +52 -11
  653. data/spec/unit/hiera/scope_spec.rb +0 -7
  654. data/spec/unit/hiera_puppet_spec.rb +20 -20
  655. data/spec/unit/indirector/catalog/compiler_spec.rb +166 -183
  656. data/spec/unit/indirector/catalog/json_spec.rb +2 -1
  657. data/spec/unit/indirector/catalog/msgpack_spec.rb +1 -0
  658. data/spec/unit/indirector/catalog/rest_spec.rb +1 -0
  659. data/spec/unit/indirector/catalog/store_configs_spec.rb +1 -0
  660. data/spec/unit/indirector/catalog/yaml_spec.rb +1 -0
  661. data/spec/unit/indirector/certificate/file_spec.rb +1 -8
  662. data/spec/unit/indirector/certificate/rest_spec.rb +10 -8
  663. data/spec/unit/indirector/certificate_request/file_spec.rb +1 -0
  664. data/spec/unit/indirector/certificate_request/rest_spec.rb +1 -0
  665. data/spec/unit/indirector/direct_file_server_spec.rb +49 -57
  666. data/spec/unit/indirector/envelope_spec.rb +2 -1
  667. data/spec/unit/indirector/exec_spec.rb +31 -26
  668. data/spec/unit/indirector/face_spec.rb +9 -9
  669. data/spec/unit/indirector/facts/facter_spec.rb +43 -37
  670. data/spec/unit/indirector/facts/network_device_spec.rb +9 -8
  671. data/spec/unit/indirector/facts/rest_spec.rb +8 -7
  672. data/spec/unit/indirector/facts/store_configs_spec.rb +1 -0
  673. data/spec/unit/indirector/facts/yaml_spec.rb +90 -77
  674. data/spec/unit/indirector/file_bucket_file/file_spec.rb +13 -9
  675. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +1 -0
  676. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +5 -4
  677. data/spec/unit/indirector/file_content/file_server_spec.rb +1 -0
  678. data/spec/unit/indirector/file_content/file_spec.rb +1 -0
  679. data/spec/unit/indirector/file_content/rest_spec.rb +1 -0
  680. data/spec/unit/indirector/file_content/selector_spec.rb +1 -0
  681. data/spec/unit/indirector/file_metadata/file_server_spec.rb +1 -0
  682. data/spec/unit/indirector/file_metadata/file_spec.rb +13 -12
  683. data/spec/unit/indirector/file_metadata/rest_spec.rb +1 -0
  684. data/spec/unit/indirector/file_metadata/selector_spec.rb +1 -0
  685. data/spec/unit/indirector/file_server_spec.rb +145 -145
  686. data/spec/unit/indirector/indirection_spec.rb +226 -249
  687. data/spec/unit/indirector/json_spec.rb +9 -7
  688. data/spec/unit/indirector/key/file_spec.rb +22 -38
  689. data/spec/unit/indirector/memory_spec.rb +7 -6
  690. data/spec/unit/indirector/msgpack_spec.rb +9 -7
  691. data/spec/unit/indirector/node/exec_spec.rb +43 -22
  692. data/spec/unit/indirector/node/memory_spec.rb +4 -2
  693. data/spec/unit/indirector/node/msgpack_spec.rb +1 -0
  694. data/spec/unit/indirector/node/plain_spec.rb +4 -2
  695. data/spec/unit/indirector/node/rest_spec.rb +1 -0
  696. data/spec/unit/indirector/node/store_configs_spec.rb +1 -0
  697. data/spec/unit/indirector/node/yaml_spec.rb +1 -0
  698. data/spec/unit/indirector/none_spec.rb +5 -5
  699. data/spec/unit/indirector/plain_spec.rb +8 -7
  700. data/spec/unit/indirector/report/msgpack_spec.rb +1 -0
  701. data/spec/unit/indirector/report/processor_spec.rb +22 -21
  702. data/spec/unit/indirector/report/rest_spec.rb +12 -11
  703. data/spec/unit/indirector/report/yaml_spec.rb +1 -0
  704. data/spec/unit/indirector/request_spec.rb +18 -15
  705. data/spec/unit/indirector/resource/ral_spec.rb +55 -47
  706. data/spec/unit/indirector/resource/store_configs_spec.rb +1 -0
  707. data/spec/unit/indirector/rest_spec.rb +110 -113
  708. data/spec/unit/indirector/ssl_file_spec.rb +100 -119
  709. data/spec/unit/indirector/status/local_spec.rb +1 -0
  710. data/spec/unit/indirector/status/rest_spec.rb +1 -0
  711. data/spec/unit/indirector/store_configs_spec.rb +1 -0
  712. data/spec/unit/indirector/terminus_spec.rb +30 -32
  713. data/spec/unit/indirector/yaml_spec.rb +90 -68
  714. data/spec/unit/indirector_spec.rb +2 -1
  715. data/spec/unit/info_service_spec.rb +144 -10
  716. data/spec/unit/interface/action_builder_spec.rb +1 -0
  717. data/spec/unit/interface/action_manager_spec.rb +1 -0
  718. data/spec/unit/interface/action_spec.rb +3 -2
  719. data/spec/unit/interface/documentation_spec.rb +1 -0
  720. data/spec/unit/interface/face_collection_spec.rb +12 -19
  721. data/spec/unit/interface_spec.rb +3 -3
  722. data/spec/unit/man_spec.rb +4 -3
  723. data/spec/unit/module_spec.rb +52 -102
  724. data/spec/unit/module_tool/applications/installer_spec.rb +13 -12
  725. data/spec/unit/module_tool/applications/searcher_spec.rb +3 -3
  726. data/spec/unit/module_tool/applications/uninstaller_spec.rb +2 -1
  727. data/spec/unit/module_tool/applications/unpacker_spec.rb +13 -13
  728. data/spec/unit/module_tool/applications/upgrader_spec.rb +6 -6
  729. data/spec/unit/module_tool/install_directory_spec.rb +8 -8
  730. data/spec/unit/module_tool/installed_modules_spec.rb +3 -3
  731. data/spec/unit/module_tool/tar/gnu_spec.rb +6 -6
  732. data/spec/unit/module_tool/tar/mini_spec.rb +12 -12
  733. data/spec/unit/module_tool/tar_spec.rb +13 -12
  734. data/spec/unit/module_tool_spec.rb +12 -29
  735. data/spec/unit/network/auth_config_parser_spec.rb +13 -11
  736. data/spec/unit/network/authconfig_spec.rb +18 -17
  737. data/spec/unit/network/authorization_spec.rb +5 -4
  738. data/spec/unit/network/authstore_spec.rb +1 -0
  739. data/spec/unit/network/format_handler_spec.rb +1 -0
  740. data/spec/unit/network/format_spec.rb +10 -9
  741. data/spec/unit/network/format_support_spec.rb +29 -28
  742. data/spec/unit/network/formats_spec.rb +31 -4
  743. data/spec/unit/network/http/api/indirected_routes_spec.rb +41 -51
  744. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +7 -9
  745. data/spec/unit/network/http/api/master/v3/environment_spec.rb +1 -2
  746. data/spec/unit/network/http/api/master/v3/environments_spec.rb +7 -6
  747. data/spec/unit/network/http/api_spec.rb +2 -26
  748. data/spec/unit/network/http/compression_spec.rb +28 -24
  749. data/spec/unit/network/http/connection_spec.rb +122 -72
  750. data/spec/unit/network/http/factory_spec.rb +11 -40
  751. data/spec/unit/network/http/handler_spec.rb +18 -9
  752. data/spec/unit/network/http/nocache_pool_spec.rb +7 -6
  753. data/spec/unit/network/http/pool_spec.rb +29 -60
  754. data/spec/unit/network/http/request_spec.rb +2 -0
  755. data/spec/unit/network/http/response_spec.rb +13 -11
  756. data/spec/unit/network/http/route_spec.rb +1 -0
  757. data/spec/unit/network/http/session_spec.rb +2 -1
  758. data/spec/unit/network/http/site_spec.rb +1 -0
  759. data/spec/unit/network/http_pool_spec.rb +9 -18
  760. data/spec/unit/network/http_spec.rb +1 -0
  761. data/spec/unit/network/resolver_spec.rb +104 -28
  762. data/spec/unit/network/rights_spec.rb +53 -52
  763. data/spec/unit/node/environment_spec.rb +17 -18
  764. data/spec/unit/node/facts_spec.rb +21 -6
  765. data/spec/unit/node_spec.rb +23 -17
  766. data/spec/unit/other/selinux_spec.rb +1 -71
  767. data/spec/unit/parameter/boolean_spec.rb +2 -1
  768. data/spec/unit/parameter/package_options_spec.rb +2 -1
  769. data/spec/unit/parameter/path_spec.rb +1 -0
  770. data/spec/unit/parameter/value_collection_spec.rb +1 -0
  771. data/spec/unit/parameter/value_spec.rb +1 -0
  772. data/spec/unit/parameter_spec.rb +9 -9
  773. data/spec/unit/parser/ast/block_expression_spec.rb +8 -6
  774. data/spec/unit/parser/ast/leaf_spec.rb +21 -20
  775. data/spec/unit/parser/compiler_spec.rb +96 -84
  776. data/spec/unit/parser/environment_compiler_spec.rb +16 -23
  777. data/spec/unit/parser/files_spec.rb +1 -0
  778. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  779. data/spec/unit/parser/functions/digest_spec.rb +1 -4
  780. data/spec/unit/parser/functions/fail_spec.rb +2 -5
  781. data/spec/unit/parser/functions/file_spec.rb +14 -17
  782. data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -5
  783. data/spec/unit/parser/functions/generate_spec.rb +37 -38
  784. data/spec/unit/parser/functions/inline_template_spec.rb +1 -4
  785. data/spec/unit/parser/functions/regsubst_spec.rb +1 -4
  786. data/spec/unit/parser/functions/scanf_spec.rb +1 -4
  787. data/spec/unit/parser/functions/shellquote_spec.rb +1 -0
  788. data/spec/unit/parser/functions/split_spec.rb +1 -4
  789. data/spec/unit/parser/functions/sprintf_spec.rb +1 -4
  790. data/spec/unit/parser/functions/tag_spec.rb +2 -5
  791. data/spec/unit/parser/functions/tagged_spec.rb +3 -6
  792. data/spec/unit/parser/functions/template_spec.rb +13 -17
  793. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -5
  794. data/spec/unit/parser/functions_spec.rb +29 -3
  795. data/spec/unit/parser/relationship_spec.rb +1 -0
  796. data/spec/unit/parser/resource/param_spec.rb +1 -1
  797. data/spec/unit/parser/resource_spec.rb +42 -42
  798. data/spec/unit/parser/scope_spec.rb +35 -39
  799. data/spec/unit/parser/templatewrapper_spec.rb +12 -11
  800. data/spec/unit/parser/type_loader_spec.rb +19 -17
  801. data/spec/unit/pops/adaptable_spec.rb +1 -0
  802. data/spec/unit/pops/benchmark_spec.rb +1 -0
  803. data/spec/unit/pops/evaluator/access_ops_spec.rb +1 -0
  804. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +11 -0
  805. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -0
  806. data/spec/unit/pops/evaluator/collections_ops_spec.rb +1 -0
  807. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +1 -0
  808. data/spec/unit/pops/evaluator/conditionals_spec.rb +1 -0
  809. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +78 -18
  810. data/spec/unit/pops/evaluator/logical_ops_spec.rb +1 -0
  811. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +5 -4
  812. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +1 -0
  813. data/spec/unit/pops/evaluator/variables_spec.rb +1 -0
  814. data/spec/unit/pops/factory_spec.rb +4 -3
  815. data/spec/unit/pops/issues_spec.rb +20 -19
  816. data/spec/unit/pops/loaders/dependency_loader_spec.rb +2 -2
  817. data/spec/unit/pops/loaders/loader_spec.rb +12 -36
  818. data/spec/unit/pops/loaders/loaders_spec.rb +57 -54
  819. data/spec/unit/pops/loaders/module_loaders_spec.rb +35 -3
  820. data/spec/unit/pops/loaders/static_loader_spec.rb +0 -36
  821. data/spec/unit/pops/lookup/context_spec.rb +1 -0
  822. data/spec/unit/pops/lookup/interpolation_spec.rb +3 -2
  823. data/spec/unit/pops/merge_strategy_spec.rb +1 -0
  824. data/spec/unit/pops/migration_spec.rb +5 -3
  825. data/spec/unit/pops/model/model_spec.rb +1 -0
  826. data/spec/unit/pops/model/pn_transformer_spec.rb +1 -0
  827. data/spec/unit/pops/parser/lexer2_spec.rb +60 -21
  828. data/spec/unit/pops/parser/locator_spec.rb +6 -48
  829. data/spec/unit/pops/parser/parse_application_spec.rb +1 -0
  830. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +1 -0
  831. data/spec/unit/pops/parser/parse_calls_spec.rb +1 -0
  832. data/spec/unit/pops/parser/parse_capabilities_spec.rb +1 -0
  833. data/spec/unit/pops/parser/parse_conditionals_spec.rb +1 -0
  834. data/spec/unit/pops/parser/parse_containers_spec.rb +1 -0
  835. data/spec/unit/pops/parser/parse_heredoc_spec.rb +12 -124
  836. data/spec/unit/pops/parser/parse_plan_spec.rb +1 -0
  837. data/spec/unit/pops/parser/parse_resource_spec.rb +1 -0
  838. data/spec/unit/pops/parser/parse_site_spec.rb +1 -0
  839. data/spec/unit/pops/parser/pn_parser_spec.rb +1 -0
  840. data/spec/unit/pops/pn_spec.rb +1 -0
  841. data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -0
  842. data/spec/unit/pops/serialization/serialization_spec.rb +7 -5
  843. data/spec/unit/pops/serialization/to_from_hr_spec.rb +29 -4
  844. data/spec/unit/pops/serialization/to_stringified_spec.rb +157 -0
  845. data/spec/unit/pops/types/deferred_spec.rb +87 -0
  846. data/spec/unit/pops/types/p_object_type_spec.rb +20 -0
  847. data/spec/unit/pops/types/p_timespan_type_spec.rb +0 -22
  848. data/spec/unit/pops/types/p_timestamp_type_spec.rb +0 -19
  849. data/spec/unit/pops/types/recursion_guard_spec.rb +10 -10
  850. data/spec/unit/pops/types/ruby_generator_spec.rb +2 -2
  851. data/spec/unit/pops/types/string_converter_spec.rb +11 -22
  852. data/spec/unit/pops/types/task_spec.rb +148 -16
  853. data/spec/unit/pops/types/type_asserter_spec.rb +2 -2
  854. data/spec/unit/pops/types/type_calculator_spec.rb +36 -36
  855. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +0 -9
  856. data/spec/unit/pops/types/type_parser_spec.rb +13 -13
  857. data/spec/unit/pops/types/types_spec.rb +12 -6
  858. data/spec/unit/pops/validator/validator_spec.rb +162 -82
  859. data/spec/unit/pops/visitor_spec.rb +1 -0
  860. data/spec/unit/property/boolean_spec.rb +1 -1
  861. data/spec/unit/property/ensure_spec.rb +1 -0
  862. data/spec/unit/property/keyvalue_spec.rb +34 -32
  863. data/spec/unit/property/list_spec.rb +27 -26
  864. data/spec/unit/property/ordered_list_spec.rb +14 -10
  865. data/spec/unit/property_spec.rb +53 -43
  866. data/spec/unit/provider/aix_object_spec.rb +45 -47
  867. data/spec/unit/provider/command_spec.rb +9 -9
  868. data/spec/unit/provider/exec/posix_spec.rb +9 -8
  869. data/spec/unit/provider/exec/shell_spec.rb +3 -1
  870. data/spec/unit/provider/exec/windows_spec.rb +6 -4
  871. data/spec/unit/provider/exec_spec.rb +1 -209
  872. data/spec/unit/provider/file/posix_spec.rb +24 -22
  873. data/spec/unit/provider/file/windows_spec.rb +19 -17
  874. data/spec/unit/provider/group/aix_spec.rb +7 -22
  875. data/spec/unit/provider/group/groupadd_spec.rb +27 -60
  876. data/spec/unit/provider/group/ldap_spec.rb +36 -33
  877. data/spec/unit/provider/group/pw_spec.rb +18 -15
  878. data/spec/unit/provider/group/windows_adsi_spec.rb +80 -128
  879. data/spec/unit/provider/ldap_spec.rb +62 -61
  880. data/spec/unit/provider/nameservice/directoryservice_spec.rb +109 -102
  881. data/spec/unit/provider/nameservice_spec.rb +41 -39
  882. data/spec/unit/provider/package/aix_spec.rb +22 -48
  883. data/spec/unit/provider/package/appdmg_spec.rb +13 -13
  884. data/spec/unit/provider/package/apt_spec.rb +35 -60
  885. data/spec/unit/provider/package/aptitude_spec.rb +7 -7
  886. data/spec/unit/provider/package/aptrpm_spec.rb +13 -8
  887. data/spec/unit/provider/package/base_spec.rb +4 -4
  888. data/spec/unit/provider/package/dnf_spec.rb +23 -34
  889. data/spec/unit/provider/package/dpkg_spec.rb +72 -114
  890. data/spec/unit/provider/package/freebsd_spec.rb +18 -15
  891. data/spec/unit/provider/package/gem_spec.rb +86 -163
  892. data/spec/unit/provider/package/hpux_spec.rb +18 -15
  893. data/spec/unit/provider/package/macports_spec.rb +54 -56
  894. data/spec/unit/provider/package/nim_spec.rb +49 -33
  895. data/spec/unit/provider/package/openbsd_spec.rb +49 -60
  896. data/spec/unit/provider/package/opkg_spec.rb +26 -23
  897. data/spec/unit/provider/package/pacman_spec.rb +118 -97
  898. data/spec/unit/provider/package/pip3_spec.rb +6 -20
  899. data/spec/unit/provider/package/pip_spec.rb +129 -185
  900. data/spec/unit/provider/package/pkg_spec.rb +119 -129
  901. data/spec/unit/provider/package/pkgdmg_spec.rb +63 -65
  902. data/spec/unit/provider/package/pkgin_spec.rb +23 -20
  903. data/spec/unit/provider/package/pkgng_spec.rb +35 -67
  904. data/spec/unit/provider/package/pkgutil_spec.rb +49 -45
  905. data/spec/unit/provider/package/portage_spec.rb +76 -72
  906. data/spec/unit/provider/package/puppet_gem_spec.rb +21 -45
  907. data/spec/unit/provider/package/rpm_spec.rb +79 -291
  908. data/spec/unit/provider/package/sun_spec.rb +18 -16
  909. data/spec/unit/provider/package/tdnf_spec.rb +12 -9
  910. data/spec/unit/provider/package/up2date_spec.rb +4 -2
  911. data/spec/unit/provider/package/urpmi_spec.rb +17 -15
  912. data/spec/unit/provider/package/windows/exe_package_spec.rb +18 -15
  913. data/spec/unit/provider/package/windows/msi_package_spec.rb +23 -20
  914. data/spec/unit/provider/package/windows/package_spec.rb +43 -38
  915. data/spec/unit/provider/package/windows_spec.rb +36 -51
  916. data/spec/unit/provider/package/yum_spec.rb +24 -128
  917. data/spec/unit/provider/package/zypper_spec.rb +106 -117
  918. data/spec/unit/provider/parsedfile_spec.rb +45 -44
  919. data/spec/unit/provider/service/base_spec.rb +6 -5
  920. data/spec/unit/provider/service/bsd_spec.rb +54 -47
  921. data/spec/unit/provider/service/daemontools_spec.rb +53 -70
  922. data/spec/unit/provider/service/debian_spec.rb +58 -46
  923. data/spec/unit/provider/service/freebsd_spec.rb +23 -20
  924. data/spec/unit/provider/service/gentoo_spec.rb +81 -74
  925. data/spec/unit/provider/service/init_spec.rb +66 -65
  926. data/spec/unit/provider/service/launchd_spec.rb +114 -181
  927. data/spec/unit/provider/service/openbsd_spec.rb +94 -87
  928. data/spec/unit/provider/service/openrc_spec.rb +74 -70
  929. data/spec/unit/provider/service/openwrt_spec.rb +38 -30
  930. data/spec/unit/provider/service/rcng_spec.rb +24 -19
  931. data/spec/unit/provider/service/redhat_spec.rb +60 -60
  932. data/spec/unit/provider/service/runit_spec.rb +44 -61
  933. data/spec/unit/provider/service/smf_spec.rb +74 -143
  934. data/spec/unit/provider/service/src_spec.rb +69 -60
  935. data/spec/unit/provider/service/systemd_spec.rb +160 -222
  936. data/spec/unit/provider/service/upstart_spec.rb +99 -83
  937. data/spec/unit/provider/service/windows_spec.rb +42 -84
  938. data/spec/unit/provider/user/aix_spec.rb +24 -65
  939. data/spec/unit/provider/user/directoryservice_spec.rb +114 -187
  940. data/spec/unit/provider/user/hpux_spec.rb +21 -17
  941. data/spec/unit/provider/user/ldap_spec.rb +83 -80
  942. data/spec/unit/provider/user/openbsd_spec.rb +12 -11
  943. data/spec/unit/provider/user/pw_spec.rb +44 -80
  944. data/spec/unit/provider/user/user_role_add_spec.rb +94 -94
  945. data/spec/unit/provider/user/useradd_spec.rb +100 -208
  946. data/spec/unit/provider/user/windows_adsi_spec.rb +63 -62
  947. data/spec/unit/provider_spec.rb +189 -41
  948. data/spec/unit/puppet_pal_2pec.rb +26 -12
  949. data/spec/unit/puppet_pal_catalog_spec.rb +801 -0
  950. data/spec/unit/puppet_pal_spec.rb +2 -8
  951. data/spec/unit/puppet_spec.rb +7 -27
  952. data/spec/unit/relationship_spec.rb +1 -0
  953. data/spec/unit/reports/http_spec.rb +23 -21
  954. data/spec/unit/reports/store_spec.rb +4 -3
  955. data/spec/unit/reports_spec.rb +14 -12
  956. data/spec/unit/resource/capability_finder_spec.rb +26 -29
  957. data/spec/unit/resource/catalog_spec.rb +77 -81
  958. data/spec/unit/resource/status_spec.rb +8 -6
  959. data/spec/unit/resource/type_collection_spec.rb +18 -17
  960. data/spec/unit/resource/type_spec.rb +35 -34
  961. data/spec/unit/resource_spec.rb +79 -67
  962. data/spec/unit/rest/client_spec.rb +135 -0
  963. data/spec/unit/rest/route_spec.rb +132 -0
  964. data/spec/unit/scheduler/job_spec.rb +1 -0
  965. data/spec/unit/scheduler/scheduler_spec.rb +1 -0
  966. data/spec/unit/scheduler/splay_job_spec.rb +2 -1
  967. data/spec/unit/settings/array_setting_spec.rb +1 -1
  968. data/spec/unit/settings/autosign_setting_spec.rb +9 -9
  969. data/spec/unit/settings/certificate_revocation_setting_spec.rb +1 -1
  970. data/spec/unit/settings/config_file_spec.rb +10 -0
  971. data/spec/unit/settings/directory_setting_spec.rb +7 -2
  972. data/spec/unit/settings/duration_setting_spec.rb +2 -1
  973. data/spec/unit/settings/enum_setting_spec.rb +1 -1
  974. data/spec/unit/settings/environment_conf_spec.rb +6 -4
  975. data/spec/unit/settings/file_setting_spec.rb +50 -46
  976. data/spec/unit/settings/ini_file_spec.rb +2 -4
  977. data/spec/unit/settings/path_setting_spec.rb +3 -2
  978. data/spec/unit/settings/priority_setting_spec.rb +2 -1
  979. data/spec/unit/settings/string_setting_spec.rb +15 -14
  980. data/spec/unit/settings/terminus_setting_spec.rb +2 -1
  981. data/spec/unit/settings/value_translator_spec.rb +1 -0
  982. data/spec/unit/settings_spec.rb +226 -253
  983. data/spec/unit/ssl/base_spec.rb +15 -14
  984. data/spec/unit/ssl/certificate_request_attributes_spec.rb +22 -8
  985. data/spec/unit/ssl/certificate_request_spec.rb +63 -92
  986. data/spec/unit/ssl/certificate_spec.rb +29 -37
  987. data/spec/unit/ssl/digest_spec.rb +1 -0
  988. data/spec/unit/ssl/host_spec.rb +305 -685
  989. data/spec/unit/ssl/key_spec.rb +34 -46
  990. data/spec/unit/ssl/validator_spec.rb +70 -203
  991. data/spec/unit/task_spec.rb +172 -26
  992. data/spec/unit/transaction/additional_resource_generator_spec.rb +68 -67
  993. data/spec/unit/transaction/event_manager_spec.rb +84 -95
  994. data/spec/unit/transaction/event_spec.rb +15 -16
  995. data/spec/unit/transaction/persistence_spec.rb +18 -17
  996. data/spec/unit/transaction/report_spec.rb +24 -18
  997. data/spec/unit/transaction/resource_harness_spec.rb +33 -72
  998. data/spec/unit/transaction_spec.rb +106 -176
  999. data/spec/unit/type/component_spec.rb +1 -0
  1000. data/spec/unit/type/exec_spec.rb +66 -120
  1001. data/spec/unit/type/file/checksum_spec.rb +11 -10
  1002. data/spec/unit/type/file/checksum_value_spec.rb +32 -31
  1003. data/spec/unit/type/file/content_spec.rb +62 -65
  1004. data/spec/unit/type/file/ctime_spec.rb +1 -0
  1005. data/spec/unit/type/file/ensure_spec.rb +13 -12
  1006. data/spec/unit/type/file/group_spec.rb +7 -5
  1007. data/spec/unit/type/file/mode_spec.rb +6 -4
  1008. data/spec/unit/type/file/mtime_spec.rb +1 -0
  1009. data/spec/unit/type/file/owner_spec.rb +8 -6
  1010. data/spec/unit/type/file/selinux_spec.rb +19 -17
  1011. data/spec/unit/type/file/source_spec.rb +110 -113
  1012. data/spec/unit/type/file/type_spec.rb +1 -0
  1013. data/spec/unit/type/file_spec.rb +190 -204
  1014. data/spec/unit/type/filebucket_spec.rb +10 -11
  1015. data/spec/unit/type/group_spec.rb +9 -15
  1016. data/spec/unit/type/noop_metaparam_spec.rb +2 -1
  1017. data/spec/unit/type/package/package_settings_spec.rb +23 -44
  1018. data/spec/unit/type/package_spec.rb +64 -61
  1019. data/spec/unit/type/resources_spec.rb +101 -103
  1020. data/spec/unit/type/schedule_spec.rb +28 -28
  1021. data/spec/unit/type/service_spec.rb +85 -76
  1022. data/spec/unit/type/stage_spec.rb +1 -0
  1023. data/spec/unit/type/tidy_spec.rb +63 -62
  1024. data/spec/unit/type/user_spec.rb +26 -147
  1025. data/spec/unit/type/whit_spec.rb +1 -0
  1026. data/spec/unit/type_spec.rb +164 -125
  1027. data/spec/unit/util/at_fork_spec.rb +19 -18
  1028. data/spec/unit/util/autoload_spec.rb +122 -93
  1029. data/spec/unit/util/backups_spec.rb +35 -34
  1030. data/spec/unit/util/character_encoding_spec.rb +5 -48
  1031. data/spec/unit/util/checksums_spec.rb +39 -38
  1032. data/spec/unit/util/colors_spec.rb +2 -1
  1033. data/spec/unit/util/command_line_spec.rb +20 -40
  1034. data/spec/unit/util/constant_inflector_spec.rb +1 -0
  1035. data/spec/unit/util/diff_spec.rb +8 -7
  1036. data/spec/unit/util/errors_spec.rb +1 -0
  1037. data/spec/unit/util/execution_spec.rb +167 -285
  1038. data/spec/unit/util/execution_stub_spec.rb +3 -2
  1039. data/spec/unit/util/feature_spec.rb +46 -28
  1040. data/spec/unit/util/filetype_spec.rb +53 -61
  1041. data/spec/unit/util/http_proxy_spec.rb +13 -133
  1042. data/spec/unit/util/inifile_spec.rb +31 -26
  1043. data/spec/unit/util/json_lockfile_spec.rb +5 -3
  1044. data/spec/unit/util/ldap/connection_spec.rb +25 -26
  1045. data/spec/unit/util/ldap/generator_spec.rb +1 -0
  1046. data/spec/unit/util/ldap/manager_spec.rb +102 -118
  1047. data/spec/unit/util/lockfile_spec.rb +2 -1
  1048. data/spec/unit/util/log/destinations_spec.rb +40 -23
  1049. data/spec/unit/util/log_spec.rb +146 -48
  1050. data/spec/unit/util/logging_spec.rb +114 -252
  1051. data/spec/unit/util/metric_spec.rb +1 -0
  1052. data/spec/unit/util/monkey_patches_spec.rb +12 -24
  1053. data/spec/unit/util/multi_match_spec.rb +1 -0
  1054. data/spec/unit/util/network_device/config_spec.rb +1 -0
  1055. data/spec/unit/util/network_device/transport/base_spec.rb +6 -5
  1056. data/spec/unit/util/network_device_spec.rb +9 -7
  1057. data/spec/unit/util/package_spec.rb +1 -0
  1058. data/spec/unit/util/pidlock_spec.rb +14 -86
  1059. data/spec/unit/util/plist_spec.rb +33 -60
  1060. data/spec/unit/util/posix_spec.rb +47 -78
  1061. data/spec/unit/util/profiler/object_counts_spec.rb +2 -1
  1062. data/spec/unit/util/rdoc_spec.rb +10 -9
  1063. data/spec/unit/util/reference_spec.rb +1 -0
  1064. data/spec/unit/util/resource_template_spec.rb +20 -20
  1065. data/spec/unit/util/retry_action_spec.rb +8 -7
  1066. data/spec/unit/util/rubygems_spec.rb +7 -41
  1067. data/spec/unit/util/run_mode_spec.rb +11 -10
  1068. data/spec/unit/util/selinux_spec.rb +73 -84
  1069. data/spec/unit/util/splayer_spec.rb +9 -8
  1070. data/spec/unit/util/ssl_spec.rb +1 -0
  1071. data/spec/unit/util/storage_spec.rb +17 -111
  1072. data/spec/unit/util/suidmanager_spec.rb +58 -47
  1073. data/spec/unit/util/symbolic_file_mode_spec.rb +1 -0
  1074. data/spec/unit/util/tag_set_spec.rb +9 -1
  1075. data/spec/unit/util/tagging_spec.rb +12 -0
  1076. data/spec/unit/util/terminal_spec.rb +10 -9
  1077. data/spec/unit/util/user_attr_spec.rb +2 -1
  1078. data/spec/unit/util/warnings_spec.rb +4 -3
  1079. data/spec/unit/util/watcher/periodic_watcher_spec.rb +2 -2
  1080. data/spec/unit/util/watcher_spec.rb +21 -51
  1081. data/spec/unit/util/windows/access_control_entry_spec.rb +2 -1
  1082. data/spec/unit/util/windows/access_control_list_spec.rb +2 -1
  1083. data/spec/unit/util/windows/adsi_spec.rb +134 -278
  1084. data/spec/unit/util/windows/api_types_spec.rb +42 -105
  1085. data/spec/unit/util/windows/eventlog_spec.rb +13 -10
  1086. data/spec/unit/util/windows/file_spec.rb +1 -0
  1087. data/spec/unit/util/windows/root_certs_spec.rb +1 -0
  1088. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -1
  1089. data/spec/unit/util/windows/service_spec.rb +180 -432
  1090. data/spec/unit/util/windows/sid_spec.rb +17 -15
  1091. data/spec/unit/util/windows/string_spec.rb +2 -1
  1092. data/spec/unit/util/yaml_spec.rb +162 -28
  1093. data/spec/unit/util_spec.rb +74 -119
  1094. data/spec/unit/version_spec.rb +6 -6
  1095. data/tasks/benchmark.rake +5 -1
  1096. data/tasks/ci.rake +0 -5
  1097. data/tasks/manpages.rake +9 -2
  1098. data/tasks/parser.rake +11 -3
  1099. metadata +156 -473
  1100. data/CODEOWNERS +0 -30
  1101. data/ext/rack/config.ru +0 -44
  1102. data/ext/rack/example-passenger-vhost.conf +0 -57
  1103. data/lib/puppet/application/ca.rb +0 -11
  1104. data/lib/puppet/application/certificate.rb +0 -17
  1105. data/lib/puppet/application/certificate_request.rb +0 -7
  1106. data/lib/puppet/application/certificate_revocation_list.rb +0 -7
  1107. data/lib/puppet/application/master.rb +0 -319
  1108. data/lib/puppet/confine/boolean.rb +0 -45
  1109. data/lib/puppet/external/nagios.rb +0 -46
  1110. data/lib/puppet/external/nagios/base.rb +0 -472
  1111. data/lib/puppet/external/nagios/grammar.ry +0 -248
  1112. data/lib/puppet/external/nagios/makefile +0 -9
  1113. data/lib/puppet/external/nagios/parser.rb +0 -400
  1114. data/lib/puppet/face/ca.rb +0 -266
  1115. data/lib/puppet/face/certificate.rb +0 -167
  1116. data/lib/puppet/face/certificate_request.rb +0 -56
  1117. data/lib/puppet/face/certificate_revocation_list.rb +0 -56
  1118. data/lib/puppet/feature/rack.rb +0 -19
  1119. data/lib/puppet/graph/random_prioritizer.rb +0 -16
  1120. data/lib/puppet/graph/title_hash_prioritizer.rb +0 -16
  1121. data/lib/puppet/indirector/certificate/ca.rb +0 -9
  1122. data/lib/puppet/indirector/certificate/disabled_ca.rb +0 -22
  1123. data/lib/puppet/indirector/certificate_request/ca.rb +0 -22
  1124. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +0 -22
  1125. data/lib/puppet/indirector/certificate_revocation_list/ca.rb +0 -8
  1126. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +0 -22
  1127. data/lib/puppet/indirector/certificate_revocation_list/file.rb +0 -8
  1128. data/lib/puppet/indirector/certificate_revocation_list/rest.rb +0 -22
  1129. data/lib/puppet/indirector/certificate_status.rb +0 -4
  1130. data/lib/puppet/indirector/certificate_status/file.rb +0 -91
  1131. data/lib/puppet/indirector/certificate_status/rest.rb +0 -11
  1132. data/lib/puppet/indirector/key/ca.rb +0 -16
  1133. data/lib/puppet/indirector/key/disabled_ca.rb +0 -22
  1134. data/lib/puppet/indirector/ldap.rb +0 -86
  1135. data/lib/puppet/indirector/node/ldap.rb +0 -275
  1136. data/lib/puppet/indirector/node/write_only_yaml.rb +0 -39
  1137. data/lib/puppet/module_tool/applications/builder.rb +0 -152
  1138. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +0 -18
  1139. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +0 -89
  1140. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +0 -32
  1141. data/lib/puppet/module_tool/skeleton/templates/generator/examples/init.pp.erb +0 -12
  1142. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +0 -48
  1143. data/lib/puppet/module_tool/skeleton/templates/generator/metadata.json.erb +0 -1
  1144. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +0 -6
  1145. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +0 -1
  1146. data/lib/puppet/network/http/api/ca.rb +0 -2
  1147. data/lib/puppet/network/http/api/ca/v1.rb +0 -11
  1148. data/lib/puppet/network/http/rack.rb +0 -33
  1149. data/lib/puppet/network/http/rack/rest.rb +0 -162
  1150. data/lib/puppet/network/http/webrick.rb +0 -124
  1151. data/lib/puppet/network/http/webrick/rest.rb +0 -114
  1152. data/lib/puppet/network/server.rb +0 -39
  1153. data/lib/puppet/provider/augeas/augeas.rb +0 -767
  1154. data/lib/puppet/provider/cisco.rb +0 -9
  1155. data/lib/puppet/provider/computer/computer.rb +0 -20
  1156. data/lib/puppet/provider/cron/crontab.rb +0 -297
  1157. data/lib/puppet/provider/host/parsed.rb +0 -46
  1158. data/lib/puppet/provider/interface/cisco.rb +0 -27
  1159. data/lib/puppet/provider/macauthorization/macauthorization.rb +0 -298
  1160. data/lib/puppet/provider/mailalias/aliases.rb +0 -50
  1161. data/lib/puppet/provider/maillist/mailman.rb +0 -108
  1162. data/lib/puppet/provider/mcx/mcxcontent.rb +0 -173
  1163. data/lib/puppet/provider/mount.rb +0 -76
  1164. data/lib/puppet/provider/mount/parsed.rb +0 -285
  1165. data/lib/puppet/provider/naginator.rb +0 -63
  1166. data/lib/puppet/provider/package/dnfmodule.rb +0 -141
  1167. data/lib/puppet/provider/package_targetable.rb +0 -69
  1168. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +0 -590
  1169. data/lib/puppet/provider/selboolean/getsetsebool.rb +0 -47
  1170. data/lib/puppet/provider/selmodule/semodule.rb +0 -157
  1171. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +0 -105
  1172. data/lib/puppet/provider/sshkey/parsed.rb +0 -50
  1173. data/lib/puppet/provider/vlan/cisco.rb +0 -28
  1174. data/lib/puppet/provider/yumrepo/inifile.rb +0 -315
  1175. data/lib/puppet/provider/zfs/zfs.rb +0 -108
  1176. data/lib/puppet/provider/zone/solaris.rb +0 -364
  1177. data/lib/puppet/provider/zpool/zpool.rb +0 -125
  1178. data/lib/puppet/ssl/certificate_authority.rb +0 -554
  1179. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +0 -45
  1180. data/lib/puppet/ssl/certificate_authority/interface.rb +0 -324
  1181. data/lib/puppet/ssl/certificate_revocation_list.rb +0 -111
  1182. data/lib/puppet/ssl/configuration.rb +0 -61
  1183. data/lib/puppet/ssl/inventory.rb +0 -55
  1184. data/lib/puppet/type/augeas.rb +0 -211
  1185. data/lib/puppet/type/computer.rb +0 -66
  1186. data/lib/puppet/type/cron.rb +0 -480
  1187. data/lib/puppet/type/host.rb +0 -95
  1188. data/lib/puppet/type/interface.rb +0 -121
  1189. data/lib/puppet/type/k5login.rb +0 -165
  1190. data/lib/puppet/type/macauthorization.rb +0 -167
  1191. data/lib/puppet/type/mailalias.rb +0 -46
  1192. data/lib/puppet/type/maillist.rb +0 -62
  1193. data/lib/puppet/type/mcx.rb +0 -98
  1194. data/lib/puppet/type/mount.rb +0 -314
  1195. data/lib/puppet/type/nagios_command.rb +0 -3
  1196. data/lib/puppet/type/nagios_contact.rb +0 -3
  1197. data/lib/puppet/type/nagios_contactgroup.rb +0 -3
  1198. data/lib/puppet/type/nagios_host.rb +0 -3
  1199. data/lib/puppet/type/nagios_hostdependency.rb +0 -3
  1200. data/lib/puppet/type/nagios_hostescalation.rb +0 -3
  1201. data/lib/puppet/type/nagios_hostextinfo.rb +0 -3
  1202. data/lib/puppet/type/nagios_hostgroup.rb +0 -3
  1203. data/lib/puppet/type/nagios_service.rb +0 -3
  1204. data/lib/puppet/type/nagios_servicedependency.rb +0 -3
  1205. data/lib/puppet/type/nagios_serviceescalation.rb +0 -3
  1206. data/lib/puppet/type/nagios_serviceextinfo.rb +0 -3
  1207. data/lib/puppet/type/nagios_servicegroup.rb +0 -3
  1208. data/lib/puppet/type/nagios_timeperiod.rb +0 -3
  1209. data/lib/puppet/type/router.rb +0 -17
  1210. data/lib/puppet/type/scheduled_task.rb +0 -183
  1211. data/lib/puppet/type/selboolean.rb +0 -40
  1212. data/lib/puppet/type/selmodule.rb +0 -58
  1213. data/lib/puppet/type/ssh_authorized_key.rb +0 -143
  1214. data/lib/puppet/type/sshkey.rb +0 -83
  1215. data/lib/puppet/type/vlan.rb +0 -26
  1216. data/lib/puppet/type/yumrepo.rb +0 -430
  1217. data/lib/puppet/type/zfs.rb +0 -154
  1218. data/lib/puppet/type/zone.rb +0 -382
  1219. data/lib/puppet/type/zpool.rb +0 -91
  1220. data/lib/puppet/util/methodhelper.rb +0 -32
  1221. data/lib/puppet/util/nagios_maker.rb +0 -85
  1222. data/lib/puppet/util/network_device/cisco.rb +0 -4
  1223. data/lib/puppet/util/network_device/cisco/device.rb +0 -285
  1224. data/lib/puppet/util/network_device/cisco/facts.rb +0 -72
  1225. data/lib/puppet/util/network_device/cisco/interface.rb +0 -94
  1226. data/lib/puppet/util/network_device/ipcalc.rb +0 -68
  1227. data/lib/puppet/util/network_device/transport/ssh.rb +0 -126
  1228. data/lib/puppet/util/network_device/transport/telnet.rb +0 -47
  1229. data/lib/puppet/util/windows/taskscheduler.rb +0 -1267
  1230. data/lib/puppet/vendor/load_semantic.rb +0 -1
  1231. data/lib/puppet/vendor/load_semantic_puppet.rb +0 -1
  1232. data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -5
  1233. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +0 -11
  1234. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency.rb +0 -181
  1235. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph.rb +0 -60
  1236. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph_node.rb +0 -117
  1237. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +0 -58
  1238. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/source.rb +0 -25
  1239. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/unsatisfiable_graph.rb +0 -31
  1240. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +0 -3
  1241. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +0 -203
  1242. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +0 -758
  1243. data/lib/puppet/vendor/semantic_puppet/locales/config.yaml +0 -21
  1244. data/man/man8/puppet-ca.8 +0 -196
  1245. data/man/man8/puppet-cert.8 +0 -118
  1246. data/man/man8/puppet-certificate.8 +0 -240
  1247. data/man/man8/puppet-certificate_request.8 +0 -161
  1248. data/man/man8/puppet-certificate_revocation_list.8 +0 -139
  1249. data/man/man8/puppet-master.8 +0 -85
  1250. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +0 -19
  1251. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +0 -18
  1252. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +0 -15
  1253. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +0 -4
  1254. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +0 -13
  1255. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +0 -15
  1256. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +0 -6
  1257. data/spec/fixtures/integration/provider/cron/crontab/purged +0 -8
  1258. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +0 -12
  1259. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +0 -14
  1260. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +0 -15
  1261. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +0 -32
  1262. data/spec/fixtures/integration/provider/sshkey/sample +0 -21
  1263. data/spec/fixtures/unit/provider/augeas/augeas/augeas/lenses/test.aug +0 -13
  1264. data/spec/fixtures/unit/provider/augeas/augeas/etc/fstab +0 -10
  1265. data/spec/fixtures/unit/provider/augeas/augeas/etc/hosts +0 -6
  1266. data/spec/fixtures/unit/provider/augeas/augeas/etc/test +0 -3
  1267. data/spec/fixtures/unit/provider/augeas/augeas/test.aug +0 -13
  1268. data/spec/fixtures/unit/provider/host/parsed/valid_hosts +0 -19
  1269. data/spec/fixtures/unit/provider/mount/mount-output.aix.txt +0 -7
  1270. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +0 -152
  1271. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +0 -11
  1272. data/spec/fixtures/unit/provider/mount/parsed/darwin.mount +0 -6
  1273. data/spec/fixtures/unit/provider/mount/parsed/freebsd.fstab +0 -9
  1274. data/spec/fixtures/unit/provider/mount/parsed/freebsd.mount +0 -4
  1275. data/spec/fixtures/unit/provider/mount/parsed/hpux.mount +0 -17
  1276. data/spec/fixtures/unit/provider/mount/parsed/linux.fstab +0 -12
  1277. data/spec/fixtures/unit/provider/mount/parsed/linux.mount +0 -6
  1278. data/spec/fixtures/unit/provider/mount/parsed/netbsd.fstab +0 -10
  1279. data/spec/fixtures/unit/provider/mount/parsed/netbsd.mount +0 -9
  1280. data/spec/fixtures/unit/provider/mount/parsed/openbsd.fstab +0 -5
  1281. data/spec/fixtures/unit/provider/mount/parsed/openbsd.mount +0 -5
  1282. data/spec/fixtures/unit/provider/mount/parsed/solaris.fstab +0 -11
  1283. data/spec/fixtures/unit/provider/mount/parsed/solaris.mount +0 -6
  1284. data/spec/fixtures/unit/provider/naginator/define_empty_param +0 -6
  1285. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +0 -19
  1286. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +0 -9
  1287. data/spec/fixtures/unit/provider/service/smf/svcs_fmri.out +0 -6
  1288. data/spec/fixtures/unit/provider/service/smf/svcs_multiple_fmris.out +0 -13
  1289. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys +0 -7
  1290. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys1 +0 -3
  1291. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys2 +0 -1
  1292. data/spec/fixtures/unit/provider/sshkey/parsed/sample +0 -21
  1293. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +0 -8
  1294. data/spec/fixtures/unit/provider/zfs/zfs/zfs-list.out +0 -2
  1295. data/spec/fixtures/unit/provider/zpool/zpool/zpool-list.out +0 -2
  1296. data/spec/integration/faces/ca_spec.rb +0 -353
  1297. data/spec/integration/indirector/node/ldap_spec.rb +0 -13
  1298. data/spec/integration/network/http_pool_spec.rb +0 -120
  1299. data/spec/integration/provider/cron/crontab_spec.rb +0 -240
  1300. data/spec/integration/provider/file/windows_spec.rb +0 -162
  1301. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -9
  1302. data/spec/integration/provider/mount_spec.rb +0 -163
  1303. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -217
  1304. data/spec/integration/provider/sshkey_spec.rb +0 -153
  1305. data/spec/integration/provider/yumrepo_spec.rb +0 -126
  1306. data/spec/integration/ssl/autosign_spec.rb +0 -145
  1307. data/spec/integration/ssl/certificate_authority_spec.rb +0 -161
  1308. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -33
  1309. data/spec/integration/transaction_spec.rb +0 -553
  1310. data/spec/integration/type/nagios_spec.rb +0 -69
  1311. data/spec/integration/type/notify_spec.rb +0 -46
  1312. data/spec/integration/type/user_spec.rb +0 -63
  1313. data/spec/lib/puppet_spec/https.rb +0 -166
  1314. data/spec/unit/application/cert_spec.rb +0 -272
  1315. data/spec/unit/application/certificate_spec.rb +0 -21
  1316. data/spec/unit/application/master_spec.rb +0 -414
  1317. data/spec/unit/face/ca_spec.rb +0 -9
  1318. data/spec/unit/face/certificate_request_spec.rb +0 -9
  1319. data/spec/unit/face/certificate_revocation_list_spec.rb +0 -9
  1320. data/spec/unit/face/certificate_spec.rb +0 -228
  1321. data/spec/unit/face/module/build_spec.rb +0 -69
  1322. data/spec/unit/graph/title_hash_prioritizer_spec.rb +0 -50
  1323. data/spec/unit/indirector/certificate/ca_spec.rb +0 -21
  1324. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -32
  1325. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -56
  1326. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -32
  1327. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -15
  1328. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -32
  1329. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -16
  1330. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -33
  1331. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -190
  1332. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -17
  1333. data/spec/unit/indirector/code_spec.rb +0 -30
  1334. data/spec/unit/indirector/key/ca_spec.rb +0 -22
  1335. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -32
  1336. data/spec/unit/indirector/ldap_spec.rb +0 -151
  1337. data/spec/unit/indirector/node/ldap_spec.rb +0 -463
  1338. data/spec/unit/indirector/node/write_only_yaml_spec.rb +0 -11
  1339. data/spec/unit/module_tool/applications/builder_spec.rb +0 -439
  1340. data/spec/unit/network/http/api/ca/v1_spec.rb +0 -26
  1341. data/spec/unit/network/http/rack/rest_spec.rb +0 -322
  1342. data/spec/unit/network/http/rack_spec.rb +0 -42
  1343. data/spec/unit/network/http/webrick/rest_spec.rb +0 -230
  1344. data/spec/unit/network/http/webrick_spec.rb +0 -277
  1345. data/spec/unit/network/server_spec.rb +0 -94
  1346. data/spec/unit/provider/augeas/augeas_spec.rb +0 -1096
  1347. data/spec/unit/provider/cisco_spec.rb +0 -14
  1348. data/spec/unit/provider/cron/crontab_spec.rb +0 -206
  1349. data/spec/unit/provider/cron/parsed_spec.rb +0 -355
  1350. data/spec/unit/provider/host/parsed_spec.rb +0 -219
  1351. data/spec/unit/provider/interface/cisco_spec.rb +0 -53
  1352. data/spec/unit/provider/macauthorization_spec.rb +0 -134
  1353. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -190
  1354. data/spec/unit/provider/mount/parsed_spec.rb +0 -318
  1355. data/spec/unit/provider/mount_spec.rb +0 -169
  1356. data/spec/unit/provider/naginator_spec.rb +0 -78
  1357. data/spec/unit/provider/network_device_spec.rb +0 -152
  1358. data/spec/unit/provider/package/dnfmodule_spec.rb +0 -247
  1359. data/spec/unit/provider/package_targetable_spec.rb +0 -60
  1360. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +0 -2050
  1361. data/spec/unit/provider/selboolean_spec.rb +0 -34
  1362. data/spec/unit/provider/selmodule-example.pp +0 -0
  1363. data/spec/unit/provider/selmodule_spec.rb +0 -154
  1364. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -259
  1365. data/spec/unit/provider/sshkey/parsed_spec.rb +0 -92
  1366. data/spec/unit/provider/vlan/cisco_spec.rb +0 -53
  1367. data/spec/unit/provider/yumrepo/inifile_spec.rb +0 -413
  1368. data/spec/unit/provider/zfs/zfs_spec.rb +0 -171
  1369. data/spec/unit/provider/zone/solaris_spec.rb +0 -261
  1370. data/spec/unit/provider/zpool/zpool_spec.rb +0 -250
  1371. data/spec/unit/settings/server_list_setting_spec.rb +0 -21
  1372. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +0 -29
  1373. data/spec/unit/ssl/certificate_authority/interface_spec.rb +0 -563
  1374. data/spec/unit/ssl/certificate_authority_spec.rb +0 -1165
  1375. data/spec/unit/ssl/certificate_revocation_list_spec.rb +0 -196
  1376. data/spec/unit/ssl/configuration_spec.rb +0 -138
  1377. data/spec/unit/ssl/inventory_spec.rb +0 -155
  1378. data/spec/unit/test/test_helper_spec.rb +0 -17
  1379. data/spec/unit/type/augeas_spec.rb +0 -120
  1380. data/spec/unit/type/computer_spec.rb +0 -77
  1381. data/spec/unit/type/cron_spec.rb +0 -539
  1382. data/spec/unit/type/host_spec.rb +0 -680
  1383. data/spec/unit/type/interface_spec.rb +0 -128
  1384. data/spec/unit/type/k5login_spec.rb +0 -204
  1385. data/spec/unit/type/macauthorization_spec.rb +0 -111
  1386. data/spec/unit/type/mailalias_spec.rb +0 -48
  1387. data/spec/unit/type/maillist_spec.rb +0 -38
  1388. data/spec/unit/type/mcx_spec.rb +0 -75
  1389. data/spec/unit/type/mount_spec.rb +0 -622
  1390. data/spec/unit/type/nagios_spec.rb +0 -312
  1391. data/spec/unit/type/scheduled_task_spec.rb +0 -117
  1392. data/spec/unit/type/selboolean_spec.rb +0 -41
  1393. data/spec/unit/type/selmodule_spec.rb +0 -16
  1394. data/spec/unit/type/ssh_authorized_key_spec.rb +0 -228
  1395. data/spec/unit/type/sshkey_spec.rb +0 -75
  1396. data/spec/unit/type/vlan_spec.rb +0 -42
  1397. data/spec/unit/type/yumrepo_spec.rb +0 -476
  1398. data/spec/unit/type/zfs_spec.rb +0 -45
  1399. data/spec/unit/type/zone_spec.rb +0 -182
  1400. data/spec/unit/type/zpool_spec.rb +0 -108
  1401. data/spec/unit/util/nagios_maker_spec.rb +0 -121
  1402. data/spec/unit/util/network_device/cisco/device_spec.rb +0 -491
  1403. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -63
  1404. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -97
  1405. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -61
  1406. data/spec/unit/util/network_device/transport/ssh_spec.rb +0 -252
  1407. data/spec/unit/util/network_device/transport/telnet_spec.rb +0 -90
@@ -1,3 +1,4 @@
1
+ #! /usr/bin/env ruby
1
2
  require 'spec_helper'
2
3
 
3
4
  require 'puppet/ssl/digest'
@@ -1,7 +1,11 @@
1
+ #!/usr/bin/env ruby
1
2
  require 'spec_helper'
3
+ require 'puppet/test_ca'
2
4
 
3
5
  require 'puppet/ssl/host'
4
6
  require 'matchers/json'
7
+ require 'puppet_spec/ssl'
8
+ require 'puppet/rest/routes'
5
9
 
6
10
  def base_json_comparison(result, json_hash)
7
11
  expect(result["fingerprint"]).to eq(json_hash["fingerprint"])
@@ -9,13 +13,11 @@ def base_json_comparison(result, json_hash)
9
13
  expect(result["state"]).to eq(json_hash["desired_state"])
10
14
  end
11
15
 
12
- describe Puppet::SSL::Host do
16
+ describe Puppet::SSL::Host, if: !Puppet::Util::Platform.jruby? do
13
17
  include JSONMatchers
14
18
  include PuppetSpec::Files
15
19
 
16
20
  before do
17
- Puppet::SSL::Host.indirection.terminus_class = :file
18
-
19
21
  # Get a safe temporary file
20
22
  dir = tmpdir("ssl_host_testing")
21
23
  Puppet.settings[:confdir] = dir
@@ -28,7 +30,6 @@ describe Puppet::SSL::Host do
28
30
  after do
29
31
  # Cleaned out any cached localhost instance.
30
32
  Puppet::SSL::Host.reset
31
- Puppet::SSL::Host.ca_location = :none
32
33
  end
33
34
 
34
35
  it "should use any provided name as its name" do
@@ -36,80 +37,66 @@ describe Puppet::SSL::Host do
36
37
  end
37
38
 
38
39
  it "should retrieve its public key from its private key" do
39
- realkey = double('realkey')
40
- key = double('key', :content => realkey)
41
- allow(Puppet::SSL::Key.indirection).to receive(:find).and_return(key)
42
- pubkey = double('public_key')
43
- expect(realkey).to receive(:public_key).and_return(pubkey)
40
+ realkey = mock 'realkey'
41
+ key = stub 'key', :content => realkey
42
+ Puppet::SSL::Key.indirection.stubs(:find).returns(key)
43
+ pubkey = mock 'public_key'
44
+ realkey.expects(:public_key).returns pubkey
44
45
 
45
46
  expect(@host.public_key).to equal(pubkey)
46
47
  end
47
48
 
48
- it "should default to being a non-ca host" do
49
- expect(@host.ca?).to be_falsey
50
- end
51
-
52
- it "should be a ca host if its name matches the CA_NAME" do
53
- allow(Puppet::SSL::Host).to receive(:ca_name).and_return("yayca")
54
- expect(Puppet::SSL::Host.new("yayca")).to be_ca
55
- end
56
-
57
- it "should have a method for determining the CA location" do
58
- expect(Puppet::SSL::Host).to respond_to(:ca_location)
59
- end
60
-
61
- it "should have a method for specifying the CA location" do
62
- expect(Puppet::SSL::Host).to respond_to(:ca_location=)
63
- end
64
-
65
- it "should have a method for retrieving the default ssl host" do
66
- expect(Puppet::SSL::Host).to respond_to(:ca_location=)
67
- 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
68
54
 
69
- it "should have a method for producing an instance to manage the local host's keys" do
70
- expect(Puppet::SSL::Host).to respond_to(:localhost)
71
- 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
72
58
 
73
- it "should allow to reset localhost" do
74
- previous_host = Puppet::SSL::Host.localhost
75
- Puppet::SSL::Host.reset
76
- expect(Puppet::SSL::Host.localhost).not_to eq(previous_host)
77
- 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
78
64
 
79
- it "should generate the certificate for the localhost instance if no certificate is available" do
80
- host = double('host', :key => nil)
81
- expect(Puppet::SSL::Host).to receive(:new).and_return(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
82
68
 
83
- expect(host).to receive(:certificate).and_return(nil)
84
- expect(host).to receive(:generate)
69
+ host.expects(:certificate).returns nil
70
+ host.expects(:generate)
85
71
 
86
- expect(Puppet::SSL::Host.localhost).to equal(host)
87
- end
72
+ expect(Puppet::SSL::Host.localhost).to equal(host)
73
+ end
88
74
 
89
- 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
90
- Puppet[:autosign] = true
91
- Puppet[:confdir] = tmpdir('conf')
92
- Puppet[:dns_alt_names] = "foo,bar,baz"
93
- ca = Puppet::SSL::CertificateAuthority.new
94
- allow(Puppet::SSL::CertificateAuthority).to receive(:instance).and_return(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
95
79
 
96
- localhost = Puppet::SSL::Host.localhost
97
- cert = localhost.certificate
80
+ Puppet::SSL::Host.localhost
81
+ end
98
82
 
99
- expect(cert).to be_a(Puppet::SSL::Certificate)
100
- 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
101
88
  end
102
89
 
103
90
  context "with dns_alt_names" do
104
91
  before :each do
105
- @key = double('key content')
106
- key = double('key', :generate => true, :content => @key)
107
- allow(Puppet::SSL::Key).to receive(:new).and_return(key)
108
- allow(Puppet::SSL::Key.indirection).to receive(:save).with(key)
92
+ @key = stub('key content')
93
+ key = stub('key', :generate => true, :content => @key)
94
+ Puppet::SSL::Key.stubs(:new).returns key
95
+ Puppet::SSL::Key.indirection.stubs(:save).with(key)
109
96
 
110
- @cr = double('certificate request')
111
- allow(Puppet::SSL::CertificateRequest).to receive(:new).and_return(@cr)
112
- allow(Puppet::SSL::CertificateRequest.indirection).to receive(:save).with(@cr)
97
+ @cr = stub('certificate request', :render => "csr pem")
98
+ Puppet::SSL::CertificateRequest.stubs(:new).returns @cr
99
+ Puppet::SSL::Host.any_instance.stubs(:submit_certificate_request)
113
100
  end
114
101
 
115
102
  describe "explicitly specified" do
@@ -118,80 +105,17 @@ describe Puppet::SSL::Host do
118
105
  end
119
106
 
120
107
  it "should not include subjectAltName if not the local node" do
121
- expect(@cr).to receive(:generate).with(@key, {})
108
+ @cr.expects(:generate).with(@key, {})
122
109
 
123
- Puppet::SSL::Host.new('not-the-' + Puppet[:certname]).generate
110
+ Puppet::SSL::Host.new('not-the-' + Puppet[:certname]).generate_certificate_request
124
111
  end
125
112
 
126
- it "should include subjectAltName if I am a CA" do
127
- expect(@cr).to receive(:generate).
128
- with(@key, { :dns_alt_names => Puppet[:dns_alt_names] })
113
+ it "should include subjectAltName if the local node" do
114
+ @cr.expects(:generate).with(@key, { :dns_alt_names => 'one, two' })
129
115
 
130
- Puppet::SSL::Host.localhost
116
+ Puppet::SSL::Host.new(Puppet[:certname]).generate_certificate_request
131
117
  end
132
118
  end
133
-
134
- describe "implicitly defaulted" do
135
- let(:ca) { double('ca', :sign => nil) }
136
-
137
- before :each do
138
- Puppet[:dns_alt_names] = ''
139
-
140
- allow(Puppet::SSL::CertificateAuthority).to receive(:instance).and_return(ca)
141
- end
142
-
143
- it "should not include defaults if we're not the CA" do
144
- allow(Puppet::SSL::CertificateAuthority).to receive(:ca?).and_return(false)
145
-
146
- expect(@cr).to receive(:generate).with(@key, {})
147
-
148
- Puppet::SSL::Host.localhost
149
- end
150
-
151
- it "should not include defaults if not the local node" do
152
- allow(Puppet::SSL::CertificateAuthority).to receive(:ca?).and_return(true)
153
-
154
- expect(@cr).to receive(:generate).with(@key, {})
155
-
156
- Puppet::SSL::Host.new('not-the-' + Puppet[:certname]).generate
157
- end
158
-
159
- it "should not include defaults if we can't resolve our fqdn" do
160
- allow(Puppet::SSL::CertificateAuthority).to receive(:ca?).and_return(true)
161
- allow(Facter).to receive(:value).and_call_original
162
- allow(Facter).to receive(:value).with(:fqdn).and_return(nil)
163
-
164
- expect(@cr).to receive(: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
- allow(Puppet::SSL::CertificateAuthority).to receive(:ca?).and_return(true)
171
- allow(Facter).to receive(:value).and_call_original
172
- allow(Facter).to receive(:value).with(:fqdn).and_return('web.foo.com')
173
- allow(Facter).to receive(:value).with(:domain).and_return('foo.com')
174
-
175
- expect(@cr).to receive(:generate).with(@key, {:dns_alt_names => "puppet, web.foo.com, puppet.foo.com"})
176
-
177
- Puppet::SSL::Host.localhost
178
- end
179
- end
180
- end
181
-
182
- it "should always read the key for the localhost instance in from disk" do
183
- host = double('host', :certificate => "eh")
184
- expect(Puppet::SSL::Host).to receive(:new).and_return(host)
185
-
186
- expect(host).to receive(:key)
187
-
188
- Puppet::SSL::Host.localhost
189
- end
190
-
191
- it "should cache the localhost instance" do
192
- host = double('host', :certificate => "eh", :key => 'foo')
193
- expect(Puppet::SSL::Host).to receive(:new).once.and_return(host)
194
- expect(Puppet::SSL::Host.localhost).to eq(Puppet::SSL::Host.localhost)
195
119
  end
196
120
 
197
121
  it "should be able to verify its certificate matches its key" do
@@ -200,177 +124,35 @@ describe Puppet::SSL::Host do
200
124
 
201
125
  it "should consider the certificate invalid if it cannot find a key" do
202
126
  host = Puppet::SSL::Host.new("foo")
203
- certificate = double('cert', :fingerprint => 'DEADBEEF')
204
- expect(host).to receive(:certificate).twice.and_return(certificate)
205
- expect(host).to receive(:key).and_return(nil)
206
- expect { host.validate_certificate_with_key }.to raise_error(Puppet::Error, "No private key with which to validate certificate with fingerprint: DEADBEEF")
127
+ certificate = mock('cert', :fingerprint => 'DEADBEEF')
128
+ host.expects(:key).returns nil
129
+ expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, "No private key with which to validate certificate with fingerprint: DEADBEEF")
207
130
  end
208
131
 
209
132
  it "should consider the certificate invalid if it cannot find a certificate" do
210
133
  host = Puppet::SSL::Host.new("foo")
211
- expect(host).not_to receive(:key)
212
- expect(host).to receive(:certificate).and_return(nil)
213
- expect { host.validate_certificate_with_key }.to raise_error(Puppet::Error, "No certificate to validate.")
134
+ host.expects(:key).never
135
+ expect { host.validate_certificate_with_key(nil) }.to raise_error(Puppet::Error, "No certificate to validate.")
214
136
  end
215
137
 
216
138
  it "should consider the certificate invalid if the SSL certificate's key verification fails" do
217
139
  host = Puppet::SSL::Host.new("foo")
218
- key = double('key', :content => "private_key")
219
- sslcert = double('sslcert')
220
- certificate = double('cert', {:content => sslcert, :fingerprint => 'DEADBEEF'})
221
- allow(host).to receive(:key).and_return(key)
222
- allow(host).to receive(:certificate).and_return(certificate)
223
- expect(sslcert).to receive(:check_private_key).with("private_key").and_return(false)
224
- expect { host.validate_certificate_with_key }.to raise_error(Puppet::Error, /DEADBEEF/)
140
+ key = mock 'key', :content => "private_key"
141
+ sslcert = mock 'sslcert'
142
+ certificate = mock 'cert', {:content => sslcert, :fingerprint => 'DEADBEEF'}
143
+ host.stubs(:key).returns key
144
+ sslcert.expects(:check_private_key).with("private_key").returns false
145
+ expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, /DEADBEEF/)
225
146
  end
226
147
 
227
148
  it "should consider the certificate valid if the SSL certificate's key verification succeeds" do
228
149
  host = Puppet::SSL::Host.new("foo")
229
- key = double('key', :content => "private_key")
230
- sslcert = double('sslcert')
231
- certificate = double('cert', :content => sslcert)
232
- allow(host).to receive(:key).and_return(key)
233
- allow(host).to receive(:certificate).and_return(certificate)
234
- expect(sslcert).to receive(:check_private_key).with("private_key").and_return(true)
235
- expect{ host.validate_certificate_with_key }.not_to raise_error
236
- end
237
-
238
- describe "when specifying the CA location" do
239
- it "should support the location ':local'" do
240
- expect { Puppet::SSL::Host.ca_location = :local }.not_to raise_error
241
- end
242
-
243
- it "should support the location ':remote'" do
244
- expect { Puppet::SSL::Host.ca_location = :remote }.not_to raise_error
245
- end
246
-
247
- it "should support the location ':none'" do
248
- expect { Puppet::SSL::Host.ca_location = :none }.not_to raise_error
249
- end
250
-
251
- it "should support the location ':only'" do
252
- expect { Puppet::SSL::Host.ca_location = :only }.not_to raise_error
253
- end
254
-
255
- it "should not support other modes" do
256
- expect { Puppet::SSL::Host.ca_location = :whatever }.to raise_error(ArgumentError)
257
- end
258
-
259
- describe "as 'local'" do
260
- before do
261
- Puppet::SSL::Host.ca_location = :local
262
- end
263
-
264
- it "should set the cache class for Certificate, CertificateRevocationList, and CertificateRequest as :file" do
265
- expect(Puppet::SSL::Certificate.indirection.cache_class).to eq(:file)
266
- expect(Puppet::SSL::CertificateRequest.indirection.cache_class).to eq(:file)
267
- expect(Puppet::SSL::CertificateRevocationList.indirection.cache_class).to eq(:file)
268
- end
269
-
270
- it "should set the terminus class for Key and Host as :file" do
271
- expect(Puppet::SSL::Key.indirection.terminus_class).to eq(:file)
272
- expect(Puppet::SSL::Host.indirection.terminus_class).to eq(:file)
273
- end
274
-
275
- it "should set the terminus class for Certificate, CertificateRevocationList, and CertificateRequest as :ca" do
276
- expect(Puppet::SSL::Certificate.indirection.terminus_class).to eq(:ca)
277
- expect(Puppet::SSL::CertificateRequest.indirection.terminus_class).to eq(:ca)
278
- expect(Puppet::SSL::CertificateRevocationList.indirection.terminus_class).to eq(:ca)
279
- end
280
- end
281
-
282
- describe "as 'remote'" do
283
- before do
284
- Puppet::SSL::Host.ca_location = :remote
285
- end
286
-
287
- it "should set the cache class for Certificate, CertificateRevocationList, and CertificateRequest as :file" do
288
- expect(Puppet::SSL::Certificate.indirection.cache_class).to eq(:file)
289
- expect(Puppet::SSL::CertificateRequest.indirection.cache_class).to eq(:file)
290
- expect(Puppet::SSL::CertificateRevocationList.indirection.cache_class).to eq(:file)
291
- end
292
-
293
- it "should set the terminus class for Key as :file" do
294
- expect(Puppet::SSL::Key.indirection.terminus_class).to eq(:file)
295
- end
296
-
297
- it "should set the terminus class for Host, Certificate, CertificateRevocationList, and CertificateRequest as :rest" do
298
- expect(Puppet::SSL::Host.indirection.terminus_class).to eq(:rest)
299
- expect(Puppet::SSL::Certificate.indirection.terminus_class).to eq(:rest)
300
- expect(Puppet::SSL::CertificateRequest.indirection.terminus_class).to eq(:rest)
301
- expect(Puppet::SSL::CertificateRevocationList.indirection.terminus_class).to eq(:rest)
302
- end
303
- end
304
-
305
- describe "as 'only'" do
306
- before do
307
- Puppet::SSL::Host.ca_location = :only
308
- end
309
-
310
- it "should set the terminus class for Key, Certificate, CertificateRevocationList, and CertificateRequest as :ca" do
311
- expect(Puppet::SSL::Key.indirection.terminus_class).to eq(:ca)
312
- expect(Puppet::SSL::Certificate.indirection.terminus_class).to eq(:ca)
313
- expect(Puppet::SSL::CertificateRequest.indirection.terminus_class).to eq(:ca)
314
- expect(Puppet::SSL::CertificateRevocationList.indirection.terminus_class).to eq(:ca)
315
- end
316
-
317
- it "should set the cache class for Certificate, CertificateRevocationList, and CertificateRequest to nil" do
318
- expect(Puppet::SSL::Certificate.indirection.cache_class).to be_nil
319
- expect(Puppet::SSL::CertificateRequest.indirection.cache_class).to be_nil
320
- expect(Puppet::SSL::CertificateRevocationList.indirection.cache_class).to be_nil
321
- end
322
-
323
- it "should set the terminus class for Host to :file" do
324
- expect(Puppet::SSL::Host.indirection.terminus_class).to eq(:file)
325
- end
326
- end
327
-
328
- describe "as 'none'" do
329
- before do
330
- Puppet::SSL::Host.ca_location = :none
331
- end
332
-
333
- it "should set the terminus class for Key, Certificate, CertificateRevocationList, and CertificateRequest as :file" do
334
- expect(Puppet::SSL::Key.indirection.terminus_class).to eq(:disabled_ca)
335
- expect(Puppet::SSL::Certificate.indirection.terminus_class).to eq(:disabled_ca)
336
- expect(Puppet::SSL::CertificateRequest.indirection.terminus_class).to eq(:disabled_ca)
337
- expect(Puppet::SSL::CertificateRevocationList.indirection.terminus_class).to eq(:disabled_ca)
338
- end
339
-
340
- it "should set the terminus class for Host to 'none'" do
341
- expect { Puppet::SSL::Host.indirection.terminus_class }.to raise_error(Puppet::DevError)
342
- end
343
- end
344
- end
345
-
346
- it "should have a class method for destroying all files related to a given host" do
347
- expect(Puppet::SSL::Host).to respond_to(:destroy)
348
- end
349
-
350
- describe "when destroying a host's SSL files" do
351
- before do
352
- allow(Puppet::SSL::Key.indirection).to receive(:destroy).and_return(false)
353
- allow(Puppet::SSL::Certificate.indirection).to receive(:destroy).and_return(false)
354
- allow(Puppet::SSL::CertificateRequest.indirection).to receive(:destroy).and_return(false)
355
- end
356
-
357
- it "should destroy its certificate, certificate request, and key" do
358
- expect(Puppet::SSL::Key.indirection).to receive(:destroy).with("myhost")
359
- expect(Puppet::SSL::Certificate.indirection).to receive(:destroy).with("myhost")
360
- expect(Puppet::SSL::CertificateRequest.indirection).to receive(:destroy).with("myhost")
361
-
362
- Puppet::SSL::Host.destroy("myhost")
363
- end
364
-
365
- it "should return true if any of the classes returned true" do
366
- expect(Puppet::SSL::Certificate.indirection).to receive(:destroy).with("myhost").and_return(true)
367
-
368
- expect(Puppet::SSL::Host.destroy("myhost")).to be_truthy
369
- end
370
-
371
- it "should report that nothing was deleted if none of the classes returned true" do
372
- expect(Puppet::SSL::Host.destroy("myhost")).to eq("Nothing was deleted")
373
- end
150
+ key = mock 'key', :content => "private_key"
151
+ sslcert = mock 'sslcert'
152
+ certificate = mock 'cert', :content => sslcert
153
+ host.stubs(:key).returns key
154
+ sslcert.expects(:check_private_key).with("private_key").returns true
155
+ expect{ host.validate_certificate_with_key(certificate) }.not_to raise_error
374
156
  end
375
157
 
376
158
  describe "when initializing" do
@@ -383,11 +165,6 @@ describe Puppet::SSL::Host do
383
165
  it "should downcase a passed in name" do
384
166
  expect(Puppet::SSL::Host.new("Host.Domain.Com").name).to eq("host.domain.com")
385
167
  end
386
-
387
- it "should indicate that it is a CA host if its name matches the ca_name constant" do
388
- allow(Puppet::SSL::Host).to receive(:ca_name).and_return("myca")
389
- expect(Puppet::SSL::Host.new("myca")).to be_ca
390
- end
391
168
  end
392
169
 
393
170
  describe "when managing its private key" do
@@ -398,107 +175,100 @@ describe Puppet::SSL::Host do
398
175
  end
399
176
 
400
177
  it "should return nil if the key is not set and cannot be found" do
401
- expect(Puppet::SSL::Key.indirection).to receive(:find).with("myname").and_return(nil)
178
+ Puppet::SSL::Key.indirection.expects(:find).with("myname").returns(nil)
402
179
  expect(@host.key).to be_nil
403
180
  end
404
181
 
405
182
  it "should find the key in the Key class and return the Puppet instance" do
406
- expect(Puppet::SSL::Key.indirection).to receive(:find).with("myname").and_return(@key)
183
+ Puppet::SSL::Key.indirection.expects(:find).with("myname").returns(@key)
407
184
  expect(@host.key).to equal(@key)
408
185
  end
409
186
 
410
187
  it "should be able to generate and save a new key" do
411
- expect(Puppet::SSL::Key).to receive(:new).with("myname").and_return(@key)
188
+ Puppet::SSL::Key.expects(:new).with("myname").returns(@key)
412
189
 
413
- expect(@key).to receive(:generate)
414
- expect(Puppet::SSL::Key.indirection).to receive(:save)
190
+ @key.expects(:generate)
191
+ Puppet::SSL::Key.indirection.expects(:save)
415
192
 
416
193
  expect(@host.generate_key).to be_truthy
417
194
  expect(@host.key).to equal(@key)
418
195
  end
419
196
 
420
197
  it "should not retain keys that could not be saved" do
421
- expect(Puppet::SSL::Key).to receive(:new).with("myname").and_return(@key)
198
+ Puppet::SSL::Key.expects(:new).with("myname").returns(@key)
422
199
 
423
- expect(@key).to receive(:generate)
424
- expect(Puppet::SSL::Key.indirection).to receive(:save).and_raise("eh")
200
+ @key.stubs(:generate)
201
+ Puppet::SSL::Key.indirection.expects(:save).raises "eh"
425
202
 
426
203
  expect { @host.generate_key }.to raise_error(RuntimeError)
427
204
  expect(@host.key).to be_nil
428
205
  end
429
206
 
430
207
  it "should return any previously found key without requerying" do
431
- expect(Puppet::SSL::Key.indirection).to receive(:find).with("myname").and_return(@key).once
208
+ Puppet::SSL::Key.indirection.expects(:find).with("myname").returns(@key).once
432
209
  expect(@host.key).to equal(@key)
433
210
  expect(@host.key).to equal(@key)
434
211
  end
435
212
  end
436
213
 
437
214
  describe "when managing its certificate request" do
438
- before do
439
- @realrequest = "real request"
440
- @request = Puppet::SSL::CertificateRequest.new("myname")
441
- @request.content = @realrequest
215
+ before(:all) do
216
+ @pki = PuppetSpec::SSL.create_chained_pki
442
217
  end
443
218
 
444
- it "should return nil if the key is not set and cannot be found" do
445
- expect(Puppet::SSL::CertificateRequest.indirection).to receive(:find).with("myname").and_return(nil)
446
- expect(@host.certificate_request).to be_nil
219
+ before(:each) do
220
+ Puppet[:requestdir] = tmpdir('requests')
447
221
  end
448
222
 
449
- it "should find the request in the Key class and return it and return the Puppet SSL request" do
450
- expect(Puppet::SSL::CertificateRequest.indirection).to receive(:find).with("myname").and_return(@request)
451
-
452
- expect(@host.certificate_request).to equal(@request)
453
- end
223
+ let(:key) { Puppet::SSL::Key.from_s(@pki[:leaf_key].to_s, @host.name) }
454
224
 
455
225
  it "should generate a new key when generating the cert request if no key exists" do
456
- expect(Puppet::SSL::CertificateRequest).to receive(:new).with("myname").and_return(@request)
457
-
458
- key = double('key', :public_key => double("public_key"), :content => "mycontent")
226
+ @host.expects(:key).times(2).returns(nil).then.returns(key)
227
+ @host.expects(:generate_key).returns(key)
459
228
 
460
- expect(@host).to receive(:key).twice.and_return(nil, key)
461
- expect(@host).to receive(:generate_key).and_return(key)
462
-
463
- allow(@request).to receive(:generate)
464
- allow(Puppet::SSL::CertificateRequest.indirection).to receive(:save)
229
+ @host.stubs(:submit_certificate_request)
465
230
 
466
231
  @host.generate_certificate_request
232
+ expect(Puppet::FileSystem.exist?(File.join(Puppet[:requestdir], "#{@host.name}.pem"))).to be true
467
233
  end
468
234
 
469
235
  it "should be able to generate and save a new request using the private key" do
470
- expect(Puppet::SSL::CertificateRequest).to receive(:new).with("myname").and_return(@request)
471
-
472
- key = double('key', :public_key => double("public_key"), :content => "mycontent")
473
- allow(@host).to receive(:key).and_return(key)
474
- expect(@request).to receive(:generate).with("mycontent", {})
475
- expect(Puppet::SSL::CertificateRequest.indirection).to receive(:save).with(@request)
236
+ @host.stubs(:key).returns(key)
237
+ @host.stubs(:submit_certificate_request)
476
238
 
477
239
  expect(@host.generate_certificate_request).to be_truthy
478
- 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
479
258
  end
480
259
 
481
260
  it "should return any previously found request without requerying" do
482
- expect(Puppet::SSL::CertificateRequest.indirection).to receive(:find).with("myname").and_return(@request).once
261
+ request = mock("request")
262
+ @host.expects(:load_certificate_request_from_file).returns(request).once
483
263
 
484
- expect(@host.certificate_request).to equal(@request)
485
- expect(@host.certificate_request).to equal(@request)
264
+ expect(@host.certificate_request).to equal(request)
265
+ expect(@host.certificate_request).to equal(request)
486
266
  end
487
267
 
488
268
  it "should not keep its certificate request in memory if the request cannot be saved" do
489
- expect(Puppet::SSL::CertificateRequest).to receive(:new).with("myname").and_return(@request)
490
-
491
- key = double('key', :public_key => double("public_key"), :content => "mycontent")
492
- allow(@host).to receive(:key).and_return(key)
493
- allow(@request).to receive(:generate)
494
- allow(@request).to receive(:name).and_return("myname")
495
- terminus = double('terminus')
496
- allow(terminus).to receive(:validate)
497
- expect(Puppet::SSL::CertificateRequest.indirection).to receive(:prepare).and_return(terminus)
498
- expect(terminus).to receive(:save) do |req|
499
- expect(req.instance).to eq(@request)
500
- expect(req.key).to eq("myname")
501
- end.and_raise("eh")
269
+ @host.stubs(:key).returns(key)
270
+ @host.stubs(:submit_certificate_request)
271
+ Puppet::Util.expects(:replace_file).raises(RuntimeError)
502
272
 
503
273
  expect { @host.generate_certificate_request }.to raise_error(RuntimeError)
504
274
 
@@ -507,114 +277,113 @@ describe Puppet::SSL::Host do
507
277
  end
508
278
 
509
279
  describe "when managing its certificate" do
510
- before do
511
- @realcert = double('certificate')
512
- @cert = double('cert', :content => @realcert)
513
- allow(@host).to receive(:key).and_return(double("key"))
514
- allow(@host).to receive(:validate_certificate_with_key)
280
+ before(:all) do
281
+ @pki = PuppetSpec::SSL.create_chained_pki
515
282
  end
516
283
 
517
- it "should find the CA certificate if it does not have a certificate" do
518
- expect(Puppet::SSL::Certificate.indirection).to receive(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true).and_return(double("cacert"))
519
- allow(Puppet::SSL::Certificate.indirection).to receive(:find).with("myname").and_return(@cert)
520
- @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"))
521
290
  end
522
291
 
523
- it "should not find the CA certificate if it is the CA host" do
524
- expect(@host).to receive(:ca?).and_return(true)
525
- allow(Puppet::SSL::Certificate.indirection).to receive(:find)
526
- expect(Puppet::SSL::Certificate.indirection).not_to receive(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true)
292
+ let(:ca_cert_response) { @pki[:ca_bundle] }
293
+ let(:host_cert_response) { @pki[:unrevoked_leaf_node_cert] }
527
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')))
528
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)
529
306
  end
530
307
 
531
308
  it "should return nil if it cannot find a CA certificate" do
532
- expect(Puppet::SSL::Certificate.indirection).to receive(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true).and_return(nil)
533
- expect(Puppet::SSL::Certificate.indirection).not_to receive(:find).with("myname")
309
+ @host.expects(:ensure_ca_certificate).returns(false)
310
+ @host.expects(:get_host_certificate).never
534
311
 
535
312
  expect(@host.certificate).to be_nil
536
313
  end
537
314
 
538
315
  it "should find the key if it does not have one" do
539
- allow(Puppet::SSL::Certificate.indirection).to receive(:find)
540
- expect(@host).to receive(:key).and_return(double("key"))
316
+ @host.expects(:ensure_ca_certificate).returns(true)
317
+ @host.expects(:get_host_certificate).returns(nil)
318
+ @host.expects(:key).returns mock("key")
541
319
  @host.certificate
542
320
  end
543
321
 
544
322
  it "should generate the key if one cannot be found" do
545
- allow(Puppet::SSL::Certificate.indirection).to receive(:find)
546
- expect(@host).to receive(:key).and_return(nil)
547
- expect(@host).to receive(:generate_key)
323
+ @host.expects(:ensure_ca_certificate).returns(true)
324
+ @host.expects(:get_host_certificate).returns(nil)
325
+ @host.expects(:key).returns nil
326
+ @host.expects(:generate_key)
548
327
  @host.certificate
549
328
  end
550
329
 
551
- it "should find the certificate in the Certificate class and return the Puppet certificate instance" do
552
- expect(Puppet::SSL::Certificate.indirection).to receive(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true).and_return(double("cacert"))
553
- expect(Puppet::SSL::Certificate.indirection).to receive(:find).with("myname").and_return(@cert)
554
- 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)
555
343
  end
556
344
 
557
345
  it "should return any previously found certificate" do
558
- expect(Puppet::SSL::Certificate.indirection).to receive(:find).with(Puppet::SSL::CA_NAME, :fail_on_404 => true).and_return(double("cacert"))
559
- expect(Puppet::SSL::Certificate.indirection).to receive(:find).with("myname").and_return(@cert).once
346
+ cert = mock 'cert'
347
+ @host.expects(:ensure_ca_certificate).returns(true).once
348
+ @host.expects(:get_host_certificate).returns(cert).once
560
349
 
561
- expect(@host.certificate).to equal(@cert)
562
- expect(@host.certificate).to equal(@cert)
350
+ expect(@host.certificate).to equal(cert)
351
+ expect(@host.certificate).to equal(cert)
563
352
  end
564
- end
565
-
566
- it "should have a method for listing certificate hosts" do
567
- expect(Puppet::SSL::Host).to respond_to(:search)
568
- end
569
353
 
570
- describe "when listing certificate hosts" do
571
- it "should default to listing all clients with any file types" do
572
- expect(Puppet::SSL::Key.indirection).to receive(:search).and_return([])
573
- expect(Puppet::SSL::Certificate.indirection).to receive(:search).and_return([])
574
- expect(Puppet::SSL::CertificateRequest.indirection).to receive(:search).and_return([])
575
- Puppet::SSL::Host.search
576
- end
577
-
578
- it "should be able to list only clients with a key" do
579
- expect(Puppet::SSL::Key.indirection).to receive(:search).and_return([])
580
- expect(Puppet::SSL::Certificate.indirection).not_to receive(:search)
581
- expect(Puppet::SSL::CertificateRequest.indirection).not_to receive(:search)
582
- Puppet::SSL::Host.search :for => Puppet::SSL::Key
583
- end
584
-
585
- it "should be able to list only clients with a certificate" do
586
- expect(Puppet::SSL::Key.indirection).not_to receive(:search)
587
- expect(Puppet::SSL::Certificate.indirection).to receive(:search).and_return([])
588
- expect(Puppet::SSL::CertificateRequest.indirection).not_to receive(:search)
589
- Puppet::SSL::Host.search :for => Puppet::SSL::Certificate
590
- end
591
-
592
- it "should be able to list only clients with a certificate request" do
593
- expect(Puppet::SSL::Key.indirection).not_to receive(:search)
594
- expect(Puppet::SSL::Certificate.indirection).not_to receive(:search)
595
- expect(Puppet::SSL::CertificateRequest.indirection).to receive(:search).and_return([])
596
- Puppet::SSL::Host.search :for => Puppet::SSL::CertificateRequest
597
- end
598
-
599
- it "should return a Host instance created with the name of each found instance" do
600
- key = double('key', :name => "key", :to_ary => nil)
601
- cert = double('cert', :name => "cert", :to_ary => nil)
602
- csr = double('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
603
361
 
604
- expect(Puppet::SSL::Key.indirection).to receive(:search).and_return([key])
605
- expect(Puppet::SSL::Certificate.indirection).to receive(:search).and_return([cert])
606
- expect(Puppet::SSL::CertificateRequest.indirection).to receive(:search).and_return([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
607
371
 
608
- returned = []
609
- %w{key cert csr}.each do |name|
610
- result = double(name)
611
- returned << result
612
- expect(Puppet::SSL::Host).to receive(:new).with(name).and_return(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/)
613
377
  end
614
378
 
615
- result = Puppet::SSL::Host.search
616
- returned.each do |r|
617
- 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/)
618
387
  end
619
388
  end
620
389
  end
@@ -626,153 +395,154 @@ describe Puppet::SSL::Host do
626
395
  describe "when generating files" do
627
396
  before do
628
397
  @host = Puppet::SSL::Host.new("me")
629
- allow(@host).to receive(:generate_key)
630
- allow(@host).to receive(:generate_certificate_request)
398
+ @host.stubs(:generate_key)
399
+ @host.stubs(:generate_certificate_request)
400
+ @host.stubs(:certificate_request)
401
+ @host.stubs(:certificate)
631
402
  end
632
403
 
633
404
  it "should generate a key if one is not present" do
634
- allow(@host).to receive(:key).and_return nil
635
- expect(@host).to receive(:generate_key)
405
+ @host.stubs(:key).returns nil
406
+ @host.expects(:generate_key)
636
407
 
637
408
  @host.generate
638
409
  end
639
410
 
640
411
  it "should generate a certificate request if one is not present" do
641
- expect(@host).to receive(:certificate_request).and_return nil
642
- expect(@host).to receive(:generate_certificate_request)
412
+ @host.expects(:certificate_request).returns nil
413
+ @host.expects(:generate_certificate_request)
643
414
 
644
415
  @host.generate
645
416
  end
646
-
647
- describe "and it can create a certificate authority" do
648
- before do
649
- @ca = double('ca')
650
- allow(Puppet::SSL::CertificateAuthority).to receive(:instance).and_return(@ca)
651
- end
652
-
653
- it "should use the CA to sign its certificate request if it does not have a certificate" do
654
- expect(@host).to receive(:certificate).and_return(nil)
655
-
656
- expect(@ca).to receive(:sign).with(@host.name, {allow_dns_alt_names: true})
657
-
658
- @host.generate
659
- end
660
- end
661
-
662
- describe "and it cannot create a certificate authority" do
663
- before do
664
- allow(Puppet::SSL::CertificateAuthority).to receive(:instance).and_return(nil)
665
- end
666
-
667
- it "should seek its certificate" do
668
- expect(@host).to receive(:certificate)
669
-
670
- @host.generate
671
- end
672
- end
673
417
  end
674
418
 
675
419
  it "should have a method for creating an SSL store" do
676
420
  expect(Puppet::SSL::Host.new("me")).to respond_to(:ssl_store)
677
421
  end
678
422
 
679
- it "should always return the same store" do
680
- host = Puppet::SSL::Host.new("foo")
681
- store = double(
682
- 'store',
683
- :purpose= => nil,
684
- :add_file => nil,
685
- )
686
- expect(OpenSSL::X509::Store).to receive(:new).and_return(store)
687
- expect(host.ssl_store).to equal(host.ssl_store)
688
- end
689
-
690
423
  describe "when creating an SSL store" do
691
424
  before do
692
- @host = Puppet::SSL::Host.new("me")
693
- @store = double(
694
- 'store',
695
- :purpose= => nil,
696
- :add_file => nil,
697
- :add_crl => nil,
698
- :flags= => nil,
699
- )
700
- allow(OpenSSL::X509::Store).to receive(:new).and_return(@store)
701
-
702
425
  Puppet[:localcacert] = "ssl_host_testing"
703
-
704
- allow(Puppet::SSL::CertificateRevocationList.indirection).to receive(:find).and_return(nil)
705
426
  end
706
427
 
707
428
  it "should accept a purpose" do
708
- expect(@store).to receive(:purpose=).with("my special purpose")
709
- @host.ssl_store("my special purpose")
710
- end
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
711
435
 
712
- it "should default to OpenSSL::X509::PURPOSE_ANY as the purpose" do
713
- expect(@store).to receive(:purpose=).with(OpenSSL::X509::PURPOSE_ANY)
714
- @host.ssl_store
436
+ host.ssl_store(OpenSSL::X509::PURPOSE_SSL_SERVER)
715
437
  end
716
438
 
717
- it "should add the local CA cert file" do
718
- Puppet[:localcacert] = "/ca/cert/file"
719
- expect(@store).to receive(:add_file).with(Puppet[:localcacert])
720
- @host.ssl_store
439
+ context "and the CRL is not on disk" do
440
+ before do
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)
447
+ end
448
+
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])
458
+
459
+ @host.ssl_store
460
+ expect(Puppet::FileSystem.read(Puppet.settings[:hostcrl], :encoding => Encoding::UTF_8)).to eq(@pki[:crl_chain])
461
+ end
721
462
  end
722
463
 
723
464
  describe "and a CRL is available" do
724
465
  before do
725
- @crl = double('crl', :content => "real_crl")
726
- allow(Puppet::SSL::CertificateRevocationList.indirection).to receive(:find).and_return(@crl)
466
+ pki = PuppetSpec::SSL.create_chained_pki
467
+
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]
473
+
474
+ localcacert = Puppet.settings[:localcacert]
475
+ hostcrl = Puppet.settings[:hostcrl]
476
+
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
480
+
481
+ after do
482
+ Puppet::FileSystem.unlink(Puppet.settings[:localcacert])
483
+ Puppet::FileSystem.unlink(Puppet.settings[:hostcrl])
727
484
  end
728
485
 
729
- [true, 'chain'].each do |crl_setting|
486
+ [true, :chain].each do |crl_setting|
730
487
  describe "and 'certificate_revocation' is #{crl_setting}" do
731
488
  before do
732
- Puppet[:certificate_revocation] = crl_setting
489
+ @host = Puppet::SSL::Host.new(crl_setting.to_s)
490
+ @host.crl_usage = crl_setting
733
491
  end
734
492
 
735
- it "should add the CRL" do
736
- expect(@store).to receive(:add_crl).with("real_crl")
737
- @host.ssl_store
493
+ it "should verify unrevoked certs" do
494
+ expect(
495
+ @host.ssl_store.verify(@unrevoked_cert_from_self_signed_root)
496
+ ).to be true
738
497
  end
739
498
 
740
- it "should set the flags to OpenSSL::X509::V_FLAG_CRL_CHECK_ALL|OpenSSL::X509::V_FLAG_CRL_CHECK" do
741
- expect(@store).to receive(:flags=).with(OpenSSL::X509::V_FLAG_CRL_CHECK_ALL | OpenSSL::X509::V_FLAG_CRL_CHECK)
742
- @host.ssl_store
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
743
506
  end
744
507
  end
745
508
  end
746
509
 
747
510
  describe "and 'certificate_revocation' is leaf" do
748
511
  before do
749
- Puppet[:certificate_revocation] = 'leaf'
512
+ @host = Puppet::SSL::Host.new("leaf")
513
+ @host.crl_usage = :leaf
750
514
  end
751
515
 
752
- it "should add the CRL" do
753
- expect(@store).to receive(:add_crl).with("real_crl")
754
- @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
755
522
  end
756
523
 
757
- it "should set the flags to OpenSSL::X509::V_FLAG_CRL_CHECK" do
758
- expect(@store).to receive(:flags=).with(OpenSSL::X509::V_FLAG_CRL_CHECK)
759
- @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
760
529
  end
761
530
  end
762
531
 
763
532
  describe "and 'certificate_revocation' is false" do
764
533
  before do
765
- Puppet[:certificate_revocation] = false
534
+ @host = Puppet::SSL::Host.new("host")
535
+ @host.crl_usage = false
766
536
  end
767
537
 
768
- it "should not add the CRL" do
769
- expect(@store).not_to receive(:add_crl)
770
- @host.ssl_store
771
- end
772
-
773
- it "should not set the flags" do
774
- expect(@store).not_to receive(:flags=)
775
- @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
776
546
  end
777
547
  end
778
548
  end
@@ -784,206 +554,56 @@ describe Puppet::SSL::Host do
784
554
  end
785
555
 
786
556
  it "should generate its certificate request and attempt to read the certificate again if no certificate is found" do
787
- expect(@host).to receive(:certificate).twice.and_return(nil, "foo")
788
- expect(@host).to receive(:generate)
557
+ @host.expects(:certificate).times(2).returns(nil).then.returns "foo"
558
+ @host.expects(:generate)
789
559
  @host.wait_for_cert(1)
790
560
  end
791
561
 
792
562
  it "should catch and log errors during CSR saving" do
793
- expect(@host).to receive(:certificate).twice.and_return(nil, "foo")
794
- times_generate_called = 0
795
- expect(@host).to receive(:generate) do
796
- times_generate_called += 1
797
- raise RuntimeError if times_generate_called == 1
798
- nil
799
- end
800
- allow(@host).to receive(:sleep)
563
+ @host.expects(:certificate).times(2).returns(nil).then.returns "foo"
564
+ @host.expects(:generate).raises(RuntimeError).then.returns nil
565
+ @host.stubs(:sleep)
801
566
  @host.wait_for_cert(1)
802
567
  end
803
568
 
804
569
  it "should sleep and retry after failures saving the CSR if waitforcert is enabled" do
805
- expect(@host).to receive(:certificate).twice.and_return(nil, "foo")
806
- times_generate_called = 0
807
- expect(@host).to receive(:generate) do
808
- times_generate_called += 1
809
- raise RuntimeError if times_generate_called == 1
810
- nil
811
- end
812
- expect(@host).to receive(:sleep).with(1)
570
+ @host.expects(:certificate).times(2).returns(nil).then.returns "foo"
571
+ @host.expects(:generate).raises(RuntimeError).then.returns nil
572
+ @host.expects(:sleep).with(1)
813
573
  @host.wait_for_cert(1)
814
574
  end
815
575
 
816
576
  it "should exit after failures saving the CSR of waitforcert is disabled" do
817
- expect(@host).to receive(:certificate).and_return(nil)
818
- expect(@host).to receive(:generate).and_raise(RuntimeError)
819
- expect(@host).to receive(:puts)
577
+ @host.expects(:certificate).returns(nil)
578
+ @host.expects(:generate).raises(RuntimeError)
579
+ @host.expects(:puts)
820
580
  expect { @host.wait_for_cert(0) }.to exit_with 1
821
581
  end
822
582
 
823
583
  it "should exit if the wait time is 0 and it can neither find nor retrieve a certificate" do
824
- allow(@host).to receive(:certificate).and_return(nil)
825
- expect(@host).to receive(:generate)
826
- expect(@host).to receive(:puts)
584
+ @host.stubs(:certificate).returns nil
585
+ @host.expects(:generate)
586
+ @host.expects(:puts)
827
587
  expect { @host.wait_for_cert(0) }.to exit_with 1
828
588
  end
829
589
 
830
590
  it "should sleep for the specified amount of time if no certificate is found after generating its certificate request" do
831
- expect(@host).to receive(:certificate).exactly(3).times().and_return(nil, nil, "foo")
832
- expect(@host).to receive(:generate)
591
+ @host.expects(:certificate).times(3).returns(nil).then.returns(nil).then.returns "foo"
592
+ @host.expects(:generate)
833
593
 
834
- expect(@host).to receive(:sleep).with(1)
594
+ @host.expects(:sleep).with(1)
835
595
 
836
596
  @host.wait_for_cert(1)
837
597
  end
838
598
 
839
599
  it "should catch and log exceptions during certificate retrieval" do
840
- times_certificate_called = 0
841
- expect(@host).to receive(:certificate) do
842
- times_certificate_called += 1
843
- if times_certificate_called == 1
844
- return nil
845
- elsif times_certificate_called == 2
846
- raise RuntimeError
847
- end
848
- "foo"
849
- end.exactly(3).times()
850
- allow(@host).to receive(:generate)
851
- allow(@host).to receive(:sleep)
600
+ @host.expects(:certificate).times(3).returns(nil).then.raises(RuntimeError).then.returns("foo")
601
+ @host.stubs(:generate)
602
+ @host.stubs(:sleep)
852
603
 
853
- expect(Puppet).to receive(:err).twice
604
+ Puppet.expects(:err)
854
605
 
855
606
  @host.wait_for_cert(1)
856
607
  end
857
608
  end
858
-
859
- describe "when handling JSON", :unless => Puppet.features.microsoft_windows? do
860
- include PuppetSpec::Files
861
-
862
- before do
863
- Puppet[:vardir] = tmpdir("ssl_test_vardir")
864
- Puppet[:ssldir] = tmpdir("ssl_test_ssldir")
865
- # localcacert is where each client stores the CA certificate
866
- # cacert is where the master stores the CA certificate
867
- # Since we need to play the role of both for testing we need them to be the same and exist
868
- Puppet[:cacert] = Puppet[:localcacert]
869
-
870
- @ca=Puppet::SSL::CertificateAuthority.new
871
- end
872
-
873
- describe "when converting to JSON" do
874
- let(:host) do
875
- Puppet::SSL::Host.new("bazinga")
876
- end
877
-
878
- let(:json_hash) do
879
- {
880
- "fingerprint" => host.certificate_request.fingerprint,
881
- "desired_state" => 'requested',
882
- "name" => host.name
883
- }
884
- end
885
-
886
- it "should be able to identify a host with an unsigned certificate request" do
887
- host.generate_certificate_request
888
-
889
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
890
-
891
- base_json_comparison result, json_hash
892
- end
893
-
894
- it "should validate against the schema" do
895
- host.generate_certificate_request
896
-
897
- expect(host.to_json).to validate_against('api/schemas/host.json')
898
- end
899
-
900
- describe "explicit fingerprints" do
901
- [:SHA1, :SHA256, :SHA512].each do |md|
902
- it "should include #{md}" do
903
- mds = md.to_s
904
- host.generate_certificate_request
905
- json_hash["fingerprints"] = {}
906
- json_hash["fingerprints"][mds] = host.certificate_request.fingerprint(md)
907
-
908
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
909
- base_json_comparison result, json_hash
910
- expect(result["fingerprints"][mds]).to eq(json_hash["fingerprints"][mds])
911
- end
912
- end
913
- end
914
-
915
- describe "dns_alt_names" do
916
- describe "when not specified" do
917
- it "should include the dns_alt_names associated with the certificate" do
918
- host.generate_certificate_request
919
- json_hash["desired_alt_names"] = host.certificate_request.subject_alt_names
920
-
921
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
922
- base_json_comparison result, json_hash
923
- expect(result["dns_alt_names"]).to eq(json_hash["desired_alt_names"])
924
- end
925
- end
926
-
927
- [ "",
928
- "test, alt, names"
929
- ].each do |alt_names|
930
- describe "when #{alt_names}" do
931
- before(:each) do
932
- host.generate_certificate_request :dns_alt_names => alt_names
933
- end
934
-
935
- it "should include the dns_alt_names associated with the certificate" do
936
- json_hash["desired_alt_names"] = host.certificate_request.subject_alt_names
937
-
938
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
939
- base_json_comparison result, json_hash
940
- expect(result["dns_alt_names"]).to eq(json_hash["desired_alt_names"])
941
- end
942
-
943
- it "should validate against the schema" do
944
- expect(host.to_json).to validate_against('api/schemas/host.json')
945
- end
946
- end
947
- end
948
- end
949
-
950
- it "should be able to identify a host with a signed certificate" do
951
- host.generate_certificate_request
952
- @ca.sign(host.name)
953
- json_hash = {
954
- "fingerprint" => Puppet::SSL::Certificate.indirection.find(host.name).fingerprint,
955
- "desired_state" => 'signed',
956
- "name" => host.name,
957
- }
958
-
959
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
960
- base_json_comparison result, json_hash
961
- end
962
-
963
- it "should be able to identify a host with a revoked certificate" do
964
- host.generate_certificate_request
965
- @ca.sign(host.name)
966
- @ca.revoke(host.name)
967
- json_hash["fingerprint"] = Puppet::SSL::Certificate.indirection.find(host.name).fingerprint
968
- json_hash["desired_state"] = 'revoked'
969
-
970
- result = JSON.parse(Puppet::SSL::Host.new(host.name).to_json)
971
- base_json_comparison result, json_hash
972
- end
973
- end
974
-
975
- describe "when converting from JSON" do
976
- it "should return a Puppet::SSL::Host object with the specified desired state" do
977
- host = Puppet::SSL::Host.new("bazinga")
978
- host.desired_state="signed"
979
- json_hash = {
980
- "name" => host.name,
981
- "desired_state" => host.desired_state,
982
- }
983
- generated_host = Puppet::SSL::Host.from_data_hash(json_hash)
984
- expect(generated_host.desired_state).to eq(host.desired_state)
985
- expect(generated_host.name).to eq(host.name)
986
- end
987
- end
988
- end
989
609
  end