puppet 6.19.0-x64-mingw32 → 7.3.0-x64-mingw32

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

Potentially problematic release.


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

Files changed (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 -226
  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
@@ -1,3 +1,4 @@
1
+ # coding: utf-8
1
2
  require 'spec_helper'
2
3
 
3
4
  require 'puppet_spec/files'
@@ -657,9 +658,9 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
657
658
 
658
659
  CHECKSUM_TYPES_TO_TRY.each do |checksum_type, checksum|
659
660
  describe "when checksum_type is #{checksum_type}" do
660
- # FileBucket uses the globally configured default for lookup by digest, which right now is MD5.
661
+ # FileBucket uses the globally configured default for lookup by digest, which right now is SHA256.
661
662
  it_should_behave_like "files are backed up", {:checksum => checksum_type} do
662
- let(:filebucket_digest) { Proc.new {|x| Puppet::Util::Checksums.md5(x)} }
663
+ let(:filebucket_digest) { Proc.new {|x| Puppet::Util::Checksums.sha256(x)} }
663
664
  end
664
665
  end
665
666
  end
@@ -1727,7 +1728,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1727
1728
  #{test_cmd} "644" == "$(#{stat_cmd} ^)"
1728
1729
  }))
1729
1730
  report = catalog.apply.report
1730
- expect(report.resource_statuses["File[#{path}]"].events.first.message).to match(/defined content as '{md5}/)
1731
+ expect(report.resource_statuses["File[#{path}]"].events.first.message).to match(/defined content as '{sha256}/)
1731
1732
  expect(report.resource_statuses["File[#{path}]"]).not_to be_failed
1732
1733
  expect(Puppet::FileSystem.exist?(path)).to be_truthy
1733
1734
  end
@@ -1741,7 +1742,7 @@ describe Puppet::Type.type(:file), :uses_checksums => true do
1741
1742
  #{test_cmd} "555" == "$(#{stat_cmd} ^)"
1742
1743
  }))
1743
1744
  report = catalog.apply.report
1744
- expect(report.resource_statuses["File[#{path}]"].events.first.message).to match(/defined content as '{md5}/)
1745
+ expect(report.resource_statuses["File[#{path}]"].events.first.message).to match(/defined content as '{sha256}/)
1745
1746
  expect(report.resource_statuses["File[#{path}]"]).not_to be_failed
1746
1747
  expect(Puppet::FileSystem.exist?(path)).to be_truthy
1747
1748
  end
@@ -157,7 +157,9 @@ describe Puppet::Util::Windows::ADSI::Group,
157
157
 
158
158
  # touch the native_object member to have it lazily loaded, so COM objects can be stubbed
159
159
  admins.native_object
160
- allow(admins.native_object).to receive(:Members).and_return(members)
160
+ without_partial_double_verification do
161
+ allow(admins.native_object).to receive(:Members).and_return(members)
162
+ end
161
163
 
162
164
  # well-known NULL SID
163
165
  expect(admins.members[0].sid).to eq('S-1-0-0')
@@ -0,0 +1,231 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'Process', if: Puppet::Util::Platform.windows? do
6
+ describe '.create' do
7
+ context 'with common flags' do
8
+ it do
9
+ Process.create(
10
+ app_name: 'cmd.exe /c echo 123',
11
+ creation_flags: 0x00000008,
12
+ process_inherit: false,
13
+ thread_inherit: false,
14
+ cwd: 'C:\\'
15
+ )
16
+ end
17
+
18
+ context 'when FFI call fails' do
19
+ before do
20
+ allow(Process).to receive(:CreateProcessW).and_return(false)
21
+ end
22
+
23
+ it 'raises SystemCallError' do
24
+ expect do
25
+ Process.create(
26
+ app_name: 'cmd.exe /c echo 123',
27
+ creation_flags: 0x00000008
28
+ )
29
+ end.to raise_error(SystemCallError)
30
+ end
31
+ end
32
+ end
33
+
34
+ context 'with logon' do
35
+ context 'without password' do
36
+ it 'raises error' do
37
+ expect do
38
+ Process.create(
39
+ app_name: 'cmd.exe /c echo 123',
40
+ creation_flags: 0x00000008,
41
+ with_logon: 'test'
42
+ )
43
+ end.to raise_error(ArgumentError, 'password must be specified if with_logon is used')
44
+ end
45
+ end
46
+
47
+ context 'with common flags' do
48
+ before do
49
+ allow(Process).to receive(:CreateProcessWithLogonW).and_return(true)
50
+ end
51
+
52
+ it do
53
+ Process.create(
54
+ app_name: 'cmd.exe /c echo 123',
55
+ creation_flags: 0x00000008,
56
+ process_inherit: false,
57
+ thread_inherit: false,
58
+ with_logon: 'test',
59
+ password: 'password',
60
+ cwd: 'C:\\'
61
+ )
62
+ end
63
+
64
+ context 'when FFI call fails' do
65
+ before do
66
+ allow(Process).to receive(:CreateProcessWithLogonW).and_return(false)
67
+ end
68
+
69
+ it 'raises SystemCallError' do
70
+ expect do
71
+ Process.create(
72
+ app_name: 'cmd.exe /c echo 123',
73
+ creation_flags: 0x00000008,
74
+ with_logon: 'test',
75
+ password: 'password'
76
+ )
77
+ end.to raise_error(SystemCallError)
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ describe 'validations' do
84
+ context 'when args is not a hash' do
85
+ it 'raises TypeError' do
86
+ expect do
87
+ Process.create('test')
88
+ end.to raise_error(TypeError, 'hash keyword arguments expected')
89
+ end
90
+ end
91
+
92
+ context 'when args key is invalid' do
93
+ it 'raises ArgumentError' do
94
+ expect do
95
+ Process.create(invalid_key: 'test')
96
+ end.to raise_error(ArgumentError, "invalid key 'invalid_key'")
97
+ end
98
+ end
99
+
100
+ context 'when startup_info is invalid' do
101
+ it 'raises ArgumentError' do
102
+ expect do
103
+ Process.create(startup_info: { invalid_key: 'test' })
104
+ end.to raise_error(ArgumentError, "invalid startup_info key 'invalid_key'")
105
+ end
106
+ end
107
+
108
+ context 'when app_name and command_line are missing' do
109
+ it 'raises ArgumentError' do
110
+ expect do
111
+ Process.create(creation_flags: 0)
112
+ end.to raise_error(ArgumentError, 'command_line or app_name must be specified')
113
+ end
114
+ end
115
+
116
+ context 'when executable is not found' do
117
+ it 'raises Errno::ENOENT' do
118
+ expect do
119
+ Process.create(app_name: 'non_existent')
120
+ end.to raise_error(Errno::ENOENT)
121
+ end
122
+ end
123
+ end
124
+
125
+ context 'when environment is not specified' do
126
+ it 'passes local environment' do
127
+ stdout_read, stdout_write = IO.pipe
128
+ ENV['TEST_ENV'] = 'B'
129
+
130
+ Process.create(
131
+ app_name: 'cmd.exe /c echo %TEST_ENV%',
132
+ creation_flags: 0x00000008,
133
+ startup_info: { stdout: stdout_write }
134
+ )
135
+
136
+ stdout_write.close
137
+ expect(stdout_read.read.chomp).to eql('B')
138
+ end
139
+ end
140
+
141
+ context 'when environment is specified' do
142
+ it 'does not pass local environment' do
143
+ stdout_read, stdout_write = IO.pipe
144
+ ENV['TEST_ENV'] = 'B'
145
+
146
+ Process.create(
147
+ app_name: 'cmd.exe /c echo %TEST_ENV%',
148
+ creation_flags: 0x00000008,
149
+ environment: '',
150
+ startup_info: { stdout: stdout_write }
151
+ )
152
+
153
+ stdout_write.close
154
+ expect(stdout_read.read.chomp).to eql('%TEST_ENV%')
155
+ end
156
+
157
+ it 'supports :environment as a string' do
158
+ stdout_read, stdout_write = IO.pipe
159
+
160
+ Process.create(
161
+ app_name: 'cmd.exe /c echo %A% %B%',
162
+ creation_flags: 0x00000008,
163
+ environment: 'A=C;B=D',
164
+ startup_info: { stdout: stdout_write }
165
+ )
166
+
167
+ stdout_write.close
168
+ expect(stdout_read.read.chomp).to eql('C D')
169
+ end
170
+
171
+ it 'supports :environment as a string' do
172
+ stdout_read, stdout_write = IO.pipe
173
+
174
+ Process.create(
175
+ app_name: 'cmd.exe /c echo %A% %C%',
176
+ creation_flags: 0x00000008,
177
+ environment: ['A=B;X;', 'C=;D;Y'],
178
+ startup_info: { stdout: stdout_write }
179
+ )
180
+
181
+ stdout_write.close
182
+ expect(stdout_read.read.chomp).to eql('B;X; ;D;Y')
183
+ end
184
+ end
185
+ end
186
+
187
+ describe '.setpriority' do
188
+ let(:priority) { Process::BELOW_NORMAL_PRIORITY_CLASS }
189
+
190
+ context 'when success' do
191
+ it 'returns 0' do
192
+ expect(Process.setpriority(0, Process.pid, priority)).to eql(0)
193
+ end
194
+
195
+ it 'treats an int argument of zero as the current process' do
196
+ expect(Process.setpriority(0, 0, priority)).to eql(0)
197
+ end
198
+ end
199
+
200
+ context 'when invalid arguments are sent' do
201
+ it 'raises TypeError' do
202
+ expect {
203
+ Process.setpriority('test', 0, priority)
204
+ }.to raise_error(TypeError)
205
+ end
206
+ end
207
+
208
+ context 'when process is not found' do
209
+ before do
210
+ allow(Process).to receive(:OpenProcess).and_return(0)
211
+ end
212
+ it 'raises SystemCallError' do
213
+ expect {
214
+ Process.setpriority(0, 0, priority)
215
+ }.to raise_error(SystemCallError)
216
+ end
217
+ end
218
+
219
+ context 'when priority is not set' do
220
+ before do
221
+ allow(Process).to receive(:SetPriorityClass).and_return(false)
222
+ end
223
+
224
+ it 'raises SystemCallError' do
225
+ expect {
226
+ Process.setpriority(0, 0, priority)
227
+ }.to raise_error(SystemCallError)
228
+ end
229
+ end
230
+ end
231
+ end
@@ -146,16 +146,6 @@ describe Puppet::Util::Windows::Registry do
146
146
  utf_8_bytes = ENDASH_UTF_8 + TM_UTF_8
147
147
  utf_8_str = utf_8_bytes.pack('c*').force_encoding(Encoding::UTF_8)
148
148
 
149
- # this problematic Ruby codepath triggers a conversion of UTF-16LE to
150
- # a local codepage which can totally break when that codepage has no
151
- # conversion from the given UTF-16LE characters to local codepage
152
- # a prime example is that IBM437 has no conversion from a Unicode en-dash
153
- expect(Win32::Registry).not_to receive(:export_string)
154
-
155
- # also, expect that we're using our variants of keys / values, not Rubys
156
- expect(Win32::Registry).not_to receive(:each_key)
157
- expect(Win32::Registry).not_to receive(:each_value)
158
-
159
149
  hklm.create("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS | regsam) do |reg|
160
150
  reg.write("#{guid}", Win32::Registry::REG_SZ, utf_16_str)
161
151
 
@@ -822,7 +822,7 @@ describe "Puppet::Util::Windows::Security", :if => Puppet::Util::Platform.window
822
822
  end
823
823
 
824
824
  describe "locked files" do
825
- let (:explorer) { File.join(Dir::WINDOWS, "explorer.exe") }
825
+ let (:explorer) { File.join(ENV['SystemRoot'], "explorer.exe") }
826
826
 
827
827
  it "should get the owner" do
828
828
  expect(winsec.get_owner(explorer)).to match(/^S-1-5-/)
@@ -103,7 +103,7 @@ class PuppetSpec::Puppetserver
103
103
  end
104
104
 
105
105
  def register_mounts(mounts: {})
106
- register_mount('/status/v1/simple/master', proc { |req, res| }, nil)
106
+ register_mount('/status/v1/simple/server', proc { |req, res| }, nil)
107
107
  register_mount('/puppet/v3/node', mounts[:node], NodeServlet)
108
108
  register_mount('/puppet/v3/catalog', mounts[:catalog], CatalogServlet)
109
109
  register_mount('/puppet/v3/file_metadatas', mounts[:file_metadatas], FileMetadatasServlet)
@@ -11,8 +11,14 @@ module PuppetSpec::Settings
11
11
  :confdir => { :type => :directory, :default => "test", :desc => "confdir" },
12
12
  :codedir => { :type => :directory, :default => "test", :desc => "codedir" },
13
13
  :vardir => { :type => :directory, :default => "test", :desc => "vardir" },
14
+ :publicdir => { :type => :directory, :default => "test", :desc => "publicdir" },
14
15
  :rundir => { :type => :directory, :default => "test", :desc => "rundir" },
15
- }
16
+ }.freeze
17
+
18
+ TEST_APP_DEFAULT_VALUES = TEST_APP_DEFAULT_DEFINITIONS.inject({}) do |memo, (key, value)|
19
+ memo[key] = value[:default]
20
+ memo
21
+ end.freeze
16
22
 
17
23
  def set_puppet_conf(confdir, settings)
18
24
  write_file(File.join(confdir, "puppet.conf"), settings)
@@ -84,10 +84,7 @@ RSpec.configure do |config|
84
84
  config.filter_run_when_matching :focus
85
85
 
86
86
  config.mock_with :rspec do |mocks|
87
- # We really should have this on, but it breaks a _lot_ of tests. We'll
88
- # need to go through and fix those tests first before it can be enabled
89
- # for real.
90
- mocks.verify_partial_doubles = false
87
+ mocks.verify_partial_doubles = true
91
88
  end
92
89
 
93
90
  tmpdir = Puppet::FileSystem.expand_path(Dir.mktmpdir("rspecrun"))
@@ -148,6 +145,7 @@ RSpec.configure do |config|
148
145
 
149
146
  base = PuppetSpec::Files.tmpdir('tmp_settings')
150
147
  Puppet[:vardir] = File.join(base, 'var')
148
+ Puppet[:publicdir] = File.join(base, 'public')
151
149
  Puppet[:confdir] = File.join(base, 'etc')
152
150
  Puppet[:codedir] = File.join(base, 'code')
153
151
  Puppet[:logdir] = "$vardir/log"
@@ -155,6 +153,7 @@ RSpec.configure do |config|
155
153
  Puppet[:hiera_config] = File.join(base, 'hiera')
156
154
 
157
155
  FileUtils.mkdir_p Puppet[:statedir]
156
+ FileUtils.mkdir_p Puppet[:publicdir]
158
157
 
159
158
  Puppet::Test::TestHelper.before_each_test()
160
159
  end
@@ -3,9 +3,13 @@ require 'puppet/agent'
3
3
  require 'puppet/configurer'
4
4
 
5
5
  class AgentTestClient
6
- def run
6
+ def initialize(transaction_uuid = nil, job_id = nil)
7
+ end
8
+
9
+ def run(client_args)
7
10
  # no-op
8
11
  end
12
+
9
13
  def stop
10
14
  # no-op
11
15
  end
@@ -20,8 +24,6 @@ end
20
24
 
21
25
  describe Puppet::Agent do
22
26
  before do
23
- allow(Puppet::Status.indirection).to receive(:find).and_return(Puppet::Status.new("version" => Puppet.version))
24
-
25
27
  @agent = Puppet::Agent.new(AgentTestClient, false)
26
28
 
27
29
  # make Puppet::Application safe for stubbing; restore in an :after block; silence warnings for this.
@@ -51,11 +53,10 @@ describe Puppet::Agent do
51
53
 
52
54
  it "should create an instance of its client class and run it when asked to run" do
53
55
  client = double('client')
54
- expect(AgentTestClient).to receive(:new).and_return(client)
55
-
56
- expect(client).to receive(:run)
56
+ allow(AgentTestClient).to receive(:new).with(nil, nil).and_return(client)
57
57
 
58
58
  allow(@agent).to receive(:disabled?).and_return(false)
59
+ expect(client).to receive(:run)
59
60
  @agent.run
60
61
  end
61
62
 
@@ -92,7 +93,6 @@ describe Puppet::Agent do
92
93
 
93
94
  describe "when being run" do
94
95
  before do
95
- allow(AgentTestClient).to receive(:lockfile_path).and_return("/my/lock")
96
96
  allow(@agent).to receive(:disabled?).and_return(false)
97
97
  end
98
98
 
@@ -188,7 +188,7 @@ describe Puppet::Agent do
188
188
  allow(lockfile).to receive(:lock).and_return(false)
189
189
  end
190
190
 
191
- it "should notify that a run is already in progres" do
191
+ it "should notify that a run is already in progress" do
192
192
  client = AgentTestClient.new
193
193
  expect(AgentTestClient).to receive(:new).and_return(client)
194
194
  expect(Puppet).to receive(:notice).with(/Run of .* already in progress; skipping .* exists/)
@@ -202,7 +202,6 @@ describe Puppet::Application::Agent do
202
202
  allow(Puppet::Resource::Catalog.indirection).to receive(:terminus_class=)
203
203
  allow(Puppet::Resource::Catalog.indirection).to receive(:cache_class=)
204
204
  allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
205
- allow(Puppet).to receive(:settraps)
206
205
  end
207
206
 
208
207
  it "should not run with extra arguments" do
@@ -1,12 +1,232 @@
1
+ # coding: utf-8
1
2
  require 'spec_helper'
2
3
  require 'puppet/application/config'
3
4
 
4
5
  describe Puppet::Application::Config do
5
- it "should be a subclass of Puppet::Application::FaceBase" do
6
- expect(Puppet::Application::Config.superclass).to equal(Puppet::Application::FaceBase)
6
+ include PuppetSpec::Files
7
+
8
+ # different UTF-8 widths
9
+ # 1-byte A
10
+ # 2-byte ۿ - http://www.fileformat.info/info/unicode/char/06ff/index.htm - 0xDB 0xBF / 219 191
11
+ # 3-byte ᚠ - http://www.fileformat.info/info/unicode/char/16A0/index.htm - 0xE1 0x9A 0xA0 / 225 154 160
12
+ # 4-byte 𠜎 - http://www.fileformat.info/info/unicode/char/2070E/index.htm - 0xF0 0xA0 0x9C 0x8E / 240 160 156 142
13
+ MIXED_UTF8 = "A\u06FF\u16A0\u{2070E}" # Aۿᚠ𠜎
14
+
15
+ let(:app) { Puppet::Application[:config] }
16
+
17
+ before :each do
18
+ Puppet[:config] = tmpfile('config')
19
+ end
20
+
21
+ def initialize_app(args)
22
+ app.command_line.args = args
23
+ # ensure global defaults are initialized prior to app defaults
24
+ Puppet.initialize_settings(args)
25
+ end
26
+
27
+ def read_utf8(path)
28
+ File.read(path, :encoding => 'UTF-8')
29
+ end
30
+
31
+ def write_utf8(path, content)
32
+ File.write(path, content, 0, :encoding => 'UTF-8')
33
+ end
34
+
35
+ context "when printing" do
36
+ it "prints a value" do
37
+ initialize_app(%w[print certname])
38
+
39
+ expect {
40
+ app.run
41
+ }.to exit_with(0)
42
+ .and output(a_string_matching(Puppet[:certname])).to_stdout
43
+ end
44
+
45
+ it "prints a value from a section" do
46
+ File.write(Puppet[:config], <<~END)
47
+ [main]
48
+ external_nodes=none
49
+ [server]
50
+ external_nodes=exec
51
+ END
52
+
53
+ initialize_app(%w[print external_nodes --section server])
54
+
55
+ expect {
56
+ app.run
57
+ }.to exit_with(0)
58
+ .and output(a_string_matching('exec')).to_stdout
59
+ end
60
+
61
+ it "doesn't require the environment to exist" do
62
+ initialize_app(%w[print certname --environment doesntexist])
63
+
64
+ expect {
65
+ app.run
66
+ }.to exit_with(0)
67
+ .and output(a_string_matching(Puppet[:certname])).to_stdout
68
+ end
7
69
  end
8
70
 
9
- it "should set `environment_mode` to :not_required" do
10
- expect(Puppet::Application::Config.get_environment_mode).to equal(:not_required)
71
+ context "when setting" do
72
+ it "sets a value in its config file" do
73
+ initialize_app(%w[set certname www.example.com])
74
+
75
+ expect {
76
+ app.run
77
+ }.to exit_with(0)
78
+
79
+ expect(File.read(Puppet[:config])).to eq("[main]\ncertname = www.example.com\n")
80
+ end
81
+
82
+ it "sets a value in the server section" do
83
+ initialize_app(%w[set external_nodes exec --section server])
84
+
85
+ expect {
86
+ app.run
87
+ }.to exit_with(0)
88
+
89
+ expect(File.read(Puppet[:config])).to eq("[server]\nexternal_nodes = exec\n")
90
+ end
91
+
92
+ {
93
+ %w[certname WWW.EXAMPLE.COM] => /Certificate names must be lower case/,
94
+ %w[log_level all] => /Invalid loglevel all/,
95
+ %w[disable_warnings true] => /Cannot disable unrecognized warning types 'true'/,
96
+ %w[strict on] => /Invalid value 'on' for parameter strict/,
97
+ %w[digest_algorithm rot13] => /Invalid value 'rot13' for parameter digest_algorithm/,
98
+ %w[http_proxy_password a#b] => /Passwords set in the http_proxy_password setting must be valid as part of a URL/,
99
+ }.each_pair do |args, message|
100
+ it "rejects #{args.join(' ')}" do
101
+ initialize_app(['set', *args])
102
+
103
+ expect {
104
+ app.run
105
+ }.to exit_with(1)
106
+ .and output(message).to_stderr
107
+ end
108
+ end
109
+
110
+ it 'sets unknown settings' do
111
+ initialize_app(['set', 'notarealsetting', 'true'])
112
+
113
+ expect {
114
+ app.run
115
+ }.to exit_with(0)
116
+
117
+ expect(File.read(Puppet[:config])).to eq("[main]\nnotarealsetting = true\n")
118
+ end
119
+ end
120
+
121
+ context "when deleting" do
122
+ it "deletes a value" do
123
+ initialize_app(%w[delete external_nodes])
124
+
125
+ File.write(Puppet[:config], <<~END)
126
+ [main]
127
+ external_nodes=none
128
+ END
129
+
130
+ expect {
131
+ app.run
132
+ }.to exit_with(0)
133
+ .and output(/Deleted setting from 'main': 'external_nodes=none'/).to_stdout
134
+
135
+ expect(File.read(Puppet[:config])).to eq("[main]\n")
136
+ end
137
+
138
+ it "warns when deleting a value that isn't set" do
139
+ initialize_app(%w[delete external_nodes])
140
+
141
+ File.write(Puppet[:config], "")
142
+
143
+ expect {
144
+ app.run
145
+ }.to exit_with(0)
146
+ .and output(a_string_matching("Warning: No setting found in configuration file for section 'main' setting name 'external_nodes'")).to_stderr
147
+
148
+ expect(File.read(Puppet[:config])).to eq("")
149
+ end
150
+
151
+ it "deletes a value from main" do
152
+ initialize_app(%w[delete external_nodes])
153
+
154
+ File.write(Puppet[:config], <<~END)
155
+ [main]
156
+ external_nodes=none
157
+ END
158
+
159
+ expect {
160
+ app.run
161
+ }.to exit_with(0)
162
+ .and output(/Deleted setting from 'main': 'external_nodes=none'/).to_stdout
163
+
164
+ expect(File.read(Puppet[:config])).to eq("[main]\n")
165
+ end
166
+
167
+ it "deletes a value from main a section" do
168
+ initialize_app(%w[delete external_nodes --section server])
169
+
170
+ File.write(Puppet[:config], <<~END)
171
+ [main]
172
+ external_nodes=none
173
+ [server]
174
+ external_nodes=exec
175
+ END
176
+
177
+ expect {
178
+ app.run
179
+ }.to exit_with(0)
180
+ .and output(/Deleted setting from 'server': 'external_nodes'/).to_stdout
181
+
182
+ expect(File.read(Puppet[:config])).to eq("[main]\nexternal_nodes=none\n[server]\n")
183
+ end
184
+ end
185
+
186
+ context "when managing UTF-8 values" do
187
+ it "reads a UTF-8 value" do
188
+ write_utf8(Puppet[:config], <<~EOF)
189
+ [main]
190
+ tags=#{MIXED_UTF8}
191
+ EOF
192
+
193
+ initialize_app(%w[print tags])
194
+
195
+ expect {
196
+ app.run
197
+ }.to exit_with(0)
198
+ .and output("#{MIXED_UTF8}\n").to_stdout
199
+ end
200
+
201
+ it "sets a UTF-8 value" do
202
+ initialize_app(['set', 'tags', MIXED_UTF8])
203
+
204
+ expect {
205
+ app.run
206
+ }.to exit_with(0)
207
+
208
+ expect(read_utf8(Puppet[:config])).to eq(<<~EOF)
209
+ [main]
210
+ tags = #{MIXED_UTF8}
211
+ EOF
212
+ end
213
+
214
+ it "deletes a UTF-8 value" do
215
+ initialize_app(%w[delete tags])
216
+
217
+ write_utf8(Puppet[:config], <<~EOF)
218
+ [main]
219
+ tags=#{MIXED_UTF8}
220
+ EOF
221
+
222
+ expect {
223
+ app.run
224
+ }.to exit_with(0)
225
+ .and output(/Deleted setting from 'main': 'tags=#{MIXED_UTF8}'/).to_stdout
226
+
227
+ expect(read_utf8(Puppet[:config])).to eq(<<~EOF)
228
+ [main]
229
+ EOF
230
+ end
11
231
  end
12
232
  end