puppet 6.17.0-x86-mingw32 → 7.1.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 (622) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +3 -4
  4. data/Gemfile.lock +32 -30
  5. data/README.md +2 -3
  6. data/Rakefile +4 -12
  7. data/conf/fileserver.conf +5 -10
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/osx/file_mapping.yaml +0 -5
  10. data/ext/project_data.yaml +2 -14
  11. data/ext/redhat/puppet.spec.erb +0 -1
  12. data/ext/windows/service/daemon.rb +6 -5
  13. data/install.rb +21 -17
  14. data/lib/puppet.rb +11 -20
  15. data/lib/puppet/agent/locker.rb +0 -7
  16. data/lib/puppet/application.rb +172 -98
  17. data/lib/puppet/application/agent.rb +8 -3
  18. data/lib/puppet/application/apply.rb +18 -20
  19. data/lib/puppet/application/device.rb +100 -104
  20. data/lib/puppet/application/doc.rb +1 -1
  21. data/lib/puppet/application/filebucket.rb +15 -11
  22. data/lib/puppet/application/lookup.rb +16 -4
  23. data/lib/puppet/application/ssl.rb +1 -1
  24. data/lib/puppet/application_support.rb +7 -0
  25. data/lib/puppet/configurer.rb +46 -19
  26. data/lib/puppet/configurer/downloader.rb +31 -10
  27. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  28. data/lib/puppet/confine.rb +1 -1
  29. data/lib/puppet/confine/any.rb +1 -1
  30. data/lib/puppet/defaults.rb +116 -162
  31. data/lib/puppet/environments.rb +72 -62
  32. data/lib/puppet/face/catalog.rb +1 -1
  33. data/lib/puppet/face/config.rb +56 -16
  34. data/lib/puppet/face/epp.rb +12 -2
  35. data/lib/puppet/face/facts.rb +66 -6
  36. data/lib/puppet/face/help.rb +1 -1
  37. data/lib/puppet/face/node.rb +3 -3
  38. data/lib/puppet/face/node/clean.rb +10 -2
  39. data/lib/puppet/face/plugin.rb +5 -8
  40. data/lib/puppet/feature/base.rb +1 -1
  41. data/lib/puppet/ffi/posix.rb +10 -0
  42. data/lib/puppet/ffi/posix/constants.rb +14 -0
  43. data/lib/puppet/ffi/posix/functions.rb +24 -0
  44. data/lib/puppet/ffi/windows.rb +12 -0
  45. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  46. data/lib/puppet/ffi/windows/constants.rb +404 -0
  47. data/lib/puppet/ffi/windows/functions.rb +628 -0
  48. data/lib/puppet/ffi/windows/structs.rb +338 -0
  49. data/lib/puppet/file_bucket/dipper.rb +1 -1
  50. data/lib/puppet/file_serving/configuration.rb +0 -5
  51. data/lib/puppet/file_serving/configuration/parser.rb +3 -32
  52. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  53. data/lib/puppet/file_serving/mount.rb +1 -2
  54. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  55. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  56. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  57. data/lib/puppet/file_system/file_impl.rb +3 -3
  58. data/lib/puppet/forge/repository.rb +0 -1
  59. data/lib/puppet/functions/epp.rb +1 -0
  60. data/lib/puppet/functions/inline_epp.rb +1 -0
  61. data/lib/puppet/functions/lstrip.rb +4 -4
  62. data/lib/puppet/functions/new.rb +8 -3
  63. data/lib/puppet/functions/reverse_each.rb +1 -1
  64. data/lib/puppet/functions/rstrip.rb +4 -4
  65. data/lib/puppet/functions/step.rb +1 -1
  66. data/lib/puppet/functions/strip.rb +4 -4
  67. data/lib/puppet/generate/models/type/type.rb +4 -1
  68. data/lib/puppet/gettext/config.rb +5 -5
  69. data/lib/puppet/gettext/module_translations.rb +4 -4
  70. data/lib/puppet/http.rb +23 -13
  71. data/lib/puppet/http/client.rb +165 -115
  72. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  73. data/lib/puppet/http/errors.rb +16 -0
  74. data/lib/puppet/http/external_client.rb +5 -7
  75. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  76. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  77. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  78. data/lib/puppet/http/proxy.rb +137 -0
  79. data/lib/puppet/http/redirector.rb +4 -12
  80. data/lib/puppet/http/resolver.rb +10 -23
  81. data/lib/puppet/http/resolver/server_list.rb +23 -45
  82. data/lib/puppet/http/resolver/settings.rb +7 -10
  83. data/lib/puppet/http/resolver/srv.rb +11 -15
  84. data/lib/puppet/http/response.rb +36 -54
  85. data/lib/puppet/http/response_converter.rb +24 -0
  86. data/lib/puppet/http/response_net_http.rb +42 -0
  87. data/lib/puppet/http/retry_after_handler.rb +4 -13
  88. data/lib/puppet/http/service.rb +15 -27
  89. data/lib/puppet/http/service/ca.rb +11 -22
  90. data/lib/puppet/http/service/compiler.rb +23 -70
  91. data/lib/puppet/http/service/file_server.rb +19 -28
  92. data/lib/puppet/http/service/puppetserver.rb +53 -0
  93. data/lib/puppet/http/service/report.rb +8 -10
  94. data/lib/puppet/http/session.rb +16 -24
  95. data/lib/puppet/{network/http → http}/site.rb +1 -2
  96. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  97. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  98. data/lib/puppet/indirector/exec.rb +1 -1
  99. data/lib/puppet/indirector/fact_search.rb +60 -0
  100. data/lib/puppet/indirector/facts/facter.rb +27 -6
  101. data/lib/puppet/indirector/facts/json.rb +27 -0
  102. data/lib/puppet/indirector/facts/rest.rb +3 -22
  103. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  104. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  105. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  106. data/lib/puppet/indirector/file_metadata/http.rb +1 -0
  107. data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
  108. data/lib/puppet/indirector/file_server.rb +1 -8
  109. data/lib/puppet/indirector/generic_http.rb +0 -11
  110. data/lib/puppet/indirector/hiera.rb +4 -0
  111. data/lib/puppet/indirector/indirection.rb +1 -1
  112. data/lib/puppet/indirector/json.rb +5 -1
  113. data/lib/puppet/indirector/msgpack.rb +1 -1
  114. data/lib/puppet/indirector/node/json.rb +8 -0
  115. data/lib/puppet/indirector/node/rest.rb +2 -4
  116. data/lib/puppet/indirector/report/json.rb +34 -0
  117. data/lib/puppet/indirector/report/processor.rb +2 -2
  118. data/lib/puppet/indirector/report/rest.rb +3 -8
  119. data/lib/puppet/indirector/request.rb +1 -102
  120. data/lib/puppet/indirector/rest.rb +12 -263
  121. data/lib/puppet/indirector/yaml.rb +1 -1
  122. data/lib/puppet/module.rb +1 -2
  123. data/lib/puppet/module_tool/applications.rb +0 -1
  124. data/lib/puppet/network/authconfig.rb +2 -96
  125. data/lib/puppet/network/authorization.rb +13 -35
  126. data/lib/puppet/network/format_support.rb +2 -2
  127. data/lib/puppet/network/formats.rb +2 -1
  128. data/lib/puppet/network/http.rb +3 -3
  129. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  130. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  131. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  132. data/lib/puppet/network/http/connection.rb +247 -316
  133. data/lib/puppet/network/http/handler.rb +0 -1
  134. data/lib/puppet/network/http/route.rb +2 -2
  135. data/lib/puppet/network/http_pool.rb +16 -34
  136. data/lib/puppet/node.rb +1 -30
  137. data/lib/puppet/node/environment.rb +12 -5
  138. data/lib/puppet/node/facts.rb +17 -0
  139. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  140. data/lib/puppet/pal/pal_impl.rb +93 -14
  141. data/lib/puppet/parameter.rb +1 -1
  142. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  143. data/lib/puppet/parser/compiler.rb +0 -198
  144. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  145. data/lib/puppet/parser/functions.rb +21 -17
  146. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  147. data/lib/puppet/parser/resource.rb +0 -69
  148. data/lib/puppet/parser/templatewrapper.rb +1 -1
  149. data/lib/puppet/parser/type_loader.rb +2 -2
  150. data/lib/puppet/pops/adaptable.rb +7 -13
  151. data/lib/puppet/pops/adapters.rb +8 -4
  152. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  153. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
  154. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  155. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  156. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  157. data/lib/puppet/pops/issues.rb +0 -5
  158. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  159. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  160. data/lib/puppet/pops/loaders.rb +18 -11
  161. data/lib/puppet/pops/lookup/context.rb +1 -1
  162. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  163. data/lib/puppet/pops/model/ast.pp +0 -42
  164. data/lib/puppet/pops/model/ast.rb +0 -290
  165. data/lib/puppet/pops/model/factory.rb +0 -45
  166. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  167. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  168. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  169. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  170. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  171. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  172. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  173. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  174. data/lib/puppet/pops/types/iterable.rb +34 -8
  175. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  176. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  177. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  178. data/lib/puppet/pops/types/type_parser.rb +0 -4
  179. data/lib/puppet/pops/types/types.rb +0 -1
  180. data/lib/puppet/pops/validation/checker4_0.rb +28 -52
  181. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  182. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  183. data/lib/puppet/provider.rb +0 -13
  184. data/lib/puppet/provider/file/windows.rb +1 -1
  185. data/lib/puppet/provider/nameservice.rb +0 -18
  186. data/lib/puppet/provider/package/apt.rb +34 -0
  187. data/lib/puppet/provider/package/dpkg.rb +1 -11
  188. data/lib/puppet/provider/package/gem.rb +27 -5
  189. data/lib/puppet/provider/package/pip.rb +0 -1
  190. data/lib/puppet/provider/package/pip2.rb +17 -0
  191. data/lib/puppet/provider/package/pkg.rb +0 -4
  192. data/lib/puppet/provider/package/portage.rb +1 -1
  193. data/lib/puppet/provider/package/puppet_gem.rb +6 -4
  194. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  195. data/lib/puppet/provider/package/yum.rb +1 -0
  196. data/lib/puppet/provider/package/zypper.rb +3 -0
  197. data/lib/puppet/provider/service/smf.rb +191 -73
  198. data/lib/puppet/provider/user/aix.rb +3 -3
  199. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  200. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  201. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  202. data/lib/puppet/reference/configuration.rb +2 -0
  203. data/lib/puppet/reference/indirection.rb +1 -1
  204. data/lib/puppet/resource.rb +1 -89
  205. data/lib/puppet/resource/catalog.rb +1 -14
  206. data/lib/puppet/resource/type.rb +5 -120
  207. data/lib/puppet/resource/type_collection.rb +3 -48
  208. data/lib/puppet/runtime.rb +1 -2
  209. data/lib/puppet/settings.rb +84 -35
  210. data/lib/puppet/settings/base_setting.rb +26 -2
  211. data/lib/puppet/settings/integer_setting.rb +17 -0
  212. data/lib/puppet/settings/port_setting.rb +15 -0
  213. data/lib/puppet/settings/priority_setting.rb +5 -4
  214. data/lib/puppet/ssl.rb +10 -6
  215. data/lib/puppet/ssl/base.rb +3 -5
  216. data/lib/puppet/ssl/certificate.rb +0 -6
  217. data/lib/puppet/ssl/certificate_request.rb +1 -12
  218. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  219. data/lib/puppet/ssl/oids.rb +3 -1
  220. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  221. data/lib/puppet/ssl/state_machine.rb +3 -1
  222. data/lib/puppet/ssl/verifier.rb +2 -0
  223. data/lib/puppet/test/test_helper.rb +11 -6
  224. data/lib/puppet/transaction.rb +3 -9
  225. data/lib/puppet/transaction/persistence.rb +1 -1
  226. data/lib/puppet/transaction/report.rb +10 -8
  227. data/lib/puppet/trusted_external.rb +2 -2
  228. data/lib/puppet/type.rb +4 -79
  229. data/lib/puppet/type/file.rb +7 -9
  230. data/lib/puppet/type/file/checksum.rb +1 -1
  231. data/lib/puppet/type/file/source.rb +29 -9
  232. data/lib/puppet/type/filebucket.rb +4 -4
  233. data/lib/puppet/type/notify.rb +2 -2
  234. data/lib/puppet/type/package.rb +5 -13
  235. data/lib/puppet/type/service.rb +4 -0
  236. data/lib/puppet/type/user.rb +19 -4
  237. data/lib/puppet/util.rb +26 -12
  238. data/lib/puppet/util/autoload.rb +9 -7
  239. data/lib/puppet/util/character_encoding.rb +9 -5
  240. data/lib/puppet/util/execution.rb +2 -13
  241. data/lib/puppet/util/http_proxy.rb +2 -215
  242. data/lib/puppet/util/monkey_patches.rb +0 -46
  243. data/lib/puppet/util/posix.rb +53 -4
  244. data/lib/puppet/util/rdoc.rb +0 -7
  245. data/lib/puppet/util/retry_action.rb +1 -1
  246. data/lib/puppet/util/rubygems.rb +5 -1
  247. data/lib/puppet/util/run_mode.rb +14 -2
  248. data/lib/puppet/util/windows.rb +3 -7
  249. data/lib/puppet/util/windows/daemon.rb +360 -0
  250. data/lib/puppet/util/windows/error.rb +1 -0
  251. data/lib/puppet/util/windows/eventlog.rb +4 -9
  252. data/lib/puppet/util/windows/file.rb +8 -242
  253. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  254. data/lib/puppet/util/windows/process.rb +4 -226
  255. data/lib/puppet/util/windows/security.rb +4 -4
  256. data/lib/puppet/util/windows/service.rb +9 -460
  257. data/lib/puppet/util/windows/string.rb +12 -13
  258. data/lib/puppet/util/windows/user.rb +219 -0
  259. data/lib/puppet/util/yaml.rb +0 -22
  260. data/lib/puppet/vendor/require_vendored.rb +0 -1
  261. data/lib/puppet/version.rb +1 -1
  262. data/lib/puppet/x509.rb +5 -1
  263. data/lib/puppet/x509/cert_provider.rb +29 -1
  264. data/locales/puppet.pot +656 -1351
  265. data/man/man5/puppet.conf.5 +72 -97
  266. data/man/man8/puppet-agent.8 +6 -3
  267. data/man/man8/puppet-apply.8 +1 -1
  268. data/man/man8/puppet-catalog.8 +1 -1
  269. data/man/man8/puppet-config.8 +6 -6
  270. data/man/man8/puppet-describe.8 +1 -1
  271. data/man/man8/puppet-device.8 +1 -1
  272. data/man/man8/puppet-doc.8 +1 -1
  273. data/man/man8/puppet-epp.8 +1 -1
  274. data/man/man8/puppet-facts.8 +55 -9
  275. data/man/man8/puppet-filebucket.8 +6 -6
  276. data/man/man8/puppet-generate.8 +1 -1
  277. data/man/man8/puppet-help.8 +1 -1
  278. data/man/man8/puppet-lookup.8 +2 -2
  279. data/man/man8/puppet-module.8 +1 -58
  280. data/man/man8/puppet-node.8 +7 -4
  281. data/man/man8/puppet-parser.8 +1 -1
  282. data/man/man8/puppet-plugin.8 +1 -1
  283. data/man/man8/puppet-report.8 +4 -1
  284. data/man/man8/puppet-resource.8 +1 -1
  285. data/man/man8/puppet-script.8 +1 -1
  286. data/man/man8/puppet-ssl.8 +1 -1
  287. data/man/man8/puppet.8 +2 -2
  288. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  289. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  290. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  291. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  292. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  293. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  294. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  295. data/spec/integration/application/agent_spec.rb +70 -61
  296. data/spec/integration/application/apply_spec.rb +150 -150
  297. data/spec/integration/application/doc_spec.rb +16 -6
  298. data/spec/integration/application/filebucket_spec.rb +78 -29
  299. data/spec/integration/application/help_spec.rb +44 -0
  300. data/spec/integration/application/lookup_spec.rb +13 -0
  301. data/spec/integration/application/module_spec.rb +68 -0
  302. data/spec/integration/application/plugin_spec.rb +76 -4
  303. data/spec/integration/configurer_spec.rb +14 -0
  304. data/spec/integration/data_binding_spec.rb +82 -0
  305. data/spec/integration/defaults_spec.rb +32 -3
  306. data/spec/integration/directory_environments_spec.rb +17 -17
  307. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  308. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  309. data/spec/integration/network/http_pool_spec.rb +3 -21
  310. data/spec/integration/node/environment_spec.rb +1 -1
  311. data/spec/integration/parser/catalog_spec.rb +0 -38
  312. data/spec/integration/parser/node_spec.rb +0 -9
  313. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  314. data/spec/integration/type/file_spec.rb +5 -4
  315. data/spec/integration/util/execution_spec.rb +22 -0
  316. data/spec/integration/util/windows/adsi_spec.rb +2 -2
  317. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  318. data/spec/integration/util/windows/process_spec.rb +26 -32
  319. data/spec/integration/util/windows/security_spec.rb +1 -1
  320. data/spec/integration/util/windows/user_spec.rb +7 -0
  321. data/spec/integration/util_spec.rb +7 -33
  322. data/spec/lib/puppet_spec/matchers.rb +0 -80
  323. data/spec/lib/puppet_spec/puppetserver.rb +9 -1
  324. data/spec/lib/puppet_spec/settings.rb +7 -1
  325. data/spec/shared_contexts/types_setup.rb +2 -0
  326. data/spec/spec_helper.rb +2 -0
  327. data/spec/unit/agent_spec.rb +0 -2
  328. data/spec/unit/application/agent_spec.rb +3 -4
  329. data/spec/unit/application/config_spec.rb +224 -4
  330. data/spec/unit/application/doc_spec.rb +2 -2
  331. data/spec/unit/application/face_base_spec.rb +6 -4
  332. data/spec/unit/application/facts_spec.rb +74 -8
  333. data/spec/unit/application/filebucket_spec.rb +41 -39
  334. data/spec/unit/application/resource_spec.rb +3 -1
  335. data/spec/unit/application/ssl_spec.rb +17 -4
  336. data/spec/unit/application_spec.rb +43 -4
  337. data/spec/unit/certificate_factory_spec.rb +1 -1
  338. data/spec/unit/configurer/downloader_spec.rb +14 -0
  339. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  340. data/spec/unit/configurer_spec.rb +96 -44
  341. data/spec/unit/confine_spec.rb +2 -1
  342. data/spec/unit/context/trusted_information_spec.rb +2 -6
  343. data/spec/unit/defaults_spec.rb +26 -32
  344. data/spec/unit/environments_spec.rb +173 -32
  345. data/spec/unit/face/config_spec.rb +65 -12
  346. data/spec/unit/face/facts_spec.rb +4 -0
  347. data/spec/unit/face/node_spec.rb +16 -4
  348. data/spec/unit/face/plugin_spec.rb +73 -33
  349. data/spec/unit/file_bucket/file_spec.rb +1 -1
  350. data/spec/unit/file_serving/configuration/parser_spec.rb +14 -18
  351. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  352. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  353. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  354. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  355. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  356. data/spec/unit/file_system_spec.rb +1 -2
  357. data/spec/unit/functions/camelcase_spec.rb +1 -1
  358. data/spec/unit/functions/capitalize_spec.rb +1 -1
  359. data/spec/unit/functions/downcase_spec.rb +1 -1
  360. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  361. data/spec/unit/functions/upcase_spec.rb +1 -1
  362. data/spec/unit/http/client_spec.rb +7 -9
  363. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  364. data/spec/unit/http/external_client_spec.rb +4 -4
  365. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  366. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  367. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  368. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  369. data/spec/unit/http/resolver_spec.rb +34 -15
  370. data/spec/unit/http/service/ca_spec.rb +2 -3
  371. data/spec/unit/http/service/compiler_spec.rb +51 -65
  372. data/spec/unit/http/service/file_server_spec.rb +5 -6
  373. data/spec/unit/http/service/puppetserver_spec.rb +112 -0
  374. data/spec/unit/http/service/report_spec.rb +2 -3
  375. data/spec/unit/http/service_spec.rb +1 -3
  376. data/spec/unit/http/session_spec.rb +24 -35
  377. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  378. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  379. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  380. data/spec/unit/indirector/facts/facter_spec.rb +97 -0
  381. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  382. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  383. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  384. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  385. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  386. data/spec/unit/indirector/file_server_spec.rb +1 -15
  387. data/spec/unit/indirector/json_spec.rb +8 -8
  388. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  389. data/spec/unit/indirector/node/json_spec.rb +33 -0
  390. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  391. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  392. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  393. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  394. data/spec/unit/indirector/request_spec.rb +2 -266
  395. data/spec/unit/indirector/rest_spec.rb +98 -752
  396. data/spec/unit/indirector/yaml_spec.rb +7 -7
  397. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  398. data/spec/unit/network/authconfig_spec.rb +2 -132
  399. data/spec/unit/network/authorization_spec.rb +2 -55
  400. data/spec/unit/network/format_support_spec.rb +3 -2
  401. data/spec/unit/network/formats_spec.rb +4 -4
  402. data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -97
  403. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  404. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  405. data/spec/unit/network/http/api_spec.rb +10 -0
  406. data/spec/unit/network/http/connection_spec.rb +19 -41
  407. data/spec/unit/network/http/handler_spec.rb +0 -6
  408. data/spec/unit/network/http_pool_spec.rb +0 -4
  409. data/spec/unit/node/environment_spec.rb +51 -22
  410. data/spec/unit/node_spec.rb +2 -54
  411. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  412. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  413. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  414. data/spec/unit/pops/loaders/loaders_spec.rb +76 -21
  415. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  416. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  417. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  418. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  419. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  420. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  421. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  422. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  423. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  424. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  425. data/spec/unit/pops/visitor_spec.rb +1 -1
  426. data/spec/unit/provider/exec_spec.rb +4 -3
  427. data/spec/unit/provider/nameservice_spec.rb +0 -57
  428. data/spec/unit/provider/package/apt_spec.rb +77 -0
  429. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  430. data/spec/unit/provider/package/dpkg_spec.rb +22 -55
  431. data/spec/unit/provider/package/gem_spec.rb +32 -0
  432. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  433. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  434. data/spec/unit/provider/package/puppet_gem_spec.rb +6 -2
  435. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  436. data/spec/unit/provider/package/yum_spec.rb +31 -0
  437. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  438. data/spec/unit/provider/service/base_spec.rb +2 -4
  439. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  440. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  441. data/spec/unit/provider/service/debian_spec.rb +3 -5
  442. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  443. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  444. data/spec/unit/provider/service/init_spec.rb +45 -5
  445. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  446. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  447. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  448. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  449. data/spec/unit/provider/service/runit_spec.rb +2 -1
  450. data/spec/unit/provider/service/smf_spec.rb +402 -166
  451. data/spec/unit/provider/service/src_spec.rb +3 -5
  452. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  453. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  454. data/spec/unit/provider/service/windows_spec.rb +28 -1
  455. data/spec/unit/provider/user/aix_spec.rb +5 -0
  456. data/spec/unit/provider/user/pw_spec.rb +2 -0
  457. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  458. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  459. data/spec/unit/provider_spec.rb +0 -12
  460. data/spec/unit/puppet_pal_2pec.rb +40 -0
  461. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  462. data/spec/unit/reports/store_spec.rb +17 -13
  463. data/spec/unit/resource/type_collection_spec.rb +2 -22
  464. data/spec/unit/resource_spec.rb +0 -56
  465. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  466. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  467. data/spec/unit/settings/port_setting_spec.rb +31 -0
  468. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  469. data/spec/unit/settings_spec.rb +586 -239
  470. data/spec/unit/ssl/base_spec.rb +36 -3
  471. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  472. data/spec/unit/ssl/certificate_spec.rb +2 -11
  473. data/spec/unit/ssl/ssl_provider_spec.rb +11 -8
  474. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  475. data/spec/unit/ssl/verifier_spec.rb +0 -21
  476. data/spec/unit/transaction/persistence_spec.rb +15 -0
  477. data/spec/unit/transaction/report_spec.rb +2 -2
  478. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  479. data/spec/unit/transaction_spec.rb +45 -79
  480. data/spec/unit/type/file/checksum_spec.rb +6 -6
  481. data/spec/unit/type/file/content_spec.rb +1 -1
  482. data/spec/unit/type/file/ensure_spec.rb +1 -1
  483. data/spec/unit/type/file/mode_spec.rb +1 -1
  484. data/spec/unit/type/file/source_spec.rb +1 -2
  485. data/spec/unit/type/file_spec.rb +12 -6
  486. data/spec/unit/type/filebucket_spec.rb +1 -1
  487. data/spec/unit/type/package_spec.rb +1 -1
  488. data/spec/unit/type/service_spec.rb +35 -2
  489. data/spec/unit/type/user_spec.rb +31 -2
  490. data/spec/unit/type_spec.rb +20 -0
  491. data/spec/unit/util/backups_spec.rb +0 -2
  492. data/spec/unit/util/character_encoding_spec.rb +4 -4
  493. data/spec/unit/util/command_line_spec.rb +11 -6
  494. data/spec/unit/util/execution_spec.rb +0 -29
  495. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  496. data/spec/unit/util/posix_spec.rb +357 -15
  497. data/spec/unit/util/rubygems_spec.rb +2 -2
  498. data/spec/unit/util/run_mode_spec.rb +27 -127
  499. data/spec/unit/util/storage_spec.rb +3 -1
  500. data/spec/unit/util/windows/string_spec.rb +1 -3
  501. data/spec/unit/util/yaml_spec.rb +0 -54
  502. data/spec/unit/util_spec.rb +0 -18
  503. metadata +84 -261
  504. data/conf/auth.conf +0 -150
  505. data/lib/puppet/application/cert.rb +0 -76
  506. data/lib/puppet/application/key.rb +0 -4
  507. data/lib/puppet/application/man.rb +0 -4
  508. data/lib/puppet/application/status.rb +0 -4
  509. data/lib/puppet/face/key.rb +0 -16
  510. data/lib/puppet/face/man.rb +0 -145
  511. data/lib/puppet/face/module/build.rb +0 -14
  512. data/lib/puppet/face/module/generate.rb +0 -14
  513. data/lib/puppet/face/module/search.rb +0 -103
  514. data/lib/puppet/face/status.rb +0 -51
  515. data/lib/puppet/indirector/certificate/file.rb +0 -9
  516. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  517. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  518. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  519. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  520. data/lib/puppet/indirector/file_content/http.rb +0 -22
  521. data/lib/puppet/indirector/key/file.rb +0 -46
  522. data/lib/puppet/indirector/key/memory.rb +0 -7
  523. data/lib/puppet/indirector/ssl_file.rb +0 -162
  524. data/lib/puppet/indirector/status.rb +0 -3
  525. data/lib/puppet/indirector/status/local.rb +0 -12
  526. data/lib/puppet/indirector/status/rest.rb +0 -27
  527. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  528. data/lib/puppet/network/auth_config_parser.rb +0 -90
  529. data/lib/puppet/network/authstore.rb +0 -283
  530. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  531. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  532. data/lib/puppet/network/http/base_pool.rb +0 -36
  533. data/lib/puppet/network/http/compression.rb +0 -127
  534. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  535. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  536. data/lib/puppet/network/rest_controller.rb +0 -2
  537. data/lib/puppet/network/rights.rb +0 -210
  538. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  539. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  540. data/lib/puppet/parser/environment_compiler.rb +0 -202
  541. data/lib/puppet/pops/types/enumeration.rb +0 -16
  542. data/lib/puppet/resource/capability_finder.rb +0 -154
  543. data/lib/puppet/rest/errors.rb +0 -15
  544. data/lib/puppet/rest/response.rb +0 -35
  545. data/lib/puppet/rest/route.rb +0 -85
  546. data/lib/puppet/rest/routes.rb +0 -135
  547. data/lib/puppet/ssl/host.rb +0 -505
  548. data/lib/puppet/ssl/key.rb +0 -61
  549. data/lib/puppet/ssl/validator.rb +0 -61
  550. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  551. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  552. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  553. data/lib/puppet/status.rb +0 -40
  554. data/lib/puppet/util/connection.rb +0 -88
  555. data/lib/puppet/util/ssl.rb +0 -83
  556. data/lib/puppet/util/windows/api_types.rb +0 -295
  557. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  558. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  559. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  560. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  561. data/lib/puppet/vendor/pathspec/README.md +0 -53
  562. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  563. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  564. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  565. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  566. data/man/man8/puppet-key.8 +0 -126
  567. data/man/man8/puppet-man.8 +0 -76
  568. data/man/man8/puppet-status.8 +0 -108
  569. data/spec/integration/faces/config_spec.rb +0 -91
  570. data/spec/integration/faces/documentation_spec.rb +0 -57
  571. data/spec/integration/file_bucket/file_spec.rb +0 -50
  572. data/spec/integration/file_serving/content_spec.rb +0 -7
  573. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  574. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  575. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  576. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  577. data/spec/integration/module_tool/forge_spec.rb +0 -51
  578. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  579. data/spec/integration/network/authconfig_spec.rb +0 -256
  580. data/spec/integration/provider/service/init_spec.rb +0 -48
  581. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  582. data/spec/integration/provider/service/windows_spec.rb +0 -50
  583. data/spec/integration/reference/providers_spec.rb +0 -21
  584. data/spec/integration/reports_spec.rb +0 -13
  585. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  586. data/spec/integration/ssl/host_spec.rb +0 -72
  587. data/spec/integration/ssl/key_spec.rb +0 -99
  588. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  589. data/spec/unit/capability_spec.rb +0 -414
  590. data/spec/unit/face/catalog_spec.rb +0 -6
  591. data/spec/unit/face/key_spec.rb +0 -9
  592. data/spec/unit/face/man_spec.rb +0 -25
  593. data/spec/unit/face/module/search_spec.rb +0 -231
  594. data/spec/unit/face/module_spec.rb +0 -3
  595. data/spec/unit/face/status_spec.rb +0 -9
  596. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  597. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  598. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  599. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  600. data/spec/unit/indirector/key/file_spec.rb +0 -79
  601. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  602. data/spec/unit/indirector/status/local_spec.rb +0 -10
  603. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  604. data/spec/unit/man_spec.rb +0 -31
  605. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  606. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  607. data/spec/unit/network/authstore_spec.rb +0 -422
  608. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  609. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  610. data/spec/unit/network/http/compression_spec.rb +0 -240
  611. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  612. data/spec/unit/network/http_spec.rb +0 -9
  613. data/spec/unit/network/rights_spec.rb +0 -439
  614. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  615. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  616. data/spec/unit/resource/capability_finder_spec.rb +0 -143
  617. data/spec/unit/rest/route_spec.rb +0 -132
  618. data/spec/unit/ssl/host_spec.rb +0 -650
  619. data/spec/unit/ssl/key_spec.rb +0 -173
  620. data/spec/unit/ssl/validator_spec.rb +0 -278
  621. data/spec/unit/status_spec.rb +0 -45
  622. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -135,9 +135,3 @@ describe SecureRandom do
135
135
  expect(SecureRandom.uuid).to match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i)
136
136
  end
137
137
  end
138
-
139
- describe 'Enumerable' do
140
- it 'expects uniq to work on an Enumerable' do
141
- expect(['c', 'c', 'C'].reverse_each.uniq).to eql(['C', 'c'])
142
- end
143
- end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
+ require 'puppet/ffi/posix'
3
4
  require 'puppet/util/posix'
4
5
 
5
6
  class PosixTest
@@ -11,35 +12,338 @@ describe Puppet::Util::POSIX do
11
12
  @posix = PosixTest.new
12
13
  end
13
14
 
14
- describe '.groups_of' do
15
+ describe '.groups_of' do
16
+ let(:mock_user_data) { double(user, :gid => 1000) }
17
+
18
+ let(:ngroups_ptr) { double('FFI::MemoryPointer', :address => 0x0001, :size => 4) }
19
+ let(:groups_ptr) { double('FFI::MemoryPointer', :address => 0x0002, :size => Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS) }
20
+
15
21
  let(:mock_groups) do
16
22
  [
17
- ['group1', ['user1', 'user2']],
18
- ['group2', ['user2']],
19
- ['group1', ['user1', 'user2']],
20
- ['group3', ['user1']],
21
- ['group4', ['user2']]
22
- ].map do |(name, members)|
23
+ ['root', ['root'], 0],
24
+ ['nomembers', [], 5 ],
25
+ ['group1', ['user1', 'user2'], 1001],
26
+ ['group2', ['user2'], 2002],
27
+ ['group1', ['user1', 'user2'], 1001],
28
+ ['group3', ['user1'], 3003],
29
+ ['group4', ['user2'], 4004],
30
+ ['user1', [], 1111],
31
+ ['user2', [], 2222]
32
+ ].map do |(name, members, gid)|
23
33
  group_struct = double("Group #{name}")
24
34
  allow(group_struct).to receive(:name).and_return(name)
25
35
  allow(group_struct).to receive(:mem).and_return(members)
36
+ allow(group_struct).to receive(:gid).and_return(gid)
26
37
 
27
38
  group_struct
28
39
  end
29
40
  end
30
41
 
42
+ def prepare_user_and_groups_env(user, groups)
43
+ groups_gids = []
44
+ groups_and_user = []
45
+ groups_and_user.replace(groups)
46
+ groups_and_user.push(user)
47
+
48
+ groups_and_user.each do |group|
49
+ mock_group = mock_groups.find { |m| m.name == group }
50
+ groups_gids.push(mock_group.gid)
51
+
52
+ allow(Puppet::Etc).to receive(:getgrgid).with(mock_group.gid).and_return(mock_group)
53
+ end
54
+
55
+ if groups_and_user.size > Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS
56
+ allow(ngroups_ptr).to receive(:read_int).and_return(Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS, groups_and_user.size)
57
+ else
58
+ allow(ngroups_ptr).to receive(:read_int).and_return(groups_and_user.size)
59
+ end
60
+
61
+ allow(groups_ptr).to receive(:get_array_of_uint).with(0, groups_and_user.size).and_return(groups_gids)
62
+ allow(Puppet::Etc).to receive(:getpwnam).with(user).and_return(mock_user_data)
63
+ end
64
+
31
65
  before(:each) do
32
- etc_stub = receive(:group)
33
- mock_groups.each do |mock_group|
34
- etc_stub = etc_stub.and_yield(mock_group)
66
+ allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist).and_return(true)
67
+ end
68
+
69
+ describe 'when it uses FFI function getgrouplist' do
70
+ before(:each) do
71
+ allow(FFI::MemoryPointer).to receive(:new).with(:int).and_yield(ngroups_ptr)
72
+ allow(FFI::MemoryPointer).to receive(:new).with(:uint, Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS).and_yield(groups_ptr)
73
+ allow(ngroups_ptr).to receive(:write_int).with(Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS).and_return(ngroups_ptr)
74
+ end
75
+
76
+ describe 'when there are groups' do
77
+ context 'for user1' do
78
+ let(:user) { 'user1' }
79
+ let(:expected_groups) { ['group1', 'group3'] }
80
+
81
+ before(:each) do
82
+ prepare_user_and_groups_env(user, expected_groups)
83
+ allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
84
+ end
85
+
86
+ it "should return the groups for given user" do
87
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
88
+ end
89
+
90
+ it 'should not print any debug message about falling back to Puppet::Etc.group' do
91
+ expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
92
+ Puppet::Util::POSIX.groups_of(user)
93
+ end
94
+ end
95
+
96
+ context 'for user2' do
97
+ let(:user) { 'user2' }
98
+ let(:expected_groups) { ['group1', 'group2', 'group4'] }
99
+
100
+ before(:each) do
101
+ prepare_user_and_groups_env(user, expected_groups)
102
+ allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
103
+ end
104
+
105
+ it "should return the groups for given user" do
106
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
107
+ end
108
+
109
+ it 'should not print any debug message about falling back to Puppet::Etc.group' do
110
+ expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
111
+ Puppet::Util::POSIX.groups_of(user)
112
+ end
113
+ end
114
+ end
115
+
116
+ describe 'when there are no groups' do
117
+ let(:user) { 'nomembers' }
118
+ let(:expected_groups) { [] }
119
+
120
+ before(:each) do
121
+ prepare_user_and_groups_env(user, expected_groups)
122
+ allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
123
+ end
124
+
125
+ it "should return no groups for given user" do
126
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
127
+ end
128
+
129
+ it 'should not print any debug message about falling back to Puppet::Etc.group' do
130
+ expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
131
+ Puppet::Util::POSIX.groups_of(user)
132
+ end
133
+ end
134
+
135
+ describe 'when primary group explicitly contains user' do
136
+ let(:user) { 'root' }
137
+ let(:expected_groups) { ['root'] }
138
+
139
+ before(:each) do
140
+ prepare_user_and_groups_env(user, expected_groups)
141
+ allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
142
+ end
143
+
144
+ it "should return the groups, including primary group, for given user" do
145
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
146
+ end
147
+
148
+ it 'should not print any debug message about falling back to Puppet::Etc.group' do
149
+ expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
150
+ Puppet::Util::POSIX.groups_of(user)
151
+ end
152
+ end
153
+
154
+ describe 'when primary group does not explicitly contain user' do
155
+ let(:user) { 'user1' }
156
+ let(:expected_groups) { ['group1', 'group3'] }
157
+
158
+ before(:each) do
159
+ prepare_user_and_groups_env(user, expected_groups)
160
+ allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
161
+ end
162
+
163
+ it "should not return primary group for given user" do
164
+ expect(Puppet::Util::POSIX.groups_of(user)).not_to include(user)
165
+ end
166
+
167
+ it 'should not print any debug message about falling back to Puppet::Etc.group' do
168
+ expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
169
+ Puppet::Util::POSIX.groups_of(user)
170
+ end
171
+ end
172
+
173
+ context 'number of groups' do
174
+ before(:each) do
175
+ stub_const("Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS", 2)
176
+ prepare_user_and_groups_env(user, expected_groups)
177
+
178
+ allow(FFI::MemoryPointer).to receive(:new).with(:uint, Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS).and_yield(groups_ptr)
179
+ allow(ngroups_ptr).to receive(:write_int).with(Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS).and_return(ngroups_ptr)
180
+ end
181
+
182
+ describe 'when there are less than maximum expected number of groups' do
183
+ let(:user) { 'root' }
184
+ let(:expected_groups) { ['root'] }
185
+
186
+ before(:each) do
187
+ allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
188
+ end
189
+
190
+ it "should return the groups for given user, after one 'getgrouplist' call" do
191
+ expect(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).once
192
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
193
+ end
194
+
195
+ it 'should not print any debug message about falling back to Puppet::Etc.group' do
196
+ expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
197
+ Puppet::Util::POSIX.groups_of(user)
198
+ end
199
+ end
200
+
201
+ describe 'when there are more than maximum expected number of groups' do
202
+ let(:user) { 'user1' }
203
+ let(:expected_groups) { ['group1', 'group3'] }
204
+
205
+ before(:each) do
206
+ allow(FFI::MemoryPointer).to receive(:new).with(:uint, Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS * 2).and_yield(groups_ptr)
207
+ allow(ngroups_ptr).to receive(:write_int).with(Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS * 2).and_return(ngroups_ptr)
208
+
209
+ allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(-1, 1)
210
+ end
211
+
212
+ it "should return the groups for given user, after two 'getgrouplist' calls" do
213
+ expect(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).twice
214
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
215
+ end
216
+
217
+ it 'should not print any debug message about falling back to Puppet::Etc.group' do
218
+ expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
219
+ Puppet::Util::POSIX.groups_of(user)
220
+ end
221
+ end
35
222
  end
36
- allow(Puppet::Etc).to etc_stub
37
223
  end
38
224
 
39
- it 'returns the groups of the given user' do
40
- expect(Puppet::Util::POSIX.groups_of('user1')).to eql(
41
- ['group1', 'group3']
42
- )
225
+ describe 'when it falls back to Puppet::Etc.group method' do
226
+ before(:each) do
227
+ etc_stub = receive(:group)
228
+ mock_groups.each do |mock_group|
229
+ etc_stub = etc_stub.and_yield(mock_group)
230
+ end
231
+ allow(Puppet::Etc).to etc_stub
232
+
233
+ allow(Puppet::Etc).to receive(:getpwnam).with(user).and_raise(ArgumentError, "can't find user for #{user}")
234
+ allow(Puppet).to receive(:debug)
235
+
236
+ expect(Puppet::FFI::POSIX::Functions).not_to receive(:getgrouplist)
237
+ end
238
+
239
+ describe 'when there are groups' do
240
+ context 'for user1' do
241
+ let(:user) { 'user1' }
242
+ let(:expected_groups) { ['group1', 'group3'] }
243
+
244
+ it "should return the groups for given user" do
245
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
246
+ end
247
+
248
+ it 'logs a debug message' do
249
+ expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: can't find user for #{user}")
250
+ Puppet::Util::POSIX.groups_of(user)
251
+ end
252
+ end
253
+
254
+ context 'for user2' do
255
+ let(:user) { 'user2' }
256
+ let(:expected_groups) { ['group1', 'group2', 'group4'] }
257
+
258
+ it "should return the groups for given user" do
259
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
260
+ end
261
+
262
+ it 'logs a debug message' do
263
+ expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: can't find user for #{user}")
264
+ Puppet::Util::POSIX.groups_of(user)
265
+ end
266
+ end
267
+ end
268
+
269
+ describe 'when there are no groups' do
270
+ let(:user) { 'nomembers' }
271
+ let(:expected_groups) { [] }
272
+
273
+ it "should return no groups for given user" do
274
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
275
+ end
276
+
277
+ it 'logs a debug message' do
278
+ expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: can't find user for #{user}")
279
+ Puppet::Util::POSIX.groups_of(user)
280
+ end
281
+ end
282
+
283
+ describe 'when primary group explicitly contains user' do
284
+ let(:user) { 'root' }
285
+ let(:expected_groups) { ['root'] }
286
+
287
+ it "should return the groups, including primary group, for given user" do
288
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
289
+ end
290
+
291
+ it 'logs a debug message' do
292
+ expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: can't find user for #{user}")
293
+ Puppet::Util::POSIX.groups_of(user)
294
+ end
295
+ end
296
+
297
+ describe 'when primary group does not explicitly contain user' do
298
+ let(:user) { 'user1' }
299
+ let(:expected_groups) { ['group1', 'group3'] }
300
+
301
+ it "should not return primary group for given user" do
302
+ expect(Puppet::Util::POSIX.groups_of(user)).not_to include(user)
303
+ end
304
+
305
+ it 'logs a debug message' do
306
+ expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: can't find user for #{user}")
307
+ Puppet::Util::POSIX.groups_of(user)
308
+ end
309
+ end
310
+
311
+ describe "when the 'getgrouplist' method is not available" do
312
+ let(:user) { 'user1' }
313
+ let(:expected_groups) { ['group1', 'group3'] }
314
+
315
+ before(:each) do
316
+ allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist).and_return(false)
317
+ end
318
+
319
+ it "should return the groups" do
320
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
321
+ end
322
+
323
+ it 'logs a debug message' do
324
+ expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: The 'getgrouplist' method is not available")
325
+ Puppet::Util::POSIX.groups_of(user)
326
+ end
327
+ end
328
+
329
+
330
+ describe "when ffi is not available on the machine" do
331
+ let(:user) { 'user1' }
332
+ let(:expected_groups) { ['group1', 'group3'] }
333
+
334
+ before(:each) do
335
+ allow(Puppet::Util::POSIX).to receive(:require).with('puppet/ffi/posix').and_raise(LoadError, 'cannot load such file -- ffi')
336
+ end
337
+
338
+ it "should return the groups" do
339
+ expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
340
+ end
341
+
342
+ it 'logs a debug message' do
343
+ expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: cannot load such file -- ffi")
344
+ Puppet::Util::POSIX.groups_of(user)
345
+ end
346
+ end
43
347
  end
44
348
  end
45
349
 
@@ -189,6 +493,25 @@ describe Puppet::Util::POSIX do
189
493
  expect(@posix.gid("asdf")).to eq(100)
190
494
  end
191
495
 
496
+ it "returns the id without full groups query if multiple groups have the same id" do
497
+ expect(@posix).to receive(:get_posix_field).with(:group, :gid, "asdf").and_return(100)
498
+ expect(@posix).to receive(:get_posix_field).with(:group, :name, 100).and_return("boo")
499
+ expect(@posix).to receive(:get_posix_field).with(:group, :gid, "boo").and_return(100)
500
+
501
+ expect(@posix).not_to receive(:search_posix_field)
502
+ expect(@posix.gid("asdf")).to eq(100)
503
+ end
504
+
505
+ it "returns the id with full groups query if name is nil" do
506
+ expect(@posix).to receive(:get_posix_field).with(:group, :gid, "asdf").and_return(100)
507
+ expect(@posix).to receive(:get_posix_field).with(:group, :name, 100).and_return(nil)
508
+ expect(@posix).not_to receive(:get_posix_field).with(:group, :gid, nil)
509
+
510
+
511
+ expect(@posix).to receive(:search_posix_field).with(:group, :gid, "asdf").and_return(100)
512
+ expect(@posix.gid("asdf")).to eq(100)
513
+ end
514
+
192
515
  it "should use :search_posix_field if the discovered name does not match the passed-in name" do
193
516
  expect(@posix).to receive(:get_posix_field).with(:group, :gid, "asdf").and_return(100)
194
517
  expect(@posix).to receive(:get_posix_field).with(:group, :name, 100).and_return("boo")
@@ -265,6 +588,25 @@ describe Puppet::Util::POSIX do
265
588
  expect(@posix.uid("asdf")).to eq(100)
266
589
  end
267
590
 
591
+ it "returns the id without full users query if multiple users have the same id" do
592
+ expect(@posix).to receive(:get_posix_field).with(:passwd, :uid, "asdf").and_return(100)
593
+ expect(@posix).to receive(:get_posix_field).with(:passwd, :name, 100).and_return("boo")
594
+ expect(@posix).to receive(:get_posix_field).with(:passwd, :uid, "boo").and_return(100)
595
+
596
+ expect(@posix).not_to receive(:search_posix_field)
597
+ expect(@posix.uid("asdf")).to eq(100)
598
+ end
599
+
600
+ it "returns the id with full users query if name is nil" do
601
+ expect(@posix).to receive(:get_posix_field).with(:passwd, :uid, "asdf").and_return(100)
602
+ expect(@posix).to receive(:get_posix_field).with(:passwd, :name, 100).and_return(nil)
603
+ expect(@posix).not_to receive(:get_posix_field).with(:passwd, :uid, nil)
604
+
605
+
606
+ expect(@posix).to receive(:search_posix_field).with(:passwd, :uid, "asdf").and_return(100)
607
+ expect(@posix.uid("asdf")).to eq(100)
608
+ end
609
+
268
610
  it "should use :search_posix_field if the discovered name does not match the passed-in name" do
269
611
  expect(@posix).to receive(:get_posix_field).with(:passwd, :uid, "asdf").and_return(100)
270
612
  expect(@posix).to receive(:get_posix_field).with(:passwd, :name, 100).and_return("boo")
@@ -33,8 +33,8 @@ describe Puppet::Util::RubyGems::Source do
33
33
  describe '::Gems18Source' do
34
34
  before(:each) { allow(described_class).to receive(:source).and_return(Puppet::Util::RubyGems::Gems18Source) }
35
35
 
36
- it "#directories returns the lib subdirs of Gem::Specification.latest_specs" do
37
- expect(Gem::Specification).to receive(:latest_specs).with(true).and_return([fake_gem])
36
+ it "#directories returns the lib subdirs of Gem::Specification.stubs" do
37
+ expect(Gem::Specification).to receive(:stubs).and_return([fake_gem])
38
38
 
39
39
  expect(described_class.new.directories).to eq([gem_lib])
40
40
  end
@@ -1,12 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Puppet::Util::RunMode do
4
- # Discriminator for tests that attempts to unset HOME since that, for reasons currently unknown,
5
- # doesn't work in Ruby >= 2.4.0
6
- def self.gte_ruby_2_4
7
- @gte_ruby_2_4 ||= SemanticPuppet::Version.parse(RUBY_VERSION) >= SemanticPuppet::Version.parse('2.4.0')
8
- end
9
-
10
4
  before do
11
5
  @run_mode = Puppet::Util::RunMode.new('fake')
12
6
  end
@@ -25,23 +19,15 @@ describe Puppet::Util::RunMode do
25
19
  as_non_root { expect(@run_mode.conf_dir).to eq(File.expand_path('~/.puppetlabs/etc/puppet')) }
26
20
  end
27
21
 
28
- context "master run mode" do
22
+ context "server run mode" do
29
23
  before do
30
- @run_mode = Puppet::Util::UnixRunMode.new('master')
24
+ @run_mode = Puppet::Util::UnixRunMode.new('server')
31
25
  end
32
26
 
33
- it "has confdir ~/.puppetlabs/etc/puppet when run as non-root and master run mode" do
27
+ it "has confdir ~/.puppetlabs/etc/puppet when run as non-root and server run mode" do
34
28
  as_non_root { expect(@run_mode.conf_dir).to eq(File.expand_path('~/.puppetlabs/etc/puppet')) }
35
29
  end
36
30
  end
37
-
38
- it "fails when asking for the conf_dir as non-root and there is no $HOME", :unless => gte_ruby_2_4 || Puppet::Util::Platform.windows? do
39
- as_non_root do
40
- without_home do
41
- expect { @run_mode.conf_dir }.to raise_error ArgumentError, /couldn't find HOME/
42
- end
43
- end
44
- end
45
31
  end
46
32
 
47
33
  describe "#code_dir" do
@@ -53,23 +39,15 @@ describe Puppet::Util::RunMode do
53
39
  as_non_root { expect(@run_mode.code_dir).to eq(File.expand_path('~/.puppetlabs/etc/code')) }
54
40
  end
55
41
 
56
- context "master run mode" do
42
+ context "server run mode" do
57
43
  before do
58
- @run_mode = Puppet::Util::UnixRunMode.new('master')
44
+ @run_mode = Puppet::Util::UnixRunMode.new('server')
59
45
  end
60
46
 
61
- it "has codedir ~/.puppetlabs/etc/code when run as non-root and master run mode" do
47
+ it "has codedir ~/.puppetlabs/etc/code when run as non-root and server run mode" do
62
48
  as_non_root { expect(@run_mode.code_dir).to eq(File.expand_path('~/.puppetlabs/etc/code')) }
63
49
  end
64
50
  end
65
-
66
- it "fails when asking for the code_dir as non-root and there is no $HOME", :unless => gte_ruby_2_4 || Puppet::Util::Platform.windows? do
67
- as_non_root do
68
- without_home do
69
- expect { @run_mode.code_dir }.to raise_error ArgumentError, /couldn't find HOME/
70
- end
71
- end
72
- end
73
51
  end
74
52
 
75
53
  describe "#var_dir" do
@@ -80,13 +58,15 @@ describe Puppet::Util::RunMode do
80
58
  it "has vardir ~/.puppetlabs/opt/puppet/cache when run as non-root" do
81
59
  as_non_root { expect(@run_mode.var_dir).to eq(File.expand_path('~/.puppetlabs/opt/puppet/cache')) }
82
60
  end
61
+ end
62
+
63
+ describe "#public_dir" do
64
+ it "has publicdir /opt/puppetlabs/puppet/public when run as root" do
65
+ as_root { expect(@run_mode.public_dir).to eq(File.expand_path('/opt/puppetlabs/puppet/public')) }
66
+ end
83
67
 
84
- it "fails when asking for the var_dir as non-root and there is no $HOME", :unless => gte_ruby_2_4 || Puppet::Util::Platform.windows? do
85
- as_non_root do
86
- without_home do
87
- expect { @run_mode.var_dir }.to raise_error ArgumentError, /couldn't find HOME/
88
- end
89
- end
68
+ it "has publicdir ~/.puppetlabs/opt/puppet/public when run as non-root" do
69
+ as_non_root { expect(@run_mode.public_dir).to eq(File.expand_path('~/.puppetlabs/opt/puppet/public')) }
90
70
  end
91
71
  end
92
72
 
@@ -101,14 +81,6 @@ describe Puppet::Util::RunMode do
101
81
  it "has default logdir ~/.puppetlabs/var/log" do
102
82
  as_non_root { expect(@run_mode.log_dir).to eq(File.expand_path('~/.puppetlabs/var/log')) }
103
83
  end
104
-
105
- it "fails when asking for the log_dir and there is no $HOME", :unless => gte_ruby_2_4 || Puppet::Util::Platform.windows? do
106
- as_non_root do
107
- without_home do
108
- expect { @run_mode.log_dir }.to raise_error ArgumentError, /couldn't find HOME/
109
- end
110
- end
111
- end
112
84
  end
113
85
  end
114
86
 
@@ -123,103 +95,59 @@ describe Puppet::Util::RunMode do
123
95
  it "has default rundir ~/.puppetlabs/var/run" do
124
96
  as_non_root { expect(@run_mode.run_dir).to eq(File.expand_path('~/.puppetlabs/var/run')) }
125
97
  end
126
-
127
- it "fails when asking for the run_dir and there is no $HOME", :unless => gte_ruby_2_4 || Puppet::Util::Platform.windows? do
128
- as_non_root do
129
- without_home do
130
- expect { @run_mode.run_dir }.to raise_error ArgumentError, /couldn't find HOME/
131
- end
132
- end
133
- end
134
98
  end
135
99
  end
136
100
  end
137
101
 
138
102
  describe Puppet::Util::WindowsRunMode, :if => Puppet::Util::Platform.windows? do
139
103
  before do
140
- if not Dir.const_defined? :COMMON_APPDATA
141
- Dir.const_set :COMMON_APPDATA, "/CommonFakeBase"
142
- @remove_const = true
143
- end
144
104
  @run_mode = Puppet::Util::WindowsRunMode.new('fake')
145
105
  end
146
106
 
147
- after do
148
- if @remove_const
149
- Dir.send :remove_const, :COMMON_APPDATA
150
- end
151
- end
152
-
153
107
  describe "#conf_dir" do
154
108
  it "has confdir ending in Puppetlabs/puppet/etc when run as root" do
155
- as_root { expect(@run_mode.conf_dir).to eq(File.expand_path(File.join(Dir::COMMON_APPDATA, "PuppetLabs", "puppet", "etc"))) }
109
+ as_root { expect(@run_mode.conf_dir).to eq(File.expand_path(File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "etc"))) }
156
110
  end
157
111
 
158
112
  it "has confdir in ~/.puppetlabs/etc/puppet when run as non-root" do
159
113
  as_non_root { expect(@run_mode.conf_dir).to eq(File.expand_path("~/.puppetlabs/etc/puppet")) }
160
114
  end
161
-
162
- it "fails when asking for the conf_dir as non-root and there is no %HOME%, %HOMEDRIVE%, and %USERPROFILE%", :unless => gte_ruby_2_4 do
163
- as_non_root do
164
- without_env('HOME') do
165
- without_env('HOMEDRIVE') do
166
- without_env('USERPROFILE') do
167
- expect { @run_mode.conf_dir }.to raise_error ArgumentError, /couldn't find HOME/
168
- end
169
- end
170
- end
171
- end
172
- end
173
115
  end
174
116
 
175
117
  describe "#code_dir" do
176
118
  it "has codedir ending in PuppetLabs/code when run as root" do
177
- as_root { expect(@run_mode.code_dir).to eq(File.expand_path(File.join(Dir::COMMON_APPDATA, "PuppetLabs", "code"))) }
119
+ as_root { expect(@run_mode.code_dir).to eq(File.expand_path(File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "code"))) }
178
120
  end
179
121
 
180
122
  it "has codedir in ~/.puppetlabs/etc/code when run as non-root" do
181
123
  as_non_root { expect(@run_mode.code_dir).to eq(File.expand_path("~/.puppetlabs/etc/code")) }
182
124
  end
183
-
184
- it "fails when asking for the code_dir as non-root and there is no %HOME%, %HOMEDRIVE%, and %USERPROFILE%", :unless => gte_ruby_2_4 do
185
- as_non_root do
186
- without_env('HOME') do
187
- without_env('HOMEDRIVE') do
188
- without_env('USERPROFILE') do
189
- expect { @run_mode.code_dir }.to raise_error ArgumentError, /couldn't find HOME/
190
- end
191
- end
192
- end
193
- end
194
- end
195
125
  end
196
126
 
197
127
  describe "#var_dir" do
198
128
  it "has vardir ending in PuppetLabs/puppet/cache when run as root" do
199
- as_root { expect(@run_mode.var_dir).to eq(File.expand_path(File.join(Dir::COMMON_APPDATA, "PuppetLabs", "puppet", "cache"))) }
129
+ as_root { expect(@run_mode.var_dir).to eq(File.expand_path(File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "cache"))) }
200
130
  end
201
131
 
202
132
  it "has vardir in ~/.puppetlabs/opt/puppet/cache when run as non-root" do
203
133
  as_non_root { expect(@run_mode.var_dir).to eq(File.expand_path("~/.puppetlabs/opt/puppet/cache")) }
204
134
  end
135
+ end
136
+
137
+ describe "#public_dir" do
138
+ it "has publicdir ending in PuppetLabs/puppet/public when run as root" do
139
+ as_root { expect(@run_mode.public_dir).to eq(File.expand_path(File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "public"))) }
140
+ end
205
141
 
206
- it "fails when asking for the conf_dir as non-root and there is no %HOME%, %HOMEDRIVE%, and %USERPROFILE%", :unless => gte_ruby_2_4 do
207
- as_non_root do
208
- without_env('HOME') do
209
- without_env('HOMEDRIVE') do
210
- without_env('USERPROFILE') do
211
- expect { @run_mode.var_dir }.to raise_error ArgumentError, /couldn't find HOME/
212
- end
213
- end
214
- end
215
- end
142
+ it "has publicdir in ~/.puppetlabs/opt/puppet/public when run as non-root" do
143
+ as_non_root { expect(@run_mode.public_dir).to eq(File.expand_path("~/.puppetlabs/opt/puppet/public")) }
216
144
  end
217
145
  end
218
146
 
219
147
  describe "#log_dir" do
220
148
  describe "when run as root" do
221
149
  it "has logdir ending in PuppetLabs/puppet/var/log" do
222
- as_root { expect(@run_mode.log_dir).to eq(File.expand_path(File.join(Dir::COMMON_APPDATA, "PuppetLabs", "puppet", "var", "log"))) }
150
+ as_root { expect(@run_mode.log_dir).to eq(File.expand_path(File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "var", "log"))) }
223
151
  end
224
152
  end
225
153
 
@@ -227,25 +155,13 @@ describe Puppet::Util::RunMode do
227
155
  it "has default logdir ~/.puppetlabs/var/log" do
228
156
  as_non_root { expect(@run_mode.log_dir).to eq(File.expand_path('~/.puppetlabs/var/log')) }
229
157
  end
230
-
231
- it "fails when asking for the log_dir and there is no $HOME", :unless => gte_ruby_2_4 do
232
- as_non_root do
233
- without_env('HOME') do
234
- without_env('HOMEDRIVE') do
235
- without_env('USERPROFILE') do
236
- expect { @run_mode.log_dir }.to raise_error ArgumentError, /couldn't find HOME/
237
- end
238
- end
239
- end
240
- end
241
- end
242
158
  end
243
159
  end
244
160
 
245
161
  describe "#run_dir" do
246
162
  describe "when run as root" do
247
163
  it "has rundir ending in PuppetLabs/puppet/var/run" do
248
- as_root { expect(@run_mode.run_dir).to eq(File.expand_path(File.join(Dir::COMMON_APPDATA, "PuppetLabs", "puppet", "var", "run"))) }
164
+ as_root { expect(@run_mode.run_dir).to eq(File.expand_path(File.join(ENV['ALLUSERSPROFILE'], "PuppetLabs", "puppet", "var", "run"))) }
249
165
  end
250
166
  end
251
167
 
@@ -253,18 +169,6 @@ describe Puppet::Util::RunMode do
253
169
  it "has default rundir ~/.puppetlabs/var/run" do
254
170
  as_non_root { expect(@run_mode.run_dir).to eq(File.expand_path('~/.puppetlabs/var/run')) }
255
171
  end
256
-
257
- it "fails when asking for the run_dir and there is no $HOME", :unless => gte_ruby_2_4 do
258
- as_non_root do
259
- without_env('HOME') do
260
- without_env('HOMEDRIVE') do
261
- without_env('USERPROFILE') do
262
- expect { @run_mode.run_dir }.to raise_error ArgumentError, /couldn't find HOME/
263
- end
264
- end
265
- end
266
- end
267
- end
268
172
  end
269
173
  end
270
174
 
@@ -310,8 +214,4 @@ describe Puppet::Util::RunMode do
310
214
  ensure
311
215
  Puppet::Util.set_env(name, saved)
312
216
  end
313
-
314
- def without_home(&block)
315
- without_env('HOME', &block)
316
- end
317
217
  end