puppet 6.20.0-x64-mingw32 → 7.0.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 (484) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +16 -2
  3. data/Gemfile +0 -2
  4. data/Gemfile.lock +18 -24
  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 +1 -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 +178 -108
  15. data/lib/puppet/application/agent.rb +0 -1
  16. data/lib/puppet/application/apply.rb +2 -3
  17. data/lib/puppet/application/device.rb +100 -105
  18. data/lib/puppet/application/filebucket.rb +13 -9
  19. data/lib/puppet/application/script.rb +0 -1
  20. data/lib/puppet/application/ssl.rb +1 -1
  21. data/lib/puppet/application_support.rb +0 -7
  22. data/lib/puppet/configurer.rb +30 -45
  23. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  24. data/lib/puppet/defaults.rb +97 -167
  25. data/lib/puppet/environments.rb +59 -58
  26. data/lib/puppet/face/facts.rb +51 -51
  27. data/lib/puppet/face/help.rb +1 -1
  28. data/lib/puppet/face/plugin.rb +5 -8
  29. data/lib/puppet/ffi/windows.rb +12 -0
  30. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  31. data/lib/puppet/ffi/windows/constants.rb +404 -0
  32. data/lib/puppet/ffi/windows/functions.rb +628 -0
  33. data/lib/puppet/ffi/windows/structs.rb +338 -0
  34. data/lib/puppet/file_serving/configuration.rb +0 -5
  35. data/lib/puppet/file_serving/configuration/parser.rb +3 -32
  36. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  37. data/lib/puppet/file_serving/mount.rb +1 -2
  38. data/lib/puppet/forge/repository.rb +0 -1
  39. data/lib/puppet/generate/models/type/type.rb +4 -1
  40. data/lib/puppet/http.rb +22 -13
  41. data/lib/puppet/http/client.rb +164 -114
  42. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  43. data/lib/puppet/http/errors.rb +16 -0
  44. data/lib/puppet/http/external_client.rb +5 -7
  45. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  46. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  47. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  48. data/lib/puppet/http/proxy.rb +137 -0
  49. data/lib/puppet/http/redirector.rb +4 -12
  50. data/lib/puppet/http/resolver.rb +5 -15
  51. data/lib/puppet/http/resolver/server_list.rb +6 -10
  52. data/lib/puppet/http/resolver/settings.rb +4 -7
  53. data/lib/puppet/http/resolver/srv.rb +7 -11
  54. data/lib/puppet/http/response.rb +36 -54
  55. data/lib/puppet/http/response_converter.rb +24 -0
  56. data/lib/puppet/http/response_net_http.rb +42 -0
  57. data/lib/puppet/http/retry_after_handler.rb +4 -13
  58. data/lib/puppet/http/service.rb +12 -26
  59. data/lib/puppet/http/service/ca.rb +11 -22
  60. data/lib/puppet/http/service/compiler.rb +22 -69
  61. data/lib/puppet/http/service/file_server.rb +18 -27
  62. data/lib/puppet/http/service/puppetserver.rb +26 -12
  63. data/lib/puppet/http/service/report.rb +8 -10
  64. data/lib/puppet/http/session.rb +11 -20
  65. data/lib/puppet/{network/http → http}/site.rb +1 -2
  66. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  67. data/lib/puppet/indirector/facts/facter.rb +24 -3
  68. data/lib/puppet/indirector/facts/rest.rb +3 -22
  69. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  70. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  71. data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
  72. data/lib/puppet/indirector/file_server.rb +1 -8
  73. data/lib/puppet/indirector/generic_http.rb +0 -11
  74. data/lib/puppet/indirector/node/rest.rb +2 -4
  75. data/lib/puppet/indirector/report/rest.rb +3 -8
  76. data/lib/puppet/indirector/request.rb +0 -101
  77. data/lib/puppet/indirector/rest.rb +12 -263
  78. data/lib/puppet/module_tool/applications.rb +0 -1
  79. data/lib/puppet/module_tool/applications/installer.rb +2 -48
  80. data/lib/puppet/module_tool/errors/shared.rb +2 -17
  81. data/lib/puppet/network/authconfig.rb +2 -96
  82. data/lib/puppet/network/authorization.rb +13 -35
  83. data/lib/puppet/network/http.rb +3 -3
  84. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  85. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  86. data/lib/puppet/network/http/connection.rb +247 -316
  87. data/lib/puppet/network/http/handler.rb +0 -1
  88. data/lib/puppet/network/http_pool.rb +16 -34
  89. data/lib/puppet/node.rb +1 -30
  90. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  91. data/lib/puppet/pal/pal_impl.rb +3 -1
  92. data/lib/puppet/parser/ast/leaf.rb +2 -3
  93. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  94. data/lib/puppet/parser/compiler.rb +0 -198
  95. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  96. data/lib/puppet/parser/resource.rb +0 -69
  97. data/lib/puppet/parser/templatewrapper.rb +1 -1
  98. data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -5
  99. data/lib/puppet/pops/evaluator/evaluator_impl.rb +0 -5
  100. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  101. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  102. data/lib/puppet/pops/issues.rb +0 -5
  103. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  104. data/lib/puppet/pops/model/ast.pp +0 -42
  105. data/lib/puppet/pops/model/ast.rb +0 -290
  106. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  107. data/lib/puppet/pops/model/factory.rb +0 -45
  108. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  109. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  110. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  111. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  112. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  113. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  114. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  115. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  116. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  117. data/lib/puppet/pops/types/type_parser.rb +0 -4
  118. data/lib/puppet/pops/types/types.rb +0 -1
  119. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  120. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  121. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  122. data/lib/puppet/provider.rb +0 -13
  123. data/lib/puppet/provider/nameservice.rb +0 -18
  124. data/lib/puppet/provider/package/apt.rb +0 -4
  125. data/lib/puppet/provider/package/dpkg.rb +0 -10
  126. data/lib/puppet/provider/package/gem.rb +23 -3
  127. data/lib/puppet/provider/package/pip.rb +0 -1
  128. data/lib/puppet/provider/package/pkg.rb +0 -4
  129. data/lib/puppet/provider/package/portage.rb +1 -1
  130. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  131. data/lib/puppet/provider/service/smf.rb +191 -73
  132. data/lib/puppet/provider/user/aix.rb +2 -2
  133. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  134. data/lib/puppet/reference/configuration.rb +7 -6
  135. data/lib/puppet/reference/indirection.rb +1 -1
  136. data/lib/puppet/resource.rb +1 -89
  137. data/lib/puppet/resource/catalog.rb +1 -14
  138. data/lib/puppet/resource/type.rb +3 -119
  139. data/lib/puppet/resource/type_collection.rb +3 -48
  140. data/lib/puppet/runtime.rb +1 -2
  141. data/lib/puppet/settings.rb +73 -66
  142. data/lib/puppet/settings/integer_setting.rb +17 -0
  143. data/lib/puppet/settings/port_setting.rb +15 -0
  144. data/lib/puppet/settings/priority_setting.rb +5 -4
  145. data/lib/puppet/ssl.rb +10 -6
  146. data/lib/puppet/ssl/base.rb +3 -5
  147. data/lib/puppet/ssl/certificate.rb +0 -6
  148. data/lib/puppet/ssl/certificate_request.rb +1 -12
  149. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  150. data/lib/puppet/ssl/oids.rb +3 -1
  151. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  152. data/lib/puppet/ssl/state_machine.rb +3 -1
  153. data/lib/puppet/ssl/verifier.rb +2 -0
  154. data/lib/puppet/test/test_helper.rb +1 -3
  155. data/lib/puppet/transaction.rb +1 -7
  156. data/lib/puppet/transaction/report.rb +2 -4
  157. data/lib/puppet/type.rb +0 -76
  158. data/lib/puppet/type/file.rb +5 -7
  159. data/lib/puppet/type/file/checksum.rb +1 -1
  160. data/lib/puppet/type/file/source.rb +1 -1
  161. data/lib/puppet/type/filebucket.rb +3 -3
  162. data/lib/puppet/type/package.rb +5 -13
  163. data/lib/puppet/util/autoload.rb +8 -1
  164. data/lib/puppet/util/execution.rb +0 -11
  165. data/lib/puppet/util/http_proxy.rb +2 -215
  166. data/lib/puppet/util/monkey_patches.rb +0 -46
  167. data/lib/puppet/util/posix.rb +5 -54
  168. data/lib/puppet/util/rdoc.rb +0 -7
  169. data/lib/puppet/util/retry_action.rb +1 -1
  170. data/lib/puppet/util/run_mode.rb +9 -1
  171. data/lib/puppet/util/windows.rb +3 -8
  172. data/lib/puppet/util/windows/daemon.rb +360 -0
  173. data/lib/puppet/util/windows/error.rb +1 -0
  174. data/lib/puppet/util/windows/eventlog.rb +4 -9
  175. data/lib/puppet/util/windows/file.rb +8 -242
  176. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  177. data/lib/puppet/util/windows/process.rb +4 -226
  178. data/lib/puppet/util/windows/service.rb +9 -460
  179. data/lib/puppet/util/windows/string.rb +12 -13
  180. data/lib/puppet/util/yaml.rb +0 -22
  181. data/lib/puppet/vendor/require_vendored.rb +0 -1
  182. data/lib/puppet/version.rb +1 -1
  183. data/lib/puppet/x509.rb +5 -1
  184. data/lib/puppet/x509/cert_provider.rb +29 -1
  185. data/locales/puppet.pot +587 -1312
  186. data/man/man5/puppet.conf.5 +39 -99
  187. data/man/man8/puppet-agent.8 +2 -2
  188. data/man/man8/puppet-apply.8 +2 -2
  189. data/man/man8/puppet-catalog.8 +1 -1
  190. data/man/man8/puppet-config.8 +1 -1
  191. data/man/man8/puppet-describe.8 +1 -1
  192. data/man/man8/puppet-device.8 +2 -2
  193. data/man/man8/puppet-doc.8 +1 -1
  194. data/man/man8/puppet-epp.8 +1 -1
  195. data/man/man8/puppet-facts.8 +51 -36
  196. data/man/man8/puppet-filebucket.8 +4 -4
  197. data/man/man8/puppet-generate.8 +1 -1
  198. data/man/man8/puppet-help.8 +1 -1
  199. data/man/man8/puppet-lookup.8 +1 -1
  200. data/man/man8/puppet-module.8 +1 -58
  201. data/man/man8/puppet-node.8 +1 -1
  202. data/man/man8/puppet-parser.8 +1 -1
  203. data/man/man8/puppet-plugin.8 +1 -1
  204. data/man/man8/puppet-report.8 +1 -1
  205. data/man/man8/puppet-resource.8 +1 -1
  206. data/man/man8/puppet-script.8 +2 -2
  207. data/man/man8/puppet-ssl.8 +1 -1
  208. data/man/man8/puppet.8 +2 -2
  209. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  210. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +0 -4
  211. data/spec/integration/application/agent_spec.rb +27 -138
  212. data/spec/integration/application/apply_spec.rb +1 -20
  213. data/spec/integration/application/filebucket_spec.rb +16 -16
  214. data/spec/integration/application/help_spec.rb +2 -0
  215. data/spec/integration/application/plugin_spec.rb +23 -1
  216. data/spec/integration/defaults_spec.rb +14 -3
  217. data/spec/integration/network/http_pool_spec.rb +3 -21
  218. data/spec/integration/parser/catalog_spec.rb +0 -38
  219. data/spec/integration/parser/node_spec.rb +0 -9
  220. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  221. data/spec/integration/resource/type_collection_spec.rb +6 -2
  222. data/spec/integration/transaction_spec.rb +9 -4
  223. data/spec/integration/type/file_spec.rb +5 -4
  224. data/spec/integration/util/windows/adsi_spec.rb +1 -3
  225. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  226. data/spec/integration/util/windows/registry_spec.rb +10 -0
  227. data/spec/integration/util/windows/security_spec.rb +1 -1
  228. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  229. data/spec/lib/puppet_spec/settings.rb +1 -0
  230. data/spec/spec_helper.rb +6 -1
  231. data/spec/unit/agent_spec.rb +6 -10
  232. data/spec/unit/application/agent_spec.rb +1 -0
  233. data/spec/unit/application/facts_spec.rb +35 -0
  234. data/spec/unit/application/filebucket_spec.rb +43 -39
  235. data/spec/unit/application/ssl_spec.rb +2 -2
  236. data/spec/unit/application_spec.rb +9 -51
  237. data/spec/unit/certificate_factory_spec.rb +1 -1
  238. data/spec/unit/configurer/downloader_spec.rb +6 -2
  239. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  240. data/spec/unit/configurer_spec.rb +12 -9
  241. data/spec/unit/confine/feature_spec.rb +1 -1
  242. data/spec/unit/confine_spec.rb +2 -8
  243. data/spec/unit/context/trusted_information_spec.rb +2 -6
  244. data/spec/unit/defaults_spec.rb +72 -42
  245. data/spec/unit/environments_spec.rb +19 -99
  246. data/spec/unit/face/facts_spec.rb +4 -0
  247. data/spec/unit/face/node_spec.rb +11 -0
  248. data/spec/unit/face/plugin_spec.rb +73 -33
  249. data/spec/unit/file_bucket/file_spec.rb +1 -1
  250. data/spec/unit/file_serving/configuration/parser_spec.rb +15 -18
  251. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  252. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  253. data/spec/unit/file_serving/terminus_helper_spec.rb +4 -11
  254. data/spec/unit/forge/module_release_spec.rb +7 -2
  255. data/spec/unit/functions/camelcase_spec.rb +1 -1
  256. data/spec/unit/functions/capitalize_spec.rb +1 -1
  257. data/spec/unit/functions/downcase_spec.rb +1 -1
  258. data/spec/unit/functions/upcase_spec.rb +1 -1
  259. data/spec/unit/http/client_spec.rb +7 -8
  260. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  261. data/spec/unit/http/external_client_spec.rb +4 -4
  262. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  263. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  264. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  265. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  266. data/spec/unit/http/resolver_spec.rb +13 -13
  267. data/spec/unit/http/service/compiler_spec.rb +0 -62
  268. data/spec/unit/http/service/file_server_spec.rb +3 -3
  269. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  270. data/spec/unit/http/service_spec.rb +0 -1
  271. data/spec/unit/http/session_spec.rb +16 -14
  272. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  273. data/spec/unit/indirector/face_spec.rb +1 -0
  274. data/spec/unit/indirector/facts/facter_spec.rb +98 -0
  275. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  276. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +8 -26
  277. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  278. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  279. data/spec/unit/indirector/file_server_spec.rb +1 -15
  280. data/spec/unit/indirector/indirection_spec.rb +12 -8
  281. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  282. data/spec/unit/indirector/request_spec.rb +0 -264
  283. data/spec/unit/indirector/rest_spec.rb +98 -752
  284. data/spec/unit/indirector_spec.rb +2 -2
  285. data/spec/unit/module_tool/applications/installer_spec.rb +0 -66
  286. data/spec/unit/network/authconfig_spec.rb +2 -129
  287. data/spec/unit/network/authorization_spec.rb +2 -55
  288. data/spec/unit/network/formats_spec.rb +4 -4
  289. data/spec/unit/network/http/api/indirected_routes_spec.rb +5 -92
  290. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  291. data/spec/unit/network/http/api_spec.rb +10 -0
  292. data/spec/unit/network/http/connection_spec.rb +19 -41
  293. data/spec/unit/network/http/handler_spec.rb +0 -1
  294. data/spec/unit/network/http_pool_spec.rb +0 -4
  295. data/spec/unit/node/environment_spec.rb +33 -21
  296. data/spec/unit/node_spec.rb +2 -54
  297. data/spec/unit/parser/compiler_spec.rb +19 -3
  298. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  299. data/spec/unit/parser/resource_spec.rb +8 -14
  300. data/spec/unit/parser/templatewrapper_spec.rb +3 -4
  301. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  302. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  303. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  304. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  305. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  306. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  307. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  308. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  309. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  310. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  311. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  312. data/spec/unit/pops/visitor_spec.rb +1 -1
  313. data/spec/unit/property_spec.rb +0 -1
  314. data/spec/unit/provider/nameservice_spec.rb +64 -122
  315. data/spec/unit/provider/package/apt_spec.rb +8 -4
  316. data/spec/unit/provider/package/base_spec.rb +5 -6
  317. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  318. data/spec/unit/provider/package/gem_spec.rb +32 -0
  319. data/spec/unit/provider/package/pacman_spec.rb +12 -18
  320. data/spec/unit/provider/package/pip_spec.rb +11 -6
  321. data/spec/unit/provider/package/pkgdmg_spec.rb +4 -0
  322. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  323. data/spec/unit/provider/service/smf_spec.rb +401 -165
  324. data/spec/unit/provider/service/windows_spec.rb +0 -1
  325. data/spec/unit/provider/user/aix_spec.rb +0 -5
  326. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  327. data/spec/unit/provider/user/pw_spec.rb +0 -2
  328. data/spec/unit/provider/user/useradd_spec.rb +0 -1
  329. data/spec/unit/provider_spec.rb +8 -18
  330. data/spec/unit/resource/type_collection_spec.rb +2 -22
  331. data/spec/unit/resource/type_spec.rb +1 -1
  332. data/spec/unit/resource_spec.rb +10 -67
  333. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  334. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  335. data/spec/unit/settings/port_setting_spec.rb +31 -0
  336. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  337. data/spec/unit/settings_spec.rb +23 -13
  338. data/spec/unit/ssl/base_spec.rb +37 -3
  339. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  340. data/spec/unit/ssl/certificate_spec.rb +2 -11
  341. data/spec/unit/ssl/ssl_provider_spec.rb +2 -5
  342. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  343. data/spec/unit/ssl/verifier_spec.rb +0 -21
  344. data/spec/unit/transaction/additional_resource_generator_spec.rb +7 -3
  345. data/spec/unit/transaction/event_manager_spec.rb +11 -14
  346. data/spec/unit/transaction/report_spec.rb +0 -2
  347. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  348. data/spec/unit/transaction_spec.rb +48 -91
  349. data/spec/unit/type/file/checksum_spec.rb +6 -6
  350. data/spec/unit/type/file/content_spec.rb +2 -1
  351. data/spec/unit/type/file/ensure_spec.rb +1 -1
  352. data/spec/unit/type/file/mode_spec.rb +1 -1
  353. data/spec/unit/type/file/selinux_spec.rb +2 -0
  354. data/spec/unit/type/file/source_spec.rb +0 -1
  355. data/spec/unit/type/file_spec.rb +18 -6
  356. data/spec/unit/type/group_spec.rb +6 -13
  357. data/spec/unit/type/package_spec.rb +1 -1
  358. data/spec/unit/type/resources_spec.rb +7 -7
  359. data/spec/unit/type/service_spec.rb +1 -1
  360. data/spec/unit/type/tidy_spec.rb +1 -0
  361. data/spec/unit/type_spec.rb +22 -2
  362. data/spec/unit/util/at_fork_spec.rb +2 -2
  363. data/spec/unit/util/autoload_spec.rb +1 -5
  364. data/spec/unit/util/backups_spec.rb +2 -3
  365. data/spec/unit/util/execution_spec.rb +11 -44
  366. data/spec/unit/util/inifile_spec.rb +14 -6
  367. data/spec/unit/util/log_spec.rb +7 -8
  368. data/spec/unit/util/logging_spec.rb +3 -3
  369. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  370. data/spec/unit/util/posix_spec.rb +15 -363
  371. data/spec/unit/util/run_mode_spec.rb +21 -121
  372. data/spec/unit/util/selinux_spec.rb +52 -76
  373. data/spec/unit/util/storage_spec.rb +1 -3
  374. data/spec/unit/util/suidmanager_spec.rb +41 -44
  375. data/spec/unit/util/windows/string_spec.rb +1 -3
  376. data/spec/unit/util/yaml_spec.rb +0 -54
  377. data/spec/unit/util_spec.rb +6 -31
  378. metadata +40 -233
  379. data/conf/auth.conf +0 -150
  380. data/lib/puppet/application/cert.rb +0 -76
  381. data/lib/puppet/application/key.rb +0 -4
  382. data/lib/puppet/application/man.rb +0 -4
  383. data/lib/puppet/application/status.rb +0 -4
  384. data/lib/puppet/face/key.rb +0 -16
  385. data/lib/puppet/face/man.rb +0 -145
  386. data/lib/puppet/face/module/build.rb +0 -14
  387. data/lib/puppet/face/module/generate.rb +0 -14
  388. data/lib/puppet/face/module/search.rb +0 -103
  389. data/lib/puppet/face/status.rb +0 -51
  390. data/lib/puppet/ffi/posix.rb +0 -10
  391. data/lib/puppet/ffi/posix/constants.rb +0 -14
  392. data/lib/puppet/ffi/posix/functions.rb +0 -24
  393. data/lib/puppet/indirector/certificate/file.rb +0 -9
  394. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  395. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  396. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  397. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  398. data/lib/puppet/indirector/file_content/http.rb +0 -22
  399. data/lib/puppet/indirector/key/file.rb +0 -46
  400. data/lib/puppet/indirector/key/memory.rb +0 -7
  401. data/lib/puppet/indirector/ssl_file.rb +0 -162
  402. data/lib/puppet/indirector/status.rb +0 -3
  403. data/lib/puppet/indirector/status/local.rb +0 -12
  404. data/lib/puppet/indirector/status/rest.rb +0 -27
  405. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  406. data/lib/puppet/network/auth_config_parser.rb +0 -90
  407. data/lib/puppet/network/authstore.rb +0 -283
  408. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  409. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  410. data/lib/puppet/network/http/base_pool.rb +0 -36
  411. data/lib/puppet/network/http/compression.rb +0 -127
  412. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  413. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  414. data/lib/puppet/network/rest_controller.rb +0 -2
  415. data/lib/puppet/network/rights.rb +0 -210
  416. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  417. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  418. data/lib/puppet/parser/environment_compiler.rb +0 -202
  419. data/lib/puppet/pops/types/enumeration.rb +0 -16
  420. data/lib/puppet/resource/capability_finder.rb +0 -154
  421. data/lib/puppet/rest/errors.rb +0 -15
  422. data/lib/puppet/rest/response.rb +0 -35
  423. data/lib/puppet/rest/route.rb +0 -85
  424. data/lib/puppet/rest/routes.rb +0 -135
  425. data/lib/puppet/settings/alias_setting.rb +0 -37
  426. data/lib/puppet/ssl/host.rb +0 -505
  427. data/lib/puppet/ssl/key.rb +0 -61
  428. data/lib/puppet/ssl/validator.rb +0 -61
  429. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  430. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  431. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  432. data/lib/puppet/status.rb +0 -40
  433. data/lib/puppet/util/connection.rb +0 -88
  434. data/lib/puppet/util/fact_dif.rb +0 -62
  435. data/lib/puppet/util/ssl.rb +0 -83
  436. data/lib/puppet/util/windows/api_types.rb +0 -309
  437. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  438. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  439. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  440. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  441. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  442. data/lib/puppet/vendor/pathspec/README.md +0 -53
  443. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  444. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  445. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  446. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  447. data/man/man8/puppet-key.8 +0 -126
  448. data/man/man8/puppet-man.8 +0 -76
  449. data/man/man8/puppet-status.8 +0 -108
  450. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +0 -91
  451. data/spec/integration/network/authconfig_spec.rb +0 -256
  452. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  453. data/spec/unit/application/man_spec.rb +0 -52
  454. data/spec/unit/capability_spec.rb +0 -414
  455. data/spec/unit/face/key_spec.rb +0 -9
  456. data/spec/unit/face/module/search_spec.rb +0 -231
  457. data/spec/unit/face/status_spec.rb +0 -9
  458. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  459. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  460. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  461. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  462. data/spec/unit/indirector/key/file_spec.rb +0 -78
  463. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  464. data/spec/unit/indirector/status/local_spec.rb +0 -10
  465. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  466. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  467. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  468. data/spec/unit/network/authstore_spec.rb +0 -422
  469. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  470. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  471. data/spec/unit/network/http/compression_spec.rb +0 -240
  472. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  473. data/spec/unit/network/http_spec.rb +0 -9
  474. data/spec/unit/network/rights_spec.rb +0 -439
  475. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  476. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +0 -20
  477. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  478. data/spec/unit/resource/capability_finder_spec.rb +0 -148
  479. data/spec/unit/rest/route_spec.rb +0 -132
  480. data/spec/unit/ssl/host_spec.rb +0 -645
  481. data/spec/unit/ssl/key_spec.rb +0 -173
  482. data/spec/unit/ssl/validator_spec.rb +0 -278
  483. data/spec/unit/status_spec.rb +0 -45
  484. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -1,14 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
- require 'puppet/network/http'
3
+ require 'puppet/http'
4
4
 
5
- describe Puppet::Network::HTTP::Site do
5
+ describe Puppet::HTTP::Site do
6
6
  let(:scheme) { 'https' }
7
7
  let(:host) { 'rubygems.org' }
8
8
  let(:port) { 443 }
9
9
 
10
10
  def create_site(scheme, host, port)
11
- Puppet::Network::HTTP::Site.new(scheme, host, port)
11
+ described_class.new(scheme, host, port)
12
12
  end
13
13
 
14
14
  it 'accepts scheme, host, and port' do
@@ -33,6 +33,7 @@ describe Puppet::Indirector::Face do
33
33
  describe "as an instance" do
34
34
  it "should be able to determine its indirection" do
35
35
  # Loading actions here can get, um, complicated
36
+ allow(Puppet::Face).to receive(:load_actions)
36
37
  expect(Puppet::Indirector::Face.new(:catalog, '0.0.1').indirection).to equal(Puppet::Resource::Catalog.indirection)
37
38
  end
38
39
  end
@@ -22,12 +22,14 @@ describe Puppet::Node::Facts::Facter do
22
22
  end
23
23
 
24
24
  before :each do
25
+ allow(Puppet::Node::Facts::Facter).to receive(:reload_facter)
25
26
  @facter = Puppet::Node::Facts::Facter.new
26
27
  allow(Facter).to receive(:to_hash).and_return({})
27
28
  @name = "me"
28
29
  @request = double('request', :key => @name)
29
30
  @environment = double('environment')
30
31
  allow(@request).to receive(:environment).and_return(@environment)
32
+ allow(@request).to receive(:options).and_return({})
31
33
  allow(@request.environment).to receive(:modules).and_return([])
32
34
  allow(@request.environment).to receive(:modulepath).and_return([])
33
35
  end
@@ -104,6 +106,7 @@ describe Puppet::Node::Facts::Facter do
104
106
  expect(FileTest).to receive(:directory?).with(factpath1).and_return(true)
105
107
  expect(FileTest).to receive(:directory?).with(factpath2).and_return(true)
106
108
  allow(@request.environment).to receive(:modulepath).and_return([modulepath])
109
+ allow(@request).to receive(:options).and_return({})
107
110
  expect(Dir).to receive(:glob).with("#{modulepath}/*/lib/facter").and_return([modulelibfacter])
108
111
  expect(Dir).to receive(:glob).with("#{modulepath}/*/plugins/facter").and_return([modulepluginsfacter])
109
112
 
@@ -149,4 +152,99 @@ describe Puppet::Node::Facts::Facter do
149
152
  Puppet::Node::Facts::Facter.setup_external_search_paths @request
150
153
  end
151
154
  end
155
+
156
+ describe 'when :resolve_options is true' do
157
+ let(:options) { { resolve_options: true, user_query: ["os", "timezone"], show_legacy: true } }
158
+ let(:facts) { Puppet::Node::Facts.new("foo") }
159
+
160
+ before :each do
161
+ allow(@request).to receive(:options).and_return(options)
162
+ allow(Puppet::Node::Facts).to receive(:new).and_return(facts)
163
+ allow(Facter).to receive(:respond_to?).and_return(false)
164
+ allow(Facter).to receive(:respond_to?).with(:resolve).and_return(true)
165
+ allow(facts).to receive(:add_local_facts)
166
+ end
167
+
168
+ it 'should call Facter.resolve method' do
169
+ expect(Facter).to receive(:resolve).with("os timezone --show-legacy")
170
+ @facter.find(@request)
171
+ end
172
+
173
+ it 'should NOT add local facts' do
174
+ expect(facts).not_to receive(:add_local_facts)
175
+
176
+ @facter.find(@request)
177
+ end
178
+
179
+ describe 'when Facter version is lower than 4.0.40' do
180
+ before :each do
181
+ allow(Facter).to receive(:respond_to?).and_return(false)
182
+ allow(Facter).to receive(:respond_to?).with(:resolve).and_return(false)
183
+ end
184
+
185
+ it 'raises an error' do
186
+ expect { @facter.find(@request) }.to raise_error(Puppet::Error, "puppet facts show requires version 4.0.40 or greater of Facter.")
187
+ end
188
+ end
189
+
190
+ describe 'when setting up external search paths' do
191
+ let(:options) { { resolve_options: true, user_query: ["os", "timezone"], external_dir: 'some/dir' } }
192
+ let(:pluginfactdest) { File.expand_path 'plugin/dest' }
193
+ let(:modulepath) { File.expand_path 'module/foo' }
194
+ let(:modulefactsd) { File.expand_path 'module/foo/facts.d' }
195
+
196
+ before :each do
197
+ expect(FileTest).to receive(:directory?).with(pluginfactdest).and_return(true)
198
+ mod = Puppet::Module.new('foo', modulepath, @request.environment)
199
+ allow(@request.environment).to receive(:modules).and_return([mod])
200
+ Puppet[:pluginfactdest] = pluginfactdest
201
+ end
202
+
203
+ it 'should skip files' do
204
+ expect(File).to receive(:directory?).with(modulefactsd).and_return(false)
205
+ expect(Facter).to receive(:search_external).with([pluginfactdest, options[:external_dir]])
206
+ Puppet::Node::Facts::Facter.setup_external_search_paths @request
207
+ end
208
+
209
+ it 'should add directories' do
210
+ expect(File).to receive(:directory?).with(modulefactsd).and_return(true)
211
+ expect(Facter).to receive(:search_external).with([modulefactsd, pluginfactdest, options[:external_dir]])
212
+ Puppet::Node::Facts::Facter.setup_external_search_paths @request
213
+ end
214
+ end
215
+
216
+ describe 'when setting up search paths' do
217
+ let(:factpath1) { File.expand_path 'one' }
218
+ let(:factpath2) { File.expand_path 'two' }
219
+ let(:factpath) { [factpath1, factpath2].join(File::PATH_SEPARATOR) }
220
+ let(:modulepath) { File.expand_path 'module/foo' }
221
+ let(:modulelibfacter) { File.expand_path 'module/foo/lib/facter' }
222
+ let(:modulepluginsfacter) { File.expand_path 'module/foo/plugins/facter' }
223
+ let(:options) { { resolve_options: true, custom_dir: 'some/dir' } }
224
+
225
+ before :each do
226
+ expect(FileTest).to receive(:directory?).with(factpath1).and_return(true)
227
+ expect(FileTest).to receive(:directory?).with(factpath2).and_return(true)
228
+ allow(@request.environment).to receive(:modulepath).and_return([modulepath])
229
+ expect(Dir).to receive(:glob).with("#{modulepath}/*/lib/facter").and_return([modulelibfacter])
230
+ expect(Dir).to receive(:glob).with("#{modulepath}/*/plugins/facter").and_return([modulepluginsfacter])
231
+
232
+ Puppet[:factpath] = factpath
233
+ end
234
+
235
+ it 'should skip files' do
236
+ expect(FileTest).to receive(:directory?).with(modulelibfacter).and_return(false)
237
+ expect(FileTest).to receive(:directory?).with(modulepluginsfacter).and_return(false)
238
+ expect(Facter).to receive(:search).with(factpath1, factpath2, options[:custom_dir])
239
+ Puppet::Node::Facts::Facter.setup_search_paths @request
240
+ end
241
+
242
+ it 'should add directories' do
243
+ expect(FileTest).to receive(:directory?).with(modulelibfacter).and_return(true)
244
+ expect(FileTest).to receive(:directory?).with(modulepluginsfacter).and_return(false)
245
+ expect(Facter).to receive(:search).with(modulelibfacter, factpath1, factpath2, options[:custom_dir])
246
+ Puppet::Node::Facts::Facter.setup_search_paths @request
247
+ end
248
+ end
249
+ end
152
250
  end
@@ -18,7 +18,7 @@ describe Puppet::FileBucketFile::File, :uses_checksums => true do
18
18
  describe "when servicing a save request" do
19
19
  it "should return a result whose content is empty" do
20
20
  bucket_file = Puppet::FileBucket::File.new('stuff')
21
- result = Puppet::FileBucket::File.indirection.save(bucket_file, "md5/c13d88cb4cb02003daedb8a84e5d272a")
21
+ result = Puppet::FileBucket::File.indirection.save(bucket_file, "sha256/35bafb1ce99aef3ab068afbaabae8f21fd9b9f02d3a9442e364fa92c0b3eeef0")
22
22
  expect(result.contents).to be_empty
23
23
  end
24
24
 
@@ -34,12 +34,14 @@ describe Puppet::FileBucketFile::File, :uses_checksums => true do
34
34
  end
35
35
  children.each { |child| Process.wait(child) }
36
36
 
37
- paths = File.read("#{Puppet[:bucketdir]}/9/8/b/f/7/d/8/c/98bf7d8c15784f0a3d63204441e1e2aa/paths").lines.to_a
37
+ paths = File.read("#{Puppet[:bucketdir]}/d/1/b/2/a/5/9/f/d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8/paths").lines.to_a
38
38
  expect(paths.length).to eq(1)
39
39
  expect(Puppet::FileBucket::File.indirection.head("#{bucket_file.checksum_type}/#{bucket_file.checksum_data}/testing")).to be_truthy
40
40
  end
41
41
 
42
42
  it "fails if the contents collide with existing contents" do
43
+ Puppet[:digest_algorithm] = 'md5'
44
+
43
45
  # This is the shortest known MD5 collision (little endian). See https://eprint.iacr.org/2010/643.pdf
44
46
  first_contents = [0x6165300e,0x87a79a55,0xf7c60bd0,0x34febd0b,
45
47
  0x6503cf04,0x854f709e,0xfb0fc034,0x874c9c65,
@@ -66,7 +68,7 @@ describe Puppet::FileBucketFile::File, :uses_checksums => true do
66
68
  context "when the contents file exists but is corrupted and does not match the expected checksum" do
67
69
  let(:original_contents) { "a file that will get corrupted" }
68
70
  let(:bucket_file) { Puppet::FileBucket::File.new(original_contents) }
69
- let(:contents_file) { "#{Puppet[:bucketdir]}/8/e/6/4/f/8/5/d/8e64f85dd54a412f65edabcafe44d491/contents" }
71
+ let(:contents_file) { "#{Puppet[:bucketdir]}/7/7/4/1/0/2/7/9/77410279bb789b799c2f38bf654b46a509dd27ddad6e47a6684805e9ba390bce/contents" }
70
72
 
71
73
  before(:each) do
72
74
  # Ensure we're starting with a clean slate - no pre-existing backup
@@ -5,40 +5,22 @@ require 'puppet/indirector/file_bucket_file/file'
5
5
  require 'puppet/indirector/file_bucket_file/rest'
6
6
 
7
7
  describe Puppet::FileBucketFile::Selector do
8
- let(:model) { Puppet::FileBucket::File.new('') }
9
- let(:indirection) { Puppet::FileBucket::File.indirection }
10
- let(:terminus) { indirection.terminus(:selector) }
11
-
12
8
  %w[head find save search destroy].each do |method|
13
9
  describe "##{method}" do
14
10
  it "should proxy to rest terminus for https requests" do
15
- key = "https://example.com/path/to/file"
11
+ request = double('request', :protocol => 'https')
16
12
 
17
- expect(indirection.terminus(:rest)).to receive(method)
13
+ expect_any_instance_of(Puppet::FileBucketFile::Rest).to receive(method).with(request)
18
14
 
19
- if method == 'save'
20
- terminus.send(method, indirection.request(method, key, model))
21
- else
22
- terminus.send(method, indirection.request(method, key, nil))
23
- end
15
+ subject.send(method, request)
24
16
  end
25
17
 
26
18
  it "should proxy to file terminus for other requests" do
27
- key = "file:///path/to/file"
28
-
29
- case method
30
- when 'save'
31
- expect(indirection.terminus(:file)).to receive(method)
32
- terminus.send(method, indirection.request(method, key, model))
33
- when 'find', 'head'
34
- expect(indirection.terminus(:file)).to receive(method)
35
- terminus.send(method, indirection.request(method, key, nil))
36
- else
37
- # file terminus doesn't implement search or destroy
38
- expect {
39
- terminus.send(method, indirection.request(method, key, nil))
40
- }.to raise_error(NoMethodError)
41
- end
19
+ request = double('request', :protocol => 'file')
20
+
21
+ expect_any_instance_of(Puppet::FileBucketFile::File).to receive(method).with(request)
22
+
23
+ subject.send(method, request)
42
24
  end
43
25
  end
44
26
  end
@@ -57,8 +57,4 @@ describe Puppet::Indirector::FileContent::Rest do
57
57
 
58
58
  described_class.indirection.find("puppet://example.com:8140/:mount/path/to/file")
59
59
  end
60
-
61
- it "should use the :fileserver SRV service" do
62
- expect(Puppet::Indirector::FileContent::Rest.srv_service).to eq(:fileserver)
63
- end
64
60
  end
@@ -113,8 +113,4 @@ describe Puppet::Indirector::FileMetadata::Rest do
113
113
  model.indirection.search("puppet://example.com:8140/:mount/path/to/dir")
114
114
  end
115
115
  end
116
-
117
- it "should use the :fileserver SRV service" do
118
- expect(Puppet::Indirector::FileMetadata::Rest.srv_service).to eq(:fileserver)
119
- end
120
116
  end
@@ -246,7 +246,7 @@ describe Puppet::Indirector::FileServer do
246
246
  end
247
247
 
248
248
  describe "when checking authorization" do
249
- let(:mount) { double('mount', :empty? => nil, :globalallow? => nil) }
249
+ let(:mount) { double('mount') }
250
250
  let(:request) { Puppet::Indirector::Request.new(:myind, :mymethod, uri, :environment => "myenv") }
251
251
 
252
252
  before(:each) do
@@ -282,21 +282,7 @@ describe Puppet::Indirector::FileServer do
282
282
  end
283
283
 
284
284
  it "should return true when no auth directives are defined for the mount point" do
285
- allow(mount).to receive(:empty?).and_return(true)
286
- allow(mount).to receive(:globalallow?).and_return(nil)
287
285
  expect(terminus).to be_authorized(request)
288
286
  end
289
-
290
- it "should return true when a global allow directive is defined for the mount point" do
291
- allow(mount).to receive(:empty?).and_return(false)
292
- allow(mount).to receive(:globalallow?).and_return(true)
293
- expect(terminus).to be_authorized(request)
294
- end
295
-
296
- it "should return false when a non-global allow directive is defined for the mount point" do
297
- allow(mount).to receive(:empty?).and_return(false)
298
- allow(mount).to receive(:globalallow?).and_return(false)
299
- expect(terminus).not_to be_authorized(request)
300
- end
301
287
  end
302
288
  end
@@ -178,25 +178,29 @@ describe Puppet::Indirector::Indirection do
178
178
 
179
179
  describe "creates a request" do
180
180
  it "should create it with its name as the request's indirection name" do
181
- expect(@indirection.request(:funtest, "yayness", nil).indirection_name).to eq(@indirection.name)
181
+ expect(Puppet::Indirector::Request).to receive(:new).with(@indirection.name, anything, anything)
182
+ @indirection.request(:funtest, "yayness")
182
183
  end
183
184
 
184
185
  it "should require a method and key" do
185
- request = @indirection.request(:funtest, "yayness", nil)
186
- expect(request.method).to eq(:funtest)
187
- expect(request.key).to eq("yayness")
186
+ expect(Puppet::Indirector::Request).to receive(:new).with(anything, :funtest, "yayness")
187
+ @indirection.request(:funtest, "yayness")
188
188
  end
189
189
 
190
190
  it "should support optional arguments" do
191
- expect(@indirection.request(:funtest, "yayness", nil, :one => :two).options).to eq(:one => :two)
191
+ expect(Puppet::Indirector::Request).to receive(:new).with(anything, anything, anything, {:one => :two})
192
+ @indirection.request(:funtest, "yayness", :one => :two)
192
193
  end
193
194
 
194
195
  it "should not pass options if none are supplied" do
195
- expect(@indirection.request(:funtest, "yayness", nil).options).to eq({})
196
+ expect(Puppet::Indirector::Request).to receive(:new).with(anything, anything, anything)
197
+ @indirection.request(:funtest, "yayness")
196
198
  end
197
199
 
198
200
  it "should return the request" do
199
- expect(@indirection.request(:funtest, "yayness", nil)).to be_a(Puppet::Indirector::Request)
201
+ request = double('request')
202
+ expect(Puppet::Indirector::Request).to receive(:new).and_return(request)
203
+ expect(@indirection.request(:funtest, "yayness")).to equal(request)
200
204
  end
201
205
  end
202
206
 
@@ -829,7 +833,7 @@ describe Puppet::Indirector::Indirection do
829
833
  end
830
834
 
831
835
  it "should not create a terminus instance until one is actually needed" do
832
- expect(@indirection).not_to receive(:terminus)
836
+ expect(Puppet::Indirector).not_to receive(:terminus)
833
837
  Puppet::Indirector::Indirection.new(double('model'), :lazytest)
834
838
  end
835
839
 
@@ -20,21 +20,6 @@ describe Puppet::Transaction::Report::Rest do
20
20
  { body: formatter.render(["store", "http"]), headers: {'Content-Type' => formatter.mime } }
21
21
  end
22
22
 
23
- it "should use the :report_server setting in preference to :server" do
24
- Puppet.settings[:server] = "server"
25
- Puppet.settings[:report_server] = "report_server"
26
- expect(Puppet::Transaction::Report::Rest.server).to eq("report_server")
27
- end
28
-
29
- it "should have a value for report_server and report_port" do
30
- expect(Puppet::Transaction::Report::Rest.server).not_to be_nil
31
- expect(Puppet::Transaction::Report::Rest.port).not_to be_nil
32
- end
33
-
34
- it "should use the :report SRV service" do
35
- expect(Puppet::Transaction::Report::Rest.srv_service).to eq(:report)
36
- end
37
-
38
23
  it "saves a report " do
39
24
  stub_request(:put, uri)
40
25
  .to_return(status: 200, **report_response)
@@ -77,7 +62,7 @@ describe Puppet::Transaction::Report::Rest do
77
62
 
78
63
  stub_request(:put, uri)
79
64
  .to_return(status: 500,
80
- headers: { 'Content-Type' => 'text/pson', Puppet::Network::HTTP::HEADER_PUPPET_VERSION => '4.10.1' })
65
+ headers: { 'Content-Type' => 'text/pson', Puppet::HTTP::HEADER_PUPPET_VERSION => '4.10.1' })
81
66
 
82
67
  expect {
83
68
  described_class.indirection.save(report)
@@ -89,7 +74,7 @@ describe Puppet::Transaction::Report::Rest do
89
74
 
90
75
  stub_request(:put, uri)
91
76
  .to_return(status: 500,
92
- headers: { 'Content-Type' => 'text/pson', Puppet::Network::HTTP::HEADER_PUPPET_VERSION => '4.10.1' })
77
+ headers: { 'Content-Type' => 'text/pson', Puppet::HTTP::HEADER_PUPPET_VERSION => '4.10.1' })
93
78
 
94
79
  expect {
95
80
  described_class.indirection.save(report)
@@ -271,229 +271,6 @@ describe Puppet::Indirector::Request do
271
271
  expect(Puppet::Indirector::Request.new(:myind, :find, "my key", nil, :node => 'foo').to_hash[:node]).to eq('foo')
272
272
  end
273
273
 
274
- describe "when building a query string from its options" do
275
- def a_request_with_options(options)
276
- Puppet::Indirector::Request.new(:myind, :find, "my key", nil, options)
277
- end
278
-
279
- def the_parsed_query_string_from(request)
280
- CGI.parse(request.query_string.sub(/^\?/, ''))
281
- end
282
-
283
- it "should return an empty query string if there are no options" do
284
- request = a_request_with_options(nil)
285
-
286
- expect(request.query_string).to eq("")
287
- end
288
-
289
- it "should return an empty query string if the options are empty" do
290
- request = a_request_with_options({})
291
-
292
- expect(request.query_string).to eq("")
293
- end
294
-
295
- it "should include all options in the query string, separated by '&'" do
296
- request = a_request_with_options(:one => "two", :three => "four")
297
-
298
- expect(the_parsed_query_string_from(request)).to eq({
299
- "one" => ["two"],
300
- "three" => ["four"]
301
- })
302
- end
303
-
304
- it "should ignore nil options" do
305
- request = a_request_with_options(:one => "two", :three => nil)
306
-
307
- expect(the_parsed_query_string_from(request)).to eq({
308
- "one" => ["two"]
309
- })
310
- end
311
-
312
- it "should convert 'true' option values into strings" do
313
- request = a_request_with_options(:one => true)
314
-
315
- expect(the_parsed_query_string_from(request)).to eq({
316
- "one" => ["true"]
317
- })
318
- end
319
-
320
- it "should convert 'false' option values into strings" do
321
- request = a_request_with_options(:one => false)
322
-
323
- expect(the_parsed_query_string_from(request)).to eq({
324
- "one" => ["false"]
325
- })
326
- end
327
-
328
- it "should convert to a string all option values that are integers" do
329
- request = a_request_with_options(:one => 50)
330
-
331
- expect(the_parsed_query_string_from(request)).to eq({
332
- "one" => ["50"]
333
- })
334
- end
335
-
336
- it "should convert to a string all option values that are floating point numbers" do
337
- request = a_request_with_options(:one => 1.2)
338
-
339
- expect(the_parsed_query_string_from(request)).to eq({
340
- "one" => ["1.2"]
341
- })
342
- end
343
-
344
- it "should CGI-escape all option values that are strings" do
345
- request = a_request_with_options(:one => "one two")
346
-
347
- expect(the_parsed_query_string_from(request)).to eq({
348
- "one" => ["one two"]
349
- })
350
- end
351
-
352
- it "should convert an array of values into multiple entries for the same key" do
353
- request = a_request_with_options(:one => %w{one two})
354
-
355
- expect(the_parsed_query_string_from(request)).to eq({
356
- "one" => ["one", "two"]
357
- })
358
- end
359
-
360
- it "should stringify simple data types inside an array" do
361
- request = a_request_with_options(:one => ['one', nil])
362
-
363
- expect(the_parsed_query_string_from(request)).to eq({
364
- "one" => ["one"]
365
- })
366
- end
367
-
368
- it "should error if an array contains another array" do
369
- request = a_request_with_options(:one => ['one', ["not allowed"]])
370
-
371
- expect { request.query_string }.to raise_error(ArgumentError)
372
- end
373
-
374
- it "should error if an array contains illegal data" do
375
- request = a_request_with_options(:one => ['one', { :not => "allowed" }])
376
-
377
- expect { request.query_string }.to raise_error(ArgumentError)
378
- end
379
-
380
- it "should convert to a string and CGI-escape all option values that are symbols" do
381
- request = a_request_with_options(:one => :"sym bol")
382
-
383
- expect(the_parsed_query_string_from(request)).to eq({
384
- "one" => ["sym bol"]
385
- })
386
- end
387
-
388
- it "should fail if options other than booleans or strings are provided" do
389
- request = a_request_with_options(:one => { :one => :two })
390
-
391
- expect { request.query_string }.to raise_error(ArgumentError)
392
- end
393
- end
394
-
395
- context '#do_request' do
396
- before :each do
397
- @request = Puppet::Indirector::Request.new(:myind, :find, "my key", nil)
398
- end
399
-
400
- context 'when not using SRV records' do
401
- before :each do
402
- Puppet.settings[:use_srv_records] = false
403
- end
404
-
405
- it "yields the request with the default server and port when no server or port were specified on the original request" do
406
- count = 0
407
- rval = @request.do_request(:puppet, 'puppet.example.com', '90210') do |got|
408
- count += 1
409
- expect(got.server).to eq('puppet.example.com')
410
- expect(got.port).to eq('90210')
411
- 'Block return value'
412
- end
413
- expect(count).to eq(1)
414
-
415
- expect(rval).to eq('Block return value')
416
- end
417
- end
418
-
419
- context 'when using SRV records' do
420
- before :each do
421
- Puppet.settings[:use_srv_records] = true
422
- Puppet.settings[:srv_domain] = 'example.com'
423
- end
424
-
425
- it "yields the request with the original server and port unmodified" do
426
- @request.server = 'puppet.example.com'
427
- @request.port = '90210'
428
-
429
- count = 0
430
- rval = @request.do_request do |got|
431
- count += 1
432
- expect(got.server).to eq('puppet.example.com')
433
- expect(got.port).to eq('90210')
434
- 'Block return value'
435
- end
436
- expect(count).to eq(1)
437
-
438
- expect(rval).to eq('Block return value')
439
- end
440
-
441
- context "when SRV returns servers" do
442
- before :each do
443
- @dns_mock = double('dns')
444
- expect(Resolv::DNS).to receive(:new).and_return(@dns_mock)
445
-
446
- @port = 7205
447
- @target = 'example.com'
448
- record = Resolv::DNS::Resource::IN::SRV.new(0, 0, @port, @target)
449
- record.instance_variable_set(:@ttl, 10)
450
- @srv_records = [record]
451
-
452
- expect(@dns_mock).to receive(:getresources).
453
- with("_x-puppet._tcp.#{Puppet.settings[:srv_domain]}", Resolv::DNS::Resource::IN::SRV).
454
- and_return(@srv_records)
455
- end
456
-
457
- it "yields a request using the server and port from the SRV record" do
458
- count = 0
459
- rval = @request.do_request do |got|
460
- count += 1
461
- expect(got.server).to eq('example.com')
462
- expect(got.port).to eq(7205)
463
-
464
- @block_return
465
- end
466
- expect(count).to eq(1)
467
-
468
- expect(rval).to eq(@block_return)
469
- end
470
-
471
- it "should fall back to the default server when the block raises a SystemCallError" do
472
- count = 0
473
- second_pass = nil
474
-
475
- rval = @request.do_request(:puppet, 'puppet', 8140) do |got|
476
- count += 1
477
-
478
- if got.server == 'example.com' then
479
- raise SystemCallError, "example failure"
480
- else
481
- second_pass = got
482
- end
483
-
484
- @block_return
485
- end
486
-
487
- expect(second_pass.server).to eq('puppet')
488
- expect(second_pass.port).to eq(8140)
489
- expect(count).to eq(2)
490
-
491
- expect(rval).to eq(@block_return)
492
- end
493
- end
494
- end
495
- end
496
-
497
274
  describe "#remote?" do
498
275
  def request(options = {})
499
276
  Puppet::Indirector::Request.new('node', 'find', 'localhost', nil, options)
@@ -515,45 +292,4 @@ describe Puppet::Indirector::Request do
515
292
  expect(request(:node => 'example.com', :ip => '127.0.0.1')).to be_remote
516
293
  end
517
294
  end
518
-
519
- describe "failover" do
520
- it "should use the provided failover host and port" do
521
- Puppet.override(:server => 'myhost', :serverport => 666) do
522
- req = Puppet::Indirector::Request.new('node', 'find', 'localhost', nil)
523
- req.do_request() do |request|
524
- expect(request.server).to eq('myhost')
525
- expect(request.port).to eq(666)
526
- end
527
- end
528
- end
529
-
530
- it "should not use raw settings when failover fails" do
531
- Puppet.override(:server => nil, :serverport => nil) do
532
- req = Puppet::Indirector::Request.new('node', 'find', 'localhost', nil)
533
- req.do_request() do |request|
534
- expect(request.server).to be_nil
535
- expect(request.port).to be_nil
536
- expect(Puppet.settings[:server]).not_to be_nil
537
- expect(Puppet.settings[:serverport]).not_to be_nil
538
- end
539
- end
540
- end
541
-
542
- it "should use server_list when set and failover has not occured" do
543
- Puppet.settings[:server_list] = [['myhost',666]]
544
- req = Puppet::Indirector::Request.new('node', 'find', 'localhost', nil)
545
- req.do_request() do |request|
546
- expect(request.server).to eq('myhost')
547
- expect(request.port).to eq(666)
548
- end
549
- end
550
-
551
- it "should use server when server_list is not set" do
552
- req = Puppet::Indirector::Request.new('node', 'find', 'localhost', nil)
553
- req.do_request() do |request|
554
- expect(request.server).to eq(Puppet.settings[:server])
555
- expect(request.port).to eq(Puppet.settings[:serverport])
556
- end
557
- end
558
- end
559
295
  end