puppet 6.13.0-x86-mingw32 → 6.18.0-x86-mingw32

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
@@ -43,9 +43,10 @@ describe Puppet::Node::Facts::Facter do
43
43
  Puppet.initialize_settings(['--modulepath', factdir])
44
44
  apply = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => ['--modulepath', factdir, '-e', 'notify { $custom: }']))
45
45
 
46
- expect do
47
- expect { apply.run }.to exit_with(0)
48
- end.to have_printed(Puppet.version)
46
+ expect {
47
+ apply.run
48
+ }.to exit_with(0)
49
+ .and output(/defined 'message' as '#{Puppet.version}'/).to_stdout
49
50
  end
50
51
 
51
52
  it "should resolve external facts" do
@@ -58,9 +59,10 @@ describe Puppet::Node::Facts::Facter do
58
59
  Puppet.initialize_settings(['--pluginfactdest', factdir])
59
60
  apply = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => ['--pluginfactdest', factdir, '-e', 'notify { $foo: }']))
60
61
 
61
- expect do
62
- expect { apply.run }.to exit_with(0)
63
- end.to have_printed('bar')
62
+ expect {
63
+ apply.run
64
+ }.to exit_with(0)
65
+ .and output(/defined 'message' as 'bar'/).to_stdout
64
66
  end
65
67
  end
66
68
 
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ require 'puppet/transaction/report'
4
+ require 'puppet/indirector/report/yaml'
5
+
6
+ describe Puppet::Transaction::Report::Yaml do
7
+ describe '#save' do
8
+ subject(:indirection) { described_class.indirection }
9
+
10
+ let(:request) { described_class.new }
11
+ let(:certname) { 'ziggy' }
12
+ let(:report) do
13
+ report = Puppet::Transaction::Report.new
14
+ report.host = certname
15
+ report
16
+ end
17
+ let(:file) { request.path(:me) }
18
+
19
+ before do
20
+ indirection.terminus_class = :yaml
21
+ end
22
+
23
+ it 'is saves a report' do
24
+ indirection.save(report)
25
+ end
26
+
27
+ it 'saves the instance of the report as YAML to disk' do
28
+ indirection.save(report)
29
+ content = Puppet::Util::Yaml.safe_load_file(
30
+ Puppet[:lastrunreport], [Puppet::Transaction::Report]
31
+ )
32
+ expect(content.host).to eq(certname)
33
+ end
34
+
35
+ it 'allows mode overwrite' do
36
+ Puppet.settings.setting(:lastrunreport).mode = '0644'
37
+ indirection.save(report)
38
+
39
+ if Puppet::Util::Platform.windows?
40
+ require 'puppet/util/windows/security'
41
+ mode = Puppet::Util::Windows::Security.get_mode(file)
42
+ else
43
+ mode = Puppet::FileSystem.stat(file).mode
44
+ end
45
+
46
+ expect(mode & 07777).to eq(0644)
47
+ end
48
+
49
+ context 'when mode is invalid' do
50
+ before do
51
+ Puppet.settings.setting(:lastrunreport).mode = '9999'
52
+ end
53
+
54
+ after do
55
+ Puppet.settings.setting(:lastrunreport).mode = '0644'
56
+ end
57
+
58
+ it 'raises Puppet::DevError ' do
59
+ expect{
60
+ indirection.save(report)
61
+ }.to raise_error(Puppet::DevError, "replace_file mode: 9999 is invalid")
62
+ end
63
+ end
64
+
65
+ context 'when repport is invalid' do
66
+ it 'logs error' do
67
+ expect(Puppet).to receive(:send_log).with(:err, /Could not save yaml ziggy: can't dump anonymous class/)
68
+
69
+ report.configuration_version = Class.new
70
+ indirection.save(report)
71
+ end
72
+ end
73
+
74
+ context 'when report cannot be saved' do
75
+ it 'raises Errno::EISDIR' do
76
+ FileUtils.mkdir_p(file)
77
+ expect {
78
+ indirection.save(report)
79
+ }.to raise_error(Errno::EISDIR, /last_run_report.yaml/)
80
+ end
81
+ end
82
+ end
83
+ end
@@ -24,14 +24,6 @@ describe Puppet::Network::HttpPool, unless: Puppet::Util::Platform.jruby? do
24
24
  let(:server) { PuppetSpec::HTTPSServer.new }
25
25
 
26
26
  context "when calling deprecated HttpPool methods" do
27
- let(:ssl_host) {
28
- # use server's cert/key as the client cert/key
29
- host = Puppet::SSL::Host.new
30
- host.key = Puppet::SSL::Key.from_instance(server.server_key, host.name)
31
- host.certificate = Puppet::SSL::Certificate.from_instance(server.server_cert, host.name)
32
- host
33
- }
34
-
35
27
  before(:each) do
36
28
  ssldir = tmpdir('http_pool')
37
29
  Puppet[:ssldir] = ssldir
@@ -43,16 +35,6 @@ describe Puppet::Network::HttpPool, unless: Puppet::Util::Platform.jruby? do
43
35
  File.write(Puppet[:hostprivkey], server.server_key.to_pem)
44
36
  end
45
37
 
46
- # Can't use `around(:each)` because it will cause ssl_host to be
47
- # created outside of any rspec example, and $confdir won't be set
48
- before(:each) do
49
- Puppet.push_context(ssl_host: ssl_host)
50
- end
51
-
52
- after (:each) do
53
- Puppet.pop_context
54
- end
55
-
56
38
  def connection(host, port)
57
39
  Puppet::Network::HttpPool.http_instance(host, port, use_ssl: true)
58
40
  end
@@ -98,8 +80,26 @@ describe Puppet::Network::HttpPool, unless: Puppet::Util::Platform.jruby? do
98
80
  %r{certificate verify failed.* .self signed certificate in certificate chain for CN=Test CA.})
99
81
  end
100
82
  end
101
- end
102
83
 
84
+ it "doesn't generate a Puppet::SSL::Host deprecation warning" do
85
+ server.start_server do |port|
86
+ http = connection(hostname, port)
87
+ res = http.get('/')
88
+ expect(res.code).to eq('200')
89
+ end
90
+
91
+ expect(@logs).to eq([])
92
+ end
93
+
94
+ it "detects when the server has closed the connection and reconnects" do
95
+ server.start_server do |port|
96
+ http = connection(hostname, port)
97
+
98
+ expect(http.request_get('/')).to be_a(Net::HTTPSuccess)
99
+ expect(http.request_get('/')).to be_a(Net::HTTPSuccess)
100
+ end
101
+ end
102
+ end
103
103
 
104
104
  context "when using single use HTTPS connections" do
105
105
  include_examples 'HTTPS client'
@@ -107,7 +107,7 @@ describe Puppet::Network::HttpPool, unless: Puppet::Util::Platform.jruby? do
107
107
 
108
108
  context "when using persistent HTTPS connections" do
109
109
  around :each do |example|
110
- pool = Puppet::Network::HTTP::Pool.new
110
+ pool = Puppet::Network::HTTP::Pool.new(15)
111
111
  Puppet.override(:http_pool => pool) do
112
112
  example.run
113
113
  end
@@ -116,6 +116,79 @@ describe Puppet::Network::HttpPool, unless: Puppet::Util::Platform.jruby? do
116
116
 
117
117
  include_examples 'HTTPS client'
118
118
  end
119
+
120
+ shared_examples_for "an HttpPool connection" do |klass, legacy_api|
121
+ before :each do
122
+ Puppet::Network::HttpPool.http_client_class = klass
123
+ end
124
+
125
+ it "connects using the scheme, host and port from the http instance preserving the URL path and query" do
126
+ request_line = nil
127
+
128
+ response_proc = -> (req, res) {
129
+ request_line = req.request_line
130
+ }
131
+
132
+ server.start_server(response_proc: response_proc) do |port|
133
+ http = Puppet::Network::HttpPool.http_instance(hostname, port, true)
134
+ path = "http://bogus.example.com:443/foo?q=a"
135
+ http.get(path)
136
+
137
+ if legacy_api
138
+ # The old API uses 'absolute-form' and passes the bogus hostname
139
+ # which isn't the host we connected to.
140
+ expect(request_line).to eq("GET http://bogus.example.com:443/foo?q=a HTTP/1.1\r\n")
141
+ else
142
+ expect(request_line).to eq("GET /foo?q=a HTTP/1.1\r\n")
143
+ end
144
+ end
145
+ end
146
+
147
+ it "requires the caller to URL encode the path and query when using absolute form" do
148
+ request_line = nil
149
+
150
+ response_proc = -> (req, res) {
151
+ request_line = req.request_line
152
+ }
153
+
154
+ server.start_server(response_proc: response_proc) do |port|
155
+ http = Puppet::Network::HttpPool.http_instance(hostname, port, true)
156
+ params = { 'key' => 'a value' }
157
+ encoded_url = "https://#{hostname}:#{port}/foo%20bar?q=#{Puppet::Util.uri_query_encode(params.to_json)}"
158
+ http.get(encoded_url)
159
+
160
+ if legacy_api
161
+ expect(request_line).to eq("GET #{encoded_url} HTTP/1.1\r\n")
162
+ else
163
+ expect(request_line).to eq("GET /foo%20bar?q=%7B%22key%22%3A%22a%20value%22%7D HTTP/1.1\r\n")
164
+ end
165
+ end
166
+ end
167
+
168
+ it "requires the caller to URL encode the path and query when using a path" do
169
+ request_line = nil
170
+
171
+ response_proc = -> (req, res) {
172
+ request_line = req.request_line
173
+ }
174
+
175
+ server.start_server(response_proc: response_proc) do |port|
176
+ http = Puppet::Network::HttpPool.http_instance(hostname, port, true)
177
+ params = { 'key' => 'a value' }
178
+ http.get("/foo%20bar?q=#{Puppet::Util.uri_query_encode(params.to_json)}")
179
+
180
+ expect(request_line).to eq("GET /foo%20bar?q=%7B%22key%22%3A%22a%20value%22%7D HTTP/1.1\r\n")
181
+ end
182
+ end
183
+ end
184
+
185
+ describe Puppet::Network::HTTP::Connection do
186
+ it_behaves_like "an HttpPool connection", described_class, true
187
+ end
188
+
189
+ describe Puppet::Network::HTTP::ConnectionAdapter do
190
+ it_behaves_like "an HttpPool connection", described_class, false
191
+ end
119
192
  end
120
193
 
121
194
  context "when calling HttpPool.connection method" do
@@ -76,6 +76,21 @@ describe Puppet::Node::Environment do
76
76
  expect(mods[0].path).to eq(File.join(base, "dir1", "mod"))
77
77
  end
78
78
 
79
+ it "should not yield a module with the same name as a defined Bolt project" do
80
+ project_path = File.join(tmpfile('project'), 'bolt_project')
81
+ FileUtils.mkdir_p(project_path)
82
+ project = Struct.new("Project", :name, :path, :load_as_module?).new('project', project_path, true)
83
+
84
+ Puppet.override(bolt_project: project) do
85
+ base = tmpfile("base")
86
+ FileUtils.mkdir_p([File.join(base, 'project'), File.join(base, 'other')])
87
+ environment = Puppet::Node::Environment.create(:env, [base])
88
+ mods = environment.modules
89
+ expect(mods.length).to eq(2)
90
+ expect(mods.map(&:path)).to eq([project_path, File.join(base, 'other')])
91
+ end
92
+ end
93
+
79
94
  shared_examples_for "the environment's initial import" do |settings|
80
95
  it "a manifest referring to a directory invokes parsing of all its files in sorted order" do
81
96
  settings.each do |name, value|
@@ -834,6 +834,17 @@ describe Puppet::Parser::Compiler do
834
834
  MANIFEST
835
835
  end.to raise_error(/Foo\[bar\]:\s+parameter 'a' expects a value for key 'd'\s+parameter 'a' unrecognized key 'c'/m)
836
836
  end
837
+
838
+ it 'handles Sensitive type in resource array' do
839
+ catalog = compile_to_catalog(<<-MANIFEST)
840
+ define foo(Sensitive[String] $password) {
841
+ notify{ "${title}": message => "${password}" }
842
+ }
843
+ foo { ['testA', 'testB']: password =>Sensitive('some password') }
844
+ MANIFEST
845
+ expect(catalog).to have_resource("Notify[testA]").with_parameter(:message, 'Sensitive [value redacted]')
846
+ expect(catalog).to have_resource("Notify[testB]").with_parameter(:message, 'Sensitive [value redacted]')
847
+ end
837
848
  end
838
849
 
839
850
  context 'when using typed parameters in class' do
@@ -1160,7 +1160,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1160
1160
  source_prefix = Puppet::Util::Platform.windows? ? '/' : ''
1161
1161
 
1162
1162
  # the URI can be round-tripped through unescape
1163
- expect(URI.unescape(uri_path)).to eq(source_prefix + source)
1163
+ expect(Puppet::Util.uri_unescape(uri_path)).to eq(source_prefix + source)
1164
1164
  # and is properly UTF-8
1165
1165
  expect(uri_path.encoding).to eq (Encoding::UTF_8)
1166
1166
 
@@ -50,6 +50,28 @@ describe Puppet::Util::Execution, unless: Puppet::Util::Platform.jruby? do
50
50
  Puppet::Util::Execution.execute(str, sensitive: true)
51
51
  expect(@logs).to include(an_object_having_attributes(level: :debug, message: "Executing: '[redacted]'"))
52
52
  end
53
+
54
+ it "allows stdout and stderr to share a file" do
55
+ command = "ruby -e '(1..10).each {|i| (i%2==0) ? $stdout.puts(i) : $stderr.puts(i)}'"
56
+
57
+ expect(Puppet::Util::Execution.execute(command, :combine => true).split).to match_array([*'1'..'10'])
58
+ end
59
+
60
+ it "returns output and set $CHILD_STATUS" do
61
+ command = "ruby -e 'puts \"foo\"; exit 42'"
62
+
63
+ output = Puppet::Util::Execution.execute(command, {:failonfail => false})
64
+
65
+ expect(output).to eq("foo\n")
66
+ expect($CHILD_STATUS.exitstatus).to eq(42)
67
+ end
68
+
69
+ it "raises an error if non-zero exit status is returned" do
70
+ command = "ruby -e 'exit 43'"
71
+
72
+ expect { Puppet::Util::Execution.execute(command) }.to raise_error(Puppet::ExecutionFailure, /Execution of '#{command}' returned 43: /)
73
+ expect($CHILD_STATUS.exitstatus).to eq(43)
74
+ end
53
75
  end
54
76
 
55
77
  describe "#execute (non-Windows)", :if => !Puppet::Util::Platform.windows? do
@@ -82,6 +82,9 @@ describe Puppet::Util::Windows::ADSI::Group,
82
82
  it 'should return a list of members resolvable with Puppet::Util::Windows::ADSI::Group.name_sid_hash' do
83
83
  temp_groupname = "g#{SecureRandom.uuid}"
84
84
  temp_username = "u#{SecureRandom.uuid}"[0..12]
85
+ # From https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/password-must-meet-complexity-requirements
86
+ specials = "~!@#$%^&*_-+=`|\(){}[]:;\"'<>,.?/"
87
+ temp_password = "p#{SecureRandom.uuid[0..7]}-#{SecureRandom.uuid.upcase[0..7]}-#{specials[rand(specials.length)]}"
85
88
 
86
89
  # select a virtual account that requires an authority to be able to resolve to SID
87
90
  # the Dhcp service is chosen for no particular reason aside from it's a service available on all Windows versions
@@ -110,6 +113,8 @@ describe Puppet::Util::Windows::ADSI::Group,
110
113
  begin
111
114
  # :SidTypeUser as user on localhost, can be resolved with or without authority prefix
112
115
  user = Puppet::Util::Windows::ADSI::User.create(temp_username)
116
+ # appveyor sometimes requires a password
117
+ user.password = temp_password
113
118
  user.commit()
114
119
  users.push({ :sid => user.sid.sid, :name => Puppet::Util::Windows::ADSI.computer_name + '\\' + temp_username })
115
120
 
@@ -160,7 +165,7 @@ describe Puppet::Util::Windows::ADSI::Group,
160
165
 
161
166
  # unresolvable SID
162
167
  expect(admins.members[1].sid).to eq('S-1-5-21-3661721861-956923663-2119435483-1112')
163
- expect(admins.members[1].account).to eq('S-1-5-21-3661721861-956923663-2119435483-1112 (unresolvable)')
168
+ expect(admins.members[1].account).to eq('S-1-5-21-3661721861-956923663-2119435483-1112')
164
169
  expect(admins.members[1].account_type).to eq(:SidTypeUnknown)
165
170
  end
166
171
 
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dir, :if => Puppet::Util::Platform.windows? do
4
+ it "should always have the PERSONAL constant defined" do
5
+ expect(described_class).to be_const_defined(:PERSONAL)
6
+ end
7
+
8
+ it "should not raise any errors when accessing the PERSONAL constant" do
9
+ expect { described_class::PERSONAL }.not_to raise_error
10
+ end
11
+ end
@@ -33,17 +33,7 @@ describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows
33
33
  end
34
34
 
35
35
  describe "when reading environment variables" do
36
- after :each do
37
- # spec\integration\test\test_helper_spec.rb calls set_environment_strings
38
- # after :all and thus needs access to the real APIs once again
39
- allow(Puppet::Util::Windows::Process).to receive(:GetEnvironmentStringsW).and_call_original
40
- allow(Puppet::Util::Windows::Process).to receive(:FreeEnvironmentStringsW).and_call_original
41
- end
42
-
43
36
  it "will ignore only keys or values with corrupt byte sequences" do
44
- arraydest = []
45
- Puppet::Util::Log.newdestination(Puppet::Test::LogCollector.new(arraydest))
46
-
47
37
  env_vars = {}
48
38
 
49
39
  # Create a UTF-16LE version of the below null separated environment string
@@ -61,9 +51,9 @@ describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows
61
51
  ptr.put_array_of_uchar(0, env_var_block_bytes)
62
52
 
63
53
  # stub the block of memory that the Win32 API would typically return via pointer
64
- expect(Puppet::Util::Windows::Process).to receive(:GetEnvironmentStringsW).and_return(ptr)
54
+ allow(Puppet::Util::Windows::Process).to receive(:GetEnvironmentStringsW).and_return(ptr)
65
55
  # stub out the real API call to free memory, else process crashes
66
- expect(Puppet::Util::Windows::Process).to receive(:FreeEnvironmentStringsW)
56
+ allow(Puppet::Util::Windows::Process).to receive(:FreeEnvironmentStringsW)
67
57
 
68
58
  env_vars = Puppet::Util::Windows::Process.get_environment_strings
69
59
  end
@@ -72,39 +62,43 @@ describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows
72
62
  expect(env_vars).to eq({'a' => 'b', 'c' => 'd', 'f' => 'g'})
73
63
 
74
64
  # and Puppet should emit a warning about it
75
- expect(arraydest.last.level).to eq(:warning)
76
- expect(arraydest.last.message).to eq("Discarding environment variable e=\uFFFD which contains invalid bytes")
65
+ expect(@logs.last.level).to eq(:warning)
66
+ expect(@logs.last.message).to eq("Discarding environment variable e=\uFFFD which contains invalid bytes")
77
67
  end
78
68
  end
79
69
 
80
70
  describe "when setting environment variables" do
81
- it "can properly handle env var values with = in them" do
82
- begin
83
- name = SecureRandom.uuid
84
- value = 'foo=bar'
71
+ let(:name) { SecureRandom.uuid }
85
72
 
86
- Puppet::Util::Windows::Process.set_environment_variable(name, value)
87
-
88
- env = Puppet::Util::Windows::Process.get_environment_strings
89
-
90
- expect(env[name]).to eq(value)
73
+ around :each do |example|
74
+ begin
75
+ example.run
91
76
  ensure
92
77
  Puppet::Util::Windows::Process.set_environment_variable(name, nil)
93
78
  end
94
79
  end
95
80
 
96
- it "can properly handle empty env var values" do
97
- begin
98
- name = SecureRandom.uuid
81
+ it "sets environment variables containing '='" do
82
+ value = 'foo=bar'
83
+ Puppet::Util::Windows::Process.set_environment_variable(name, value)
84
+ env = Puppet::Util::Windows::Process.get_environment_strings
99
85
 
100
- Puppet::Util::Windows::Process.set_environment_variable(name, '')
86
+ expect(env[name]).to eq(value)
87
+ end
101
88
 
102
- env = Puppet::Util::Windows::Process.get_environment_strings
89
+ it "sets environment variables contains spaces" do
90
+ Puppet::Util::Windows::Process.set_environment_variable(name, '')
91
+ env = Puppet::Util::Windows::Process.get_environment_strings
103
92
 
104
- expect(env[name]).to eq('')
105
- ensure
106
- Puppet::Util::Windows::Process.set_environment_variable(name, nil)
107
- end
93
+ expect(env[name]).to eq('')
94
+ end
95
+
96
+ it "sets environment variables containing UTF-8" do
97
+ rune_utf8 = "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7"
98
+ Puppet::Util::Windows::Process.set_environment_variable(name, rune_utf8)
99
+ env = Puppet::Util::Windows::Process.get_environment_strings
100
+
101
+ expect(env[name]).to eq(rune_utf8)
108
102
  end
109
103
  end
110
104
  end