puppet 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  383. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  388. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -41,7 +41,7 @@ describe Puppet::FileBucketFile::File, :uses_checksums => true do
41
41
  end
42
42
 
43
43
  it "fails if the contents collide with existing contents" do
44
- # This is the shortest known MD5 collision. See http://eprint.iacr.org/2010/643.pdf
44
+ # This is the shortest known MD5 collision. See https://eprint.iacr.org/2010/643.pdf
45
45
  first_contents = [0x6165300e,0x87a79a55,0xf7c60bd0,0x34febd0b,
46
46
  0x6503cf04,0x854f709e,0xfb0fc034,0x874c9c65,
47
47
  0x2f94cc40,0x15a12deb,0x5c15f4a3,0x490786bb,
@@ -402,7 +402,7 @@ describe Puppet::Indirector::Indirection do
402
402
 
403
403
  Puppet.expects(:log_exception)
404
404
 
405
- expect { @indirection.find("/my/key") }.to raise_error
405
+ expect { @indirection.find("/my/key") }.to raise_error RuntimeError
406
406
  end
407
407
  end
408
408
  end
@@ -81,7 +81,7 @@ describe Puppet::Indirector::JSON do
81
81
  # I don't like this, but there isn't a credible alternative that
82
82
  # also works on Windows, so a stub it is. At least the expectation
83
83
  # will fail if the implementation changes. Sorry to the next dev.
84
- File.expects(:read).with(file).raises(Errno::EPERM)
84
+ Puppet::FileSystem.expects(:read).with(file).raises(Errno::EPERM)
85
85
  expect { subject.find(request) }.
86
86
  to raise_error Puppet::Error, /Could not read JSON/
87
87
  end
@@ -19,6 +19,9 @@ describe "Puppet::InfoService" do
19
19
  class bar($bar_a, Integer $bar_b, String $bar_c = 'c default value') { }
20
20
  class bar2($bar2_a, Integer $bar2_b, String $bar2_c = 'c default value') { }
21
21
  CODE
22
+ 'intp.pp' => <<-CODE,
23
+ class intp(String $intp_a = "default with interpolated $::os_family") { }
24
+ CODE
22
25
  'fee.pp' => <<-CODE,
23
26
  class fee(Integer $fee_a = 1+1) { }
24
27
  CODE
@@ -31,6 +34,9 @@ describe "Puppet::InfoService" do
31
34
  'borked.pp' => <<-CODE,
32
35
  class Borked($Herp+$Derp) {}
33
36
  CODE
37
+ 'json_unsafe.pp' => <<-CODE,
38
+ class json_unsafe($arg1 = /.*/, $arg2 = default, $arg3 = {1 => 1}) {}
39
+ CODE
34
40
  })
35
41
  end
36
42
 
@@ -47,21 +53,23 @@ describe "Puppet::InfoService" do
47
53
  result = Puppet::InfoService.classes_per_environment({'production' => files })
48
54
  expect(result).to eq({
49
55
  "production"=>{
50
- "#{code_dir}/foo.pp"=>[
56
+ "#{code_dir}/foo.pp"=> {:classes => [
51
57
  {:name=>"foo",
52
58
  :params=>[
53
59
  {:name=>"foo_a"},
54
60
  {:name=>"foo_b", :type=>"Integer"},
55
- {:name=>"foo_c", :type=>"String", :default_literal=>"c default value"}
61
+ {:name=>"foo_c", :type=>"String", :default_literal=>"c default value",
62
+ :default_source=>"'c default value'"}
56
63
  ]},
57
64
  {:name=>"foo2",
58
65
  :params=>[
59
66
  {:name=>"foo2_a"},
60
67
  {:name=>"foo2_b", :type=>"Integer"},
61
- {:name=>"foo2_c", :type=>"String", :default_literal=>"c default value"}
68
+ {:name=>"foo2_c", :type=>"String", :default_literal=>"c default value",
69
+ :default_source=>"'c default value'"}
62
70
  ]
63
71
  }
64
- ]} # end production env
72
+ ]}} # end production env
65
73
  })
66
74
  end
67
75
 
@@ -70,36 +78,40 @@ describe "Puppet::InfoService" do
70
78
  result = Puppet::InfoService.classes_per_environment({'production' => files })
71
79
  expect(result).to eq({
72
80
  "production"=>{
73
- "#{code_dir}/foo.pp"=>[
81
+ "#{code_dir}/foo.pp"=>{:classes => [
74
82
  {:name=>"foo",
75
83
  :params=>[
76
84
  {:name=>"foo_a"},
77
85
  {:name=>"foo_b", :type=>"Integer"},
78
- {:name=>"foo_c", :type=>"String", :default_literal=>"c default value"}
86
+ {:name=>"foo_c", :type=>"String", :default_literal=>"c default value",
87
+ :default_source=>"'c default value'"}
79
88
  ]},
80
89
  {:name=>"foo2",
81
90
  :params=>[
82
91
  {:name=>"foo2_a"},
83
92
  {:name=>"foo2_b", :type=>"Integer"},
84
- {:name=>"foo2_c", :type=>"String", :default_literal=>"c default value"}
93
+ {:name=>"foo2_c", :type=>"String", :default_literal=>"c default value",
94
+ :default_source=>"'c default value'"}
85
95
  ]
86
96
  }
87
- ],
88
- "#{code_dir}/bar.pp"=>[
97
+ ]},
98
+ "#{code_dir}/bar.pp"=> {:classes =>[
89
99
  {:name=>"bar",
90
100
  :params=>[
91
101
  {:name=>"bar_a"},
92
102
  {:name=>"bar_b", :type=>"Integer"},
93
- {:name=>"bar_c", :type=>"String", :default_literal=>"c default value"}
103
+ {:name=>"bar_c", :type=>"String", :default_literal=>"c default value",
104
+ :default_source=>"'c default value'"}
94
105
  ]},
95
106
  {:name=>"bar2",
96
107
  :params=>[
97
108
  {:name=>"bar2_a"},
98
109
  {:name=>"bar2_b", :type=>"Integer"},
99
- {:name=>"bar2_c", :type=>"String", :default_literal=>"c default value"}
110
+ {:name=>"bar2_c", :type=>"String", :default_literal=>"c default value",
111
+ :default_source=>"'c default value'"}
100
112
  ]
101
113
  }
102
- ],
114
+ ]},
103
115
 
104
116
  } # end production env
105
117
  }
@@ -116,50 +128,54 @@ describe "Puppet::InfoService" do
116
128
 
117
129
  expect(result).to eq({
118
130
  "production"=>{
119
- "#{code_dir}/foo.pp"=>[
131
+ "#{code_dir}/foo.pp"=>{:classes => [
120
132
  {:name=>"foo",
121
133
  :params=>[
122
134
  {:name=>"foo_a"},
123
135
  {:name=>"foo_b", :type=>"Integer"},
124
- {:name=>"foo_c", :type=>"String", :default_literal=>"c default value"}
136
+ {:name=>"foo_c", :type=>"String", :default_literal=>"c default value",
137
+ :default_source=>"'c default value'"}
125
138
  ]},
126
139
  {:name=>"foo2",
127
140
  :params=>[
128
141
  {:name=>"foo2_a"},
129
142
  {:name=>"foo2_b", :type=>"Integer"},
130
- {:name=>"foo2_c", :type=>"String", :default_literal=>"c default value"}
143
+ {:name=>"foo2_c", :type=>"String", :default_literal=>"c default value",
144
+ :default_source=>"'c default value'"}
131
145
  ]
132
146
  }
133
- ],
134
- "#{code_dir}/bar.pp"=>[
147
+ ]},
148
+ "#{code_dir}/bar.pp"=>{:classes => [
135
149
  {:name=>"bar",
136
150
  :params=>[
137
151
  {:name=>"bar_a"},
138
152
  {:name=>"bar_b", :type=>"Integer"},
139
- {:name=>"bar_c", :type=>"String", :default_literal=>"c default value"}
153
+ {:name=>"bar_c", :type=>"String", :default_literal=>"c default value",
154
+ :default_source=>"'c default value'"}
140
155
  ]},
141
156
  {:name=>"bar2",
142
157
  :params=>[
143
158
  {:name=>"bar2_a"},
144
159
  {:name=>"bar2_b", :type=>"Integer"},
145
- {:name=>"bar2_c", :type=>"String", :default_literal=>"c default value"}
160
+ {:name=>"bar2_c", :type=>"String", :default_literal=>"c default value",
161
+ :default_source=>"'c default value'"}
146
162
  ]
147
163
  }
148
- ],
164
+ ]},
149
165
  }, # end production env
150
166
  "test"=>{
151
- "#{code_dir}/fee.pp"=>[
167
+ "#{code_dir}/fee.pp"=>{:classes => [
152
168
  {:name=>"fee",
153
169
  :params=>[
154
170
  {:name=>"fee_a", :type=>"Integer", :default_source=>"1+1"}
155
171
  ]},
156
- ],
157
- "#{code_dir}/fum.pp"=>[
172
+ ]},
173
+ "#{code_dir}/fum.pp"=>{:classes => [
158
174
  {:name=>"fum",
159
175
  :params=>[
160
176
  {:name=>"fum_a"}
161
177
  ]},
162
- ],
178
+ ]},
163
179
  } # end test env
164
180
  }
165
181
  )
@@ -177,8 +193,8 @@ describe "Puppet::InfoService" do
177
193
  'test' => files_test
178
194
  })
179
195
  expect(result).to eq({
180
- "production"=>{ "#{code_dir}/fum.pp"=>[ {:name=>"fum", :params=>[ {:name=>"fum_a"}]}]},
181
- "test" =>{ "#{code_dir}/fum.pp"=>[ {:name=>"fum", :params=>[ {:name=>"fum_a"}]}]}
196
+ "production"=>{ "#{code_dir}/fum.pp"=>{:classes => [ {:name=>"fum", :params=>[ {:name=>"fum_a"}]}]}},
197
+ "test" =>{ "#{code_dir}/fum.pp"=>{:classes => [ {:name=>"fum", :params=>[ {:name=>"fum_a"}]}]}}
182
198
  }
183
199
  )
184
200
  end
@@ -188,29 +204,64 @@ describe "Puppet::InfoService" do
188
204
  result = Puppet::InfoService.classes_per_environment({'production' => files })
189
205
  expect(result).to eq({
190
206
  "production"=>{
191
- "#{code_dir}/fee.pp"=>[
207
+ "#{code_dir}/fee.pp"=>{:classes => [
192
208
  {:name=>"fee",
193
209
  :params=>[
194
210
  {:name=>"fee_a", :type=>"Integer", :default_source=>"1+1"}
195
211
  ]},
196
- ]} # end production env
212
+ ]}} # end production env
197
213
  })
198
214
  end
199
215
 
216
+ it "produces source string for literals that are not pure json" do
217
+ files = ['json_unsafe.pp'].map {|f| File.join(code_dir, f) }
218
+ result = Puppet::InfoService.classes_per_environment({'production' => files })
219
+ expect(result).to eq({
220
+ "production"=>{
221
+ "#{code_dir}/json_unsafe.pp" => {:classes => [
222
+ {:name=>"json_unsafe",
223
+ :params => [
224
+ {:name => "arg1",
225
+ :default_source => "/.*/" },
226
+ {:name => "arg2",
227
+ :default_source => "default" },
228
+ {:name => "arg3",
229
+ :default_source => "{1 => 1}" }
230
+ ]}
231
+ ]}} # end production env
232
+ })
233
+ end
234
+
200
235
  it "produces no type entry if type is not given" do
201
236
  files = ['fum.pp'].map {|f| File.join(code_dir, f) }
202
237
  result = Puppet::InfoService.classes_per_environment({'production' => files })
203
238
  expect(result).to eq({
204
239
  "production"=>{
205
- "#{code_dir}/fum.pp"=>[
240
+ "#{code_dir}/fum.pp"=>{:classes => [
206
241
  {:name=>"fum",
207
242
  :params=>[
208
243
  {:name=>"fum_a" }
209
244
  ]},
210
- ]} # end production env
245
+ ]}} # end production env
211
246
  })
212
247
  end
213
248
 
249
+ it 'does not evaluate default expressions' do
250
+ files = ['intp.pp'].map {|f| File.join(code_dir, f) }
251
+ result = Puppet::InfoService.classes_per_environment({'production' => files })
252
+ expect(result).to eq({
253
+ 'production' =>{
254
+ "#{code_dir}/intp.pp"=>{:classes => [
255
+ {:name=> 'intp',
256
+ :params=>[
257
+ {:name=> 'intp_a',
258
+ :type=> 'String',
259
+ :default_source=>'"default with interpolated $::os_family"'}
260
+ ]},
261
+ ]}} # end production env
262
+ })
263
+ end
264
+
214
265
  it "produces error entry if file is broken" do
215
266
  files = ['borked.pp'].map {|f| File.join(code_dir, f) }
216
267
  result = Puppet::InfoService.classes_per_environment({'production' => files })
@@ -228,9 +279,20 @@ describe "Puppet::InfoService" do
228
279
  result = Puppet::InfoService.classes_per_environment({'production' => files })
229
280
  expect(result).to eq({
230
281
  "production"=>{
231
- "#{code_dir}/nothing.pp"=> []
232
- },
282
+ "#{code_dir}/nothing.pp"=> {:classes => [] }
283
+ },
233
284
  })
234
285
  end
286
+
287
+ it "produces error when given a file that does not exist" do
288
+ files = ['the_tooth_fairy_does_not_exist.pp'].map {|f| File.join(code_dir, f) }
289
+ result = Puppet::InfoService.classes_per_environment({'production' => files })
290
+ expect(result).to eq({
291
+ "production"=>{
292
+ "#{code_dir}/the_tooth_fairy_does_not_exist.pp" => {:error => "The file #{code_dir}/the_tooth_fairy_does_not_exist.pp does not exist"}
293
+ },
294
+ })
295
+ end
296
+
235
297
  end
236
298
  end
@@ -347,6 +347,20 @@ describe Puppet::Module do
347
347
  expect(mod.unmet_dependencies).to eq([])
348
348
  end
349
349
 
350
+ it "should throw an error if invalid dependencies are specified" do
351
+ expect {
352
+ PuppetSpec::Modules.create(
353
+ 'foobar',
354
+ @modpath,
355
+ :metadata => {
356
+ :dependencies => ""
357
+ }
358
+ )
359
+ }.to raise_error(
360
+ Puppet::Module::MissingMetadata,
361
+ /dependencies in the file metadata.json of the module foobar must be an array, not: ''/)
362
+ end
363
+
350
364
  it "should only list unmet dependencies" do
351
365
  env = Puppet::Node::Environment.create(:testing, [@modpath])
352
366
 
@@ -343,12 +343,12 @@ symlinkfile
343
343
  f.puts({
344
344
  "name" => "#{module_name}",
345
345
  "version" => "#{version}",
346
- "source" => "http://github.com/testing/#{module_name}",
346
+ "source" => "https://github.com/testing/#{module_name}",
347
347
  "author" => "testing",
348
348
  "license" => "Apache License Version 2.0",
349
349
  "summary" => "Puppet testing module",
350
350
  "description" => "This module can be used for basic testing",
351
- "project_page" => "http://github.com/testing/#{module_name}"
351
+ "project_page" => "https://github.com/testing/#{module_name}"
352
352
  }.to_json)
353
353
  end
354
354
  end
@@ -381,12 +381,12 @@ symlinkfile
381
381
  f.puts({
382
382
  "name" => "#{module_name}",
383
383
  "version" => "#{version}",
384
- "source" => "http://github.com/testing/#{module_name}",
384
+ "source" => "https://github.com/testing/#{module_name}",
385
385
  "author" => "testing",
386
386
  "license" => "Apache License Version 2.0",
387
387
  "summary" => "Puppet testing module",
388
388
  "description" => "This module can be used for basic testing",
389
- "project_page" => "http://github.com/testing/#{module_name}",
389
+ "project_page" => "https://github.com/testing/#{module_name}",
390
390
  "checksums" => {"README.md" => "deadbeef"}
391
391
  }.to_json)
392
392
  end
@@ -301,7 +301,7 @@ describe Puppet::Network::AuthStore::Declaration do
301
301
 
302
302
  issue_7477 = !(IPAddr.new(ip) rescue false)
303
303
 
304
- describe "on rubies with a fix for issue [7477](http://goo.gl/Bb1LU)", :if => issue_7477
304
+ describe "on rubies with a fix for issue [7477](https://goo.gl/Bb1LU)", :if => issue_7477
305
305
  it "should match the specified IP" do
306
306
  expect(declaration).to be_match('www.testsite.org',ip)
307
307
  end
@@ -163,6 +163,7 @@ describe Puppet::Network::HTTP::Connection do
163
163
 
164
164
  Net::HTTP.any_instance.stubs(:start)
165
165
  Net::HTTP.any_instance.stubs(:request).returns(httpok)
166
+ Puppet::Network::HTTP::Pool.any_instance.stubs(:setsockopts)
166
167
 
167
168
  connection.get('request')
168
169
  end
@@ -109,6 +109,31 @@ describe Puppet::Network::HTTP::Pool do
109
109
  end rescue nil
110
110
  end
111
111
 
112
+ it 'sets keepalive bit on network socket' do
113
+ pool = create_pool
114
+ s = Socket.new(Socket::PF_INET, Socket::SOCK_STREAM)
115
+ pool.setsockopts(Net::BufferedIO.new(s))
116
+
117
+ # On windows, Socket.getsockopt() doesn't return exactly the same data
118
+ # as an equivalent Socket::Option.new() statement, so we strip off the
119
+ # unrelevant bits only on this platform.
120
+ #
121
+ # To make sure we're not voiding the test case by doing this, we check
122
+ # both with and without the keepalive bit set.
123
+ #
124
+ # This workaround can be removed once all the ruby versions we care about
125
+ # have the patch from https://bugs.ruby-lang.org/issues/11958 applied.
126
+ #
127
+ if Puppet::Util::Platform.windows?
128
+ keepalive = Socket::Option.bool(:INET, :SOCKET, :KEEPALIVE, true).data[0]
129
+ nokeepalive = Socket::Option.bool(:INET, :SOCKET, :KEEPALIVE, false).data[0]
130
+ expect(s.getsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE).data).to eq(keepalive)
131
+ expect(s.getsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE).data).to_not eq(nokeepalive)
132
+ else
133
+ expect(s.getsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE).bool).to eq(true)
134
+ end
135
+ end
136
+
112
137
  context 'when releasing connections' do
113
138
  it 'releases HTTP connections' do
114
139
  conn = create_connection(site)
@@ -150,6 +175,7 @@ describe Puppet::Network::HTTP::Pool do
150
175
  conn = create_connection(site)
151
176
  pool = create_pool
152
177
  pool.factory.expects(:create_connection).with(site).returns(conn)
178
+ pool.expects(:setsockopts)
153
179
 
154
180
  expect(pool.borrow(site, verify)).to eq(conn)
155
181
  end
@@ -169,6 +195,7 @@ describe Puppet::Network::HTTP::Pool do
169
195
 
170
196
  conn = create_connection(site)
171
197
  pool.factory.expects(:create_connection).with(site).returns(conn)
198
+ pool.expects(:setsockopts)
172
199
 
173
200
  expect(pool.borrow(site, verify)).to eq(conn)
174
201
  end
@@ -179,6 +206,7 @@ describe Puppet::Network::HTTP::Pool do
179
206
 
180
207
  pool = create_pool
181
208
  pool.factory.expects(:create_connection).with(site).returns(conn)
209
+ pool.expects(:setsockopts)
182
210
 
183
211
  expect(pool.borrow(site, verify)).to eq(conn)
184
212
  end
@@ -205,6 +233,7 @@ describe Puppet::Network::HTTP::Pool do
205
233
 
206
234
  pool = create_pool_with_expired_connections(site, conn)
207
235
  pool.factory.expects(:create_connection => stub('conn', :start => nil))
236
+ pool.expects(:setsockopts)
208
237
 
209
238
  pool.borrow(site, verify)
210
239
  end
@@ -217,6 +246,7 @@ describe Puppet::Network::HTTP::Pool do
217
246
 
218
247
  pool = create_pool_with_expired_connections(site, conn)
219
248
  pool.factory.expects(:create_connection => stub('open_conn', :start => nil))
249
+ pool.expects(:setsockopts)
220
250
 
221
251
  pool.borrow(site, verify)
222
252
  end
@@ -86,6 +86,14 @@ describe Puppet::Node do
86
86
  )
87
87
  expect(node.to_pson).to validate_against('api/schemas/node.json')
88
88
  end
89
+
90
+ it "should allow its environment parameter to be set by attribute after initialization" do
91
+ node = Puppet::Node.new("foo", { :parameters => { 'environment' => :foo } })
92
+ node.environment_name = :foo
93
+ node.environment = :bar
94
+ expect(node.environment_name).to eq(:bar)
95
+ expect(node.parameters['environment']).to eq('bar')
96
+ end
89
97
  end
90
98
 
91
99
  describe "when serializing using yaml" do
@@ -194,24 +194,6 @@ describe Puppet::Parser::Compiler do
194
194
  expect(sanitized.trusted_data).to_not eq({ :a => 42 })
195
195
  end
196
196
 
197
- it "should report 'trusted' parameters as trusted_data but as inauthentic if running as non-root" do
198
- node = Puppet::Node.new("mynode")
199
- node.parameters['trusted'] = { 'authenticated' => true,
200
- 'certname' => 'foo',
201
- 'extensions' => 'things' }
202
-
203
- Puppet.features.stubs(:root?).returns(false)
204
-
205
- Puppet.ignore(:trusted_information)
206
- compiler = Puppet::Parser::Compiler.new(node)
207
- Puppet.restore(:trusted_information)
208
-
209
- sanitized = compiler.node
210
- expect(sanitized.trusted_data).to eq({ 'authenticated' => false,
211
- 'certname' => 'foo',
212
- 'extensions' => 'things' })
213
- end
214
-
215
197
  it "should prefer trusted_data in the node above other plausible sources" do
216
198
  node = Puppet::Node.new("mynode")
217
199
  node.trusted_data = { 'authenticated' => true,
@@ -276,6 +258,22 @@ describe Puppet::Parser::Compiler do
276
258
  expect(@compiler.topscope['c']).to eq("d")
277
259
  end
278
260
 
261
+ it "should set node parameters thar are of Symbol type as String variables in the top scope" do
262
+ params = {"a" => :b}
263
+ @node.stubs(:parameters).returns(params)
264
+ compile_stub(:set_node_parameters)
265
+ @compiler.compile
266
+ expect(@compiler.topscope['a']).to eq("b")
267
+ end
268
+
269
+ it "should set the node's environment as a string variable in top scope" do
270
+ compile_stub(:set_node_parameters)
271
+ @node.merge({'wat' => 'this is how the sausage is made'})
272
+ @compiler.compile
273
+ expect(@compiler.topscope['environment']).to eq("testing")
274
+ expect(@compiler.topscope['wat']).to eq('this is how the sausage is made')
275
+ end
276
+
279
277
  it "should set the client and server versions on the catalog" do
280
278
  params = {"clientversion" => "2", "serverversion" => "3"}
281
279
  @node.stubs(:parameters).returns(params)
@@ -158,7 +158,7 @@ describe Puppet::Parser::Scope do
158
158
  expect { @scope[:foo] = 12 }.to raise_error(Puppet::ParseError, /Scope variable name .* not a string/)
159
159
  end
160
160
 
161
- it "should return nil for unset variables" do
161
+ it "should return nil for unset variables when --strict variables is not in effect" do
162
162
  expect(@scope["var"]).to be_nil
163
163
  end
164
164
 
@@ -208,6 +208,26 @@ describe Puppet::Parser::Scope do
208
208
  expect(@scope).not_to be_include("var")
209
209
  end
210
210
 
211
+ it "warns and return nil for non found unqualified variable" do
212
+ Puppet.expects(:warn_once)
213
+ expect(@scope["santa_clause"]).to be_nil
214
+ end
215
+
216
+ it "warns once for a non found variable" do
217
+ Puppet.expects(:warning).once
218
+ expect([@scope["santa_claus"],@scope["santa_claus"]]).to eq([nil, nil])
219
+ end
220
+
221
+ it "warns and return nil for non found qualified variable" do
222
+ Puppet.expects(:warn_once)
223
+ expect(@scope["north_pole::santa_clause"]).to be_nil
224
+ end
225
+
226
+ it "does not warn when a numeric variable is missing - they always exist" do
227
+ Puppet.expects(:warn_once).never
228
+ expect(@scope["1"]).to be_nil
229
+ end
230
+
211
231
  describe "and the variable is qualified" do
212
232
  before :each do
213
233
  @known_resource_types = @scope.known_resource_types
@@ -266,17 +286,16 @@ describe Puppet::Parser::Scope do
266
286
 
267
287
  it "should warn and return nil for qualified variables whose classes have not been evaluated" do
268
288
  klass = newclass("other::deep::klass")
269
- @scope.expects(:warning)
289
+ Puppet.expects(:warn_once)
270
290
  expect(@scope["other::deep::klass::var"]).to be_nil
271
291
  end
272
292
 
273
293
  it "should warn and return nil for qualified variables whose classes do not exist" do
274
- @scope.expects(:warning)
294
+ Puppet.expects(:warn_once)
275
295
  expect(@scope["other::deep::klass::var"]).to be_nil
276
296
  end
277
297
 
278
298
  it "should return nil when asked for a non-string qualified variable from a class that does not exist" do
279
- @scope.stubs(:warning)
280
299
  expect(@scope["other::deep::klass::var"]).to be_nil
281
300
  end
282
301
 
@@ -489,17 +508,15 @@ describe Puppet::Parser::Scope do
489
508
  expect(@scope.include?("1")).to be_falsey
490
509
  end
491
510
 
492
- describe "when calling unset_ephemeral_var with a level" do
511
+ describe "when using a guarded scope" do
493
512
  it "should remove ephemeral scopes up to this level" do
494
513
  @scope.set_match_data({1 => :value1})
495
514
  @scope.new_ephemeral
496
515
  @scope.set_match_data({1 => :value2})
497
- level = @scope.ephemeral_level()
498
- @scope.new_ephemeral
499
- @scope.set_match_data({1 => :value3})
500
-
501
- @scope.unset_ephemeral_var(level)
502
-
516
+ @scope.with_guarded_scope do
517
+ @scope.new_ephemeral
518
+ @scope.set_match_data({1 => :value3})
519
+ end
503
520
  expect(@scope["1"]).to eq(:value2)
504
521
  end
505
522
  end
@@ -120,12 +120,12 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl/AccessOperator' do
120
120
 
121
121
  it 'produces an Integer[1]' do
122
122
  expr = fqr('Integer')[1]
123
- expect(evaluate(expr)).to eql(range(1,1))
123
+ expect(evaluate(expr)).to eql(range(1,:default))
124
124
  end
125
125
 
126
- it 'produces an Integer[from, <from]' do
126
+ it 'gives an error for Integer[from, <from]' do
127
127
  expr = fqr('Integer')[1,0]
128
- expect(evaluate(expr)).to eql(range(1,0))
128
+ expect{evaluate(expr)}.to raise_error(/'from' must be less or equal to 'to'/)
129
129
  end
130
130
 
131
131
  it 'produces an error for Integer[] if there are more than 2 keys' do
@@ -146,17 +146,17 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl/AccessOperator' do
146
146
 
147
147
  it 'produces a Float[1.0]' do
148
148
  expr = fqr('Float')[1.0]
149
- expect(evaluate(expr)).to eql(float_range(1.0,1.0))
149
+ expect(evaluate(expr)).to eql(float_range(1.0,:default))
150
150
  end
151
151
 
152
152
  it 'produces a Float[1]' do
153
153
  expr = fqr('Float')[1]
154
- expect(evaluate(expr)).to eql(float_range(1.0,1.0))
154
+ expect(evaluate(expr)).to eql(float_range(1.0,:default))
155
155
  end
156
156
 
157
- it 'produces a Float[from, <from]' do
157
+ it 'gives an error for Float[from, <from]' do
158
158
  expr = fqr('Float')[1.0,0.0]
159
- expect(evaluate(expr)).to eql(float_range(1.0,0.0))
159
+ expect{evaluate(expr)}.to raise_error(/'from' must be less or equal to 'to'/)
160
160
  end
161
161
 
162
162
  it 'produces an error for Float[] if there are more than 2 keys' do
@@ -86,6 +86,9 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
86
86
  it "'1.0' < 1.1 == true" do
87
87
  expect{evaluate(literal('1.0') < literal(1.1))}.to raise_error(/String < Float/)
88
88
  end
89
+ it "undef < 1.1 == true" do
90
+ expect{evaluate(literal(nil) < literal(1.1))}.to raise_error(/Undef Value < Float/)
91
+ end
89
92
  end
90
93
 
91
94
  context "of regular expressions" do