puppet 6.17.0-x86-mingw32 → 6.21.0-x86-mingw32

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 (401) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +38 -34
  5. data/README.md +1 -2
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent/locker.rb +0 -7
  8. data/lib/puppet/application.rb +10 -6
  9. data/lib/puppet/application/agent.rb +9 -3
  10. data/lib/puppet/application/apply.rb +20 -21
  11. data/lib/puppet/application/device.rb +1 -0
  12. data/lib/puppet/application/doc.rb +1 -1
  13. data/lib/puppet/application/filebucket.rb +2 -2
  14. data/lib/puppet/application/lookup.rb +16 -4
  15. data/lib/puppet/application/script.rb +1 -0
  16. data/lib/puppet/application_support.rb +7 -0
  17. data/lib/puppet/configurer.rb +50 -8
  18. data/lib/puppet/configurer/downloader.rb +31 -10
  19. data/lib/puppet/confine.rb +1 -1
  20. data/lib/puppet/confine/any.rb +1 -1
  21. data/lib/puppet/defaults.rb +88 -38
  22. data/lib/puppet/environments.rb +84 -59
  23. data/lib/puppet/face/catalog.rb +1 -1
  24. data/lib/puppet/face/config.rb +56 -16
  25. data/lib/puppet/face/epp.rb +12 -2
  26. data/lib/puppet/face/facts.rb +60 -0
  27. data/lib/puppet/face/node.rb +3 -3
  28. data/lib/puppet/face/node/clean.rb +2 -2
  29. data/lib/puppet/face/status.rb +1 -1
  30. data/lib/puppet/feature/base.rb +1 -1
  31. data/lib/puppet/ffi/posix.rb +10 -0
  32. data/lib/puppet/ffi/posix/constants.rb +14 -0
  33. data/lib/puppet/ffi/posix/functions.rb +24 -0
  34. data/lib/puppet/file_bucket/dipper.rb +1 -1
  35. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  36. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  37. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  38. data/lib/puppet/file_system/file_impl.rb +3 -3
  39. data/lib/puppet/functions/epp.rb +1 -0
  40. data/lib/puppet/functions/inline_epp.rb +1 -0
  41. data/lib/puppet/functions/lstrip.rb +4 -4
  42. data/lib/puppet/functions/new.rb +8 -3
  43. data/lib/puppet/functions/reverse_each.rb +1 -1
  44. data/lib/puppet/functions/rstrip.rb +4 -4
  45. data/lib/puppet/functions/step.rb +1 -1
  46. data/lib/puppet/functions/strip.rb +4 -4
  47. data/lib/puppet/gettext/config.rb +5 -5
  48. data/lib/puppet/gettext/module_translations.rb +4 -4
  49. data/lib/puppet/http.rb +1 -0
  50. data/lib/puppet/http/client.rb +1 -1
  51. data/lib/puppet/http/resolver.rb +5 -8
  52. data/lib/puppet/http/resolver/server_list.rb +18 -36
  53. data/lib/puppet/http/resolver/settings.rb +4 -4
  54. data/lib/puppet/http/resolver/srv.rb +5 -5
  55. data/lib/puppet/http/service.rb +3 -1
  56. data/lib/puppet/http/service/compiler.rb +1 -1
  57. data/lib/puppet/http/service/file_server.rb +1 -1
  58. data/lib/puppet/http/service/puppetserver.rb +39 -0
  59. data/lib/puppet/http/session.rb +5 -4
  60. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  61. data/lib/puppet/indirector/exec.rb +1 -1
  62. data/lib/puppet/indirector/fact_search.rb +60 -0
  63. data/lib/puppet/indirector/facts/facter.rb +3 -3
  64. data/lib/puppet/indirector/facts/json.rb +27 -0
  65. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  66. data/lib/puppet/indirector/file_metadata/http.rb +1 -0
  67. data/lib/puppet/indirector/hiera.rb +4 -0
  68. data/lib/puppet/indirector/indirection.rb +1 -1
  69. data/lib/puppet/indirector/json.rb +5 -1
  70. data/lib/puppet/indirector/msgpack.rb +1 -1
  71. data/lib/puppet/indirector/node/json.rb +8 -0
  72. data/lib/puppet/indirector/report/json.rb +34 -0
  73. data/lib/puppet/indirector/report/processor.rb +2 -2
  74. data/lib/puppet/indirector/request.rb +4 -4
  75. data/lib/puppet/indirector/yaml.rb +1 -1
  76. data/lib/puppet/module.rb +1 -2
  77. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  78. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  79. data/lib/puppet/network/format_support.rb +2 -2
  80. data/lib/puppet/network/formats.rb +2 -1
  81. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  82. data/lib/puppet/network/http/route.rb +2 -2
  83. data/lib/puppet/node/environment.rb +12 -5
  84. data/lib/puppet/node/facts.rb +17 -0
  85. data/lib/puppet/pal/pal_impl.rb +90 -13
  86. data/lib/puppet/parameter.rb +1 -1
  87. data/lib/puppet/parser/ast/leaf.rb +3 -2
  88. data/lib/puppet/parser/functions.rb +21 -17
  89. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  90. data/lib/puppet/parser/templatewrapper.rb +1 -1
  91. data/lib/puppet/parser/type_loader.rb +2 -2
  92. data/lib/puppet/pops/adaptable.rb +7 -13
  93. data/lib/puppet/pops/adapters.rb +8 -4
  94. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  95. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  96. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
  97. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  98. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  99. data/lib/puppet/pops/loaders.rb +18 -11
  100. data/lib/puppet/pops/lookup/context.rb +1 -1
  101. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  102. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  103. data/lib/puppet/pops/types/iterable.rb +34 -8
  104. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  105. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  106. data/lib/puppet/pops/validation/checker4_0.rb +19 -15
  107. data/lib/puppet/property/list.rb +1 -1
  108. data/lib/puppet/provider/file/windows.rb +1 -1
  109. data/lib/puppet/provider/group/groupadd.rb +13 -8
  110. data/lib/puppet/provider/package/apt.rb +67 -1
  111. data/lib/puppet/provider/package/aptitude.rb +6 -0
  112. data/lib/puppet/provider/package/dpkg.rb +1 -1
  113. data/lib/puppet/provider/package/gem.rb +4 -2
  114. data/lib/puppet/provider/package/pip2.rb +17 -0
  115. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  116. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  117. data/lib/puppet/provider/package/yum.rb +1 -0
  118. data/lib/puppet/provider/package/zypper.rb +3 -0
  119. data/lib/puppet/provider/service/debian.rb +2 -0
  120. data/lib/puppet/provider/user/aix.rb +3 -3
  121. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  122. data/lib/puppet/provider/user/useradd.rb +55 -8
  123. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  124. data/lib/puppet/reference/configuration.rb +6 -5
  125. data/lib/puppet/resource/type.rb +2 -1
  126. data/lib/puppet/rest/route.rb +2 -2
  127. data/lib/puppet/settings.rb +63 -21
  128. data/lib/puppet/settings/alias_setting.rb +37 -0
  129. data/lib/puppet/settings/base_setting.rb +26 -2
  130. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  131. data/lib/puppet/test/test_helper.rb +10 -3
  132. data/lib/puppet/transaction.rb +2 -2
  133. data/lib/puppet/transaction/persistence.rb +1 -1
  134. data/lib/puppet/transaction/report.rb +12 -8
  135. data/lib/puppet/trusted_external.rb +2 -2
  136. data/lib/puppet/type.rb +4 -3
  137. data/lib/puppet/type/file.rb +2 -2
  138. data/lib/puppet/type/file/source.rb +28 -8
  139. data/lib/puppet/type/filebucket.rb +1 -1
  140. data/lib/puppet/type/notify.rb +2 -2
  141. data/lib/puppet/type/package.rb +3 -3
  142. data/lib/puppet/type/service.rb +4 -0
  143. data/lib/puppet/type/user.rb +18 -3
  144. data/lib/puppet/util.rb +26 -12
  145. data/lib/puppet/util/autoload.rb +10 -15
  146. data/lib/puppet/util/character_encoding.rb +9 -5
  147. data/lib/puppet/util/connection.rb +8 -8
  148. data/lib/puppet/util/execution.rb +2 -2
  149. data/lib/puppet/util/fact_dif.rb +62 -0
  150. data/lib/puppet/util/posix.rb +54 -5
  151. data/lib/puppet/util/rubygems.rb +5 -1
  152. data/lib/puppet/util/run_mode.rb +5 -1
  153. data/lib/puppet/util/windows.rb +1 -0
  154. data/lib/puppet/util/windows/api_types.rb +15 -1
  155. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  156. data/lib/puppet/util/windows/security.rb +4 -4
  157. data/lib/puppet/util/windows/service.rb +1 -1
  158. data/lib/puppet/util/windows/user.rb +219 -0
  159. data/lib/puppet/version.rb +1 -1
  160. data/locales/puppet.pot +342 -312
  161. data/man/man5/puppet.conf.5 +53 -18
  162. data/man/man8/puppet-agent.8 +7 -4
  163. data/man/man8/puppet-apply.8 +2 -2
  164. data/man/man8/puppet-catalog.8 +1 -1
  165. data/man/man8/puppet-config.8 +6 -6
  166. data/man/man8/puppet-describe.8 +1 -1
  167. data/man/man8/puppet-device.8 +2 -2
  168. data/man/man8/puppet-doc.8 +1 -1
  169. data/man/man8/puppet-epp.8 +1 -1
  170. data/man/man8/puppet-facts.8 +32 -1
  171. data/man/man8/puppet-filebucket.8 +3 -3
  172. data/man/man8/puppet-generate.8 +1 -1
  173. data/man/man8/puppet-help.8 +1 -1
  174. data/man/man8/puppet-key.8 +1 -1
  175. data/man/man8/puppet-lookup.8 +2 -2
  176. data/man/man8/puppet-man.8 +1 -1
  177. data/man/man8/puppet-module.8 +1 -1
  178. data/man/man8/puppet-node.8 +7 -4
  179. data/man/man8/puppet-parser.8 +1 -1
  180. data/man/man8/puppet-plugin.8 +1 -1
  181. data/man/man8/puppet-report.8 +4 -1
  182. data/man/man8/puppet-resource.8 +1 -1
  183. data/man/man8/puppet-script.8 +2 -2
  184. data/man/man8/puppet-ssl.8 +1 -1
  185. data/man/man8/puppet-status.8 +2 -2
  186. data/man/man8/puppet.8 +2 -2
  187. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  188. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  189. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  190. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  191. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  192. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  193. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  194. data/spec/integration/application/agent_spec.rb +208 -55
  195. data/spec/integration/application/apply_spec.rb +168 -149
  196. data/spec/integration/application/doc_spec.rb +16 -6
  197. data/spec/integration/application/filebucket_spec.rb +70 -21
  198. data/spec/integration/application/help_spec.rb +42 -0
  199. data/spec/integration/application/lookup_spec.rb +13 -0
  200. data/spec/integration/application/module_spec.rb +68 -0
  201. data/spec/integration/application/plugin_spec.rb +53 -3
  202. data/spec/integration/configurer_spec.rb +14 -0
  203. data/spec/integration/data_binding_spec.rb +82 -0
  204. data/spec/integration/defaults_spec.rb +19 -1
  205. data/spec/integration/directory_environments_spec.rb +17 -17
  206. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  207. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  208. data/spec/integration/node/environment_spec.rb +1 -1
  209. data/spec/integration/resource/type_collection_spec.rb +2 -6
  210. data/spec/integration/transaction_spec.rb +4 -9
  211. data/spec/integration/util/execution_spec.rb +22 -0
  212. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  213. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  214. data/spec/integration/util/windows/process_spec.rb +26 -32
  215. data/spec/integration/util/windows/registry_spec.rb +0 -10
  216. data/spec/integration/util/windows/user_spec.rb +7 -0
  217. data/spec/integration/util_spec.rb +7 -33
  218. data/spec/lib/puppet_spec/matchers.rb +0 -80
  219. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  220. data/spec/lib/puppet_spec/settings.rb +6 -1
  221. data/spec/shared_contexts/types_setup.rb +2 -0
  222. data/spec/spec_helper.rb +1 -4
  223. data/spec/unit/agent_spec.rb +8 -6
  224. data/spec/unit/application/agent_spec.rb +3 -5
  225. data/spec/unit/application/config_spec.rb +224 -4
  226. data/spec/unit/application/doc_spec.rb +2 -2
  227. data/spec/unit/application/face_base_spec.rb +6 -4
  228. data/spec/unit/application/facts_spec.rb +41 -10
  229. data/spec/unit/application/filebucket_spec.rb +0 -2
  230. data/spec/unit/application/man_spec.rb +52 -0
  231. data/spec/unit/application/resource_spec.rb +3 -1
  232. data/spec/unit/application/ssl_spec.rb +15 -2
  233. data/spec/unit/application_spec.rb +60 -13
  234. data/spec/unit/configurer/downloader_spec.rb +10 -0
  235. data/spec/unit/configurer_spec.rb +86 -37
  236. data/spec/unit/confine/feature_spec.rb +1 -1
  237. data/spec/unit/confine_spec.rb +10 -3
  238. data/spec/unit/defaults_spec.rb +20 -1
  239. data/spec/unit/environments_spec.rb +176 -32
  240. data/spec/unit/face/config_spec.rb +65 -12
  241. data/spec/unit/face/node_spec.rb +2 -13
  242. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  243. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  244. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  245. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  246. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  247. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  248. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  249. data/spec/unit/file_system_spec.rb +1 -2
  250. data/spec/unit/forge/module_release_spec.rb +2 -7
  251. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  252. data/spec/unit/http/client_spec.rb +0 -1
  253. data/spec/unit/http/resolver_spec.rb +24 -5
  254. data/spec/unit/http/service/ca_spec.rb +2 -3
  255. data/spec/unit/http/service/compiler_spec.rb +51 -3
  256. data/spec/unit/http/service/file_server_spec.rb +2 -3
  257. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  258. data/spec/unit/http/service/report_spec.rb +2 -3
  259. data/spec/unit/http/service_spec.rb +1 -2
  260. data/spec/unit/http/session_spec.rb +8 -21
  261. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  262. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  263. data/spec/unit/indirector/face_spec.rb +0 -1
  264. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  265. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  266. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  267. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  268. data/spec/unit/indirector/indirection_spec.rb +8 -12
  269. data/spec/unit/indirector/json_spec.rb +8 -8
  270. data/spec/unit/indirector/key/file_spec.rb +0 -1
  271. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  272. data/spec/unit/indirector/node/json_spec.rb +33 -0
  273. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  274. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  275. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  276. data/spec/unit/indirector/request_spec.rb +4 -4
  277. data/spec/unit/indirector/rest_spec.rb +1 -1
  278. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  279. data/spec/unit/indirector/yaml_spec.rb +7 -7
  280. data/spec/unit/indirector_spec.rb +2 -2
  281. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  282. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  283. data/spec/unit/network/authconfig_spec.rb +0 -3
  284. data/spec/unit/network/format_support_spec.rb +3 -2
  285. data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
  286. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  287. data/spec/unit/network/http/handler_spec.rb +0 -5
  288. data/spec/unit/node/environment_spec.rb +18 -1
  289. data/spec/unit/parser/compiler_spec.rb +3 -19
  290. data/spec/unit/parser/resource_spec.rb +14 -8
  291. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  292. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  293. data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
  294. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  295. data/spec/unit/property_spec.rb +1 -0
  296. data/spec/unit/provider/exec_spec.rb +4 -3
  297. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  298. data/spec/unit/provider/nameservice_spec.rb +66 -65
  299. data/spec/unit/provider/package/apt_spec.rb +85 -3
  300. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  301. data/spec/unit/provider/package/base_spec.rb +6 -5
  302. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  303. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  304. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  305. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  306. data/spec/unit/provider/package/pip_spec.rb +6 -11
  307. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  308. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  309. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  310. data/spec/unit/provider/package/yum_spec.rb +31 -0
  311. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  312. data/spec/unit/provider/service/base_spec.rb +2 -4
  313. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  314. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  315. data/spec/unit/provider/service/debian_spec.rb +3 -5
  316. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  317. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  318. data/spec/unit/provider/service/init_spec.rb +45 -5
  319. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  320. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  321. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  322. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  323. data/spec/unit/provider/service/runit_spec.rb +2 -1
  324. data/spec/unit/provider/service/smf_spec.rb +1 -1
  325. data/spec/unit/provider/service/src_spec.rb +3 -5
  326. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  327. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  328. data/spec/unit/provider/service/windows_spec.rb +28 -0
  329. data/spec/unit/provider/user/aix_spec.rb +5 -0
  330. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  331. data/spec/unit/provider/user/pw_spec.rb +2 -0
  332. data/spec/unit/provider/user/useradd_spec.rb +56 -3
  333. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  334. data/spec/unit/provider_spec.rb +8 -10
  335. data/spec/unit/puppet_pal_2pec.rb +40 -0
  336. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  337. data/spec/unit/reports/store_spec.rb +17 -13
  338. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  339. data/spec/unit/resource/type_spec.rb +1 -1
  340. data/spec/unit/resource_spec.rb +11 -10
  341. data/spec/unit/rest/route_spec.rb +4 -4
  342. data/spec/unit/settings_spec.rb +576 -239
  343. data/spec/unit/ssl/base_spec.rb +0 -1
  344. data/spec/unit/ssl/host_spec.rb +0 -5
  345. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  346. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  347. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  348. data/spec/unit/transaction/persistence_spec.rb +15 -0
  349. data/spec/unit/transaction/report_spec.rb +2 -0
  350. data/spec/unit/transaction_spec.rb +13 -4
  351. data/spec/unit/type/file/content_spec.rb +0 -1
  352. data/spec/unit/type/file/selinux_spec.rb +0 -2
  353. data/spec/unit/type/file/source_spec.rb +1 -1
  354. data/spec/unit/type/file_spec.rb +0 -6
  355. data/spec/unit/type/filebucket_spec.rb +1 -1
  356. data/spec/unit/type/group_spec.rb +13 -6
  357. data/spec/unit/type/resources_spec.rb +7 -7
  358. data/spec/unit/type/service_spec.rb +36 -3
  359. data/spec/unit/type/tidy_spec.rb +0 -1
  360. data/spec/unit/type/user_spec.rb +31 -2
  361. data/spec/unit/type_spec.rb +2 -2
  362. data/spec/unit/util/at_fork_spec.rb +2 -2
  363. data/spec/unit/util/autoload_spec.rb +5 -1
  364. data/spec/unit/util/backups_spec.rb +1 -2
  365. data/spec/unit/util/character_encoding_spec.rb +4 -4
  366. data/spec/unit/util/command_line_spec.rb +11 -6
  367. data/spec/unit/util/execution_spec.rb +15 -11
  368. data/spec/unit/util/inifile_spec.rb +6 -14
  369. data/spec/unit/util/log_spec.rb +8 -7
  370. data/spec/unit/util/logging_spec.rb +3 -3
  371. data/spec/unit/util/posix_spec.rb +363 -15
  372. data/spec/unit/util/rubygems_spec.rb +2 -2
  373. data/spec/unit/util/run_mode_spec.rb +6 -6
  374. data/spec/unit/util/selinux_spec.rb +76 -52
  375. data/spec/unit/util/storage_spec.rb +3 -1
  376. data/spec/unit/util/suidmanager_spec.rb +44 -41
  377. data/spec/unit/util_spec.rb +13 -6
  378. metadata +49 -50
  379. data/spec/integration/faces/config_spec.rb +0 -91
  380. data/spec/integration/faces/documentation_spec.rb +0 -57
  381. data/spec/integration/file_bucket/file_spec.rb +0 -50
  382. data/spec/integration/file_serving/content_spec.rb +0 -7
  383. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  384. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  385. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  386. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  387. data/spec/integration/module_tool/forge_spec.rb +0 -51
  388. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  389. data/spec/integration/provider/service/init_spec.rb +0 -48
  390. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  391. data/spec/integration/provider/service/windows_spec.rb +0 -50
  392. data/spec/integration/reference/providers_spec.rb +0 -21
  393. data/spec/integration/reports_spec.rb +0 -13
  394. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  395. data/spec/integration/ssl/host_spec.rb +0 -72
  396. data/spec/integration/ssl/key_spec.rb +0 -99
  397. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  398. data/spec/unit/face/catalog_spec.rb +0 -6
  399. data/spec/unit/face/man_spec.rb +0 -25
  400. data/spec/unit/face/module_spec.rb +0 -3
  401. data/spec/unit/man_spec.rb +0 -31
@@ -112,8 +112,8 @@ describe Puppet::Indirector, "when registering an indirection" do
112
112
  end
113
113
 
114
114
  it "should pass any provided options to the indirection during initialization" do
115
- expect(Puppet::Indirector::Indirection).to receive(:new).with(@thingie, :first, {:some => :options, :indirected_class => 'Thingie'})
116
- @indirection = @thingie.indirects :first, :some => :options
115
+ expect(Puppet::Indirector::Indirection).to receive(:new).with(@thingie, :first, {:doc => 'some docs', :indirected_class => 'Thingie'})
116
+ @indirection = @thingie.indirects :first, :doc => 'some docs'
117
117
  end
118
118
 
119
119
  it "should extend the class to handle serialization" do
@@ -247,6 +247,21 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
247
247
  expect(subject).to include :result => :success
248
248
  graph_should_include 'pmtacceptance-mysql', nil => v('0.8.0')
249
249
  end
250
+
251
+ context 'with an already installed dependency' do
252
+ before { preinstall('pmtacceptance-stdlib', '2.6.0') }
253
+
254
+ def options
255
+ super.merge(:version => '0.7.0')
256
+ end
257
+
258
+ it 'installs given version without errors and does not change version of dependency' do
259
+ expect(subject).to include :result => :success
260
+ graph_should_include 'pmtacceptance-mysql', nil => v('0.7.0')
261
+ expect(subject[:error]).to be_nil
262
+ graph_should_include 'pmtacceptance-stdlib', v('2.6.0') => v('2.6.0')
263
+ end
264
+ end
250
265
  end
251
266
 
252
267
  context 'with a --version that cannot satisfy' do
@@ -258,6 +273,20 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
258
273
  expect(subject).to include :result => :failure
259
274
  end
260
275
 
276
+ it 'prints a detailed error containing the modules that would not be satisfied' do
277
+ graph = double(SemanticPuppet::Dependency::Graph, :modules => ['pmtacceptance-mysql'])
278
+ exception = SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph)
279
+ allow(exception).to receive(:respond_to?).and_return(true)
280
+ allow(exception).to receive(:unsatisfied).and_return('pmtacceptance-mysql')
281
+ allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(exception)
282
+
283
+ expect(subject[:error]).to include(:multiline)
284
+ expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (> 1.0.0)")
285
+ expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
286
+ expect(subject[:error][:multiline]).to include("pmtacceptance-keystone, expects 'pmtacceptance-mysql': >=0.6.1 <1.0.0")
287
+ expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
288
+ end
289
+
261
290
  context 'with --ignore-dependencies' do
262
291
  def options
263
292
  super.merge(:ignore_dependencies => true)
@@ -278,6 +307,43 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM =
278
307
  graph_should_include 'pmtacceptance-mysql', nil => v('2.1.0')
279
308
  end
280
309
  end
310
+
311
+ context 'with an already installed dependency' do
312
+ let(:graph) {
313
+ double(SemanticPuppet::Dependency::Graph,
314
+ :dependencies => {
315
+ 'pmtacceptance-mysql' => {
316
+ :version => '2.1.0'
317
+ }
318
+ },
319
+ :modules => ['pmtacceptance-mysql'],
320
+ :unsatisfied => 'pmtacceptance-stdlib'
321
+ )
322
+ }
323
+
324
+ let(:unsatisfiable_graph_exception) { SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph) }
325
+
326
+ before do
327
+ allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(unsatisfiable_graph_exception)
328
+ allow(unsatisfiable_graph_exception).to receive(:respond_to?).and_return(true)
329
+ allow(unsatisfiable_graph_exception).to receive(:unsatisfied).and_return(graph.unsatisfied)
330
+
331
+ preinstall('pmtacceptance-stdlib', '2.6.0')
332
+ end
333
+
334
+ def options
335
+ super.merge(:version => '2.1.0')
336
+ end
337
+
338
+ it 'fails to install and outputs a multiline error containing the versions, expectations and workaround' do
339
+ expect(subject).to include :result => :failure
340
+ expect(subject[:error]).to include(:multiline)
341
+ expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (v2.1.0)")
342
+ expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
343
+ expect(subject[:error][:multiline]).to include("pmtacceptance-stdlib, installed: 2.6.0, expected: >= 2.2.1")
344
+ expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
345
+ end
346
+ end
281
347
  end
282
348
  end
283
349
 
@@ -86,4 +86,24 @@ describe Puppet::ModuleTool::Tar::Mini, :if => (Puppet.features.minitar? and Pup
86
86
  and_yield(type, name, {:entry => entry})
87
87
  entry
88
88
  end
89
+
90
+ describe "Extracts tars with long and short pathnames" do
91
+ let (:sourcetar) { fixtures('module.tar.gz') }
92
+ let (:longfilepath) { "puppetlabs-dsc-1.0.0/lib/puppet_x/dsc_resources/xWebAdministration/DSCResources/MSFT_xWebAppPoolDefaults/MSFT_xWebAppPoolDefaults.schema.mof" }
93
+ let (:shortfilepath) { "puppetlabs-dsc-1.0.0/README.md" }
94
+
95
+ it "unpacks a tar with a short path length" do
96
+ extractdir = PuppetSpec::Files.tmpdir('minitar')
97
+
98
+ minitar.unpack(sourcetar,extractdir,'module')
99
+ expect(File).to exist(File.expand_path("#{extractdir}/#{shortfilepath}"))
100
+ end
101
+
102
+ it "unpacks a tar with a long path length" do
103
+ extractdir = PuppetSpec::Files.tmpdir('minitar')
104
+
105
+ minitar.unpack(sourcetar,extractdir,'module')
106
+ expect(File).to exist(File.expand_path("#{extractdir}/#{longfilepath}"))
107
+ end
108
+ end
89
109
  end
@@ -6,9 +6,6 @@ describe Puppet::Network::DefaultAuthProvider do
6
6
  before :each do
7
7
  allow(Puppet::FileSystem).to receive(:stat).and_return(double('stat', :ctime => :now))
8
8
  allow(Time).to receive(:now).and_return(Time.now)
9
-
10
- allow_any_instance_of(Puppet::Network::DefaultAuthProvider).to receive(:exists?).and_return(true)
11
- # FIXME @authprovider = Puppet::Network::DefaultAuthProvider.new("dummy")
12
9
  end
13
10
 
14
11
  describe "when initializing" do
@@ -67,8 +67,9 @@ describe Puppet::Network::FormatHandler do
67
67
  end
68
68
 
69
69
  it "should log a debug message" do
70
- expect(Puppet).to receive(:debug).with("Value of 'preferred_serialization_format' (unsupported) is invalid for FormatTester, using default (two)")
71
- expect(Puppet).to receive(:debug).with("FormatTester supports formats: two one")
70
+ Puppet[:log_level] = 'debug'
71
+ expect(Puppet).to receive(:debug) { |&b| expect(b.call).to eq("Value of 'preferred_serialization_format' (unsupported) is invalid for FormatTester, using default (two)") }
72
+ expect(Puppet).to receive(:debug) { |&b| expect(b.call).to eq("FormatTester supports formats: two one") }
72
73
  FormatTester.supported_formats
73
74
  end
74
75
  end
@@ -17,7 +17,6 @@ describe Puppet::Network::HTTP::API::IndirectedRoutes do
17
17
  before do
18
18
  Puppet::IndirectorTesting.indirection.terminus_class = :memory
19
19
  Puppet::IndirectorTesting.indirection.terminus.clear
20
- allow(handler).to receive(:warn_if_near_expiration)
21
20
  end
22
21
 
23
22
  describe "when converting a URI into a request" do
@@ -25,10 +24,6 @@ describe Puppet::Network::HTTP::API::IndirectedRoutes do
25
24
  let(:env_loaders) { Puppet::Environments::Static.new(environment) }
26
25
  let(:params) { { :environment => "env" } }
27
26
 
28
- before do
29
- allow(handler).to receive(:handler).and_return("foo")
30
- end
31
-
32
27
  around do |example|
33
28
  Puppet.override(:environments => env_loaders) do
34
29
  example.run
@@ -180,10 +175,6 @@ describe Puppet::Network::HTTP::API::IndirectedRoutes do
180
175
  let(:environment) { Puppet::Node::Environment.create(:myenv, []) }
181
176
  let(:request) { Puppet::Indirector::Request.new(:foo, :find, "with spaces", nil, :foo => :bar, :environment => environment) }
182
177
 
183
- before do
184
- allow(handler).to receive(:handler).and_return("foo")
185
- end
186
-
187
178
  it "should include the environment in the query string of the URI" do
188
179
  expect(handler.class.request_to_uri(request)).to eq("#{master_url_prefix}/foo/with%20spaces?environment=myenv&foo=bar")
189
180
  end
@@ -7,13 +7,14 @@ require 'matchers/json'
7
7
  describe Puppet::Network::HTTP::API::Master::V3::Environments do
8
8
  include JSONMatchers
9
9
 
10
- it "responds with all of the available environments" do
11
- environment = Puppet::Node::Environment.create(:production, ["/first", "/second"], '/manifests')
12
- loader = Puppet::Environments::Static.new(environment)
13
- handler = Puppet::Network::HTTP::API::Master::V3::Environments.new(loader)
14
- response = Puppet::Network::HTTP::MemoryResponse.new
10
+ let(:environment) { Puppet::Node::Environment.create(:production, ["/first", "/second"], '/manifests') }
11
+ let(:loader) { Puppet::Environments::Static.new(environment) }
12
+ let(:handler) { Puppet::Network::HTTP::API::Master::V3::Environments.new(loader) }
13
+ let(:request) { Puppet::Network::HTTP::Request.from_hash(:headers => { 'accept' => 'application/json' }) }
14
+ let(:response) { Puppet::Network::HTTP::MemoryResponse.new }
15
15
 
16
- handler.call(Puppet::Network::HTTP::Request.from_hash(:headers => { 'accept' => 'application/json' }), response)
16
+ it "responds with all of the available environments" do
17
+ handler.call(request, response)
17
18
 
18
19
  expect(response.code).to eq(200)
19
20
  expect(response.type).to eq("application/json")
@@ -33,29 +34,17 @@ describe Puppet::Network::HTTP::API::Master::V3::Environments do
33
34
  end
34
35
 
35
36
  it "the response conforms to the environments schema for unlimited timeout" do
36
- conf_stub = double('conf_stub')
37
- expect(conf_stub).to receive(:environment_timeout).and_return(Float::INFINITY)
38
- environment = Puppet::Node::Environment.create(:production, [])
39
- env_loader = Puppet::Environments::Static.new(environment)
40
- expect(env_loader).to receive(:get_conf).with(:production).and_return(conf_stub)
41
- handler = Puppet::Network::HTTP::API::Master::V3::Environments.new(env_loader)
42
- response = Puppet::Network::HTTP::MemoryResponse.new
37
+ Puppet[:environment_timeout] = 'unlimited'
43
38
 
44
- handler.call(Puppet::Network::HTTP::Request.from_hash(:headers => { 'accept' => 'application/json' }), response)
39
+ handler.call(request, response)
45
40
 
46
41
  expect(response.body).to validate_against('api/schemas/environments.json')
47
42
  end
48
43
 
49
44
  it "the response conforms to the environments schema for integer timeout" do
50
- conf_stub = double('conf_stub')
51
- expect(conf_stub).to receive(:environment_timeout).and_return(1)
52
- environment = Puppet::Node::Environment.create(:production, [])
53
- env_loader = Puppet::Environments::Static.new(environment)
54
- expect(env_loader).to receive(:get_conf).with(:production).and_return(conf_stub)
55
- handler = Puppet::Network::HTTP::API::Master::V3::Environments.new(env_loader)
56
- response = Puppet::Network::HTTP::MemoryResponse.new
57
-
58
- handler.call(Puppet::Network::HTTP::Request.from_hash(:headers => { 'accept' => 'application/json' }), response)
45
+ Puppet[:environment_timeout] = 1
46
+
47
+ handler.call(request, response)
59
48
 
60
49
  expect(response.body).to validate_against('api/schemas/environments.json')
61
50
  end
@@ -102,11 +102,6 @@ describe Puppet::Network::HTTP::Handler do
102
102
  { :status => 200 }
103
103
  end
104
104
 
105
- before do
106
- allow(handler).to receive(:check_authorization)
107
- allow(handler).to receive(:warn_if_near_expiration)
108
- end
109
-
110
105
  it "should setup a profiler when the puppet-profiling header exists" do
111
106
  request = a_request
112
107
  request[:headers][Puppet::Network::HTTP::HEADER_ENABLE_PROFILING.downcase] = "true"
@@ -426,7 +426,7 @@ describe Puppet::Node::Environment do
426
426
  it "includes the Bolt project in modules if it's defined" do
427
427
  path = tmpdir('project')
428
428
  PuppetSpec::Modules.generate_files('bolt_project', path)
429
- project = Struct.new("Project", :name, :path).new('bolt_project', path)
429
+ project = Struct.new("Project", :name, :path, :load_as_module?).new('bolt_project', path, true)
430
430
 
431
431
  Puppet.override(bolt_project: project) do
432
432
  %w{foo bar}.each do |mod_name|
@@ -438,6 +438,23 @@ describe Puppet::Node::Environment do
438
438
  expect(env.modules.collect{|mod| mod.name}.sort).to eq(%w{bolt_project foo bar bee baz}.sort)
439
439
  end
440
440
  end
441
+
442
+ it "does not include the Bolt project in modules if load_as_module? is false" do
443
+ path = tmpdir('project')
444
+ PuppetSpec::Modules.generate_files('bolt_project', path)
445
+ project = Struct.new("Project", :name, :path, :load_as_module?).new('bolt_project', path, false)
446
+
447
+ Puppet.override(bolt_project: project) do
448
+ %w{foo bar}.each do |mod_name|
449
+ PuppetSpec::Modules.generate_files(mod_name, first_modulepath)
450
+ end
451
+ %w{bee baz}.each do |mod_name|
452
+ PuppetSpec::Modules.generate_files(mod_name, second_modulepath)
453
+ end
454
+ expect(env.modules.collect{|mod| mod.name}.sort).to eq(%w{foo bar bee baz}.sort)
455
+ end
456
+
457
+ end
441
458
  end
442
459
  end
443
460
  end
@@ -240,20 +240,9 @@ describe Puppet::Parser::Compiler do
240
240
  end
241
241
 
242
242
  describe "when compiling" do
243
- def compile_methods
244
- [:set_node_parameters, :evaluate_main, :evaluate_ast_node, :evaluate_node_classes, :evaluate_generators, :fail_on_unevaluated,
245
- :finish, :store, :extract, :evaluate_relationships]
246
- end
247
-
248
- # Stub all of the main compile methods except the ones we're specifically interested in.
249
- def compile_stub(*except)
250
- (compile_methods - except).each { |m| allow(@compiler).to receive(m) }
251
- end
252
-
253
243
  it "should set node parameters as variables in the top scope" do
254
244
  params = {"a" => "b", "c" => "d"}
255
245
  allow(@node).to receive(:parameters).and_return(params)
256
- compile_stub(:set_node_parameters)
257
246
  @compiler.compile
258
247
  expect(@compiler.topscope['a']).to eq("b")
259
248
  expect(@compiler.topscope['c']).to eq("d")
@@ -262,13 +251,11 @@ describe Puppet::Parser::Compiler do
262
251
  it "should set node parameters that are of Symbol type as String variables in the top scope" do
263
252
  params = {"a" => :b}
264
253
  allow(@node).to receive(:parameters).and_return(params)
265
- compile_stub(:set_node_parameters)
266
254
  @compiler.compile
267
255
  expect(@compiler.topscope['a']).to eq("b")
268
256
  end
269
257
 
270
258
  it "should set the node's environment as a string variable in top scope" do
271
- compile_stub(:set_node_parameters)
272
259
  @node.merge({'wat' => 'this is how the sausage is made'})
273
260
  @compiler.compile
274
261
  expect(@compiler.topscope['environment']).to eq("testing")
@@ -276,7 +263,6 @@ describe Puppet::Parser::Compiler do
276
263
  end
277
264
 
278
265
  it "sets the environment based on node.environment instead of the parameters" do
279
- compile_stub(:set_node_parameters)
280
266
  @node.parameters['environment'] = "Not actually #{@node.environment.name}"
281
267
 
282
268
  @compiler.compile
@@ -286,23 +272,21 @@ describe Puppet::Parser::Compiler do
286
272
  it "should set the client and server versions on the catalog" do
287
273
  params = {"clientversion" => "2", "serverversion" => "3"}
288
274
  allow(@node).to receive(:parameters).and_return(params)
289
- compile_stub(:set_node_parameters)
290
275
  @compiler.compile
291
276
  expect(@compiler.catalog.client_version).to eq("2")
292
277
  expect(@compiler.catalog.server_version).to eq("3")
293
278
  end
294
279
 
295
280
  it "should evaluate the main class if it exists" do
296
- compile_stub(:evaluate_main)
297
281
  main_class = @known_resource_types.add Puppet::Resource::Type.new(:hostclass, "")
282
+ @compiler.topscope.source = main_class
283
+
298
284
  expect(main_class).to receive(:evaluate_code).with(be_a(Puppet::Parser::Resource))
299
- expect(@compiler.topscope).to receive(:source=).with(main_class)
300
285
 
301
286
  @compiler.compile
302
287
  end
303
288
 
304
289
  it "should create a new, empty 'main' if no main class exists" do
305
- compile_stub(:evaluate_main)
306
290
  @compiler.compile
307
291
  expect(@known_resource_types.find_hostclass("")).to be_instance_of(Puppet::Resource::Type)
308
292
  end
@@ -325,7 +309,7 @@ describe Puppet::Parser::Compiler do
325
309
  @compiler.add_collection(colls[0])
326
310
  @compiler.add_collection(colls[1])
327
311
 
328
- compile_stub(:evaluate_generators)
312
+ allow(@compiler).to receive(:fail_on_unevaluated)
329
313
  @compiler.compile
330
314
  end
331
315
 
@@ -418,22 +418,27 @@ describe Puppet::Parser::Resource do
418
418
  end
419
419
 
420
420
  describe "when merging overrides" do
421
+ def resource_type(name)
422
+ double(name, :child_of? => false)
423
+ end
424
+
421
425
  before do
422
- @source = "source1"
426
+ @source = resource_type("source1")
423
427
  @resource = mkresource :source => @source
424
428
  @override = mkresource :source => @source
425
429
  end
426
430
 
427
431
  it "should fail when the override was not created by a parent class" do
428
- @override.source = "source2"
429
- expect(@override.source).to receive(:child_of?).with("source1").and_return(false)
432
+ @override.source = resource_type("source2")
433
+ expect(@override.source).to receive(:child_of?).with(@source).and_return(false)
430
434
  expect { @resource.merge(@override) }.to raise_error(Puppet::ParseError)
431
435
  end
432
436
 
433
437
  it "should succeed when the override was created in the current scope" do
434
- @resource.source = "source3"
438
+ @source3 = resource_type("source3")
439
+ @resource.source = @source3
435
440
  @override.source = @resource.source
436
- expect(@override.source).not_to receive(:child_of?).with("source3")
441
+ expect(@override.source).not_to receive(:child_of?).with(@source3)
437
442
  params = {:a => :b, :c => :d}
438
443
  expect(@override).to receive(:parameters).and_return(params)
439
444
  expect(@resource).to receive(:override_parameter).with(:b)
@@ -442,9 +447,10 @@ describe Puppet::Parser::Resource do
442
447
  end
443
448
 
444
449
  it "should succeed when a parent class created the override" do
445
- @resource.source = "source3"
446
- @override.source = "source4"
447
- expect(@override.source).to receive(:child_of?).with("source3").and_return(true)
450
+ @source3 = resource_type("source3")
451
+ @resource.source = @source3
452
+ @override.source = resource_type("source4")
453
+ expect(@override.source).to receive(:child_of?).with(@source3).and_return(true)
448
454
  params = {:a => :b, :c => :d}
449
455
  expect(@override).to receive(:parameters).and_return(params)
450
456
  expect(@resource).to receive(:override_parameter).with(:b)
@@ -57,9 +57,10 @@ describe Puppet::Parser::TemplateWrapper do
57
57
  expect(tw.all_tags).to eq(["tag1","tag2"])
58
58
  end
59
59
 
60
- it "provides the tags defined in the current scope with #tags" do
61
- expect(scope).to receive(:tags).and_return(["tag1", "tag2"])
62
- expect(tw.tags).to eq(["tag1","tag2"])
60
+ it "raises not implemented error" do
61
+ expect {
62
+ tw.tags
63
+ }.to raise_error(NotImplementedError, /Call 'all_tags' instead/)
63
64
  end
64
65
 
65
66
  it "raises error on access to removed in-scope variables via method calls" do
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'puppet_spec/compiler'
3
+
4
+ describe Puppet::Pops::Evaluator::DeferredResolver do
5
+ include PuppetSpec::Compiler
6
+
7
+ let(:environment) { Puppet::Node::Environment.create(:testing, []) }
8
+ let(:facts) { Puppet::Node::Facts.new('node.example.com') }
9
+
10
+ it 'resolves deferred values in a catalog' do
11
+ catalog = compile_to_catalog(<<~END)
12
+ notify { "deferred":
13
+ message => Deferred("join", [[1,2,3], ":"])
14
+ }
15
+ END
16
+ described_class.resolve_and_replace(facts, catalog)
17
+
18
+ expect(catalog.resource(:notify, 'deferred')[:message]).to eq('1:2:3')
19
+ end
20
+ end
@@ -92,6 +92,35 @@ describe 'loaders' do
92
92
  it 'errors with message about empty file for files that contain no logic' do
93
93
  expect{loader.load(:resource_type_pp, 'empty')}.to raise_error(ArgumentError, /it is empty/)
94
94
  end
95
+
96
+ it 'creates a pcore resource type loader' do
97
+ pcore_loader = env.loaders.runtime3_type_loader.resource_3x_loader
98
+ expect(pcore_loader.loader_name).to eq('pcore_resource_types')
99
+ expect(pcore_loader).to be_a(Puppet::Pops::Loader::ModuleLoaders::FileBased)
100
+ end
101
+
102
+ it 'does not create a pcore resource type loader if requested not to' do
103
+ env.loaders = nil # clear cached loaders
104
+ loaders = Puppet::Pops::Loaders.new(env, false, false)
105
+ expect(loaders.runtime3_type_loader.resource_3x_loader).to be_nil
106
+ end
107
+
108
+ it 'does not create a pcore resource type loader for an empty environment' do
109
+ loaders = Puppet::Pops::Loaders.new(empty_test_env)
110
+ expect(loaders.runtime3_type_loader.resource_3x_loader).to be_nil
111
+ end
112
+ end
113
+
114
+ def expect_loader_hierarchy(loaders, expected_loaders)
115
+ actual_loaders = []
116
+
117
+ loader = loaders.private_environment_loader
118
+ while loader
119
+ actual_loaders << [loader.loader_name, loader]
120
+ loader = loader.parent
121
+ end
122
+
123
+ expect(actual_loaders).to contain_exactly(*expected_loaders)
95
124
  end
96
125
 
97
126
  it 'creates a puppet_system loader' do
@@ -123,6 +152,47 @@ describe 'loaders' do
123
152
  expect(loaders.private_environment_loader().to_s).to eql("(DependencyLoader 'environment private' [])")
124
153
  end
125
154
 
155
+ it 'creates a hierarchy of loaders' do
156
+ expect_loader_hierarchy(
157
+ Puppet::Pops::Loaders.new(empty_test_env),
158
+ [
159
+ [nil, Puppet::Pops::Loader::StaticLoader],
160
+ ['puppet_system', Puppet::Pops::Loader::ModuleLoaders::LibRootedFileBased],
161
+ [empty_test_env.name, Puppet::Pops::Loader::Runtime3TypeLoader],
162
+ ['environment', Puppet::Pops::Loader::SimpleEnvironmentLoader],
163
+ ['environment private', Puppet::Pops::Loader::DependencyLoader],
164
+ ]
165
+ )
166
+ end
167
+
168
+ it 'excludes the Runtime3TypeLoader when tasks are enabled' do
169
+ Puppet[:tasks] = true
170
+
171
+ expect_loader_hierarchy(
172
+ Puppet::Pops::Loaders.new(empty_test_env),
173
+ [
174
+ [nil, Puppet::Pops::Loader::StaticLoader],
175
+ ['puppet_system', Puppet::Pops::Loader::ModuleLoaders::LibRootedFileBased],
176
+ ['environment', Puppet::Pops::Loader::ModuleLoaders::EmptyLoader],
177
+ ['environment private', Puppet::Pops::Loader::DependencyLoader],
178
+ ]
179
+ )
180
+ end
181
+
182
+ it 'includes the agent cache loader when for_agent is true' do
183
+ expect_loader_hierarchy(
184
+ Puppet::Pops::Loaders.new(empty_test_env, true),
185
+ [
186
+ [nil, Puppet::Pops::Loader::StaticLoader],
187
+ ['puppet_system', Puppet::Pops::Loader::ModuleLoaders::LibRootedFileBased],
188
+ ['cached_puppet_lib', Puppet::Pops::Loader::ModuleLoaders::LibRootedFileBased],
189
+ [empty_test_env.name, Puppet::Pops::Loader::Runtime3TypeLoader],
190
+ ['environment', Puppet::Pops::Loader::SimpleEnvironmentLoader],
191
+ ['environment private', Puppet::Pops::Loader::DependencyLoader],
192
+ ],
193
+ )
194
+ end
195
+
126
196
  context 'when loading from a module' do
127
197
  it 'loads a ruby function using a qualified or unqualified name' do
128
198
  loaders = Puppet::Pops::Loaders.new(environment_for(module_with_metadata))