rubygems-update 3.4.22 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +105 -2
  3. data/Manifest.txt +46 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +63 -0
  6. data/bundler/bundler.gemspec +4 -2
  7. data/bundler/exe/bundle +1 -10
  8. data/bundler/lib/bundler/build_metadata.rb +3 -3
  9. data/bundler/lib/bundler/capistrano.rb +1 -1
  10. data/bundler/lib/bundler/checksum.rb +254 -0
  11. data/bundler/lib/bundler/ci_detector.rb +75 -0
  12. data/bundler/lib/bundler/cli/add.rb +3 -3
  13. data/bundler/lib/bundler/cli/binstubs.rb +4 -4
  14. data/bundler/lib/bundler/cli/cache.rb +1 -1
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +9 -1
  17. data/bundler/lib/bundler/cli/config.rb +8 -7
  18. data/bundler/lib/bundler/cli/console.rb +3 -2
  19. data/bundler/lib/bundler/cli/doctor.rb +2 -2
  20. data/bundler/lib/bundler/cli/exec.rb +1 -1
  21. data/bundler/lib/bundler/cli/gem.rb +28 -23
  22. data/bundler/lib/bundler/cli/info.rb +2 -13
  23. data/bundler/lib/bundler/cli/install.rb +5 -4
  24. data/bundler/lib/bundler/cli/issue.rb +1 -1
  25. data/bundler/lib/bundler/cli/lock.rb +4 -4
  26. data/bundler/lib/bundler/cli/open.rb +1 -1
  27. data/bundler/lib/bundler/cli/outdated.rb +6 -6
  28. data/bundler/lib/bundler/cli/plugin.rb +7 -14
  29. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  30. data/bundler/lib/bundler/cli/show.rb +2 -2
  31. data/bundler/lib/bundler/cli/update.rb +5 -5
  32. data/bundler/lib/bundler/cli.rb +215 -263
  33. data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
  34. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  35. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  36. data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
  37. data/bundler/lib/bundler/compact_index_client.rb +14 -7
  38. data/bundler/lib/bundler/constants.rb +1 -1
  39. data/bundler/lib/bundler/current_ruby.rb +5 -21
  40. data/bundler/lib/bundler/definition.rb +42 -15
  41. data/bundler/lib/bundler/dependency.rb +16 -12
  42. data/bundler/lib/bundler/digest.rb +2 -2
  43. data/bundler/lib/bundler/dsl.rb +46 -30
  44. data/bundler/lib/bundler/endpoint_specification.rb +5 -1
  45. data/bundler/lib/bundler/env.rb +1 -3
  46. data/bundler/lib/bundler/errors.rb +43 -0
  47. data/bundler/lib/bundler/fetcher/base.rb +3 -1
  48. data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
  49. data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
  50. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  51. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  52. data/bundler/lib/bundler/fetcher.rb +28 -25
  53. data/bundler/lib/bundler/friendly_errors.rb +5 -5
  54. data/bundler/lib/bundler/gem_helper.rb +1 -1
  55. data/bundler/lib/bundler/gem_helpers.rb +5 -2
  56. data/bundler/lib/bundler/graph.rb +9 -9
  57. data/bundler/lib/bundler/index.rb +1 -2
  58. data/bundler/lib/bundler/injector.rb +1 -1
  59. data/bundler/lib/bundler/inline.rb +3 -3
  60. data/bundler/lib/bundler/installer/gem_installer.rb +5 -5
  61. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
  62. data/bundler/lib/bundler/installer/standalone.rb +2 -3
  63. data/bundler/lib/bundler/installer.rb +9 -9
  64. data/bundler/lib/bundler/lazy_specification.rb +24 -17
  65. data/bundler/lib/bundler/lockfile_generator.rb +9 -0
  66. data/bundler/lib/bundler/lockfile_parser.rb +81 -10
  67. data/bundler/lib/bundler/man/bundle-add.1 +3 -26
  68. data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
  69. data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
  70. data/bundler/lib/bundler/man/bundle-check.1 +3 -12
  71. data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
  72. data/bundler/lib/bundler/man/bundle-config.1 +20 -211
  73. data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
  74. data/bundler/lib/bundler/man/bundle-console.1 +4 -22
  75. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
  76. data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
  77. data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
  78. data/bundler/lib/bundler/man/bundle-help.1 +3 -7
  79. data/bundler/lib/bundler/man/bundle-info.1 +3 -9
  80. data/bundler/lib/bundler/man/bundle-init.1 +3 -12
  81. data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
  82. data/bundler/lib/bundler/man/bundle-install.1 +27 -125
  83. data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
  84. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  85. data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
  86. data/bundler/lib/bundler/man/bundle-open.1 +7 -27
  87. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
  88. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
  89. data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
  90. data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
  91. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  92. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  93. data/bundler/lib/bundler/man/bundle-show.1 +3 -10
  94. data/bundler/lib/bundler/man/bundle-update.1 +18 -137
  95. data/bundler/lib/bundler/man/bundle-version.1 +3 -16
  96. data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
  97. data/bundler/lib/bundler/man/bundle.1 +5 -44
  98. data/bundler/lib/bundler/man/gemfile.5 +24 -301
  99. data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
  100. data/bundler/lib/bundler/match_metadata.rb +4 -0
  101. data/bundler/lib/bundler/match_platform.rb +1 -1
  102. data/bundler/lib/bundler/plugin/api/source.rb +3 -2
  103. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  104. data/bundler/lib/bundler/plugin.rb +3 -3
  105. data/bundler/lib/bundler/resolver/base.rb +1 -1
  106. data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
  107. data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
  108. data/bundler/lib/bundler/resolver.rb +16 -16
  109. data/bundler/lib/bundler/ruby_dsl.rb +20 -12
  110. data/bundler/lib/bundler/ruby_version.rb +1 -1
  111. data/bundler/lib/bundler/rubygems_ext.rb +24 -50
  112. data/bundler/lib/bundler/rubygems_gem_installer.rb +6 -56
  113. data/bundler/lib/bundler/rubygems_integration.rb +25 -94
  114. data/bundler/lib/bundler/runtime.rb +2 -2
  115. data/bundler/lib/bundler/self_manager.rb +23 -7
  116. data/bundler/lib/bundler/settings.rb +27 -7
  117. data/bundler/lib/bundler/setup.rb +4 -1
  118. data/bundler/lib/bundler/shared_helpers.rb +35 -13
  119. data/bundler/lib/bundler/source/git/git_proxy.rb +15 -15
  120. data/bundler/lib/bundler/source/git.rb +4 -3
  121. data/bundler/lib/bundler/source/metadata.rb +15 -15
  122. data/bundler/lib/bundler/source/path.rb +7 -6
  123. data/bundler/lib/bundler/source/rubygems.rb +21 -14
  124. data/bundler/lib/bundler/source.rb +2 -0
  125. data/bundler/lib/bundler/spec_set.rb +38 -10
  126. data/bundler/lib/bundler/stub_specification.rb +1 -0
  127. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  128. data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
  129. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
  130. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  131. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  132. data/bundler/lib/bundler/ui/shell.rb +1 -1
  133. data/bundler/lib/bundler/vendor/connection_pool/.document +1 -0
  134. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  135. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  136. data/bundler/lib/bundler/vendor/fileutils/.document +1 -0
  137. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  138. data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
  140. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
  141. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  142. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +34 -34
  143. data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
  144. data/bundler/lib/bundler/vendor/thor/.document +1 -0
  145. data/bundler/lib/bundler/vendor/tsort/.document +1 -0
  146. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  147. data/bundler/lib/bundler/vendor/uri/.document +1 -0
  148. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  149. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  150. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  151. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  152. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  153. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  154. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  155. data/bundler/lib/bundler/version.rb +1 -1
  156. data/bundler/lib/bundler/vlad.rb +1 -1
  157. data/bundler/lib/bundler/yaml_serializer.rb +3 -3
  158. data/bundler/lib/bundler.rb +41 -32
  159. data/lib/rubygems/available_set.rb +4 -4
  160. data/lib/rubygems/basic_specification.rb +35 -37
  161. data/lib/rubygems/bundler_version_finder.rb +4 -4
  162. data/lib/rubygems/ci_detector.rb +75 -0
  163. data/lib/rubygems/command.rb +13 -15
  164. data/lib/rubygems/command_manager.rb +5 -4
  165. data/lib/rubygems/commands/build_command.rb +2 -2
  166. data/lib/rubygems/commands/cert_command.rb +1 -2
  167. data/lib/rubygems/commands/check_command.rb +4 -4
  168. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  169. data/lib/rubygems/commands/contents_command.rb +4 -4
  170. data/lib/rubygems/commands/dependency_command.rb +4 -5
  171. data/lib/rubygems/commands/environment_command.rb +1 -3
  172. data/lib/rubygems/commands/exec_command.rb +1 -1
  173. data/lib/rubygems/commands/fetch_command.rb +2 -2
  174. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  175. data/lib/rubygems/commands/help_command.rb +3 -3
  176. data/lib/rubygems/commands/info_command.rb +2 -2
  177. data/lib/rubygems/commands/install_command.rb +8 -16
  178. data/lib/rubygems/commands/list_command.rb +2 -2
  179. data/lib/rubygems/commands/lock_command.rb +1 -1
  180. data/lib/rubygems/commands/open_command.rb +1 -1
  181. data/lib/rubygems/commands/owner_command.rb +1 -1
  182. data/lib/rubygems/commands/pristine_command.rb +13 -15
  183. data/lib/rubygems/commands/push_command.rb +2 -2
  184. data/lib/rubygems/commands/query_command.rb +4 -5
  185. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  186. data/lib/rubygems/commands/search_command.rb +2 -2
  187. data/lib/rubygems/commands/setup_command.rb +31 -34
  188. data/lib/rubygems/commands/sources_command.rb +12 -12
  189. data/lib/rubygems/commands/specification_command.rb +10 -10
  190. data/lib/rubygems/commands/stale_command.rb +1 -1
  191. data/lib/rubygems/commands/uninstall_command.rb +9 -10
  192. data/lib/rubygems/commands/unpack_command.rb +4 -4
  193. data/lib/rubygems/commands/update_command.rb +10 -12
  194. data/lib/rubygems/commands/which_command.rb +1 -1
  195. data/lib/rubygems/commands/yank_command.rb +1 -1
  196. data/lib/rubygems/compatibility.rb +5 -6
  197. data/lib/rubygems/config_file.rb +4 -4
  198. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  199. data/lib/rubygems/core_ext/kernel_require.rb +19 -48
  200. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  201. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  202. data/lib/rubygems/defaults.rb +15 -3
  203. data/lib/rubygems/dependency.rb +12 -14
  204. data/lib/rubygems/dependency_installer.rb +29 -30
  205. data/lib/rubygems/dependency_list.rb +1 -1
  206. data/lib/rubygems/deprecate.rb +16 -15
  207. data/lib/rubygems/doctor.rb +5 -5
  208. data/lib/rubygems/errors.rb +2 -6
  209. data/lib/rubygems/exceptions.rb +2 -1
  210. data/lib/rubygems/ext/builder.rb +15 -10
  211. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  212. data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
  213. data/lib/rubygems/gem_runner.rb +4 -4
  214. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  215. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  216. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  217. data/lib/rubygems/install_update_options.rb +18 -19
  218. data/lib/rubygems/installer.rb +59 -33
  219. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  220. data/lib/rubygems/local_remote_options.rb +7 -10
  221. data/lib/rubygems/name_tuple.rb +7 -9
  222. data/lib/rubygems/net/http.rb +3 -0
  223. data/lib/rubygems/net-http/.document +1 -0
  224. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  225. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  226. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  227. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  228. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  229. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  230. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  231. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  232. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  233. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  234. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  235. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  236. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  237. data/lib/rubygems/net-protocol/.document +1 -0
  238. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  239. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  240. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  241. data/lib/rubygems/package/old.rb +2 -2
  242. data/lib/rubygems/package/tar_header.rb +45 -39
  243. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  244. data/lib/rubygems/package/tar_reader.rb +5 -3
  245. data/lib/rubygems/package/tar_writer.rb +19 -17
  246. data/lib/rubygems/package.rb +27 -26
  247. data/lib/rubygems/package_task.rb +2 -2
  248. data/lib/rubygems/path_support.rb +9 -10
  249. data/lib/rubygems/platform.rb +60 -45
  250. data/lib/rubygems/query_utils.rb +7 -9
  251. data/lib/rubygems/remote_fetcher.rb +15 -15
  252. data/lib/rubygems/request/connection_pools.rb +3 -3
  253. data/lib/rubygems/request.rb +20 -17
  254. data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
  255. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  256. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  257. data/lib/rubygems/request_set/lockfile.rb +6 -11
  258. data/lib/rubygems/request_set.rb +5 -5
  259. data/lib/rubygems/requirement.rb +7 -7
  260. data/lib/rubygems/resolv/.document +1 -0
  261. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  262. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  263. data/lib/rubygems/resolver/activation_request.rb +1 -3
  264. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  265. data/lib/rubygems/resolver/best_set.rb +1 -1
  266. data/lib/rubygems/resolver/composed_set.rb +1 -1
  267. data/lib/rubygems/resolver/conflict.rb +4 -12
  268. data/lib/rubygems/resolver/index_set.rb +4 -4
  269. data/lib/rubygems/resolver/index_specification.rb +2 -2
  270. data/lib/rubygems/resolver/installer_set.rb +5 -6
  271. data/lib/rubygems/resolver/lock_set.rb +1 -1
  272. data/lib/rubygems/resolver/molinillo/.document +1 -0
  273. data/lib/rubygems/resolver.rb +3 -10
  274. data/lib/rubygems/s3_uri_signer.rb +6 -6
  275. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  276. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  277. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  278. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  279. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  280. data/lib/rubygems/safe_marshal.rb +74 -0
  281. data/lib/rubygems/safe_yaml.rb +5 -28
  282. data/lib/rubygems/security/policies.rb +36 -38
  283. data/lib/rubygems/security/policy.rb +7 -11
  284. data/lib/rubygems/security/signer.rb +1 -1
  285. data/lib/rubygems/security/trust_dir.rb +3 -3
  286. data/lib/rubygems/security.rb +8 -22
  287. data/lib/rubygems/source/git.rb +1 -3
  288. data/lib/rubygems/source/installed.rb +0 -2
  289. data/lib/rubygems/source/local.rb +5 -8
  290. data/lib/rubygems/source/lock.rb +1 -3
  291. data/lib/rubygems/source/specific_file.rb +0 -1
  292. data/lib/rubygems/source/vendor.rb +0 -2
  293. data/lib/rubygems/source.rb +12 -12
  294. data/lib/rubygems/source_list.rb +4 -4
  295. data/lib/rubygems/spec_fetcher.rb +29 -29
  296. data/lib/rubygems/specification.rb +125 -138
  297. data/lib/rubygems/specification_policy.rb +55 -25
  298. data/lib/rubygems/stub_specification.rb +4 -5
  299. data/lib/rubygems/text.rb +1 -2
  300. data/lib/rubygems/timeout/.document +1 -0
  301. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  302. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  303. data/lib/rubygems/timeout.rb +3 -0
  304. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  305. data/lib/rubygems/uninstaller.rb +7 -9
  306. data/lib/rubygems/update_suggestion.rb +5 -18
  307. data/lib/rubygems/uri_formatter.rb +1 -1
  308. data/lib/rubygems/user_interaction.rb +15 -21
  309. data/lib/rubygems/util/licenses.rb +65 -35
  310. data/lib/rubygems/util/list.rb +3 -1
  311. data/lib/rubygems/util.rb +2 -4
  312. data/lib/rubygems/validator.rb +5 -3
  313. data/lib/rubygems/version.rb +34 -28
  314. data/lib/rubygems/version_option.rb +2 -5
  315. data/lib/rubygems/yaml_serializer.rb +3 -3
  316. data/lib/rubygems.rb +37 -37
  317. data/rubygems-update.gemspec +4 -4
  318. data/setup.rb +2 -2
  319. metadata +50 -225
  320. data/lib/rubygems/indexer.rb +0 -428
  321. data/lib/rubygems/mock_gem_ui.rb +0 -86
  322. data/test/rubygems/alternate_cert.pem +0 -19
  323. data/test/rubygems/alternate_cert_32.pem +0 -19
  324. data/test/rubygems/alternate_key.pem +0 -27
  325. data/test/rubygems/bad_rake.rb +0 -3
  326. data/test/rubygems/bundler_test_gem.rb +0 -424
  327. data/test/rubygems/ca_cert.pem +0 -77
  328. data/test/rubygems/child_cert.pem +0 -19
  329. data/test/rubygems/child_cert_32.pem +0 -19
  330. data/test/rubygems/child_key.pem +0 -27
  331. data/test/rubygems/client.pem +0 -107
  332. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  333. data/test/rubygems/data/gem-private_key.pem +0 -27
  334. data/test/rubygems/data/gem-public_cert.pem +0 -20
  335. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  336. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  337. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  338. data/test/rubygems/encrypted_private_key.pem +0 -30
  339. data/test/rubygems/expired_cert.pem +0 -19
  340. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  341. data/test/rubygems/foo/discover.rb +0 -1
  342. data/test/rubygems/future_cert.pem +0 -19
  343. data/test/rubygems/future_cert_32.pem +0 -19
  344. data/test/rubygems/good_rake.rb +0 -3
  345. data/test/rubygems/grandchild_cert.pem +0 -19
  346. data/test/rubygems/grandchild_cert_32.pem +0 -19
  347. data/test/rubygems/grandchild_key.pem +0 -27
  348. data/test/rubygems/helper.rb +0 -1649
  349. data/test/rubygems/installer_test_case.rb +0 -248
  350. data/test/rubygems/invalid_client.pem +0 -49
  351. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  352. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  353. data/test/rubygems/invalid_key.pem +0 -27
  354. data/test/rubygems/invalid_signer_cert.pem +0 -19
  355. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  356. data/test/rubygems/invalidchild_cert.pem +0 -19
  357. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  358. data/test/rubygems/invalidchild_key.pem +0 -27
  359. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  360. data/test/rubygems/package/tar_test_case.rb +0 -175
  361. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  362. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  363. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  364. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  365. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  366. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  367. data/test/rubygems/private3072_key.pem +0 -40
  368. data/test/rubygems/private_ec_key.pem +0 -9
  369. data/test/rubygems/private_key.pem +0 -27
  370. data/test/rubygems/public3072_cert.pem +0 -25
  371. data/test/rubygems/public_cert.pem +0 -20
  372. data/test/rubygems/public_cert_32.pem +0 -19
  373. data/test/rubygems/public_key.pem +0 -9
  374. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  375. data/test/rubygems/rubygems_plugin.rb +0 -24
  376. data/test/rubygems/sff/discover.rb +0 -1
  377. data/test/rubygems/simple_gem.rb +0 -68
  378. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  379. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  380. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  381. data/test/rubygems/ssl_cert.pem +0 -80
  382. data/test/rubygems/ssl_key.pem +0 -27
  383. data/test/rubygems/test_bundled_ca.rb +0 -61
  384. data/test/rubygems/test_config.rb +0 -28
  385. data/test/rubygems/test_deprecate.rb +0 -158
  386. data/test/rubygems/test_exit.rb +0 -17
  387. data/test/rubygems/test_gem.rb +0 -1799
  388. data/test/rubygems/test_gem_available_set.rb +0 -130
  389. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  390. data/test/rubygems/test_gem_command.rb +0 -403
  391. data/test/rubygems/test_gem_command_manager.rb +0 -400
  392. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  393. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  394. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  395. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  396. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  397. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  398. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  399. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  400. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  401. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  402. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  403. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  404. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  405. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  406. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  407. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  408. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  409. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  410. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  411. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  412. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  413. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  414. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  415. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  416. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  417. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  418. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  419. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  420. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  421. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  422. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
  423. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  424. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  425. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  426. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  427. data/test/rubygems/test_gem_config_file.rb +0 -551
  428. data/test/rubygems/test_gem_dependency.rb +0 -398
  429. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  430. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  431. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  432. data/test/rubygems/test_gem_doctor.rb +0 -195
  433. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  434. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  435. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  436. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  437. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  438. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  439. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  440. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  441. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  442. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  443. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  444. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  445. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  446. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  447. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  448. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  449. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  450. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  451. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  452. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  453. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  454. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  455. data/test/rubygems/test_gem_indexer.rb +0 -381
  456. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  457. data/test/rubygems/test_gem_installer.rb +0 -2512
  458. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  459. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  460. data/test/rubygems/test_gem_package.rb +0 -1306
  461. data/test/rubygems/test_gem_package_old.rb +0 -91
  462. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  463. data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
  464. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  465. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  466. data/test/rubygems/test_gem_package_task.rb +0 -118
  467. data/test/rubygems/test_gem_path_support.rb +0 -139
  468. data/test/rubygems/test_gem_platform.rb +0 -497
  469. data/test/rubygems/test_gem_rdoc.rb +0 -137
  470. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  471. data/test/rubygems/test_gem_request.rb +0 -547
  472. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  473. data/test/rubygems/test_gem_request_set.rb +0 -672
  474. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  475. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  476. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  477. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  478. data/test/rubygems/test_gem_requirement.rb +0 -505
  479. data/test/rubygems/test_gem_resolver.rb +0 -859
  480. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  481. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  482. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  483. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  484. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  485. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  486. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  487. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  488. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  489. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  490. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  491. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  492. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  493. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  494. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  495. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  496. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  497. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  498. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  499. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  500. data/test/rubygems/test_gem_security.rb +0 -341
  501. data/test/rubygems/test_gem_security_policy.rb +0 -535
  502. data/test/rubygems/test_gem_security_signer.rb +0 -218
  503. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  504. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  505. data/test/rubygems/test_gem_source.rb +0 -254
  506. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  507. data/test/rubygems/test_gem_source_git.rb +0 -310
  508. data/test/rubygems/test_gem_source_installed.rb +0 -35
  509. data/test/rubygems/test_gem_source_list.rb +0 -119
  510. data/test/rubygems/test_gem_source_local.rb +0 -107
  511. data/test/rubygems/test_gem_source_lock.rb +0 -113
  512. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  513. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  514. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  515. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  516. data/test/rubygems/test_gem_specification.rb +0 -3856
  517. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  518. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  519. data/test/rubygems/test_gem_text.rb +0 -103
  520. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  521. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  522. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  523. data/test/rubygems/test_gem_uri.rb +0 -41
  524. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  525. data/test/rubygems/test_gem_util.rb +0 -91
  526. data/test/rubygems/test_gem_validator.rb +0 -42
  527. data/test/rubygems/test_gem_version.rb +0 -305
  528. data/test/rubygems/test_gem_version_option.rb +0 -165
  529. data/test/rubygems/test_kernel.rb +0 -124
  530. data/test/rubygems/test_project_sanity.rb +0 -49
  531. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  532. data/test/rubygems/test_require.rb +0 -732
  533. data/test/rubygems/test_rubygems.rb +0 -76
  534. data/test/rubygems/test_webauthn_listener.rb +0 -143
  535. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  536. data/test/rubygems/test_webauthn_poller.rb +0 -124
  537. data/test/rubygems/utilities.rb +0 -436
  538. data/test/rubygems/wrong_key_cert.pem +0 -19
  539. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  540. data/test/test_changelog_generator.rb +0 -17
@@ -1,547 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/request"
5
- require "ostruct"
6
-
7
- unless Gem::HAVE_OPENSSL
8
- warn "Skipping Gem::Request tests. openssl not found."
9
- end
10
-
11
- class TestGemRequest < Gem::TestCase
12
- CA_CERT_FILE = cert_path "ca"
13
- CHILD_CERT = load_cert "child"
14
- EXPIRED_CERT = load_cert "expired"
15
- PUBLIC_CERT = load_cert "public"
16
- PUBLIC_CERT_FILE = cert_path "public"
17
- SSL_CERT = load_cert "ssl"
18
-
19
- def make_request(uri, request_class, last_modified, proxy)
20
- Gem::Request.create_with_proxy uri, request_class, last_modified, proxy
21
- end
22
-
23
- # This method is same code as Base64.encode64
24
- # We should not use Base64.encode64 because we need to avoid gem activation.
25
- def base64_encode64(bin)
26
- [bin].pack("m")
27
- end
28
-
29
- def setup
30
- @proxies = %w[http_proxy https_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
31
- @old_proxies = @proxies.map {|k| ENV[k] }
32
- @proxies.each {|k| ENV[k] = nil }
33
-
34
- super
35
-
36
- @proxy_uri = "http://localhost:1234"
37
- @uri = URI("http://example")
38
-
39
- @request = make_request @uri, nil, nil, nil
40
- end
41
-
42
- def teardown
43
- super
44
- Gem.configuration[:http_proxy] = nil
45
- @proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
46
- end
47
-
48
- def test_initialize_proxy
49
- proxy_uri = "http://proxy.example.com"
50
-
51
- request = make_request @uri, nil, nil, proxy_uri
52
-
53
- assert_equal proxy_uri, request.proxy_uri.to_s
54
- end
55
-
56
- def test_initialize_proxy_URI
57
- proxy_uri = "http://proxy.example.com"
58
-
59
- request = make_request @uri, nil, nil, URI(proxy_uri)
60
-
61
- assert_equal proxy_uri, request.proxy_uri.to_s
62
- end
63
-
64
- def test_initialize_proxy_ENV
65
- ENV["http_proxy"] = @proxy_uri
66
- ENV["http_proxy_user"] = "foo"
67
- ENV["http_proxy_pass"] = "bar"
68
-
69
- request = make_request @uri, nil, nil, nil
70
-
71
- proxy = request.proxy_uri
72
-
73
- assert_equal "foo", proxy.user
74
- assert_equal "bar", proxy.password
75
- end
76
-
77
- def test_initialize_proxy_ENV_https
78
- ENV["https_proxy"] = @proxy_uri
79
-
80
- request = make_request URI("https://example"), nil, nil, nil
81
-
82
- proxy = request.proxy_uri
83
-
84
- assert_equal URI(@proxy_uri), proxy
85
- end
86
-
87
- def test_proxy_ENV
88
- ENV["http_proxy"] = "http://proxy"
89
- ENV["https_proxy"] = ""
90
-
91
- request = make_request URI("https://example"), nil, nil, nil
92
-
93
- proxy = request.proxy_uri
94
-
95
- assert_nil proxy
96
- end
97
-
98
- def test_configure_connection_for_https
99
- connection = Net::HTTP.new "localhost", 443
100
-
101
- request = Class.new(Gem::Request) do
102
- def self.get_cert_files
103
- [TestGemRequest::PUBLIC_CERT_FILE]
104
- end
105
- end.create_with_proxy URI("https://example"), nil, nil, nil
106
-
107
- Gem::Request.configure_connection_for_https connection, request.cert_files
108
-
109
- cert_store = connection.cert_store
110
-
111
- assert cert_store.verify CHILD_CERT
112
- end
113
-
114
- def test_configure_connection_for_https_ssl_ca_cert
115
- ssl_ca_cert = Gem.configuration.ssl_ca_cert
116
- Gem.configuration.ssl_ca_cert = CA_CERT_FILE
117
-
118
- connection = Net::HTTP.new "localhost", 443
119
-
120
- request = Class.new(Gem::Request) do
121
- def self.get_cert_files
122
- [TestGemRequest::PUBLIC_CERT_FILE]
123
- end
124
- end.create_with_proxy URI("https://example"), nil, nil, nil
125
-
126
- Gem::Request.configure_connection_for_https connection, request.cert_files
127
-
128
- cert_store = connection.cert_store
129
-
130
- assert cert_store.verify CHILD_CERT
131
- assert cert_store.verify SSL_CERT
132
- ensure
133
- Gem.configuration.ssl_ca_cert = ssl_ca_cert
134
- end
135
-
136
- def test_get_proxy_from_env_fallback
137
- ENV["http_proxy"] = @proxy_uri
138
- request = make_request @uri, nil, nil, nil
139
- proxy = request.proxy_uri
140
-
141
- assert_equal URI(@proxy_uri), proxy
142
- end
143
-
144
- def test_get_proxy_from_env_https
145
- ENV["https_proxy"] = @proxy_uri
146
- uri = URI("https://example")
147
- request = make_request uri, nil, nil, nil
148
-
149
- proxy = request.proxy_uri
150
-
151
- assert_equal URI(@proxy_uri), proxy
152
- end
153
-
154
- def test_get_proxy_from_env_domain
155
- ENV["http_proxy"] = @proxy_uri
156
- ENV["http_proxy_user"] = 'foo\user'
157
- ENV["http_proxy_pass"] = "my bar"
158
- request = make_request @uri, nil, nil, nil
159
-
160
- proxy = request.proxy_uri
161
-
162
- assert_equal 'foo\user', Gem::UriFormatter.new(proxy.user).unescape
163
- assert_equal "my bar", Gem::UriFormatter.new(proxy.password).unescape
164
- end
165
-
166
- def test_get_proxy_from_env_escape
167
- ENV["http_proxy"] = @proxy_uri
168
- ENV["http_proxy_user"] = "foo@user"
169
- ENV["http_proxy_pass"] = "my@bar"
170
- request = make_request @uri, nil, nil, nil
171
-
172
- proxy = request.proxy_uri
173
-
174
- assert_equal "foo%40user", proxy.user
175
- assert_equal "my%40bar", proxy.password
176
- end
177
-
178
- def test_get_proxy_from_env_normalize
179
- ENV["HTTP_PROXY"] = "fakeurl:12345"
180
- request = make_request @uri, nil, nil, nil
181
-
182
- assert_equal "http://fakeurl:12345", request.proxy_uri.to_s
183
- end
184
-
185
- def test_get_proxy_from_env_empty
186
- ENV["HTTP_PROXY"] = ""
187
- ENV.delete "http_proxy"
188
- request = make_request @uri, nil, nil, nil
189
-
190
- assert_nil request.proxy_uri
191
- end
192
-
193
- def test_fetch
194
- uri = Gem::Uri.new(URI.parse "#{@gem_repo}/specs.#{Gem.marshal_version}")
195
- response = util_stub_net_http(:body => :junk, :code => 200) do
196
- @request = make_request(uri, Net::HTTP::Get, nil, nil)
197
-
198
- @request.fetch
199
- end
200
-
201
- assert_equal 200, response.code
202
- assert_equal :junk, response.body
203
- end
204
-
205
- def test_fetch_basic_auth
206
- Gem.configuration.verbose = :really
207
- uri = Gem::Uri.new(URI.parse "https://user:pass@example.rubygems/specs.#{Gem.marshal_version}")
208
- conn = util_stub_net_http(:body => :junk, :code => 200) do |c|
209
- use_ui @ui do
210
- @request = make_request(uri, Net::HTTP::Get, nil, nil)
211
- @request.fetch
212
- end
213
- c
214
- end
215
-
216
- auth_header = conn.payload["Authorization"]
217
- assert_equal "Basic #{base64_encode64("user:pass")}".strip, auth_header
218
- assert_includes @ui.output, "GET https://user:REDACTED@example.rubygems/specs.#{Gem.marshal_version}"
219
- end
220
-
221
- def test_fetch_basic_auth_encoded
222
- Gem.configuration.verbose = :really
223
- uri = Gem::Uri.new(URI.parse "https://user:%7BDEScede%7Dpass@example.rubygems/specs.#{Gem.marshal_version}")
224
-
225
- conn = util_stub_net_http(:body => :junk, :code => 200) do |c|
226
- use_ui @ui do
227
- @request = make_request(uri, Net::HTTP::Get, nil, nil)
228
- @request.fetch
229
- end
230
- c
231
- end
232
-
233
- auth_header = conn.payload["Authorization"]
234
- assert_equal "Basic #{base64_encode64("user:{DEScede}pass")}".strip, auth_header
235
- assert_includes @ui.output, "GET https://user:REDACTED@example.rubygems/specs.#{Gem.marshal_version}"
236
- end
237
-
238
- def test_fetch_basic_oauth_encoded
239
- Gem.configuration.verbose = :really
240
- uri = Gem::Uri.new(URI.parse "https://%7BDEScede%7Dpass:x-oauth-basic@example.rubygems/specs.#{Gem.marshal_version}")
241
-
242
- conn = util_stub_net_http(:body => :junk, :code => 200) do |c|
243
- use_ui @ui do
244
- @request = make_request(uri, Net::HTTP::Get, nil, nil)
245
- @request.fetch
246
- end
247
- c
248
- end
249
-
250
- auth_header = conn.payload["Authorization"]
251
- assert_equal "Basic #{base64_encode64("{DEScede}pass:x-oauth-basic")}".strip, auth_header
252
- assert_includes @ui.output, "GET https://REDACTED:x-oauth-basic@example.rubygems/specs.#{Gem.marshal_version}"
253
- end
254
-
255
- def test_fetch_head
256
- uri = Gem::Uri.new(URI.parse "#{@gem_repo}/specs.#{Gem.marshal_version}")
257
- response = util_stub_net_http(:body => "", :code => 200) do |conn|
258
- @request = make_request(uri, Net::HTTP::Get, nil, nil)
259
- @request.fetch
260
- end
261
-
262
- assert_equal 200, response.code
263
- assert_equal "", response.body
264
- end
265
-
266
- def test_fetch_unmodified
267
- uri = Gem::Uri.new(URI.parse "#{@gem_repo}/specs.#{Gem.marshal_version}")
268
- t = Time.utc(2013, 1, 2, 3, 4, 5)
269
- conn, response = util_stub_net_http(:body => "", :code => 304) do |c|
270
- @request = make_request(uri, Net::HTTP::Get, t, nil)
271
- [c, @request.fetch]
272
- end
273
-
274
- assert_equal 304, response.code
275
- assert_equal "", response.body
276
-
277
- modified_header = conn.payload["if-modified-since"]
278
-
279
- assert_equal "Wed, 02 Jan 2013 03:04:05 GMT", modified_header
280
- end
281
-
282
- def test_user_agent
283
- ua = make_request(@uri, nil, nil, nil).user_agent
284
-
285
- assert_match %r{^RubyGems/\S+ \S+ Ruby/\S+ \(.*?\)}, ua
286
- assert_match %r{RubyGems/#{Regexp.escape Gem::VERSION}}, ua
287
- assert_match %r{ #{Regexp.escape Gem::Platform.local.to_s} }, ua
288
- assert_match %r{Ruby/#{Regexp.escape RUBY_VERSION}}, ua
289
- assert_match %r{\(#{Regexp.escape RUBY_RELEASE_DATE} }, ua
290
- end
291
-
292
- def test_user_agent_engine
293
- util_save_version
294
-
295
- Object.send :remove_const, :RUBY_ENGINE
296
- Object.send :const_set, :RUBY_ENGINE, "vroom"
297
-
298
- ua = make_request(@uri, nil, nil, nil).user_agent
299
-
300
- assert_match %r{\) vroom}, ua
301
- ensure
302
- util_restore_version
303
- end
304
-
305
- def test_user_agent_engine_ruby
306
- util_save_version
307
-
308
- Object.send :remove_const, :RUBY_ENGINE
309
- Object.send :const_set, :RUBY_ENGINE, "ruby"
310
-
311
- ua = make_request(@uri, nil, nil, nil).user_agent
312
-
313
- assert_match %r{\)}, ua
314
- ensure
315
- util_restore_version
316
- end
317
-
318
- def test_user_agent_patchlevel
319
- util_save_version
320
-
321
- Object.send :remove_const, :RUBY_PATCHLEVEL
322
- Object.send :const_set, :RUBY_PATCHLEVEL, 5
323
-
324
- ua = make_request(@uri, nil, nil, nil).user_agent
325
-
326
- assert_match %r{ patchlevel 5\)}, ua
327
- ensure
328
- util_restore_version
329
- end
330
-
331
- def test_user_agent_revision
332
- util_save_version
333
-
334
- Object.send :remove_const, :RUBY_PATCHLEVEL
335
- Object.send :const_set, :RUBY_PATCHLEVEL, -1
336
- Object.send :remove_const, :RUBY_REVISION if defined?(RUBY_REVISION)
337
- Object.send :const_set, :RUBY_REVISION, 6
338
-
339
- ua = make_request(@uri, nil, nil, nil).user_agent
340
-
341
- assert_match %r{ revision 6\)}, ua
342
- assert_match %r{Ruby/#{Regexp.escape RUBY_VERSION}dev}, ua
343
- ensure
344
- util_restore_version
345
- end
346
-
347
- def test_user_agent_revision_missing
348
- util_save_version
349
-
350
- Object.send :remove_const, :RUBY_PATCHLEVEL
351
- Object.send :const_set, :RUBY_PATCHLEVEL, -1
352
- Object.send :remove_const, :RUBY_REVISION if defined?(RUBY_REVISION)
353
-
354
- ua = make_request(@uri, nil, nil, nil).user_agent
355
-
356
- assert_match %r{\(#{Regexp.escape RUBY_RELEASE_DATE}\)}, ua
357
- ensure
358
- util_restore_version
359
- end
360
-
361
- def test_verify_certificate
362
- pend if Gem.java_platform?
363
-
364
- error_number = OpenSSL::X509::V_ERR_OUT_OF_MEM
365
-
366
- store = OpenSSL::X509::Store.new
367
- context = OpenSSL::X509::StoreContext.new store
368
- context.error = error_number
369
-
370
- use_ui @ui do
371
- Gem::Request.verify_certificate context
372
- end
373
-
374
- assert_equal "ERROR: SSL verification error at depth 0: out of memory (#{error_number})\n",
375
- @ui.error
376
- end
377
-
378
- def test_verify_certificate_extra_message
379
- pend if Gem.java_platform?
380
-
381
- error_number = OpenSSL::X509::V_ERR_INVALID_CA
382
-
383
- store = OpenSSL::X509::Store.new
384
- context = OpenSSL::X509::StoreContext.new store
385
- context.error = error_number
386
-
387
- use_ui @ui do
388
- Gem::Request.verify_certificate context
389
- end
390
-
391
- expected = <<-ERROR
392
- ERROR: SSL verification error at depth 0: invalid CA certificate (#{error_number})
393
- ERROR: Certificate is an invalid CA certificate
394
- ERROR
395
-
396
- assert_equal expected, @ui.error
397
- end
398
-
399
- def test_verify_certificate_message_CERT_HAS_EXPIRED
400
- error_number = OpenSSL::X509::V_ERR_CERT_HAS_EXPIRED
401
-
402
- message =
403
- Gem::Request.verify_certificate_message error_number, EXPIRED_CERT
404
-
405
- assert_equal "Certificate #{EXPIRED_CERT.subject} expired at #{EXPIRED_CERT.not_before.iso8601}",
406
- message
407
- end
408
-
409
- def test_verify_certificate_message_CERT_NOT_YET_VALID
410
- error_number = OpenSSL::X509::V_ERR_CERT_NOT_YET_VALID
411
-
412
- message =
413
- Gem::Request.verify_certificate_message error_number, EXPIRED_CERT
414
-
415
- assert_equal "Certificate #{EXPIRED_CERT.subject} not valid until #{EXPIRED_CERT.not_before.iso8601}",
416
- message
417
- end
418
-
419
- def test_verify_certificate_message_CERT_REJECTED
420
- error_number = OpenSSL::X509::V_ERR_CERT_REJECTED
421
-
422
- message =
423
- Gem::Request.verify_certificate_message error_number, CHILD_CERT
424
-
425
- assert_equal "Certificate #{CHILD_CERT.subject} is rejected",
426
- message
427
- end
428
-
429
- def test_verify_certificate_message_CERT_UNTRUSTED
430
- error_number = OpenSSL::X509::V_ERR_CERT_UNTRUSTED
431
-
432
- message =
433
- Gem::Request.verify_certificate_message error_number, CHILD_CERT
434
-
435
- assert_equal "Certificate #{CHILD_CERT.subject} is not trusted",
436
- message
437
- end
438
-
439
- def test_verify_certificate_message_DEPTH_ZERO_SELF_SIGNED_CERT
440
- error_number = OpenSSL::X509::V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
441
-
442
- message =
443
- Gem::Request.verify_certificate_message error_number, CHILD_CERT
444
-
445
- assert_equal "Certificate #{CHILD_CERT.issuer} is not trusted",
446
- message
447
- end
448
-
449
- def test_verify_certificate_message_INVALID_CA
450
- error_number = OpenSSL::X509::V_ERR_INVALID_CA
451
-
452
- message =
453
- Gem::Request.verify_certificate_message error_number, CHILD_CERT
454
-
455
- assert_equal "Certificate #{CHILD_CERT.subject} is an invalid CA certificate",
456
- message
457
- end
458
-
459
- def test_verify_certificate_message_INVALID_PURPOSE
460
- error_number = OpenSSL::X509::V_ERR_INVALID_PURPOSE
461
-
462
- message =
463
- Gem::Request.verify_certificate_message error_number, CHILD_CERT
464
-
465
- assert_equal "Certificate #{CHILD_CERT.subject} has an invalid purpose",
466
- message
467
- end
468
-
469
- def test_verify_certificate_message_SELF_SIGNED_CERT_IN_CHAIN
470
- error_number = OpenSSL::X509::V_ERR_SELF_SIGNED_CERT_IN_CHAIN
471
-
472
- message =
473
- Gem::Request.verify_certificate_message error_number, EXPIRED_CERT
474
-
475
- assert_equal "Root certificate is not trusted (#{EXPIRED_CERT.subject})",
476
- message
477
- end
478
-
479
- def test_verify_certificate_message_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
480
- error_number = OpenSSL::X509::V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
481
-
482
- message =
483
- Gem::Request.verify_certificate_message error_number, EXPIRED_CERT
484
-
485
- assert_equal "You must add #{EXPIRED_CERT.issuer} to your local trusted store",
486
- message
487
- end
488
-
489
- def test_verify_certificate_message_UNABLE_TO_VERIFY_LEAF_SIGNATURE
490
- error_number = OpenSSL::X509::V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
491
-
492
- message =
493
- Gem::Request.verify_certificate_message error_number, EXPIRED_CERT
494
-
495
- assert_equal "Cannot verify certificate issued by #{EXPIRED_CERT.issuer}",
496
- message
497
- end
498
-
499
- def util_restore_version
500
- Object.send :remove_const, :RUBY_ENGINE
501
- Object.send :const_set, :RUBY_ENGINE, @orig_RUBY_ENGINE if
502
- defined?(@orig_RUBY_ENGINE)
503
-
504
- Object.send :remove_const, :RUBY_PATCHLEVEL
505
- Object.send :const_set, :RUBY_PATCHLEVEL, @orig_RUBY_PATCHLEVEL
506
-
507
- Object.send :remove_const, :RUBY_REVISION if defined?(RUBY_REVISION)
508
- Object.send :const_set, :RUBY_REVISION, @orig_RUBY_REVISION if
509
- defined?(@orig_RUBY_REVISION)
510
- end
511
-
512
- def util_save_version
513
- @orig_RUBY_ENGINE = RUBY_ENGINE
514
- @orig_RUBY_PATCHLEVEL = RUBY_PATCHLEVEL
515
- @orig_RUBY_REVISION = RUBY_REVISION if defined? RUBY_REVISION
516
- end
517
-
518
- def util_stub_net_http(hash)
519
- old_client = Gem::Request::ConnectionPools.client
520
- conn = Conn.new OpenStruct.new(hash)
521
- Gem::Request::ConnectionPools.client = conn
522
- yield conn
523
- ensure
524
- Gem::Request::ConnectionPools.client = old_client
525
- end
526
-
527
- class Conn
528
- attr_accessor :payload
529
-
530
- def new(*args); self; end
531
- def use_ssl=(bool); end
532
- def verify_callback=(setting); end
533
- def verify_mode=(setting); end
534
- def cert_store=(setting); end
535
- def start; end
536
-
537
- def initialize(response)
538
- @response = response
539
- self.payload = nil
540
- end
541
-
542
- def request(req)
543
- self.payload = req
544
- @response
545
- end
546
- end
547
- end if Gem::HAVE_OPENSSL
@@ -1,152 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/request"
5
- require "timeout"
6
-
7
- class TestGemRequestConnectionPool < Gem::TestCase
8
- class FakeHttp
9
- def initialize(*args)
10
- end
11
-
12
- def start
13
- end
14
- end
15
-
16
- def setup
17
- super
18
- @old_client = Gem::Request::ConnectionPools.client
19
- Gem::Request::ConnectionPools.client = FakeHttp
20
-
21
- @proxy = URI "http://proxy.example"
22
- end
23
-
24
- def teardown
25
- Gem::Request::ConnectionPools.client = @old_client
26
- super
27
- end
28
-
29
- def test_to_proxy_substring
30
- pools = Gem::Request::ConnectionPools.new nil, []
31
-
32
- env_no_proxy = %w[
33
- ems.example
34
- ]
35
-
36
- no_proxy = pools.send :no_proxy?, "rubygems.example", env_no_proxy
37
-
38
- refute no_proxy, "mismatch"
39
- end
40
-
41
- def test_to_proxy_empty_string
42
- pools = Gem::Request::ConnectionPools.new nil, []
43
-
44
- env_no_proxy = [""]
45
-
46
- no_proxy = pools.send :no_proxy?, "ems.example", env_no_proxy
47
-
48
- refute no_proxy, "mismatch"
49
- end
50
-
51
- def test_checkout_same_connection
52
- uri = URI.parse("http://example/some_endpoint")
53
-
54
- pools = Gem::Request::ConnectionPools.new nil, []
55
- pool = pools.pool_for uri
56
- conn = pool.checkout
57
- pool.checkin conn
58
-
59
- assert_equal conn, pool.checkout
60
- end
61
-
62
- def test_to_proxy_eh
63
- pools = Gem::Request::ConnectionPools.new nil, []
64
-
65
- env_no_proxy = %w[
66
- 1.no-proxy.example
67
- 2.no-proxy.example
68
- ]
69
-
70
- no_proxy = pools.send :no_proxy?, "2.no-proxy.example", env_no_proxy
71
-
72
- assert no_proxy, "match"
73
-
74
- no_proxy = pools.send :no_proxy?, "proxy.example", env_no_proxy
75
-
76
- refute no_proxy, "mismatch"
77
- end
78
-
79
- def test_to_proxy_eh_wildcard
80
- pools = Gem::Request::ConnectionPools.new nil, []
81
-
82
- env_no_proxy = %w[
83
- .no-proxy.example
84
- ]
85
-
86
- no_proxy = pools.send :no_proxy?, "2.no-proxy.example", env_no_proxy
87
-
88
- assert no_proxy, "wildcard matching subdomain"
89
-
90
- no_proxy = pools.send :no_proxy?, "no-proxy.example", env_no_proxy
91
-
92
- assert no_proxy, "wildcard matching dotless domain"
93
-
94
- no_proxy = pools.send :no_proxy?, "proxy.example", env_no_proxy
95
-
96
- refute no_proxy, "wildcard mismatch"
97
- end
98
-
99
- def test_net_http_args
100
- pools = Gem::Request::ConnectionPools.new nil, []
101
-
102
- net_http_args = pools.send :net_http_args, URI("http://example"), nil
103
-
104
- assert_equal ["example", 80], net_http_args
105
- end
106
-
107
- def test_net_http_args_ipv6
108
- pools = Gem::Request::ConnectionPools.new nil, []
109
-
110
- net_http_args = pools.send :net_http_args, URI("http://[::1]"), nil
111
-
112
- assert_equal ["::1", 80], net_http_args
113
- end
114
-
115
- def test_net_http_args_proxy
116
- pools = Gem::Request::ConnectionPools.new nil, []
117
-
118
- net_http_args = pools.send :net_http_args, URI("http://example"), @proxy
119
-
120
- assert_equal ["example", 80, "proxy.example", 80, nil, nil], net_http_args
121
- end
122
-
123
- def test_net_http_args_no_proxy
124
- orig_no_proxy = ENV["no_proxy"]
125
- ENV["no_proxy"] = "example"
126
-
127
- pools = Gem::Request::ConnectionPools.new nil, []
128
-
129
- net_http_args = pools.send :net_http_args, URI("http://example"), @proxy
130
-
131
- assert_equal ["example", 80, nil, nil], net_http_args
132
-
133
- ensure
134
- ENV["no_proxy"] = orig_no_proxy
135
- end
136
-
137
- def test_thread_waits_for_connection
138
- uri = URI.parse("http://example/some_endpoint")
139
- pools = Gem::Request::ConnectionPools.new nil, []
140
- pool = pools.pool_for uri
141
-
142
- pool.checkout
143
-
144
- Thread.new do
145
- assert_raise(Timeout::Error) do
146
- Timeout.timeout(1) do
147
- pool.checkout
148
- end
149
- end
150
- end.join
151
- end
152
- end