puppet 6.13.0-universal-darwin → 6.18.0-universal-darwin

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (461) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/CONTRIBUTING.md +7 -13
  4. data/Gemfile +4 -2
  5. data/Gemfile.lock +36 -32
  6. data/README.md +17 -24
  7. data/ext/windows/service/daemon.rb +3 -3
  8. data/lib/puppet.rb +33 -9
  9. data/lib/puppet/agent.rb +20 -14
  10. data/lib/puppet/application/agent.rb +26 -17
  11. data/lib/puppet/application/apply.rb +18 -20
  12. data/lib/puppet/application/describe.rb +7 -5
  13. data/lib/puppet/application/device.rb +2 -2
  14. data/lib/puppet/application/filebucket.rb +19 -15
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/plugin.rb +1 -0
  17. data/lib/puppet/application/ssl.rb +4 -4
  18. data/lib/puppet/configurer.rb +58 -57
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  21. data/lib/puppet/confine.rb +2 -2
  22. data/lib/puppet/confine/any.rb +1 -1
  23. data/lib/puppet/context/trusted_information.rb +14 -8
  24. data/lib/puppet/daemon.rb +13 -27
  25. data/lib/puppet/defaults.rb +92 -12
  26. data/lib/puppet/environments.rb +4 -5
  27. data/lib/puppet/face/facts.rb +1 -1
  28. data/lib/puppet/face/help.rb +29 -3
  29. data/lib/puppet/face/module/search.rb +5 -0
  30. data/lib/puppet/face/plugin.rb +2 -2
  31. data/lib/puppet/feature/base.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  33. data/lib/puppet/file_serving/metadata.rb +4 -1
  34. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  35. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  36. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  37. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  38. data/lib/puppet/file_system/file_impl.rb +17 -13
  39. data/lib/puppet/file_system/uniquefile.rb +12 -16
  40. data/lib/puppet/forge.rb +1 -1
  41. data/lib/puppet/forge/cache.rb +1 -1
  42. data/lib/puppet/forge/repository.rb +4 -7
  43. data/lib/puppet/functions/call.rb +1 -1
  44. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  45. data/lib/puppet/functions/filter.rb +1 -0
  46. data/lib/puppet/functions/lstrip.rb +4 -4
  47. data/lib/puppet/functions/reduce.rb +2 -4
  48. data/lib/puppet/functions/reverse_each.rb +1 -1
  49. data/lib/puppet/functions/rstrip.rb +4 -4
  50. data/lib/puppet/functions/step.rb +1 -1
  51. data/lib/puppet/functions/strip.rb +4 -4
  52. data/lib/puppet/gettext/config.rb +5 -5
  53. data/lib/puppet/gettext/module_translations.rb +4 -4
  54. data/lib/puppet/http.rb +3 -0
  55. data/lib/puppet/http/client.rb +263 -73
  56. data/lib/puppet/http/external_client.rb +90 -0
  57. data/lib/puppet/http/redirector.rb +43 -7
  58. data/lib/puppet/http/resolver.rb +46 -3
  59. data/lib/puppet/http/resolver/server_list.rb +76 -16
  60. data/lib/puppet/http/resolver/settings.rb +23 -3
  61. data/lib/puppet/http/resolver/srv.rb +29 -3
  62. data/lib/puppet/http/response.rb +87 -1
  63. data/lib/puppet/http/retry_after_handler.rb +39 -0
  64. data/lib/puppet/http/service.rb +97 -12
  65. data/lib/puppet/http/service/ca.rb +76 -14
  66. data/lib/puppet/http/service/compiler.rb +249 -16
  67. data/lib/puppet/http/service/file_server.rb +141 -20
  68. data/lib/puppet/http/service/report.rb +47 -17
  69. data/lib/puppet/http/session.rb +96 -7
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/facts/facter.rb +3 -3
  74. data/lib/puppet/indirector/facts/rest.rb +42 -0
  75. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  76. data/lib/puppet/indirector/file_content/http.rb +5 -0
  77. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  78. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  79. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/node/rest.rb +24 -0
  83. data/lib/puppet/indirector/report/processor.rb +2 -2
  84. data/lib/puppet/indirector/report/rest.rb +19 -0
  85. data/lib/puppet/indirector/report/yaml.rb +23 -0
  86. data/lib/puppet/indirector/request.rb +1 -1
  87. data/lib/puppet/indirector/rest.rb +12 -0
  88. data/lib/puppet/indirector/status/rest.rb +18 -0
  89. data/lib/puppet/loaders.rb +6 -0
  90. data/lib/puppet/metatype/manager.rb +80 -80
  91. data/lib/puppet/module.rb +1 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  94. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  95. data/lib/puppet/network/http/base_pool.rb +7 -2
  96. data/lib/puppet/network/http/compression.rb +7 -0
  97. data/lib/puppet/network/http/connection.rb +2 -0
  98. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  99. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  100. data/lib/puppet/network/http/pool.rb +8 -5
  101. data/lib/puppet/network/http/route.rb +2 -2
  102. data/lib/puppet/network/http_pool.rb +2 -1
  103. data/lib/puppet/node/environment.rb +22 -5
  104. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  105. data/lib/puppet/pal/pal_impl.rb +30 -31
  106. data/lib/puppet/parameter.rb +1 -1
  107. data/lib/puppet/parser/ast/leaf.rb +5 -5
  108. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  109. data/lib/puppet/parser/compiler.rb +43 -33
  110. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  111. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  112. data/lib/puppet/parser/environment_compiler.rb +4 -1
  113. data/lib/puppet/parser/functions.rb +18 -9
  114. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  115. data/lib/puppet/parser/functions/filter.rb +1 -0
  116. data/lib/puppet/parser/resource.rb +3 -2
  117. data/lib/puppet/parser/resource/param.rb +6 -0
  118. data/lib/puppet/parser/type_loader.rb +2 -2
  119. data/lib/puppet/pops/adaptable.rb +7 -13
  120. data/lib/puppet/pops/adapters.rb +8 -4
  121. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  122. data/lib/puppet/pops/issues.rb +5 -0
  123. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  124. data/lib/puppet/pops/loaders.rb +24 -15
  125. data/lib/puppet/pops/lookup/context.rb +1 -1
  126. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  127. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  128. data/lib/puppet/pops/types/iterable.rb +34 -8
  129. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  130. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  131. data/lib/puppet/provider/file/windows.rb +1 -1
  132. data/lib/puppet/provider/group/groupadd.rb +9 -4
  133. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  134. data/lib/puppet/provider/package/aix.rb +17 -2
  135. data/lib/puppet/provider/package/apt.rb +98 -1
  136. data/lib/puppet/provider/package/aptitude.rb +1 -1
  137. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  138. data/lib/puppet/provider/package/gem.rb +45 -9
  139. data/lib/puppet/provider/package/pacman.rb +2 -5
  140. data/lib/puppet/provider/package/pip.rb +143 -48
  141. data/lib/puppet/provider/package/pip3.rb +0 -2
  142. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgng.rb +16 -4
  144. data/lib/puppet/provider/package/portage.rb +2 -2
  145. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  146. data/lib/puppet/provider/package/rpm.rb +6 -213
  147. data/lib/puppet/provider/package/yum.rb +100 -20
  148. data/lib/puppet/provider/package/zypper.rb +62 -1
  149. data/lib/puppet/provider/service/systemd.rb +22 -4
  150. data/lib/puppet/provider/service/windows.rb +23 -7
  151. data/lib/puppet/provider/user/aix.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +16 -5
  154. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  155. data/lib/puppet/reports/http.rb +15 -9
  156. data/lib/puppet/resource.rb +2 -1
  157. data/lib/puppet/resource/type.rb +8 -0
  158. data/lib/puppet/resource/type_collection.rb +20 -16
  159. data/lib/puppet/runtime.rb +31 -1
  160. data/lib/puppet/settings.rb +3 -1
  161. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  162. data/lib/puppet/ssl.rb +1 -0
  163. data/lib/puppet/ssl/host.rb +4 -4
  164. data/lib/puppet/ssl/oids.rb +1 -0
  165. data/lib/puppet/ssl/ssl_context.rb +2 -2
  166. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  167. data/lib/puppet/ssl/state_machine.rb +81 -35
  168. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  169. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  170. data/lib/puppet/test/test_helper.rb +21 -14
  171. data/lib/puppet/transaction.rb +2 -2
  172. data/lib/puppet/transaction/persistence.rb +1 -1
  173. data/lib/puppet/transaction/report.rb +3 -3
  174. data/lib/puppet/trusted_external.rb +29 -1
  175. data/lib/puppet/type.rb +21 -8
  176. data/lib/puppet/type/file.rb +51 -13
  177. data/lib/puppet/type/file/checksum.rb +4 -4
  178. data/lib/puppet/type/file/source.rb +75 -64
  179. data/lib/puppet/type/notify.rb +2 -2
  180. data/lib/puppet/type/package.rb +41 -3
  181. data/lib/puppet/type/service.rb +59 -8
  182. data/lib/puppet/type/user.rb +19 -29
  183. data/lib/puppet/util.rb +41 -3
  184. data/lib/puppet/util/at_fork.rb +1 -1
  185. data/lib/puppet/util/autoload.rb +13 -25
  186. data/lib/puppet/util/character_encoding.rb +9 -5
  187. data/lib/puppet/util/checksums.rb +19 -4
  188. data/lib/puppet/util/execution.rb +2 -2
  189. data/lib/puppet/util/fileparsing.rb +2 -2
  190. data/lib/puppet/util/instance_loader.rb +14 -10
  191. data/lib/puppet/util/log/destinations.rb +1 -10
  192. data/lib/puppet/util/package/version/debian.rb +175 -0
  193. data/lib/puppet/util/package/version/gem.rb +15 -0
  194. data/lib/puppet/util/package/version/pip.rb +167 -0
  195. data/lib/puppet/util/package/version/range.rb +53 -0
  196. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  197. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  198. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  199. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  200. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  201. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  202. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  203. data/lib/puppet/util/package/version/rpm.rb +73 -0
  204. data/lib/puppet/util/pidlock.rb +13 -7
  205. data/lib/puppet/util/platform.rb +5 -0
  206. data/lib/puppet/util/provider_features.rb +1 -1
  207. data/lib/puppet/util/reference.rb +1 -1
  208. data/lib/puppet/util/rpm_compare.rb +193 -0
  209. data/lib/puppet/util/windows.rb +1 -0
  210. data/lib/puppet/util/windows/adsi.rb +2 -2
  211. data/lib/puppet/util/windows/api_types.rb +60 -33
  212. data/lib/puppet/util/windows/eventlog.rb +1 -6
  213. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  214. data/lib/puppet/util/windows/principal.rb +8 -6
  215. data/lib/puppet/util/windows/process.rb +15 -14
  216. data/lib/puppet/util/windows/registry.rb +11 -11
  217. data/lib/puppet/util/windows/security.rb +5 -4
  218. data/lib/puppet/util/windows/service.rb +43 -26
  219. data/lib/puppet/util/windows/sid.rb +3 -3
  220. data/lib/puppet/util/windows/user.rb +242 -8
  221. data/lib/puppet/version.rb +1 -1
  222. data/locales/puppet.pot +641 -511
  223. data/man/man5/puppet.conf.5 +75 -10
  224. data/man/man8/puppet-agent.8 +7 -7
  225. data/man/man8/puppet-apply.8 +1 -1
  226. data/man/man8/puppet-catalog.8 +1 -1
  227. data/man/man8/puppet-config.8 +1 -1
  228. data/man/man8/puppet-describe.8 +1 -1
  229. data/man/man8/puppet-device.8 +2 -2
  230. data/man/man8/puppet-doc.8 +1 -1
  231. data/man/man8/puppet-epp.8 +1 -1
  232. data/man/man8/puppet-facts.8 +1 -1
  233. data/man/man8/puppet-filebucket.8 +17 -2
  234. data/man/man8/puppet-generate.8 +1 -1
  235. data/man/man8/puppet-help.8 +6 -3
  236. data/man/man8/puppet-key.8 +1 -1
  237. data/man/man8/puppet-lookup.8 +2 -2
  238. data/man/man8/puppet-man.8 +1 -1
  239. data/man/man8/puppet-module.8 +4 -1
  240. data/man/man8/puppet-node.8 +1 -1
  241. data/man/man8/puppet-parser.8 +1 -1
  242. data/man/man8/puppet-plugin.8 +1 -1
  243. data/man/man8/puppet-report.8 +1 -1
  244. data/man/man8/puppet-resource.8 +1 -1
  245. data/man/man8/puppet-script.8 +1 -1
  246. data/man/man8/puppet-ssl.8 +2 -2
  247. data/man/man8/puppet-status.8 +1 -1
  248. data/man/man8/puppet.8 +2 -2
  249. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  250. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  251. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  252. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  253. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  254. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  255. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  256. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  257. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  258. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  259. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  260. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  261. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  262. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -67
  263. 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 +1 -69
  264. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -69
  265. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -67
  266. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -65
  267. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -67
  268. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -67
  269. data/spec/integration/application/agent_spec.rb +475 -0
  270. data/spec/integration/application/apply_spec.rb +279 -150
  271. data/spec/integration/application/config_spec.rb +74 -0
  272. data/spec/integration/application/doc_spec.rb +16 -6
  273. data/spec/integration/application/filebucket_spec.rb +239 -0
  274. data/spec/integration/application/help_spec.rb +42 -0
  275. data/spec/integration/application/lookup_spec.rb +13 -0
  276. data/spec/integration/application/module_spec.rb +68 -0
  277. data/spec/integration/application/plugin_spec.rb +123 -0
  278. data/spec/integration/data_binding_spec.rb +82 -0
  279. data/spec/integration/defaults_spec.rb +1 -2
  280. data/spec/integration/directory_environments_spec.rb +17 -17
  281. data/spec/integration/http/client_spec.rb +47 -37
  282. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  283. data/spec/integration/indirector/report/yaml.rb +83 -0
  284. data/spec/integration/network/http_pool_spec.rb +93 -20
  285. data/spec/integration/node/environment_spec.rb +15 -0
  286. data/spec/integration/parser/compiler_spec.rb +11 -0
  287. data/spec/integration/type/file_spec.rb +1 -1
  288. data/spec/integration/util/execution_spec.rb +22 -0
  289. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  290. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  291. data/spec/integration/util/windows/process_spec.rb +26 -32
  292. data/spec/integration/util/windows/registry_spec.rb +7 -7
  293. data/spec/integration/util/windows/user_spec.rb +47 -5
  294. data/spec/integration/util_spec.rb +7 -33
  295. data/spec/lib/puppet/test_ca.rb +2 -2
  296. data/spec/lib/puppet_spec/https.rb +16 -7
  297. data/spec/lib/puppet_spec/matchers.rb +0 -80
  298. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  299. data/spec/shared_contexts/https.rb +29 -0
  300. data/spec/unit/agent_spec.rb +80 -26
  301. data/spec/unit/application/agent_spec.rb +12 -9
  302. data/spec/unit/application/describe_spec.rb +88 -50
  303. data/spec/unit/application/device_spec.rb +2 -2
  304. data/spec/unit/application/face_base_spec.rb +6 -4
  305. data/spec/unit/application/facts_spec.rb +39 -10
  306. data/spec/unit/application/filebucket_spec.rb +22 -2
  307. data/spec/unit/application/man_spec.rb +52 -0
  308. data/spec/unit/application/resource_spec.rb +3 -1
  309. data/spec/unit/application/ssl_spec.rb +15 -2
  310. data/spec/unit/configurer/downloader_spec.rb +10 -0
  311. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  312. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  313. data/spec/unit/configurer_spec.rb +64 -46
  314. data/spec/unit/confine_spec.rb +2 -1
  315. data/spec/unit/context/trusted_information_spec.rb +25 -2
  316. data/spec/unit/daemon_spec.rb +5 -64
  317. data/spec/unit/defaults_spec.rb +24 -1
  318. data/spec/unit/environments_spec.rb +8 -0
  319. data/spec/unit/face/config_spec.rb +3 -1
  320. data/spec/unit/face/module/search_spec.rb +17 -0
  321. data/spec/unit/face/plugin_spec.rb +12 -10
  322. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  323. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  324. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  325. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  326. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  327. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  328. data/spec/unit/file_system_spec.rb +10 -0
  329. data/spec/unit/functions/lookup_spec.rb +13 -0
  330. data/spec/unit/http/client_spec.rb +321 -36
  331. data/spec/unit/http/external_client_spec.rb +201 -0
  332. data/spec/unit/http/resolver_spec.rb +34 -3
  333. data/spec/unit/http/response_spec.rb +75 -0
  334. data/spec/unit/http/service/ca_spec.rb +53 -12
  335. data/spec/unit/http/service/compiler_spec.rb +332 -28
  336. data/spec/unit/http/service/file_server_spec.rb +100 -12
  337. data/spec/unit/http/service/report_spec.rb +19 -9
  338. data/spec/unit/http/service_spec.rb +94 -6
  339. data/spec/unit/http/session_spec.rb +159 -8
  340. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  341. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  342. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  343. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  344. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  345. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  346. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  347. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  348. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  349. data/spec/unit/indirector/request_spec.rb +1 -1
  350. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  351. data/spec/unit/indirector/rest_spec.rb +13 -0
  352. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  353. data/spec/unit/interface_spec.rb +3 -3
  354. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  355. data/spec/unit/network/format_support_spec.rb +3 -2
  356. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  357. data/spec/unit/network/http/connection_spec.rb +552 -190
  358. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  359. data/spec/unit/network/http/pool_spec.rb +59 -13
  360. data/spec/unit/network/http_pool_spec.rb +63 -57
  361. data/spec/unit/network/http_spec.rb +1 -1
  362. data/spec/unit/node/environment_spec.rb +33 -0
  363. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  364. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  365. data/spec/unit/parser/scope_spec.rb +1 -1
  366. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  367. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  368. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  369. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  370. data/spec/unit/provider/group/groupadd_spec.rb +22 -8
  371. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  372. data/spec/unit/provider/package/aix_spec.rb +29 -0
  373. data/spec/unit/provider/package/apt_spec.rb +107 -0
  374. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  375. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  376. data/spec/unit/provider/package/gem_spec.rb +40 -0
  377. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  378. data/spec/unit/provider/package/pip_spec.rb +68 -19
  379. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  380. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  381. data/spec/unit/provider/package/portage_spec.rb +5 -0
  382. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  383. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  384. data/spec/unit/provider/package/yum_spec.rb +243 -1
  385. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  386. data/spec/unit/provider/service/init_spec.rb +42 -0
  387. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  388. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  389. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  390. data/spec/unit/provider/service/systemd_spec.rb +93 -18
  391. data/spec/unit/provider/service/windows_spec.rb +50 -14
  392. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  393. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  394. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  395. data/spec/unit/puppet_pal_2pec.rb +11 -0
  396. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  397. data/spec/unit/puppet_spec.rb +33 -0
  398. data/spec/unit/reports/http_spec.rb +70 -52
  399. data/spec/unit/reports/store_spec.rb +17 -13
  400. data/spec/unit/resource_spec.rb +3 -3
  401. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  402. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  403. data/spec/unit/ssl/host_spec.rb +4 -2
  404. data/spec/unit/ssl/oids_spec.rb +1 -0
  405. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  406. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  407. data/spec/unit/test/test_helper_spec.rb +17 -0
  408. data/spec/unit/transaction/persistence_spec.rb +15 -0
  409. data/spec/unit/transaction/report_spec.rb +5 -1
  410. data/spec/unit/transaction_spec.rb +0 -2
  411. data/spec/unit/type/file/ensure_spec.rb +1 -2
  412. data/spec/unit/type/file/source_spec.rb +89 -38
  413. data/spec/unit/type/file_spec.rb +122 -96
  414. data/spec/unit/type/service_spec.rb +218 -8
  415. data/spec/unit/type/user_spec.rb +32 -3
  416. data/spec/unit/type_spec.rb +50 -0
  417. data/spec/unit/util/at_fork_spec.rb +3 -2
  418. data/spec/unit/util/autoload_spec.rb +2 -1
  419. data/spec/unit/util/character_encoding_spec.rb +4 -4
  420. data/spec/unit/util/checksums_spec.rb +16 -0
  421. data/spec/unit/util/command_line_spec.rb +11 -6
  422. data/spec/unit/util/log/destinations_spec.rb +1 -29
  423. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  424. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  425. data/spec/unit/util/package/version/range_spec.rb +175 -0
  426. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  427. data/spec/unit/util/pidlock_spec.rb +102 -54
  428. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  429. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  430. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  431. data/spec/unit/util/windows/service_spec.rb +4 -4
  432. data/spec/unit/util/windows/sid_spec.rb +2 -2
  433. data/spec/unit/util_spec.rb +3 -3
  434. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  435. data/tasks/generate_cert_fixtures.rake +15 -1
  436. data/tasks/manpages.rake +5 -35
  437. metadata +84 -52
  438. data/COMMITTERS.md +0 -244
  439. data/spec/integration/faces/config_spec.rb +0 -91
  440. data/spec/integration/faces/documentation_spec.rb +0 -57
  441. data/spec/integration/faces/plugin_spec.rb +0 -61
  442. data/spec/integration/file_bucket/file_spec.rb +0 -50
  443. data/spec/integration/file_serving/content_spec.rb +0 -7
  444. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  445. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  446. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  447. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  448. data/spec/integration/module_tool/forge_spec.rb +0 -64
  449. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  450. data/spec/integration/provider/service/init_spec.rb +0 -48
  451. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  452. data/spec/integration/provider/service/windows_spec.rb +0 -50
  453. data/spec/integration/reference/providers_spec.rb +0 -21
  454. data/spec/integration/reports_spec.rb +0 -13
  455. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  456. data/spec/integration/ssl/host_spec.rb +0 -72
  457. data/spec/integration/ssl/key_spec.rb +0 -99
  458. data/spec/integration/test/test_helper_spec.rb +0 -31
  459. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  460. data/spec/unit/face/man_spec.rb +0 -25
  461. data/spec/unit/man_spec.rb +0 -31
@@ -72,6 +72,11 @@ describe Puppet::Type.type(:package).provider(:portage) do
72
72
  expect(described_class).to be_reinstallable
73
73
  end
74
74
 
75
+ it "should be the default provider on :osfamily => Gentoo" do
76
+ expect(Facter).to receive(:value).with(:osfamily).and_return("Gentoo")
77
+ expect(described_class.default?).to be_truthy
78
+ end
79
+
75
80
  it 'should support string install options' do
76
81
  expect(@provider).to receive(:emerge).with('--foo', '--bar', @resource[:name])
77
82
 
@@ -20,7 +20,10 @@ describe Puppet::Type.type(:package).provider(:puppet_gem) do
20
20
  let(:provider_gem_cmd) { '/opt/puppetlabs/puppet/bin/gem' }
21
21
  end
22
22
 
23
- let(:execute_options) { {:failonfail => true, :combine => true, :custom_environment => {"HOME"=>ENV["HOME"]}} }
23
+ custom_environment = {"HOME"=>ENV["HOME"]}
24
+ custom_environment['PKG_CONFIG_PATH'] = '/opt/puppetlabs/puppet/lib/pkgconfig' unless Puppet::Util::Platform.windows?
25
+
26
+ let(:execute_options) { {:failonfail => true, :combine => true, :custom_environment => custom_environment} }
24
27
 
25
28
  before :each do
26
29
  resource.provider = provider
@@ -67,6 +70,14 @@ describe Puppet::Type.type(:package).provider(:puppet_gem) do
67
70
  expect(described_class).to receive(:execute_gem_command).with(provider_gem_cmd, %w{uninstall --executables --all myresource --force --bindir=/usr/bin}).and_return('')
68
71
  provider.uninstall
69
72
  end
73
+
74
+ it 'should invalidate the rubygems cache' do
75
+ gem_source = double('gem_source')
76
+ allow(Puppet::Util::Autoload).to receive(:gem_source).and_return(gem_source)
77
+ expect(described_class).to receive(:execute_gem_command).with(provider_gem_cmd, %w{uninstall --executables --all myresource}).and_return('')
78
+ expect(gem_source).to receive(:clear_paths)
79
+ provider.uninstall
80
+ end
70
81
  end
71
82
 
72
83
  context 'calculated specificity' do
@@ -552,218 +552,6 @@ describe Puppet::Type.type(:package).provider(:rpm) do
552
552
  end
553
553
  end
554
554
 
555
- describe 'version comparison' do
556
- # test cases munged directly from rpm's own
557
- # tests/rpmvercmp.at
558
- it { expect(provider.rpmvercmp("1.0", "1.0")).to eq(0) }
559
- it { expect(provider.rpmvercmp("1.0", "2.0")).to eq(-1) }
560
- it { expect(provider.rpmvercmp("2.0", "1.0")).to eq(1) }
561
- it { expect(provider.rpmvercmp("2.0.1", "2.0.1")).to eq(0) }
562
- it { expect(provider.rpmvercmp("2.0", "2.0.1")).to eq(-1) }
563
- it { expect(provider.rpmvercmp("2.0.1", "2.0")).to eq(1) }
564
- it { expect(provider.rpmvercmp("2.0.1a", "2.0.1a")).to eq(0) }
565
- it { expect(provider.rpmvercmp("2.0.1a", "2.0.1")).to eq(1) }
566
- it { expect(provider.rpmvercmp("2.0.1", "2.0.1a")).to eq(-1) }
567
- it { expect(provider.rpmvercmp("5.5p1", "5.5p1")).to eq(0) }
568
- it { expect(provider.rpmvercmp("5.5p1", "5.5p2")).to eq(-1) }
569
- it { expect(provider.rpmvercmp("5.5p2", "5.5p1")).to eq(1) }
570
- it { expect(provider.rpmvercmp("5.5p10", "5.5p10")).to eq(0) }
571
- it { expect(provider.rpmvercmp("5.5p1", "5.5p10")).to eq(-1) }
572
- it { expect(provider.rpmvercmp("5.5p10", "5.5p1")).to eq(1) }
573
- it { expect(provider.rpmvercmp("10xyz", "10.1xyz")).to eq(-1) }
574
- it { expect(provider.rpmvercmp("10.1xyz", "10xyz")).to eq(1) }
575
- it { expect(provider.rpmvercmp("xyz10", "xyz10")).to eq(0) }
576
- it { expect(provider.rpmvercmp("xyz10", "xyz10.1")).to eq(-1) }
577
- it { expect(provider.rpmvercmp("xyz10.1", "xyz10")).to eq(1) }
578
- it { expect(provider.rpmvercmp("xyz.4", "xyz.4")).to eq(0) }
579
- it { expect(provider.rpmvercmp("xyz.4", "8")).to eq(-1) }
580
- it { expect(provider.rpmvercmp("8", "xyz.4")).to eq(1) }
581
- it { expect(provider.rpmvercmp("xyz.4", "2")).to eq(-1) }
582
- it { expect(provider.rpmvercmp("2", "xyz.4")).to eq(1) }
583
- it { expect(provider.rpmvercmp("5.5p2", "5.6p1")).to eq(-1) }
584
- it { expect(provider.rpmvercmp("5.6p1", "5.5p2")).to eq(1) }
585
- it { expect(provider.rpmvercmp("5.6p1", "6.5p1")).to eq(-1) }
586
- it { expect(provider.rpmvercmp("6.5p1", "5.6p1")).to eq(1) }
587
- it { expect(provider.rpmvercmp("6.0.rc1", "6.0")).to eq(1) }
588
- it { expect(provider.rpmvercmp("6.0", "6.0.rc1")).to eq(-1) }
589
- it { expect(provider.rpmvercmp("10b2", "10a1")).to eq(1) }
590
- it { expect(provider.rpmvercmp("10a2", "10b2")).to eq(-1) }
591
- it { expect(provider.rpmvercmp("1.0aa", "1.0aa")).to eq(0) }
592
- it { expect(provider.rpmvercmp("1.0a", "1.0aa")).to eq(-1) }
593
- it { expect(provider.rpmvercmp("1.0aa", "1.0a")).to eq(1) }
594
- it { expect(provider.rpmvercmp("10.0001", "10.0001")).to eq(0) }
595
- it { expect(provider.rpmvercmp("10.0001", "10.1")).to eq(0) }
596
- it { expect(provider.rpmvercmp("10.1", "10.0001")).to eq(0) }
597
- it { expect(provider.rpmvercmp("10.0001", "10.0039")).to eq(-1) }
598
- it { expect(provider.rpmvercmp("10.0039", "10.0001")).to eq(1) }
599
- it { expect(provider.rpmvercmp("4.999.9", "5.0")).to eq(-1) }
600
- it { expect(provider.rpmvercmp("5.0", "4.999.9")).to eq(1) }
601
- it { expect(provider.rpmvercmp("20101121", "20101121")).to eq(0) }
602
- it { expect(provider.rpmvercmp("20101121", "20101122")).to eq(-1) }
603
- it { expect(provider.rpmvercmp("20101122", "20101121")).to eq(1) }
604
- it { expect(provider.rpmvercmp("2_0", "2_0")).to eq(0) }
605
- it { expect(provider.rpmvercmp("2.0", "2_0")).to eq(0) }
606
- it { expect(provider.rpmvercmp("2_0", "2.0")).to eq(0) }
607
- it { expect(provider.rpmvercmp("a", "a")).to eq(0) }
608
- it { expect(provider.rpmvercmp("a+", "a+")).to eq(0) }
609
- it { expect(provider.rpmvercmp("a+", "a_")).to eq(0) }
610
- it { expect(provider.rpmvercmp("a_", "a+")).to eq(0) }
611
- it { expect(provider.rpmvercmp("+a", "+a")).to eq(0) }
612
- it { expect(provider.rpmvercmp("+a", "_a")).to eq(0) }
613
- it { expect(provider.rpmvercmp("_a", "+a")).to eq(0) }
614
- it { expect(provider.rpmvercmp("+_", "+_")).to eq(0) }
615
- it { expect(provider.rpmvercmp("_+", "+_")).to eq(0) }
616
- it { expect(provider.rpmvercmp("_+", "_+")).to eq(0) }
617
- it { expect(provider.rpmvercmp("+", "_")).to eq(0) }
618
- it { expect(provider.rpmvercmp("_", "+")).to eq(0) }
619
- it { expect(provider.rpmvercmp("1.0~rc1", "1.0~rc1")).to eq(0) }
620
- it { expect(provider.rpmvercmp("1.0~rc1", "1.0")).to eq(-1) }
621
- it { expect(provider.rpmvercmp("1.0", "1.0~rc1")).to eq(1) }
622
- it { expect(provider.rpmvercmp("1.0~rc1", "1.0~rc2")).to eq(-1) }
623
- it { expect(provider.rpmvercmp("1.0~rc2", "1.0~rc1")).to eq(1) }
624
- it { expect(provider.rpmvercmp("1.0~rc1~git123", "1.0~rc1~git123")).to eq(0) }
625
- it { expect(provider.rpmvercmp("1.0~rc1~git123", "1.0~rc1")).to eq(-1) }
626
- it { expect(provider.rpmvercmp("1.0~rc1", "1.0~rc1~git123")).to eq(1) }
627
- it { expect(provider.rpmvercmp("1.0~rc1", "1.0arc1")).to eq(-1) }
628
- it { expect(provider.rpmvercmp("", "~")).to eq(1) }
629
- it { expect(provider.rpmvercmp("~", "~~")).to eq(1) }
630
- it { expect(provider.rpmvercmp("~", "~+~")).to eq(1) }
631
- it { expect(provider.rpmvercmp("~", "~a")).to eq(-1) }
632
-
633
- # non-upstream test cases
634
- it { expect(provider.rpmvercmp("405", "406")).to eq(-1) }
635
- it { expect(provider.rpmvercmp("1", "0")).to eq(1) }
636
- end
637
-
638
- describe 'package evr parsing' do
639
- it 'should parse full simple evr' do
640
- v = provider.rpm_parse_evr('0:1.2.3-4.el5')
641
- expect(v[:epoch]).to eq('0')
642
- expect(v[:version]).to eq('1.2.3')
643
- expect(v[:release]).to eq('4.el5')
644
- end
645
-
646
- it 'should parse version only' do
647
- v = provider.rpm_parse_evr('1.2.3')
648
- expect(v[:epoch]).to eq(nil)
649
- expect(v[:version]).to eq('1.2.3')
650
- expect(v[:release]).to eq(nil)
651
- end
652
-
653
- it 'should parse version-release' do
654
- v = provider.rpm_parse_evr('1.2.3-4.5.el6')
655
- expect(v[:epoch]).to eq(nil)
656
- expect(v[:version]).to eq('1.2.3')
657
- expect(v[:release]).to eq('4.5.el6')
658
- end
659
-
660
- it 'should parse release with git hash' do
661
- v = provider.rpm_parse_evr('1.2.3-4.1234aefd')
662
- expect(v[:epoch]).to eq(nil)
663
- expect(v[:version]).to eq('1.2.3')
664
- expect(v[:release]).to eq('4.1234aefd')
665
- end
666
-
667
- it 'should parse single integer versions' do
668
- v = provider.rpm_parse_evr('12345')
669
- expect(v[:epoch]).to eq(nil)
670
- expect(v[:version]).to eq('12345')
671
- expect(v[:release]).to eq(nil)
672
- end
673
-
674
- it 'should parse text in the epoch to 0' do
675
- v = provider.rpm_parse_evr('foo0:1.2.3-4')
676
- expect(v[:epoch]).to eq(nil)
677
- expect(v[:version]).to eq('1.2.3')
678
- expect(v[:release]).to eq('4')
679
- end
680
-
681
- it 'should parse revisions with text' do
682
- v = provider.rpm_parse_evr('1.2.3-SNAPSHOT20140107')
683
- expect(v[:epoch]).to eq(nil)
684
- expect(v[:version]).to eq('1.2.3')
685
- expect(v[:release]).to eq('SNAPSHOT20140107')
686
- end
687
-
688
- # test cases for PUP-682
689
- it 'should parse revisions with text and numbers' do
690
- v = provider.rpm_parse_evr('2.2-SNAPSHOT20121119105647')
691
- expect(v[:epoch]).to eq(nil)
692
- expect(v[:version]).to eq('2.2')
693
- expect(v[:release]).to eq('SNAPSHOT20121119105647')
694
- end
695
- end
696
-
697
- describe 'rpm evr comparison' do
698
- # currently passing tests
699
- it 'should evaluate identical version-release as equal' do
700
- v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => '1.el5'},
701
- {:epoch => '0', :version => '1.2.3', :release => '1.el5'})
702
- expect(v).to eq(0)
703
- end
704
-
705
- it 'should evaluate identical version as equal' do
706
- v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => nil},
707
- {:epoch => '0', :version => '1.2.3', :release => nil})
708
- expect(v).to eq(0)
709
- end
710
-
711
- it 'should evaluate identical version but older release as less' do
712
- v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => '1.el5'},
713
- {:epoch => '0', :version => '1.2.3', :release => '2.el5'})
714
- expect(v).to eq(-1)
715
- end
716
-
717
- it 'should evaluate identical version but newer release as greater' do
718
- v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => '3.el5'},
719
- {:epoch => '0', :version => '1.2.3', :release => '2.el5'})
720
- expect(v).to eq(1)
721
- end
722
-
723
- it 'should evaluate a newer epoch as greater' do
724
- v = provider.rpm_compareEVR({:epoch => '1', :version => '1.2.3', :release => '4.5'},
725
- {:epoch => '0', :version => '1.2.3', :release => '4.5'})
726
- expect(v).to eq(1)
727
- end
728
-
729
- # these tests describe PUP-1244 logic yet to be implemented
730
- it 'should evaluate any version as equal to the same version followed by release' do
731
- v = provider.rpm_compareEVR({:epoch => '0', :version => '1.2.3', :release => nil},
732
- {:epoch => '0', :version => '1.2.3', :release => '2.el5'})
733
- expect(v).to eq(0)
734
- end
735
-
736
- # test cases for PUP-682
737
- it 'should evaluate same-length numeric revisions numerically' do
738
- expect(provider.rpm_compareEVR({:epoch => '0', :version => '2.2', :release => '405'},
739
- {:epoch => '0', :version => '2.2', :release => '406'})).to eq(-1)
740
- end
741
- end
742
-
743
- describe 'version segment comparison' do
744
- it 'should treat two nil values as equal' do
745
- v = provider.compare_values(nil, nil)
746
- expect(v).to eq(0)
747
- end
748
-
749
- it 'should treat a nil value as less than a non-nil value' do
750
- v = provider.compare_values(nil, '0')
751
- expect(v).to eq(-1)
752
- end
753
-
754
- it 'should treat a non-nil value as greater than a nil value' do
755
- v = provider.compare_values('0', nil)
756
- expect(v).to eq(1)
757
- end
758
-
759
- it 'should pass two non-nil values on to rpmvercmp' do
760
- allow(provider).to receive(:rpmvercmp).and_return(0)
761
- expect(provider).to receive(:rpmvercmp).with('s1', 's2')
762
- provider.compare_values('s1', 's2')
763
- end
764
- end
765
-
766
-
767
555
  describe 'insync?' do
768
556
  context 'for multiple versions' do
769
557
  let(:is) { '1:1.2.3.4-5.el4; 1:5.6.7.8-5.el4' }
@@ -3,6 +3,17 @@ require 'spec_helper'
3
3
  describe Puppet::Type.type(:package).provider(:yum) do
4
4
  include PuppetSpec::Fixtures
5
5
 
6
+ let(:resource_name) { 'myresource' }
7
+ let(:resource) do
8
+ Puppet::Type.type(:package).new(
9
+ :name => resource_name,
10
+ :ensure => :installed,
11
+ :provider => 'yum'
12
+ )
13
+ end
14
+
15
+ let(:provider) { Puppet::Type.type(:package).provider(:yum).new(resource) }
16
+
6
17
  it_behaves_like 'RHEL package provider', described_class, 'yum'
7
18
 
8
19
  it "should have lower specificity" do
@@ -96,7 +107,7 @@ describe Puppet::Type.type(:package).provider(:yum) do
96
107
  end
97
108
  end
98
109
 
99
- describe 'with install_options' do
110
+ describe 'with install_options' do
100
111
  it 'can parse disable-repo with array of strings' do
101
112
  resource[:install_options] = ['--disable-repo=dev*', '--disable-repo=prod*']
102
113
  expect(provider).to receive(:execute) do | arr|
@@ -235,5 +246,236 @@ describe Puppet::Type.type(:package).provider(:yum) do
235
246
  expect(output).not_to include("Random plugin")
236
247
  end
237
248
  end
249
+
250
+ context "with subscription manager enabled " do
251
+ let(:check_update) { File.read(my_fixture("yum-check-update-subscription-manager.txt")) }
252
+ let(:output) { described_class.parse_updates(check_update) }
253
+
254
+ it "parses correctly formatted entries" do
255
+ expect(output['curl.x86_64']).to eq([{:name => 'curl', :epoch => '0', :version => '7.32.0', :release => '10.fc20', :arch => 'x86_64'}])
256
+ end
257
+ end
258
+ end
259
+
260
+ describe 'insync?' do
261
+ context 'when version is not a valid RPM version' do
262
+ let(:is) { '>===a:123' }
263
+
264
+ before do
265
+ resource[:ensure] = is
266
+ end
267
+
268
+ it 'logs a debug message' do
269
+ expect(Puppet).to receive(:debug).with("Cannot parse #{is} as a RPM version range")
270
+ provider.insync?(is)
271
+ end
272
+ end
273
+
274
+ context 'with valid semantic versions' do
275
+ let(:is) { '1:1.2.3.4-5.el4' }
276
+
277
+ it 'returns true if the current version matches the given semantic version' do
278
+ resource[:ensure] = is
279
+ expect(provider).to be_insync(is)
280
+ end
281
+
282
+ it 'returns false if the current version does not match the given semantic version' do
283
+ resource[:ensure] = '999r'
284
+ expect(provider).not_to be_insync(is)
285
+ end
286
+
287
+ it 'no debug logs if the current version matches the given semantic version' do
288
+ resource[:ensure] = is
289
+ expect(Puppet).not_to receive(:debug)
290
+ provider.insync?(is)
291
+ end
292
+
293
+ it 'returns true if current version matches the greater or equal semantic version in ensure' do
294
+ resource[:ensure] = '<=1:1.2.3.4-5.el4'
295
+ expect(provider).to be_insync(is)
296
+ end
297
+
298
+ it 'returns true if current version matches the lesser semantic version in ensure' do
299
+ resource[:ensure] = '>1:1.0.0'
300
+ expect(provider).to be_insync(is)
301
+ end
302
+
303
+ it 'returns true if current version matches two semantic conditions' do
304
+ resource[:ensure] = '>1:1.1.3.4-5.el4 <1:1.3.3.6-5.el4'
305
+ expect(provider).to be_insync(is)
306
+ end
307
+
308
+ it 'returns false if current version does not match matches two semantic conditions' do
309
+ resource[:ensure] = '<1:1.1.3.4-5.el4 <1:1.3.3.6-5.el4'
310
+ expect(provider).not_to be_insync(is)
311
+ end
312
+ end
313
+ end
314
+
315
+ describe 'install' do
316
+ before do
317
+ resource[:ensure] = ensure_value
318
+ allow(Facter).to receive(:value).with(:operatingsystemmajrelease).and_return('7')
319
+ allow(described_class).to receive(:command).with(:cmd).and_return('/usr/bin/yum')
320
+ allow(provider).to receive(:query).twice.and_return(nil, ensure: '18.3.2')
321
+ allow(provider).to receive(:insync?).with('18.3.2').and_return(true)
322
+ end
323
+
324
+ context 'with version range' do
325
+ before do
326
+ allow(provider).to receive(:available_versions).and_return(available_versions)
327
+ end
328
+
329
+ context 'without epoch' do
330
+ let(:ensure_value) { '>18.1 <19' }
331
+ let(:available_versions) { ['17.5.2', '18.0', 'a:23', '18.3', '18.3.2', '19.0', '3:18.4'] }
332
+
333
+ it 'selects best_version' do
334
+ expect(provider).to receive(:execute).with(
335
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, 'myresource-18.3.2']
336
+ )
337
+ provider.install
338
+ end
339
+
340
+ context 'when comparing with available packages that do not have epoch' do
341
+ let(:ensure_value) { '>18' }
342
+ let(:available_versions) { ['18.3.3', '3:18.3.2'] }
343
+
344
+ it 'treats no epoch as zero' do
345
+ expect(provider).to receive(:execute).with(
346
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, 'myresource-18.3.2']
347
+ )
348
+ provider.install
349
+ end
350
+ end
351
+ end
352
+
353
+ context 'with epoch' do
354
+ let(:ensure_value) { '>18.1 <3:19' }
355
+ let(:available_versions) { ['3:17.5.2', '3:18.0', 'a:23', '18.3.3', '3:18.3.2', '3:19.0', '19.1'] }
356
+
357
+ it 'selects best_version and removes epoch' do
358
+ expect(provider).to receive(:execute).with(
359
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, 'myresource-18.3.2']
360
+ )
361
+ provider.install
362
+ end
363
+ end
364
+
365
+ context 'when no suitable version in range' do
366
+ let(:ensure_value) { '>18.1 <19' }
367
+ let(:available_versions) { ['3:17.5.2', '3:18.0', 'a:23' '18.3', '3:18.3.2', '3:19.0', '19.1'] }
368
+
369
+ it 'uses requested version' do
370
+ expect(provider).to receive(:execute).with(
371
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, "myresource->18.1 <19"]
372
+ )
373
+ provider.install
374
+ end
375
+
376
+ it 'logs a debug message' do
377
+ allow(provider).to receive(:execute).with(
378
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, "myresource->18.1 <19"]
379
+ )
380
+
381
+ expect(Puppet).to receive(:debug).with(
382
+ "No available version for package myresource is included in range >18.1 <19"
383
+ )
384
+ provider.install
385
+ end
386
+ end
387
+ end
388
+
389
+ context 'with fix version' do
390
+ let(:ensure_value) { '1:18.12' }
391
+
392
+ it 'passes the version to yum command' do
393
+ expect(provider).to receive(:execute).with(
394
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, "myresource-1:18.12"]
395
+ )
396
+ provider.install
397
+ end
398
+ end
399
+
400
+ context 'when upgrading' do
401
+ let(:ensure_value) { '>18.1 <19' }
402
+ let(:available_versions) { ['17.5.2', '18.0', 'a:23' '18.3', '18.3.2', '19.0', '3:18.4'] }
403
+
404
+ before do
405
+ allow(provider).to receive(:available_versions).and_return(available_versions)
406
+ allow(provider).to receive(:query).twice
407
+ .and_return({ ensure: '17.0' }, { ensure: '18.3.2' })
408
+ end
409
+
410
+ it 'adds update flag to install command' do
411
+ expect(provider).to receive(:execute).with(
412
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', 'update', 'myresource-18.3.2']
413
+ )
414
+ provider.install
415
+ end
416
+ end
417
+
418
+ context 'when dowgrading' do
419
+ let(:ensure_value) { '>18.1 <19' }
420
+ let(:available_versions) { ['17.5.2', '18.0', 'a:23' '18.3', '18.3.2', '19.0', '3:18.4'] }
421
+
422
+ before do
423
+ allow(provider).to receive(:available_versions).and_return(available_versions)
424
+ allow(provider).to receive(:query).twice
425
+ .and_return({ ensure: '19.0' }, { ensure: '18.3.2' })
426
+ end
427
+
428
+ it 'adds downgrade flag to install command' do
429
+ expect(provider).to receive(:execute).with(
430
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :downgrade, 'myresource-18.3.2']
431
+ )
432
+ provider.install
433
+ end
434
+ end
435
+
436
+ context 'on failure' do
437
+ let(:ensure_value) { '20' }
438
+
439
+ context 'when execute command fails' do
440
+ before do
441
+ allow(provider).to receive(:execute).with(
442
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, "myresource-20"]
443
+ ).and_return('No package myresource-20 available.')
444
+ end
445
+
446
+ it 'raises Puppet::Error' do
447
+ expect { provider.install }.to \
448
+ raise_error(Puppet::Error, 'Could not find package myresource-20')
449
+ end
450
+ end
451
+
452
+ context 'when package is not found' do
453
+ before do
454
+ allow(provider).to receive(:query)
455
+ allow(provider).to receive(:execute).with(
456
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, "myresource-20"]
457
+ )
458
+ end
459
+
460
+ it 'raises Puppet::Error' do
461
+ expect { provider.install }.to \
462
+ raise_error(Puppet::Error, 'Could not find package myresource')
463
+ end
464
+ end
465
+
466
+ context 'when package is not installed' do
467
+ before do
468
+ allow(provider).to receive(:execute).with(
469
+ ['/usr/bin/yum', '-d', '0', '-e', '0', '-y', :install, "myresource-20"]
470
+ )
471
+ allow(provider).to receive(:insync?).and_return(false)
472
+ end
473
+
474
+ it 'raises Puppet::Error' do
475
+ expect { provider.install }.to \
476
+ raise_error(Puppet::Error, 'Failed to update to version 20, got version 18.3.2 instead')
477
+ end
478
+ end
479
+ end
238
480
  end
239
481
  end