puppet 6.19.0 → 7.3.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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +3 -4
  4. data/Gemfile.lock +33 -28
  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/project_data.yaml +2 -14
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/ext/windows/service/daemon.rb +6 -5
  12. data/install.rb +21 -17
  13. data/lib/puppet.rb +11 -20
  14. data/lib/puppet/application.rb +182 -104
  15. data/lib/puppet/application/agent.rb +1 -0
  16. data/lib/puppet/application/apply.rb +3 -2
  17. data/lib/puppet/application/device.rb +101 -104
  18. data/lib/puppet/application/filebucket.rb +15 -11
  19. data/lib/puppet/application/script.rb +1 -0
  20. data/lib/puppet/application/ssl.rb +1 -1
  21. data/lib/puppet/application_support.rb +7 -0
  22. data/lib/puppet/configurer.rb +44 -36
  23. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  24. data/lib/puppet/defaults.rb +71 -170
  25. data/lib/puppet/environments.rb +44 -75
  26. data/lib/puppet/face/config.rb +10 -0
  27. data/lib/puppet/face/epp.rb +12 -2
  28. data/lib/puppet/face/facts.rb +80 -6
  29. data/lib/puppet/face/help.rb +1 -1
  30. data/lib/puppet/face/node/clean.rb +8 -0
  31. data/lib/puppet/face/plugin.rb +5 -8
  32. data/lib/puppet/ffi/posix.rb +10 -0
  33. data/lib/puppet/ffi/posix/constants.rb +14 -0
  34. data/lib/puppet/ffi/posix/functions.rb +24 -0
  35. data/lib/puppet/ffi/windows.rb +12 -0
  36. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  37. data/lib/puppet/ffi/windows/constants.rb +404 -0
  38. data/lib/puppet/ffi/windows/functions.rb +628 -0
  39. data/lib/puppet/ffi/windows/structs.rb +338 -0
  40. data/lib/puppet/file_serving/configuration.rb +0 -5
  41. data/lib/puppet/file_serving/configuration/parser.rb +6 -32
  42. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  43. data/lib/puppet/file_serving/mount.rb +1 -2
  44. data/lib/puppet/forge/repository.rb +0 -1
  45. data/lib/puppet/functions/epp.rb +1 -0
  46. data/lib/puppet/functions/inline_epp.rb +1 -0
  47. data/lib/puppet/generate/models/type/type.rb +4 -1
  48. data/lib/puppet/http.rb +22 -13
  49. data/lib/puppet/http/client.rb +164 -114
  50. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  51. data/lib/puppet/http/errors.rb +16 -0
  52. data/lib/puppet/http/external_client.rb +5 -7
  53. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  54. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  55. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  56. data/lib/puppet/http/proxy.rb +137 -0
  57. data/lib/puppet/http/redirector.rb +4 -12
  58. data/lib/puppet/http/resolver.rb +5 -15
  59. data/lib/puppet/http/resolver/server_list.rb +6 -10
  60. data/lib/puppet/http/resolver/settings.rb +4 -7
  61. data/lib/puppet/http/resolver/srv.rb +7 -11
  62. data/lib/puppet/http/response.rb +36 -54
  63. data/lib/puppet/http/response_converter.rb +24 -0
  64. data/lib/puppet/http/response_net_http.rb +42 -0
  65. data/lib/puppet/http/retry_after_handler.rb +4 -13
  66. data/lib/puppet/http/service.rb +12 -26
  67. data/lib/puppet/http/service/ca.rb +11 -22
  68. data/lib/puppet/http/service/compiler.rb +22 -69
  69. data/lib/puppet/http/service/file_server.rb +18 -27
  70. data/lib/puppet/http/service/puppetserver.rb +26 -12
  71. data/lib/puppet/http/service/report.rb +8 -10
  72. data/lib/puppet/http/session.rb +11 -20
  73. data/lib/puppet/{network/http → http}/site.rb +1 -2
  74. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  75. data/lib/puppet/indirector/fact_search.rb +60 -0
  76. data/lib/puppet/indirector/facts/facter.rb +24 -3
  77. data/lib/puppet/indirector/facts/json.rb +27 -0
  78. data/lib/puppet/indirector/facts/rest.rb +3 -22
  79. data/lib/puppet/indirector/facts/yaml.rb +3 -58
  80. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  81. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  82. data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
  83. data/lib/puppet/indirector/file_server.rb +1 -8
  84. data/lib/puppet/indirector/generic_http.rb +0 -11
  85. data/lib/puppet/indirector/json.rb +5 -1
  86. data/lib/puppet/indirector/node/json.rb +8 -0
  87. data/lib/puppet/indirector/node/rest.rb +2 -4
  88. data/lib/puppet/indirector/report/json.rb +34 -0
  89. data/lib/puppet/indirector/report/rest.rb +3 -8
  90. data/lib/puppet/indirector/request.rb +0 -101
  91. data/lib/puppet/indirector/rest.rb +12 -263
  92. data/lib/puppet/module_tool/applications.rb +0 -1
  93. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  94. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  95. data/lib/puppet/network/authconfig.rb +2 -96
  96. data/lib/puppet/network/authorization.rb +13 -35
  97. data/lib/puppet/network/formats.rb +69 -1
  98. data/lib/puppet/network/http.rb +3 -3
  99. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  100. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  101. data/lib/puppet/network/http/connection.rb +247 -316
  102. data/lib/puppet/network/http/handler.rb +0 -1
  103. data/lib/puppet/network/http_pool.rb +16 -34
  104. data/lib/puppet/node.rb +1 -30
  105. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  106. data/lib/puppet/pal/pal_impl.rb +73 -18
  107. data/lib/puppet/parser/ast/leaf.rb +3 -2
  108. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  109. data/lib/puppet/parser/compiler.rb +0 -198
  110. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  111. data/lib/puppet/parser/resource.rb +0 -69
  112. data/lib/puppet/parser/templatewrapper.rb +1 -1
  113. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  114. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
  115. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  116. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  117. data/lib/puppet/pops/issues.rb +0 -5
  118. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  119. data/lib/puppet/pops/model/ast.pp +0 -42
  120. data/lib/puppet/pops/model/ast.rb +0 -290
  121. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  122. data/lib/puppet/pops/model/factory.rb +0 -45
  123. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  124. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  125. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  126. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  127. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  128. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  129. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  130. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  131. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  132. data/lib/puppet/pops/types/type_parser.rb +0 -4
  133. data/lib/puppet/pops/types/types.rb +0 -1
  134. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  135. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  136. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  137. data/lib/puppet/provider.rb +0 -13
  138. data/lib/puppet/provider/nameservice.rb +0 -18
  139. data/lib/puppet/provider/package/apt.rb +4 -0
  140. data/lib/puppet/provider/package/dpkg.rb +0 -10
  141. data/lib/puppet/provider/package/gem.rb +23 -3
  142. data/lib/puppet/provider/package/pip.rb +0 -1
  143. data/lib/puppet/provider/package/pkg.rb +0 -4
  144. data/lib/puppet/provider/package/portage.rb +1 -1
  145. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  146. data/lib/puppet/provider/service/smf.rb +191 -73
  147. data/lib/puppet/provider/user/aix.rb +2 -2
  148. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  149. data/lib/puppet/reference/configuration.rb +8 -5
  150. data/lib/puppet/reference/indirection.rb +1 -1
  151. data/lib/puppet/resource.rb +1 -89
  152. data/lib/puppet/resource/catalog.rb +1 -14
  153. data/lib/puppet/resource/type.rb +3 -119
  154. data/lib/puppet/resource/type_collection.rb +3 -48
  155. data/lib/puppet/runtime.rb +1 -2
  156. data/lib/puppet/settings.rb +88 -48
  157. data/lib/puppet/settings/alias_setting.rb +37 -0
  158. data/lib/puppet/settings/base_setting.rb +26 -2
  159. data/lib/puppet/settings/integer_setting.rb +17 -0
  160. data/lib/puppet/settings/port_setting.rb +15 -0
  161. data/lib/puppet/settings/priority_setting.rb +5 -4
  162. data/lib/puppet/ssl.rb +10 -6
  163. data/lib/puppet/ssl/base.rb +3 -5
  164. data/lib/puppet/ssl/certificate.rb +0 -6
  165. data/lib/puppet/ssl/certificate_request.rb +1 -12
  166. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  167. data/lib/puppet/ssl/oids.rb +3 -1
  168. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  169. data/lib/puppet/ssl/state_machine.rb +3 -1
  170. data/lib/puppet/ssl/verifier.rb +2 -0
  171. data/lib/puppet/test/test_helper.rb +1 -3
  172. data/lib/puppet/transaction.rb +1 -7
  173. data/lib/puppet/transaction/report.rb +2 -4
  174. data/lib/puppet/type.rb +0 -76
  175. data/lib/puppet/type/file.rb +5 -7
  176. data/lib/puppet/type/file/checksum.rb +1 -1
  177. data/lib/puppet/type/file/source.rb +1 -1
  178. data/lib/puppet/type/filebucket.rb +3 -3
  179. data/lib/puppet/type/package.rb +5 -13
  180. data/lib/puppet/type/user.rb +1 -1
  181. data/lib/puppet/util/autoload.rb +1 -8
  182. data/lib/puppet/util/execution.rb +0 -11
  183. data/lib/puppet/util/http_proxy.rb +2 -215
  184. data/lib/puppet/util/monkey_patches.rb +0 -46
  185. data/lib/puppet/util/posix.rb +54 -5
  186. data/lib/puppet/util/rdoc.rb +0 -7
  187. data/lib/puppet/util/retry_action.rb +1 -1
  188. data/lib/puppet/util/rubygems.rb +5 -1
  189. data/lib/puppet/util/run_mode.rb +9 -1
  190. data/lib/puppet/util/windows.rb +3 -8
  191. data/lib/puppet/util/windows/daemon.rb +360 -0
  192. data/lib/puppet/util/windows/error.rb +1 -0
  193. data/lib/puppet/util/windows/eventlog.rb +4 -9
  194. data/lib/puppet/util/windows/file.rb +8 -242
  195. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  196. data/lib/puppet/util/windows/process.rb +4 -226
  197. data/lib/puppet/util/windows/service.rb +9 -460
  198. data/lib/puppet/util/windows/string.rb +12 -13
  199. data/lib/puppet/util/yaml.rb +0 -22
  200. data/lib/puppet/vendor/require_vendored.rb +0 -1
  201. data/lib/puppet/version.rb +1 -1
  202. data/lib/puppet/x509.rb +5 -1
  203. data/lib/puppet/x509/cert_provider.rb +29 -1
  204. data/locales/puppet.pot +629 -1314
  205. data/man/man5/puppet.conf.5 +39 -99
  206. data/man/man8/puppet-agent.8 +2 -2
  207. data/man/man8/puppet-apply.8 +2 -2
  208. data/man/man8/puppet-catalog.8 +1 -1
  209. data/man/man8/puppet-config.8 +1 -1
  210. data/man/man8/puppet-describe.8 +1 -1
  211. data/man/man8/puppet-device.8 +2 -2
  212. data/man/man8/puppet-doc.8 +1 -1
  213. data/man/man8/puppet-epp.8 +1 -1
  214. data/man/man8/puppet-facts.8 +58 -9
  215. data/man/man8/puppet-filebucket.8 +6 -6
  216. data/man/man8/puppet-generate.8 +1 -1
  217. data/man/man8/puppet-help.8 +1 -1
  218. data/man/man8/puppet-lookup.8 +1 -1
  219. data/man/man8/puppet-module.8 +1 -58
  220. data/man/man8/puppet-node.8 +4 -1
  221. data/man/man8/puppet-parser.8 +1 -1
  222. data/man/man8/puppet-plugin.8 +1 -1
  223. data/man/man8/puppet-report.8 +4 -1
  224. data/man/man8/puppet-resource.8 +1 -1
  225. data/man/man8/puppet-script.8 +2 -2
  226. data/man/man8/puppet-ssl.8 +1 -1
  227. data/man/man8/puppet.8 +2 -2
  228. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  229. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  230. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  231. data/spec/integration/application/agent_spec.rb +151 -14
  232. data/spec/integration/application/apply_spec.rb +20 -1
  233. data/spec/integration/application/filebucket_spec.rb +16 -16
  234. data/spec/integration/application/help_spec.rb +2 -0
  235. data/spec/integration/application/plugin_spec.rb +23 -1
  236. data/spec/integration/defaults_spec.rb +7 -10
  237. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  238. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
  239. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
  240. data/spec/integration/network/http_pool_spec.rb +3 -21
  241. data/spec/integration/parser/catalog_spec.rb +0 -38
  242. data/spec/integration/parser/node_spec.rb +0 -9
  243. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  244. data/spec/integration/resource/type_collection_spec.rb +2 -6
  245. data/spec/integration/transaction_spec.rb +4 -9
  246. data/spec/integration/type/file_spec.rb +5 -4
  247. data/spec/integration/util/windows/adsi_spec.rb +3 -1
  248. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  249. data/spec/integration/util/windows/registry_spec.rb +0 -10
  250. data/spec/integration/util/windows/security_spec.rb +1 -1
  251. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  252. data/spec/lib/puppet_spec/settings.rb +7 -1
  253. data/spec/spec_helper.rb +3 -4
  254. data/spec/unit/agent_spec.rb +8 -8
  255. data/spec/unit/application/agent_spec.rb +0 -1
  256. data/spec/unit/application/config_spec.rb +224 -4
  257. data/spec/unit/application/facts_spec.rb +35 -0
  258. data/spec/unit/application/filebucket_spec.rb +41 -41
  259. data/spec/unit/application/ssl_spec.rb +2 -2
  260. data/spec/unit/application_spec.rb +51 -9
  261. data/spec/unit/certificate_factory_spec.rb +1 -1
  262. data/spec/unit/configurer/downloader_spec.rb +6 -2
  263. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  264. data/spec/unit/configurer_spec.rb +12 -9
  265. data/spec/unit/confine/feature_spec.rb +1 -1
  266. data/spec/unit/confine_spec.rb +8 -2
  267. data/spec/unit/context/trusted_information_spec.rb +2 -6
  268. data/spec/unit/defaults_spec.rb +26 -32
  269. data/spec/unit/environments_spec.rb +96 -22
  270. data/spec/unit/face/config_spec.rb +27 -32
  271. data/spec/unit/face/facts_spec.rb +4 -0
  272. data/spec/unit/face/node_spec.rb +14 -13
  273. data/spec/unit/face/plugin_spec.rb +73 -33
  274. data/spec/unit/file_bucket/file_spec.rb +1 -1
  275. data/spec/unit/file_serving/configuration/parser_spec.rb +22 -19
  276. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  277. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  278. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  279. data/spec/unit/forge/module_release_spec.rb +2 -7
  280. data/spec/unit/functions/camelcase_spec.rb +1 -1
  281. data/spec/unit/functions/capitalize_spec.rb +1 -1
  282. data/spec/unit/functions/downcase_spec.rb +1 -1
  283. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  284. data/spec/unit/functions/upcase_spec.rb +1 -1
  285. data/spec/unit/http/client_spec.rb +7 -8
  286. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  287. data/spec/unit/http/external_client_spec.rb +4 -4
  288. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  289. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  290. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  291. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  292. data/spec/unit/http/resolver_spec.rb +13 -13
  293. data/spec/unit/http/service/compiler_spec.rb +49 -62
  294. data/spec/unit/http/service/file_server_spec.rb +3 -3
  295. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  296. data/spec/unit/http/service_spec.rb +1 -2
  297. data/spec/unit/http/session_spec.rb +16 -14
  298. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  299. data/spec/unit/indirector/face_spec.rb +0 -1
  300. data/spec/unit/indirector/facts/facter_spec.rb +104 -1
  301. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  302. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  303. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  304. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  305. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  306. data/spec/unit/indirector/file_server_spec.rb +1 -15
  307. data/spec/unit/indirector/indirection_spec.rb +8 -12
  308. data/spec/unit/indirector/node/json_spec.rb +33 -0
  309. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  310. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  311. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  312. data/spec/unit/indirector/request_spec.rb +0 -264
  313. data/spec/unit/indirector/rest_spec.rb +98 -752
  314. data/spec/unit/indirector_spec.rb +2 -2
  315. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  316. data/spec/unit/network/authconfig_spec.rb +2 -132
  317. data/spec/unit/network/authorization_spec.rb +2 -55
  318. data/spec/unit/network/formats_spec.rb +45 -4
  319. data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -101
  320. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  321. data/spec/unit/network/http/api_spec.rb +10 -0
  322. data/spec/unit/network/http/connection_spec.rb +19 -41
  323. data/spec/unit/network/http/handler_spec.rb +0 -6
  324. data/spec/unit/network/http_pool_spec.rb +0 -4
  325. data/spec/unit/node/environment_spec.rb +33 -21
  326. data/spec/unit/node_spec.rb +2 -54
  327. data/spec/unit/parser/compiler_spec.rb +3 -19
  328. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  329. data/spec/unit/parser/resource_spec.rb +14 -8
  330. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  331. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  332. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  333. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  334. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  335. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  336. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  337. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  338. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  339. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  340. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  341. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  342. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  343. data/spec/unit/pops/visitor_spec.rb +1 -1
  344. data/spec/unit/property_spec.rb +1 -0
  345. data/spec/unit/provider/nameservice_spec.rb +66 -122
  346. data/spec/unit/provider/package/apt_spec.rb +4 -8
  347. data/spec/unit/provider/package/base_spec.rb +6 -5
  348. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  349. data/spec/unit/provider/package/gem_spec.rb +32 -0
  350. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  351. data/spec/unit/provider/package/pip_spec.rb +6 -11
  352. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  353. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  354. data/spec/unit/provider/service/smf_spec.rb +401 -165
  355. data/spec/unit/provider/service/windows_spec.rb +0 -1
  356. data/spec/unit/provider/user/aix_spec.rb +5 -0
  357. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  358. data/spec/unit/provider/user/pw_spec.rb +2 -0
  359. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  360. data/spec/unit/provider_spec.rb +6 -20
  361. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  362. data/spec/unit/resource/type_collection_spec.rb +2 -22
  363. data/spec/unit/resource/type_spec.rb +1 -1
  364. data/spec/unit/resource_spec.rb +11 -66
  365. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  366. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  367. data/spec/unit/settings/port_setting_spec.rb +31 -0
  368. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  369. data/spec/unit/settings_spec.rb +560 -228
  370. data/spec/unit/ssl/base_spec.rb +36 -4
  371. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  372. data/spec/unit/ssl/certificate_spec.rb +2 -11
  373. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  374. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  375. data/spec/unit/ssl/verifier_spec.rb +0 -21
  376. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  377. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  378. data/spec/unit/transaction/report_spec.rb +0 -2
  379. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  380. data/spec/unit/transaction_spec.rb +57 -82
  381. data/spec/unit/type/file/checksum_spec.rb +6 -6
  382. data/spec/unit/type/file/content_spec.rb +1 -2
  383. data/spec/unit/type/file/ensure_spec.rb +1 -1
  384. data/spec/unit/type/file/mode_spec.rb +1 -1
  385. data/spec/unit/type/file/selinux_spec.rb +0 -2
  386. data/spec/unit/type/file/source_spec.rb +0 -1
  387. data/spec/unit/type/file_spec.rb +12 -12
  388. data/spec/unit/type/group_spec.rb +13 -6
  389. data/spec/unit/type/package_spec.rb +1 -1
  390. data/spec/unit/type/resources_spec.rb +7 -7
  391. data/spec/unit/type/service_spec.rb +1 -1
  392. data/spec/unit/type/tidy_spec.rb +0 -1
  393. data/spec/unit/type_spec.rb +22 -2
  394. data/spec/unit/util/at_fork_spec.rb +2 -2
  395. data/spec/unit/util/autoload_spec.rb +5 -1
  396. data/spec/unit/util/backups_spec.rb +1 -4
  397. data/spec/unit/util/execution_spec.rb +15 -40
  398. data/spec/unit/util/inifile_spec.rb +6 -14
  399. data/spec/unit/util/log_spec.rb +8 -7
  400. data/spec/unit/util/logging_spec.rb +3 -3
  401. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  402. data/spec/unit/util/posix_spec.rb +363 -15
  403. data/spec/unit/util/rubygems_spec.rb +2 -2
  404. data/spec/unit/util/run_mode_spec.rb +21 -121
  405. data/spec/unit/util/selinux_spec.rb +76 -52
  406. data/spec/unit/util/storage_spec.rb +3 -1
  407. data/spec/unit/util/suidmanager_spec.rb +44 -41
  408. data/spec/unit/util/windows/string_spec.rb +1 -3
  409. data/spec/unit/util/yaml_spec.rb +0 -54
  410. data/spec/unit/util_spec.rb +13 -24
  411. metadata +66 -170
  412. data/conf/auth.conf +0 -150
  413. data/lib/puppet/application/cert.rb +0 -76
  414. data/lib/puppet/application/key.rb +0 -4
  415. data/lib/puppet/application/man.rb +0 -4
  416. data/lib/puppet/application/status.rb +0 -4
  417. data/lib/puppet/face/key.rb +0 -16
  418. data/lib/puppet/face/man.rb +0 -145
  419. data/lib/puppet/face/module/build.rb +0 -14
  420. data/lib/puppet/face/module/generate.rb +0 -14
  421. data/lib/puppet/face/module/search.rb +0 -103
  422. data/lib/puppet/face/status.rb +0 -51
  423. data/lib/puppet/indirector/certificate/file.rb +0 -9
  424. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  425. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  426. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  427. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  428. data/lib/puppet/indirector/file_content/http.rb +0 -22
  429. data/lib/puppet/indirector/key/file.rb +0 -46
  430. data/lib/puppet/indirector/key/memory.rb +0 -7
  431. data/lib/puppet/indirector/ssl_file.rb +0 -162
  432. data/lib/puppet/indirector/status.rb +0 -3
  433. data/lib/puppet/indirector/status/local.rb +0 -12
  434. data/lib/puppet/indirector/status/rest.rb +0 -27
  435. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  436. data/lib/puppet/network/auth_config_parser.rb +0 -90
  437. data/lib/puppet/network/authstore.rb +0 -283
  438. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  439. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  440. data/lib/puppet/network/http/base_pool.rb +0 -36
  441. data/lib/puppet/network/http/compression.rb +0 -127
  442. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  443. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  444. data/lib/puppet/network/rest_controller.rb +0 -2
  445. data/lib/puppet/network/rights.rb +0 -210
  446. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  447. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  448. data/lib/puppet/parser/environment_compiler.rb +0 -202
  449. data/lib/puppet/pops/types/enumeration.rb +0 -16
  450. data/lib/puppet/resource/capability_finder.rb +0 -154
  451. data/lib/puppet/rest/errors.rb +0 -15
  452. data/lib/puppet/rest/response.rb +0 -35
  453. data/lib/puppet/rest/route.rb +0 -85
  454. data/lib/puppet/rest/routes.rb +0 -135
  455. data/lib/puppet/ssl/host.rb +0 -505
  456. data/lib/puppet/ssl/key.rb +0 -61
  457. data/lib/puppet/ssl/validator.rb +0 -61
  458. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  459. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  460. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  461. data/lib/puppet/status.rb +0 -40
  462. data/lib/puppet/util/connection.rb +0 -88
  463. data/lib/puppet/util/ssl.rb +0 -83
  464. data/lib/puppet/util/windows/api_types.rb +0 -309
  465. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  466. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  467. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  468. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  469. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  470. data/lib/puppet/vendor/pathspec/README.md +0 -53
  471. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  472. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  473. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  474. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  475. data/man/man8/puppet-key.8 +0 -126
  476. data/man/man8/puppet-man.8 +0 -76
  477. data/man/man8/puppet-status.8 +0 -108
  478. data/spec/integration/application/config_spec.rb +0 -74
  479. data/spec/integration/network/authconfig_spec.rb +0 -256
  480. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  481. data/spec/unit/application/man_spec.rb +0 -52
  482. data/spec/unit/capability_spec.rb +0 -414
  483. data/spec/unit/face/catalog_spec.rb +0 -6
  484. data/spec/unit/face/key_spec.rb +0 -9
  485. data/spec/unit/face/module/search_spec.rb +0 -231
  486. data/spec/unit/face/module_spec.rb +0 -3
  487. data/spec/unit/face/status_spec.rb +0 -9
  488. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  489. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  490. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  491. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  492. data/spec/unit/indirector/key/file_spec.rb +0 -79
  493. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  494. data/spec/unit/indirector/status/local_spec.rb +0 -10
  495. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  496. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  497. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  498. data/spec/unit/network/authstore_spec.rb +0 -422
  499. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  500. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  501. data/spec/unit/network/http/compression_spec.rb +0 -240
  502. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  503. data/spec/unit/network/http_spec.rb +0 -9
  504. data/spec/unit/network/rights_spec.rb +0 -439
  505. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  506. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  507. data/spec/unit/resource/capability_finder_spec.rb +0 -143
  508. data/spec/unit/rest/route_spec.rb +0 -132
  509. data/spec/unit/ssl/host_spec.rb +0 -650
  510. data/spec/unit/ssl/key_spec.rb +0 -173
  511. data/spec/unit/ssl/validator_spec.rb +0 -278
  512. data/spec/unit/status_spec.rb +0 -45
  513. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -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
@@ -34,14 +28,6 @@ describe Puppet::Util::RunMode 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
@@ -62,14 +48,6 @@ describe Puppet::Util::RunMode 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
@@ -111,15 +111,19 @@ describe Puppet::Util::SELinux do
111
111
  end
112
112
 
113
113
  it "should return a context" do
114
- expect(self).to receive(:selinux_support?).and_return(true)
115
- expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "user_u:role_r:type_t:s0"])
116
- expect(get_selinux_current_context("/foo")).to eq("user_u:role_r:type_t:s0")
114
+ without_partial_double_verification do
115
+ expect(self).to receive(:selinux_support?).and_return(true)
116
+ expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "user_u:role_r:type_t:s0"])
117
+ expect(get_selinux_current_context("/foo")).to eq("user_u:role_r:type_t:s0")
118
+ end
117
119
  end
118
120
 
119
121
  it "should return nil if lgetfilecon fails" do
120
- expect(self).to receive(:selinux_support?).and_return(true)
121
- expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return(-1)
122
- expect(get_selinux_current_context("/foo")).to be_nil
122
+ without_partial_double_verification do
123
+ expect(self).to receive(:selinux_support?).and_return(true)
124
+ expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return(-1)
125
+ expect(get_selinux_current_context("/foo")).to be_nil
126
+ end
123
127
  end
124
128
  end
125
129
 
@@ -130,47 +134,57 @@ describe Puppet::Util::SELinux do
130
134
  end
131
135
 
132
136
  it "should return a context if a default context exists" do
133
- expect(self).to receive(:selinux_support?).and_return(true)
134
- fstat = double('File::Stat', :mode => 0)
135
- expect(Puppet::FileSystem).to receive(:lstat).with('/foo').and_return(fstat)
136
- expect(self).to receive(:find_fs).with("/foo").and_return("ext3")
137
- expect(Selinux).to receive(:matchpathcon).with("/foo", 0).and_return([0, "user_u:role_r:type_t:s0"])
138
-
139
- expect(get_selinux_default_context("/foo")).to eq("user_u:role_r:type_t:s0")
137
+ without_partial_double_verification do
138
+ expect(self).to receive(:selinux_support?).and_return(true)
139
+ fstat = double('File::Stat', :mode => 0)
140
+ expect(Puppet::FileSystem).to receive(:lstat).with('/foo').and_return(fstat)
141
+ expect(self).to receive(:find_fs).with("/foo").and_return("ext3")
142
+ expect(Selinux).to receive(:matchpathcon).with("/foo", 0).and_return([0, "user_u:role_r:type_t:s0"])
143
+
144
+ expect(get_selinux_default_context("/foo")).to eq("user_u:role_r:type_t:s0")
145
+ end
140
146
  end
141
147
 
142
148
  it "handles permission denied errors by issuing a warning" do
143
- allow(self).to receive(:selinux_support?).and_return(true)
144
- allow(self).to receive(:selinux_label_support?).and_return(true)
145
- allow(Selinux).to receive(:matchpathcon).with("/root/chuj", 0).and_return(-1)
146
- allow(self).to receive(:file_lstat).with("/root/chuj").and_raise(Errno::EACCES, "/root/chuj")
149
+ without_partial_double_verification do
150
+ allow(self).to receive(:selinux_support?).and_return(true)
151
+ allow(self).to receive(:selinux_label_support?).and_return(true)
152
+ allow(Selinux).to receive(:matchpathcon).with("/root/chuj", 0).and_return(-1)
153
+ allow(self).to receive(:file_lstat).with("/root/chuj").and_raise(Errno::EACCES, "/root/chuj")
147
154
 
148
- expect(get_selinux_default_context("/root/chuj")).to be_nil
155
+ expect(get_selinux_default_context("/root/chuj")).to be_nil
156
+ end
149
157
  end
150
158
 
151
159
  it "handles no such file or directory errors by issuing a warning" do
152
- allow(self).to receive(:selinux_support?).and_return(true)
153
- allow(self).to receive(:selinux_label_support?).and_return(true)
154
- allow(Selinux).to receive(:matchpathcon).with("/root/chuj", 0).and_return(-1)
155
- allow(self).to receive(:file_lstat).with("/root/chuj").and_raise(Errno::ENOENT, "/root/chuj")
160
+ without_partial_double_verification do
161
+ allow(self).to receive(:selinux_support?).and_return(true)
162
+ allow(self).to receive(:selinux_label_support?).and_return(true)
163
+ allow(Selinux).to receive(:matchpathcon).with("/root/chuj", 0).and_return(-1)
164
+ allow(self).to receive(:file_lstat).with("/root/chuj").and_raise(Errno::ENOENT, "/root/chuj")
156
165
 
157
- expect(get_selinux_default_context("/root/chuj")).to be_nil
166
+ expect(get_selinux_default_context("/root/chuj")).to be_nil
167
+ end
158
168
  end
159
169
 
160
170
  it "should return nil if matchpathcon returns failure" do
161
- expect(self).to receive(:selinux_support?).and_return(true)
162
- fstat = double('File::Stat', :mode => 0)
163
- expect(Puppet::FileSystem).to receive(:lstat).with('/foo').and_return(fstat)
164
- expect(self).to receive(:find_fs).with("/foo").and_return("ext3")
165
- expect(Selinux).to receive(:matchpathcon).with("/foo", 0).and_return(-1)
166
-
167
- expect(get_selinux_default_context("/foo")).to be_nil
171
+ without_partial_double_verification do
172
+ expect(self).to receive(:selinux_support?).and_return(true)
173
+ fstat = double('File::Stat', :mode => 0)
174
+ expect(Puppet::FileSystem).to receive(:lstat).with('/foo').and_return(fstat)
175
+ expect(self).to receive(:find_fs).with("/foo").and_return("ext3")
176
+ expect(Selinux).to receive(:matchpathcon).with("/foo", 0).and_return(-1)
177
+
178
+ expect(get_selinux_default_context("/foo")).to be_nil
179
+ end
168
180
  end
169
181
 
170
182
  it "should return nil if selinux_label_support returns false" do
171
- expect(self).to receive(:selinux_support?).and_return(true)
172
- expect(self).to receive(:find_fs).with("/foo").and_return("nfs")
173
- expect(get_selinux_default_context("/foo")).to be_nil
183
+ without_partial_double_verification do
184
+ expect(self).to receive(:selinux_support?).and_return(true)
185
+ expect(self).to receive(:find_fs).with("/foo").and_return("nfs")
186
+ expect(get_selinux_default_context("/foo")).to be_nil
187
+ end
174
188
  end
175
189
  end
176
190
 
@@ -261,37 +275,47 @@ describe Puppet::Util::SELinux do
261
275
  end
262
276
 
263
277
  it "should use lsetfilecon to set a context" do
264
- expect(self).to receive(:selinux_support?).and_return(true)
265
- expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0").and_return(0)
266
- expect(set_selinux_context("/foo", "user_u:role_r:type_t:s0")).to be_truthy
278
+ without_partial_double_verification do
279
+ expect(self).to receive(:selinux_support?).and_return(true)
280
+ expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0").and_return(0)
281
+ expect(set_selinux_context("/foo", "user_u:role_r:type_t:s0")).to be_truthy
282
+ end
267
283
  end
268
284
 
269
285
  it "should use lsetfilecon to set user_u user context" do
270
- expect(self).to receive(:selinux_support?).and_return(true)
271
- expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "foo:role_r:type_t:s0"])
272
- expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0").and_return(0)
273
- expect(set_selinux_context("/foo", "user_u", :seluser)).to be_truthy
286
+ without_partial_double_verification do
287
+ expect(self).to receive(:selinux_support?).and_return(true)
288
+ expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "foo:role_r:type_t:s0"])
289
+ expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0").and_return(0)
290
+ expect(set_selinux_context("/foo", "user_u", :seluser)).to be_truthy
291
+ end
274
292
  end
275
293
 
276
294
  it "should use lsetfilecon to set role_r role context" do
277
- expect(self).to receive(:selinux_support?).and_return(true)
278
- expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "user_u:foo:type_t:s0"])
279
- expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0").and_return(0)
280
- expect(set_selinux_context("/foo", "role_r", :selrole)).to be_truthy
295
+ without_partial_double_verification do
296
+ expect(self).to receive(:selinux_support?).and_return(true)
297
+ expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "user_u:foo:type_t:s0"])
298
+ expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0").and_return(0)
299
+ expect(set_selinux_context("/foo", "role_r", :selrole)).to be_truthy
300
+ end
281
301
  end
282
302
 
283
303
  it "should use lsetfilecon to set type_t type context" do
284
- expect(self).to receive(:selinux_support?).and_return(true)
285
- expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "user_u:role_r:foo:s0"])
286
- expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0").and_return(0)
287
- expect(set_selinux_context("/foo", "type_t", :seltype)).to be_truthy
304
+ without_partial_double_verification do
305
+ expect(self).to receive(:selinux_support?).and_return(true)
306
+ expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "user_u:role_r:foo:s0"])
307
+ expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0").and_return(0)
308
+ expect(set_selinux_context("/foo", "type_t", :seltype)).to be_truthy
309
+ end
288
310
  end
289
311
 
290
312
  it "should use lsetfilecon to set s0:c3,c5 range context" do
291
- expect(self).to receive(:selinux_support?).and_return(true)
292
- expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "user_u:role_r:type_t:s0"])
293
- expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0:c3,c5").and_return(0)
294
- expect(set_selinux_context("/foo", "s0:c3,c5", :selrange)).to be_truthy
313
+ without_partial_double_verification do
314
+ expect(self).to receive(:selinux_support?).and_return(true)
315
+ expect(Selinux).to receive(:lgetfilecon).with("/foo").and_return([0, "user_u:role_r:type_t:s0"])
316
+ expect(Selinux).to receive(:lsetfilecon).with("/foo", "user_u:role_r:type_t:s0:c3,c5").and_return(0)
317
+ expect(set_selinux_context("/foo", "s0:c3,c5", :selrange)).to be_truthy
318
+ end
295
319
  end
296
320
  end
297
321
 
@@ -143,9 +143,11 @@ describe Puppet::Util::Storage do
143
143
  end
144
144
 
145
145
  it "should raise an error if the state file does not contain valid YAML and cannot be renamed" do
146
+ allow(File).to receive(:rename).and_call_original
147
+
146
148
  write_state_file('{ invalid')
147
149
 
148
- expect(File).to receive(:rename).and_raise(SystemCallError)
150
+ expect(File).to receive(:rename).with(@state_file, "#{@state_file}.bad").and_raise(SystemCallError)
149
151
 
150
152
  expect { Puppet::Util::Storage.load }.to raise_error(Puppet::Error, /Could not rename/)
151
153
  end
@@ -14,12 +14,14 @@ describe Puppet::Util::SUIDManager do
14
14
  pwent = double('pwent', :name => 'fred', :uid => 42, :gid => 42)
15
15
  allow(Etc).to receive(:getpwuid).with(42).and_return(pwent)
16
16
 
17
- [:euid, :egid, :uid, :gid, :groups].each do |id|
18
- allow(Process).to receive("#{id}=") {|value| xids[id] = value}
17
+ unless Puppet::Util::Platform.windows?
18
+ [:euid, :egid, :uid, :gid, :groups].each do |id|
19
+ allow(Process).to receive("#{id}=") {|value| xids[id] = value}
20
+ end
19
21
  end
20
22
  end
21
23
 
22
- describe "#initgroups" do
24
+ describe "#initgroups", unless: Puppet::Util::Platform.windows? do
23
25
  it "should use the primary group of the user as the 'basegid'" do
24
26
  expect(Process).to receive(:initgroups).with('fred', 42)
25
27
  described_class.initgroups(42)
@@ -27,7 +29,7 @@ describe Puppet::Util::SUIDManager do
27
29
  end
28
30
 
29
31
  describe "#uid" do
30
- it "should allow setting euid/egid" do
32
+ it "should allow setting euid/egid", unless: Puppet::Util::Platform.windows? do
31
33
  Puppet::Util::SUIDManager.egid = user[:gid]
32
34
  Puppet::Util::SUIDManager.euid = user[:uid]
33
35
 
@@ -37,8 +39,7 @@ describe Puppet::Util::SUIDManager do
37
39
  end
38
40
 
39
41
  describe "#asuser" do
40
- it "should not get or set euid/egid when not root" do
41
- allow(Puppet::Util::Platform).to receive(:windows?).and_return(false)
42
+ it "should not get or set euid/egid when not root", unless: Puppet::Util::Platform.windows? do
42
43
  allow(Process).to receive(:uid).and_return(1)
43
44
 
44
45
  allow(Process).to receive(:egid).and_return(51)
@@ -49,13 +50,12 @@ describe Puppet::Util::SUIDManager do
49
50
  expect(xids).to be_empty
50
51
  end
51
52
 
52
- context "when root and not windows" do
53
+ context "when root and not Windows" do
53
54
  before :each do
54
55
  allow(Process).to receive(:uid).and_return(0)
55
- allow(Puppet::Util::Platform).to receive(:windows?).and_return(false)
56
56
  end
57
57
 
58
- it "should set euid/egid" do
58
+ it "should set euid/egid", unless: Puppet::Util::Platform.windows? do
59
59
  allow(Process).to receive(:egid).and_return(51, 51, user[:gid])
60
60
  allow(Process).to receive(:euid).and_return(50, 50, user[:uid])
61
61
 
@@ -79,29 +79,23 @@ describe Puppet::Util::SUIDManager do
79
79
  end
80
80
 
81
81
  it "should just yield if user and group are nil" do
82
- yielded = false
83
- Puppet::Util::SUIDManager.asuser(nil, nil) { yielded = true }
84
- expect(yielded).to be_truthy
82
+ expect { |b| Puppet::Util::SUIDManager.asuser(nil, nil, &b) }.to yield_control
85
83
  expect(xids).to eq({})
86
84
  end
87
85
 
88
- it "should just change group if only group is given" do
89
- yielded = false
90
- Puppet::Util::SUIDManager.asuser(nil, 42) { yielded = true }
91
- expect(yielded).to be_truthy
86
+ it "should just change group if only group is given", unless: Puppet::Util::Platform.windows? do
87
+ expect { |b| Puppet::Util::SUIDManager.asuser(nil, 42, &b) }.to yield_control
92
88
  expect(xids).to eq({ :egid => 42 })
93
89
  end
94
90
 
95
- it "should change gid to the primary group of uid by default" do
91
+ it "should change gid to the primary group of uid by default", unless: Puppet::Util::Platform.windows? do
96
92
  allow(Process).to receive(:initgroups)
97
93
 
98
- yielded = false
99
- Puppet::Util::SUIDManager.asuser(42) { yielded = true }
100
- expect(yielded).to be_truthy
94
+ expect { |b| Puppet::Util::SUIDManager.asuser(42, nil, &b) }.to yield_control
101
95
  expect(xids).to eq({ :euid => 42, :egid => 42 })
102
96
  end
103
97
 
104
- it "should change both uid and gid if given" do
98
+ it "should change both uid and gid if given", unless: Puppet::Util::Platform.windows? do
105
99
  # I don't like the sequence, but it is the only way to assert on the
106
100
  # internal behaviour in a reliable fashion, given we need multiple
107
101
  # sequenced calls to the same methods. --daniel 2012-02-05
@@ -110,21 +104,23 @@ describe Puppet::Util::SUIDManager do
110
104
  expect(Puppet::Util::SUIDManager).to receive(:change_group).with(Puppet::Util::SUIDManager.egid, false).ordered()
111
105
  expect(Puppet::Util::SUIDManager).to receive(:change_user).with(Puppet::Util::SUIDManager.euid, false).ordered()
112
106
 
113
- yielded = false
114
- Puppet::Util::SUIDManager.asuser(42, 43) { yielded = true }
115
- expect(yielded).to be_truthy
107
+ expect { |b| Puppet::Util::SUIDManager.asuser(42, 43, &b) }.to yield_control
116
108
  end
117
109
  end
118
110
 
119
- it "should not get or set euid/egid on Windows", if: Puppet::Util::Platform.windows? do
120
- Puppet::Util::SUIDManager.asuser(user[:uid], user[:gid]) {}
121
-
122
- expect(xids).to be_empty
111
+ it "should just yield on Windows", if: Puppet::Util::Platform.windows? do
112
+ expect { |b| Puppet::Util::SUIDManager.asuser(1, 2, &b) }.to yield_control
123
113
  end
124
114
  end
125
115
 
126
116
  describe "#change_group" do
127
- describe "when changing permanently" do
117
+ it "raises on Windows", if: Puppet::Util::Platform.windows? do
118
+ expect {
119
+ Puppet::Util::SUIDManager.change_group(42, true)
120
+ }.to raise_error(NotImplementedError, /change_privilege\(\) function is unimplemented/)
121
+ end
122
+
123
+ describe "when changing permanently", unless: Puppet::Util::Platform.windows? do
128
124
  it "should change_privilege" do
129
125
  expect(Process::GID).to receive(:change_privilege) do |gid|
130
126
  Process.gid = gid
@@ -150,7 +146,7 @@ describe Puppet::Util::SUIDManager do
150
146
  end
151
147
  end
152
148
 
153
- describe "when changing temporarily" do
149
+ describe "when changing temporarily", unless: Puppet::Util::Platform.windows? do
154
150
  it "should change only egid" do
155
151
  Puppet::Util::SUIDManager.change_group(42, false)
156
152
 
@@ -161,7 +157,13 @@ describe Puppet::Util::SUIDManager do
161
157
  end
162
158
 
163
159
  describe "#change_user" do
164
- describe "when changing permanently" do
160
+ it "raises on Windows", if: Puppet::Util::Platform.windows? do
161
+ expect {
162
+ Puppet::Util::SUIDManager.change_user(42, true)
163
+ }.to raise_error(NotImplementedError, /initgroups\(\) function is unimplemented/)
164
+ end
165
+
166
+ describe "when changing permanently", unless: Puppet::Util::Platform.windows? do
165
167
  it "should change_privilege" do
166
168
  expect(Process::UID).to receive(:change_privilege) do |uid|
167
169
  Process.uid = uid
@@ -191,7 +193,7 @@ describe Puppet::Util::SUIDManager do
191
193
  end
192
194
  end
193
195
 
194
- describe "when changing temporarily" do
196
+ describe "when changing temporarily", unless: Puppet::Util::Platform.windows? do
195
197
  it "should change only euid and groups" do
196
198
  allow(Puppet::Util::SUIDManager).to receive(:initgroups).and_return([])
197
199
  Puppet::Util::SUIDManager.change_user(42, false)
@@ -221,12 +223,7 @@ describe Puppet::Util::SUIDManager do
221
223
  end
222
224
 
223
225
  describe "#root?" do
224
- describe "on POSIX systems" do
225
- before :each do
226
- allow(Puppet.features).to receive(:posix?).and_return(true)
227
- allow(Puppet::Util::Platform).to receive(:windows?).and_return(false)
228
- end
229
-
226
+ describe "on POSIX systems", unless: Puppet::Util::Platform.windows? do
230
227
  it "should be root if uid is 0" do
231
228
  allow(Process).to receive(:uid).and_return(0)
232
229
 
@@ -240,7 +237,7 @@ describe Puppet::Util::SUIDManager do
240
237
  end
241
238
  end
242
239
 
243
- describe "on Microsoft Windows", :if => Puppet::Util::Platform.windows? do
240
+ describe "on Windows", :if => Puppet::Util::Platform.windows? do
244
241
  it "should be root if user is privileged" do
245
242
  allow(Puppet::Util::Windows::User).to receive(:admin?).and_return(true)
246
243
 
@@ -261,13 +258,19 @@ describe 'Puppet::Util::SUIDManager#groups=' do
261
258
  Puppet::Util::SUIDManager
262
259
  end
263
260
 
264
- it "(#3419) should rescue Errno::EINVAL on OS X" do
261
+ it "raises on Windows", if: Puppet::Util::Platform.windows? do
262
+ expect {
263
+ subject.groups = []
264
+ }.to raise_error(NotImplementedError, /groups=\(\) function is unimplemented/)
265
+ end
266
+
267
+ it "(#3419) should rescue Errno::EINVAL on OS X", unless: Puppet::Util::Platform.windows? do
265
268
  expect(Process).to receive(:groups=).and_raise(Errno::EINVAL, 'blew up')
266
269
  expect(subject).to receive(:osx_maj_ver).and_return('10.7').twice
267
270
  subject.groups = ['list', 'of', 'groups']
268
271
  end
269
272
 
270
- it "(#3419) should fail if an Errno::EINVAL is raised NOT on OS X" do
273
+ it "(#3419) should fail if an Errno::EINVAL is raised NOT on OS X", unless: Puppet::Util::Platform.windows? do
271
274
  expect(Process).to receive(:groups=).and_raise(Errno::EINVAL, 'blew up')
272
275
  expect(subject).to receive(:osx_maj_ver).and_return(false)
273
276
  expect { subject.groups = ['list', 'of', 'groups'] }.to raise_error(Errno::EINVAL)