puppet 6.14.0 → 6.19.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 (496) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/Gemfile +4 -2
  4. data/Gemfile.lock +36 -34
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  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/agent/locker.rb +0 -7
  11. data/lib/puppet/application/agent.rb +25 -9
  12. data/lib/puppet/application/apply.rb +18 -20
  13. data/lib/puppet/application/device.rb +1 -1
  14. data/lib/puppet/application/doc.rb +1 -1
  15. data/lib/puppet/application/filebucket.rb +5 -14
  16. data/lib/puppet/application/lookup.rb +16 -4
  17. data/lib/puppet/application/plugin.rb +1 -0
  18. data/lib/puppet/application/ssl.rb +3 -3
  19. data/lib/puppet/configurer.rb +68 -24
  20. data/lib/puppet/configurer/downloader.rb +31 -10
  21. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  22. data/lib/puppet/confine.rb +2 -2
  23. data/lib/puppet/confine/any.rb +1 -1
  24. data/lib/puppet/context/trusted_information.rb +14 -8
  25. data/lib/puppet/daemon.rb +13 -27
  26. data/lib/puppet/defaults.rb +141 -41
  27. data/lib/puppet/environments.rb +55 -15
  28. data/lib/puppet/face/catalog.rb +1 -1
  29. data/lib/puppet/face/config.rb +46 -16
  30. data/lib/puppet/face/facts.rb +1 -1
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/node.rb +3 -3
  34. data/lib/puppet/face/node/clean.rb +2 -2
  35. data/lib/puppet/face/plugin.rb +2 -2
  36. data/lib/puppet/face/status.rb +1 -1
  37. data/lib/puppet/feature/base.rb +1 -1
  38. data/lib/puppet/file_bucket/dipper.rb +1 -1
  39. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  40. data/lib/puppet/file_serving/metadata.rb +4 -1
  41. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  42. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  43. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  44. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  45. data/lib/puppet/file_system/file_impl.rb +17 -13
  46. data/lib/puppet/file_system/uniquefile.rb +12 -16
  47. data/lib/puppet/forge.rb +1 -1
  48. data/lib/puppet/forge/cache.rb +1 -1
  49. data/lib/puppet/forge/repository.rb +4 -7
  50. data/lib/puppet/functions/call.rb +1 -1
  51. data/lib/puppet/functions/filter.rb +1 -0
  52. data/lib/puppet/functions/lstrip.rb +4 -4
  53. data/lib/puppet/functions/new.rb +8 -3
  54. data/lib/puppet/functions/reduce.rb +2 -4
  55. data/lib/puppet/functions/reverse_each.rb +1 -1
  56. data/lib/puppet/functions/rstrip.rb +4 -4
  57. data/lib/puppet/functions/step.rb +1 -1
  58. data/lib/puppet/functions/strip.rb +4 -4
  59. data/lib/puppet/gettext/config.rb +5 -5
  60. data/lib/puppet/gettext/module_translations.rb +4 -4
  61. data/lib/puppet/http.rb +3 -0
  62. data/lib/puppet/http/client.rb +215 -60
  63. data/lib/puppet/http/external_client.rb +90 -0
  64. data/lib/puppet/http/redirector.rb +43 -7
  65. data/lib/puppet/http/resolver.rb +43 -3
  66. data/lib/puppet/http/resolver/server_list.rb +66 -24
  67. data/lib/puppet/http/resolver/settings.rb +21 -1
  68. data/lib/puppet/http/resolver/srv.rb +28 -2
  69. data/lib/puppet/http/response.rb +82 -1
  70. data/lib/puppet/http/retry_after_handler.rb +39 -0
  71. data/lib/puppet/http/service.rb +70 -2
  72. data/lib/puppet/http/service/ca.rb +71 -9
  73. data/lib/puppet/http/service/compiler.rb +214 -12
  74. data/lib/puppet/http/service/file_server.rb +106 -5
  75. data/lib/puppet/http/service/puppetserver.rb +39 -0
  76. data/lib/puppet/http/service/report.rb +36 -3
  77. data/lib/puppet/http/session.rb +60 -8
  78. data/lib/puppet/indirector.rb +1 -1
  79. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  80. data/lib/puppet/indirector/catalog/rest.rb +2 -1
  81. data/lib/puppet/indirector/exec.rb +1 -1
  82. data/lib/puppet/indirector/facts/facter.rb +3 -3
  83. data/lib/puppet/indirector/facts/rest.rb +2 -1
  84. data/lib/puppet/indirector/facts/yaml.rb +1 -1
  85. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  86. data/lib/puppet/indirector/file_content/http.rb +5 -0
  87. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  88. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  89. data/lib/puppet/indirector/file_metadata/rest.rb +6 -4
  90. data/lib/puppet/indirector/hiera.rb +4 -0
  91. data/lib/puppet/indirector/indirection.rb +1 -1
  92. data/lib/puppet/indirector/json.rb +1 -1
  93. data/lib/puppet/indirector/msgpack.rb +1 -1
  94. data/lib/puppet/indirector/node/rest.rb +2 -1
  95. data/lib/puppet/indirector/report/processor.rb +2 -2
  96. data/lib/puppet/indirector/report/yaml.rb +23 -0
  97. data/lib/puppet/indirector/request.rb +5 -5
  98. data/lib/puppet/indirector/rest.rb +7 -1
  99. data/lib/puppet/indirector/status/rest.rb +2 -1
  100. data/lib/puppet/indirector/yaml.rb +1 -1
  101. data/lib/puppet/metatype/manager.rb +80 -80
  102. data/lib/puppet/module.rb +1 -2
  103. data/lib/puppet/network/format_support.rb +2 -2
  104. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  105. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  106. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  107. data/lib/puppet/network/http/base_pool.rb +6 -1
  108. data/lib/puppet/network/http/compression.rb +7 -0
  109. data/lib/puppet/network/http/connection.rb +2 -0
  110. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  111. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  112. data/lib/puppet/network/http/pool.rb +2 -4
  113. data/lib/puppet/network/http/route.rb +2 -2
  114. data/lib/puppet/network/http_pool.rb +2 -1
  115. data/lib/puppet/node/environment.rb +22 -5
  116. data/lib/puppet/node/facts.rb +17 -0
  117. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  118. data/lib/puppet/pal/pal_impl.rb +30 -31
  119. data/lib/puppet/parameter.rb +1 -1
  120. data/lib/puppet/parser/ast/leaf.rb +5 -5
  121. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  122. data/lib/puppet/parser/compiler.rb +43 -33
  123. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  124. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  125. data/lib/puppet/parser/environment_compiler.rb +4 -1
  126. data/lib/puppet/parser/functions.rb +18 -9
  127. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  128. data/lib/puppet/parser/functions/filter.rb +1 -0
  129. data/lib/puppet/parser/resource.rb +3 -2
  130. data/lib/puppet/parser/resource/param.rb +6 -0
  131. data/lib/puppet/parser/type_loader.rb +2 -2
  132. data/lib/puppet/pops/adaptable.rb +7 -13
  133. data/lib/puppet/pops/adapters.rb +8 -4
  134. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  135. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  136. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  137. data/lib/puppet/pops/issues.rb +5 -0
  138. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  139. data/lib/puppet/pops/loaders.rb +24 -15
  140. data/lib/puppet/pops/lookup/context.rb +1 -1
  141. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  143. data/lib/puppet/pops/types/iterable.rb +34 -8
  144. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  145. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  146. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  147. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  148. data/lib/puppet/provider/file/windows.rb +1 -1
  149. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  150. data/lib/puppet/provider/package/aix.rb +17 -2
  151. data/lib/puppet/provider/package/apt.rb +98 -1
  152. data/lib/puppet/provider/package/aptitude.rb +1 -1
  153. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  154. data/lib/puppet/provider/package/dpkg.rb +1 -1
  155. data/lib/puppet/provider/package/gem.rb +45 -9
  156. data/lib/puppet/provider/package/pacman.rb +2 -5
  157. data/lib/puppet/provider/package/pip.rb +143 -48
  158. data/lib/puppet/provider/package/pip2.rb +17 -0
  159. data/lib/puppet/provider/package/pip3.rb +0 -2
  160. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  161. data/lib/puppet/provider/package/pkgng.rb +16 -4
  162. data/lib/puppet/provider/package/portage.rb +2 -2
  163. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  164. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  165. data/lib/puppet/provider/package/rpm.rb +6 -213
  166. data/lib/puppet/provider/package/yum.rb +101 -20
  167. data/lib/puppet/provider/package/zypper.rb +62 -1
  168. data/lib/puppet/provider/service/systemd.rb +22 -4
  169. data/lib/puppet/provider/service/windows.rb +23 -7
  170. data/lib/puppet/provider/user/aix.rb +1 -1
  171. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  172. data/lib/puppet/provider/user/useradd.rb +16 -5
  173. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  174. data/lib/puppet/reports/http.rb +15 -9
  175. data/lib/puppet/resource.rb +2 -1
  176. data/lib/puppet/resource/type.rb +10 -1
  177. data/lib/puppet/resource/type_collection.rb +20 -16
  178. data/lib/puppet/rest/route.rb +2 -2
  179. data/lib/puppet/runtime.rb +25 -2
  180. data/lib/puppet/settings.rb +20 -6
  181. data/lib/puppet/ssl.rb +1 -0
  182. data/lib/puppet/ssl/host.rb +4 -4
  183. data/lib/puppet/ssl/oids.rb +1 -0
  184. data/lib/puppet/ssl/ssl_context.rb +2 -2
  185. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  186. data/lib/puppet/ssl/state_machine.rb +79 -37
  187. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  188. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  189. data/lib/puppet/test/test_helper.rb +19 -14
  190. data/lib/puppet/transaction.rb +2 -2
  191. data/lib/puppet/transaction/persistence.rb +1 -1
  192. data/lib/puppet/transaction/report.rb +14 -10
  193. data/lib/puppet/trusted_external.rb +29 -1
  194. data/lib/puppet/type.rb +21 -8
  195. data/lib/puppet/type/file.rb +40 -15
  196. data/lib/puppet/type/file/checksum.rb +4 -4
  197. data/lib/puppet/type/file/source.rb +35 -13
  198. data/lib/puppet/type/filebucket.rb +1 -1
  199. data/lib/puppet/type/notify.rb +2 -2
  200. data/lib/puppet/type/package.rb +41 -3
  201. data/lib/puppet/type/service.rb +59 -8
  202. data/lib/puppet/type/user.rb +19 -29
  203. data/lib/puppet/util.rb +41 -3
  204. data/lib/puppet/util/at_fork.rb +1 -1
  205. data/lib/puppet/util/autoload.rb +13 -25
  206. data/lib/puppet/util/character_encoding.rb +9 -5
  207. data/lib/puppet/util/checksums.rb +19 -4
  208. data/lib/puppet/util/connection.rb +8 -8
  209. data/lib/puppet/util/execution.rb +2 -2
  210. data/lib/puppet/util/fileparsing.rb +2 -2
  211. data/lib/puppet/util/instance_loader.rb +14 -10
  212. data/lib/puppet/util/log/destinations.rb +1 -10
  213. data/lib/puppet/util/package/version/debian.rb +175 -0
  214. data/lib/puppet/util/package/version/gem.rb +15 -0
  215. data/lib/puppet/util/package/version/pip.rb +167 -0
  216. data/lib/puppet/util/package/version/range.rb +53 -0
  217. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  218. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  219. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  220. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  221. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  222. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  223. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  224. data/lib/puppet/util/package/version/rpm.rb +73 -0
  225. data/lib/puppet/util/pidlock.rb +13 -7
  226. data/lib/puppet/util/platform.rb +5 -0
  227. data/lib/puppet/util/provider_features.rb +1 -1
  228. data/lib/puppet/util/reference.rb +1 -1
  229. data/lib/puppet/util/rpm_compare.rb +193 -0
  230. data/lib/puppet/util/run_mode.rb +5 -1
  231. data/lib/puppet/util/windows.rb +1 -0
  232. data/lib/puppet/util/windows/adsi.rb +2 -2
  233. data/lib/puppet/util/windows/api_types.rb +60 -33
  234. data/lib/puppet/util/windows/eventlog.rb +1 -6
  235. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  236. data/lib/puppet/util/windows/principal.rb +8 -6
  237. data/lib/puppet/util/windows/process.rb +15 -14
  238. data/lib/puppet/util/windows/registry.rb +11 -11
  239. data/lib/puppet/util/windows/security.rb +5 -4
  240. data/lib/puppet/util/windows/service.rb +43 -26
  241. data/lib/puppet/util/windows/sid.rb +3 -3
  242. data/lib/puppet/util/windows/user.rb +242 -8
  243. data/lib/puppet/version.rb +1 -1
  244. data/locales/puppet.pot +627 -507
  245. data/man/man5/puppet.conf.5 +93 -20
  246. data/man/man8/puppet-agent.8 +7 -4
  247. data/man/man8/puppet-apply.8 +1 -1
  248. data/man/man8/puppet-catalog.8 +1 -1
  249. data/man/man8/puppet-config.8 +6 -6
  250. data/man/man8/puppet-describe.8 +1 -1
  251. data/man/man8/puppet-device.8 +1 -1
  252. data/man/man8/puppet-doc.8 +1 -1
  253. data/man/man8/puppet-epp.8 +1 -1
  254. data/man/man8/puppet-facts.8 +1 -1
  255. data/man/man8/puppet-filebucket.8 +1 -1
  256. data/man/man8/puppet-generate.8 +1 -1
  257. data/man/man8/puppet-help.8 +6 -3
  258. data/man/man8/puppet-key.8 +1 -1
  259. data/man/man8/puppet-lookup.8 +2 -2
  260. data/man/man8/puppet-man.8 +1 -1
  261. data/man/man8/puppet-module.8 +4 -1
  262. data/man/man8/puppet-node.8 +4 -4
  263. data/man/man8/puppet-parser.8 +1 -1
  264. data/man/man8/puppet-plugin.8 +1 -1
  265. data/man/man8/puppet-report.8 +1 -1
  266. data/man/man8/puppet-resource.8 +1 -1
  267. data/man/man8/puppet-script.8 +1 -1
  268. data/man/man8/puppet-ssl.8 +1 -1
  269. data/man/man8/puppet-status.8 +2 -2
  270. data/man/man8/puppet.8 +2 -2
  271. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  272. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  273. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  274. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  275. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  276. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  277. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  278. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  279. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  280. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  281. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  282. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  283. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  284. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  285. data/spec/integration/application/agent_spec.rb +479 -0
  286. data/spec/integration/application/apply_spec.rb +279 -150
  287. data/spec/integration/application/config_spec.rb +74 -0
  288. data/spec/integration/application/doc_spec.rb +16 -6
  289. data/spec/integration/application/filebucket_spec.rb +239 -0
  290. data/spec/integration/application/help_spec.rb +42 -0
  291. data/spec/integration/application/lookup_spec.rb +13 -0
  292. data/spec/integration/application/module_spec.rb +68 -0
  293. data/spec/integration/application/plugin_spec.rb +123 -0
  294. data/spec/integration/configurer_spec.rb +14 -0
  295. data/spec/integration/data_binding_spec.rb +82 -0
  296. data/spec/integration/defaults_spec.rb +27 -3
  297. data/spec/integration/directory_environments_spec.rb +17 -17
  298. data/spec/integration/http/client_spec.rb +39 -40
  299. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  300. data/spec/integration/indirector/report/yaml.rb +83 -0
  301. data/spec/integration/network/http_pool_spec.rb +84 -19
  302. data/spec/integration/node/environment_spec.rb +15 -0
  303. data/spec/integration/parser/compiler_spec.rb +11 -0
  304. data/spec/integration/type/file_spec.rb +1 -1
  305. data/spec/integration/util/execution_spec.rb +22 -0
  306. data/spec/integration/util/windows/adsi_spec.rb +8 -3
  307. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  308. data/spec/integration/util/windows/process_spec.rb +26 -32
  309. data/spec/integration/util/windows/registry_spec.rb +7 -7
  310. data/spec/integration/util/windows/user_spec.rb +47 -5
  311. data/spec/integration/util_spec.rb +7 -33
  312. data/spec/lib/puppet/test_ca.rb +2 -2
  313. data/spec/lib/puppet_spec/https.rb +16 -7
  314. data/spec/lib/puppet_spec/matchers.rb +0 -80
  315. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  316. data/spec/shared_contexts/https.rb +29 -0
  317. data/spec/shared_contexts/types_setup.rb +2 -0
  318. data/spec/unit/agent_spec.rb +80 -26
  319. data/spec/unit/application/agent_spec.rb +12 -9
  320. data/spec/unit/application/device_spec.rb +2 -2
  321. data/spec/unit/application/doc_spec.rb +2 -2
  322. data/spec/unit/application/face_base_spec.rb +6 -4
  323. data/spec/unit/application/facts_spec.rb +41 -10
  324. data/spec/unit/application/filebucket_spec.rb +22 -2
  325. data/spec/unit/application/man_spec.rb +52 -0
  326. data/spec/unit/application/resource_spec.rb +3 -1
  327. data/spec/unit/application/ssl_spec.rb +15 -2
  328. data/spec/unit/application_spec.rb +9 -4
  329. data/spec/unit/configurer/downloader_spec.rb +10 -0
  330. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  331. data/spec/unit/configurer_spec.rb +87 -38
  332. data/spec/unit/confine_spec.rb +2 -1
  333. data/spec/unit/context/trusted_information_spec.rb +25 -2
  334. data/spec/unit/daemon_spec.rb +5 -64
  335. data/spec/unit/defaults_spec.rb +24 -1
  336. data/spec/unit/environments_spec.rb +107 -32
  337. data/spec/unit/face/config_spec.rb +59 -1
  338. data/spec/unit/face/module/search_spec.rb +17 -0
  339. data/spec/unit/face/node_spec.rb +2 -2
  340. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  341. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  342. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  343. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  344. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  345. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  346. data/spec/unit/file_system_spec.rb +11 -2
  347. data/spec/unit/http/client_spec.rb +173 -59
  348. data/spec/unit/http/external_client_spec.rb +201 -0
  349. data/spec/unit/http/resolver_spec.rb +44 -5
  350. data/spec/unit/http/response_spec.rb +6 -0
  351. data/spec/unit/http/service/ca_spec.rb +27 -5
  352. data/spec/unit/http/service/compiler_spec.rb +186 -9
  353. data/spec/unit/http/service/file_server_spec.rb +37 -6
  354. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  355. data/spec/unit/http/service/report_spec.rb +5 -4
  356. data/spec/unit/http/service_spec.rb +3 -4
  357. data/spec/unit/http/session_spec.rb +48 -12
  358. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  359. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  360. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  361. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  362. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  363. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  364. data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
  365. data/spec/unit/indirector/json_spec.rb +8 -8
  366. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  367. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  368. data/spec/unit/indirector/request_spec.rb +5 -5
  369. data/spec/unit/indirector/rest_spec.rb +14 -1
  370. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  371. data/spec/unit/indirector/yaml_spec.rb +7 -7
  372. data/spec/unit/interface_spec.rb +3 -3
  373. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  374. data/spec/unit/network/format_support_spec.rb +3 -2
  375. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  376. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  377. data/spec/unit/network/http/connection_spec.rb +552 -190
  378. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  379. data/spec/unit/network/http/pool_spec.rb +3 -3
  380. data/spec/unit/network/http_pool_spec.rb +63 -57
  381. data/spec/unit/network/http_spec.rb +1 -1
  382. data/spec/unit/node/environment_spec.rb +33 -0
  383. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  384. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  385. data/spec/unit/parser/scope_spec.rb +1 -1
  386. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  387. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  388. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  389. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  390. data/spec/unit/provider/exec_spec.rb +4 -3
  391. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  392. data/spec/unit/provider/package/aix_spec.rb +29 -0
  393. data/spec/unit/provider/package/apt_spec.rb +107 -0
  394. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  395. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  396. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  397. data/spec/unit/provider/package/gem_spec.rb +40 -0
  398. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  399. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  400. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  401. data/spec/unit/provider/package/pip_spec.rb +68 -19
  402. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  403. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  404. data/spec/unit/provider/package/portage_spec.rb +5 -0
  405. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  406. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  407. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  408. data/spec/unit/provider/package/yum_spec.rb +274 -1
  409. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  410. data/spec/unit/provider/service/base_spec.rb +2 -4
  411. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  412. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  413. data/spec/unit/provider/service/debian_spec.rb +3 -5
  414. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  415. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  416. data/spec/unit/provider/service/init_spec.rb +46 -5
  417. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  418. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  419. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  420. data/spec/unit/provider/service/openwrt_spec.rb +2 -1
  421. data/spec/unit/provider/service/redhat_spec.rb +10 -1
  422. data/spec/unit/provider/service/runit_spec.rb +2 -1
  423. data/spec/unit/provider/service/smf_spec.rb +1 -1
  424. data/spec/unit/provider/service/src_spec.rb +3 -5
  425. data/spec/unit/provider/service/systemd_spec.rb +95 -18
  426. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  427. data/spec/unit/provider/service/windows_spec.rb +50 -14
  428. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  429. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  430. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  431. data/spec/unit/puppet_pal_2pec.rb +11 -0
  432. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  433. data/spec/unit/puppet_spec.rb +33 -0
  434. data/spec/unit/reports/http_spec.rb +70 -52
  435. data/spec/unit/reports/store_spec.rb +17 -13
  436. data/spec/unit/resource_spec.rb +3 -3
  437. data/spec/unit/rest/route_spec.rb +4 -4
  438. data/spec/unit/settings_spec.rb +44 -22
  439. data/spec/unit/ssl/host_spec.rb +4 -2
  440. data/spec/unit/ssl/oids_spec.rb +1 -0
  441. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  442. data/spec/unit/ssl/state_machine_spec.rb +90 -14
  443. data/spec/unit/test/test_helper_spec.rb +17 -0
  444. data/spec/unit/transaction/persistence_spec.rb +15 -0
  445. data/spec/unit/transaction/report_spec.rb +7 -1
  446. data/spec/unit/type/file/source_spec.rb +4 -4
  447. data/spec/unit/type/file_spec.rb +122 -96
  448. data/spec/unit/type/filebucket_spec.rb +1 -1
  449. data/spec/unit/type/service_spec.rb +218 -8
  450. data/spec/unit/type/user_spec.rb +32 -3
  451. data/spec/unit/type_spec.rb +50 -0
  452. data/spec/unit/util/at_fork_spec.rb +2 -2
  453. data/spec/unit/util/autoload_spec.rb +2 -1
  454. data/spec/unit/util/character_encoding_spec.rb +4 -4
  455. data/spec/unit/util/checksums_spec.rb +16 -0
  456. data/spec/unit/util/command_line_spec.rb +11 -6
  457. data/spec/unit/util/log/destinations_spec.rb +1 -29
  458. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  459. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  460. data/spec/unit/util/package/version/range_spec.rb +175 -0
  461. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  462. data/spec/unit/util/pidlock_spec.rb +83 -47
  463. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  464. data/spec/unit/util/run_mode_spec.rb +6 -6
  465. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  466. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  467. data/spec/unit/util/windows/service_spec.rb +4 -4
  468. data/spec/unit/util/windows/sid_spec.rb +2 -2
  469. data/spec/unit/util_spec.rb +3 -3
  470. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  471. data/tasks/generate_cert_fixtures.rake +15 -1
  472. data/tasks/manpages.rake +5 -35
  473. metadata +90 -51
  474. data/spec/integration/faces/config_spec.rb +0 -91
  475. data/spec/integration/faces/documentation_spec.rb +0 -57
  476. data/spec/integration/faces/plugin_spec.rb +0 -63
  477. data/spec/integration/file_bucket/file_spec.rb +0 -50
  478. data/spec/integration/file_serving/content_spec.rb +0 -7
  479. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  480. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  481. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  482. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  483. data/spec/integration/module_tool/forge_spec.rb +0 -64
  484. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  485. data/spec/integration/provider/service/init_spec.rb +0 -48
  486. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  487. data/spec/integration/provider/service/windows_spec.rb +0 -50
  488. data/spec/integration/reference/providers_spec.rb +0 -21
  489. data/spec/integration/reports_spec.rb +0 -13
  490. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  491. data/spec/integration/ssl/host_spec.rb +0 -72
  492. data/spec/integration/ssl/key_spec.rb +0 -99
  493. data/spec/integration/test/test_helper_spec.rb +0 -31
  494. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  495. data/spec/unit/face/man_spec.rb +0 -25
  496. data/spec/unit/man_spec.rb +0 -31
@@ -257,6 +257,26 @@ context Puppet::Type.type(:package).provider(:gem) do
257
257
  resource[:ensure] = '3.6.2'
258
258
  expect(provider).to_not be_insync(is)
259
259
  end
260
+
261
+ it 'returns true for >2, <4' do
262
+ resource[:ensure] = '>2, <4'
263
+ expect(provider).to be_insync(is)
264
+ end
265
+
266
+ it 'returns false for >=4, <5' do
267
+ resource[:ensure] = '>=4, <5'
268
+ expect(provider).to_not be_insync(is)
269
+ end
270
+
271
+ it 'returns true for >2 <4' do
272
+ resource[:ensure] = '>2 <4'
273
+ expect(provider).to be_insync(is)
274
+ end
275
+
276
+ it 'returns false for >=4 <5' do
277
+ resource[:ensure] = '>=4 <5'
278
+ expect(provider).to_not be_insync(is)
279
+ end
260
280
  end
261
281
 
262
282
  context 'for string version' do
@@ -286,6 +306,26 @@ context Puppet::Type.type(:package).provider(:gem) do
286
306
  resource[:ensure] = '3.6.1'
287
307
  expect(provider).to_not be_insync(is)
288
308
  end
309
+
310
+ it 'returns true for >=1.3, <2' do
311
+ resource[:ensure] = '>=1.3, <2'
312
+ expect(provider).to be_insync(is)
313
+ end
314
+
315
+ it 'returns false for >1, <=1.3' do
316
+ resource[:ensure] = '>1, <=1.3'
317
+ expect(provider).to_not be_insync(is)
318
+ end
319
+
320
+ it 'returns true for >=1.3 <2' do
321
+ resource[:ensure] = '>=1.3 <2'
322
+ expect(provider).to be_insync(is)
323
+ end
324
+
325
+ it 'returns false for >1 <=1.3' do
326
+ resource[:ensure] = '>1 <=1.3'
327
+ expect(provider).to_not be_insync(is)
328
+ end
289
329
  end
290
330
 
291
331
  it 'should return false for bad version specifiers' do
@@ -46,6 +46,8 @@ describe Puppet::Type.type(:package).provider(:openbsd) do
46
46
  allow(described_class).to receive(:command).with(:pkginfo).and_return('/bin/pkg_info')
47
47
  allow(described_class).to receive(:command).with(:pkgadd).and_return('/bin/pkg_add')
48
48
  allow(described_class).to receive(:command).with(:pkgdelete).and_return('/bin/pkg_delete')
49
+
50
+ allow(Puppet::FileSystem).to receive(:exist?)
49
51
  end
50
52
 
51
53
  context "#instances" do
@@ -26,14 +26,14 @@ describe Puppet::Type.type(:package).provider(:pacman) do
26
26
  end
27
27
 
28
28
  it "should call pacman to install the right package quietly when yaourt is not installed" do
29
- args = ['--noconfirm', '--needed', '--noprogressbar', '-Sy', resource[:name]]
29
+ args = ['--noconfirm', '--needed', '--noprogressbar', '-S', resource[:name]]
30
30
  expect(provider).to receive(:pacman).at_least(:once).with(*args).and_return('')
31
31
  provider.install
32
32
  end
33
33
 
34
34
  it "should call yaourt to install the right package quietly when yaourt is installed" do
35
35
  allow(described_class).to receive(:yaourt?).and_return(true)
36
- args = ['--noconfirm', '--needed', '--noprogressbar', '-Sy', resource[:name]]
36
+ args = ['--noconfirm', '--needed', '--noprogressbar', '-S', resource[:name]]
37
37
  expect(provider).to receive(:yaourt).at_least(:once).with(*args).and_return('')
38
38
  provider.install
39
39
  end
@@ -68,14 +68,14 @@ describe Puppet::Type.type(:package).provider(:pacman) do
68
68
  end
69
69
 
70
70
  it "should call pacman to install the right package quietly when yaourt is not installed" do
71
- args = ['--noconfirm', '--needed', '--noprogressbar', '-x', '--arg=value', '-Sy', resource[:name]]
71
+ args = ['--noconfirm', '--needed', '--noprogressbar', '-x', '--arg=value', '-S', resource[:name]]
72
72
  expect(provider).to receive(:pacman).at_least(:once).with(*args).and_return('')
73
73
  provider.install
74
74
  end
75
75
 
76
76
  it "should call yaourt to install the right package quietly when yaourt is installed" do
77
77
  expect(described_class).to receive(:yaourt?).and_return(true)
78
- args = ['--noconfirm', '--needed', '--noprogressbar', '-x', '--arg=value', '-Sy', resource[:name]]
78
+ args = ['--noconfirm', '--needed', '--noprogressbar', '-x', '--arg=value', '-S', resource[:name]]
79
79
  expect(provider).to receive(:yaourt).at_least(:once).with(*args).and_return('')
80
80
  provider.install
81
81
  end
@@ -94,7 +94,7 @@ describe Puppet::Type.type(:package).provider(:pacman) do
94
94
  resource[:source] = source
95
95
 
96
96
  expect(executor).to receive(:execute).
97
- with(include("-Sy") & include("--noprogressbar"), no_extra_options).
97
+ with(include("-S") & include("--noprogressbar"), no_extra_options).
98
98
  ordered.
99
99
  and_return("")
100
100
 
@@ -117,7 +117,7 @@ describe Puppet::Type.type(:package).provider(:pacman) do
117
117
 
118
118
  it "should install from the path segment of the URL" do
119
119
  expect(executor).to receive(:execute).
120
- with(include("-Sy") & include("--noprogressbar") & include("--noconfirm"),
120
+ with(include("-S") & include("--noprogressbar") & include("--noconfirm"),
121
121
  no_extra_options).
122
122
  ordered.
123
123
  and_return("")
@@ -348,21 +348,7 @@ EOF
348
348
  end
349
349
 
350
350
  describe "when determining the latest version" do
351
- it "should refresh package list" do
352
- expect(executor).to receive(:execute).
353
- ordered.
354
- with(['/usr/bin/pacman', '-Sy'], no_extra_options)
355
-
356
- expect(executor).to receive(:execute).
357
- ordered.
358
- and_return("")
359
-
360
- provider.latest
361
- end
362
-
363
351
  it "should get query pacman for the latest version" do
364
- expect(executor).to receive(:execute).ordered
365
-
366
352
  expect(executor).to receive(:execute).
367
353
  ordered.
368
354
  with(['/usr/bin/pacman', '-Sp', '--print-format', '%v', resource[:name]], no_extra_options).
@@ -379,7 +365,6 @@ EOF
379
365
 
380
366
  it "should return a virtual group version when resource is a package group" do
381
367
  allow(described_class).to receive(:group?).and_return(true)
382
- expect(executor).to receive(:execute).with(['/usr/bin/pacman', '-Sy'], no_extra_options).ordered
383
368
  expect(executor).to receive(:execute).with(['/usr/bin/pacman', '-Sp', '--print-format', '%n %v', resource[:name]], no_extra_options).ordered.
384
369
  and_return(<<EOF)
385
370
  package2 1.0.1
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Puppet::Type.type(:package).provider(:pip2) do
4
+
5
+ it { is_expected.to be_installable }
6
+ it { is_expected.to be_uninstallable }
7
+ it { is_expected.to be_upgradeable }
8
+ it { is_expected.to be_versionable }
9
+ it { is_expected.to be_install_options }
10
+ it { is_expected.to be_targetable }
11
+
12
+ it "should inherit most things from pip provider" do
13
+ expect(described_class < Puppet::Type.type(:package).provider(:pip))
14
+ end
15
+
16
+ it "should use pip2 command" do
17
+ expect(described_class.cmd).to eq(["pip2"])
18
+ end
19
+
20
+ context 'calculated specificity' do
21
+ context 'when is not defaultfor' do
22
+ subject { described_class.specificity }
23
+ it { is_expected.to eql 1 }
24
+ end
25
+
26
+ context 'when is defaultfor' do
27
+ let(:os) { Facter.value(:operatingsystem) }
28
+ subject do
29
+ described_class.defaultfor(operatingsystem: os)
30
+ described_class.specificity
31
+ end
32
+ it { is_expected.to be > 100 }
33
+ end
34
+ end
35
+
36
+ end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  osfamilies = { 'windows' => ['pip.exe'], 'other' => ['pip', 'pip-python', 'pip2', 'pip-2'] }
4
+ pip_path_with_spaces = 'C:\Program Files (x86)\Python\Scripts\pip.exe'
4
5
 
5
6
  describe Puppet::Type.type(:package).provider(:pip) do
6
7
 
@@ -10,6 +11,7 @@ describe Puppet::Type.type(:package).provider(:pip) do
10
11
  it { is_expected.to be_versionable }
11
12
  it { is_expected.to be_install_options }
12
13
  it { is_expected.to be_targetable }
14
+ it { is_expected.to be_version_ranges }
13
15
 
14
16
  before do
15
17
  @resource = Puppet::Resource.new(:package, "fake_package")
@@ -101,6 +103,16 @@ describe Puppet::Type.type(:package).provider(:pip) do
101
103
  expect(described_class.instances).to eq([])
102
104
  end
103
105
  end
106
+
107
+ context "when pip path location contains spaces" do
108
+ it "should quote the command before doing execpipe" do
109
+ allow(described_class).to receive(:which).and_return(pip_path_with_spaces)
110
+ allow(described_class).to receive(:pip_version).with(pip_path_with_spaces).and_return('8.0.1')
111
+
112
+ expect(described_class).to receive(:execpipe).with(["\"#{pip_path_with_spaces}\"", ["freeze"]])
113
+ described_class.instances
114
+ end
115
+ end
104
116
  end
105
117
 
106
118
  context "query" do
@@ -150,16 +162,27 @@ describe Puppet::Type.type(:package).provider(:pip) do
150
162
  end
151
163
  end
152
164
 
165
+ context "when comparing versions" do
166
+ it "an abnormal version should still be compared (using default implementation) but a debug message should also be printed regarding it" do
167
+ expect(Puppet).to receive(:debug).with("Cannot compare 1.0 and abnormal-version.0.1. abnormal-version.0.1 is not a valid python package version. Please refer to https://www.python.org/dev/peps/pep-0440/. Falling through default comparison mechanism.")
168
+ expect(Puppet::Util::Package).to receive(:versioncmp).with('1.0', 'abnormal-version.0.1')
169
+ expect{ described_class.compare_pip_versions('1.0', 'abnormal-version.0.1') }.not_to raise_error
170
+ end
171
+ end
172
+
153
173
  context "latest" do
174
+ before do
175
+ allow(described_class).to receive(:pip_version).with(pip_path).and_return(pip_version)
176
+ allow(described_class).to receive(:which).with('pip').and_return(pip_path)
177
+ allow(described_class).to receive(:which).with('pip-python').and_return(pip_path)
178
+ allow(described_class).to receive(:which).with('pip.exe').and_return(pip_path)
179
+ allow(described_class).to receive(:provider_command).and_return(pip_path)
180
+ allow(described_class).to receive(:validate_command).with(pip_path)
181
+ end
182
+
154
183
  context "with pip version < 1.5.4" do
155
- before :each do
156
- allow(described_class).to receive(:pip_version).with("/fake/bin/pip").and_return('1.0.1')
157
- allow(described_class).to receive(:which).with('pip').and_return("/fake/bin/pip")
158
- allow(described_class).to receive(:which).with('pip-python').and_return("/fake/bin/pip")
159
- allow(described_class).to receive(:which).with('pip.exe').and_return("/fake/bin/pip")
160
- allow(described_class).to receive(:provider_command).and_return('/fake/bin/pip')
161
- allow(described_class).to receive(:validate_command).with('/fake/bin/pip')
162
- end
184
+ let(:pip_version) { '1.0.1' }
185
+ let(:pip_path) { '/fake/bin/pip' }
163
186
 
164
187
  it "should find a version number for new_pip_package" do
165
188
  p = StringIO.new(
@@ -206,25 +229,43 @@ describe Puppet::Type.type(:package).provider(:pip) do
206
229
  expect(@provider.latest).to eq(nil)
207
230
  end
208
231
 
232
+ it "should handle out-of-order version numbers for real_package" do
233
+ p = StringIO.new(
234
+ <<-EOS
235
+ Downloading/unpacking fake-package
236
+ Using version 2!2.3.4.alpha5.rev6.dev7+abc89 (newest of versions: 1.11, 13.0.3, 1.6, 1!1.2.rev33+123456, 1.9, 1.3.2, 14.0.1, 12.0.7, 13.0.3, 1.7.2, 1.8.4, 1.2+123abc456, 1.6.1, 0.9.2, 1.3, 1.8.3, 12.1.1, 1.1, 1.11.6, 1.2+123456, 1.4.8, 1.6.3, 1!1.0b2.post345.dev456, 1.10.1, 14.0.2, 1.11.3, 14.0.3, 1.4rc1, 1.0b2.post345.dev456, 0.8.4, 1.0, 1!1.0.post456, 12.0.5, 14.0.6, 1.11.5, 1.0rc2, 1.7.1.1, 1.11.4, 13.0.1, 13.1.2, 1.3.3, 0.8.2, 14.0.0, 12.0, 1.8, 1.3.4, 12.0, 1.2, 12.0.6, 0.9.1, 13.1.1, 2!2.3.4.alpha5.rev6.dev7+abc89, 14.0.5, 15.0.2, 15.0.0, 1.4.5, 1.4.3, 13.1.1, 1.11.2, 13.1.2, 1.2+abc123def, 1.3.1, 13.1.0, 12.0.2, 1.11.1, 12.0.1, 12.1.0, 0.9, 1.4.4, 1.2+abc123, 13.0.0, 1.4.9, 1.1.dev1, 12.1.0, 1.7.1, 1.4.2, 14.0.5, 0.8.1, 1.4.6, 0.8.3, 1.11.3, 1.5.1, 1.4.7, 13.0.2, 12.0.7, 1!13.0, 0!13.0, 1.9.1, 1.0.post456.dev34, 1.8.2, 14.0.1, 14.0.0, 1.2.rev33+123456, 14.0.4, 1.6.2, 15.0.1, 13.1.0, 0.8, 1.2+1234.abc, 1.7, 15.0.2, 12.0.5, 13.0.1, 1.8.1, 1.11.6, 15.0.1, 12.0.4, 1.2+123abc, 12.1.1, 13.0.2, 1.11.4, 1.10, 1.2.r32+123456, 14.0.4, 14.0.6, 1.4.1, 1.4, 1.5.2, 12.0.2, 12.0.1, 14.0.3, 14.0.2, 1.11.1, 1.7.1.2, 15.0.0, 12.0.4, 1.6.4, 1.11.2, 1.5, 0.1, 0.10, 0.10.1, 0.10.1.0.1, 1.0.dev456, 1.0a1, 1.0a2.dev456, 1.0a12.dev456, 1.0a12, 1.0b1.dev456, 1.0b2, 1.0b2.post345, 1.0b2-346, 1.0c1.dev456, 1.0c1, 1.0c3, 1.0, 1.0.post456, 1.2+abc, 1!1.0, 1!1.0.post456.dev34)
237
+ Downloading real-package-2!2.3.4.alpha5.rev6.dev7+abc89.tar.gz (544Kb): 544Kb downloaded
238
+ Saved ./foo/real-package-2!2.3.4.alpha5.rev6.dev7+abc89.tar.gz
239
+ Successfully downloaded real-package
240
+ EOS
241
+ )
242
+ expect(Puppet::Util::Execution).to receive(:execpipe).and_yield(p).once
243
+ @resource[:name] = "real_package"
244
+ expect(@provider.latest).to eq('2!2.3.4.alpha5.rev6.dev7+abc89')
245
+ end
246
+
209
247
  it "should use 'install_options' when specified" do
210
248
  expect(Puppet::Util::Execution).to receive(:execpipe).with(array_including([["--index=https://fake.example.com"]])).once
211
249
  @resource[:name] = "fake_package"
212
250
  @resource[:install_options] = ['--index' => 'https://fake.example.com']
213
251
  expect(@provider.latest).to eq(nil)
214
252
  end
253
+
254
+ context "when pip path location contains spaces" do
255
+ let(:pip_path) { pip_path_with_spaces }
256
+
257
+ it "should quote the command before doing execpipe" do
258
+ expect(Puppet::Util::Execution).to receive(:execpipe).with(array_including("\"#{pip_path}\""))
259
+ @provider.latest
260
+ end
261
+ end
215
262
  end
216
263
 
217
264
  context "with pip version >= 1.5.4" do
218
265
  # For Pip 1.5.4 and above, you can get a version list from CLI - which allows for native pip behavior
219
266
  # with regards to custom repositories, proxies and the like
220
- before :each do
221
- allow(described_class).to receive(:pip_version).with("/fake/bin/pip").and_return('1.5.4')
222
- allow(described_class).to receive(:which).with('pip').and_return("/fake/bin/pip")
223
- allow(described_class).to receive(:which).with('pip-python').and_return("/fake/bin/pip")
224
- allow(described_class).to receive(:which).with('pip.exe').and_return("/fake/bin/pip")
225
- allow(described_class).to receive(:provider_command).and_return('/fake/bin/pip')
226
- allow(described_class).to receive(:validate_command).with('/fake/bin/pip')
227
- end
267
+ let(:pip_version) { '1.5.4' }
268
+ let(:pip_path) { '/fake/bin/pip' }
228
269
 
229
270
  it "should find a version number for real_package" do
230
271
  p = StringIO.new(
@@ -257,14 +298,13 @@ describe Puppet::Type.type(:package).provider(:pip) do
257
298
  p = StringIO.new(
258
299
  <<-EOS
259
300
  Collecting real-package==versionplease
260
- Could not find a version that satisfies the requirement real-package==versionplease (from versions: 1.11, 13.0.3, 1.6, 1.9, 1.3.2, 14.0.1, 12.0.7, 13.0.3, 1.7.2, 1.8.4, 1.6.1, 0.9.2, 1.3, 1.8.3, 12.1.1, 1.1, 1.11.6, 1.4.8, 1.6.3, 1.10.1, 14.0.2, 1.11.3, 14.0.3, 1.4rc1, 0.8.4, 1.0, 12.0.5, 14.0.6, 1.11.5, 1.7.1.1, 1.11.4, 13.0.1, 13.1.2, 1.3.3, 0.8.2, 14.0.0, 12.0, 1.8, 1.3.4, 12.0, 1.2, 12.0.6, 0.9.1, 13.1.1, 14.0.5, 15.0.2, 15.0.0, 1.4.5, 1.4.3, 13.1.1, 1.11.2, 13.1.2, 1.3.1, 13.1.0, 12.0.2, 1.11.1, 12.0.1, 12.1.0, 0.9, 1.4.4, 13.0.0, 1.4.9, 12.1.0, 1.7.1, 1.4.2, 14.0.5, 0.8.1, 1.4.6, 0.8.3, 1.11.3, 1.5.1, 1.4.7, 13.0.2, 12.0.7, 13.0.0, 1.9.1, 1.8.2, 14.0.1, 14.0.0, 14.0.4, 1.6.2, 15.0.1, 13.1.0, 0.8, 1.7, 15.0.2, 12.0.5, 13.0.1, 1.8.1, 1.11.6, 15.0.1, 12.0.4, 12.1.1, 13.0.2, 1.11.4, 1.10, 14.0.4, 14.0.6, 1.4.1, 1.4, 1.5.2, 12.0.2, 12.0.1, 14.0.3, 14.0.2, 1.11.1, 1.7.1.2, 15.0.0, 12.0.4, 1.6.4, 1.11.2, 1.5)
301
+ Could not find a version that satisfies the requirement real-package==versionplease (from versions: 1.11, 13.0.3, 1.6, 1!1.2.rev33+123456, 1.9, 1.3.2, 14.0.1, 12.0.7, 13.0.3, 1.7.2, 1.8.4, 1.2+123abc456, 1.6.1, 0.9.2, 1.3, 1.8.3, 12.1.1, 1.1, 1.11.6, 1.2+123456, 1.4.8, 1.6.3, 1!1.0b2.post345.dev456, 1.10.1, 14.0.2, 1.11.3, 14.0.3, 1.4rc1, 1.0b2.post345.dev456, 0.8.4, 1.0, 1!1.0.post456, 12.0.5, 14.0.6, 1.11.5, 1.0rc2, 1.7.1.1, 1.11.4, 13.0.1, 13.1.2, 1.3.3, 0.8.2, 14.0.0, 12.0, 1.8, 1.3.4, 12.0, 1.2, 12.0.6, 0.9.1, 13.1.1, 2!2.3.4.alpha5.rev6.dev7+abc89, 14.0.5, 15.0.2, 15.0.0, 1.4.5, 1.4.3, 13.1.1, 1.11.2, 13.1.2, 1.2+abc123def, 1.3.1, 13.1.0, 12.0.2, 1.11.1, 12.0.1, 12.1.0, 0.9, 1.4.4, 1.2+abc123, 13.0.0, 1.4.9, 1.1.dev1, 12.1.0, 1.7.1, 1.4.2, 14.0.5, 0.8.1, 1.4.6, 0.8.3, 1.11.3, 1.5.1, 1.4.7, 13.0.2, 12.0.7, 1!13.0, 0!13.0, 1.9.1, 1.0.post456.dev34, 1.8.2, 14.0.1, 14.0.0, 1.2.rev33+123456, 14.0.4, 1.6.2, 15.0.1, 13.1.0, 0.8, 1.2+1234.abc, 1.7, 15.0.2, 12.0.5, 13.0.1, 1.8.1, 1.11.6, 15.0.1, 12.0.4, 1.2+123abc, 12.1.1, 13.0.2, 1.11.4, 1.10, 1.2.r32+123456, 14.0.4, 14.0.6, 1.4.1, 1.4, 1.5.2, 12.0.2, 12.0.1, 14.0.3, 14.0.2, 1.11.1, 1.7.1.2, 15.0.0, 12.0.4, 1.6.4, 1.11.2, 1.5, 0.1, 0.10, 0.10.1, 0.10.1.0.1, 1.0.dev456, 1.0a1, 1.0a2.dev456, 1.0a12.dev456, 1.0a12, 1.0b1.dev456, 1.0b2, 1.0b2.post345, 1.0b2-346, 1.0c1.dev456, 1.0c1, 1.0c3, 1.0, 1.0.post456, 1.2+abc, 1!1.0, 1!1.0.post456.dev34)
261
302
  No distributions matching the version for real-package==versionplease
262
303
  EOS
263
304
  )
264
305
  expect(Puppet::Util::Execution).to receive(:execpipe).with(["/fake/bin/pip", "install", "real_package==versionplease"]).and_yield(p).once
265
306
  @resource[:name] = "real_package"
266
- latest = @provider.latest
267
- expect(latest).to eq('15.0.2')
307
+ expect(@provider.latest).to eq('2!2.3.4.alpha5.rev6.dev7+abc89')
268
308
  end
269
309
 
270
310
  it "should use 'install_options' when specified" do
@@ -273,6 +313,15 @@ describe Puppet::Type.type(:package).provider(:pip) do
273
313
  @resource[:install_options] = ['--index' => 'https://fake.example.com']
274
314
  expect(@provider.latest).to eq(nil)
275
315
  end
316
+
317
+ context "when pip path location contains spaces" do
318
+ let(:pip_path) { pip_path_with_spaces }
319
+
320
+ it "should quote the command before doing execpipe" do
321
+ expect(Puppet::Util::Execution).to receive(:execpipe).with(array_including("\"#{pip_path}\""))
322
+ @provider.latest
323
+ end
324
+ end
276
325
  end
277
326
  end
278
327
 
@@ -45,7 +45,7 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
45
45
  it "should call hdiutil to mount and eject the disk image" do
46
46
  allow(Dir).to receive(:entries).and_return([])
47
47
  expect(provider.class).to receive(:hdiutil).with("eject", fake_mountpoint).and_return(0)
48
- expect(provider.class).to receive(:hdiutil).with("mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", '/tmp/foo').and_return('a plist')
48
+ expect(provider.class).to receive(:hdiutil).with("mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", '/tmp/foo').and_return('a plist')
49
49
  expect(Puppet::Util::Plist).to receive(:parse_plist).with('a plist').and_return(fake_hdiutil_plist)
50
50
  provider.install
51
51
  end
@@ -110,6 +110,30 @@ describe Puppet::Type.type(:package).provider(:pkgng) do
110
110
  end
111
111
  resource.provider.install
112
112
  end
113
+
114
+ it "should call pkg with the specified install options string" do
115
+ resource = Puppet::Type.type(:package).new(
116
+ :name => 'curl',
117
+ :provider => :pkgng,
118
+ :install_options => ['--foo', '--bar']
119
+ )
120
+ expect(resource.provider).to receive(:pkg) do |arg|
121
+ expect(arg).to include('--foo', '--bar')
122
+ end
123
+ resource.provider.install
124
+ end
125
+
126
+ it "should call pkg with the specified install options hash" do
127
+ resource = Puppet::Type.type(:package).new(
128
+ :name => 'curl',
129
+ :provider => :pkgng,
130
+ :install_options => ['--foo', { '--bar' => 'baz', '--baz' => 'foo' }]
131
+ )
132
+ expect(resource.provider).to receive(:pkg) do |arg|
133
+ expect(arg).to include('--foo', '--bar=baz', '--baz=foo')
134
+ end
135
+ resource.provider.install
136
+ end
113
137
  end
114
138
 
115
139
  context "#prefetch" do
@@ -177,6 +201,20 @@ describe Puppet::Type.type(:package).provider(:pkgng) do
177
201
 
178
202
  expect(bash_comp_latest_version).to eq('2.1_3')
179
203
  end
204
+
205
+ it "should return nil when the package is orphaned" do
206
+ version_list = File.read(my_fixture('pkg.version'))
207
+ allow(described_class).to receive(:get_version_list).and_return(version_list)
208
+ orphan_latest_version = described_class.get_latest_version('sysutils/orphan')
209
+ expect(orphan_latest_version).to be_nil
210
+ end
211
+
212
+ it "should return nil when the package is broken" do
213
+ version_list = File.read(my_fixture('pkg.version'))
214
+ allow(described_class).to receive(:get_version_list).and_return(version_list)
215
+ broken_latest_version = described_class.get_latest_version('sysutils/broken')
216
+ expect(broken_latest_version).to be_nil
217
+ end
180
218
  end
181
219
 
182
220
  describe "confine" do
@@ -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
@@ -0,0 +1,137 @@
1
+ require 'spec_helper'
2
+
3
+ describe Puppet::Type.type(:package).provider(:puppetserver_gem) do
4
+ let(:resource) do
5
+ Puppet::Type.type(:package).new(
6
+ name: 'myresource',
7
+ ensure: :installed
8
+ )
9
+ end
10
+
11
+ let(:provider) do
12
+ provider = described_class.new
13
+ provider.resource = resource
14
+ provider
15
+ end
16
+
17
+ let(:provider_gem_cmd) { '/opt/puppetlabs/bin/puppetserver' }
18
+
19
+ custom_environment = { HOME: ENV['HOME'] }
20
+
21
+ let(:execute_options) { { failonfail: true, combine: true, custom_environment: custom_environment } }
22
+
23
+ before :each do
24
+ resource.provider = provider
25
+ allow(Puppet::Util).to receive(:which).with(provider_gem_cmd).and_return(provider_gem_cmd)
26
+ end
27
+
28
+ describe "#install" do
29
+ it "uses the path to the gem command" do
30
+ allow(described_class).to receive(:validate_command).with(provider_gem_cmd)
31
+ expect(Puppet::Util::Execution).to receive(:execute).with(be_a(Array), execute_options) { |args| expect(args[0]).to eq(provider_gem_cmd) }.and_return('')
32
+ provider.install
33
+ end
34
+
35
+ it "appends version if given" do
36
+ resource[:ensure] = ['1.2.1']
37
+ expect(described_class).to receive(:puppetservercmd).with(%w{gem install -v 1.2.1 --no-document myresource}).and_return('')
38
+ provider.install
39
+ end
40
+
41
+ context "with install_options" do
42
+ it "does not append the parameter by default" do
43
+ expect(described_class).to receive(:puppetservercmd).with(%w{gem install --no-document myresource}).and_return('')
44
+ provider.install
45
+ end
46
+
47
+ it "allows setting the parameter" do
48
+ resource[:install_options] = [ '--force', {'--bindir' => '/usr/bin' } ]
49
+ expect(described_class).to receive(:puppetservercmd).with(%w{gem install --force --bindir=/usr/bin --no-document myresource}).and_return('')
50
+ provider.install
51
+ end
52
+ end
53
+
54
+ context "with source" do
55
+ it "correctly sets http source" do
56
+ resource[:source] = 'http://rubygems.com'
57
+ expect(described_class).to receive(:puppetservercmd).with(%w{gem install --no-document --source http://rubygems.com myresource}).and_return('')
58
+ provider.install
59
+ end
60
+
61
+ it "correctly sets local file source" do
62
+ resource[:source] = 'paint-2.2.0.gem'
63
+ expect(described_class).to receive(:puppetservercmd).with(%w{gem install --no-document paint-2.2.0.gem}).and_return('')
64
+ provider.install
65
+ end
66
+
67
+ it "correctly sets local file source with URI scheme" do
68
+ resource[:source] = 'file:///root/paint-2.2.0.gem'
69
+ expect(described_class).to receive(:puppetservercmd).with(%w{gem install --no-document /root/paint-2.2.0.gem}).and_return('')
70
+ provider.install
71
+ end
72
+
73
+ it "raises if given a puppet URI scheme" do
74
+ resource[:source] = 'puppet:///paint-2.2.0.gem'
75
+ expect { provider.install }.to raise_error(Puppet::Error, 'puppet:// URLs are not supported as gem sources')
76
+ end
77
+
78
+ it "raises if given an invalid URI" do
79
+ resource[:source] = 'h;ttp://rubygems.com'
80
+ expect { provider.install }.to raise_error(Puppet::Error, /Invalid source '': bad URI\(is not URI\?\)/)
81
+ end
82
+ end
83
+ end
84
+
85
+ describe "#uninstall" do
86
+ it "uses the path to the gem command" do
87
+ allow(described_class).to receive(:validate_command).with(provider_gem_cmd)
88
+ expect(Puppet::Util::Execution).to receive(:execute).with(be_a(Array), execute_options) { |args| expect(args[0]).to eq(provider_gem_cmd) }.and_return('')
89
+ provider.uninstall
90
+ end
91
+
92
+ context "with uninstall_options" do
93
+ it "does not append the parameter by default" do
94
+ expect(described_class).to receive(:puppetservercmd).with(%w{gem uninstall --executables --all myresource}).and_return('')
95
+ provider.uninstall
96
+ end
97
+
98
+ it "allows setting the parameter" do
99
+ resource[:uninstall_options] = [ '--force', {'--bindir' => '/usr/bin' } ]
100
+ expect(described_class).to receive(:puppetservercmd).with(%w{gem uninstall --executables --all myresource --force --bindir=/usr/bin}).and_return('')
101
+ provider.uninstall
102
+ end
103
+ end
104
+ end
105
+
106
+ describe ".gemlist" do
107
+ context "listing installed packages" do
108
+ it "uses the puppet rubygems library to list local gems" do
109
+ expected = { name: 'world_airports', provider: :puppetserver_gem, ensure: ['1.1.3'] }
110
+ expect(described_class).to receive(:execute_rubygems_list_command).with(nil).and_return(File.read(my_fixture('gem-list-local-packages')))
111
+ expect(described_class.gemlist({ local: true })).to include(expected)
112
+ end
113
+ end
114
+
115
+ it "appends the gem source if given" do
116
+ expect(described_class).to receive(:puppetservercmd).with(%w{gem list --remote --source https://rubygems.com}).and_return('')
117
+ described_class.gemlist({ source: 'https://rubygems.com' })
118
+ end
119
+ end
120
+
121
+ context 'calculated specificity' do
122
+ context 'when is not defaultfor' do
123
+ subject { described_class.specificity }
124
+ it { is_expected.to eql 1 }
125
+ end
126
+
127
+ context 'when is defaultfor' do
128
+ let(:os) { Facter.value(:operatingsystem) }
129
+ subject do
130
+ described_class.defaultfor(operatingsystem: os)
131
+ described_class.specificity
132
+ end
133
+ it { is_expected.to be > 100 }
134
+ end
135
+ end
136
+
137
+ end