puppet 6.23.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (581) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +16 -2
  3. data/Gemfile +1 -3
  4. data/Gemfile.lock +34 -46
  5. data/README.md +1 -1
  6. data/conf/fileserver.conf +5 -10
  7. data/ext/build_defaults.yaml +1 -1
  8. data/ext/osx/file_mapping.yaml +0 -5
  9. data/ext/osx/puppet.plist +0 -2
  10. data/ext/project_data.yaml +1 -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/application.rb +178 -108
  16. data/lib/puppet/application/agent.rb +4 -12
  17. data/lib/puppet/application/apply.rb +2 -4
  18. data/lib/puppet/application/device.rb +100 -106
  19. data/lib/puppet/application/filebucket.rb +13 -9
  20. data/lib/puppet/application/resource.rb +1 -2
  21. data/lib/puppet/application/script.rb +0 -2
  22. data/lib/puppet/application/ssl.rb +1 -12
  23. data/lib/puppet/application_support.rb +0 -7
  24. data/lib/puppet/configurer.rb +30 -45
  25. data/lib/puppet/configurer/downloader.rb +1 -2
  26. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  27. data/lib/puppet/defaults.rb +100 -192
  28. data/lib/puppet/environments.rb +60 -74
  29. data/lib/puppet/face/facts.rb +5 -103
  30. data/lib/puppet/face/help.rb +1 -1
  31. data/lib/puppet/face/plugin.rb +5 -8
  32. data/lib/puppet/ffi/windows.rb +12 -0
  33. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  34. data/lib/puppet/ffi/windows/constants.rb +404 -0
  35. data/lib/puppet/ffi/windows/functions.rb +628 -0
  36. data/lib/puppet/ffi/windows/structs.rb +338 -0
  37. data/lib/puppet/file_serving/configuration.rb +0 -5
  38. data/lib/puppet/file_serving/configuration/parser.rb +3 -32
  39. data/lib/puppet/file_serving/fileset.rb +2 -14
  40. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  41. data/lib/puppet/file_serving/mount.rb +1 -2
  42. data/lib/puppet/file_system/memory_file.rb +1 -8
  43. data/lib/puppet/file_system/windows.rb +0 -2
  44. data/lib/puppet/forge/repository.rb +0 -1
  45. data/lib/puppet/functions/all.rb +1 -1
  46. data/lib/puppet/functions/camelcase.rb +1 -1
  47. data/lib/puppet/functions/capitalize.rb +2 -2
  48. data/lib/puppet/functions/downcase.rb +2 -2
  49. data/lib/puppet/functions/get.rb +5 -5
  50. data/lib/puppet/functions/group_by.rb +5 -13
  51. data/lib/puppet/functions/lest.rb +1 -1
  52. data/lib/puppet/functions/new.rb +100 -100
  53. data/lib/puppet/functions/partition.rb +4 -12
  54. data/lib/puppet/functions/require.rb +5 -5
  55. data/lib/puppet/functions/sort.rb +3 -3
  56. data/lib/puppet/functions/tree_each.rb +9 -7
  57. data/lib/puppet/functions/type.rb +4 -4
  58. data/lib/puppet/functions/upcase.rb +2 -2
  59. data/lib/puppet/generate/models/type/type.rb +4 -1
  60. data/lib/puppet/http.rb +22 -13
  61. data/lib/puppet/http/client.rb +164 -114
  62. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  63. data/lib/puppet/http/errors.rb +16 -0
  64. data/lib/puppet/http/external_client.rb +5 -7
  65. data/lib/puppet/{network/http → http}/factory.rb +8 -15
  66. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  67. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  68. data/lib/puppet/http/proxy.rb +137 -0
  69. data/lib/puppet/http/redirector.rb +4 -12
  70. data/lib/puppet/http/resolver.rb +5 -15
  71. data/lib/puppet/http/resolver/server_list.rb +10 -25
  72. data/lib/puppet/http/resolver/settings.rb +4 -7
  73. data/lib/puppet/http/resolver/srv.rb +7 -11
  74. data/lib/puppet/http/response.rb +36 -54
  75. data/lib/puppet/http/response_converter.rb +24 -0
  76. data/lib/puppet/http/response_net_http.rb +42 -0
  77. data/lib/puppet/http/retry_after_handler.rb +4 -13
  78. data/lib/puppet/http/service.rb +12 -26
  79. data/lib/puppet/http/service/ca.rb +11 -22
  80. data/lib/puppet/http/service/compiler.rb +22 -138
  81. data/lib/puppet/http/service/file_server.rb +19 -29
  82. data/lib/puppet/http/service/puppetserver.rb +26 -12
  83. data/lib/puppet/http/service/report.rb +8 -10
  84. data/lib/puppet/http/session.rb +11 -20
  85. data/lib/puppet/{network/http → http}/site.rb +1 -2
  86. data/lib/puppet/indirector/catalog/compiler.rb +0 -1
  87. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  88. data/lib/puppet/indirector/facts/rest.rb +3 -22
  89. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  90. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  91. data/lib/puppet/indirector/file_metadata/rest.rb +3 -10
  92. data/lib/puppet/indirector/file_server.rb +1 -8
  93. data/lib/puppet/indirector/generic_http.rb +0 -11
  94. data/lib/puppet/indirector/node/rest.rb +2 -4
  95. data/lib/puppet/indirector/report/rest.rb +3 -8
  96. data/lib/puppet/indirector/request.rb +0 -101
  97. data/lib/puppet/indirector/rest.rb +12 -263
  98. data/lib/puppet/module_tool/applications.rb +0 -1
  99. data/lib/puppet/module_tool/applications/installer.rb +2 -48
  100. data/lib/puppet/module_tool/errors/shared.rb +2 -17
  101. data/lib/puppet/network/authconfig.rb +2 -96
  102. data/lib/puppet/network/authorization.rb +13 -35
  103. data/lib/puppet/network/formats.rb +0 -67
  104. data/lib/puppet/network/http.rb +3 -3
  105. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  106. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  107. data/lib/puppet/network/http/connection.rb +247 -316
  108. data/lib/puppet/network/http/handler.rb +0 -1
  109. data/lib/puppet/network/http_pool.rb +16 -34
  110. data/lib/puppet/node.rb +1 -30
  111. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  112. data/lib/puppet/pal/pal_impl.rb +3 -1
  113. data/lib/puppet/parser/ast/leaf.rb +2 -3
  114. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  115. data/lib/puppet/parser/compiler.rb +0 -198
  116. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  117. data/lib/puppet/parser/functions/fqdn_rand.rb +6 -14
  118. data/lib/puppet/parser/resource.rb +0 -69
  119. data/lib/puppet/parser/templatewrapper.rb +1 -1
  120. data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -5
  121. data/lib/puppet/pops/evaluator/evaluator_impl.rb +0 -5
  122. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  123. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  124. data/lib/puppet/pops/issues.rb +0 -5
  125. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  126. data/lib/puppet/pops/model/ast.pp +0 -42
  127. data/lib/puppet/pops/model/ast.rb +0 -290
  128. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  129. data/lib/puppet/pops/model/factory.rb +0 -45
  130. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  131. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  132. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  133. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  134. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  135. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  136. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  137. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  138. data/lib/puppet/pops/types/p_sem_ver_type.rb +2 -8
  139. data/lib/puppet/pops/types/p_sensitive_type.rb +0 -10
  140. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  141. data/lib/puppet/pops/types/type_parser.rb +0 -4
  142. data/lib/puppet/pops/types/types.rb +0 -1
  143. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  144. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  145. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  146. data/lib/puppet/property/list.rb +1 -1
  147. data/lib/puppet/provider.rb +0 -13
  148. data/lib/puppet/provider/group/groupadd.rb +8 -13
  149. data/lib/puppet/provider/nameservice.rb +0 -18
  150. data/lib/puppet/provider/package/apt.rb +2 -34
  151. data/lib/puppet/provider/package/aptitude.rb +0 -6
  152. data/lib/puppet/provider/package/dnfmodule.rb +1 -1
  153. data/lib/puppet/provider/package/dpkg.rb +0 -10
  154. data/lib/puppet/provider/package/gem.rb +23 -3
  155. data/lib/puppet/provider/package/nim.rb +6 -11
  156. data/lib/puppet/provider/package/pip.rb +0 -1
  157. data/lib/puppet/provider/package/pkg.rb +0 -4
  158. data/lib/puppet/provider/package/portage.rb +1 -1
  159. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  160. data/lib/puppet/provider/service/debian.rb +0 -2
  161. data/lib/puppet/provider/service/smf.rb +191 -73
  162. data/lib/puppet/provider/service/systemd.rb +4 -14
  163. data/lib/puppet/provider/service/windows.rb +0 -38
  164. data/lib/puppet/provider/user/aix.rb +2 -2
  165. data/lib/puppet/provider/user/directoryservice.rb +10 -33
  166. data/lib/puppet/provider/user/useradd.rb +8 -62
  167. data/lib/puppet/reference/configuration.rb +8 -7
  168. data/lib/puppet/reference/indirection.rb +1 -1
  169. data/lib/puppet/resource.rb +1 -89
  170. data/lib/puppet/resource/catalog.rb +1 -14
  171. data/lib/puppet/resource/type.rb +3 -119
  172. data/lib/puppet/resource/type_collection.rb +3 -48
  173. data/lib/puppet/runtime.rb +1 -2
  174. data/lib/puppet/settings.rb +73 -66
  175. data/lib/puppet/settings/environment_conf.rb +0 -1
  176. data/lib/puppet/settings/integer_setting.rb +17 -0
  177. data/lib/puppet/settings/port_setting.rb +15 -0
  178. data/lib/puppet/settings/priority_setting.rb +5 -4
  179. data/lib/puppet/ssl.rb +10 -6
  180. data/lib/puppet/ssl/base.rb +3 -5
  181. data/lib/puppet/ssl/certificate.rb +0 -6
  182. data/lib/puppet/ssl/certificate_request.rb +1 -12
  183. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  184. data/lib/puppet/ssl/oids.rb +3 -1
  185. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  186. data/lib/puppet/ssl/state_machine.rb +3 -1
  187. data/lib/puppet/ssl/verifier.rb +2 -0
  188. data/lib/puppet/test/test_helper.rb +1 -3
  189. data/lib/puppet/transaction.rb +1 -7
  190. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  191. data/lib/puppet/transaction/report.rb +2 -4
  192. data/lib/puppet/type.rb +0 -76
  193. data/lib/puppet/type/file.rb +6 -26
  194. data/lib/puppet/type/file/checksum.rb +1 -1
  195. data/lib/puppet/type/file/selcontext.rb +1 -1
  196. data/lib/puppet/type/file/source.rb +1 -1
  197. data/lib/puppet/type/filebucket.rb +3 -3
  198. data/lib/puppet/type/package.rb +8 -16
  199. data/lib/puppet/type/service.rb +38 -18
  200. data/lib/puppet/type/tidy.rb +2 -21
  201. data/lib/puppet/type/user.rb +20 -38
  202. data/lib/puppet/util/autoload.rb +8 -1
  203. data/lib/puppet/util/execution.rb +0 -11
  204. data/lib/puppet/util/http_proxy.rb +2 -215
  205. data/lib/puppet/util/monkey_patches.rb +0 -53
  206. data/lib/puppet/util/posix.rb +5 -54
  207. data/lib/puppet/util/rdoc.rb +0 -7
  208. data/lib/puppet/util/retry_action.rb +1 -1
  209. data/lib/puppet/util/run_mode.rb +9 -1
  210. data/lib/puppet/util/selinux.rb +4 -30
  211. data/lib/puppet/util/windows.rb +3 -8
  212. data/lib/puppet/util/windows/adsi.rb +0 -46
  213. data/lib/puppet/util/windows/daemon.rb +360 -0
  214. data/lib/puppet/util/windows/error.rb +1 -0
  215. data/lib/puppet/util/windows/eventlog.rb +4 -9
  216. data/lib/puppet/util/windows/file.rb +8 -242
  217. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  218. data/lib/puppet/util/windows/principal.rb +2 -9
  219. data/lib/puppet/util/windows/process.rb +4 -226
  220. data/lib/puppet/util/windows/service.rb +9 -460
  221. data/lib/puppet/util/windows/sid.rb +2 -4
  222. data/lib/puppet/util/windows/string.rb +12 -13
  223. data/lib/puppet/util/yaml.rb +0 -22
  224. data/lib/puppet/vendor/require_vendored.rb +0 -1
  225. data/lib/puppet/version.rb +1 -1
  226. data/lib/puppet/x509.rb +5 -1
  227. data/lib/puppet/x509/cert_provider.rb +29 -1
  228. data/locales/puppet.pot +651 -1436
  229. data/man/man5/puppet.conf.5 +266 -354
  230. data/man/man8/puppet-agent.8 +2 -2
  231. data/man/man8/puppet-apply.8 +2 -2
  232. data/man/man8/puppet-catalog.8 +1 -1
  233. data/man/man8/puppet-config.8 +1 -1
  234. data/man/man8/puppet-describe.8 +1 -1
  235. data/man/man8/puppet-device.8 +2 -2
  236. data/man/man8/puppet-doc.8 +1 -1
  237. data/man/man8/puppet-epp.8 +1 -1
  238. data/man/man8/puppet-facts.8 +4 -47
  239. data/man/man8/puppet-filebucket.8 +4 -4
  240. data/man/man8/puppet-generate.8 +1 -1
  241. data/man/man8/puppet-help.8 +1 -1
  242. data/man/man8/puppet-lookup.8 +1 -1
  243. data/man/man8/puppet-module.8 +1 -58
  244. data/man/man8/puppet-node.8 +1 -1
  245. data/man/man8/puppet-parser.8 +1 -1
  246. data/man/man8/puppet-plugin.8 +1 -1
  247. data/man/man8/puppet-report.8 +1 -1
  248. data/man/man8/puppet-resource.8 +1 -1
  249. data/man/man8/puppet-script.8 +2 -2
  250. data/man/man8/puppet-ssl.8 +1 -5
  251. data/man/man8/puppet.8 +2 -2
  252. data/spec/fixtures/ssl/127.0.0.1-key.pem +57 -107
  253. data/spec/fixtures/ssl/127.0.0.1.pem +31 -52
  254. data/spec/fixtures/ssl/bad-basic-constraints.pem +35 -57
  255. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +35 -57
  256. data/spec/fixtures/ssl/ca.pem +35 -57
  257. data/spec/fixtures/ssl/crl.pem +18 -28
  258. data/spec/fixtures/ssl/ec-key.pem +11 -11
  259. data/spec/fixtures/ssl/ec.pem +24 -33
  260. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  261. data/spec/fixtures/ssl/encrypted-key.pem +58 -108
  262. data/spec/fixtures/ssl/intermediate-agent-crl.pem +19 -28
  263. data/spec/fixtures/ssl/intermediate-agent.pem +36 -57
  264. data/spec/fixtures/ssl/intermediate-crl.pem +21 -31
  265. data/spec/fixtures/ssl/intermediate.pem +36 -57
  266. data/spec/fixtures/ssl/pluto-key.pem +57 -107
  267. data/spec/fixtures/ssl/pluto.pem +30 -52
  268. data/spec/fixtures/ssl/request-key.pem +57 -107
  269. data/spec/fixtures/ssl/request.pem +26 -47
  270. data/spec/fixtures/ssl/revoked-key.pem +57 -107
  271. data/spec/fixtures/ssl/revoked.pem +30 -52
  272. data/spec/fixtures/ssl/signed-key.pem +57 -107
  273. data/spec/fixtures/ssl/signed.pem +30 -52
  274. data/spec/fixtures/ssl/tampered-cert.pem +30 -52
  275. data/spec/fixtures/ssl/tampered-csr.pem +26 -47
  276. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +57 -107
  277. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +29 -50
  278. data/spec/fixtures/ssl/unknown-ca-key.pem +57 -107
  279. data/spec/fixtures/ssl/unknown-ca.pem +33 -55
  280. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  281. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +0 -4
  282. data/spec/integration/application/agent_spec.rb +27 -171
  283. data/spec/integration/application/apply_spec.rb +1 -20
  284. data/spec/integration/application/filebucket_spec.rb +16 -16
  285. data/spec/integration/application/help_spec.rb +2 -0
  286. data/spec/integration/application/plugin_spec.rb +24 -2
  287. data/spec/integration/defaults_spec.rb +14 -3
  288. data/spec/integration/http/client_spec.rb +0 -12
  289. data/spec/integration/indirector/direct_file_server_spec.rb +3 -1
  290. data/spec/integration/network/http_pool_spec.rb +3 -21
  291. data/spec/integration/parser/catalog_spec.rb +0 -38
  292. data/spec/integration/parser/node_spec.rb +0 -9
  293. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  294. data/spec/integration/resource/type_collection_spec.rb +6 -2
  295. data/spec/integration/transaction_spec.rb +9 -4
  296. data/spec/integration/type/file_spec.rb +5 -4
  297. data/spec/integration/util/windows/adsi_spec.rb +1 -21
  298. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  299. data/spec/integration/util/windows/principal_spec.rb +0 -21
  300. data/spec/integration/util/windows/registry_spec.rb +10 -6
  301. data/spec/integration/util/windows/security_spec.rb +1 -1
  302. data/spec/lib/matchers/include.rb +27 -0
  303. data/spec/lib/matchers/include_spec.rb +32 -0
  304. data/spec/lib/puppet/test_ca.rb +2 -2
  305. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  306. data/spec/lib/puppet_spec/settings.rb +1 -0
  307. data/spec/spec_helper.rb +7 -12
  308. data/spec/unit/agent_spec.rb +6 -10
  309. data/spec/unit/application/agent_spec.rb +3 -7
  310. data/spec/unit/application/facts_spec.rb +12 -456
  311. data/spec/unit/application/filebucket_spec.rb +43 -39
  312. data/spec/unit/application/ssl_spec.rb +2 -25
  313. data/spec/unit/application_spec.rb +9 -51
  314. data/spec/unit/certificate_factory_spec.rb +1 -1
  315. data/spec/unit/configurer/downloader_spec.rb +6 -8
  316. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  317. data/spec/unit/configurer_spec.rb +12 -32
  318. data/spec/unit/confine/feature_spec.rb +1 -1
  319. data/spec/unit/confine_spec.rb +2 -8
  320. data/spec/unit/context/trusted_information_spec.rb +2 -6
  321. data/spec/unit/defaults_spec.rb +68 -54
  322. data/spec/unit/environments_spec.rb +68 -224
  323. data/spec/unit/face/node_spec.rb +11 -0
  324. data/spec/unit/face/plugin_spec.rb +73 -33
  325. data/spec/unit/file_bucket/file_spec.rb +1 -1
  326. data/spec/unit/file_serving/configuration/parser_spec.rb +15 -18
  327. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  328. data/spec/unit/file_serving/fileset_spec.rb +0 -60
  329. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  330. data/spec/unit/file_serving/terminus_helper_spec.rb +4 -11
  331. data/spec/unit/file_system_spec.rb +0 -9
  332. data/spec/unit/forge/module_release_spec.rb +7 -2
  333. data/spec/unit/functions/camelcase_spec.rb +1 -1
  334. data/spec/unit/functions/capitalize_spec.rb +1 -1
  335. data/spec/unit/functions/downcase_spec.rb +1 -1
  336. data/spec/unit/functions/upcase_spec.rb +1 -1
  337. data/spec/unit/gettext/config_spec.rb +0 -12
  338. data/spec/unit/http/client_spec.rb +7 -8
  339. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  340. data/spec/unit/http/external_client_spec.rb +4 -4
  341. data/spec/unit/{network/http → http}/factory_spec.rb +5 -30
  342. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  343. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  344. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  345. data/spec/unit/http/resolver_spec.rb +13 -13
  346. data/spec/unit/http/service/compiler_spec.rb +0 -185
  347. data/spec/unit/http/service/file_server_spec.rb +3 -3
  348. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  349. data/spec/unit/http/service_spec.rb +0 -1
  350. data/spec/unit/http/session_spec.rb +16 -14
  351. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  352. data/spec/unit/indirector/catalog/compiler_spec.rb +10 -14
  353. data/spec/unit/indirector/face_spec.rb +1 -0
  354. data/spec/unit/indirector/facts/facter_spec.rb +3 -0
  355. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  356. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +8 -26
  357. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  358. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  359. data/spec/unit/indirector/file_server_spec.rb +1 -15
  360. data/spec/unit/indirector/indirection_spec.rb +12 -8
  361. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  362. data/spec/unit/indirector/request_spec.rb +0 -264
  363. data/spec/unit/indirector/rest_spec.rb +98 -752
  364. data/spec/unit/indirector_spec.rb +2 -2
  365. data/spec/unit/module_tool/applications/installer_spec.rb +0 -66
  366. data/spec/unit/network/authconfig_spec.rb +2 -129
  367. data/spec/unit/network/authorization_spec.rb +2 -55
  368. data/spec/unit/network/formats_spec.rb +4 -45
  369. data/spec/unit/network/http/api/indirected_routes_spec.rb +5 -92
  370. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  371. data/spec/unit/network/http/api_spec.rb +10 -0
  372. data/spec/unit/network/http/connection_spec.rb +19 -41
  373. data/spec/unit/network/http/handler_spec.rb +0 -1
  374. data/spec/unit/network/http_pool_spec.rb +0 -4
  375. data/spec/unit/node/environment_spec.rb +33 -21
  376. data/spec/unit/node_spec.rb +2 -54
  377. data/spec/unit/parser/compiler_spec.rb +19 -3
  378. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  379. data/spec/unit/parser/functions/fqdn_rand_spec.rb +1 -15
  380. data/spec/unit/parser/resource_spec.rb +8 -14
  381. data/spec/unit/parser/templatewrapper_spec.rb +3 -4
  382. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  383. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  384. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  385. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  386. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  387. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  388. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  389. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  390. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +0 -18
  391. data/spec/unit/pops/types/p_sensitive_type_spec.rb +0 -18
  392. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  393. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  394. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  395. data/spec/unit/pops/visitor_spec.rb +1 -1
  396. data/spec/unit/property_spec.rb +0 -1
  397. data/spec/unit/provider/group/groupadd_spec.rb +2 -5
  398. data/spec/unit/provider/nameservice_spec.rb +64 -122
  399. data/spec/unit/provider/package/apt_spec.rb +23 -28
  400. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  401. data/spec/unit/provider/package/base_spec.rb +5 -6
  402. data/spec/unit/provider/package/dnfmodule_spec.rb +1 -10
  403. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  404. data/spec/unit/provider/package/gem_spec.rb +32 -0
  405. data/spec/unit/provider/package/nim_spec.rb +0 -42
  406. data/spec/unit/provider/package/pacman_spec.rb +12 -18
  407. data/spec/unit/provider/package/pip_spec.rb +11 -6
  408. data/spec/unit/provider/package/pkgdmg_spec.rb +4 -0
  409. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  410. data/spec/unit/provider/service/init_spec.rb +0 -1
  411. data/spec/unit/provider/service/openwrt_spec.rb +1 -3
  412. data/spec/unit/provider/service/smf_spec.rb +401 -165
  413. data/spec/unit/provider/service/systemd_spec.rb +8 -53
  414. data/spec/unit/provider/service/windows_spec.rb +0 -203
  415. data/spec/unit/provider/user/aix_spec.rb +0 -5
  416. data/spec/unit/provider/user/directoryservice_spec.rb +35 -67
  417. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  418. data/spec/unit/provider/user/pw_spec.rb +0 -2
  419. data/spec/unit/provider/user/useradd_spec.rb +3 -71
  420. data/spec/unit/provider_spec.rb +8 -18
  421. data/spec/unit/resource/catalog_spec.rb +1 -1
  422. data/spec/unit/resource/type_collection_spec.rb +2 -22
  423. data/spec/unit/resource/type_spec.rb +1 -1
  424. data/spec/unit/resource_spec.rb +10 -67
  425. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  426. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  427. data/spec/unit/settings/port_setting_spec.rb +31 -0
  428. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  429. data/spec/unit/settings_spec.rb +23 -13
  430. data/spec/unit/ssl/base_spec.rb +37 -3
  431. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  432. data/spec/unit/ssl/certificate_spec.rb +2 -11
  433. data/spec/unit/ssl/ssl_provider_spec.rb +2 -5
  434. data/spec/unit/ssl/state_machine_spec.rb +5 -20
  435. data/spec/unit/ssl/verifier_spec.rb +0 -21
  436. data/spec/unit/transaction/additional_resource_generator_spec.rb +9 -3
  437. data/spec/unit/transaction/event_manager_spec.rb +11 -14
  438. data/spec/unit/transaction/report_spec.rb +0 -2
  439. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  440. data/spec/unit/transaction_spec.rb +55 -96
  441. data/spec/unit/type/file/checksum_spec.rb +6 -6
  442. data/spec/unit/type/file/content_spec.rb +2 -1
  443. data/spec/unit/type/file/ensure_spec.rb +1 -1
  444. data/spec/unit/type/file/mode_spec.rb +1 -1
  445. data/spec/unit/type/file/selinux_spec.rb +5 -3
  446. data/spec/unit/type/file/source_spec.rb +0 -1
  447. data/spec/unit/type/file_spec.rb +18 -6
  448. data/spec/unit/type/group_spec.rb +6 -13
  449. data/spec/unit/type/package_spec.rb +1 -1
  450. data/spec/unit/type/resources_spec.rb +7 -7
  451. data/spec/unit/type/service_spec.rb +189 -60
  452. data/spec/unit/type/tidy_spec.rb +8 -17
  453. data/spec/unit/type/user_spec.rb +0 -45
  454. data/spec/unit/type_spec.rb +22 -2
  455. data/spec/unit/util/at_fork_spec.rb +2 -2
  456. data/spec/unit/util/autoload_spec.rb +1 -5
  457. data/spec/unit/util/backups_spec.rb +2 -3
  458. data/spec/unit/util/execution_spec.rb +11 -44
  459. data/spec/unit/util/inifile_spec.rb +14 -6
  460. data/spec/unit/util/log_spec.rb +7 -8
  461. data/spec/unit/util/logging_spec.rb +3 -3
  462. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  463. data/spec/unit/util/posix_spec.rb +15 -363
  464. data/spec/unit/util/run_mode_spec.rb +21 -121
  465. data/spec/unit/util/selinux_spec.rb +68 -163
  466. data/spec/unit/util/storage_spec.rb +1 -3
  467. data/spec/unit/util/suidmanager_spec.rb +41 -44
  468. data/spec/unit/util/windows/sid_spec.rb +0 -6
  469. data/spec/unit/util/windows/string_spec.rb +1 -3
  470. data/spec/unit/util/yaml_spec.rb +0 -54
  471. data/spec/unit/util_spec.rb +6 -31
  472. data/tasks/generate_cert_fixtures.rake +2 -2
  473. metadata +44 -181
  474. data/conf/auth.conf +0 -150
  475. data/lib/puppet/application/cert.rb +0 -76
  476. data/lib/puppet/application/key.rb +0 -4
  477. data/lib/puppet/application/man.rb +0 -4
  478. data/lib/puppet/application/status.rb +0 -4
  479. data/lib/puppet/face/key.rb +0 -16
  480. data/lib/puppet/face/man.rb +0 -145
  481. data/lib/puppet/face/module/build.rb +0 -14
  482. data/lib/puppet/face/module/generate.rb +0 -14
  483. data/lib/puppet/face/module/search.rb +0 -103
  484. data/lib/puppet/face/status.rb +0 -51
  485. data/lib/puppet/ffi/posix.rb +0 -10
  486. data/lib/puppet/ffi/posix/constants.rb +0 -14
  487. data/lib/puppet/ffi/posix/functions.rb +0 -24
  488. data/lib/puppet/indirector/certificate/file.rb +0 -9
  489. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  490. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  491. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  492. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  493. data/lib/puppet/indirector/file_content/http.rb +0 -22
  494. data/lib/puppet/indirector/key/file.rb +0 -46
  495. data/lib/puppet/indirector/key/memory.rb +0 -7
  496. data/lib/puppet/indirector/ssl_file.rb +0 -162
  497. data/lib/puppet/indirector/status.rb +0 -3
  498. data/lib/puppet/indirector/status/local.rb +0 -12
  499. data/lib/puppet/indirector/status/rest.rb +0 -27
  500. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  501. data/lib/puppet/network/auth_config_parser.rb +0 -90
  502. data/lib/puppet/network/authstore.rb +0 -283
  503. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  504. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  505. data/lib/puppet/network/http/base_pool.rb +0 -36
  506. data/lib/puppet/network/http/compression.rb +0 -127
  507. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  508. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  509. data/lib/puppet/network/rest_controller.rb +0 -2
  510. data/lib/puppet/network/rights.rb +0 -210
  511. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  512. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  513. data/lib/puppet/parser/environment_compiler.rb +0 -202
  514. data/lib/puppet/pops/types/enumeration.rb +0 -16
  515. data/lib/puppet/resource/capability_finder.rb +0 -154
  516. data/lib/puppet/rest/errors.rb +0 -15
  517. data/lib/puppet/rest/response.rb +0 -35
  518. data/lib/puppet/rest/route.rb +0 -85
  519. data/lib/puppet/rest/routes.rb +0 -135
  520. data/lib/puppet/settings/alias_setting.rb +0 -37
  521. data/lib/puppet/ssl/host.rb +0 -505
  522. data/lib/puppet/ssl/key.rb +0 -61
  523. data/lib/puppet/ssl/validator.rb +0 -61
  524. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  525. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  526. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  527. data/lib/puppet/status.rb +0 -40
  528. data/lib/puppet/util/connection.rb +0 -88
  529. data/lib/puppet/util/fact_dif.rb +0 -81
  530. data/lib/puppet/util/ssl.rb +0 -83
  531. data/lib/puppet/util/windows/api_types.rb +0 -309
  532. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  533. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  534. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  535. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  536. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  537. data/lib/puppet/vendor/pathspec/README.md +0 -53
  538. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  539. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  540. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  541. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  542. data/man/man8/puppet-key.8 +0 -126
  543. data/man/man8/puppet-man.8 +0 -76
  544. data/man/man8/puppet-status.8 +0 -108
  545. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +0 -91
  546. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +0 -9
  547. data/spec/integration/application/resource_spec.rb +0 -30
  548. data/spec/integration/network/authconfig_spec.rb +0 -256
  549. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  550. data/spec/unit/application/man_spec.rb +0 -52
  551. data/spec/unit/capability_spec.rb +0 -414
  552. data/spec/unit/face/key_spec.rb +0 -9
  553. data/spec/unit/face/module/search_spec.rb +0 -231
  554. data/spec/unit/face/status_spec.rb +0 -9
  555. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  556. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  557. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  558. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  559. data/spec/unit/indirector/key/file_spec.rb +0 -78
  560. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  561. data/spec/unit/indirector/status/local_spec.rb +0 -10
  562. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  563. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  564. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  565. data/spec/unit/network/authstore_spec.rb +0 -422
  566. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  567. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  568. data/spec/unit/network/http/compression_spec.rb +0 -240
  569. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  570. data/spec/unit/network/http_spec.rb +0 -9
  571. data/spec/unit/network/rights_spec.rb +0 -439
  572. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  573. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +0 -20
  574. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  575. data/spec/unit/resource/capability_finder_spec.rb +0 -148
  576. data/spec/unit/rest/route_spec.rb +0 -132
  577. data/spec/unit/ssl/host_spec.rb +0 -645
  578. data/spec/unit/ssl/key_spec.rb +0 -173
  579. data/spec/unit/ssl/validator_spec.rb +0 -278
  580. data/spec/unit/status_spec.rb +0 -45
  581. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -191,31 +191,22 @@ describe tidy do
191
191
  describe "and recursion is used" do
192
192
  before do
193
193
  @tidy[:recurse] = true
194
+ allow_any_instance_of(Puppet::FileServing::Fileset).to receive(:stat).and_return(double("stat"))
194
195
  @fileset = Puppet::FileServing::Fileset.new(@basepath)
195
196
  allow(Puppet::FileServing::Fileset).to receive(:new).and_return(@fileset)
196
197
  end
197
198
 
198
- it "should use a Fileset with default max_files for infinite recursion" do
199
- expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true, :max_files=>0).and_return(@fileset)
199
+ it "should use a Fileset for infinite recursion" do
200
+ expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true).and_return(@fileset)
200
201
  expect(@fileset).to receive(:files).and_return(%w{. one two})
201
202
  allow(@tidy).to receive(:tidy?).and_return(false)
202
203
 
203
204
  @tidy.generate
204
205
  end
205
206
 
206
- it "should use a Fileset with default max_files for limited recursion" do
207
+ it "should use a Fileset for limited recursion" do
207
208
  @tidy[:recurse] = 42
208
- expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true, :recurselimit => 42, :max_files=>0).and_return(@fileset)
209
- expect(@fileset).to receive(:files).and_return(%w{. one two})
210
- allow(@tidy).to receive(:tidy?).and_return(false)
211
-
212
- @tidy.generate
213
- end
214
-
215
- it "should use a Fileset with max_files for limited recursion" do
216
- @tidy[:recurse] = 42
217
- @tidy[:max_files] = 9876
218
- expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true, :recurselimit => 42, :max_files=>9876).and_return(@fileset)
209
+ expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true, :recurselimit => 42).and_return(@fileset)
219
210
  expect(@fileset).to receive(:files).and_return(%w{. one two})
220
211
  allow(@tidy).to receive(:tidy?).and_return(false)
221
212
 
@@ -421,7 +412,7 @@ describe tidy do
421
412
  @tidy[:recurse] = true
422
413
  @tidy[:rmdirs] = true
423
414
  fileset = double('fileset')
424
- expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true, :max_files=>0).and_return(fileset)
415
+ expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true).and_return(fileset)
425
416
  expect(fileset).to receive(:files).and_return(%w{. one two one/subone two/subtwo one/subone/ssone})
426
417
  allow(@tidy).to receive(:tidy?).and_return(true)
427
418
 
@@ -443,7 +434,7 @@ describe tidy do
443
434
  @tidy[:recurse] = true
444
435
  @tidy[:rmdirs] = true
445
436
  fileset = double('fileset')
446
- expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true, :max_files=>0).and_return(fileset)
437
+ expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true).and_return(fileset)
447
438
  expect(fileset).to receive(:files).and_return(%w{. a a/2 a/1 a/3})
448
439
  allow(@tidy).to receive(:tidy?).and_return(true)
449
440
 
@@ -456,7 +447,7 @@ describe tidy do
456
447
  @tidy[:noop] = true
457
448
 
458
449
  fileset = double('fileset')
459
- expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true, :max_files=>0).and_return(fileset)
450
+ expect(Puppet::FileServing::Fileset).to receive(:new).with(@basepath, :recurse => true).and_return(fileset)
460
451
  expect(fileset).to receive(:files).and_return(%w{. a a/2 a/1 a/3})
461
452
  allow(@tidy).to receive(:tidy?).and_return(true)
462
453
 
@@ -174,51 +174,6 @@ describe Puppet::Type.type(:user) do
174
174
  end
175
175
  end
176
176
 
177
- describe "when managing the purge_ssh_keys property" do
178
- context "with valid input" do
179
- it "should support a :true value" do
180
- expect { described_class.new(:name => 'foo', :purge_ssh_keys => :true) }.to_not raise_error
181
- end
182
-
183
- it "should support a :false value" do
184
- expect { described_class.new(:name => 'foo', :purge_ssh_keys => :false) }.to_not raise_error
185
- end
186
-
187
- it "should support a String value" do
188
- expect { described_class.new(:name => 'foo', :purge_ssh_keys => File.expand_path('home/foo/.ssh/authorized_keys')) }.to_not raise_error
189
- end
190
-
191
- it "should support an Array value" do
192
- expect { described_class.new(:name => 'foo', :purge_ssh_keys => [File.expand_path('home/foo/.ssh/authorized_keys'),
193
- File.expand_path('custom/authorized_keys')]) }.to_not raise_error
194
- end
195
- end
196
-
197
- context "with faulty input" do
198
- it "should raise error for relative path" do
199
- expect { described_class.new(:name => 'foo', :purge_ssh_keys => 'home/foo/.ssh/authorized_keys') }.to raise_error(Puppet::ResourceError,
200
- /Paths to keyfiles must be absolute/ )
201
- end
202
-
203
- it "should raise error for invalid type" do
204
- expect { described_class.new(:name => 'foo', :purge_ssh_keys => :invalid) }.to raise_error(Puppet::ResourceError,
205
- /purge_ssh_keys must be true, false, or an array of file names/ )
206
- end
207
-
208
- it "should raise error for array with relative path" do
209
- expect { described_class.new(:name => 'foo', :purge_ssh_keys => ['home/foo/.ssh/authorized_keys',
210
- File.expand_path('custom/authorized_keys')]) }.to raise_error(Puppet::ResourceError,
211
- /Paths to keyfiles must be absolute/ )
212
- end
213
-
214
- it "should raise error for array with invalid type" do
215
- expect { described_class.new(:name => 'foo', :purge_ssh_keys => [:invalid,
216
- File.expand_path('custom/authorized_keys')]) }.to raise_error(Puppet::ResourceError,
217
- /Each entry for purge_ssh_keys must be a string/ )
218
- end
219
- end
220
- end
221
-
222
177
  describe "when managing the uid property" do
223
178
  it "should convert number-looking strings into actual numbers" do
224
179
  expect(described_class.new(:name => 'foo', :uid => '50')[:uid]).to eq(50)
@@ -195,6 +195,26 @@ describe Puppet::Type, :unless => Puppet::Util::Platform.windows? do
195
195
  end
196
196
  end
197
197
 
198
+ context 'aliased resource' do
199
+ it 'fails if a resource is defined and then redefined using name that results in the same alias' do
200
+ drive = Puppet::Util::Platform.windows? ? 'C:' : ''
201
+ code = <<~PUPPET
202
+ $dir='#{drive}/tmp/test'
203
+ $same_dir='#{drive}/tmp/test/'
204
+
205
+ file {$dir:
206
+ ensure => directory
207
+ }
208
+
209
+ file { $same_dir:
210
+ ensure => directory
211
+ }
212
+ PUPPET
213
+
214
+ expect { compile_to_ral(code) }.to raise_error(/resource \["File", "#{drive}\/tmp\/test"\] already declared/)
215
+ end
216
+ end
217
+
198
218
  context "resource attributes" do
199
219
  let(:resource) {
200
220
  resource = klass.new(:name => "foo")
@@ -912,8 +932,8 @@ describe Puppet::Type, :unless => Puppet::Util::Platform.windows? do
912
932
 
913
933
  it "should always retrieve the ensure value by default" do
914
934
  @ensurable_resource = Puppet::Type.type(:file).new(:name => "/not/existent", :mode => "0644")
915
- # the ensure property is lazily metaprogrammed...
916
- allow_any_instance_of(Puppet::Type::File::Ensure).to receive(:retrieve).and_return(:absent)
935
+ allow(Puppet::Type::File::Ensure).to receive(:ensure).and_return(:absent)
936
+ expect_any_instance_of(Puppet::Type::File::Ensure).to receive(:retrieve).once
917
937
  @ensurable_resource.retrieve_resource
918
938
  end
919
939
 
@@ -50,8 +50,8 @@ describe 'Puppet::Util::AtFork' do
50
50
  const_set(:TYPE_VOID, nil)
51
51
  const_set(:TYPE_INT, nil)
52
52
  const_set(:DLError, Class.new(StandardError))
53
- const_set(:Handle, Class.new { def initialize(library = nil, flags = 0); end })
54
- const_set(:Function, Class.new { def initialize(ptr, args, ret_type, abi = 0); end })
53
+ const_set(:Handle, Class.new)
54
+ const_set(:Function, Class.new)
55
55
  end)
56
56
  end
57
57
  end
@@ -157,7 +157,7 @@ describe Puppet::Util::Autoload do
157
157
  end
158
158
 
159
159
  it "should load the first file in the searchpath" do
160
- allow(@autoload.class).to receive(:search_directories).and_return([make_absolute("/a"), make_absolute("/b")])
160
+ allow(@autoload).to receive(:search_directories).and_return([make_absolute("/a"), make_absolute("/b")])
161
161
  allow(FileTest).to receive(:directory?).and_return(true)
162
162
  allow(Puppet::FileSystem).to receive(:exist?).and_return(true)
163
163
  expect(Kernel).to receive(:load).with(make_absolute("/a/tmp/myfile.rb"), any_args)
@@ -298,10 +298,6 @@ describe Puppet::Util::Autoload do
298
298
  it "should convert c:\ to c:/" do
299
299
  expect(Puppet::Util::Autoload.cleanpath('c:\\')).to eq('c:/')
300
300
  end
301
-
302
- it "should convert all backslashes to forward slashes" do
303
- expect(Puppet::Util::Autoload.cleanpath('c:\projects\ruby\bug\test.rb')).to eq('c:/projects/ruby/bug/test.rb')
304
- end
305
301
  end
306
302
  end
307
303
 
@@ -16,8 +16,6 @@ describe Puppet::Util::Backups do
16
16
  let(:path) { make_absolute('/no/such/file') }
17
17
 
18
18
  it "should noop if the file does not exist" do
19
- file = Puppet::Type.type(:file).new(:name => path)
20
-
21
19
  expect(file).not_to receive(:bucket)
22
20
  expect(Puppet::FileSystem).to receive(:exist?).with(path).and_return(false)
23
21
 
@@ -119,7 +117,8 @@ describe Puppet::Util::Backups do
119
117
  file = Puppet::Type.type(:file).new(:name => path, :backup => 'foo', :recurse => true)
120
118
 
121
119
  expect(bucket).not_to receive(:backup)
122
- allow(Puppet::FileSystem).to receive(:stat).with(path).and_return(double('stat', :ftype => 'directory'))
120
+ stub_file = double('file', :stat => double('stat', :ftype => 'directory'))
121
+ allow(Puppet::FileSystem).to receive(:new).with(path).and_return(stub_file)
123
122
  expect(Find).not_to receive(:find)
124
123
 
125
124
  file.perform_backup
@@ -639,8 +639,6 @@ describe Puppet::Util::Execution, if: !Puppet::Util::Platform.jruby? do
639
639
 
640
640
  describe "#execute (debug logging)" do
641
641
  before :each do
642
- Puppet[:log_level] = 'debug'
643
-
644
642
  stub_process_wait(0)
645
643
 
646
644
  if Puppet::Util::Platform.windows?
@@ -651,47 +649,47 @@ describe Puppet::Util::Execution, if: !Puppet::Util::Platform.jruby? do
651
649
  end
652
650
 
653
651
  it "should log if no uid or gid specified" do
654
- expect(Puppet).to receive(:send_log).with(:debug, "Executing: 'echo hello'")
652
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing: 'echo hello'")
655
653
  Puppet::Util::Execution.execute('echo hello')
656
654
  end
657
655
 
658
656
  it "should log numeric uid if specified" do
659
- expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=100: 'echo hello'")
657
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=100: 'echo hello'")
660
658
  Puppet::Util::Execution.execute('echo hello', {:uid => 100})
661
659
  end
662
660
 
663
661
  it "should log numeric gid if specified" do
664
- expect(Puppet).to receive(:send_log).with(:debug, "Executing with gid=500: 'echo hello'")
662
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing with gid=500: 'echo hello'")
665
663
  Puppet::Util::Execution.execute('echo hello', {:gid => 500})
666
664
  end
667
665
 
668
666
  it "should log numeric uid and gid if specified" do
669
- expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=100 gid=500: 'echo hello'")
667
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=100 gid=500: 'echo hello'")
670
668
  Puppet::Util::Execution.execute('echo hello', {:uid => 100, :gid => 500})
671
669
  end
672
670
 
673
671
  it "should log string uid if specified" do
674
- expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=myuser: 'echo hello'")
672
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=myuser: 'echo hello'")
675
673
  Puppet::Util::Execution.execute('echo hello', {:uid => 'myuser'})
676
674
  end
677
675
 
678
676
  it "should log string gid if specified" do
679
- expect(Puppet).to receive(:send_log).with(:debug, "Executing with gid=mygroup: 'echo hello'")
677
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing with gid=mygroup: 'echo hello'")
680
678
  Puppet::Util::Execution.execute('echo hello', {:gid => 'mygroup'})
681
679
  end
682
680
 
683
681
  it "should log string uid and gid if specified" do
684
- expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=myuser gid=mygroup: 'echo hello'")
682
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=myuser gid=mygroup: 'echo hello'")
685
683
  Puppet::Util::Execution.execute('echo hello', {:uid => 'myuser', :gid => 'mygroup'})
686
684
  end
687
685
 
688
686
  it "should log numeric uid and string gid if specified" do
689
- expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=100 gid=mygroup: 'echo hello'")
687
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=100 gid=mygroup: 'echo hello'")
690
688
  Puppet::Util::Execution.execute('echo hello', {:uid => 100, :gid => 'mygroup'})
691
689
  end
692
690
 
693
691
  it 'should redact commands in debug output when passed sensitive option' do
694
- expect(Puppet).to receive(:send_log).with(:debug, "Executing: '[redacted]'")
692
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing: '[redacted]'")
695
693
  Puppet::Util::Execution.execute('echo hello', {:sensitive => true})
696
694
  end
697
695
  end
@@ -905,16 +903,14 @@ describe Puppet::Util::Execution, if: !Puppet::Util::Platform.jruby? do
905
903
  end
906
904
 
907
905
  it "should print meaningful debug message for string argument" do
908
- Puppet[:log_level] = 'debug'
909
- expect(Puppet).to receive(:send_log).with(:debug, "Executing 'echo hello'")
906
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing 'echo hello'")
910
907
  expect(Puppet::Util::Execution).to receive(:open).with('| echo hello 2>&1').and_return('hello')
911
908
  expect(Puppet::Util::Execution).to receive(:exitstatus).and_return(0)
912
909
  Puppet::Util::Execution.execpipe('echo hello')
913
910
  end
914
911
 
915
912
  it "should print meaningful debug message for array argument" do
916
- Puppet[:log_level] = 'debug'
917
- expect(Puppet).to receive(:send_log).with(:debug, "Executing 'echo hello'")
913
+ expect(Puppet::Util::Execution).to receive(:debug).with("Executing 'echo hello'")
918
914
  expect(Puppet::Util::Execution).to receive(:open).with('| echo hello 2>&1').and_return('hello')
919
915
  expect(Puppet::Util::Execution).to receive(:exitstatus).and_return(0)
920
916
  Puppet::Util::Execution.execpipe(['echo','hello'])
@@ -939,33 +935,4 @@ describe Puppet::Util::Execution, if: !Puppet::Util::Platform.jruby? do
939
935
  expect(Puppet::Util::Execution.execpipe('echo hello', false)).to eq('error message')
940
936
  end
941
937
  end
942
-
943
- describe "execfail" do
944
- it "returns the executed command output" do
945
- allow(Puppet::Util::Execution).to receive(:execute)
946
- .and_return(Puppet::Util::Execution::ProcessOutput.new("process output", 0))
947
- expect(Puppet::Util::Execution.execfail('echo hello', Puppet::Error)).to eq('process output')
948
- end
949
-
950
- it "raises a caller-specified exception on failure with the backtrace" do
951
- allow(Puppet::Util::Execution).to receive(:execute).and_raise(Puppet::ExecutionFailure, "failed to execute")
952
- expect {
953
- Puppet::Util::Execution.execfail("this will fail", Puppet::Error)
954
- }.to raise_error(Puppet::Error, /failed to execute/)
955
- end
956
-
957
- it "raises exceptions that don't extend ExecutionFailure" do
958
- allow(Puppet::Util::Execution).to receive(:execute).and_raise(ArgumentError, "failed to execute")
959
- expect {
960
- Puppet::Util::Execution.execfail("this will fail", Puppet::Error)
961
- }.to raise_error(ArgumentError, /failed to execute/)
962
- end
963
-
964
- it "raises a TypeError if the exception class is nil" do
965
- allow(Puppet::Util::Execution).to receive(:execute).and_raise(Puppet::ExecutionFailure, "failed to execute")
966
- expect {
967
- Puppet::Util::Execution.execfail('echo hello', nil)
968
- }.to raise_error(TypeError, /exception class\/object expected/)
969
- end
970
- end
971
938
  end
@@ -443,9 +443,13 @@ describe Puppet::Util::IniConfig::FileCollection do
443
443
  end
444
444
 
445
445
  it "yields every section from every file" do
446
- expect { |b|
447
- subject.each_section(&b)
448
- }.to yield_successive_args(sect_a1, sect_a2, sect_b1, sect_b2)
446
+ [sect_a1, sect_a2, sect_b1, sect_b2].each do |sect|
447
+ expect(sect).to receive(:touch).once
448
+ end
449
+
450
+ subject.each_section do |sect|
451
+ sect.touch
452
+ end
449
453
  end
450
454
  end
451
455
 
@@ -456,9 +460,13 @@ describe Puppet::Util::IniConfig::FileCollection do
456
460
  end
457
461
 
458
462
  it "yields the path to every file in the collection" do
459
- expect { |b|
460
- subject.each_file(&b)
461
- }.to yield_successive_args(path_a, path_b)
463
+ seen = []
464
+ subject.each_file do |file|
465
+ seen << file
466
+ end
467
+
468
+ expect(seen).to include(path_a)
469
+ expect(seen).to include(path_b)
462
470
  end
463
471
  end
464
472
 
@@ -111,20 +111,16 @@ describe Puppet::Util::Log do
111
111
  end
112
112
 
113
113
  it "should fall back to :eventlog" do
114
- without_partial_double_verification do
115
- allow(Puppet.features).to receive(:syslog?).and_return(false)
116
- allow(Puppet.features).to receive(:eventlog?).and_return(true)
117
- end
114
+ allow(Puppet.features).to receive(:syslog?).and_return(false)
115
+ allow(Puppet.features).to receive(:eventlog?).and_return(true)
118
116
  expect(Puppet::Util::Log).to receive(:newdestination).with(:eventlog)
119
117
 
120
118
  Puppet::Util::Log.setup_default
121
119
  end
122
120
 
123
121
  it "should fall back to :file" do
124
- without_partial_double_verification do
125
- allow(Puppet.features).to receive(:syslog?).and_return(false)
126
- allow(Puppet.features).to receive(:eventlog?).and_return(false)
127
- end
122
+ allow(Puppet.features).to receive(:syslog?).and_return(false)
123
+ allow(Puppet.features).to receive(:eventlog?).and_return(false)
128
124
  expect(Puppet::Util::Log).to receive(:newdestination).with(Puppet[:puppetdlog])
129
125
 
130
126
  Puppet::Util::Log.setup_default
@@ -228,6 +224,9 @@ describe Puppet::Util::Log do
228
224
  describe Puppet::Util::Log::DestEventlog, :if => Puppet.features.eventlog? do
229
225
  before :each do
230
226
  allow(Puppet::Util::Windows::EventLog).to receive(:open).and_return(double('mylog', :close => nil))
227
+ allow(Puppet::Util::Windows::EventLog).to receive(:report_event)
228
+ allow(Puppet::Util::Windows::EventLog).to receive(:close)
229
+ allow(Puppet.features).to receive(:eventlog?).and_return(true)
231
230
  end
232
231
 
233
232
  it "should restrict its suitability to Windows" do
@@ -552,7 +552,7 @@ original
552
552
 
553
553
  describe 'does support debugging' do
554
554
  before :each do
555
- allow(Facter).to receive(:respond_to?).with(:debugging, any_args).and_return(true)
555
+ allow(Facter).to receive(:respond_to?).with(:debugging).and_return(true)
556
556
  end
557
557
 
558
558
  it 'enables Facter debugging when debug level' do
@@ -568,7 +568,7 @@ original
568
568
 
569
569
  describe 'does support trace' do
570
570
  before :each do
571
- allow(Facter).to receive(:respond_to?).with(:trace, any_args).and_return(true)
571
+ allow(Facter).to receive(:respond_to?).with(:trace).and_return(true)
572
572
  end
573
573
 
574
574
  it 'enables Facter trace when enabled' do
@@ -584,7 +584,7 @@ original
584
584
 
585
585
  describe 'does support on_message' do
586
586
  before :each do
587
- allow(Facter).to receive(:respond_to?).with(:on_message, any_args).and_return(true)
587
+ allow(Facter).to receive(:respond_to?).with(:on_message).and_return(true)
588
588
  end
589
589
 
590
590
  def setup(level, message)
@@ -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,6 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- require 'puppet/ffi/posix'
4
3
  require 'puppet/util/posix'
5
4
 
6
5
  class PosixTest
@@ -12,344 +11,35 @@ describe Puppet::Util::POSIX do
12
11
  @posix = PosixTest.new
13
12
  end
14
13
 
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
-
14
+ describe '.groups_of' do
21
15
  let(:mock_groups) do
22
16
  [
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)|
17
+ ['group1', ['user1', 'user2']],
18
+ ['group2', ['user2']],
19
+ ['group1', ['user1', 'user2']],
20
+ ['group3', ['user1']],
21
+ ['group4', ['user2']]
22
+ ].map do |(name, members)|
33
23
  group_struct = double("Group #{name}")
34
24
  allow(group_struct).to receive(:name).and_return(name)
35
25
  allow(group_struct).to receive(:mem).and_return(members)
36
- allow(group_struct).to receive(:gid).and_return(gid)
37
26
 
38
27
  group_struct
39
28
  end
40
29
  end
41
30
 
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
-
65
31
  before(:each) do
66
- allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist, any_args).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(:respond_to?).with(:getgrouplist, any_args).and_return(true)
103
- allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
104
- end
105
-
106
- it "should return the groups for given user" do
107
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
108
- end
109
-
110
- it 'should not print any debug message about falling back to Puppet::Etc.group' do
111
- expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
112
- Puppet::Util::POSIX.groups_of(user)
113
- end
114
- end
115
- end
116
-
117
- describe 'when there are no groups' do
118
- let(:user) { 'nomembers' }
119
- let(:expected_groups) { [] }
120
-
121
- before(:each) do
122
- prepare_user_and_groups_env(user, expected_groups)
123
- allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist, any_args).and_return(true)
124
- allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
125
- end
126
-
127
- it "should return no groups for given user" do
128
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
129
- end
130
-
131
- it 'should not print any debug message about falling back to Puppet::Etc.group' do
132
- expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
133
- Puppet::Util::POSIX.groups_of(user)
134
- end
135
- end
136
-
137
- describe 'when primary group explicitly contains user' do
138
- let(:user) { 'root' }
139
- let(:expected_groups) { ['root'] }
140
-
141
- before(:each) do
142
- prepare_user_and_groups_env(user, expected_groups)
143
- allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist, any_args).and_return(true)
144
- allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
145
- end
146
-
147
- it "should return the groups, including primary group, for given user" do
148
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
149
- end
150
-
151
- it 'should not print any debug message about falling back to Puppet::Etc.group' do
152
- expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
153
- Puppet::Util::POSIX.groups_of(user)
154
- end
155
- end
156
-
157
- describe 'when primary group does not explicitly contain user' do
158
- let(:user) { 'user1' }
159
- let(:expected_groups) { ['group1', 'group3'] }
160
-
161
- before(:each) do
162
- prepare_user_and_groups_env(user, expected_groups)
163
- allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist, any_args).and_return(true)
164
- allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
165
- end
166
-
167
- it "should not return primary group for given user" do
168
- expect(Puppet::Util::POSIX.groups_of(user)).not_to include(user)
169
- end
170
-
171
- it 'should not print any debug message about falling back to Puppet::Etc.group' do
172
- expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
173
- Puppet::Util::POSIX.groups_of(user)
174
- end
175
- end
176
-
177
- context 'number of groups' do
178
- before(:each) do
179
- stub_const("Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS", 2)
180
- prepare_user_and_groups_env(user, expected_groups)
181
-
182
- allow(FFI::MemoryPointer).to receive(:new).with(:uint, Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS).and_yield(groups_ptr)
183
- allow(ngroups_ptr).to receive(:write_int).with(Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS).and_return(ngroups_ptr)
184
- end
185
-
186
- describe 'when there are less than maximum expected number of groups' do
187
- let(:user) { 'root' }
188
- let(:expected_groups) { ['root'] }
189
-
190
- before(:each) do
191
- allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist, any_args).and_return(true)
192
- allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(1)
193
- end
194
-
195
- it "should return the groups for given user, after one 'getgrouplist' call" do
196
- expect(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).once
197
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
198
- end
199
-
200
- it 'should not print any debug message about falling back to Puppet::Etc.group' do
201
- expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
202
- Puppet::Util::POSIX.groups_of(user)
203
- end
204
- end
205
-
206
- describe 'when there are more than maximum expected number of groups' do
207
- let(:user) { 'user1' }
208
- let(:expected_groups) { ['group1', 'group3'] }
209
-
210
- before(:each) do
211
- allow(FFI::MemoryPointer).to receive(:new).with(:uint, Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS * 2).and_yield(groups_ptr)
212
- allow(ngroups_ptr).to receive(:write_int).with(Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS * 2).and_return(ngroups_ptr)
213
-
214
- allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist, any_args).and_return(true)
215
- allow(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).and_return(-1, 1)
216
- end
217
-
218
- it "should return the groups for given user, after two 'getgrouplist' calls" do
219
- expect(Puppet::FFI::POSIX::Functions).to receive(:getgrouplist).twice
220
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
221
- end
222
-
223
- it 'should not print any debug message about falling back to Puppet::Etc.group' do
224
- expect(Puppet).not_to receive(:debug).with(/Falling back to Puppet::Etc.group:/)
225
- Puppet::Util::POSIX.groups_of(user)
226
- end
227
- end
32
+ etc_stub = receive(:group)
33
+ mock_groups.each do |mock_group|
34
+ etc_stub = etc_stub.and_yield(mock_group)
228
35
  end
36
+ allow(Puppet::Etc).to etc_stub
229
37
  end
230
38
 
231
- describe 'when it falls back to Puppet::Etc.group method' do
232
- before(:each) do
233
- etc_stub = receive(:group)
234
- mock_groups.each do |mock_group|
235
- etc_stub = etc_stub.and_yield(mock_group)
236
- end
237
- allow(Puppet::Etc).to etc_stub
238
-
239
- allow(Puppet::Etc).to receive(:getpwnam).with(user).and_raise(ArgumentError, "can't find user for #{user}")
240
- allow(Puppet).to receive(:debug)
241
-
242
- allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist, any_args).and_return(false)
243
- end
244
-
245
- describe 'when there are groups' do
246
- context 'for user1' do
247
- let(:user) { 'user1' }
248
- let(:expected_groups) { ['group1', 'group3'] }
249
-
250
- it "should return the groups for given user" do
251
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
252
- end
253
-
254
- it 'logs a debug message' do
255
- expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: The 'getgrouplist' method is not available")
256
- Puppet::Util::POSIX.groups_of(user)
257
- end
258
- end
259
-
260
- context 'for user2' do
261
- let(:user) { 'user2' }
262
- let(:expected_groups) { ['group1', 'group2', 'group4'] }
263
-
264
- it "should return the groups for given user" do
265
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
266
- end
267
-
268
- it 'logs a debug message' do
269
- expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: The 'getgrouplist' method is not available")
270
- Puppet::Util::POSIX.groups_of(user)
271
- end
272
- end
273
- end
274
-
275
- describe 'when there are no groups' do
276
- let(:user) { 'nomembers' }
277
- let(:expected_groups) { [] }
278
-
279
- it "should return no groups for given user" do
280
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
281
- end
282
-
283
- it 'logs a debug message' do
284
- expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: The 'getgrouplist' method is not available")
285
- Puppet::Util::POSIX.groups_of(user)
286
- end
287
- end
288
-
289
- describe 'when primary group explicitly contains user' do
290
- let(:user) { 'root' }
291
- let(:expected_groups) { ['root'] }
292
-
293
- it "should return the groups, including primary group, for given user" do
294
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
295
- end
296
-
297
- it 'logs a debug message' do
298
- expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: The 'getgrouplist' method is not available")
299
- Puppet::Util::POSIX.groups_of(user)
300
- end
301
- end
302
-
303
- describe 'when primary group does not explicitly contain user' do
304
- let(:user) { 'user1' }
305
- let(:expected_groups) { ['group1', 'group3'] }
306
-
307
- it "should not return primary group for given user" do
308
- expect(Puppet::Util::POSIX.groups_of(user)).not_to include(user)
309
- end
310
-
311
- it 'logs a debug message' do
312
- expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: The 'getgrouplist' method is not available")
313
- Puppet::Util::POSIX.groups_of(user)
314
- end
315
- end
316
-
317
- describe "when the 'getgrouplist' method is not available" do
318
- let(:user) { 'user1' }
319
- let(:expected_groups) { ['group1', 'group3'] }
320
-
321
- before(:each) do
322
- allow(Puppet::FFI::POSIX::Functions).to receive(:respond_to?).with(:getgrouplist).and_return(false)
323
- end
324
-
325
- it "should return the groups" do
326
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
327
- end
328
-
329
- it 'logs a debug message' do
330
- expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: The 'getgrouplist' method is not available")
331
- Puppet::Util::POSIX.groups_of(user)
332
- end
333
- end
334
-
335
-
336
- describe "when ffi is not available on the machine" do
337
- let(:user) { 'user1' }
338
- let(:expected_groups) { ['group1', 'group3'] }
339
-
340
- before(:each) do
341
- allow(Puppet::Util::POSIX).to receive(:require).with('puppet/ffi/posix').and_raise(LoadError, 'cannot load such file -- ffi')
342
- end
343
-
344
- it "should return the groups" do
345
- expect(Puppet::Util::POSIX.groups_of(user)).to eql(expected_groups)
346
- end
347
-
348
- it 'logs a debug message' do
349
- expect(Puppet).to receive(:debug).with("Falling back to Puppet::Etc.group: cannot load such file -- ffi")
350
- Puppet::Util::POSIX.groups_of(user)
351
- end
352
- end
39
+ it 'returns the groups of the given user' do
40
+ expect(Puppet::Util::POSIX.groups_of('user1')).to eql(
41
+ ['group1', 'group3']
42
+ )
353
43
  end
354
44
  end
355
45
 
@@ -499,25 +189,6 @@ describe Puppet::Util::POSIX do
499
189
  expect(@posix.gid("asdf")).to eq(100)
500
190
  end
501
191
 
502
- it "returns the id without full groups query if multiple groups have the same id" do
503
- expect(@posix).to receive(:get_posix_field).with(:group, :gid, "asdf").and_return(100)
504
- expect(@posix).to receive(:get_posix_field).with(:group, :name, 100).and_return("boo")
505
- expect(@posix).to receive(:get_posix_field).with(:group, :gid, "boo").and_return(100)
506
-
507
- expect(@posix).not_to receive(:search_posix_field)
508
- expect(@posix.gid("asdf")).to eq(100)
509
- end
510
-
511
- it "returns the id with full groups query if name is nil" do
512
- expect(@posix).to receive(:get_posix_field).with(:group, :gid, "asdf").and_return(100)
513
- expect(@posix).to receive(:get_posix_field).with(:group, :name, 100).and_return(nil)
514
- expect(@posix).not_to receive(:get_posix_field).with(:group, :gid, nil)
515
-
516
-
517
- expect(@posix).to receive(:search_posix_field).with(:group, :gid, "asdf").and_return(100)
518
- expect(@posix.gid("asdf")).to eq(100)
519
- end
520
-
521
192
  it "should use :search_posix_field if the discovered name does not match the passed-in name" do
522
193
  expect(@posix).to receive(:get_posix_field).with(:group, :gid, "asdf").and_return(100)
523
194
  expect(@posix).to receive(:get_posix_field).with(:group, :name, 100).and_return("boo")
@@ -594,25 +265,6 @@ describe Puppet::Util::POSIX do
594
265
  expect(@posix.uid("asdf")).to eq(100)
595
266
  end
596
267
 
597
- it "returns the id without full users query if multiple users have the same id" do
598
- expect(@posix).to receive(:get_posix_field).with(:passwd, :uid, "asdf").and_return(100)
599
- expect(@posix).to receive(:get_posix_field).with(:passwd, :name, 100).and_return("boo")
600
- expect(@posix).to receive(:get_posix_field).with(:passwd, :uid, "boo").and_return(100)
601
-
602
- expect(@posix).not_to receive(:search_posix_field)
603
- expect(@posix.uid("asdf")).to eq(100)
604
- end
605
-
606
- it "returns the id with full users query if name is nil" do
607
- expect(@posix).to receive(:get_posix_field).with(:passwd, :uid, "asdf").and_return(100)
608
- expect(@posix).to receive(:get_posix_field).with(:passwd, :name, 100).and_return(nil)
609
- expect(@posix).not_to receive(:get_posix_field).with(:passwd, :uid, nil)
610
-
611
-
612
- expect(@posix).to receive(:search_posix_field).with(:passwd, :uid, "asdf").and_return(100)
613
- expect(@posix.uid("asdf")).to eq(100)
614
- end
615
-
616
268
  it "should use :search_posix_field if the discovered name does not match the passed-in name" do
617
269
  expect(@posix).to receive(:get_posix_field).with(:passwd, :uid, "asdf").and_return(100)
618
270
  expect(@posix).to receive(:get_posix_field).with(:passwd, :name, 100).and_return("boo")