rubygems-update 3.4.22 → 3.5.0

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 (528) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +99 -2
  3. data/Manifest.txt +34 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +53 -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 +245 -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 +43 -25
  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/lib/connection_pool/version.rb +1 -1
  134. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  135. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  136. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
  137. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
  138. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +35 -35
  140. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  141. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  142. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  143. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  144. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  145. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  146. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  147. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  148. data/bundler/lib/bundler/version.rb +1 -1
  149. data/bundler/lib/bundler/vlad.rb +1 -1
  150. data/bundler/lib/bundler/yaml_serializer.rb +3 -3
  151. data/bundler/lib/bundler.rb +38 -27
  152. data/lib/rubygems/available_set.rb +4 -4
  153. data/lib/rubygems/basic_specification.rb +35 -37
  154. data/lib/rubygems/bundler_version_finder.rb +4 -4
  155. data/lib/rubygems/ci_detector.rb +75 -0
  156. data/lib/rubygems/command.rb +13 -15
  157. data/lib/rubygems/command_manager.rb +5 -4
  158. data/lib/rubygems/commands/build_command.rb +2 -2
  159. data/lib/rubygems/commands/cert_command.rb +1 -2
  160. data/lib/rubygems/commands/check_command.rb +4 -4
  161. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  162. data/lib/rubygems/commands/contents_command.rb +4 -4
  163. data/lib/rubygems/commands/dependency_command.rb +4 -5
  164. data/lib/rubygems/commands/environment_command.rb +1 -3
  165. data/lib/rubygems/commands/exec_command.rb +1 -1
  166. data/lib/rubygems/commands/fetch_command.rb +2 -2
  167. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  168. data/lib/rubygems/commands/help_command.rb +3 -3
  169. data/lib/rubygems/commands/info_command.rb +2 -2
  170. data/lib/rubygems/commands/install_command.rb +8 -16
  171. data/lib/rubygems/commands/list_command.rb +2 -2
  172. data/lib/rubygems/commands/lock_command.rb +1 -1
  173. data/lib/rubygems/commands/open_command.rb +1 -1
  174. data/lib/rubygems/commands/owner_command.rb +1 -1
  175. data/lib/rubygems/commands/pristine_command.rb +13 -15
  176. data/lib/rubygems/commands/push_command.rb +2 -2
  177. data/lib/rubygems/commands/query_command.rb +4 -5
  178. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  179. data/lib/rubygems/commands/search_command.rb +2 -2
  180. data/lib/rubygems/commands/setup_command.rb +31 -34
  181. data/lib/rubygems/commands/sources_command.rb +12 -12
  182. data/lib/rubygems/commands/specification_command.rb +10 -10
  183. data/lib/rubygems/commands/stale_command.rb +1 -1
  184. data/lib/rubygems/commands/uninstall_command.rb +9 -10
  185. data/lib/rubygems/commands/unpack_command.rb +4 -4
  186. data/lib/rubygems/commands/update_command.rb +10 -12
  187. data/lib/rubygems/commands/which_command.rb +1 -1
  188. data/lib/rubygems/commands/yank_command.rb +1 -1
  189. data/lib/rubygems/compatibility.rb +5 -6
  190. data/lib/rubygems/config_file.rb +4 -4
  191. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  192. data/lib/rubygems/core_ext/kernel_require.rb +19 -48
  193. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  194. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  195. data/lib/rubygems/defaults.rb +15 -3
  196. data/lib/rubygems/dependency.rb +12 -14
  197. data/lib/rubygems/dependency_installer.rb +29 -30
  198. data/lib/rubygems/dependency_list.rb +1 -1
  199. data/lib/rubygems/deprecate.rb +16 -15
  200. data/lib/rubygems/doctor.rb +5 -5
  201. data/lib/rubygems/errors.rb +2 -6
  202. data/lib/rubygems/exceptions.rb +2 -1
  203. data/lib/rubygems/ext/builder.rb +15 -10
  204. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  205. data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
  206. data/lib/rubygems/gem_runner.rb +4 -4
  207. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  208. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  209. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  210. data/lib/rubygems/install_update_options.rb +18 -19
  211. data/lib/rubygems/installer.rb +59 -33
  212. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  213. data/lib/rubygems/local_remote_options.rb +7 -10
  214. data/lib/rubygems/name_tuple.rb +7 -9
  215. data/lib/rubygems/net/http.rb +3 -0
  216. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  217. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  218. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  219. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  220. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  221. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  222. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  223. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  224. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  225. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  226. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  227. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  228. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  229. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  230. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  231. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  232. data/lib/rubygems/package/old.rb +2 -2
  233. data/lib/rubygems/package/tar_header.rb +45 -39
  234. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  235. data/lib/rubygems/package/tar_reader.rb +5 -3
  236. data/lib/rubygems/package/tar_writer.rb +19 -17
  237. data/lib/rubygems/package.rb +27 -26
  238. data/lib/rubygems/package_task.rb +2 -2
  239. data/lib/rubygems/path_support.rb +9 -10
  240. data/lib/rubygems/platform.rb +60 -45
  241. data/lib/rubygems/query_utils.rb +7 -9
  242. data/lib/rubygems/remote_fetcher.rb +15 -15
  243. data/lib/rubygems/request/connection_pools.rb +3 -3
  244. data/lib/rubygems/request.rb +20 -17
  245. data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
  246. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  247. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  248. data/lib/rubygems/request_set/lockfile.rb +6 -11
  249. data/lib/rubygems/request_set.rb +5 -5
  250. data/lib/rubygems/requirement.rb +7 -7
  251. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  252. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  253. data/lib/rubygems/resolver/activation_request.rb +1 -3
  254. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  255. data/lib/rubygems/resolver/best_set.rb +1 -1
  256. data/lib/rubygems/resolver/composed_set.rb +1 -1
  257. data/lib/rubygems/resolver/conflict.rb +4 -12
  258. data/lib/rubygems/resolver/index_set.rb +4 -4
  259. data/lib/rubygems/resolver/index_specification.rb +2 -2
  260. data/lib/rubygems/resolver/installer_set.rb +5 -6
  261. data/lib/rubygems/resolver/lock_set.rb +1 -1
  262. data/lib/rubygems/resolver.rb +3 -10
  263. data/lib/rubygems/s3_uri_signer.rb +6 -6
  264. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  265. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  266. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  267. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  268. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  269. data/lib/rubygems/safe_marshal.rb +74 -0
  270. data/lib/rubygems/safe_yaml.rb +5 -28
  271. data/lib/rubygems/security/policies.rb +36 -38
  272. data/lib/rubygems/security/policy.rb +7 -11
  273. data/lib/rubygems/security/signer.rb +1 -1
  274. data/lib/rubygems/security/trust_dir.rb +3 -3
  275. data/lib/rubygems/security.rb +8 -22
  276. data/lib/rubygems/source/git.rb +1 -3
  277. data/lib/rubygems/source/installed.rb +0 -2
  278. data/lib/rubygems/source/local.rb +5 -8
  279. data/lib/rubygems/source/lock.rb +1 -3
  280. data/lib/rubygems/source/specific_file.rb +0 -1
  281. data/lib/rubygems/source/vendor.rb +0 -2
  282. data/lib/rubygems/source.rb +12 -12
  283. data/lib/rubygems/source_list.rb +4 -4
  284. data/lib/rubygems/spec_fetcher.rb +29 -29
  285. data/lib/rubygems/specification.rb +125 -138
  286. data/lib/rubygems/specification_policy.rb +55 -25
  287. data/lib/rubygems/stub_specification.rb +4 -5
  288. data/lib/rubygems/text.rb +1 -2
  289. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  290. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  291. data/lib/rubygems/timeout.rb +3 -0
  292. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  293. data/lib/rubygems/uninstaller.rb +7 -9
  294. data/lib/rubygems/update_suggestion.rb +5 -18
  295. data/lib/rubygems/uri_formatter.rb +1 -1
  296. data/lib/rubygems/user_interaction.rb +15 -21
  297. data/lib/rubygems/util/licenses.rb +65 -35
  298. data/lib/rubygems/util/list.rb +3 -1
  299. data/lib/rubygems/util.rb +2 -4
  300. data/lib/rubygems/validator.rb +5 -3
  301. data/lib/rubygems/version.rb +34 -28
  302. data/lib/rubygems/version_option.rb +2 -5
  303. data/lib/rubygems/yaml_serializer.rb +3 -3
  304. data/lib/rubygems.rb +37 -37
  305. data/rubygems-update.gemspec +4 -4
  306. data/setup.rb +2 -2
  307. metadata +38 -225
  308. data/lib/rubygems/indexer.rb +0 -428
  309. data/lib/rubygems/mock_gem_ui.rb +0 -86
  310. data/test/rubygems/alternate_cert.pem +0 -19
  311. data/test/rubygems/alternate_cert_32.pem +0 -19
  312. data/test/rubygems/alternate_key.pem +0 -27
  313. data/test/rubygems/bad_rake.rb +0 -3
  314. data/test/rubygems/bundler_test_gem.rb +0 -424
  315. data/test/rubygems/ca_cert.pem +0 -77
  316. data/test/rubygems/child_cert.pem +0 -19
  317. data/test/rubygems/child_cert_32.pem +0 -19
  318. data/test/rubygems/child_key.pem +0 -27
  319. data/test/rubygems/client.pem +0 -107
  320. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  321. data/test/rubygems/data/gem-private_key.pem +0 -27
  322. data/test/rubygems/data/gem-public_cert.pem +0 -20
  323. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  324. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  325. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  326. data/test/rubygems/encrypted_private_key.pem +0 -30
  327. data/test/rubygems/expired_cert.pem +0 -19
  328. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  329. data/test/rubygems/foo/discover.rb +0 -1
  330. data/test/rubygems/future_cert.pem +0 -19
  331. data/test/rubygems/future_cert_32.pem +0 -19
  332. data/test/rubygems/good_rake.rb +0 -3
  333. data/test/rubygems/grandchild_cert.pem +0 -19
  334. data/test/rubygems/grandchild_cert_32.pem +0 -19
  335. data/test/rubygems/grandchild_key.pem +0 -27
  336. data/test/rubygems/helper.rb +0 -1649
  337. data/test/rubygems/installer_test_case.rb +0 -248
  338. data/test/rubygems/invalid_client.pem +0 -49
  339. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  340. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  341. data/test/rubygems/invalid_key.pem +0 -27
  342. data/test/rubygems/invalid_signer_cert.pem +0 -19
  343. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  344. data/test/rubygems/invalidchild_cert.pem +0 -19
  345. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  346. data/test/rubygems/invalidchild_key.pem +0 -27
  347. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  348. data/test/rubygems/package/tar_test_case.rb +0 -175
  349. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  350. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  351. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  352. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  353. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  354. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  355. data/test/rubygems/private3072_key.pem +0 -40
  356. data/test/rubygems/private_ec_key.pem +0 -9
  357. data/test/rubygems/private_key.pem +0 -27
  358. data/test/rubygems/public3072_cert.pem +0 -25
  359. data/test/rubygems/public_cert.pem +0 -20
  360. data/test/rubygems/public_cert_32.pem +0 -19
  361. data/test/rubygems/public_key.pem +0 -9
  362. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  363. data/test/rubygems/rubygems_plugin.rb +0 -24
  364. data/test/rubygems/sff/discover.rb +0 -1
  365. data/test/rubygems/simple_gem.rb +0 -68
  366. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  367. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  368. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  369. data/test/rubygems/ssl_cert.pem +0 -80
  370. data/test/rubygems/ssl_key.pem +0 -27
  371. data/test/rubygems/test_bundled_ca.rb +0 -61
  372. data/test/rubygems/test_config.rb +0 -28
  373. data/test/rubygems/test_deprecate.rb +0 -158
  374. data/test/rubygems/test_exit.rb +0 -17
  375. data/test/rubygems/test_gem.rb +0 -1799
  376. data/test/rubygems/test_gem_available_set.rb +0 -130
  377. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  378. data/test/rubygems/test_gem_command.rb +0 -403
  379. data/test/rubygems/test_gem_command_manager.rb +0 -400
  380. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  381. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  382. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  383. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  384. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  385. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  386. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  387. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  388. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  389. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  390. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  391. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  392. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  393. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  394. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  395. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  396. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  397. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  398. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  399. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  400. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  401. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  402. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  403. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  404. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  405. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  406. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  407. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  408. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  409. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  410. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
  411. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  412. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  413. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  414. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  415. data/test/rubygems/test_gem_config_file.rb +0 -551
  416. data/test/rubygems/test_gem_dependency.rb +0 -398
  417. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  418. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  419. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  420. data/test/rubygems/test_gem_doctor.rb +0 -195
  421. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  422. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  423. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  424. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  425. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  426. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  427. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  428. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  429. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  430. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  431. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  432. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  433. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  434. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  435. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  436. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  437. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  438. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  439. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  440. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  441. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  442. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  443. data/test/rubygems/test_gem_indexer.rb +0 -381
  444. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  445. data/test/rubygems/test_gem_installer.rb +0 -2512
  446. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  447. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  448. data/test/rubygems/test_gem_package.rb +0 -1306
  449. data/test/rubygems/test_gem_package_old.rb +0 -91
  450. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  451. data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
  452. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  453. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  454. data/test/rubygems/test_gem_package_task.rb +0 -118
  455. data/test/rubygems/test_gem_path_support.rb +0 -139
  456. data/test/rubygems/test_gem_platform.rb +0 -497
  457. data/test/rubygems/test_gem_rdoc.rb +0 -137
  458. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  459. data/test/rubygems/test_gem_request.rb +0 -547
  460. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  461. data/test/rubygems/test_gem_request_set.rb +0 -672
  462. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  463. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  464. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  465. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  466. data/test/rubygems/test_gem_requirement.rb +0 -505
  467. data/test/rubygems/test_gem_resolver.rb +0 -859
  468. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  469. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  470. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  471. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  472. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  473. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  474. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  475. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  476. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  477. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  478. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  479. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  480. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  481. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  482. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  483. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  484. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  485. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  486. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  487. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  488. data/test/rubygems/test_gem_security.rb +0 -341
  489. data/test/rubygems/test_gem_security_policy.rb +0 -535
  490. data/test/rubygems/test_gem_security_signer.rb +0 -218
  491. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  492. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  493. data/test/rubygems/test_gem_source.rb +0 -254
  494. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  495. data/test/rubygems/test_gem_source_git.rb +0 -310
  496. data/test/rubygems/test_gem_source_installed.rb +0 -35
  497. data/test/rubygems/test_gem_source_list.rb +0 -119
  498. data/test/rubygems/test_gem_source_local.rb +0 -107
  499. data/test/rubygems/test_gem_source_lock.rb +0 -113
  500. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  501. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  502. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  503. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  504. data/test/rubygems/test_gem_specification.rb +0 -3856
  505. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  506. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  507. data/test/rubygems/test_gem_text.rb +0 -103
  508. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  509. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  510. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  511. data/test/rubygems/test_gem_uri.rb +0 -41
  512. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  513. data/test/rubygems/test_gem_util.rb +0 -91
  514. data/test/rubygems/test_gem_validator.rb +0 -42
  515. data/test/rubygems/test_gem_version.rb +0 -305
  516. data/test/rubygems/test_gem_version_option.rb +0 -165
  517. data/test/rubygems/test_kernel.rb +0 -124
  518. data/test/rubygems/test_project_sanity.rb +0 -49
  519. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  520. data/test/rubygems/test_require.rb +0 -732
  521. data/test/rubygems/test_rubygems.rb +0 -76
  522. data/test/rubygems/test_webauthn_listener.rb +0 -143
  523. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  524. data/test/rubygems/test_webauthn_poller.rb +0 -124
  525. data/test/rubygems/utilities.rb +0 -436
  526. data/test/rubygems/wrong_key_cert.pem +0 -19
  527. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  528. 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