puppet 6.13.0 → 6.18.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 (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
@@ -0,0 +1,175 @@
1
+ require 'spec_helper'
2
+ require 'puppet/util/package/version/range'
3
+
4
+ class IntegerVersion
5
+ class ValidationFailure < ArgumentError; end
6
+ include Comparable
7
+ REGEX_FULL = '(\d+)'.freeze
8
+ REGEX_FULL_RX = /\A#{REGEX_FULL}\Z/.freeze
9
+
10
+ def self.parse(ver)
11
+ match, version = *ver.match(REGEX_FULL_RX)
12
+ raise ValidationFailure, "Unable to parse '#{ver}' as a version identifier" unless match
13
+
14
+ new(version).freeze
15
+ end
16
+
17
+ attr_reader :version
18
+
19
+ def initialize(version)
20
+ @version = version.to_i
21
+ end
22
+
23
+ def <=>(other)
24
+ @version <=> other.version
25
+ end
26
+ end
27
+
28
+ describe Puppet::Util::Package::Version::Range do
29
+ context 'when creating new version range' do
30
+ it 'should raise unless String is passed' do
31
+ expect { Puppet::Util::Package::Version::Range.parse(:abc, IntegerVersion) }.to raise_error(Puppet::Util::Package::Version::Range::ValidationFailure)
32
+ end
33
+ it 'should raise if operator is not implemented' do
34
+ expect { Puppet::Util::Package::Version::Range.parse('=a', IntegerVersion) }.to raise_error(Puppet::Util::Package::Version::Range::ValidationFailure)
35
+ end
36
+ it 'should raise if operator cannot be parsed' do
37
+ expect { Puppet::Util::Package::Version::Range.parse('~=a', IntegerVersion) }.to raise_error(IntegerVersion::ValidationFailure)
38
+ end
39
+ it 'should raise if version cannot be parsed' do
40
+ expect { Puppet::Util::Package::Version::Range.parse('>=a', IntegerVersion) }.to raise_error(IntegerVersion::ValidationFailure)
41
+ end
42
+ end
43
+
44
+ context 'when creating new version range with regular version' do
45
+ it 'it does not include greater version' do
46
+ vr = Puppet::Util::Package::Version::Range.parse('3', IntegerVersion)
47
+ v = IntegerVersion.parse('4')
48
+ expect(vr.include?(v)).to eql(false)
49
+ end
50
+
51
+ it 'it includes specified version' do
52
+ vr = Puppet::Util::Package::Version::Range.parse('3', IntegerVersion)
53
+ v = IntegerVersion.parse('3')
54
+ expect(vr.include?(v)).to eql(true)
55
+ end
56
+
57
+ it 'it does not include lower version' do
58
+ vr = Puppet::Util::Package::Version::Range.parse('3', IntegerVersion)
59
+ v = IntegerVersion.parse('2')
60
+ expect(vr.include?(v)).to eql(false)
61
+ end
62
+ end
63
+
64
+ context 'when creating new version range with greater or equal operator' do
65
+ it 'it includes greater version' do
66
+ vr = Puppet::Util::Package::Version::Range.parse('>=3', IntegerVersion)
67
+ v = IntegerVersion.parse('4')
68
+ expect(vr.include?(v)).to eql(true)
69
+ end
70
+
71
+ it 'it includes specified version' do
72
+ vr = Puppet::Util::Package::Version::Range.parse('>=3', IntegerVersion)
73
+ v = IntegerVersion.parse('3')
74
+ expect(vr.include?(v)).to eql(true)
75
+ end
76
+
77
+ it 'it does not include lower version' do
78
+ vr = Puppet::Util::Package::Version::Range.parse('>=3', IntegerVersion)
79
+ v = IntegerVersion.parse('2')
80
+ expect(vr.include?(v)).to eql(false)
81
+ end
82
+ end
83
+
84
+ context 'when creating new version range with greater operator' do
85
+ it 'it includes greater version' do
86
+ vr = Puppet::Util::Package::Version::Range.parse('>3', IntegerVersion)
87
+ v = IntegerVersion.parse('10')
88
+ expect(vr.include?(v)).to eql(true)
89
+ end
90
+
91
+ it 'it does not include specified version' do
92
+ vr = Puppet::Util::Package::Version::Range.parse('>3', IntegerVersion)
93
+ v = IntegerVersion.parse('3')
94
+ expect(vr.include?(v)).to eql(false)
95
+ end
96
+
97
+ it 'it does not include lower version' do
98
+ vr = Puppet::Util::Package::Version::Range.parse('>3', IntegerVersion)
99
+ v = IntegerVersion.parse('1')
100
+ expect(vr.include?(v)).to eql(false)
101
+ end
102
+ end
103
+
104
+ context 'when creating new version range with lower or equal operator' do
105
+ it 'it does not include greater version' do
106
+ vr = Puppet::Util::Package::Version::Range.parse('<=3', IntegerVersion)
107
+ v = IntegerVersion.parse('5')
108
+ expect(vr.include?(v)).to eql(false)
109
+ end
110
+
111
+ it 'it includes specified version' do
112
+ vr = Puppet::Util::Package::Version::Range.parse('<=3', IntegerVersion)
113
+ v = IntegerVersion.parse('3')
114
+ expect(vr.include?(v)).to eql(true)
115
+ end
116
+
117
+ it 'it includes lower version' do
118
+ vr = Puppet::Util::Package::Version::Range.parse('<=3', IntegerVersion)
119
+ v = IntegerVersion.parse('1')
120
+ expect(vr.include?(v)).to eql(true)
121
+ end
122
+ end
123
+
124
+ context 'when creating new version range with lower operator' do
125
+ it 'it does not include greater version' do
126
+ vr = Puppet::Util::Package::Version::Range.parse('<3', IntegerVersion)
127
+ v = IntegerVersion.parse('8')
128
+ expect(vr.include?(v)).to eql(false)
129
+ end
130
+
131
+ it 'it does not include specified version' do
132
+ vr = Puppet::Util::Package::Version::Range.parse('<3', IntegerVersion)
133
+ v = IntegerVersion.parse('3')
134
+ expect(vr.include?(v)).to eql(false)
135
+ end
136
+
137
+ it 'it includes lower version' do
138
+ vr = Puppet::Util::Package::Version::Range.parse('<3', IntegerVersion)
139
+ v = IntegerVersion.parse('2')
140
+ expect(vr.include?(v)).to eql(true)
141
+ end
142
+ end
143
+
144
+ context 'when creating new version range with interval' do
145
+ it 'it does not include greater version' do
146
+ vr = Puppet::Util::Package::Version::Range.parse('>3 <=5', IntegerVersion)
147
+ v = IntegerVersion.parse('7')
148
+ expect(vr.include?(v)).to eql(false)
149
+ end
150
+
151
+ it 'it includes specified max interval value' do
152
+ vr = Puppet::Util::Package::Version::Range.parse('>3 <=5', IntegerVersion)
153
+ v = IntegerVersion.parse('5')
154
+ expect(vr.include?(v)).to eql(true)
155
+ end
156
+
157
+ it 'it includes in interval version' do
158
+ vr = Puppet::Util::Package::Version::Range.parse('>3 <=5', IntegerVersion)
159
+ v = IntegerVersion.parse('4')
160
+ expect(vr.include?(v)).to eql(true)
161
+ end
162
+
163
+ it 'it does not include min interval value ' do
164
+ vr = Puppet::Util::Package::Version::Range.parse('>3 <=5', IntegerVersion)
165
+ v = IntegerVersion.parse('3')
166
+ expect(vr.include?(v)).to eql(false)
167
+ end
168
+
169
+ it 'it does not include lower value ' do
170
+ vr = Puppet::Util::Package::Version::Range.parse('>3 <=5', IntegerVersion)
171
+ v = IntegerVersion.parse('2')
172
+ expect(vr.include?(v)).to eql(false)
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+ require 'puppet/util/package/version/rpm'
3
+
4
+ describe Puppet::Util::Package::Version::Rpm do
5
+
6
+ context "when parsing an invalid version" do
7
+ it "raises ArgumentError" do
8
+ expect { described_class.parse(:absent)}.to raise_error(ArgumentError)
9
+ end
10
+ end
11
+
12
+ context "when creating new version" do
13
+ it "is parsing basic version" do
14
+ v = described_class.parse('1:2.8.8-1.el6')
15
+ expect([v.epoch, v.version, v.release, v.arch ]).to eq(['1', '2.8.8', '1.el6' , nil])
16
+ end
17
+
18
+ it "is parsing no epoch basic version" do
19
+ v = described_class.parse('2.8.8-1.el6')
20
+ expect([v.epoch, v.version, v.release, v.arch ]).to eq([nil, '2.8.8', '1.el6', nil])
21
+ end
22
+
23
+ it "is parsing no epoch basic short version" do
24
+ v = described_class.parse('7.15-8.fc29')
25
+ expect([v.epoch, v.version, v.release, v.arch ]).to eq([nil, '7.15', '8.fc29', nil])
26
+ end
27
+
28
+ it "is parsing no epoch and no release basic version" do
29
+ v = described_class.parse('2.8.8')
30
+ expect([v.epoch, v.version, v.release, v.arch ]).to eq([nil, '2.8.8', nil, nil])
31
+ end
32
+
33
+ it "is parsing no epoch complex version" do
34
+ v = described_class.parse('1.4-0.24.20120830CVS.fc31')
35
+ expect([v.epoch, v.version, v.release, v.arch ]).to eq([nil, '1.4', '0.24.20120830CVS.fc31', nil])
36
+ end
37
+ end
38
+
39
+ context "when comparing two versions" do
40
+ context 'with invalid version' do
41
+ it 'raises ArgumentError' do
42
+ version = described_class.parse('0:1.5.3-3.el6')
43
+ invalid = 'invalid'
44
+ expect { version < invalid }.to \
45
+ raise_error(ArgumentError, 'Cannot compare, as invalid is not a Rpm Version')
46
+ end
47
+ end
48
+
49
+ context 'with valid versions' do
50
+ it "epoch has precedence" do
51
+ lower = described_class.parse('0:1.5.3-3.el6')
52
+ higher = described_class.parse('1:1.7.0-15.fc29')
53
+ expect(lower).to be < higher
54
+ end
55
+
56
+ it 'handles no epoch as 0 epoch' do
57
+ lower = described_class.parse('1.5.3-3.el6')
58
+ higher = described_class.parse('1:1.7.0-15.fc29')
59
+ expect(lower).to be < higher
60
+ end
61
+
62
+ it "handles equals letters-only versions" do
63
+ first = described_class.parse('abd-def')
64
+ second = described_class.parse('abd-def')
65
+ expect(first).to eq(second)
66
+ end
67
+
68
+ it "shorter version is smaller letters-only versions" do
69
+ lower = described_class.parse('ab')
70
+ higher = described_class.parse('abd')
71
+ expect(lower).to be < higher
72
+ end
73
+
74
+ it "shorter version is smaller even with digits" do
75
+ lower = described_class.parse('1.7')
76
+ higher = described_class.parse('1.7.0')
77
+ expect(lower).to be < higher
78
+ end
79
+
80
+ it "shorter version is smaller when number is less" do
81
+ lower = described_class.parse('1.7.0')
82
+ higher = described_class.parse('1.7.1')
83
+ expect(lower).to be < higher
84
+ end
85
+
86
+ it "shorter release is smaller " do
87
+ lower = described_class.parse('1.7.0-11.fc26')
88
+ higher = described_class.parse('1.7.0-11.fc27')
89
+ expect(lower).to be < higher
90
+ end
91
+
92
+ it "release letters are smaller letters-only" do
93
+ lower = described_class.parse('1.7.0-abc')
94
+ higher = described_class.parse('1.7.0-abd')
95
+ expect(lower).to be < higher
96
+ end
97
+
98
+ it "shorter release is smaller" do
99
+ lower = described_class.parse('1.7.0-11.fc2')
100
+ higher = described_class.parse('1.7.0-11.fc17')
101
+ expect(lower).to be < higher
102
+ end
103
+
104
+ it "handles equal release" do
105
+ first = described_class.parse('1.7.0-11.fc27')
106
+ second = described_class.parse('1.7.0-11.fc27')
107
+ expect(first).to eq(second)
108
+ end
109
+ end
110
+
111
+ context 'when one has no epoch' do
112
+ it 'handles no epoch as zero' do
113
+ version1 = described_class.parse('1:1.2')
114
+ version2 = described_class.parse('1.4')
115
+
116
+ expect(version1).to be > version2
117
+ expect(version2).to be < version1
118
+ end
119
+ end
120
+ end
121
+ end
@@ -9,27 +9,48 @@ describe Puppet::Util::Pidlock, if: !Puppet::Util::Platform.jruby? do
9
9
  before(:each) do
10
10
  @lockfile = tmpfile("lock")
11
11
  @lock = Puppet::Util::Pidlock.new(@lockfile)
12
- @ps_argument_for_current_kernel = @lock.send(:ps_argument_for_current_kernel)
12
+ allow(Facter).to receive(:value).with(:kernel).and_return('Linux')
13
13
  end
14
14
 
15
15
  describe "#ps pid argument on posix", unless: Puppet::Util::Platform.windows? do
16
- before(:each) do
17
- @lock.lock
16
+ let(:other_pid) { Process.pid + 1 }
17
+
18
+ before do
19
+ # another process has locked the pidfile
20
+ File.write(@lockfile, other_pid)
21
+
22
+ # and it's still active
23
+ allow(Process).to receive(:kill).with(0, other_pid)
18
24
  end
19
25
 
20
- it "should allow ps execution" do
21
- expect { Puppet::Util::Execution.execute(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'comm=']) }.not_to raise_error
22
- expect { Puppet::Util::Execution.execute(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'args=']) }.not_to raise_error
26
+ it "should fallback to '-p' when ps execution fails with '-eq' on Linux" do
27
+ allow(Puppet::Util::Execution).to receive(:execute).with(['ps', '-eq', other_pid, '-o', 'comm=']).and_raise(Puppet::ExecutionFailure, 'Execution of command returned 1: error')
28
+
29
+ expect(Puppet::Util::Execution).to receive(:execute).with(['ps', "-p", other_pid, '-o', 'comm=']).and_return('puppet')
30
+ expect(Puppet::Util::Execution).to receive(:execute).with(['ps', "-p", other_pid, '-o', 'args=']).and_return('puppet')
31
+
23
32
  expect(@lock).to be_locked
24
33
  end
25
34
 
26
- it "should fallback to -p when default argument fails ps execution" do
27
- allow(@lock).to receive(:ps_argument_for_current_kernel).and_return("-eq")
28
- allow(Puppet::Util::Execution).to receive(:execute).with(['ps', "-eq", @lock.lock_pid, '-o', 'comm=']).and_raise(Puppet::ExecutionFailure, 'Execution of command returned 1: error')
35
+ shared_examples_for 'a valid ps argument was provided' do |desired_kernel, ps_argument|
36
+ it "should be '#{ps_argument}' when current kernel is #{desired_kernel}" do
37
+ allow(Facter).to receive(:value).with(:kernel).and_return(desired_kernel)
38
+ allow(Puppet::Util::Execution).to receive(:execute).with(['ps', ps_argument, other_pid, '-o', 'comm=']).and_return('ruby')
39
+ allow(Puppet::Util::Execution).to receive(:execute).with(['ps', ps_argument, other_pid, '-o', 'args=']).and_return('puppet')
40
+ expect(@lock).to be_locked
41
+ end
42
+ end
29
43
 
30
- expect(Puppet::Util::Execution).to receive(:execute).with(['ps', "-p", @lock.lock_pid, '-o', 'comm=']).and_return('puppet')
31
- expect(Puppet::Util::Execution).to receive(:execute).with(['ps', "-p", @lock.lock_pid, '-o', 'args=']).and_return('puppet')
32
- expect(@lock).to be_locked
44
+ context "when current kernel is Linux" do
45
+ it_should_behave_like 'a valid ps argument was provided', "Linux", "-eq"
46
+ end
47
+
48
+ context "when current kernel is AIX" do
49
+ it_should_behave_like 'a valid ps argument was provided', "AIX", "-T"
50
+ end
51
+
52
+ context "when current kernel is Darwin" do
53
+ it_should_behave_like 'a valid ps argument was provided', "Darwin", "-p"
33
54
  end
34
55
  end
35
56
 
@@ -44,23 +65,6 @@ describe Puppet::Util::Pidlock, if: !Puppet::Util::Platform.jruby? do
44
65
 
45
66
  it "should become locked" do
46
67
  @lock.lock
47
- if Puppet::Util::Platform.windows?
48
- allow(Puppet::Util::Windows::Process).to receive(:get_process_image_name_by_pid).with(@lock.lock_pid).and_return('C:\Program Files\Puppet Labs\Puppet\puppet\bin\ruby.exe')
49
- else
50
- allow(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'comm=']).and_return('puppet')
51
- allow(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'args=']).and_return('puppet')
52
- end
53
- expect(@lock).to be_locked
54
- end
55
-
56
- it "should become locked if puppet is a gem" do
57
- @lock.lock
58
- if Puppet::Util::Platform.windows?
59
- allow(Puppet::Util::Windows::Process).to receive(:get_process_image_name_by_pid).with(@lock.lock_pid).and_return('C:\tools\ruby25\bin\ruby.exe')
60
- else
61
- expect(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'comm=']).and_return('ruby')
62
- expect(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'args=']).and_return('ruby /root/puppet/.bundle/ruby/2.3.0/bin/puppet agent --no-daemonize -v')
63
- end
64
68
  expect(@lock).to be_locked
65
69
  end
66
70
 
@@ -139,23 +143,6 @@ describe Puppet::Util::Pidlock, if: !Puppet::Util::Platform.jruby? do
139
143
  describe "#locked?" do
140
144
  it "should return true if locked" do
141
145
  @lock.lock
142
- if Puppet::Util::Platform.windows?
143
- allow(Puppet::Util::Windows::Process).to receive(:get_process_image_name_by_pid).with(@lock.lock_pid).and_return('C:\Program Files\Puppet Labs\Puppet\puppet\bin\ruby.exe')
144
- else
145
- allow(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'comm=']).and_return('puppet')
146
- allow(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'args=']).and_return('puppet')
147
- end
148
- expect(@lock).to be_locked
149
- end
150
-
151
- it "should return true if locked when puppet as gem" do
152
- @lock.lock
153
- if Puppet::Util::Platform.windows?
154
- allow(Puppet::Util::Windows::Process).to receive(:get_process_image_name_by_pid).with(@lock.lock_pid).and_return('C:\tools\ruby25\bin\ruby.exe')
155
- else
156
- expect(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'comm=']).and_return('ruby')
157
- expect(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, @lock.lock_pid, '-o', 'args=']).and_return('ruby /root/puppet/.bundle/ruby/2.3.0/bin/puppet agent --no-daemonize -v')
158
- end
159
146
  expect(@lock).to be_locked
160
147
  end
161
148
 
@@ -201,12 +188,6 @@ describe Puppet::Util::Pidlock, if: !Puppet::Util::Platform.jruby? do
201
188
  end
202
189
 
203
190
  it "should replace with new locks" do
204
- if Puppet::Util::Platform.windows?
205
- allow(Puppet::Util::Windows::Process).to receive(:get_process_image_name_by_pid).with(6789).and_return('C:\Program Files\Puppet Labs\Puppet\puppet\bin\ruby.exe')
206
- else
207
- allow(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, 6789, '-o', 'comm=']).and_return('puppet')
208
- allow(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, 6789, '-o', 'args=']).and_return('puppet')
209
- end
210
191
  @lock.lock
211
192
  expect(Puppet::FileSystem.exist?(@lockfile)).to be_truthy
212
193
  expect(@lock.lock_pid).to eq(6789)
@@ -227,6 +208,49 @@ describe Puppet::Util::Pidlock, if: !Puppet::Util::Platform.jruby? do
227
208
  end
228
209
  end
229
210
 
211
+ describe "with no access to open the process on Windows", :if => Puppet.features.microsoft_windows? do
212
+ before(:each) do
213
+ allow(Process).to receive(:pid).and_return(6789)
214
+ @lock.lock
215
+ allow(Process).to receive(:pid).and_return(1234)
216
+ exception = Puppet::Util::Windows::Error.new('Access Denied', 5) # ERROR_ACCESS_DENIED
217
+ allow(Puppet::Util::Windows::Process).to receive(:get_process_image_name_by_pid).with(6789).and_raise(exception)
218
+ allow(Process).to receive(:kill).with(0, 6789)
219
+ allow(Process).to receive(:kill).with(0, 1234)
220
+ end
221
+
222
+ it "should be locked" do
223
+ expect(@lock).to be_locked
224
+ end
225
+
226
+ describe "#lock" do
227
+ it "should not be possible" do
228
+ expect(@lock.lock).to be_falsey
229
+ end
230
+
231
+ it "should not overwrite the lock" do
232
+ @lock.lock
233
+ expect(@lock).not_to be_mine
234
+ end
235
+ end
236
+
237
+ describe "#unlock" do
238
+ it "should not be possible" do
239
+ expect(@lock.unlock).to be_falsey
240
+ end
241
+
242
+ it "should not remove the lock file" do
243
+ @lock.unlock
244
+ expect(Puppet::FileSystem.exist?(@lockfile)).to be_truthy
245
+ end
246
+
247
+ it "should still not be our lock" do
248
+ @lock.unlock
249
+ expect(@lock).not_to be_mine
250
+ end
251
+ end
252
+ end
253
+
230
254
  describe "with another process lock" do
231
255
  before(:each) do
232
256
  # fake our pid to be 1234
@@ -234,8 +258,8 @@ describe Puppet::Util::Pidlock, if: !Puppet::Util::Platform.jruby? do
234
258
  if Puppet::Util::Platform.windows?
235
259
  allow(Puppet::Util::Windows::Process).to receive(:get_process_image_name_by_pid).with(1234).and_return('C:\Program Files\Puppet Labs\Puppet\puppet\bin\ruby.exe')
236
260
  else
237
- allow(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, 1234, '-o', 'comm=']).and_return('puppet')
238
- allow(Puppet::Util::Execution).to receive(:execute).with(['ps', @ps_argument_for_current_kernel, 1234, '-o', 'args=']).and_return('puppet')
261
+ allow(Puppet::Util::Execution).to receive(:execute).with(['ps', '-eq', 1234, '-o', 'comm=']).and_return('puppet')
262
+ allow(Puppet::Util::Execution).to receive(:execute).with(['ps', '-eq', 1234, '-o', 'args=']).and_return('puppet')
239
263
  end
240
264
  # lock the file
241
265
  @lock.lock
@@ -255,6 +279,30 @@ describe Puppet::Util::Pidlock, if: !Puppet::Util::Platform.jruby? do
255
279
  expect(@lock).not_to be_mine
256
280
  end
257
281
 
282
+ it "should be locked if the other process is a puppet gem" do
283
+ File.write(@lockfile, "1234")
284
+
285
+ if Puppet::Util::Platform.windows?
286
+ allow(Puppet::Util::Windows::Process).to receive(:get_process_image_name_by_pid).with(1234).and_return('C:\Program Files\Puppet Labs\Puppet\puppet\bin\ruby.exe')
287
+ else
288
+ allow(Puppet::Util::Execution).to receive(:execute).with(['ps', '-p', 1234, '-o', 'comm=']).and_return('ruby')
289
+ allow(Puppet::Util::Execution).to receive(:execute).with(['ps', '-p', 1234, '-o', 'args=']).and_return('ruby /root/puppet/.bundle/ruby/2.3.0/bin/puppet agent --no-daemonize -v')
290
+ end
291
+ expect(@lock).to be_locked
292
+ end
293
+
294
+ it "should not be mine if the other process is a puppet gem" do
295
+ File.write(@lockfile, "1234")
296
+
297
+ if Puppet::Util::Platform.windows?
298
+ allow(Puppet::Util::Windows::Process).to receive(:get_process_image_name_by_pid).with(1234).and_return('C:\Program Files\Puppet Labs\Puppet\puppet\bin\ruby.exe')
299
+ else
300
+ allow(Puppet::Util::Execution).to receive(:execute).with(['ps', '-p', 1234, '-o', 'comm=']).and_return('ruby')
301
+ allow(Puppet::Util::Execution).to receive(:execute).with(['ps', '-p', 1234, '-o', 'args=']).and_return('ruby /root/puppet/.bundle/ruby/2.3.0/bin/puppet agent --no-daemonize -v')
302
+ end
303
+ expect(@lock).to_not be_mine
304
+ end
305
+
258
306
  describe "#lock" do
259
307
  it "should not be possible" do
260
308
  expect(@lock.lock).to be_falsey