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
@@ -1,6 +1,9 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
3
 
4
+ module Puppet::Util::Plist
5
+ end
6
+
4
7
  # We use this as a reasonable way to obtain all the support infrastructure.
5
8
  [:group].each do |type_for_this_round|
6
9
  provider_class = Puppet::Type.type(type_for_this_round).provider(:directoryservice)
@@ -79,19 +82,17 @@ describe 'DirectoryService password behavior' do
79
82
  end
80
83
 
81
84
  let :shadow_hash_data do
82
- {'ShadowHashData' => [StringIO.new(binary_plist)]}
85
+ {'ShadowHashData' => [binary_plist]}
83
86
  end
84
87
 
85
88
  subject do
86
89
  Puppet::Provider::NameService::DirectoryService
87
90
  end
88
91
 
89
- it 'should execute convert_binary_to_xml once when getting the password' do
90
- subject.expects(:convert_binary_to_xml).returns({'SALTED-SHA512' => StringIO.new(pw_string)})
92
+ it 'should execute convert_binary_to_hash once when getting the password' do
93
+ subject.expects(:convert_binary_to_hash).returns({'SALTED-SHA512' => pw_string})
91
94
  Puppet::FileSystem.expects(:exist?).with(plist_path).once.returns(true)
92
- Plist.expects(:parse_xml).returns(shadow_hash_data)
93
- # On Mac OS X 10.7 we first need to convert to xml when reading the password
94
- subject.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', plist_path)
95
+ Puppet::Util::Plist.expects(:read_plist_file).returns(shadow_hash_data)
95
96
  subject.get_password('uid', 'jeff')
96
97
  end
97
98
 
@@ -102,25 +103,19 @@ describe 'DirectoryService password behavior' do
102
103
  end
103
104
 
104
105
  it 'should convert xml-to-binary and binary-to-xml when setting the pw on >= 10.7' do
105
- subject.expects(:convert_binary_to_xml).returns({'SALTED-SHA512' => StringIO.new(pw_string)})
106
- subject.expects(:convert_xml_to_binary).returns(binary_plist)
106
+ subject.expects(:convert_binary_to_hash).returns({'SALTED-SHA512' => pw_string})
107
+ subject.expects(:convert_hash_to_binary).returns(binary_plist)
107
108
  Puppet::FileSystem.expects(:exist?).with(plist_path).once.returns(true)
108
- Plist.expects(:parse_xml).returns(shadow_hash_data)
109
- # On Mac OS X 10.7 we first need to convert to xml
110
- subject.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', plist_path)
111
- # And again back to a binary plist or DirectoryService will complain
112
- subject.expects(:plutil).with('-convert', 'binary1', plist_path)
113
- Plist::Emit.expects(:save_plist).with(shadow_hash_data, plist_path)
109
+ Puppet::Util::Plist.expects(:read_plist_file).returns(shadow_hash_data)
110
+ Puppet::Util::Plist.expects(:write_plist_file).with(shadow_hash_data, plist_path, :binary)
114
111
  subject.set_password('jeff', 'uid', sha512_hash)
115
112
  end
116
113
 
117
114
  it '[#13686] should handle an empty ShadowHashData field in the users plist' do
118
- subject.expects(:convert_xml_to_binary).returns(binary_plist)
115
+ subject.expects(:convert_hash_to_binary).returns(binary_plist)
119
116
  Puppet::FileSystem.expects(:exist?).with(plist_path).once.returns(true)
120
- Plist.expects(:parse_xml).returns({'ShadowHashData' => nil})
121
- subject.expects(:plutil).with('-convert', 'xml1', '-o', '/dev/stdout', plist_path)
122
- subject.expects(:plutil).with('-convert', 'binary1', plist_path)
123
- Plist::Emit.expects(:save_plist)
117
+ Puppet::Util::Plist.expects(:read_plist_file).returns({'ShadowHashData' => nil})
118
+ Puppet::Util::Plist.expects(:write_plist_file)
124
119
  subject.set_password('jeff', 'uid', sha512_hash)
125
120
  end
126
121
  end
@@ -7,8 +7,7 @@ describe Puppet::Type.type(:package).provider(:appdmg) do
7
7
 
8
8
  describe "when installing an appdmg" do
9
9
  let(:fake_mountpoint) { "/tmp/dmg.foo" }
10
- let(:empty_hdiutil_plist) { Plist::Emit.dump({}) }
11
- let(:fake_hdiutil_plist) { Plist::Emit.dump({"system-entities" => [{"mount-point" => fake_mountpoint}]}) }
10
+ let(:fake_hdiutil_plist) { {"system-entities" => [{"mount-point" => fake_mountpoint}]} }
12
11
 
13
12
  before do
14
13
  fh = mock 'filehandle'
@@ -32,7 +31,8 @@ describe Puppet::Type.type(:package).provider(:appdmg) do
32
31
  described_class.expects(:curl).with do |*args|
33
32
  args[0] == "-o" && args[1].include?(tmpdir) && ! args.include?("-k")
34
33
  end
35
- described_class.stubs(:hdiutil).returns fake_hdiutil_plist
34
+ described_class.stubs(:hdiutil).returns 'a plist'
35
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
36
36
  described_class.expects(:installapp)
37
37
 
38
38
  provider.install
@@ -35,6 +35,22 @@ describe provider_class do
35
35
  it { is_expected.to be_virtual_packages }
36
36
  end
37
37
 
38
+ describe "default provider" do
39
+ before do
40
+ Facter.expects(:value).with(:operatingsystem).returns("fedora")
41
+ end
42
+
43
+ it "should be the default provider on Fedora 22" do
44
+ Facter.expects(:value).with(:operatingsystemmajrelease).returns('22')
45
+ expect(described_class.default?).to be_truthy
46
+ end
47
+
48
+ it "should be the default provider on Fedora 23" do
49
+ Facter.expects(:value).with(:operatingsystemmajrelease).returns('23')
50
+ expect(described_class.default?).to be_truthy
51
+ end
52
+ end
53
+
38
54
  # provider should repond to the following methods
39
55
  [:install, :latest, :update, :purge, :install_options].each do |method|
40
56
  it "should have a(n) #{method}" do
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  provider_class = Puppet::Type.type(:package).provider(:pip3)
5
- osfamilies = { ['All', nil] => 'pip3' }
5
+ osfamilies = { ['All', nil] => ['pip3'] }
6
6
 
7
7
  describe provider_class do
8
8
 
@@ -33,30 +33,38 @@ describe provider_class do
33
33
 
34
34
  describe "cmd" do
35
35
 
36
- it "should return pip3 by default" do
36
+ it "should return #{osfamilies[['All', nil]][0]} by default" do
37
37
  Facter.stubs(:value).with(:osfamily).returns("Not RedHat")
38
- expect(provider_class.cmd).to eq('pip3')
38
+ expect(provider_class.cmd[0]).to eq(osfamilies[['All', nil]][0])
39
39
  end
40
-
41
40
  end
42
41
 
43
42
  describe "instances" do
44
43
 
45
- osfamilies.each do |osfamily, pip_cmd|
46
- it "should return an array on #{osfamily} when #{pip_cmd} is present" do
47
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
48
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
49
- provider_class.expects(:which).with(pip_cmd).returns("/fake/bin/pip3")
50
- p = stub("process")
51
- p.expects(:collect).yields("real_package==1.2.5")
52
- provider_class.expects(:execpipe).with("/fake/bin/pip3 freeze").yields(p)
53
- provider_class.instances
54
- end
55
-
56
- it "should return an empty array on #{osfamily} when #{pip_cmd} is missing" do
44
+ osfamilies.each do |osfamily, pip_cmds|
45
+ it "should return an array on #{osfamily} when #{pip_cmds.join(' or ')} is present" do
46
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
47
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
48
+ pip_cmds.each do |pip_cmd|
49
+ pip_cmds.each do |cmd|
50
+ unless cmd == pip_cmd
51
+ provider_class.expects(:which).with(cmd).returns(nil)
52
+ end
53
+ end
54
+ provider_class.expects(:which).with(pip_cmd).returns("/fake/bin/#{pip_cmd}")
55
+ p = stub("process")
56
+ p.expects(:collect).yields("real_package==1.2.5")
57
+ provider_class.expects(:execpipe).with("/fake/bin/#{pip_cmd} freeze").yields(p)
58
+ provider_class.instances
59
+ end
60
+ end
61
+
62
+ it "should return an empty array on #{osfamily} when #{pip_cmds.join(' and ')} is missing" do
57
63
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
58
64
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
59
- provider_class.expects(:which).with(pip_cmd).returns nil
65
+ pip_cmds.each do |pip_cmd|
66
+ provider_class.expects(:which).with(pip_cmd).returns nil
67
+ end
60
68
  expect(provider_class.instances).to eq([])
61
69
  end
62
70
  end
@@ -224,32 +232,42 @@ describe provider_class do
224
232
  @provider.method(:lazy_pip).call "freeze"
225
233
  end
226
234
 
227
- osfamilies.each do |osfamily, pip_cmd|
228
- it "should retry on #{osfamily} if #{pip_cmd} has not yet been found" do
229
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
230
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
231
- @provider.expects(:pip).twice.with('freeze').raises(NoMethodError).then.returns(nil)
232
- @provider.expects(:which).with(pip_cmd).returns("/fake/bin/pip3")
233
- @provider.method(:lazy_pip).call "freeze"
234
- end
235
-
236
- it "should fail on #{osfamily} if #{pip_cmd} is missing" do
237
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
238
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
239
- @provider.expects(:pip).with('freeze').raises(NoMethodError)
240
- @provider.expects(:which).with(pip_cmd).returns(nil)
241
- expect { @provider.method(:lazy_pip).call("freeze") }.to raise_error(NoMethodError)
242
- end
243
-
244
- it "should output a useful error message on #{osfamily} if #{pip_cmd} is missing" do
245
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
246
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
247
- @provider.expects(:pip).with('freeze').raises(NoMethodError)
248
- @provider.expects(:which).with(pip_cmd).returns(nil)
249
- expect { @provider.method(:lazy_pip).call("freeze") }.
250
- to raise_error(NoMethodError, "Could not locate the #{pip_cmd} command.")
235
+ osfamilies.each do |osfamily, pip_cmds|
236
+ pip_cmds.each do |pip_cmd|
237
+ it "should retry on #{osfamily} if #{pip_cmd} has not yet been found" do
238
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
239
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
240
+ @provider.expects(:pip).twice.with('freeze').raises(NoMethodError).then.returns(nil)
241
+ pip_cmds.each do |cmd|
242
+ unless cmd == pip_cmd
243
+ @provider.expects(:which).with(cmd).returns(nil)
244
+ end
245
+ end
246
+ @provider.expects(:which).with(pip_cmd).returns("/fake/bin/#{pip_cmd}")
247
+ @provider.method(:lazy_pip).call "freeze"
248
+ end
249
+
250
+ it "should fail on #{osfamily} if #{pip_cmd} is missing" do
251
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
252
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
253
+ @provider.expects(:pip).with('freeze').raises(NoMethodError)
254
+ pip_cmds.each do |pip_cmd|
255
+ @provider.expects(:which).with(pip_cmd).returns(nil)
256
+ end
257
+ expect { @provider.method(:lazy_pip).call("freeze") }.to raise_error(NoMethodError)
258
+ end
259
+
260
+ it "should output a useful error message on #{osfamily} if #{pip_cmd} is missing" do
261
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
262
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
263
+ @provider.expects(:pip).with('freeze').raises(NoMethodError)
264
+ pip_cmds.each do |pip_cmd|
265
+ @provider.expects(:which).with(pip_cmd).returns(nil)
266
+ end
267
+ expect { @provider.method(:lazy_pip).call("freeze") }.
268
+ to raise_error(NoMethodError, "Could not locate command #{pip_cmd}.")
269
+ end
251
270
  end
252
-
253
271
  end
254
272
 
255
273
  end
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  provider_class = Puppet::Type.type(:package).provider(:pip)
5
- osfamilies = { ['RedHat', '6'] => 'pip-python', ['RedHat', '7'] => 'pip', ['Not RedHat', nil] => 'pip' }
5
+ osfamilies = { ['All', nil] => ['pip', 'pip-python'] }
6
6
 
7
7
  describe provider_class do
8
8
 
@@ -31,42 +31,44 @@ describe provider_class do
31
31
  end
32
32
 
33
33
  describe "cmd" do
34
- it "should return pip-python on RedHat < 7 systems" do
35
- Facter.stubs(:value).with(:osfamily).returns("RedHat")
36
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns("6")
37
- expect(provider_class.cmd).to eq('pip-python')
38
- end
39
-
40
- it "should return pip on RedHat >= 7 systems" do
41
- Facter.stubs(:value).with(:osfamily).returns("RedHat")
42
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns("7")
43
- expect(provider_class.cmd).to eq('pip')
34
+ it "should return pip-python on legacy systems" do
35
+ Facter.stubs(:value).with(:osfamily).returns("legacy")
36
+ expect(provider_class.cmd[1]).to eq('pip-python')
44
37
  end
45
38
 
46
39
  it "should return pip by default" do
47
- Facter.stubs(:value).with(:osfamily).returns("Not RedHat")
48
- expect(provider_class.cmd).to eq('pip')
40
+ Facter.stubs(:value).with(:osfamily).returns("All")
41
+ expect(provider_class.cmd[0]).to eq('pip')
49
42
  end
50
43
 
51
44
  end
52
45
 
53
46
  describe "instances" do
54
47
 
55
- osfamilies.each do |osfamily, pip_cmd|
56
- it "should return an array on #{osfamily} when #{pip_cmd} is present" do
48
+ osfamilies.each do |osfamily, pip_cmds|
49
+ it "should return an array on #{osfamily} when #{pip_cmds.join(' or ')} is present" do
57
50
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
58
51
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
59
- provider_class.expects(:which).with(pip_cmd).returns("/fake/bin/pip")
60
- p = stub("process")
61
- p.expects(:collect).yields("real_package==1.2.5")
62
- provider_class.expects(:execpipe).with("/fake/bin/pip freeze").yields(p)
63
- provider_class.instances
52
+ pip_cmds.each do |pip_cmd|
53
+ pip_cmds.each do |cmd|
54
+ unless cmd == pip_cmd
55
+ provider_class.expects(:which).with(cmd).returns(nil)
56
+ end
57
+ end
58
+ provider_class.expects(:which).with(pip_cmd).returns("/fake/bin/#{pip_cmd}")
59
+ p = stub("process")
60
+ p.expects(:collect).yields("real_package==1.2.5")
61
+ provider_class.expects(:execpipe).with("/fake/bin/#{pip_cmd} freeze").yields(p)
62
+ provider_class.instances
63
+ end
64
64
  end
65
65
 
66
- it "should return an empty array on #{osfamily} when #{pip_cmd} is missing" do
66
+ it "should return an empty array on #{osfamily} when #{pip_cmds.join(' and ')} are missing" do
67
67
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
68
68
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
69
- provider_class.expects(:which).with(pip_cmd).returns nil
69
+ pip_cmds.each do |cmd|
70
+ provider_class.expects(:which).with(cmd).returns nil
71
+ end
70
72
  expect(provider_class.instances).to eq([])
71
73
  end
72
74
  end
@@ -263,30 +265,41 @@ describe provider_class do
263
265
  @provider.method(:lazy_pip).call "freeze"
264
266
  end
265
267
 
266
- osfamilies.each do |osfamily, pip_cmd|
267
- it "should retry on #{osfamily} if #{pip_cmd} has not yet been found" do
268
- Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
269
- Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
270
- @provider.expects(:pip).twice.with('freeze').raises(NoMethodError).then.returns(nil)
271
- @provider.expects(:which).with(pip_cmd).returns("/fake/bin/pip")
272
- @provider.method(:lazy_pip).call "freeze"
268
+ osfamilies.each do |osfamily, pip_cmds|
269
+ pip_cmds.each do |pip_cmd|
270
+ it "should retry on #{osfamily} if #{pip_cmd} has not yet been found" do
271
+ Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
272
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
273
+ @provider.expects(:pip).twice.with('freeze').raises(NoMethodError).then.returns(nil)
274
+ pip_cmds.each do |cmd|
275
+ unless cmd == pip_cmd
276
+ @provider.expects(:which).with(cmd).returns(nil)
277
+ end
278
+ end
279
+ @provider.expects(:which).with(pip_cmd).returns("/fake/bin/#{pip_cmd}")
280
+ @provider.method(:lazy_pip).call "freeze"
281
+ end
273
282
  end
274
283
 
275
- it "should fail on #{osfamily} if #{pip_cmd} is missing" do
284
+ it "should fail on #{osfamily} if #{pip_cmds.join(' and ')} are missing" do
276
285
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
277
286
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
278
287
  @provider.expects(:pip).with('freeze').raises(NoMethodError)
279
- @provider.expects(:which).with(pip_cmd).returns(nil)
288
+ pip_cmds.each do |pip_cmd|
289
+ @provider.expects(:which).with(pip_cmd).returns(nil)
290
+ end
280
291
  expect { @provider.method(:lazy_pip).call("freeze") }.to raise_error(NoMethodError)
281
292
  end
282
293
 
283
- it "should output a useful error message on #{osfamily} if #{pip_cmd} is missing" do
294
+ it "should output a useful error message on #{osfamily} if #{pip_cmds.join(' and ')} are missing" do
284
295
  Facter.stubs(:value).with(:osfamily).returns(osfamily.first)
285
296
  Facter.stubs(:value).with(:operatingsystemmajrelease).returns(osfamily.last)
286
297
  @provider.expects(:pip).with('freeze').raises(NoMethodError)
287
- @provider.expects(:which).with(pip_cmd).returns(nil)
298
+ pip_cmds.each do |pip_cmd|
299
+ @provider.expects(:which).with(pip_cmd).returns(nil)
300
+ end
288
301
  expect { @provider.method(:lazy_pip).call("freeze") }.
289
- to raise_error(NoMethodError, "Could not locate the #{pip_cmd} command.")
302
+ to raise_error(NoMethodError, "Could not locate command #{pip_cmds.join(' and ')}.")
290
303
  end
291
304
 
292
305
  end
@@ -1,6 +1,9 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
3
 
4
+ module Puppet::Util::Plist
5
+ end
6
+
4
7
  describe Puppet::Type.type(:package).provider(:pkgdmg) do
5
8
  let(:resource) { Puppet::Type.type(:package).new(:name => 'foo', :provider => :pkgdmg) }
6
9
  let(:provider) { described_class.new(resource) }
@@ -26,8 +29,7 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
26
29
  # These tests shouldn't be this messy. The pkgdmg provider needs work...
27
30
  describe "when installing a pkgdmg" do
28
31
  let(:fake_mountpoint) { "/tmp/dmg.foo" }
29
- let(:empty_hdiutil_plist) { Plist::Emit.dump({}) }
30
- let(:fake_hdiutil_plist) { Plist::Emit.dump({"system-entities" => [{"mount-point" => fake_mountpoint}]}) }
32
+ let(:fake_hdiutil_plist) { {"system-entities" => [{"mount-point" => fake_mountpoint}]} }
31
33
 
32
34
  before do
33
35
  fh = mock 'filehandle'
@@ -39,20 +41,23 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
39
41
  end
40
42
 
41
43
  it "should fail when a disk image with no system entities is mounted" do
42
- described_class.stubs(:hdiutil).returns(empty_hdiutil_plist)
44
+ described_class.stubs(:hdiutil).returns 'empty plist'
45
+ Puppet::Util::Plist.expects(:parse_plist).with('empty plist').returns({})
43
46
  expect { provider.install }.to raise_error(Puppet::Error, /No disk entities/)
44
47
  end
45
48
 
46
49
  it "should call hdiutil to mount and eject the disk image" do
47
50
  Dir.stubs(:entries).returns []
48
51
  provider.class.expects(:hdiutil).with("eject", fake_mountpoint).returns 0
49
- provider.class.expects(:hdiutil).with("mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", nil).returns fake_hdiutil_plist
52
+ provider.class.expects(:hdiutil).with("mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", nil).returns 'a plist'
53
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
50
54
  provider.install
51
55
  end
52
56
 
53
57
  it "should call installpkg if a pkg/mpkg is found on the dmg" do
54
58
  Dir.stubs(:entries).returns ["foo.pkg"]
55
- provider.class.stubs(:hdiutil).returns fake_hdiutil_plist
59
+ provider.class.stubs(:hdiutil).returns 'a plist'
60
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
56
61
  provider.class.expects(:installpkg).with("#{fake_mountpoint}/foo.pkg", resource[:name], "foo.dmg").returns ""
57
62
  provider.install
58
63
  end
@@ -70,7 +75,8 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
70
75
  described_class.expects(:curl).with do |*args|
71
76
  args[0] == "-o" && args[1].include?(tmpdir) && args.include?("--fail") && ! args.include?("-k")
72
77
  end
73
- described_class.stubs(:hdiutil).returns fake_hdiutil_plist
78
+ described_class.stubs(:hdiutil).returns 'a plist'
79
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
74
80
  described_class.expects(:installpkg)
75
81
 
76
82
  provider.install
@@ -86,7 +92,8 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
86
92
  expect(args).to be_include 'some_host:some_port'
87
93
  expect(args).to be_include '--proxy'
88
94
  end
89
- described_class.stubs(:hdiutil).returns fake_hdiutil_plist
95
+ described_class.stubs(:hdiutil).returns 'a plist'
96
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
90
97
  described_class.expects(:installpkg)
91
98
 
92
99
  provider.install
@@ -102,7 +109,8 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
102
109
  expect(args).to be_include 'some_host'
103
110
  expect(args).to be_include '--proxy'
104
111
  end
105
- described_class.stubs(:hdiutil).returns fake_hdiutil_plist
112
+ described_class.stubs(:hdiutil).returns 'a plist'
113
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
106
114
  described_class.expects(:installpkg)
107
115
 
108
116
  provider.install
@@ -119,7 +127,8 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
119
127
  expect(args).not_to be_include '--proxy'
120
128
  true
121
129
  end
122
- described_class.stubs(:hdiutil).returns fake_hdiutil_plist
130
+ described_class.stubs(:hdiutil).returns 'a plist'
131
+ Puppet::Util::Plist.expects(:parse_plist).with('a plist').returns fake_hdiutil_plist
123
132
  described_class.expects(:installpkg)
124
133
 
125
134
  provider.install