rubygems-update 3.4.22 → 3.5.1

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