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
  require 'puppet_spec/compiler'
3
4
 
@@ -8,18 +9,17 @@ describe 'Capability types' do
8
9
  let(:loaders) { Puppet::Pops::Loaders.new(env) }
9
10
 
10
11
  before(:each) do
11
- allow_any_instance_of(Puppet::Parser::Compiler).to receive(:loaders).and_return(loaders)
12
+ Puppet::Parser::Compiler.any_instance.stubs(:loaders).returns(loaders)
13
+ Puppet.push_context({:loaders => loaders, :current_environment => env})
14
+ Puppet::Type.newtype :cap, :is_capability => true do
15
+ newparam :name
16
+ newparam :host
17
+ end
12
18
  end
13
19
 
14
- around :each do |example|
15
- Puppet.override(:loaders => loaders, :current_environment => env) do
16
- Puppet::Type.newtype :cap, :is_capability => true do
17
- newparam :name
18
- newparam :host
19
- end
20
- example.run
21
- Puppet::Type.rmtype(:cap)
22
- end
20
+ after(:each) do
21
+ Puppet::Type.rmtype(:cap)
22
+ Puppet.pop_context()
23
23
  end
24
24
 
25
25
  context 'annotations' do
@@ -86,7 +86,7 @@ describe 'Capability types' do
86
86
  parse_results << parser.parse
87
87
 
88
88
  main = Puppet::Parser::AST::Hostclass.new('', :code => Puppet::Parser::ParserFactory.code_merger.concatenate(parse_results))
89
- allow_any_instance_of(Puppet::Node::Environment).to receive(:perform_initial_import).and_return(main)
89
+ Puppet::Node::Environment.any_instance.stubs(:perform_initial_import).returns main
90
90
 
91
91
  type = compile_to_catalog(nil).environment_instance.known_resource_types.definition(:test)
92
92
  expect(type.produces).to be_instance_of(Array)
@@ -120,7 +120,7 @@ describe 'Capability types' do
120
120
  parse_results << parser.parse
121
121
 
122
122
  main = Puppet::Parser::AST::Hostclass.new('', :code => Puppet::Parser::ParserFactory.code_merger.concatenate(parse_results))
123
- allow_any_instance_of(Puppet::Node::Environment).to receive(:perform_initial_import).and_return(main)
123
+ Puppet::Node::Environment.any_instance.stubs(:perform_initial_import).returns main
124
124
 
125
125
  type = compile_to_catalog(nil).environment_instance.known_resource_types.definition('Mod::Test')
126
126
  expect(type.produces).to be_instance_of(Array)
@@ -131,7 +131,6 @@ describe 'Capability types' do
131
131
  expect(cns[:mappings]).to be_instance_of(Hash)
132
132
  expect(cns[:mappings]['host']).to be_instance_of(Puppet::Parser::AST::PopsBridge::Expression)
133
133
  end
134
-
135
134
  it "does not allow operator '+>' in a mapping" do
136
135
  expect do
137
136
  compile_to_catalog(<<-MANIFEST, node)
@@ -257,12 +256,12 @@ test { one: hostname => "ahost", export => Cap[two] }
257
256
  def mock_cap_finding
258
257
  cap = Puppet::Resource.new("Cap", "two")
259
258
  cap["host"] = "ahost"
260
- expect(Puppet::Resource::CapabilityFinder).to receive(:find).and_return(cap)
259
+ Puppet::Resource::CapabilityFinder.expects(:find).returns(cap)
261
260
  cap
262
261
  end
263
262
 
264
263
  it "does not fetch a consumed resource when consume metaparam not set" do
265
- expect(Puppet::Resource::CapabilityFinder).not_to receive(:find)
264
+ Puppet::Resource::CapabilityFinder.expects(:find).never
266
265
  catalog = make_catalog("test { one: }")
267
266
  expect(catalog.resource_keys.find { |type, _| type == "Cap" }).to be_nil
268
267
  expect(catalog.resource("Test", "one")["hostname"]).to eq("nohost")
@@ -394,7 +393,7 @@ test { one: hostname => "ahost", export => Cap[two] }
394
393
  end
395
394
 
396
395
  context 'and aliased resources' do
397
- let(:drive) { Puppet.features.microsoft_windows? ? 'C:' : '' }
396
+ let(:drive) { Puppet::Util::Platform.windows? ? 'C:' : '' }
398
397
  let(:code) { <<-PUPPET }
399
398
  $dir='#{drive}/tmp/test'
400
399
  $same_dir='#{drive}/tmp/test/'
@@ -1,8 +1,10 @@
1
+ #! /usr/bin/env ruby
1
2
  require 'spec_helper'
3
+ require 'puppet/test_ca'
2
4
 
3
- require 'puppet/ssl/certificate_factory'
5
+ require 'puppet/certificate_factory'
4
6
 
5
- describe Puppet::SSL::CertificateFactory do
7
+ describe Puppet::CertificateFactory, :unless => RUBY_PLATFORM == 'java' do
6
8
  let :serial do OpenSSL::BN.new('12') end
7
9
  let :name do "example.local" end
8
10
  let :x509_name do OpenSSL::X509::Name.new([['CN', name]]) end
@@ -12,17 +14,15 @@ describe Puppet::SSL::CertificateFactory do
12
14
  csr.generate(key)
13
15
  csr
14
16
  end
15
- let :issuer do
16
- cert = Puppet::SSL::CertificateAuthority.new
17
- cert.generate_ca_certificate
18
- cert.host.certificate.content
19
- end
17
+ let(:issuer) { Puppet::TestCa.new.ca_cert }
20
18
 
21
19
  describe "when generating the certificate" do
22
20
  it "should return a new X509 certificate" do
23
- expect(subject.build(:server, csr, issuer, serial)).not_to eq(
24
- subject.build(:server, csr, issuer, serial)
25
- )
21
+ a = subject.build(:server, csr, issuer, serial)
22
+ b = subject.build(:server, csr, issuer, serial)
23
+ # The two instances are equal in every aspect except that they are
24
+ # different instances - they are `==`, but not hash `eql?`
25
+ expect(a).not_to eql(b)
26
26
  end
27
27
 
28
28
  it "should set the certificate's version to 2" do
@@ -55,14 +55,6 @@ describe Puppet::SSL::CertificateFactory do
55
55
  expect(cert.not_before).to be_within(30).of(Time.now - 24*60*60)
56
56
  end
57
57
 
58
- it "should set the default TTL of the certificate to the `ca_ttl` setting" do
59
- Puppet[:ca_ttl] = 12
60
- now = Time.now.utc
61
- expect(Time).to receive(:now).at_least(:once).and_return(now)
62
- cert = subject.build(:server, csr, issuer, serial)
63
- expect(cert.not_after.to_i).to eq(now.to_i + 12)
64
- end
65
-
66
58
  it "should not allow a non-integer TTL" do
67
59
  [ 'foo', 1.2, Time.now, true ].each do |ttl|
68
60
  expect { subject.build(:server, csr, issuer, serial, ttl) }.to raise_error(ArgumentError)
@@ -71,7 +63,7 @@ describe Puppet::SSL::CertificateFactory do
71
63
 
72
64
  it "should respect a custom TTL for the CA" do
73
65
  now = Time.now.utc
74
- expect(Time).to receive(:now).at_least(:once).and_return(now)
66
+ Time.expects(:now).at_least_once.returns(now)
75
67
  cert = subject.build(:server, csr, issuer, serial, 12)
76
68
  expect(cert.not_after.to_i).to eq(now.to_i + 12)
77
69
  end
@@ -95,6 +87,7 @@ describe Puppet::SSL::CertificateFactory do
95
87
  )
96
88
  end
97
89
 
90
+
98
91
  it "should add an extension for the authorityKeyIdentifer" do
99
92
  cert = subject.build(:server, csr, issuer, serial)
100
93
  ef = OpenSSL::X509::ExtensionFactory.new(issuer, cert)
@@ -138,7 +131,7 @@ describe Puppet::SSL::CertificateFactory do
138
131
  csr = Puppet::SSL::CertificateRequest.new(name)
139
132
  csr.generate(key)
140
133
 
141
- allow(csr).to receive(:request_extensions).and_return([
134
+ csr.stubs(:request_extensions).returns([
142
135
  {'oid' => '1.3.6.1.4.1.34380.1.2.1', 'value' => 'some-value'},
143
136
  {'oid' => 'pp_uuid', 'value' => 'some-uuid'},
144
137
  ])
@@ -1,3 +1,4 @@
1
+ #! /usr/bin/env ruby
1
2
  require 'spec_helper'
2
3
 
3
4
  require 'puppet/configurer/downloader'
@@ -89,21 +90,21 @@ describe Puppet::Configurer::Downloader do
89
90
  end
90
91
 
91
92
  it "should always set the owner to the current UID" do
92
- expect(Process).to receive(:uid).and_return(51)
93
+ Process.expects(:uid).returns 51
93
94
 
94
95
  file = generate_file_resource(:path => '/path')
95
96
  expect(file[:owner]).to eq(51)
96
97
  end
97
98
 
98
99
  it "should always set the group to the current GID" do
99
- expect(Process).to receive(:gid).and_return(61)
100
+ Process.expects(:gid).returns 61
100
101
 
101
102
  file = generate_file_resource(:path => '/path')
102
103
  expect(file[:group]).to eq(61)
103
104
  end
104
105
  end
105
106
 
106
- describe "on Windows", :if => Puppet.features.microsoft_windows? do
107
+ describe "on Windows", :if => Puppet::Util::Platform.windows? do
107
108
  it "should omit the owner" do
108
109
  file = generate_file_resource(:path => 'C:/path')
109
110
 
@@ -160,7 +161,7 @@ describe Puppet::Configurer::Downloader do
160
161
  end
161
162
 
162
163
  it "should not issue a deprecation warning for source_permissions" do
163
- expect(Puppet).not_to receive(:puppet_deprecation_warning)
164
+ Puppet.expects(:puppet_deprecation_warning).never
164
165
  catalog = @dler.catalog
165
166
  expect(catalog.resources.size).to eq(1) # Must consume catalog to fix warnings
166
167
  end
@@ -183,37 +184,37 @@ describe Puppet::Configurer::Downloader do
183
184
  end
184
185
 
185
186
  it "should log that it is downloading" do
186
- expect(Puppet).to receive(:info)
187
+ Puppet.expects(:info)
187
188
 
188
189
  @dler.evaluate
189
190
  end
190
191
 
191
192
  it "should return all changed file paths" do
192
- trans = double('transaction')
193
+ trans = mock 'transaction'
193
194
 
194
- catalog = double('catalog')
195
- expect(@dler).to receive(:catalog).and_return(catalog)
196
- expect(catalog).to receive(:apply).and_yield(trans)
195
+ catalog = mock 'catalog'
196
+ @dler.expects(:catalog).returns(catalog)
197
+ catalog.expects(:apply).yields(trans)
197
198
 
198
- resource = double('resource')
199
- expect(resource).to receive(:[]).with(:path).and_return("/changed/file")
199
+ resource = mock 'resource'
200
+ resource.expects(:[]).with(:path).returns "/changed/file"
200
201
 
201
- expect(trans).to receive(:changed?).and_return([resource])
202
+ trans.expects(:changed?).returns([resource])
202
203
 
203
204
  expect(@dler.evaluate).to eq(%w{/changed/file})
204
205
  end
205
206
 
206
207
  it "should yield the resources if a block is given" do
207
- trans = double('transaction')
208
+ trans = mock 'transaction'
208
209
 
209
- catalog = double('catalog')
210
- expect(@dler).to receive(:catalog).and_return(catalog)
211
- expect(catalog).to receive(:apply).and_yield(trans)
210
+ catalog = mock 'catalog'
211
+ @dler.expects(:catalog).returns(catalog)
212
+ catalog.expects(:apply).yields(trans)
212
213
 
213
- resource = double('resource')
214
- expect(resource).to receive(:[]).with(:path).and_return("/changed/file")
214
+ resource = mock 'resource'
215
+ resource.expects(:[]).with(:path).returns "/changed/file"
215
216
 
216
- expect(trans).to receive(:changed?).and_return([resource])
217
+ trans.expects(:changed?).returns([resource])
217
218
 
218
219
  yielded = nil
219
220
  @dler.evaluate { |r| yielded = r }
@@ -221,22 +222,12 @@ describe Puppet::Configurer::Downloader do
221
222
  end
222
223
 
223
224
  it "should catch and log exceptions" do
224
- expect(Puppet).to receive(:err)
225
+ Puppet.expects(:err)
225
226
  # The downloader creates a new catalog for each apply, and really the only object
226
227
  # that it is possible to stub for the purpose of generating a puppet error
227
- allow_any_instance_of(Puppet::Resource::Catalog).to receive(:apply).and_raise(Puppet::Error, "testing")
228
+ Puppet::Resource::Catalog.any_instance.stubs(:apply).raises(Puppet::Error, "testing")
228
229
 
229
230
  expect { @dler.evaluate }.not_to raise_error
230
231
  end
231
-
232
- it "raises an exception if catalog application fails" do
233
- Puppet[:ignore_plugin_errors] = false
234
-
235
- expect(@dler.file).to receive(:retrieve).and_raise(Puppet::Error, "testing")
236
-
237
- expect {
238
- @dler.evaluate
239
- }.to raise_error(Puppet::Error, /testing/)
240
- end
241
232
  end
242
233
  end
@@ -1,3 +1,4 @@
1
+ #! /usr/bin/env ruby
1
2
  require 'spec_helper'
2
3
  require 'puppet/configurer'
3
4
  require 'puppet/configurer/fact_handler'
@@ -22,6 +23,10 @@ describe Puppet::Configurer::FactHandler do
22
23
 
23
24
  let(:facthandler) { FactHandlerTester.new('production') }
24
25
 
26
+ before :each do
27
+ Puppet::Node::Facts.indirection.terminus_class = :memory
28
+ end
29
+
25
30
  describe "when finding facts" do
26
31
  it "should use the node name value to retrieve the facts" do
27
32
  foo_facts = Puppet::Node::Facts.new('foo')
@@ -53,13 +58,13 @@ describe Puppet::Configurer::FactHandler do
53
58
  end
54
59
 
55
60
  it "should fail if finding facts fails" do
56
- expect(Puppet::Node::Facts.indirection).to receive(:find).and_raise(RuntimeError)
61
+ Puppet::Node::Facts.indirection.expects(:find).raises RuntimeError
57
62
 
58
63
  expect { facthandler.find_facts }.to raise_error(Puppet::Error, /Could not retrieve local facts/)
59
64
  end
60
65
 
61
66
  it "should only load fact plugins once" do
62
- expect(Puppet::Node::Facts.indirection).to receive(:find).once
67
+ Puppet::Node::Facts.indirection.expects(:find).once
63
68
  facthandler.find_facts
64
69
  end
65
70
  end
@@ -1,3 +1,4 @@
1
+ #! /usr/bin/env ruby
1
2
  require 'spec_helper'
2
3
  require 'puppet/configurer'
3
4
  require 'puppet/configurer/plugin_handler'
@@ -10,35 +11,21 @@ describe Puppet::Configurer::PluginHandler do
10
11
  before :each do
11
12
  # PluginHandler#load_plugin has an extra-strong rescue clause
12
13
  # this mock is to make sure that we don't silently ignore errors
13
- expect(Puppet).not_to receive(:err)
14
+ Puppet.expects(:err).never
14
15
  # Server_agent version needs to be at 5.3.4 in order to mount locales
15
16
  Puppet.push_context({:server_agent_version => "5.3.4"})
16
17
  end
17
18
 
18
19
  it "downloads plugins, facts, and locales" do
19
- times_called = 0
20
- allow_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate) { times_called += 1 }.and_return([])
20
+ Puppet::Configurer::Downloader.any_instance.expects(:evaluate).times(3).returns([])
21
21
 
22
22
  pluginhandler.download_plugins(environment)
23
- expect(times_called).to eq(3)
24
23
  end
25
24
 
26
25
  it "returns downloaded plugin, fact, and locale filenames" do
27
- times_called = 0
28
- allow_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate) do
29
- times_called += 1
30
-
31
- if times_called == 1
32
- %w[/a]
33
- elsif times_called == 2
34
- %w[/b]
35
- else
36
- %w[/c]
37
- end
38
- end
26
+ Puppet::Configurer::Downloader.any_instance.expects(:evaluate).times(3).returns(%w[/a]).then.returns(%w[/b]).then.returns(%w[/c])
39
27
 
40
28
  expect(pluginhandler.download_plugins(environment)).to match_array(%w[/a /b /c])
41
- expect(times_called).to eq(3)
42
29
  end
43
30
  end
44
31
 
@@ -46,25 +33,15 @@ describe Puppet::Configurer::PluginHandler do
46
33
  before :each do
47
34
  # PluginHandler#load_plugin has an extra-strong rescue clause
48
35
  # this mock is to make sure that we don't silently ignore errors
49
- expect(Puppet).not_to receive(:err)
36
+ Puppet.expects(:err).never
50
37
  # Server_agent version needs to be at 5.3.4 in order to mount locales
51
38
  Puppet.push_context({:server_agent_version => "5.3.3"})
52
39
  end
53
40
 
54
41
  it "returns downloaded plugin, fact, but not locale filenames" do
55
- times_called = 0
56
- allow_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate) do
57
- times_called += 1
58
-
59
- if times_called == 1
60
- %w[/a]
61
- else
62
- %w[/b]
63
- end
64
- end
42
+ Puppet::Configurer::Downloader.any_instance.expects(:evaluate).times(2).returns(%w[/a]).then.returns(%w[/b])
65
43
 
66
44
  expect(pluginhandler.download_plugins(environment)).to match_array(%w[/a /b])
67
- expect(times_called).to eq(2)
68
45
  end
69
46
  end
70
47
 
@@ -72,26 +49,16 @@ describe Puppet::Configurer::PluginHandler do
72
49
  before :each do
73
50
  # PluginHandler#load_plugin has an extra-strong rescue clause
74
51
  # this mock is to make sure that we don't silently ignore errors
75
- expect(Puppet).not_to receive(:err)
52
+ Puppet.expects(:err).never
76
53
  # Server_agent version needs to be at 5.3.4 in order to mount locales
77
54
  # A blank version will default to 0.0
78
55
  Puppet.push_context({:server_agent_version => ""})
79
56
  end
80
57
 
81
58
  it "returns downloaded plugin, fact, but not locale filenames" do
82
- times_called = 0
83
- allow_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate) do
84
- times_called += 1
85
-
86
- if times_called == 1
87
- %w[/a]
88
- else
89
- %w[/b]
90
- end
91
- end
59
+ Puppet::Configurer::Downloader.any_instance.expects(:evaluate).times(2).returns(%w[/a]).then.returns(%w[/b])
92
60
 
93
61
  expect(pluginhandler.download_plugins(environment)).to match_array(%w[/a /b])
94
- expect(times_called).to eq(2)
95
62
  end
96
63
  end
97
64
  end
@@ -1,325 +1,367 @@
1
+ #! /usr/bin/env ruby
1
2
  require 'spec_helper'
2
3
  require 'puppet/configurer'
3
- require 'webmock/rspec'
4
4
 
5
5
  describe Puppet::Configurer do
6
6
  before do
7
+ Puppet.settings.stubs(:use).returns(true)
8
+ @agent = Puppet::Configurer.new
9
+ @agent.stubs(:init_storage)
10
+ Puppet::Util::Storage.stubs(:store)
7
11
  Puppet[:server] = "puppetmaster"
8
12
  Puppet[:report] = true
9
-
10
- catalog.add_resource(resource)
11
-
12
- allow(Puppet::SSL::Host).to receive(:localhost).and_return(double('host'))
13
13
  end
14
14
 
15
- let(:configurer) { Puppet::Configurer.new }
16
- let(:report) { Puppet::Transaction::Report.new }
17
- let(:catalog) { Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym)) }
18
- let(:resource) { Puppet::Resource.new(:notice, 'a') }
19
- let(:facts) { Puppet::Node::Facts.new(Puppet[:node_name_value]) }
15
+ it "should include the Fact Handler module" do
16
+ expect(Puppet::Configurer.ancestors).to be_include(Puppet::Configurer::FactHandler)
17
+ end
20
18
 
21
19
  describe "when executing a pre-run hook" do
22
20
  it "should do nothing if the hook is set to an empty string" do
23
21
  Puppet.settings[:prerun_command] = ""
24
- expect(Puppet::Util::Execution).not_to receive(:execute)
22
+ Puppet::Util.expects(:exec).never
25
23
 
26
- configurer.execute_prerun_command
24
+ @agent.execute_prerun_command
27
25
  end
28
26
 
29
27
  it "should execute any pre-run command provided via the 'prerun_command' setting" do
30
28
  Puppet.settings[:prerun_command] = "/my/command"
31
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
29
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
32
30
 
33
- configurer.execute_prerun_command
31
+ @agent.execute_prerun_command
34
32
  end
35
33
 
36
34
  it "should fail if the command fails" do
37
35
  Puppet.settings[:prerun_command] = "/my/command"
38
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
36
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
39
37
 
40
- expect(configurer.execute_prerun_command).to be_falsey
38
+ expect(@agent.execute_prerun_command).to be_falsey
41
39
  end
42
40
  end
43
41
 
44
42
  describe "when executing a post-run hook" do
45
43
  it "should do nothing if the hook is set to an empty string" do
46
44
  Puppet.settings[:postrun_command] = ""
47
- expect(Puppet::Util::Execution).not_to receive(:execute)
45
+ Puppet::Util.expects(:exec).never
48
46
 
49
- configurer.execute_postrun_command
47
+ @agent.execute_postrun_command
50
48
  end
51
49
 
52
50
  it "should execute any post-run command provided via the 'postrun_command' setting" do
53
51
  Puppet.settings[:postrun_command] = "/my/command"
54
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
52
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
55
53
 
56
- configurer.execute_postrun_command
54
+ @agent.execute_postrun_command
57
55
  end
58
56
 
59
57
  it "should fail if the command fails" do
60
58
  Puppet.settings[:postrun_command] = "/my/command"
61
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
59
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
62
60
 
63
- expect(configurer.execute_postrun_command).to be_falsey
61
+ expect(@agent.execute_postrun_command).to be_falsey
64
62
  end
65
63
  end
66
64
 
67
65
  describe "when executing a catalog run" do
68
66
  before do
67
+ Puppet.settings.stubs(:use).returns(true)
68
+ @agent.stubs(:download_plugins)
69
+ Puppet::Node::Facts.indirection.terminus_class = :memory
70
+ @facts = Puppet::Node::Facts.new(Puppet[:node_name_value])
71
+ Puppet::Node::Facts.indirection.save(@facts)
72
+
73
+ @catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
74
+ @catalog.stubs(:to_ral).returns(@catalog)
69
75
  Puppet::Resource::Catalog.indirection.terminus_class = :rest
70
- allow(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(catalog)
76
+ Puppet::Resource::Catalog.indirection.stubs(:find).returns(@catalog)
77
+ @agent.stubs(:send_report)
78
+ @agent.stubs(:save_last_run_summary)
79
+
80
+ Puppet::Util::Log.stubs(:close_all)
81
+ end
82
+
83
+ after :all do
84
+ Puppet::Node::Facts.indirection.reset_terminus_class
85
+ Puppet::Resource::Catalog.indirection.reset_terminus_class
86
+ end
87
+
88
+ it "should initialize storage" do
89
+ Puppet::Util::Storage.expects(:load)
90
+ @agent.run
71
91
  end
72
92
 
73
93
  it "downloads plugins when told" do
74
- expect(configurer).to receive(:download_plugins)
75
- configurer.run(:pluginsync => true)
94
+ @agent.expects(:download_plugins)
95
+ @agent.run(:pluginsync => true)
76
96
  end
77
97
 
78
98
  it "does not download plugins when told" do
79
- expect(configurer).not_to receive(:download_plugins)
80
- configurer.run(:pluginsync => false)
99
+ @agent.expects(:download_plugins).never
100
+ @agent.run(:pluginsync => false)
81
101
  end
82
102
 
83
103
  it "should carry on when it can't fetch its node definition" do
84
104
  error = Net::HTTPError.new(400, 'dummy server communication error')
85
- expect(Puppet::Node.indirection).to receive(:find).and_raise(error)
86
- expect(configurer.run).to eq(0)
105
+ Puppet::Node.indirection.expects(:find).raises(error)
106
+ expect(@agent.run).to eq(0)
87
107
  end
88
108
 
89
- it "fails the run if pluginsync fails when usecacheonfailure is false" do
90
- Puppet[:ignore_plugin_errors] = false
91
-
92
- # --test implies these, set them so we don't fall back to a cached catalog
93
- Puppet[:use_cached_catalog] = false
94
- Puppet[:usecacheonfailure] = false
95
-
96
- body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
97
- stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(
98
- status: 404, body: body, headers: {'Content-Type' => 'application/json'}
99
- )
100
- stub_request(:get, %r{/puppet/v3/file_metadata/pluginfacts}).to_return(
101
- status: 404, body: body, headers: {'Content-Type' => 'application/json'}
102
- )
109
+ it "applies a cached catalog when it can't connect to the master" do
110
+ error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
103
111
 
104
- configurer.run(pluginsync: true)
112
+ Puppet::Node.indirection.expects(:find).raises(error)
113
+ Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entry(:ignore_cache => true)).raises(error)
114
+ Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entry(:ignore_terminus => true)).returns(@catalog)
105
115
 
106
- expect(@logs).to include(an_object_having_attributes(level: :err, message: %r{Failed to apply catalog: Failed to retrieve pluginfacts: Could not retrieve information from environment production source\(s\) puppet:///pluginfacts}))
116
+ expect(@agent.run).to eq(0)
107
117
  end
108
118
 
109
- it "applies a cached catalog if pluginsync fails when usecacheonfailure is true" do
110
- Puppet[:ignore_plugin_errors] = false
111
-
112
- Puppet[:use_cached_catalog] = false
113
- Puppet[:usecacheonfailure] = true
114
-
115
- body = "{\"message\":\"Not Found: Could not find environment 'fasdfad'\",\"issue_kind\":\"RUNTIME_ERROR\"}"
116
- stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(
117
- status: 404, body: body, headers: {'Content-Type' => 'application/json'}
118
- )
119
- stub_request(:get, %r{/puppet/v3/file_metadata/pluginfacts}).to_return(
120
- status: 404, body: body, headers: {'Content-Type' => 'application/json'}
121
- )
119
+ it "should initialize a transaction report if one is not provided" do
120
+ report = Puppet::Transaction::Report.new
121
+ Puppet::Transaction::Report.expects(:new).returns report
122
122
 
123
- expect(configurer.run(pluginsync: true, :report => report)).to eq(0)
124
- expect(report.cached_catalog_status).to eq('on_failure')
123
+ @agent.run
125
124
  end
126
125
 
127
- it "applies a cached catalog when it can't connect to the master" do
128
- error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
126
+ it "should respect node_name_fact when setting the host on a report" do
127
+ Puppet[:node_name_fact] = 'my_name_fact'
128
+ @facts.values = {'my_name_fact' => 'node_name_from_fact'}
129
129
 
130
- expect(Puppet::Node.indirection).to receive(:find).and_raise(error)
131
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_cache => true)).and_raise(error)
132
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_terminus => true)).and_return(catalog)
130
+ report = Puppet::Transaction::Report.new
133
131
 
134
- expect(configurer.run).to eq(0)
132
+ @agent.run(:report => report)
133
+ expect(report.host).to eq('node_name_from_fact')
135
134
  end
136
135
 
137
- it "should initialize a transaction report if one is not provided" do
138
- # host and settings catalogs each create a report...
139
- expect(Puppet::Transaction::Report).to receive(:new).and_return(report).twice
136
+ it "should pass the new report to the catalog" do
137
+ report = Puppet::Transaction::Report.new
138
+ Puppet::Transaction::Report.stubs(:new).returns report
139
+ @catalog.expects(:apply).with{|options| options[:report] == report}
140
140
 
141
- configurer.run
141
+ @agent.run
142
142
  end
143
143
 
144
- it "should respect node_name_fact when setting the host on a report" do
145
- Puppet[:node_name_fact] = 'my_name_fact'
146
- facts.values = {'my_name_fact' => 'node_name_from_fact'}
147
- Puppet::Node::Facts.indirection.save(facts)
144
+ it "should use the provided report if it was passed one" do
145
+ report = Puppet::Transaction::Report.new
146
+ @catalog.expects(:apply).with {|options| options[:report] == report}
148
147
 
149
- configurer.run(:report => report)
150
- expect(report.host).to eq('node_name_from_fact')
148
+ @agent.run(:report => report)
151
149
  end
152
150
 
153
- it "creates a new report when applying the catalog" do
154
- options = {}
155
- configurer.run(options)
151
+ it "should set the report as a log destination" do
152
+ report = Puppet::Transaction::Report.new
153
+
154
+ report.expects(:<<).with(instance_of(Puppet::Util::Log)).at_least_once
156
155
 
157
- expect(options[:report].metrics['time']['catalog_application']).to be_an_instance_of(Float)
156
+ @agent.run(:report => report)
158
157
  end
159
158
 
160
- it "uses the provided report when applying the catalog" do
161
- configurer.run(:report => report)
159
+ it "should retrieve the catalog" do
160
+ @agent.expects(:retrieve_catalog)
162
161
 
163
- expect(report.metrics['time']['catalog_application']).to be_an_instance_of(Float)
162
+ @agent.run
164
163
  end
165
164
 
166
165
  it "should log a failure and do nothing if no catalog can be retrieved" do
167
- expect(configurer).to receive(:retrieve_catalog).and_return(nil)
166
+ @agent.expects(:retrieve_catalog).returns nil
167
+
168
+ Puppet.expects(:err).with "Could not retrieve catalog; skipping run"
169
+
170
+ @agent.run
171
+ end
168
172
 
169
- expect(Puppet).to receive(:err).with("Could not retrieve catalog; skipping run")
173
+ it "should apply the catalog with all options to :run" do
174
+ @agent.expects(:retrieve_catalog).returns @catalog
170
175
 
171
- configurer.run
176
+ @catalog.expects(:apply).with { |args| args[:one] == true }
177
+ @agent.run :one => true
172
178
  end
173
179
 
174
- it "passes arbitrary options when applying the catalog" do
175
- expect(catalog).to receive(:apply).with(hash_including(one: true))
180
+ it "should accept a catalog and use it instead of retrieving a different one" do
181
+ @agent.expects(:retrieve_catalog).never
176
182
 
177
- configurer.run(catalog: catalog, one: true)
183
+ @catalog.expects(:apply)
184
+ @agent.run :one => true, :catalog => @catalog
178
185
  end
179
186
 
180
187
  it "should benchmark how long it takes to apply the catalog" do
181
- configurer.run(report: report)
188
+ @agent.expects(:benchmark).with(:notice, instance_of(String))
182
189
 
183
- expect(report.logs).to include(an_object_having_attributes(level: :notice, message: /Applied catalog in .* seconds/))
190
+ @agent.expects(:retrieve_catalog).returns @catalog
191
+
192
+ @catalog.expects(:apply).never # because we're not yielding
193
+ @agent.run
194
+ end
195
+
196
+ it "should execute post-run hooks after the run" do
197
+ @agent.expects(:execute_postrun_command)
198
+
199
+ @agent.run
184
200
  end
185
201
 
186
202
  it "should create report with passed transaction_uuid and job_id" do
187
- configurer = Puppet::Configurer.new("test_tuuid", "test_jid")
203
+ @agent = Puppet::Configurer.new("test_tuuid", "test_jid")
204
+ @agent.stubs(:init_storage)
188
205
 
189
206
  report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
190
- expect(Puppet::Transaction::Report).to receive(:new).with(anything, anything, 'test_tuuid', 'test_jid').and_return(report)
191
- expect(configurer).to receive(:send_report).with(report)
207
+ Puppet::Transaction::Report.expects(:new).with(anything, anything, 'test_tuuid', 'test_jid').returns(report)
208
+ @agent.expects(:send_report).with(report)
192
209
 
193
- configurer.run
210
+ @agent.run
194
211
  end
195
212
 
196
213
  it "should send the report" do
197
214
  report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
198
- expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
199
- expect(configurer).to receive(:send_report).with(report)
215
+ Puppet::Transaction::Report.expects(:new).returns(report)
216
+ @agent.expects(:send_report).with(report)
200
217
 
201
218
  expect(report.environment).to eq("test")
202
219
  expect(report.transaction_uuid).to eq("aaaa")
203
220
 
204
- configurer.run
221
+ @agent.run
205
222
  end
206
223
 
207
224
  it "should send the transaction report even if the catalog could not be retrieved" do
208
- expect(configurer).to receive(:retrieve_catalog).and_return(nil)
225
+ @agent.expects(:retrieve_catalog).returns nil
209
226
 
210
227
  report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
211
- expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
212
- expect(configurer).to receive(:send_report).with(report)
228
+ Puppet::Transaction::Report.expects(:new).returns(report)
229
+ @agent.expects(:send_report).with(report)
213
230
 
214
231
  expect(report.environment).to eq("test")
215
232
  expect(report.transaction_uuid).to eq("aaaa")
216
233
 
217
- configurer.run
234
+ @agent.run
218
235
  end
219
236
 
220
237
  it "should send the transaction report even if there is a failure" do
221
- expect(configurer).to receive(:retrieve_catalog).and_raise("whatever")
238
+ @agent.expects(:retrieve_catalog).raises "whatever"
222
239
 
223
240
  report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
224
- expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
225
- expect(configurer).to receive(:send_report).with(report)
241
+ Puppet::Transaction::Report.expects(:new).returns(report)
242
+ @agent.expects(:send_report).with(report)
226
243
 
227
244
  expect(report.environment).to eq("test")
228
245
  expect(report.transaction_uuid).to eq("aaaa")
229
246
 
230
- expect(configurer.run).to be_nil
247
+ expect(@agent.run).to be_nil
231
248
  end
232
249
 
233
250
  it "should remove the report as a log destination when the run is finished" do
234
- configurer.run(report: report)
251
+ report = Puppet::Transaction::Report.new
252
+ Puppet::Transaction::Report.expects(:new).returns(report)
253
+
254
+ @agent.run
235
255
 
236
256
  expect(Puppet::Util::Log.destinations).not_to include(report)
237
257
  end
238
258
 
239
- it "should return an exit status of 2 due to the notify resource 'changing'" do
240
- cat = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
241
- cat.add_resource(Puppet::Type.type(:notify).new(:name => 'something changed'))
259
+ it "should return the report exit_status as the result of the run" do
260
+ report = Puppet::Transaction::Report.new
261
+ Puppet::Transaction::Report.expects(:new).returns(report)
262
+ report.expects(:exit_status).returns(1234)
242
263
 
243
- expect(configurer.run(catalog: cat, report: report)).to eq(2)
264
+ expect(@agent.run).to eq(1234)
244
265
  end
245
266
 
246
267
  it "should return nil if catalog application fails" do
247
- expect(catalog).to receive(:apply).and_raise(Puppet::Error, 'One or more resource dependency cycles detected in graph')
248
-
249
- expect(configurer.run(catalog: catalog, report: report)).to be_nil
268
+ @catalog.expects(:apply).raises(Puppet::Error, 'One or more resource dependency cycles detected in graph')
269
+ report = Puppet::Transaction::Report.new
270
+ expect(@agent.run(catalog: @catalog, report: report)).to be_nil
250
271
  end
251
272
 
252
273
  it "should send the transaction report even if the pre-run command fails" do
253
- expect(Puppet::Transaction::Report).to receive(:new).and_return(report)
274
+ report = Puppet::Transaction::Report.new
275
+ Puppet::Transaction::Report.expects(:new).returns(report)
254
276
 
255
277
  Puppet.settings[:prerun_command] = "/my/command"
256
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
257
- expect(configurer).to receive(:send_report).with(report)
278
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
279
+ @agent.expects(:send_report).with(report)
258
280
 
259
- expect(configurer.run).to be_nil
281
+ expect(@agent.run).to be_nil
260
282
  end
261
283
 
262
284
  it "should include the pre-run command failure in the report" do
285
+ report = Puppet::Transaction::Report.new
286
+ Puppet::Transaction::Report.expects(:new).returns(report)
287
+
263
288
  Puppet.settings[:prerun_command] = "/my/command"
264
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
289
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
265
290
 
266
- expect(configurer.run(report: report)).to be_nil
291
+ expect(@agent.run).to be_nil
267
292
  expect(report.logs.find { |x| x.message =~ /Could not run command from prerun_command/ }).to be
268
293
  end
269
294
 
270
295
  it "should send the transaction report even if the post-run command fails" do
296
+ report = Puppet::Transaction::Report.new
297
+ Puppet::Transaction::Report.expects(:new).returns(report)
298
+
271
299
  Puppet.settings[:postrun_command] = "/my/command"
272
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
273
- expect(configurer).to receive(:send_report).with(report)
300
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
301
+ @agent.expects(:send_report).with(report)
274
302
 
275
- expect(configurer.run(report: report)).to be_nil
303
+ expect(@agent.run).to be_nil
276
304
  end
277
305
 
278
306
  it "should include the post-run command failure in the report" do
307
+ report = Puppet::Transaction::Report.new
308
+ Puppet::Transaction::Report.expects(:new).returns(report)
309
+
279
310
  Puppet.settings[:postrun_command] = "/my/command"
280
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
311
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
281
312
 
282
- expect(report).to receive(:<<) { |log, _| expect(log.message).to match(/Could not run command from postrun_command/) }.at_least(:once)
313
+ report.expects(:<<).with { |log| log.message.include?("Could not run command from postrun_command") }
283
314
 
284
- expect(configurer.run(report: report)).to be_nil
315
+ expect(@agent.run).to be_nil
285
316
  end
286
317
 
287
318
  it "should execute post-run command even if the pre-run command fails" do
288
319
  Puppet.settings[:prerun_command] = "/my/precommand"
289
320
  Puppet.settings[:postrun_command] = "/my/postcommand"
290
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/precommand"]).and_raise(Puppet::ExecutionFailure, "Failed")
291
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/postcommand"])
321
+ Puppet::Util::Execution.expects(:execute).with(["/my/precommand"]).raises(Puppet::ExecutionFailure, "Failed")
322
+ Puppet::Util::Execution.expects(:execute).with(["/my/postcommand"])
292
323
 
293
- expect(configurer.run).to be_nil
324
+ expect(@agent.run).to be_nil
294
325
  end
295
326
 
296
327
  it "should finalize the report" do
297
- expect(report).to receive(:finalize_report)
298
- configurer.run(report: report)
328
+ report = Puppet::Transaction::Report.new
329
+ Puppet::Transaction::Report.expects(:new).returns(report)
330
+
331
+ report.expects(:finalize_report)
332
+ @agent.run
299
333
  end
300
334
 
301
335
  it "should not apply the catalog if the pre-run command fails" do
336
+ report = Puppet::Transaction::Report.new
337
+ Puppet::Transaction::Report.expects(:new).returns(report)
338
+
302
339
  Puppet.settings[:prerun_command] = "/my/command"
303
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
340
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
304
341
 
305
- expect_any_instance_of(Puppet::Resource::Catalog).not_to receive(:apply)
306
- expect(configurer).to receive(:send_report)
342
+ @catalog.expects(:apply).never()
343
+ @agent.expects(:send_report)
307
344
 
308
- expect(configurer.run(report: report)).to be_nil
345
+ expect(@agent.run).to be_nil
309
346
  end
310
347
 
311
348
  it "should apply the catalog, send the report, and return nil if the post-run command fails" do
349
+ report = Puppet::Transaction::Report.new
350
+ Puppet::Transaction::Report.expects(:new).returns(report)
351
+
312
352
  Puppet.settings[:postrun_command] = "/my/command"
313
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
353
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
314
354
 
315
- expect_any_instance_of(Puppet::Resource::Catalog).to receive(:apply)
316
- expect(configurer).to receive(:send_report)
355
+ @catalog.expects(:apply)
356
+ @agent.expects(:send_report)
317
357
 
318
- expect(configurer.run(report: report)).to be_nil
358
+ expect(@agent.run).to be_nil
319
359
  end
320
360
 
321
361
  it 'includes total time metrics in the report after successfully applying the catalog' do
322
- configurer.run(report: report)
362
+ report = Puppet::Transaction::Report.new
363
+ @catalog.stubs(:apply).with() {|options| options[:report] == report }
364
+ @agent.run(report: report)
323
365
 
324
366
  expect(report.metrics['time']).to be
325
367
  expect(report.metrics['time']['total']).to be_a_kind_of(Numeric)
@@ -327,17 +369,19 @@ describe Puppet::Configurer do
327
369
 
328
370
  it 'includes total time metrics in the report even if prerun fails' do
329
371
  Puppet.settings[:prerun_command] = "/my/command"
330
- expect(Puppet::Util::Execution).to receive(:execute).with(["/my/command"]).and_raise(Puppet::ExecutionFailure, "Failed")
372
+ Puppet::Util::Execution.expects(:execute).with(["/my/command"]).raises(Puppet::ExecutionFailure, "Failed")
331
373
 
332
- configurer.run(report: report)
374
+ report = Puppet::Transaction::Report.new
375
+ @agent.run(report: report)
333
376
 
334
377
  expect(report.metrics['time']).to be
335
378
  expect(report.metrics['time']['total']).to be_a_kind_of(Numeric)
336
379
  end
337
380
 
338
381
  it 'includes total time metrics in the report even if catalog retrieval fails' do
339
- allow(configurer).to receive(:prepare_and_retrieve_catalog_from_cache).and_raise
340
- configurer.run(:report => report)
382
+ report = Puppet::Transaction::Report.new
383
+ @agent.stubs(:prepare_and_retrieve_catalog_from_cache).raises
384
+ @agent.run(:report => report)
341
385
 
342
386
  expect(report.metrics['time']).to be
343
387
  expect(report.metrics['time']['total']).to be_a_kind_of(Numeric)
@@ -345,155 +389,170 @@ describe Puppet::Configurer do
345
389
 
346
390
  it "should refetch the catalog if the server specifies a new environment in the catalog" do
347
391
  catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
348
- expect(configurer).to receive(:retrieve_catalog).and_return(catalog).twice
392
+ @agent.expects(:retrieve_catalog).returns(catalog).twice
349
393
 
350
- configurer.run
394
+ @agent.run
351
395
  end
352
396
 
353
- it "changes the configurer's environment if the server specifies a new environment in the catalog" do
354
- allow_any_instance_of(Puppet::Resource::Catalog).to receive(:environment).and_return("second_env")
397
+ it "should change the environment setting if the server specifies a new environment in the catalog" do
398
+ @catalog.stubs(:environment).returns("second_env")
355
399
 
356
- configurer.run
400
+ @agent.run
357
401
 
358
- expect(configurer.environment).to eq("second_env")
402
+ expect(@agent.environment).to eq("second_env")
359
403
  end
360
404
 
361
- it "changes the report's environment if the server specifies a new environment in the catalog" do
362
- allow_any_instance_of(Puppet::Resource::Catalog).to receive(:environment).and_return("second_env")
405
+ it "should fix the report if the server specifies a new environment in the catalog" do
406
+ report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
407
+ Puppet::Transaction::Report.expects(:new).returns(report)
408
+ @agent.expects(:send_report).with(report)
363
409
 
364
- configurer.run(report: report)
410
+ @catalog.stubs(:environment).returns("second_env")
411
+ @agent.stubs(:retrieve_catalog).returns(@catalog)
412
+
413
+ @agent.run
365
414
 
366
415
  expect(report.environment).to eq("second_env")
367
416
  end
368
417
 
369
418
  it "sends the transaction uuid in a catalog request" do
370
- configurer = Puppet::Configurer.new('aaa')
371
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(transaction_uuid: 'aaa'))
372
- configurer.run
419
+ @agent.instance_variable_set(:@transaction_uuid, 'aaa')
420
+ Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:transaction_uuid => 'aaa'))
421
+ @agent.run
373
422
  end
374
423
 
375
424
  it "sends the transaction uuid in a catalog request" do
376
- configurer = Puppet::Configurer.new('b', 'aaa')
377
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(job_id: 'aaa'))
378
- configurer.run
425
+ @agent.instance_variable_set(:@job_id, 'aaa')
426
+ Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:job_id => 'aaa'))
427
+ @agent.run
379
428
  end
380
429
 
381
430
  it "sets the static_catalog query param to true in a catalog request" do
382
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(static_catalog: true))
383
- configurer.run
431
+ Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:static_catalog => true))
432
+ @agent.run
384
433
  end
385
434
 
386
435
  it "sets the checksum_type query param to the default supported_checksum_types in a catalog request" do
387
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything,
388
- hash_including(checksum_type: 'md5.sha256.sha384.sha512.sha224'))
389
- configurer.run
436
+ Puppet::Resource::Catalog.indirection.expects(:find).with(anything,
437
+ has_entries(:checksum_type => 'md5.sha256.sha384.sha512.sha224'))
438
+ @agent.run
390
439
  end
391
440
 
392
441
  it "sets the checksum_type query param to the supported_checksum_types setting in a catalog request" do
393
- Puppet[:supported_checksum_types] = ['sha256']
394
442
  # Regenerate the agent to pick up the new setting
395
- configurer = Puppet::Configurer.new
443
+ Puppet[:supported_checksum_types] = ['sha256']
444
+ @agent = Puppet::Configurer.new
445
+ @agent.stubs(:init_storage)
446
+ @agent.stubs(:download_plugins)
447
+ @agent.stubs(:send_report)
448
+ @agent.stubs(:save_last_run_summary)
396
449
 
397
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(checksum_type: 'sha256'))
398
- configurer.run
450
+ Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:checksum_type => 'sha256'))
451
+ @agent.run
399
452
  end
400
453
 
401
454
  describe "when not using a REST terminus for catalogs" do
402
455
  it "should not pass any facts when retrieving the catalog" do
403
- # This is weird, we collect facts when constructing the node,
404
- # but we don't send them in the indirector request. Then the compiler
405
- # looks up the node, and collects its facts, which we could have sent
406
- # in the first place. This seems like a bug.
407
456
  Puppet::Resource::Catalog.indirection.terminus_class = :compiler
457
+ @agent.expects(:facts_for_uploading).never
458
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options|
459
+ options[:facts].nil?
460
+ }.returns @catalog
408
461
 
409
- expect(Puppet::Resource::Catalog.indirection).to receive(:find) do |name, options|
410
- expect(options[:facts]).to be_nil
411
- end.and_return(catalog)
412
-
413
- configurer.run
462
+ @agent.run
414
463
  end
415
464
  end
416
465
 
417
466
  describe "when using a REST terminus for catalogs" do
418
- it "should pass the url encoded facts and facts format as arguments when retrieving the catalog" do
467
+ it "should pass the prepared facts and the facts format as arguments when retrieving the catalog" do
419
468
  Puppet::Resource::Catalog.indirection.terminus_class = :rest
420
-
421
- facts.values = { 'foo' => 'bar' }
422
- Puppet::Node::Facts.indirection.save(facts)
423
-
424
- expect(
425
- Puppet::Resource::Catalog.indirection
426
- ).to receive(:find) do |_, options|
427
- expect(options[:facts_format]).to eq("application/json")
428
-
429
- unescaped = JSON.parse(CGI.unescape(options[:facts]))
430
- expect(unescaped).to include("values" => {"foo" => "bar"})
431
- end.and_return(catalog)
432
-
433
- configurer.run
469
+ # the "facts_for_uploading" are prepeared by first finding facts, and then encoding them
470
+ # this mocks the "find" with a special value 12345, which is then expected back in the
471
+ # call to "encode" - the encode in turn returns mocked data that is asserted as being
472
+ # presented to the catalog terminus as options.
473
+ #
474
+ @agent.expects(:find_facts).returns(12345)
475
+ @agent.expects(:encode_facts).with(12345).returns(:facts => "myfacts", :facts_format => :foo)
476
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options|
477
+ options[:facts] == "myfacts" and options[:facts_format] == :foo
478
+ }.returns @catalog
479
+
480
+ @agent.run
434
481
  end
435
482
  end
436
483
  end
437
484
 
485
+ describe "when initialized with a transaction_uuid" do
486
+ it "stores it" do
487
+ SecureRandom.expects(:uuid).never
488
+ configurer = Puppet::Configurer.new('foo')
489
+ expect(configurer.instance_variable_get(:@transaction_uuid) == 'foo')
490
+ end
491
+ end
492
+
438
493
  describe "when sending a report" do
439
494
  include PuppetSpec::Files
440
495
 
441
496
  before do
497
+ Puppet.settings.stubs(:use).returns(true)
498
+ @configurer = Puppet::Configurer.new
442
499
  Puppet[:lastrunfile] = tmpfile('last_run_file')
500
+
501
+ @report = Puppet::Transaction::Report.new
443
502
  Puppet[:reports] = "none"
444
503
  end
445
504
 
446
505
  it "should print a report summary if configured to do so" do
447
506
  Puppet.settings[:summarize] = true
448
507
 
449
- expect(report).to receive(:summary).and_return("stuff")
508
+ @report.expects(:summary).returns "stuff"
450
509
 
451
- expect(configurer).to receive(:puts).with("stuff")
452
- configurer.send_report(report)
510
+ @configurer.expects(:puts).with("stuff")
511
+ @configurer.send_report(@report)
453
512
  end
454
513
 
455
514
  it "should not print a report summary if not configured to do so" do
456
515
  Puppet.settings[:summarize] = false
457
516
 
458
- expect(configurer).not_to receive(:puts)
459
- configurer.send_report(report)
517
+ @configurer.expects(:puts).never
518
+ @configurer.send_report(@report)
460
519
  end
461
520
 
462
521
  it "should save the report if reporting is enabled" do
463
522
  Puppet.settings[:report] = true
464
523
 
465
- expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, instance_of(Hash))
466
- configurer.send_report(report)
524
+ Puppet::Transaction::Report.indirection.expects(:save).with(@report, nil, instance_of(Hash))
525
+ @configurer.send_report(@report)
467
526
  end
468
527
 
469
528
  it "should not save the report if reporting is disabled" do
470
529
  Puppet.settings[:report] = false
471
530
 
472
- expect(Puppet::Transaction::Report.indirection).not_to receive(:save).with(report, nil, instance_of(Hash))
473
- configurer.send_report(report)
531
+ Puppet::Transaction::Report.indirection.expects(:save).with(@report, nil, instance_of(Hash)).never
532
+ @configurer.send_report(@report)
474
533
  end
475
534
 
476
535
  it "should save the last run summary if reporting is enabled" do
477
536
  Puppet.settings[:report] = true
478
537
 
479
- expect(configurer).to receive(:save_last_run_summary).with(report)
480
- configurer.send_report(report)
538
+ @configurer.expects(:save_last_run_summary).with(@report)
539
+ @configurer.send_report(@report)
481
540
  end
482
541
 
483
542
  it "should save the last run summary if reporting is disabled" do
484
543
  Puppet.settings[:report] = false
485
544
 
486
- expect(configurer).to receive(:save_last_run_summary).with(report)
487
- configurer.send_report(report)
545
+ @configurer.expects(:save_last_run_summary).with(@report)
546
+ @configurer.send_report(@report)
488
547
  end
489
548
 
490
549
  it "should log but not fail if saving the report fails" do
491
550
  Puppet.settings[:report] = true
492
551
 
493
- expect(Puppet::Transaction::Report.indirection).to receive(:save).and_raise("whatever")
552
+ Puppet::Transaction::Report.indirection.expects(:save).raises("whatever")
494
553
 
495
- expect(Puppet).to receive(:err)
496
- expect { configurer.send_report(report) }.not_to raise_error
554
+ Puppet.expects(:err)
555
+ expect { @configurer.send_report(@report) }.not_to raise_error
497
556
  end
498
557
  end
499
558
 
@@ -501,17 +560,22 @@ describe Puppet::Configurer do
501
560
  include PuppetSpec::Files
502
561
 
503
562
  before do
563
+ Puppet.settings.stubs(:use).returns(true)
564
+ @configurer = Puppet::Configurer.new
565
+
566
+ @report = stub 'report', :raw_summary => {}
567
+
504
568
  Puppet[:lastrunfile] = tmpfile('last_run_file')
505
569
  end
506
570
 
507
571
  it "should write the last run file" do
508
- configurer.save_last_run_summary(report)
572
+ @configurer.save_last_run_summary(@report)
509
573
  expect(Puppet::FileSystem.exist?(Puppet[:lastrunfile])).to be_truthy
510
574
  end
511
575
 
512
576
  it "should write the raw summary as yaml" do
513
- expect(report).to receive(:raw_summary).and_return("summary")
514
- configurer.save_last_run_summary(report)
577
+ @report.expects(:raw_summary).returns("summary")
578
+ @configurer.save_last_run_summary(@report)
515
579
  expect(File.read(Puppet[:lastrunfile])).to eq(YAML.dump("summary"))
516
580
  end
517
581
 
@@ -524,15 +588,15 @@ describe Puppet::Configurer do
524
588
  end
525
589
  end.new
526
590
 
527
- expect(Puppet::Util).to receive(:replace_file).and_yield(fh)
591
+ Puppet::Util.expects(:replace_file).yields(fh)
528
592
 
529
- expect(Puppet).to receive(:err)
530
- expect { configurer.save_last_run_summary(report) }.to_not raise_error
593
+ Puppet.expects(:err)
594
+ expect { @configurer.save_last_run_summary(@report) }.to_not raise_error
531
595
  end
532
596
 
533
597
  it "should create the last run file with the correct mode" do
534
- expect(Puppet.settings.setting(:lastrunfile)).to receive(:mode).and_return('664')
535
- configurer.save_last_run_summary(report)
598
+ Puppet.settings.setting(:lastrunfile).expects(:mode).returns('664')
599
+ @configurer.save_last_run_summary(@report)
536
600
 
537
601
  if Puppet::Util::Platform.windows?
538
602
  require 'puppet/util/windows/security'
@@ -544,68 +608,66 @@ describe Puppet::Configurer do
544
608
  end
545
609
 
546
610
  it "should report invalid last run file permissions" do
547
- expect(Puppet.settings.setting(:lastrunfile)).to receive(:mode).and_return('892')
548
- expect(Puppet).to receive(:err).with(/Could not save last run local report.*892 is invalid/)
549
- configurer.save_last_run_summary(report)
611
+ Puppet.settings.setting(:lastrunfile).expects(:mode).returns('892')
612
+ Puppet.expects(:err).with(regexp_matches(/Could not save last run local report.*892 is invalid/))
613
+ @configurer.save_last_run_summary(@report)
550
614
  end
551
615
  end
552
616
 
553
617
  describe "when requesting a node" do
554
618
  it "uses the transaction uuid in the request" do
555
- expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(transaction_uuid: anything)).twice
556
- configurer.run
619
+ Puppet::Node.indirection.expects(:find).with(anything, has_entries(:transaction_uuid => anything)).twice
620
+ @agent.run
557
621
  end
558
622
 
559
623
  it "sends an explicitly configured environment request" do
560
- expect(Puppet.settings).to receive(:set_by_config?).with(:environment).and_return(true)
561
- expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: Puppet[:environment])).twice
562
- configurer.run
624
+ Puppet.settings.expects(:set_by_config?).with(:environment).returns(true)
625
+ Puppet::Node.indirection.expects(:find).with(anything, has_entries(:configured_environment => Puppet[:environment])).twice
626
+ @agent.run
563
627
  end
564
628
 
565
629
  it "does not send a configured_environment when using the default" do
566
- expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: nil)).twice
567
- configurer.run
630
+ Puppet::Node.indirection.expects(:find).with(anything, has_entries(:configured_environment => nil)).twice
631
+ @agent.run
568
632
  end
569
633
  end
570
634
 
571
- def expects_pluginsync
572
- metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
573
- stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
574
-
575
- # response retains owner/group/mode due to source_permissions => use
576
- facts_metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":500,\"group\":500,\"mode\":493,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
577
- stub_request(:get, %r{/puppet/v3/file_metadatas/pluginfacts}).to_return(status: 200, body: facts_metadata, headers: {'Content-Type' => 'application/json'})
578
- end
579
-
580
635
  def expects_new_catalog_only(catalog)
581
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
582
- expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_terminus: true))
636
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns catalog
637
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.never
583
638
  end
584
639
 
585
640
  def expects_cached_catalog_only(catalog)
586
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(catalog)
587
- expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_cache: true))
641
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns catalog
642
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.never
588
643
  end
589
644
 
590
645
  def expects_fallback_to_cached_catalog(catalog)
591
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(nil)
592
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(catalog)
646
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
647
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns catalog
593
648
  end
594
649
 
595
650
  def expects_fallback_to_new_catalog(catalog)
596
- expects_pluginsync
597
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
598
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
651
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns nil
652
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns catalog
599
653
  end
600
654
 
601
655
  def expects_neither_new_or_cached_catalog
602
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(nil)
603
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
656
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
657
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns nil
604
658
  end
605
659
 
606
660
  describe "when retrieving a catalog" do
607
661
  before do
608
- allow(Puppet::Resource::Catalog.indirection).to receive(:terminus_class).and_return(:rest)
662
+ Puppet.settings.stubs(:use).returns(true)
663
+ @agent.stubs(:facts_for_uploading).returns({})
664
+ @agent.stubs(:download_plugins)
665
+
666
+ # retrieve a catalog in the current environment, so we don't try to converge unexpectedly
667
+ @catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
668
+
669
+ # this is the default when using a Configurer instance
670
+ Puppet::Resource::Catalog.indirection.stubs(:terminus_class).returns :rest
609
671
  end
610
672
 
611
673
  describe "and configured to only retrieve a catalog from the cache" do
@@ -614,127 +676,100 @@ describe Puppet::Configurer do
614
676
  end
615
677
 
616
678
  it "should first look in the cache for a catalog" do
617
- expects_cached_catalog_only(catalog)
679
+ expects_cached_catalog_only(@catalog)
618
680
 
619
- configurer.run
681
+ expect(@agent.retrieve_catalog({})).to eq(@catalog)
620
682
  end
621
683
 
622
684
  it "should not make a node request or pluginsync when a cached catalog is successfully retrieved" do
623
- expect(Puppet::Node.indirection).not_to receive(:find)
624
- expects_cached_catalog_only(catalog)
625
- expect(configurer).not_to receive(:download_plugins)
685
+ Puppet::Node.indirection.expects(:find).never
686
+ expects_cached_catalog_only(@catalog)
687
+ @agent.expects(:download_plugins).never
626
688
 
627
- configurer.run
689
+ @agent.run
628
690
  end
629
691
 
630
692
  it "should make a node request and pluginsync when a cached catalog cannot be retrieved" do
631
- expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
632
- expects_fallback_to_new_catalog(catalog)
693
+ Puppet::Node.indirection.expects(:find).returns nil
694
+ expects_fallback_to_new_catalog(@catalog)
695
+ @agent.expects(:download_plugins)
633
696
 
634
- configurer.run
697
+ @agent.run
635
698
  end
636
699
 
637
700
  it "should set its cached_catalog_status to 'explicitly_requested'" do
638
- expects_cached_catalog_only(catalog)
639
-
640
- options = {}
641
- configurer.run(options)
701
+ expects_cached_catalog_only(@catalog)
642
702
 
643
- expect(options[:report].cached_catalog_status).to eq('explicitly_requested')
703
+ @agent.retrieve_catalog({})
704
+ expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('explicitly_requested')
644
705
  end
645
706
 
646
707
  it "should set its cached_catalog_status to 'explicitly requested' if the cached catalog is from a different environment" do
647
708
  cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
648
709
  expects_cached_catalog_only(cached_catalog)
649
710
 
650
- options = {}
651
- configurer.run(options)
652
-
653
- expect(options[:report].cached_catalog_status).to eq('explicitly_requested')
711
+ @agent.retrieve_catalog({})
712
+ expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('explicitly_requested')
654
713
  end
655
714
 
656
715
  it "should compile a new catalog if none is found in the cache" do
657
- expects_fallback_to_new_catalog(catalog)
716
+ expects_fallback_to_new_catalog(@catalog)
717
+
718
+ expect(@agent.retrieve_catalog({})).to eq(@catalog)
719
+ end
658
720
 
659
- options = {}
660
- configurer.run(options)
721
+ it "should set its cached_catalog_status to 'not_used' if no catalog is found in the cache" do
722
+ expects_fallback_to_new_catalog(@catalog)
661
723
 
662
- expect(options[:report].cached_catalog_status).to eq('not_used')
724
+ @agent.retrieve_catalog({})
725
+ expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('not_used')
663
726
  end
664
727
 
665
728
  it "should not attempt to retrieve a cached catalog again if the first attempt failed" do
666
- expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
729
+ Puppet::Node.indirection.expects(:find).returns(nil)
667
730
  expects_neither_new_or_cached_catalog
668
- expects_pluginsync
669
731
 
670
- configurer.run
732
+ @agent.run
671
733
  end
672
734
 
673
735
  it "should return the cached catalog when the environment doesn't match" do
674
736
  cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
675
737
  expects_cached_catalog_only(cached_catalog)
676
738
 
677
- allow(Puppet).to receive(:info)
678
- expect(Puppet).to receive(:info).with("Using cached catalog from environment 'second_env'")
679
-
680
- configurer.run
681
- end
682
-
683
- it "applies the catalog passed as options when the catalog cache terminus is not set" do
684
- expects_pluginsync
685
-
686
- catalog.add_resource(Puppet::Resource.new('notify', 'from apply'))
687
- configurer.run(catalog: catalog.to_ral)
688
-
689
- # make sure cache class is not set to avoid surprises later
690
- expect(Puppet::Resource::Catalog.indirection).to_not be_cache
691
- expect(@logs).to include(an_object_having_attributes(level: :notice, message: /defined 'message' as 'from apply'/))
692
- end
693
-
694
- it "applies the cached catalog when the catalog cache terminus is set, ignoring the catalog passed as options" do
695
- Puppet::Resource::Catalog.indirection.cache_class = :json
696
-
697
- cached_catalog = Puppet::Resource::Catalog.new(Puppet[:node_name_value], Puppet[:environment])
698
- cached_catalog.add_resource(Puppet::Resource.new('notify', 'from cache'))
699
-
700
- # update cached catalog
701
- Puppet.settings.use(:main, :agent)
702
- path = Puppet::Resource::Catalog.indirection.cache.path(cached_catalog.name)
703
- FileUtils.mkdir(File.dirname(path))
704
- File.write(path, cached_catalog.render(:json))
705
-
706
- configurer.run(catalog: catalog.to_ral)
707
-
708
- expect(@logs).to include(an_object_having_attributes(level: :notice, message: /defined 'message' as 'from cache'/))
739
+ Puppet.expects(:info).with("Using cached catalog from environment 'second_env'")
740
+ expect(@agent.retrieve_catalog({})).to eq(cached_catalog)
709
741
  end
710
742
  end
711
743
 
712
744
  describe "and strict environment mode is set" do
713
745
  before do
746
+ @catalog.stubs(:to_ral).returns(@catalog)
747
+ @catalog.stubs(:write_class_file)
748
+ @catalog.stubs(:write_resource_file)
749
+ @agent.stubs(:send_report)
750
+ @agent.stubs(:save_last_run_summary)
714
751
  Puppet.settings[:strict_environment_mode] = true
715
752
  end
716
753
 
717
754
  it "should not make a node request" do
718
- expect(Puppet::Node.indirection).not_to receive(:find)
755
+ Puppet::Node.indirection.expects(:find).never
719
756
 
720
- configurer.run
757
+ @agent.run
721
758
  end
722
759
 
723
760
  it "should return nil when the catalog's environment doesn't match the agent specified environment" do
724
- Puppet[:environment] = 'second_env'
725
- configurer = Puppet::Configurer.new
761
+ @agent.instance_variable_set(:@environment, 'second_env')
762
+ expects_new_catalog_only(@catalog)
726
763
 
727
- catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote("production"))
728
- expects_new_catalog_only(catalog)
729
-
730
- expect(Puppet).to receive(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
731
- expect(configurer.run).to be_nil
764
+ Puppet.expects(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
765
+ expect(@agent.run).to be_nil
732
766
  end
733
767
 
734
- it "should return 0 when the catalog's environment matches the agent specified environment" do
735
- expects_new_catalog_only(catalog)
768
+ it "should not return nil when the catalog's environment matches the agent specified environment" do
769
+ @agent.instance_variable_set(:@environment, 'production')
770
+ expects_new_catalog_only(@catalog)
736
771
 
737
- expect(configurer.run).to eq(0)
772
+ expect(@agent.run).to eq(0)
738
773
  end
739
774
 
740
775
  describe "and a cached catalog is explicitly requested" do
@@ -743,274 +778,209 @@ describe Puppet::Configurer do
743
778
  end
744
779
 
745
780
  it "should return nil when the cached catalog's environment doesn't match the agent specified environment" do
746
- Puppet[:environment] = 'second_env'
747
- configurer = Puppet::Configurer.new
748
-
749
- catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote("production"))
750
- expects_cached_catalog_only(catalog)
781
+ @agent.instance_variable_set(:@environment, 'second_env')
782
+ expects_cached_catalog_only(@catalog)
751
783
 
752
- expect(Puppet).to receive(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
753
- expect(configurer.run).to be_nil
784
+ Puppet.expects(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
785
+ expect(@agent.run).to be_nil
754
786
  end
755
787
 
756
788
  it "should proceed with the cached catalog if its environment matchs the local environment" do
757
- expects_cached_catalog_only(catalog)
789
+ Puppet.settings[:use_cached_catalog] = true
790
+ @agent.instance_variable_set(:@environment, 'production')
791
+ expects_cached_catalog_only(@catalog)
758
792
 
759
- expect(configurer.run).to eq(0)
793
+ expect(@agent.run).to eq(0)
760
794
  end
761
795
  end
762
796
  end
763
797
 
764
- it "should set its cached_catalog_status to 'not_used' when downloading a new catalog" do
765
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
798
+ it "should use the Catalog class to get its catalog" do
799
+ Puppet::Resource::Catalog.indirection.expects(:find).returns @catalog
766
800
 
767
- options = {}
768
- configurer.run(options)
801
+ @agent.retrieve_catalog({})
802
+ end
803
+
804
+ it "should set its cached_catalog_status to 'not_used' when downloading a new catalog" do
805
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
769
806
 
770
- expect(options[:report].cached_catalog_status).to eq('not_used')
807
+ @agent.retrieve_catalog({})
808
+ expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('not_used')
771
809
  end
772
810
 
773
811
  it "should use its node_name_value to retrieve the catalog" do
774
- myhost_facts = Puppet::Node::Facts.new("myhost.domain.com")
775
- Puppet::Node::Facts.indirection.save(myhost_facts)
776
-
812
+ Facter.stubs(:value).returns "eh"
777
813
  Puppet.settings[:node_name_value] = "myhost.domain.com"
778
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with("myhost.domain.com", anything).and_return(catalog)
814
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| name == "myhost.domain.com" }.returns @catalog
779
815
 
780
- configurer.run
816
+ @agent.retrieve_catalog({})
781
817
  end
782
818
 
783
- it "should log when no catalog can be retrieved from the server" do
784
- expects_fallback_to_cached_catalog(catalog)
819
+ it "should default to returning a catalog retrieved directly from the server, skipping the cache" do
820
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
785
821
 
786
- allow(Puppet).to receive(:info)
787
- expect(Puppet).to receive(:info).with("Using cached catalog from environment 'production'")
788
- configurer.run
822
+ expect(@agent.retrieve_catalog({})).to eq(@catalog)
789
823
  end
790
824
 
791
- it "should set its cached_catalog_status to 'on_failure' when no catalog can be retrieved from the server" do
792
- expects_fallback_to_cached_catalog(catalog)
825
+ it "should log and return the cached catalog when no catalog can be retrieved from the server" do
826
+ expects_fallback_to_cached_catalog(@catalog)
793
827
 
794
- options = {}
795
- configurer.run(options)
828
+ Puppet.expects(:info).with("Using cached catalog from environment 'production'")
829
+ expect(@agent.retrieve_catalog({})).to eq(@catalog)
830
+ end
796
831
 
797
- expect(options[:report].cached_catalog_status).to eq('on_failure')
832
+ it "should set its cached_catalog_status to 'on_failure' when no catalog can be retrieved from the server" do
833
+ expects_fallback_to_cached_catalog(@catalog)
834
+
835
+ @agent.retrieve_catalog({})
836
+ expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('on_failure')
798
837
  end
799
838
 
800
839
  it "should not look in the cache for a catalog if one is returned from the server" do
801
- expects_new_catalog_only(catalog)
840
+ expects_new_catalog_only(@catalog)
802
841
 
803
- configurer.run
842
+ expect(@agent.retrieve_catalog({})).to eq(@catalog)
804
843
  end
805
844
 
806
845
  it "should return the cached catalog when retrieving the remote catalog throws an exception" do
807
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_raise("eh")
808
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(catalog)
846
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.raises "eh"
847
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
809
848
 
810
- configurer.run
849
+ expect(@agent.retrieve_catalog({})).to eq(@catalog)
811
850
  end
812
851
 
813
852
  it "should set its cached_catalog_status to 'on_failure' when retrieving the remote catalog throws an exception" do
814
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_raise("eh")
815
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(catalog)
853
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.raises "eh"
854
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
816
855
 
817
- options = {}
818
- configurer.run(options)
819
-
820
- expect(options[:report].cached_catalog_status).to eq('on_failure')
856
+ @agent.retrieve_catalog({})
857
+ expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('on_failure')
821
858
  end
822
859
 
823
860
  it "should log and return nil if no catalog can be retrieved from the server and :usecacheonfailure is disabled" do
824
861
  Puppet[:usecacheonfailure] = false
825
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(nil)
862
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
826
863
 
827
- expect(Puppet).to receive(:warning).with('Not using cache on failed catalog')
864
+ Puppet.expects(:warning).with('Not using cache on failed catalog')
828
865
 
829
- expect(configurer.run).to be_nil
866
+ expect(@agent.retrieve_catalog({})).to be_nil
830
867
  end
831
868
 
832
869
  it "should set its cached_catalog_status to 'not_used' if no catalog can be retrieved from the server and :usecacheonfailure is disabled or fails to retrieve a catalog" do
833
870
  Puppet[:usecacheonfailure] = false
834
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(nil)
835
-
836
- options = {}
837
- configurer.run(options)
871
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
838
872
 
839
- expect(options[:report].cached_catalog_status).to eq('not_used')
873
+ @agent.retrieve_catalog({})
874
+ expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('not_used')
840
875
  end
841
876
 
842
877
  it "should return nil if no cached catalog is available and no catalog can be retrieved from the server" do
843
878
  expects_neither_new_or_cached_catalog
844
879
 
845
- expect(configurer.run).to be_nil
880
+ expect(@agent.retrieve_catalog({})).to be_nil
846
881
  end
847
882
 
848
883
  it "should return nil if its cached catalog environment doesn't match server-specified environment" do
849
884
  cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
885
+ @agent.instance_variable_set(:@node_environment, 'production')
850
886
 
851
887
  expects_fallback_to_cached_catalog(cached_catalog)
852
888
 
853
- allow(Puppet).to receive(:err)
854
- expect(Puppet).to receive(:err).with("Not using cached catalog because its environment 'second_env' does not match 'production'")
855
- expect(configurer.run).to be_nil
889
+ Puppet.expects(:err).with("Not using cached catalog because its environment 'second_env' does not match 'production'")
890
+ expect(@agent.retrieve_catalog({})).to be_nil
856
891
  end
857
892
 
858
893
  it "should set its cached_catalog_status to 'not_used' if the cached catalog environment doesn't match server-specified environment" do
859
894
  cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
895
+ @agent.instance_variable_set(:@node_environment, 'production')
860
896
 
861
897
  expects_fallback_to_cached_catalog(cached_catalog)
862
898
 
863
- options = {}
864
- configurer.run(options)
865
- expect(options[:report].cached_catalog_status).to eq('not_used')
899
+ @agent.retrieve_catalog({})
900
+ expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('not_used')
866
901
  end
867
902
 
868
- it "should set its cached_catalog_status to 'on_failure' if the cached catalog environment matches server-specified environment" do
869
- expects_fallback_to_cached_catalog(catalog)
903
+ it "should return its cached catalog if the environment matches the server-specified environment" do
904
+ cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment]))
905
+ @agent.instance_variable_set(:@node_environment, cached_catalog.environment)
870
906
 
871
- options = {}
872
- configurer.run(options)
873
- expect(options[:report].cached_catalog_status).to eq('on_failure')
874
- end
875
-
876
- it "should not update the cached catalog in noop mode" do
877
- Puppet[:noop] = true
878
-
879
- stub_request(:get, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
880
-
881
- Puppet::Resource::Catalog.indirection.cache_class = :json
882
- path = Puppet::Resource::Catalog.indirection.cache.path(catalog.name)
907
+ expects_fallback_to_cached_catalog(cached_catalog)
883
908
 
884
- expect(File).to_not be_exist(path)
885
- configurer.run
886
- expect(File).to_not be_exist(path)
909
+ expect(@agent.retrieve_catalog({})).to eq(cached_catalog)
887
910
  end
888
911
 
889
- it "should update the cached catalog when not in noop mode" do
890
- Puppet[:noop] = false
891
- Puppet[:log_level] = 'info'
892
-
893
- stub_request(:get, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
894
-
895
- Puppet::Resource::Catalog.indirection.cache_class = :json
896
- cache_path = Puppet::Resource::Catalog.indirection.cache.path(Puppet[:node_name_value])
912
+ it "should set its cached_catalog_status to 'on_failure' if the cached catalog environment matches server-specified environment" do
913
+ cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment]))
914
+ @agent.instance_variable_set(:@node_environment, cached_catalog.environment)
897
915
 
898
- expect(File).to_not be_exist(cache_path)
899
- configurer.run
900
- expect(File).to be_exist(cache_path)
916
+ expects_fallback_to_cached_catalog(cached_catalog)
901
917
 
902
- expect(@logs).to include(an_object_having_attributes(level: :info, message: "Caching catalog for #{Puppet[:node_name_value]}"))
918
+ @agent.retrieve_catalog({})
919
+ expect(@agent.instance_variable_get(:@cached_catalog_status)).to eq('on_failure')
903
920
  end
904
921
 
905
- it "successfully applies the catalog without a cache" do
906
- stub_request(:get, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
907
-
908
- Puppet::Resource::Catalog.indirection.cache_class = nil
922
+ it "should not update the cached catalog in noop mode" do
923
+ Puppet[:noop] = true
924
+ Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:ignore_cache => true, :ignore_cache_save => true)).returns(@catalog)
909
925
 
910
- expect(configurer.run).to eq(0)
926
+ @agent.retrieve_catalog({})
911
927
  end
912
928
 
913
- it "should not update the cached catalog when running puppet apply" do
914
- Puppet::Resource::Catalog.indirection.cache_class = :json
915
- path = Puppet::Resource::Catalog.indirection.cache.path(catalog.name)
929
+ it "should update the cached catalog when not in noop mode" do
930
+ Puppet[:noop] = false
931
+ Puppet::Resource::Catalog.indirection.expects(:find).with(anything, has_entries(:ignore_cache => true, :ignore_cache_save => false)).returns(@catalog)
916
932
 
917
- expect(File).to_not be_exist(path)
918
- configurer.run(catalog: catalog)
919
- expect(File).to_not be_exist(path)
933
+ @agent.retrieve_catalog({})
920
934
  end
921
935
  end
922
936
 
923
- describe "when converging the environment" do
924
- let(:apple) { Puppet::Resource::Catalog.new(Puppet[:node_name_value], Puppet::Node::Environment.remote('apple')) }
925
- let(:banana) { Puppet::Resource::Catalog.new(Puppet[:node_name_value], Puppet::Node::Environment.remote('banana')) }
926
-
927
- before :each do
928
- apple.add_resource(resource)
929
- banana.add_resource(resource)
930
- end
931
-
932
- it "converges after multiple attempts" do
933
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(apple, banana, banana)
934
-
935
- allow(Puppet).to receive(:notice)
936
- expect(Puppet).to receive(:notice).with("Local environment: 'production' doesn't match server specified environment 'apple', restarting agent run with environment 'apple'")
937
- expect(Puppet).to receive(:notice).with("Local environment: 'apple' doesn't match server specified environment 'banana', restarting agent run with environment 'banana'")
938
-
939
- configurer.run
940
- end
941
-
942
- it "raises if it can't converge after 4 tries after the initial catalog request" do
943
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(apple, banana, apple, banana, apple)
944
-
945
- expect(Puppet).to receive(:err).with("Failed to apply catalog: Catalog environment didn't stabilize after 4 fetches, aborting run")
937
+ describe "when converting the catalog" do
938
+ before do
939
+ Puppet.settings.stubs(:use).returns(true)
946
940
 
947
- configurer.run
941
+ catalog.stubs(:to_ral).returns ral_catalog
948
942
  end
949
- end
950
943
 
951
- describe "when converting the catalog" do
952
- it "converts Puppet::Resource into Puppet::Type::Notify" do
953
- expect(configurer).to receive(:apply_catalog) do |ral, _|
954
- expect(ral.resources).to contain(an_instance_of(Puppet::Type::Notify))
955
- end
944
+ let (:catalog) { Puppet::Resource::Catalog.new('tester', Puppet::Node::Environment.remote(Puppet[:environment].to_sym)) }
945
+ let (:ral_catalog) { Puppet::Resource::Catalog.new('tester', Puppet::Node::Environment.remote(Puppet[:environment].to_sym)) }
956
946
 
957
- configurer.run(catalog: catalog)
947
+ it "should convert the catalog to a RAL-formed catalog" do
948
+ expect(@agent.convert_catalog(catalog, 10)).to equal(ral_catalog)
958
949
  end
959
950
 
960
- it "adds default schedules" do
961
- expect(configurer).to receive(:apply_catalog) do |ral, _|
962
- expect(ral.resources.map(&:to_ref)).to contain(%w{Schedule[puppet] Schedule[hourly] Schedule[daily] Schedule[weekly] Schedule[monthly] Schedule[never]})
963
- end
951
+ it "should finalize the catalog" do
952
+ ral_catalog.expects(:finalize)
964
953
 
965
- configurer.run
954
+ @agent.convert_catalog(catalog, 10)
966
955
  end
967
956
 
968
- it "records the retrieval duration to the catalog" do
969
- expect(configurer).to receive(:apply_catalog) do |ral, _|
970
- expect(ral.retrieval_duration).to be_an_instance_of(Float)
971
- end
957
+ it "should record the passed retrieval time with the RAL catalog" do
958
+ ral_catalog.expects(:retrieval_duration=).with 10
972
959
 
973
- configurer.run
960
+ @agent.convert_catalog(catalog, 10)
974
961
  end
975
962
 
976
- it "writes the class file containing applied settings classes" do
977
- expect(File).to_not be_exist(Puppet[:classfile])
963
+ it "should write the RAL catalog's class file" do
964
+ ral_catalog.expects(:write_class_file)
978
965
 
979
- configurer.run
980
-
981
- expect(File.read(Puppet[:classfile]).chomp).to eq('settings')
966
+ @agent.convert_catalog(catalog, 10)
982
967
  end
983
968
 
984
- it "writes an empty resource file since no resources are 'managed'" do
985
- expect(File).to_not be_exist(Puppet[:resourcefile])
986
-
987
- configurer.run
969
+ it "should write the RAL catalog's resource file" do
970
+ ral_catalog.expects(:write_resource_file)
988
971
 
989
- expect(File.read(Puppet[:resourcefile]).chomp).to eq("")
972
+ @agent.convert_catalog(catalog, 10)
990
973
  end
991
974
 
992
- it "adds the conversion time to the report" do
993
- configurer.run(report: report)
975
+ it "should set catalog conversion time on the report" do
976
+ report = Puppet::Transaction::Report.new
994
977
 
995
- expect(report.metrics['time']['convert_catalog']).to be_an_instance_of(Float)
978
+ report.expects(:add_times).with(:convert_catalog, kind_of(Numeric))
979
+ @agent.convert_catalog(catalog, 10, {:report => report})
996
980
  end
997
981
  end
998
982
 
999
983
  describe "when determining whether to pluginsync" do
1000
- it "should default to Puppet[:pluginsync] when explicitly set by the commandline" do
1001
- Puppet.settings[:pluginsync] = false
1002
- expect(Puppet.settings).to receive(:set_by_cli?).and_return(true)
1003
-
1004
- expect(described_class).not_to be_should_pluginsync
1005
- end
1006
-
1007
- it "should default to Puppet[:pluginsync] when explicitly set by config" do
1008
- Puppet.settings[:pluginsync] = false
1009
- expect(Puppet.settings).to receive(:set_by_config?).and_return(true)
1010
-
1011
- expect(described_class).not_to be_should_pluginsync
1012
- end
1013
-
1014
984
  it "should be true if use_cached_catalog is false" do
1015
985
  Puppet.settings[:use_cached_catalog] = false
1016
986
 
@@ -1027,70 +997,55 @@ describe Puppet::Configurer do
1027
997
  describe "when attempting failover" do
1028
998
  it "should not failover if server_list is not set" do
1029
999
  Puppet.settings[:server_list] = []
1030
- configurer.run
1000
+ @agent.expects(:find_functional_server).never
1001
+ @agent.run
1031
1002
  end
1032
1003
 
1033
1004
  it "should not failover during an apply run" do
1034
1005
  Puppet.settings[:server_list] = ["myserver:123"]
1006
+ @agent.expects(:find_functional_server).never
1035
1007
  catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
1036
- configurer.run(catalog: catalog)
1008
+ @agent.run :catalog => catalog
1037
1009
  end
1038
1010
 
1039
- it "should select a server when it receives 200 OK response" do
1011
+ it "should select a server when provided" do
1040
1012
  Puppet.settings[:server_list] = ["myserver:123"]
1041
-
1042
- stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 200)
1013
+ response = Net::HTTPOK.new(nil, 200, 'OK')
1014
+ Puppet::Network::HttpPool.stubs(:http_ssl_instance).with('myserver', '123').returns(mock('request', get: response))
1015
+ @agent.stubs(:run_internal)
1043
1016
 
1044
1017
  options = {}
1045
- configurer.run(options)
1046
- expect(options[:report].master_used).to eq('myserver:123')
1047
- end
1048
-
1049
- it "should select a server when it receives 403 Forbidden" do
1050
- Puppet.settings[:server_list] = ["myserver:123"]
1051
-
1052
- stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 403)
1053
-
1054
- options = {}
1055
- configurer.run(options)
1018
+ @agent.run(options)
1056
1019
  expect(options[:report].master_used).to eq('myserver:123')
1057
1020
  end
1058
1021
 
1059
1022
  it "should report when a server is unavailable" do
1060
1023
  Puppet.settings[:server_list] = ["myserver:123"]
1024
+ response = Net::HTTPInternalServerError.new(nil, 500, 'Internal Server Error')
1025
+ Puppet::Network::HttpPool.stubs(:http_ssl_instance).with('myserver', '123').returns(mock('request', get: response))
1026
+ @agent.stubs(:run_internal)
1061
1027
 
1062
- stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: [500, "Internal Server Error"])
1063
-
1064
- allow(Puppet).to receive(:debug)
1065
- expect(Puppet).to receive(:debug).with("Puppet server myserver:123 is unavailable: 500 Internal Server Error")
1066
- expect {
1067
- configurer.run
1068
- }.to raise_error(Puppet::Error, /Could not select a functional puppet master from server_list:/)
1028
+ Puppet.expects(:debug).with("Puppet server myserver:123 is unavailable: 500 Internal Server Error")
1029
+ @agent.run
1069
1030
  end
1070
1031
 
1071
- it "should error when no servers in 'server_list' are reachable" do
1072
- Puppet.settings[:server_list] = "myserver:123,someotherservername"
1073
-
1074
- stub_request(:get, 'https://myserver/status/v1/simple/master').to_return(status: 400)
1075
- stub_request(:get, 'https://someotherservername/status/v1/simple/master').to_return(status: 400)
1032
+ it "should fallback to an empty server when failover fails" do
1033
+ Puppet.settings[:server_list] = ["myserver:123"]
1034
+ error = Net::HTTPError.new(400, 'dummy server communication error')
1035
+ Puppet::Network::HttpPool.stubs(:http_ssl_instance).with('myserver', '123').returns(error)
1036
+ @agent.stubs(:run_internal)
1076
1037
 
1077
- expect{
1078
- configurer.run
1079
- }.to raise_error(Puppet::Error, /Could not select a functional puppet master from server_list: 'myserver:123,someotherservername'/)
1038
+ options = {}
1039
+ @agent.run(options)
1040
+ expect(options[:report].master_used).to be_nil
1080
1041
  end
1081
1042
 
1082
- it "should not make multiple node requests when the server is found" do
1043
+ it "should not make multiple node requets when the server is found" do
1083
1044
  Puppet.settings[:server_list] = ["myserver:123"]
1084
- Puppet::Node.indirection.terminus_class = :rest
1085
- Puppet::Resource::Catalog.indirection.terminus_class = :rest
1086
-
1087
- stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 200)
1088
- stub_request(:get, %r{https://myserver:123/puppet/v3/catalog}).to_return(status: 200)
1089
- node_request = stub_request(:get, %r{https://myserver:123/puppet/v3/node/}).to_return(status: 200)
1090
-
1091
- configurer.run
1045
+ Puppet::Network::HttpPool.expects(:http_ssl_instance).once
1046
+ @agent.stubs(:run_internal)
1092
1047
 
1093
- expect(node_request).to have_been_requested.once
1048
+ @agent.run
1094
1049
  end
1095
1050
  end
1096
1051
  end