puppet 6.16.0-x86-mingw32 → 6.20.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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +6 -2
  4. data/Gemfile.lock +40 -36
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent.rb +2 -2
  8. data/lib/puppet/agent/locker.rb +0 -7
  9. data/lib/puppet/application.rb +10 -6
  10. data/lib/puppet/application/agent.rb +23 -6
  11. data/lib/puppet/application/apply.rb +20 -21
  12. data/lib/puppet/application/device.rb +1 -0
  13. data/lib/puppet/application/doc.rb +1 -1
  14. data/lib/puppet/application/filebucket.rb +2 -2
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/script.rb +1 -0
  17. data/lib/puppet/application_support.rb +7 -0
  18. data/lib/puppet/configurer.rb +70 -20
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/confine.rb +2 -2
  21. data/lib/puppet/confine/any.rb +1 -1
  22. data/lib/puppet/defaults.rb +113 -46
  23. data/lib/puppet/environments.rb +84 -59
  24. data/lib/puppet/face/catalog.rb +1 -1
  25. data/lib/puppet/face/config.rb +56 -16
  26. data/lib/puppet/face/epp.rb +12 -2
  27. data/lib/puppet/face/facts.rb +60 -0
  28. data/lib/puppet/face/node.rb +3 -3
  29. data/lib/puppet/face/node/clean.rb +2 -2
  30. data/lib/puppet/face/status.rb +1 -1
  31. data/lib/puppet/feature/base.rb +1 -1
  32. data/lib/puppet/ffi/posix.rb +10 -0
  33. data/lib/puppet/ffi/posix/constants.rb +14 -0
  34. data/lib/puppet/ffi/posix/functions.rb +24 -0
  35. data/lib/puppet/file_bucket/dipper.rb +1 -1
  36. data/lib/puppet/file_serving/http_metadata.rb +13 -1
  37. data/lib/puppet/file_serving/metadata.rb +4 -1
  38. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  39. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  40. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  41. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  42. data/lib/puppet/file_system/file_impl.rb +4 -4
  43. data/lib/puppet/file_system/uniquefile.rb +8 -16
  44. data/lib/puppet/forge.rb +1 -1
  45. data/lib/puppet/forge/cache.rb +1 -1
  46. data/lib/puppet/forge/repository.rb +3 -7
  47. data/lib/puppet/functions/epp.rb +1 -0
  48. data/lib/puppet/functions/inline_epp.rb +1 -0
  49. data/lib/puppet/functions/lstrip.rb +4 -4
  50. data/lib/puppet/functions/new.rb +8 -3
  51. data/lib/puppet/functions/reverse_each.rb +1 -1
  52. data/lib/puppet/functions/rstrip.rb +4 -4
  53. data/lib/puppet/functions/step.rb +1 -1
  54. data/lib/puppet/functions/strip.rb +4 -4
  55. data/lib/puppet/gettext/config.rb +5 -5
  56. data/lib/puppet/gettext/module_translations.rb +4 -4
  57. data/lib/puppet/http.rb +1 -0
  58. data/lib/puppet/http/client.rb +6 -1
  59. data/lib/puppet/http/redirector.rb +9 -7
  60. data/lib/puppet/http/resolver.rb +5 -8
  61. data/lib/puppet/http/resolver/server_list.rb +18 -36
  62. data/lib/puppet/http/resolver/settings.rb +4 -4
  63. data/lib/puppet/http/resolver/srv.rb +5 -5
  64. data/lib/puppet/http/response.rb +19 -0
  65. data/lib/puppet/http/service.rb +3 -1
  66. data/lib/puppet/http/service/compiler.rb +1 -1
  67. data/lib/puppet/http/service/file_server.rb +1 -1
  68. data/lib/puppet/http/service/puppetserver.rb +39 -0
  69. data/lib/puppet/http/session.rb +5 -4
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/fact_search.rb +60 -0
  74. data/lib/puppet/indirector/facts/facter.rb +3 -3
  75. data/lib/puppet/indirector/facts/json.rb +27 -0
  76. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  77. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  78. data/lib/puppet/indirector/file_metadata/http.rb +25 -5
  79. data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/json.rb +5 -1
  83. data/lib/puppet/indirector/msgpack.rb +1 -1
  84. data/lib/puppet/indirector/node/json.rb +8 -0
  85. data/lib/puppet/indirector/report/json.rb +34 -0
  86. data/lib/puppet/indirector/report/processor.rb +2 -2
  87. data/lib/puppet/indirector/request.rb +5 -5
  88. data/lib/puppet/indirector/yaml.rb +1 -1
  89. data/lib/puppet/module.rb +1 -2
  90. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  91. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/formats.rb +2 -1
  94. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  95. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  96. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  97. data/lib/puppet/network/http/connection_adapter.rb +6 -4
  98. data/lib/puppet/network/http/route.rb +2 -2
  99. data/lib/puppet/node/environment.rb +12 -5
  100. data/lib/puppet/node/facts.rb +17 -0
  101. data/lib/puppet/pal/pal_impl.rb +90 -13
  102. data/lib/puppet/parameter.rb +1 -1
  103. data/lib/puppet/parser/ast/leaf.rb +7 -6
  104. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  105. data/lib/puppet/parser/compiler.rb +1 -1
  106. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  107. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  108. data/lib/puppet/parser/environment_compiler.rb +4 -1
  109. data/lib/puppet/parser/functions.rb +21 -17
  110. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  111. data/lib/puppet/parser/resource.rb +3 -2
  112. data/lib/puppet/parser/resource/param.rb +6 -0
  113. data/lib/puppet/parser/templatewrapper.rb +1 -1
  114. data/lib/puppet/parser/type_loader.rb +2 -2
  115. data/lib/puppet/pops/adaptable.rb +7 -13
  116. data/lib/puppet/pops/adapters.rb +8 -4
  117. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  118. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  119. data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -8
  120. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  121. data/lib/puppet/pops/issues.rb +5 -0
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  123. data/lib/puppet/pops/loaders.rb +18 -11
  124. data/lib/puppet/pops/lookup/context.rb +1 -1
  125. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  126. data/lib/puppet/pops/model/ast_transformer.rb +1 -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/types/p_meta_type.rb +1 -1
  130. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  131. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  132. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  133. data/lib/puppet/provider/file/windows.rb +1 -1
  134. data/lib/puppet/provider/package/apt.rb +38 -0
  135. data/lib/puppet/provider/package/aptitude.rb +1 -1
  136. data/lib/puppet/provider/package/dpkg.rb +1 -1
  137. data/lib/puppet/provider/package/gem.rb +4 -2
  138. data/lib/puppet/provider/package/pip2.rb +17 -0
  139. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  140. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  141. data/lib/puppet/provider/package/yum.rb +2 -1
  142. data/lib/puppet/provider/package/zypper.rb +3 -0
  143. data/lib/puppet/provider/service/windows.rb +23 -7
  144. data/lib/puppet/provider/user/aix.rb +3 -3
  145. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  146. data/lib/puppet/provider/user/useradd.rb +11 -4
  147. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  148. data/lib/puppet/reference/configuration.rb +6 -5
  149. data/lib/puppet/reports/http.rb +2 -0
  150. data/lib/puppet/resource.rb +2 -1
  151. data/lib/puppet/resource/type.rb +10 -1
  152. data/lib/puppet/rest/route.rb +2 -2
  153. data/lib/puppet/settings.rb +63 -21
  154. data/lib/puppet/settings/alias_setting.rb +37 -0
  155. data/lib/puppet/settings/base_setting.rb +26 -2
  156. data/lib/puppet/ssl/ssl_context.rb +2 -2
  157. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  158. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  159. data/lib/puppet/test/test_helper.rb +18 -13
  160. data/lib/puppet/transaction.rb +2 -2
  161. data/lib/puppet/transaction/persistence.rb +1 -1
  162. data/lib/puppet/transaction/report.rb +12 -8
  163. data/lib/puppet/trusted_external.rb +29 -1
  164. data/lib/puppet/type.rb +15 -7
  165. data/lib/puppet/type/file.rb +40 -15
  166. data/lib/puppet/type/file/checksum.rb +4 -4
  167. data/lib/puppet/type/file/source.rb +32 -12
  168. data/lib/puppet/type/filebucket.rb +1 -1
  169. data/lib/puppet/type/notify.rb +2 -2
  170. data/lib/puppet/type/service.rb +53 -0
  171. data/lib/puppet/type/user.rb +18 -3
  172. data/lib/puppet/util.rb +41 -3
  173. data/lib/puppet/util/autoload.rb +10 -15
  174. data/lib/puppet/util/character_encoding.rb +9 -5
  175. data/lib/puppet/util/checksums.rb +19 -4
  176. data/lib/puppet/util/connection.rb +8 -8
  177. data/lib/puppet/util/execution.rb +2 -2
  178. data/lib/puppet/util/fact_dif.rb +62 -0
  179. data/lib/puppet/util/fileparsing.rb +2 -2
  180. data/lib/puppet/util/posix.rb +54 -5
  181. data/lib/puppet/util/provider_features.rb +1 -1
  182. data/lib/puppet/util/reference.rb +1 -1
  183. data/lib/puppet/util/rubygems.rb +5 -1
  184. data/lib/puppet/util/run_mode.rb +5 -1
  185. data/lib/puppet/util/windows.rb +1 -0
  186. data/lib/puppet/util/windows/api_types.rb +60 -33
  187. data/lib/puppet/util/windows/eventlog.rb +1 -6
  188. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  189. data/lib/puppet/util/windows/principal.rb +8 -6
  190. data/lib/puppet/util/windows/registry.rb +11 -11
  191. data/lib/puppet/util/windows/security.rb +4 -4
  192. data/lib/puppet/util/windows/service.rb +43 -26
  193. data/lib/puppet/util/windows/user.rb +242 -8
  194. data/lib/puppet/version.rb +1 -1
  195. data/locales/puppet.pot +501 -443
  196. data/man/man5/puppet.conf.5 +70 -24
  197. data/man/man8/puppet-agent.8 +8 -5
  198. data/man/man8/puppet-apply.8 +2 -2
  199. data/man/man8/puppet-catalog.8 +1 -1
  200. data/man/man8/puppet-config.8 +6 -6
  201. data/man/man8/puppet-describe.8 +1 -1
  202. data/man/man8/puppet-device.8 +2 -2
  203. data/man/man8/puppet-doc.8 +1 -1
  204. data/man/man8/puppet-epp.8 +1 -1
  205. data/man/man8/puppet-facts.8 +32 -1
  206. data/man/man8/puppet-filebucket.8 +3 -3
  207. data/man/man8/puppet-generate.8 +1 -1
  208. data/man/man8/puppet-help.8 +1 -1
  209. data/man/man8/puppet-key.8 +1 -1
  210. data/man/man8/puppet-lookup.8 +2 -2
  211. data/man/man8/puppet-man.8 +1 -1
  212. data/man/man8/puppet-module.8 +1 -1
  213. data/man/man8/puppet-node.8 +7 -4
  214. data/man/man8/puppet-parser.8 +1 -1
  215. data/man/man8/puppet-plugin.8 +1 -1
  216. data/man/man8/puppet-report.8 +4 -1
  217. data/man/man8/puppet-resource.8 +1 -1
  218. data/man/man8/puppet-script.8 +2 -2
  219. data/man/man8/puppet-ssl.8 +1 -1
  220. data/man/man8/puppet-status.8 +2 -2
  221. data/man/man8/puppet.8 +2 -2
  222. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  223. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  224. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  225. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  226. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  227. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  228. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  229. data/spec/integration/application/agent_spec.rb +263 -54
  230. data/spec/integration/application/apply_spec.rb +168 -149
  231. data/spec/integration/application/doc_spec.rb +16 -6
  232. data/spec/integration/application/filebucket_spec.rb +70 -21
  233. data/spec/integration/application/help_spec.rb +42 -0
  234. data/spec/integration/application/lookup_spec.rb +13 -0
  235. data/spec/integration/application/module_spec.rb +68 -0
  236. data/spec/integration/application/plugin_spec.rb +53 -3
  237. data/spec/integration/configurer_spec.rb +14 -0
  238. data/spec/integration/data_binding_spec.rb +82 -0
  239. data/spec/integration/defaults_spec.rb +20 -3
  240. data/spec/integration/directory_environments_spec.rb +17 -17
  241. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  242. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  243. data/spec/integration/network/http_pool_spec.rb +26 -9
  244. data/spec/integration/node/environment_spec.rb +1 -1
  245. data/spec/integration/parser/compiler_spec.rb +11 -0
  246. data/spec/integration/resource/type_collection_spec.rb +2 -6
  247. data/spec/integration/transaction_spec.rb +4 -9
  248. data/spec/integration/type/file_spec.rb +1 -1
  249. data/spec/integration/util/execution_spec.rb +22 -0
  250. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  251. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  252. data/spec/integration/util/windows/process_spec.rb +26 -32
  253. data/spec/integration/util/windows/registry_spec.rb +7 -17
  254. data/spec/integration/util/windows/user_spec.rb +47 -5
  255. data/spec/integration/util_spec.rb +7 -33
  256. data/spec/lib/puppet_spec/matchers.rb +0 -80
  257. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  258. data/spec/lib/puppet_spec/settings.rb +6 -1
  259. data/spec/shared_contexts/types_setup.rb +2 -0
  260. data/spec/spec_helper.rb +1 -4
  261. data/spec/unit/agent_spec.rb +8 -6
  262. data/spec/unit/application/agent_spec.rb +3 -5
  263. data/spec/unit/application/config_spec.rb +224 -4
  264. data/spec/unit/application/doc_spec.rb +2 -2
  265. data/spec/unit/application/face_base_spec.rb +6 -4
  266. data/spec/unit/application/facts_spec.rb +41 -10
  267. data/spec/unit/application/filebucket_spec.rb +0 -2
  268. data/spec/unit/application/man_spec.rb +52 -0
  269. data/spec/unit/application/resource_spec.rb +3 -1
  270. data/spec/unit/application/ssl_spec.rb +15 -2
  271. data/spec/unit/application_spec.rb +60 -13
  272. data/spec/unit/configurer/downloader_spec.rb +10 -0
  273. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  274. data/spec/unit/configurer_spec.rb +86 -37
  275. data/spec/unit/confine/feature_spec.rb +1 -1
  276. data/spec/unit/confine_spec.rb +10 -3
  277. data/spec/unit/context/trusted_information_spec.rb +10 -4
  278. data/spec/unit/defaults_spec.rb +20 -1
  279. data/spec/unit/environments_spec.rb +176 -32
  280. data/spec/unit/face/config_spec.rb +65 -12
  281. data/spec/unit/face/node_spec.rb +2 -13
  282. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  283. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  284. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  285. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  286. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  287. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  288. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  289. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  290. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  291. data/spec/unit/file_system_spec.rb +1 -2
  292. data/spec/unit/forge/module_release_spec.rb +2 -7
  293. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  294. data/spec/unit/http/client_spec.rb +64 -9
  295. data/spec/unit/http/resolver_spec.rb +24 -5
  296. data/spec/unit/http/response_spec.rb +6 -0
  297. data/spec/unit/http/service/ca_spec.rb +2 -3
  298. data/spec/unit/http/service/compiler_spec.rb +51 -3
  299. data/spec/unit/http/service/file_server_spec.rb +2 -3
  300. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  301. data/spec/unit/http/service/report_spec.rb +2 -3
  302. data/spec/unit/http/service_spec.rb +1 -2
  303. data/spec/unit/http/session_spec.rb +8 -21
  304. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  305. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  306. data/spec/unit/indirector/face_spec.rb +0 -1
  307. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  308. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  309. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  310. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  311. data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
  312. data/spec/unit/indirector/indirection_spec.rb +8 -12
  313. data/spec/unit/indirector/json_spec.rb +8 -8
  314. data/spec/unit/indirector/key/file_spec.rb +0 -1
  315. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  316. data/spec/unit/indirector/node/json_spec.rb +33 -0
  317. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  318. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  319. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  320. data/spec/unit/indirector/request_spec.rb +5 -5
  321. data/spec/unit/indirector/rest_spec.rb +1 -1
  322. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  323. data/spec/unit/indirector/yaml_spec.rb +7 -7
  324. data/spec/unit/indirector_spec.rb +2 -2
  325. data/spec/unit/interface_spec.rb +3 -3
  326. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  327. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  328. data/spec/unit/network/authconfig_spec.rb +0 -3
  329. data/spec/unit/network/format_support_spec.rb +3 -2
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -10
  331. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  332. data/spec/unit/network/http/connection_spec.rb +42 -32
  333. data/spec/unit/network/http/handler_spec.rb +0 -5
  334. data/spec/unit/node/environment_spec.rb +18 -1
  335. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  336. data/spec/unit/parser/compiler_spec.rb +3 -19
  337. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  338. data/spec/unit/parser/resource_spec.rb +14 -8
  339. data/spec/unit/parser/scope_spec.rb +1 -1
  340. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  341. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  342. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  344. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  345. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  346. data/spec/unit/property_spec.rb +1 -0
  347. data/spec/unit/provider/exec_spec.rb +4 -3
  348. data/spec/unit/provider/nameservice_spec.rb +66 -65
  349. data/spec/unit/provider/package/apt_spec.rb +76 -3
  350. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  351. data/spec/unit/provider/package/base_spec.rb +6 -5
  352. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  353. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  354. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  355. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  356. data/spec/unit/provider/package/pip_spec.rb +6 -11
  357. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  358. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  359. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  360. data/spec/unit/provider/package/yum_spec.rb +31 -0
  361. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  362. data/spec/unit/provider/service/base_spec.rb +2 -4
  363. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  364. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  365. data/spec/unit/provider/service/debian_spec.rb +3 -5
  366. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  367. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  368. data/spec/unit/provider/service/init_spec.rb +45 -5
  369. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  370. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  371. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  372. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  373. data/spec/unit/provider/service/runit_spec.rb +2 -1
  374. data/spec/unit/provider/service/smf_spec.rb +1 -1
  375. data/spec/unit/provider/service/src_spec.rb +3 -5
  376. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  377. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  378. data/spec/unit/provider/service/windows_spec.rb +50 -14
  379. data/spec/unit/provider/user/aix_spec.rb +5 -0
  380. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  381. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  382. data/spec/unit/provider/user/pw_spec.rb +2 -0
  383. data/spec/unit/provider/user/useradd_spec.rb +23 -16
  384. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  385. data/spec/unit/provider_spec.rb +8 -10
  386. data/spec/unit/puppet_pal_2pec.rb +40 -0
  387. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  388. data/spec/unit/reports/store_spec.rb +17 -13
  389. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  390. data/spec/unit/resource/type_spec.rb +1 -1
  391. data/spec/unit/resource_spec.rb +14 -13
  392. data/spec/unit/rest/route_spec.rb +4 -4
  393. data/spec/unit/settings_spec.rb +576 -239
  394. data/spec/unit/ssl/base_spec.rb +0 -1
  395. data/spec/unit/ssl/host_spec.rb +0 -5
  396. data/spec/unit/ssl/ssl_provider_spec.rb +82 -50
  397. data/spec/unit/test/test_helper_spec.rb +17 -0
  398. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  399. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  400. data/spec/unit/transaction/persistence_spec.rb +15 -0
  401. data/spec/unit/transaction/report_spec.rb +3 -1
  402. data/spec/unit/transaction_spec.rb +13 -4
  403. data/spec/unit/type/file/content_spec.rb +0 -1
  404. data/spec/unit/type/file/selinux_spec.rb +0 -2
  405. data/spec/unit/type/file/source_spec.rb +4 -4
  406. data/spec/unit/type/file_spec.rb +122 -102
  407. data/spec/unit/type/filebucket_spec.rb +1 -1
  408. data/spec/unit/type/group_spec.rb +13 -6
  409. data/spec/unit/type/resources_spec.rb +7 -7
  410. data/spec/unit/type/service_spec.rb +210 -1
  411. data/spec/unit/type/tidy_spec.rb +0 -1
  412. data/spec/unit/type/user_spec.rb +31 -2
  413. data/spec/unit/type_spec.rb +52 -2
  414. data/spec/unit/util/at_fork_spec.rb +2 -2
  415. data/spec/unit/util/autoload_spec.rb +5 -1
  416. data/spec/unit/util/backups_spec.rb +1 -2
  417. data/spec/unit/util/character_encoding_spec.rb +4 -4
  418. data/spec/unit/util/checksums_spec.rb +16 -0
  419. data/spec/unit/util/command_line_spec.rb +11 -6
  420. data/spec/unit/util/execution_spec.rb +15 -11
  421. data/spec/unit/util/inifile_spec.rb +6 -14
  422. data/spec/unit/util/log_spec.rb +8 -7
  423. data/spec/unit/util/logging_spec.rb +3 -3
  424. data/spec/unit/util/posix_spec.rb +363 -15
  425. data/spec/unit/util/rubygems_spec.rb +2 -2
  426. data/spec/unit/util/run_mode_spec.rb +6 -6
  427. data/spec/unit/util/selinux_spec.rb +76 -52
  428. data/spec/unit/util/storage_spec.rb +3 -1
  429. data/spec/unit/util/suidmanager_spec.rb +44 -41
  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_spec.rb +16 -9
  433. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  434. metadata +52 -53
  435. data/spec/integration/faces/config_spec.rb +0 -91
  436. data/spec/integration/faces/documentation_spec.rb +0 -57
  437. data/spec/integration/file_bucket/file_spec.rb +0 -50
  438. data/spec/integration/file_serving/content_spec.rb +0 -7
  439. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  440. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  441. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  442. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  443. data/spec/integration/module_tool/forge_spec.rb +0 -51
  444. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  445. data/spec/integration/provider/service/init_spec.rb +0 -48
  446. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  447. data/spec/integration/provider/service/windows_spec.rb +0 -50
  448. data/spec/integration/reference/providers_spec.rb +0 -21
  449. data/spec/integration/reports_spec.rb +0 -13
  450. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  451. data/spec/integration/ssl/host_spec.rb +0 -72
  452. data/spec/integration/ssl/key_spec.rb +0 -99
  453. data/spec/integration/test/test_helper_spec.rb +0 -31
  454. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  455. data/spec/unit/face/catalog_spec.rb +0 -6
  456. data/spec/unit/face/man_spec.rb +0 -25
  457. data/spec/unit/face/module_spec.rb +0 -3
  458. data/spec/unit/man_spec.rb +0 -31
@@ -23,6 +23,19 @@ describe "Puppet defaults" do
23
23
  end
24
24
  end
25
25
 
26
+ describe "when setting the :masterport" do
27
+ it "should also set :serverport to the same value" do
28
+ Puppet.settings[:masterport] = 3939
29
+ expect(Puppet.settings[:serverport]).to eq(3939)
30
+ end
31
+
32
+ it "should not overwrite :serverport if explicitly set" do
33
+ Puppet.settings[:serverport] = 9000
34
+ Puppet.settings[:masterport] = 9001
35
+ expect(Puppet.settings[:serverport]).to eq(9000)
36
+ end
37
+ end
38
+
26
39
  describe "when setting the :factpath" do
27
40
  it "should add the :factpath to Facter's search paths" do
28
41
  expect(Facter).to receive(:search).with("/my/fact/path")
@@ -130,8 +143,7 @@ describe "Puppet defaults" do
130
143
  Puppet::Util.withenv( {"PATH" => path }, :windows) do
131
144
  Puppet.settings[:path] = "none" # this causes it to ignore the setting
132
145
 
133
- envhash = Puppet::Util::Windows::Process.get_environment_strings
134
- expect(envhash['Path']).to eq(path)
146
+ expect(Puppet::Util.get_env('Path')).to eq(path)
135
147
  end
136
148
  end
137
149
  end
@@ -150,13 +162,18 @@ describe "Puppet defaults" do
150
162
  expect(Puppet.settings[:report_server]).to eq("server")
151
163
  end
152
164
 
165
+ it "should use the default serverport value when report port is unspecified" do
166
+ Puppet.settings[:serverport] = "1234"
167
+ expect(Puppet.settings[:report_port]).to eq("1234")
168
+ end
169
+
153
170
  it "should use the default masterport value when report port is unspecified" do
154
171
  Puppet.settings[:masterport] = "1234"
155
172
  expect(Puppet.settings[:report_port]).to eq("1234")
156
173
  end
157
174
 
158
175
  it "should use report_port when set" do
159
- Puppet.settings[:masterport] = "1234"
176
+ Puppet.settings[:serverport] = "1234"
160
177
  Puppet.settings[:report_port] = "5678"
161
178
  expect(Puppet.settings[:report_port]).to eq("5678")
162
179
  end
@@ -2,11 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe "directory environments" do
4
4
  let(:args) { ['--configprint', 'modulepath', '--environment', 'direnv'] }
5
- let(:puppet) do
6
- app = Puppet::Application[:apply]
7
- allow(app).to receive(:command_line).and_return(double('command_line', :args => []))
8
- app
9
- end
5
+ let(:puppet) { Puppet::Application[:apply] }
10
6
 
11
7
  context "with a single directory environmentpath" do
12
8
  before(:each) do
@@ -17,17 +13,19 @@ describe "directory environments" do
17
13
 
18
14
  it "config prints the environments modulepath" do
19
15
  Puppet.settings.initialize_global_settings(args)
20
- expect do
21
- expect { puppet.run }.to exit_with(0)
22
- end.to have_printed('/direnv/modules')
16
+ expect {
17
+ puppet.run
18
+ }.to exit_with(0)
19
+ .and output(%r{/direnv/modules}).to_stdout
23
20
  end
24
21
 
25
22
  it "config prints the cli --modulepath despite environment" do
26
23
  args << '--modulepath' << '/completely/different'
27
24
  Puppet.settings.initialize_global_settings(args)
28
- expect do
29
- expect { puppet.run }.to exit_with(0)
30
- end.to have_printed('/completely/different')
25
+ expect {
26
+ puppet.run
27
+ }.to exit_with(0)
28
+ .and output(%r{/completely/different}).to_stdout
31
29
  end
32
30
 
33
31
  it 'given an 8.3 style path on Windows, will config print an expanded path',
@@ -41,9 +39,10 @@ describe "directory environments" do
41
39
  expect(Puppet[:environmentpath]).to match(/~/)
42
40
 
43
41
  Puppet.settings.initialize_global_settings(args)
44
- expect do
45
- expect { puppet.run }.to exit_with(0)
46
- end.to have_printed(expanded)
42
+ expect {
43
+ puppet.run
44
+ }.to exit_with(0)
45
+ .and output(a_string_matching(expanded)).to_stdout
47
46
  end
48
47
  end
49
48
 
@@ -59,9 +58,10 @@ describe "directory environments" do
59
58
 
60
59
  it "config prints a directory environment modulepath" do
61
60
  Puppet.settings.initialize_global_settings(args)
62
- expect do
63
- expect { puppet.run }.to exit_with(0)
64
- end.to have_printed('otherdirenv/modules')
61
+ expect {
62
+ puppet.run
63
+ }.to exit_with(0)
64
+ .and output(%r{otherdirenv/modules}).to_stdout
65
65
  end
66
66
  end
67
67
  end
@@ -12,7 +12,7 @@ describe "setting hooks" do
12
12
  end
13
13
 
14
14
  it "accesses correct directory environment settings after initializing a setting with an on_write hook" do
15
- expect(Puppet.settings.setting(:certname).call_hook).to eq(:on_write_only)
15
+ expect(Puppet.settings.setting(:strict).call_hook).to eq(:on_write_only)
16
16
 
17
17
  File.open(File.join(confdir, "puppet.conf"), "w:UTF-8") do |f|
18
18
  f.puts("environmentpath=#{environmentpath}")
@@ -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
 
@@ -122,7 +122,7 @@ describe Puppet::Network::HttpPool, unless: Puppet::Util::Platform.jruby? do
122
122
  Puppet::Network::HttpPool.http_client_class = klass
123
123
  end
124
124
 
125
- it "connects using the scheme, host and port from the http instance" do
125
+ it "connects using the scheme, host and port from the http instance preserving the URL path and query" do
126
126
  request_line = nil
127
127
 
128
128
  response_proc = -> (req, res) {
@@ -131,20 +131,20 @@ describe Puppet::Network::HttpPool, unless: Puppet::Util::Platform.jruby? do
131
131
 
132
132
  server.start_server(response_proc: response_proc) do |port|
133
133
  http = Puppet::Network::HttpPool.http_instance(hostname, port, true)
134
- path = "http://bogus.example.com:443/foo"
134
+ path = "http://bogus.example.com:443/foo?q=a"
135
135
  http.get(path)
136
136
 
137
137
  if legacy_api
138
- # The old API passed the bogus hostname which didn't match
139
- # the host we connected to.
140
- expect(request_line).to eq("GET http://bogus.example.com:443/foo HTTP/1.1\r\n")
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
141
  else
142
- expect(request_line).to eq("GET /foo HTTP/1.1\r\n")
142
+ expect(request_line).to eq("GET /foo?q=a HTTP/1.1\r\n")
143
143
  end
144
144
  end
145
145
  end
146
146
 
147
- it "requires the caller to URL encode the path" do
147
+ it "requires the caller to URL encode the path and query when using absolute form" do
148
148
  request_line = nil
149
149
 
150
150
  response_proc = -> (req, res) {
@@ -153,16 +153,33 @@ describe Puppet::Network::HttpPool, unless: Puppet::Util::Platform.jruby? do
153
153
 
154
154
  server.start_server(response_proc: response_proc) do |port|
155
155
  http = Puppet::Network::HttpPool.http_instance(hostname, port, true)
156
- encoded_url = "https://#{hostname}:#{port}/foo%20bar"
156
+ params = { 'key' => 'a value' }
157
+ encoded_url = "https://#{hostname}:#{port}/foo%20bar?q=#{Puppet::Util.uri_query_encode(params.to_json)}"
157
158
  http.get(encoded_url)
158
159
 
159
160
  if legacy_api
160
161
  expect(request_line).to eq("GET #{encoded_url} HTTP/1.1\r\n")
161
162
  else
162
- expect(request_line).to eq("GET /foo%20bar HTTP/1.1\r\n")
163
+ expect(request_line).to eq("GET /foo%20bar?q=%7B%22key%22%3A%22a%20value%22%7D HTTP/1.1\r\n")
163
164
  end
164
165
  end
165
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
166
183
  end
167
184
 
168
185
  describe Puppet::Network::HTTP::Connection do
@@ -79,7 +79,7 @@ describe Puppet::Node::Environment do
79
79
  it "should not yield a module with the same name as a defined Bolt project" do
80
80
  project_path = File.join(tmpfile('project'), 'bolt_project')
81
81
  FileUtils.mkdir_p(project_path)
82
- project = Struct.new("Project", :name, :path).new('project', project_path)
82
+ project = Struct.new("Project", :name, :path, :load_as_module?).new('project', project_path, true)
83
83
 
84
84
  Puppet.override(bolt_project: project) do
85
85
  base = tmpfile("base")
@@ -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
@@ -11,12 +11,8 @@ describe Puppet::Resource::TypeCollection do
11
11
  @dir = tmpfile("autoload_testing")
12
12
  FileUtils.mkdir_p @dir
13
13
 
14
- loader = Object.new
15
- allow(loader).to receive(:load).and_return(nil)
16
- allow(loader).to receive(:set_entry)
17
-
18
- loaders = Object.new
19
- expect(loaders).to receive(:runtime3_type_loader).at_most(:once).and_return(loader)
14
+ loader = double('loader', load: nil, set_entry: nil)
15
+ loaders = double('loaders', runtime3_type_loader: loader)
20
16
  expect(Puppet::Pops::Loaders).to receive(:loaders).at_most(:once).and_return(loaders)
21
17
 
22
18
  environment = Puppet::Node::Environment.create(:env, [@dir])
@@ -61,7 +61,7 @@ describe Puppet::Transaction do
61
61
 
62
62
  transaction = Puppet::Transaction.new(catalog, nil, Puppet::Graph::SequentialPrioritizer.new)
63
63
 
64
- expect(resource).not_to receive(:evaluate)
64
+ expect(resource).not_to receive(:retrieve)
65
65
 
66
66
  transaction.evaluate
67
67
  end
@@ -86,7 +86,7 @@ describe Puppet::Transaction do
86
86
 
87
87
  transaction = Puppet::Transaction.new(catalog, nil, Puppet::Graph::SequentialPrioritizer.new)
88
88
 
89
- expect(resource).not_to receive(:evaluate)
89
+ expect(resource).not_to receive(:retrieve)
90
90
 
91
91
  transaction.evaluate
92
92
  end
@@ -315,16 +315,14 @@ describe Puppet::Transaction do
315
315
  file1 = tmpfile("file1")
316
316
  file2 = tmpfile("file2")
317
317
 
318
+ expect(Puppet::FileSystem).to_not be_exist(file2)
319
+
318
320
  exec1 = Puppet::Type.type(:exec).new(
319
321
  :name => "exec1",
320
322
  :path => ENV["PATH"],
321
323
  :command => touch(file1),
322
324
  )
323
325
 
324
- allow(exec1).to receive(:eval_generate).and_return(
325
- [ Puppet::Type.type(:notify).new(:name => "eval1_notify") ]
326
- )
327
-
328
326
  exec2 = Puppet::Type.type(:exec).new(
329
327
  :name => "exec2",
330
328
  :path => ENV["PATH"],
@@ -332,9 +330,6 @@ describe Puppet::Transaction do
332
330
  :refreshonly => true,
333
331
  :subscribe => exec1,
334
332
  )
335
- allow(exec2).to receive(:eval_generate).and_return(
336
- [ Puppet::Type.type(:notify).new(:name => "eval2_notify") ]
337
- )
338
333
 
339
334
  Puppet[:tags] = "exec"
340
335
  catalog = mk_catalog(exec1, exec2)
@@ -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
@@ -33,8 +33,8 @@ describe Puppet::Util::Windows::ADSI::User,
33
33
 
34
34
  describe '.[]' do
35
35
  it 'should return string attributes as UTF-8' do
36
- administrator = Puppet::Util::Windows::ADSI::User.new('Administrator')
37
- expect(administrator['Description'].encoding).to eq(Encoding::UTF_8)
36
+ user = Puppet::Util::Windows::ADSI::User.new('Guest')
37
+ expect(user['Description'].encoding).to eq(Encoding::UTF_8)
38
38
  end
39
39
  end
40
40
 
@@ -157,7 +157,9 @@ describe Puppet::Util::Windows::ADSI::Group,
157
157
 
158
158
  # touch the native_object member to have it lazily loaded, so COM objects can be stubbed
159
159
  admins.native_object
160
- allow(admins.native_object).to receive(:Members).and_return(members)
160
+ without_partial_double_verification do
161
+ allow(admins.native_object).to receive(:Members).and_return(members)
162
+ end
161
163
 
162
164
  # well-known NULL SID
163
165
  expect(admins.members[0].sid).to eq('S-1-0-0')
@@ -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