puppet 4.3.2 → 4.4.0

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

Potentially problematic release.


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

Files changed (487) hide show
  1. checksums.yaml +4 -4
  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/debian/README.source +1 -1
  9. data/ext/debian/control +1 -1
  10. data/ext/debian/copyright +4 -4
  11. data/ext/debian/puppetmaster.README.debian +11 -9
  12. data/ext/emacs/puppet-mode.el +1 -1
  13. data/ext/envpuppet +2 -2
  14. data/ext/ips/puppetagent.xml +1 -1
  15. data/ext/ips/puppetmaster.xml +1 -1
  16. data/ext/project_data.yaml +8 -0
  17. data/ext/puppet-test +3 -3
  18. data/ext/rack/example-passenger-vhost.conf +1 -1
  19. data/ext/redhat/puppet.spec.erb +2 -2
  20. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  21. data/ext/solaris/pkginfo +1 -1
  22. data/ext/solaris/smf/puppet.xml +1 -1
  23. data/ext/suse/puppet.spec +2 -2
  24. data/ext/upload_facts.rb +1 -1
  25. data/ext/windows/puppet_interactive.bat +6 -0
  26. data/ext/windows/puppet_shell.bat +9 -0
  27. data/ext/windows/run_puppet_interactive.bat +9 -0
  28. data/ext/yaml_nodes.rb +1 -1
  29. data/install.rb +30 -20
  30. data/lib/puppet/agent.rb +1 -1
  31. data/lib/puppet/application/agent.rb +4 -2
  32. data/lib/puppet/application/apply.rb +7 -4
  33. data/lib/puppet/application/cert.rb +1 -1
  34. data/lib/puppet/application/device.rb +1 -1
  35. data/lib/puppet/application/filebucket.rb +1 -1
  36. data/lib/puppet/application/inspect.rb +1 -1
  37. data/lib/puppet/application/lookup.rb +4 -4
  38. data/lib/puppet/application/master.rb +2 -2
  39. data/lib/puppet/application/resource.rb +1 -1
  40. data/lib/puppet/configurer.rb +100 -22
  41. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  42. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  43. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  44. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  45. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  46. data/lib/puppet/defaults.rb +65 -19
  47. data/lib/puppet/environments.rb +3 -1
  48. data/lib/puppet/face/config.rb +1 -1
  49. data/lib/puppet/face/epp.rb +1 -1
  50. data/lib/puppet/face/help/man.erb +1 -1
  51. data/lib/puppet/face/module/install.rb +6 -6
  52. data/lib/puppet/face/parser.rb +12 -9
  53. data/lib/puppet/face/status.rb +2 -1
  54. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  55. data/lib/puppet/feature/telnet.rb +9 -0
  56. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  57. data/lib/puppet/file_serving/metadata.rb +18 -2
  58. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  59. data/lib/puppet/file_system.rb +2 -2
  60. data/lib/puppet/file_system/file_impl.rb +2 -2
  61. data/lib/puppet/file_system/memory_impl.rb +1 -1
  62. data/lib/puppet/file_system/uniquefile.rb +1 -1
  63. data/lib/puppet/forge.rb +1 -1
  64. data/lib/puppet/forge/repository.rb +1 -31
  65. data/lib/puppet/functions.rb +45 -6
  66. data/lib/puppet/functions/assert_type.rb +9 -9
  67. data/lib/puppet/functions/each.rb +5 -13
  68. data/lib/puppet/functions/filter.rb +5 -14
  69. data/lib/puppet/functions/map.rb +6 -14
  70. data/lib/puppet/functions/reduce.rb +5 -13
  71. data/lib/puppet/functions/reverse_each.rb +82 -0
  72. data/lib/puppet/functions/scanf.rb +15 -18
  73. data/lib/puppet/functions/slice.rb +22 -36
  74. data/lib/puppet/functions/split.rb +2 -2
  75. data/lib/puppet/functions/step.rb +88 -0
  76. data/lib/puppet/functions/type.rb +70 -0
  77. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  78. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  79. data/lib/puppet/indirector/file_content/http.rb +15 -0
  80. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  81. data/lib/puppet/indirector/generic_http.rb +16 -0
  82. data/lib/puppet/indirector/node/exec.rb +1 -1
  83. data/lib/puppet/indirector/node/ldap.rb +1 -1
  84. data/lib/puppet/indirector/rest.rb +2 -1
  85. data/lib/puppet/info_service/class_information_service.rb +13 -12
  86. data/lib/puppet/loaders.rb +1 -0
  87. data/lib/puppet/module.rb +3 -0
  88. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  89. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  90. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  91. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  92. data/lib/puppet/network/http/pool.rb +9 -0
  93. data/lib/puppet/node.rb +1 -1
  94. data/lib/puppet/node/environment.rb +11 -2
  95. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  96. data/lib/puppet/parser/compiler.rb +3 -3
  97. data/lib/puppet/parser/environment_compiler.rb +0 -1
  98. data/lib/puppet/parser/functions.rb +28 -16
  99. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  100. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  101. data/lib/puppet/parser/functions/map.rb +1 -1
  102. data/lib/puppet/parser/functions/scanf.rb +15 -26
  103. data/lib/puppet/parser/functions/slice.rb +17 -24
  104. data/lib/puppet/parser/functions/split.rb +1 -1
  105. data/lib/puppet/parser/resource.rb +19 -17
  106. data/lib/puppet/parser/scope.rb +176 -5
  107. data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
  108. data/lib/puppet/pops.rb +0 -8
  109. data/lib/puppet/pops/adaptable.rb +4 -1
  110. data/lib/puppet/pops/adapters.rb +38 -13
  111. data/lib/puppet/pops/binder/binder.rb +21 -17
  112. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  113. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  114. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  115. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  116. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  117. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  118. data/lib/puppet/pops/binder/injector.rb +53 -48
  119. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  120. data/lib/puppet/pops/binder/producers.rb +67 -62
  121. data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
  122. data/lib/puppet/pops/evaluator/closure.rb +84 -68
  123. data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
  124. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  125. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  126. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  127. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  128. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  129. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  130. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  131. data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
  132. data/lib/puppet/pops/issue_reporter.rb +6 -4
  133. data/lib/puppet/pops/issues.rb +34 -11
  134. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  135. data/lib/puppet/pops/loader/loader.rb +1 -1
  136. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  137. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  138. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
  139. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  140. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  141. data/lib/puppet/pops/loaders.rb +51 -9
  142. data/lib/puppet/pops/lookup.rb +14 -12
  143. data/lib/puppet/pops/merge_strategy.rb +16 -19
  144. data/lib/puppet/pops/model/factory.rb +26 -2
  145. data/lib/puppet/pops/model/model.rb +8 -8
  146. data/lib/puppet/pops/model/model_label_provider.rb +13 -7
  147. data/lib/puppet/pops/model/model_meta.rb +17 -0
  148. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  149. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  150. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  151. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  152. data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
  153. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  154. data/lib/puppet/pops/parser/lexer2.rb +26 -19
  155. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  156. data/lib/puppet/pops/parser/locator.rb +21 -0
  157. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  158. data/lib/puppet/pops/parser/slurp_support.rb +11 -7
  159. data/lib/puppet/pops/types/class_loader.rb +23 -19
  160. data/lib/puppet/pops/types/enumeration.rb +9 -26
  161. data/lib/puppet/pops/types/iterable.rb +308 -0
  162. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  163. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  164. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  165. data/lib/puppet/pops/types/type_calculator.rb +138 -381
  166. data/lib/puppet/pops/types/type_factory.rb +91 -57
  167. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  168. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  169. data/lib/puppet/pops/types/type_parser.rb +159 -112
  170. data/lib/puppet/pops/types/types.rb +2057 -1247
  171. data/lib/puppet/pops/utils.rb +11 -10
  172. data/lib/puppet/pops/validation.rb +11 -9
  173. data/lib/puppet/pops/validation/checker4_0.rb +83 -55
  174. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  175. data/lib/puppet/provider/aixobject.rb +1 -1
  176. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  177. data/lib/puppet/provider/cron/crontab.rb +1 -1
  178. data/lib/puppet/provider/exec/windows.rb +1 -1
  179. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  180. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  181. data/lib/puppet/provider/package/appdmg.rb +3 -2
  182. data/lib/puppet/provider/package/dnf.rb +1 -1
  183. data/lib/puppet/provider/package/pip.rb +5 -8
  184. data/lib/puppet/provider/package/pip3.rb +1 -1
  185. data/lib/puppet/provider/package/pkg.rb +1 -1
  186. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  187. data/lib/puppet/provider/package/pkgng.rb +13 -4
  188. data/lib/puppet/provider/package/windows.rb +1 -1
  189. data/lib/puppet/provider/package/yum.rb +1 -1
  190. data/lib/puppet/provider/package/zypper.rb +19 -0
  191. data/lib/puppet/provider/service/debian.rb +2 -2
  192. data/lib/puppet/provider/service/launchd.rb +6 -18
  193. data/lib/puppet/provider/service/systemd.rb +9 -2
  194. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  195. data/lib/puppet/provider/user/aix.rb +1 -1
  196. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  197. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  198. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  199. data/lib/puppet/reference/configuration.rb +1 -1
  200. data/lib/puppet/reference/providers.rb +1 -1
  201. data/lib/puppet/resource.rb +15 -12
  202. data/lib/puppet/resource/capability_finder.rb +20 -13
  203. data/lib/puppet/resource/catalog.rb +60 -3
  204. data/lib/puppet/resource/status.rb +11 -2
  205. data/lib/puppet/resource/type.rb +28 -38
  206. data/lib/puppet/settings.rb +1 -1
  207. data/lib/puppet/settings/config_file.rb +1 -1
  208. data/lib/puppet/settings/environment_conf.rb +13 -5
  209. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  210. data/lib/puppet/ssl/certificate_request.rb +4 -4
  211. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  212. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  213. data/lib/puppet/test/test_helper.rb +16 -4
  214. data/lib/puppet/transaction.rb +15 -2
  215. data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
  216. data/lib/puppet/transaction/report.rb +31 -1
  217. data/lib/puppet/transaction/resource_harness.rb +0 -25
  218. data/lib/puppet/type.rb +11 -11
  219. data/lib/puppet/type/augeas.rb +1 -1
  220. data/lib/puppet/type/cron.rb +12 -12
  221. data/lib/puppet/type/file.rb +91 -39
  222. data/lib/puppet/type/file/checksum_value.rb +53 -0
  223. data/lib/puppet/type/file/content.rb +26 -111
  224. data/lib/puppet/type/file/data_sync.rb +84 -0
  225. data/lib/puppet/type/file/ensure.rb +17 -14
  226. data/lib/puppet/type/file/selcontext.rb +1 -1
  227. data/lib/puppet/type/file/source.rb +103 -18
  228. data/lib/puppet/type/filebucket.rb +1 -1
  229. data/lib/puppet/type/interface.rb +8 -3
  230. data/lib/puppet/type/macauthorization.rb +1 -1
  231. data/lib/puppet/type/package.rb +6 -0
  232. data/lib/puppet/type/schedule.rb +1 -1
  233. data/lib/puppet/type/stage.rb +1 -1
  234. data/lib/puppet/type/user.rb +19 -17
  235. data/lib/puppet/type/yumrepo.rb +20 -0
  236. data/lib/puppet/util.rb +109 -22
  237. data/lib/puppet/util/autoload.rb +16 -11
  238. data/lib/puppet/util/checksums.rb +74 -31
  239. data/lib/puppet/util/execution.rb +1 -1
  240. data/lib/puppet/util/http_proxy.rb +72 -0
  241. data/lib/puppet/util/log.rb +2 -0
  242. data/lib/puppet/util/logging.rb +43 -1
  243. data/lib/puppet/util/monkey_patches.rb +2 -2
  244. data/lib/puppet/util/multi_match.rb +51 -0
  245. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  246. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  247. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  248. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  249. data/lib/puppet/util/plist.rb +130 -0
  250. data/lib/puppet/util/resource_template.rb +1 -1
  251. data/lib/puppet/util/run_mode.rb +2 -2
  252. data/lib/puppet/util/skip_tags.rb +9 -0
  253. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  254. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  255. data/lib/puppet/util/windows/adsi.rb +4 -4
  256. data/lib/puppet/util/windows/api_types.rb +24 -18
  257. data/lib/puppet/util/windows/com.rb +3 -3
  258. data/lib/puppet/util/windows/error.rb +1 -1
  259. data/lib/puppet/util/windows/file.rb +8 -8
  260. data/lib/puppet/util/windows/principal.rb +23 -14
  261. data/lib/puppet/util/windows/process.rb +78 -11
  262. data/lib/puppet/util/windows/registry.rb +1 -1
  263. data/lib/puppet/util/windows/root_certs.rb +5 -5
  264. data/lib/puppet/util/windows/security.rb +33 -35
  265. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  266. data/lib/puppet/util/windows/sid.rb +42 -4
  267. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  268. data/lib/puppet/util/windows/user.rb +10 -10
  269. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  270. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  271. data/lib/puppet/vendor/pathspec/README.md +1 -1
  272. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  273. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  274. data/lib/puppet/version.rb +1 -1
  275. data/lib/semver.rb +17 -1
  276. data/man/man5/puppet.conf.5 +12 -12
  277. data/man/man8/extlookup2hiera.8 +1 -1
  278. data/man/man8/puppet-agent.8 +2 -2
  279. data/man/man8/puppet-apply.8 +2 -2
  280. data/man/man8/puppet-ca.8 +2 -2
  281. data/man/man8/puppet-catalog.8 +2 -2
  282. data/man/man8/puppet-cert.8 +2 -2
  283. data/man/man8/puppet-certificate.8 +2 -2
  284. data/man/man8/puppet-certificate_request.8 +2 -2
  285. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  286. data/man/man8/puppet-config.8 +3 -3
  287. data/man/man8/puppet-describe.8 +1 -1
  288. data/man/man8/puppet-device.8 +1 -1
  289. data/man/man8/puppet-doc.8 +1 -1
  290. data/man/man8/puppet-epp.8 +2 -2
  291. data/man/man8/puppet-facts.8 +2 -2
  292. data/man/man8/puppet-file.8 +2 -2
  293. data/man/man8/puppet-filebucket.8 +2 -2
  294. data/man/man8/puppet-help.8 +2 -2
  295. data/man/man8/puppet-inspect.8 +2 -2
  296. data/man/man8/puppet-key.8 +2 -2
  297. data/man/man8/puppet-man.8 +2 -2
  298. data/man/man8/puppet-master.8 +2 -2
  299. data/man/man8/puppet-module.8 +9 -9
  300. data/man/man8/puppet-node.8 +2 -2
  301. data/man/man8/puppet-parser.8 +2 -2
  302. data/man/man8/puppet-plugin.8 +2 -2
  303. data/man/man8/puppet-report.8 +2 -2
  304. data/man/man8/puppet-resource.8 +2 -2
  305. data/man/man8/puppet-resource_type.8 +2 -2
  306. data/man/man8/puppet-status.8 +3 -3
  307. data/man/man8/puppet.8 +1 -1
  308. data/spec/fixtures/module.tar.gz +0 -0
  309. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  310. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  311. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  312. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  313. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  314. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  315. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  316. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  317. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  318. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  319. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  320. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  321. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
  322. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  323. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  324. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  325. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  326. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  327. 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
  328. 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
  329. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  330. 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
  331. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  332. 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
  333. 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
  334. data/spec/integration/defaults_spec.rb +14 -2
  335. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  336. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  337. data/spec/integration/node/environment_spec.rb +13 -0
  338. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  339. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  340. data/spec/integration/parser/undef_param_spec.rb +8 -0
  341. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  342. data/spec/integration/test/test_helper_spec.rb +28 -0
  343. data/spec/integration/transaction/report_spec.rb +16 -0
  344. data/spec/integration/transaction_spec.rb +11 -0
  345. data/spec/integration/type/file_spec.rb +194 -4
  346. data/spec/integration/type/package_spec.rb +5 -1
  347. data/spec/integration/type/tidy_spec.rb +21 -9
  348. data/spec/integration/util/execution_spec.rb +22 -0
  349. data/spec/integration/util/windows/principal_spec.rb +90 -4
  350. data/spec/integration/util/windows/process_spec.rb +31 -0
  351. data/spec/integration/util/windows/security_spec.rb +6 -6
  352. data/spec/integration/util/windows/user_spec.rb +1 -1
  353. data/spec/integration/util_spec.rb +49 -27
  354. data/spec/lib/puppet_spec/compiler.rb +17 -0
  355. data/spec/lib/puppet_spec/files.rb +2 -2
  356. data/spec/lib/puppet_spec/pops.rb +13 -0
  357. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  358. data/spec/shared_contexts/types_setup.rb +96 -0
  359. data/spec/unit/agent_spec.rb +1 -0
  360. data/spec/unit/application/agent_spec.rb +10 -0
  361. data/spec/unit/application/apply_spec.rb +9 -0
  362. data/spec/unit/configurer/downloader_spec.rb +5 -5
  363. data/spec/unit/configurer_spec.rb +271 -39
  364. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  365. data/spec/unit/defaults_spec.rb +15 -0
  366. data/spec/unit/environments_spec.rb +24 -4
  367. data/spec/unit/face/parser_spec.rb +43 -2
  368. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  369. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  370. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  371. data/spec/unit/file_system_spec.rb +26 -0
  372. data/spec/unit/functions/assert_type_spec.rb +36 -2
  373. data/spec/unit/functions/defined_spec.rb +2 -2
  374. data/spec/unit/functions/epp_spec.rb +11 -3
  375. data/spec/unit/functions/lookup_spec.rb +58 -13
  376. data/spec/unit/functions/regsubst_spec.rb +1 -1
  377. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  378. data/spec/unit/functions/step_spec.rb +113 -0
  379. data/spec/unit/functions/type_spec.rb +35 -0
  380. data/spec/unit/functions4_spec.rb +61 -5
  381. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  382. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  383. data/spec/unit/indirector/indirection_spec.rb +1 -1
  384. data/spec/unit/info_service_spec.rb +94 -32
  385. data/spec/unit/module_spec.rb +14 -0
  386. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  387. data/spec/unit/network/authstore_spec.rb +1 -1
  388. data/spec/unit/network/http/connection_spec.rb +1 -0
  389. data/spec/unit/network/http/pool_spec.rb +30 -0
  390. data/spec/unit/node_spec.rb +1 -1
  391. data/spec/unit/parser/compiler_spec.rb +16 -0
  392. data/spec/unit/parser/scope_spec.rb +28 -11
  393. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  394. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  395. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
  396. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  397. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  398. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  399. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  400. data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
  401. data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
  402. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  403. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  404. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  405. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  406. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  407. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  408. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  409. data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
  410. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  411. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  412. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  413. data/spec/unit/pops/types/types_spec.rb +241 -0
  414. data/spec/unit/pops/validator/validator_spec.rb +100 -43
  415. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  416. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  417. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  418. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  419. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  420. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  421. data/spec/unit/provider/package/pip_spec.rb +47 -34
  422. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  423. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  424. data/spec/unit/provider/package/yum_spec.rb +11 -0
  425. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  426. data/spec/unit/provider/service/launchd_spec.rb +17 -35
  427. data/spec/unit/provider/service/systemd_spec.rb +7 -0
  428. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  429. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  430. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  431. data/spec/unit/resource/catalog_spec.rb +33 -1
  432. data/spec/unit/resource/type_spec.rb +149 -7
  433. data/spec/unit/resource_spec.rb +96 -57
  434. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  435. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  436. data/spec/unit/transaction/report_spec.rb +27 -0
  437. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  438. data/spec/unit/transaction_spec.rb +5 -0
  439. data/spec/unit/type/file/checksum_spec.rb +6 -0
  440. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  441. data/spec/unit/type/file/content_spec.rb +12 -193
  442. data/spec/unit/type/file/source_spec.rb +211 -119
  443. data/spec/unit/type/file_spec.rb +133 -34
  444. data/spec/unit/type/interface_spec.rb +32 -0
  445. data/spec/unit/type/macauthorization_spec.rb +4 -1
  446. data/spec/unit/type/yumrepo_spec.rb +2 -2
  447. data/spec/unit/util/filetype_spec.rb +1 -1
  448. data/spec/unit/util/http_proxy_spec.rb +2 -2
  449. data/spec/unit/util/log/destinations_spec.rb +0 -2
  450. data/spec/unit/util/logging_spec.rb +69 -0
  451. data/spec/unit/util/multi_match_spec.rb +39 -0
  452. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  453. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  454. data/spec/unit/util/plist_spec.rb +110 -0
  455. data/spec/unit/util/resource_template_spec.rb +2 -2
  456. data/spec/unit/util/run_mode_spec.rb +27 -3
  457. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  458. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  459. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  460. data/spec/unit/util/windows/sid_spec.rb +1 -1
  461. data/spec/unit/util_spec.rb +123 -13
  462. data/tasks/cfpropertylist.rake +15 -0
  463. metadata +114 -26
  464. data/lib/puppet/vendor/load_plist.rb +0 -1
  465. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  466. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  467. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  468. data/lib/puppet/vendor/plist/README +0 -36
  469. data/lib/puppet/vendor/plist/Rakefile +0 -144
  470. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  471. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  472. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  473. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  474. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  475. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  476. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  477. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  478. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  479. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  480. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  481. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  482. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  483. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  484. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  485. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  486. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  487. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -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
@@ -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
@@ -92,7 +92,7 @@ describe Puppet::Node do
92
92
  node.environment_name = :foo
93
93
  node.environment = :bar
94
94
  expect(node.environment_name).to eq(:bar)
95
- expect(node.parameters['environment']).to eq(:bar)
95
+ expect(node.parameters['environment']).to eq('bar')
96
96
  end
97
97
  end
98
98
 
@@ -258,6 +258,22 @@ describe Puppet::Parser::Compiler do
258
258
  expect(@compiler.topscope['c']).to eq("d")
259
259
  end
260
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
+
261
277
  it "should set the client and server versions on the catalog" do
262
278
  params = {"clientversion" => "2", "serverversion" => "3"}
263
279
  @node.stubs(:parameters).returns(params)