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,218 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
-
5
- unless Gem::HAVE_OPENSSL
6
- warn "Skipping Gem::Security::Signer tests. openssl not found."
7
- end
8
-
9
- class TestGemSecuritySigner < Gem::TestCase
10
- ALTERNATE_KEY = load_key "alternate"
11
- CHILD_KEY = load_key "child"
12
- GRANDCHILD_KEY = load_key "grandchild"
13
-
14
- CHILD_CERT = load_cert "child"
15
- GRANDCHILD_CERT = load_cert "grandchild"
16
- EXPIRED_CERT = load_cert "expired"
17
-
18
- def setup
19
- super
20
-
21
- @cert_file = PUBLIC_CERT
22
- end
23
-
24
- def test_initialize
25
- signer = Gem::Security::Signer.new nil, nil
26
-
27
- assert_nil signer.key
28
- assert_nil signer.cert_chain
29
- end
30
-
31
- def test_initialize_cert_chain_empty
32
- signer = Gem::Security::Signer.new PUBLIC_KEY, []
33
-
34
- assert_empty signer.cert_chain
35
- end
36
-
37
- def test_initialize_cert_chain_mixed
38
- signer = Gem::Security::Signer.new nil, [@cert_file, CHILD_CERT]
39
-
40
- assert_equal [PUBLIC_CERT, CHILD_CERT].map {|c| c.to_pem },
41
- signer.cert_chain.map {|c| c.to_pem }
42
- end
43
-
44
- def test_initialize_cert_chain_invalid
45
- assert_raise OpenSSL::X509::CertificateError do
46
- Gem::Security::Signer.new nil, ["garbage"]
47
- end
48
- end
49
-
50
- def test_initialize_cert_chain_path
51
- signer = Gem::Security::Signer.new nil, [@cert_file]
52
-
53
- assert_equal [PUBLIC_CERT].map {|c| c.to_pem },
54
- signer.cert_chain.map {|c| c.to_pem }
55
- end
56
-
57
- def test_initialize_default
58
- FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
59
-
60
- private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
61
- Gem::Security.write PRIVATE_KEY, private_key_path
62
-
63
- public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
64
- Gem::Security.write PUBLIC_CERT, public_cert_path
65
-
66
- signer = Gem::Security::Signer.new nil, nil
67
-
68
- assert_equal PRIVATE_KEY.to_pem, signer.key.to_pem
69
- assert_equal [PUBLIC_CERT.to_pem], signer.cert_chain.map {|c| c.to_pem }
70
- end
71
-
72
- def test_initialize_key_path
73
- key_file = PRIVATE_KEY_PATH
74
-
75
- signer = Gem::Security::Signer.new key_file, nil
76
-
77
- assert_equal PRIVATE_KEY.to_s, signer.key.to_s
78
- end
79
-
80
- def test_initialize_encrypted_key_path
81
- key_file = ENCRYPTED_PRIVATE_KEY_PATH
82
-
83
- signer = Gem::Security::Signer.new key_file, nil, PRIVATE_KEY_PASSPHRASE
84
-
85
- assert_equal ENCRYPTED_PRIVATE_KEY.to_s, signer.key.to_s
86
- end
87
-
88
- def test_extract_name
89
- signer = Gem::Security::Signer.new nil, nil
90
-
91
- assert_equal "child@example", signer.extract_name(CHILD_CERT)
92
- end
93
-
94
- def test_load_cert_chain
95
- Gem::Security.trust_dir.trust_cert PUBLIC_CERT
96
-
97
- signer = Gem::Security::Signer.new nil, []
98
- signer.cert_chain.replace [CHILD_CERT]
99
-
100
- signer.load_cert_chain
101
-
102
- assert_equal [PUBLIC_CERT.to_pem, CHILD_CERT.to_pem],
103
- signer.cert_chain.map {|c| c.to_pem }
104
- end
105
-
106
- def test_load_cert_chain_broken
107
- Gem::Security.trust_dir.trust_cert CHILD_CERT
108
-
109
- signer = Gem::Security::Signer.new nil, []
110
- signer.cert_chain.replace [GRANDCHILD_CERT]
111
-
112
- signer.load_cert_chain
113
-
114
- assert_equal [CHILD_CERT.to_pem, GRANDCHILD_CERT.to_pem],
115
- signer.cert_chain.map {|c| c.to_pem }
116
- end
117
-
118
- def test_sign
119
- signer = Gem::Security::Signer.new PRIVATE_KEY, [PUBLIC_CERT]
120
-
121
- signature = signer.sign "hello"
122
-
123
- expected = <<-EXPECTED
124
- FmrCYxEXW3dgYYNMxPdS16VrdXT+d5nyXTVlRm64ZHSgMxMAaPtQJsVYv73m
125
- DWHTzNnLhhINSpgBMLh5a4atM52yxVdkPUTgqIH+LeIPBXn8xaP5JLmfDcmI
126
- tBpc/9DhS3v9iKCX40igAArFu7Gg3swbgQ61SP+U22LvG5nDQZQz3sudtsw3
127
- qKPykFVaYjrRwzvBdSdJ1PwlAsanSwcwS/GKPtmE/ykZ6X5XOx7wvCDL/zGy
128
- B8khkB8hDKC6moCzebmUxCBmTmXD0Wjzon+bf4MOriVE3a0ySGRvpr1mKR2+
129
- 9EaVo7pDJLEM487+xg1CAZHRhwshd6II00XEzG/jBQ==
130
- EXPECTED
131
-
132
- assert_equal expected, [signature].pack("m")
133
- end
134
-
135
- def test_sign_expired
136
- signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
137
-
138
- e = assert_raise Gem::Security::Exception do
139
- signer.sign "hello"
140
- end
141
-
142
- assert_match "certificate /CN=nobody/DC=example not valid after 1970-01-01 00:00:00 UTC", e.message
143
- end
144
-
145
- def test_sign_expired_auto_update
146
- pend if Gem.java_platform?
147
- FileUtils.mkdir_p File.join(Gem.user_home, ".gem"), :mode => 0o700
148
-
149
- private_key_path = File.join(Gem.user_home, ".gem", "gem-private_key.pem")
150
- Gem::Security.write PRIVATE_KEY, private_key_path
151
-
152
- cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
153
- Gem::Security.write EXPIRED_CERT, cert_path
154
-
155
- signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
156
-
157
- signer.sign "hello"
158
-
159
- cert = OpenSSL::X509::Certificate.new File.read cert_path
160
-
161
- refute_equal EXPIRED_CERT.to_pem, cert.to_pem
162
- assert_in_delta Time.now, cert.not_before, 10
163
-
164
- expiry = EXPIRED_CERT.not_after.strftime "%Y%m%d%H%M%S"
165
-
166
- expired_path =
167
- File.join Gem.user_home, ".gem", "gem-public_cert.pem.expired.#{expiry}"
168
-
169
- assert_path_exist expired_path
170
- assert_equal EXPIRED_CERT.to_pem, File.read(expired_path)
171
- end
172
-
173
- def test_sign_expired_auto_update_exists
174
- FileUtils.mkdir_p File.join(Gem.user_home, ".gem"), :mode => 0o700
175
-
176
- expiry = EXPIRED_CERT.not_after.strftime "%Y%m%d%H%M%S"
177
- expired_path =
178
- File.join Gem.user_home, "gem-public_cert.pem.expired.#{expiry}"
179
-
180
- Gem::Security.write EXPIRED_CERT, expired_path
181
-
182
- private_key_path = File.join(Gem.user_home, "gem-private_key.pem")
183
- Gem::Security.write PRIVATE_KEY, private_key_path
184
-
185
- cert_path = File.join Gem.user_home, "gem-public_cert.pem"
186
- Gem::Security.write EXPIRED_CERT, cert_path
187
-
188
- signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
189
-
190
- e = assert_raise Gem::Security::Exception do
191
- signer.sign "hello"
192
- end
193
-
194
- assert_match %r{certificate /CN=nobody/DC=example not valid}, e.message
195
- end
196
-
197
- def test_sign_no_key
198
- signer = Gem::Security::Signer.new nil, nil
199
-
200
- assert_nil signer.sign "stuff"
201
- end
202
-
203
- def test_sign_wrong_key
204
- signer = Gem::Security::Signer.new ALTERNATE_KEY, [PUBLIC_CERT]
205
-
206
- assert_raise Gem::Security::Exception do
207
- signer.sign "hello"
208
- end
209
- end
210
-
211
- def test_sign_no_certs
212
- signer = Gem::Security::Signer.new ALTERNATE_KEY, []
213
-
214
- assert_raise Gem::Security::Exception do
215
- signer.sign "hello"
216
- end
217
- end
218
- end if Gem::HAVE_OPENSSL
@@ -1,99 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
-
5
- unless Gem::HAVE_OPENSSL
6
- warn "Skipping Gem::Security::TrustDir tests. openssl not found."
7
- end
8
-
9
- class TestGemSecurityTrustDir < Gem::TestCase
10
- CHILD_CERT = load_cert "child"
11
-
12
- def setup
13
- super
14
-
15
- @dest_dir = File.join @tempdir, "trust"
16
-
17
- @trust_dir = Gem::Security::TrustDir.new @dest_dir
18
- end
19
-
20
- def test_cert_path
21
- digest = OpenSSL::Digest.hexdigest Gem::Security::DIGEST_NAME, PUBLIC_CERT.subject.to_s
22
-
23
- expected = File.join @dest_dir, "cert-#{digest}.pem"
24
-
25
- assert_equal expected, @trust_dir.cert_path(PUBLIC_CERT)
26
- end
27
-
28
- def test_issuer_of
29
- assert_nil @trust_dir.issuer_of(CHILD_CERT)
30
-
31
- @trust_dir.trust_cert PUBLIC_CERT
32
-
33
- assert_equal PUBLIC_CERT.to_pem, @trust_dir.issuer_of(CHILD_CERT).to_pem
34
- end
35
-
36
- def test_load_certificate
37
- @trust_dir.trust_cert PUBLIC_CERT
38
-
39
- path = @trust_dir.cert_path PUBLIC_CERT
40
-
41
- assert_equal PUBLIC_CERT.to_pem, @trust_dir.load_certificate(path).to_pem
42
- end
43
-
44
- def test_name_path
45
- digest = OpenSSL::Digest.hexdigest Gem::Security::DIGEST_NAME, PUBLIC_CERT.subject.to_s
46
-
47
- expected = File.join @dest_dir, "cert-#{digest}.pem"
48
-
49
- assert_equal expected, @trust_dir.name_path(PUBLIC_CERT.subject)
50
- end
51
-
52
- def test_trust_cert
53
- @trust_dir.trust_cert PUBLIC_CERT
54
-
55
- trusted = @trust_dir.cert_path PUBLIC_CERT
56
-
57
- assert_path_exist trusted
58
-
59
- mask = 0o100600 & (~File.umask)
60
-
61
- assert_equal mask, File.stat(trusted).mode unless win_platform?
62
-
63
- assert_equal PUBLIC_CERT.to_pem, File.read(trusted)
64
- end
65
-
66
- def test_verify
67
- assert_path_not_exist @dest_dir
68
-
69
- @trust_dir.verify
70
-
71
- assert_path_exist @dest_dir
72
-
73
- mask = 0o40700 & (~File.umask)
74
- mask |= 0o200000 if RUBY_PLATFORM.include?("aix")
75
-
76
- assert_equal mask, File.stat(@dest_dir).mode unless win_platform?
77
- end
78
-
79
- def test_verify_file
80
- FileUtils.touch @dest_dir
81
-
82
- e = assert_raise Gem::Security::Exception do
83
- @trust_dir.verify
84
- end
85
-
86
- assert_equal "trust directory #{@dest_dir} is not a directory", e.message
87
- end
88
-
89
- def test_verify_wrong_permissions
90
- FileUtils.mkdir_p @dest_dir, :mode => 0o777
91
-
92
- @trust_dir.verify
93
-
94
- mask = 0o40700 & (~File.umask)
95
- mask |= 0o200000 if RUBY_PLATFORM.include?("aix")
96
-
97
- assert_equal mask, File.stat(@dest_dir).mode unless win_platform?
98
- end
99
- end if Gem::HAVE_OPENSSL
@@ -1,123 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/user_interaction"
5
- require "timeout"
6
-
7
- class TestGemSilentUI < Gem::TestCase
8
- def setup
9
- super
10
- @sui = Gem::SilentUI.new
11
- end
12
-
13
- def teardown
14
- @sui.close
15
- super
16
- end
17
-
18
- def test_ask
19
- value = nil
20
- out, err = capture_output do
21
- use_ui @sui do
22
- value = @sui.ask "Problem?"
23
- end
24
- end
25
-
26
- assert_empty out, "No output"
27
- assert_empty err, "No output"
28
-
29
- assert_nil value, "No value"
30
- end
31
-
32
- def test_ask_for_password
33
- value = nil
34
- out, err = capture_output do
35
- use_ui @sui do
36
- value = @sui.ask_for_password "Problem?"
37
- end
38
- end
39
-
40
- assert_empty out, "No output"
41
- assert_empty err, "No output"
42
-
43
- assert_nil value, "No value"
44
- end
45
-
46
- def test_ask_yes_no
47
- value = nil
48
- out, err = capture_output do
49
- use_ui @sui do
50
- assert_raise(Gem::OperationNotSupportedError) do
51
- @sui.ask_yes_no "Problem?"
52
- end
53
- end
54
- end
55
-
56
- assert_empty out, "No output"
57
- assert_empty err, "No output"
58
-
59
- out, err = capture_output do
60
- use_ui @sui do
61
- value = @sui.ask_yes_no "Problem?", true
62
- end
63
- end
64
-
65
- assert_empty out, "No output"
66
- assert_empty err, "No output"
67
-
68
- assert value, "Value is true"
69
-
70
- out, err = capture_output do
71
- use_ui @sui do
72
- value = @sui.ask_yes_no "Problem?", false
73
- end
74
- end
75
-
76
- assert_empty out, "No output"
77
- assert_empty err, "No output"
78
-
79
- assert_equal value, false, "Value is false"
80
- end
81
-
82
- def test_choose_from_list
83
- value = nil
84
- out, err = capture_output do
85
- use_ui @sui do
86
- value = @sui.choose_from_list "Problem?", %w[yes no]
87
- end
88
- end
89
-
90
- assert_empty out, "No output"
91
- assert_empty err, "No output"
92
-
93
- assert_equal [nil, nil], value, "Value is nil!"
94
- end
95
-
96
- def test_progress_reporter
97
- out, err = capture_output do
98
- use_ui @sui do
99
- @sui.progress_reporter 10, "hi"
100
- end
101
- end
102
-
103
- assert_empty out, "No output"
104
- assert_empty err, "No output"
105
- end
106
-
107
- def test_download_reporter
108
- out, err = capture_output do
109
- use_ui @sui do
110
- @sui.download_reporter.fetch "a.gem", 1024
111
- end
112
- end
113
-
114
- assert_empty out, "No output"
115
- assert_empty err, "No output"
116
- end
117
-
118
- def test_new_without_dev_null
119
- File.stub(:open, ->(path, mode) { raise Errno::ENOTCAPABLE if path == IO::NULL }) do
120
- Gem::SilentUI.new
121
- end
122
- end
123
- end
@@ -1,254 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/source"
5
- require "rubygems/indexer"
6
-
7
- class TestGemSource < Gem::TestCase
8
- def tuple(*args)
9
- Gem::NameTuple.new(*args)
10
- end
11
-
12
- def setup
13
- super
14
-
15
- @specs = spec_fetcher do |fetcher|
16
- fetcher.spec "a", "1.a"
17
- fetcher.gem "a", 1
18
- fetcher.spec "a", 2
19
- fetcher.spec "b", 2
20
- end
21
-
22
- @source = Gem::Source.new(@gem_repo)
23
- end
24
-
25
- def test_initialize_invalid_uri
26
- assert_raise URI::InvalidURIError do
27
- Gem::Source.new "git@example:a.git"
28
- end
29
- end
30
-
31
- def test_initialize_git
32
- repository = "git@example:a.git"
33
-
34
- source = Gem::Source::Git.new "a", repository, nil, false
35
-
36
- assert_equal repository, source.uri
37
- end
38
-
39
- def test_cache_dir_escapes_windows_paths
40
- uri = URI.parse("file:///C:/WINDOWS/Temp/gem_repo")
41
- root = Gem.spec_cache_dir
42
- cache_dir = @source.cache_dir(uri).gsub(root, "")
43
- assert cache_dir !~ /:/, "#{cache_dir} should not contain a :"
44
- end
45
-
46
- def test_dependency_resolver_set_bundler_api
47
- response = Net::HTTPResponse.new "1.1", 200, "OK"
48
- response.uri = URI("http://example")
49
-
50
- @fetcher.data[@gem_repo] = response
51
-
52
- set = @source.dependency_resolver_set
53
-
54
- assert_kind_of Gem::Resolver::APISet, set
55
- end
56
-
57
- def test_dependency_resolver_set_file_uri
58
- Gem::Indexer.new(@tempdir).generate_index
59
-
60
- source = Gem::Source.new "file://#{@tempdir}/"
61
-
62
- set = source.dependency_resolver_set
63
-
64
- assert_kind_of Gem::Resolver::IndexSet, set
65
- end
66
-
67
- def test_dependency_resolver_set_marshal_api
68
- set = @source.dependency_resolver_set
69
-
70
- assert_kind_of Gem::Resolver::IndexSet, set
71
- end
72
-
73
- def test_fetch_spec
74
- a1 = @specs["a-1"]
75
-
76
- spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
77
-
78
- spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "ruby")
79
- assert_equal a1.full_name, spec.full_name
80
-
81
- cache_dir = @source.cache_dir URI.parse(spec_uri)
82
-
83
- cache_file = File.join cache_dir, a1.spec_name
84
-
85
- assert File.exist?(cache_file)
86
- end
87
-
88
- def test_fetch_spec_cached
89
- a1 = @specs["a-1"]
90
-
91
- spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
92
- @fetcher.data["#{spec_uri}.rz"] = nil
93
-
94
- cache_dir = @source.cache_dir URI.parse(spec_uri)
95
- FileUtils.mkdir_p cache_dir
96
-
97
- cache_file = File.join cache_dir, a1.spec_name
98
-
99
- File.open cache_file, "wb" do |io|
100
- Marshal.dump a1, io
101
- end
102
-
103
- spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "ruby")
104
- assert_equal a1.full_name, spec.full_name
105
- end
106
-
107
- def test_fetch_spec_platform
108
- specs = spec_fetcher do |fetcher|
109
- fetcher.legacy_platform
110
- end
111
-
112
- spec = @source.fetch_spec tuple("pl", Gem::Version.new(1), "i386-linux")
113
-
114
- assert_equal specs["pl-1-x86-linux"].full_name, spec.full_name
115
- end
116
-
117
- def test_fetch_spec_platform_ruby
118
- spec = @source.fetch_spec tuple("a", Gem::Version.new(1), nil)
119
- assert_equal @specs["a-1"].full_name, spec.full_name
120
-
121
- spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "")
122
- assert_equal @specs["a-1"].full_name, spec.full_name
123
- end
124
-
125
- def test_load_specs
126
- released = @source.load_specs(:released).map {|spec| spec.full_name }
127
- assert_equal %W[a-2 a-1 b-2], released
128
-
129
- cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
130
- assert File.exist?(cache_dir), "#{cache_dir} does not exist"
131
-
132
- cache_file = File.join cache_dir, "specs.#{Gem.marshal_version}"
133
- assert File.exist?(cache_file)
134
- end
135
-
136
- def test_load_specs_cached
137
- latest_specs = @source.load_specs :latest
138
-
139
- # Make sure the cached version is actually different:
140
- latest_specs << Gem::NameTuple.new("cached", Gem::Version.new("1.0.0"), "ruby")
141
-
142
- @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = nil
143
- @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}"] =
144
- " " * Marshal.dump(latest_specs).length
145
-
146
- cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
147
-
148
- FileUtils.mkdir_p cache_dir
149
-
150
- cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
151
-
152
- File.open cache_file, "wb" do |io|
153
- Marshal.dump latest_specs, io
154
- end
155
-
156
- cached_specs = @source.load_specs :latest
157
-
158
- assert_equal latest_specs, cached_specs
159
- end
160
-
161
- def test_load_specs_cached_empty
162
- latest_specs = @source.load_specs :latest
163
-
164
- # Make sure the cached version is actually different:
165
- latest_specs << Gem::NameTuple.new("fixed", Gem::Version.new("1.0.0"), "ruby")
166
- # Setup valid data on the 'remote'
167
- @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
168
- util_gzip(Marshal.dump(latest_specs))
169
-
170
- cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
171
-
172
- FileUtils.mkdir_p cache_dir
173
-
174
- cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
175
-
176
- File.open cache_file, "wb" do |io|
177
- # Setup invalid data in the cache:
178
- io.write Marshal.dump(latest_specs)[0, 10]
179
- end
180
-
181
- fixed_specs = @source.load_specs :latest
182
-
183
- assert_equal latest_specs, fixed_specs
184
- end
185
-
186
- def test_load_specs_from_unavailable_uri
187
- src = Gem::Source.new("http://not-there.nothing")
188
-
189
- assert_raise Gem::RemoteFetcher::FetchError do
190
- src.load_specs :latest
191
- end
192
- end
193
-
194
- def test_spaceship
195
- remote = @source
196
- specific = Gem::Source::SpecificFile.new @specs["a-1"].cache_file
197
- installed = Gem::Source::Installed.new
198
- local = Gem::Source::Local.new
199
-
200
- assert_equal(0, remote.<=>(remote), "remote <=> remote")
201
-
202
- assert_equal(-1, remote.<=>(specific), "remote <=> specific")
203
- assert_equal(1, specific.<=>(remote), "specific <=> remote")
204
-
205
- assert_equal(-1, remote.<=>(local), "remote <=> local")
206
- assert_equal(1, local.<=>(remote), "local <=> remote")
207
-
208
- assert_equal(-1, remote.<=>(installed), "remote <=> installed")
209
- assert_equal(1, installed.<=>(remote), "installed <=> remote")
210
-
211
- no_uri = @source.dup
212
- no_uri.instance_variable_set :@uri, nil
213
-
214
- assert_equal(-1, remote.<=>(no_uri), "remote <=> no_uri")
215
- end
216
-
217
- def test_spaceship_order_is_preserved_when_uri_differs
218
- sourceA = Gem::Source.new "http://example.com/a"
219
- sourceB = Gem::Source.new "http://example.com/b"
220
-
221
- assert_equal(0, sourceA.<=>(sourceA), "sourceA <=> sourceA")
222
- assert_equal(1, sourceA.<=>(sourceB), "sourceA <=> sourceB")
223
- assert_equal(1, sourceB.<=>(sourceA), "sourceB <=> sourceA")
224
- end
225
-
226
- def test_update_cache_eh
227
- assert @source.update_cache?
228
- end
229
-
230
- def test_update_cache_eh_home_nonexistent
231
- FileUtils.rmdir Gem.user_home
232
-
233
- refute @source.update_cache?
234
- end
235
-
236
- def test_typo_squatting
237
- rubygems_source = Gem::Source.new("https://rubgems.org")
238
- assert rubygems_source.typo_squatting?("rubygems.org")
239
- assert rubygems_source.typo_squatting?("rubyagems.org")
240
- assert rubygems_source.typo_squatting?("rubyasgems.org")
241
- refute rubygems_source.typo_squatting?("rubysertgems.org")
242
- end
243
-
244
- def test_typo_squatting_false_positive
245
- rubygems_source = Gem::Source.new("https://rubygems.org")
246
- refute rubygems_source.typo_squatting?("rubygems.org")
247
- end
248
-
249
- def test_typo_squatting_custom_distance_threshold
250
- rubygems_source = Gem::Source.new("https://rubgems.org")
251
- distance_threshold = 5
252
- assert rubygems_source.typo_squatting?("rubysertgems.org", distance_threshold)
253
- end
254
- end