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,350 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "package/tar_test_case"
4
- require "rubygems/package"
5
-
6
- class TestGemPackageTarReaderEntry < Gem::Package::TarTestCase
7
- def setup
8
- super
9
-
10
- @contents = ("a".."z").to_a.join * 100
11
-
12
- @tar = String.new
13
- @tar << tar_file_header("lib/foo", "", 0, @contents.size, Time.now)
14
- @tar << tar_file_contents(@contents)
15
-
16
- @entry = util_entry @tar
17
- end
18
-
19
- def teardown
20
- close_util_entry(@entry)
21
- super
22
- end
23
-
24
- def test_open
25
- io = TempIO.new @tar
26
- header = Gem::Package::TarHeader.from io
27
- retval = Gem::Package::TarReader::Entry.open header, io do |entry|
28
- entry.getc
29
- end
30
- assert_equal "a", retval
31
- assert_equal @tar.size, io.pos, "should have read to end of entry"
32
- end
33
-
34
- def test_open_closes_entry
35
- io = TempIO.new @tar
36
- header = Gem::Package::TarHeader.from io
37
- entry = nil
38
- Gem::Package::TarReader::Entry.open header, io do |e|
39
- entry = e
40
- end
41
- assert entry.closed?
42
- assert_raise(IOError) { entry.getc }
43
- end
44
-
45
- def test_open_returns_entry
46
- io = TempIO.new @tar
47
- header = Gem::Package::TarHeader.from io
48
- entry = Gem::Package::TarReader::Entry.open header, io
49
- refute entry.closed?
50
- assert_equal ?a, entry.getc
51
- assert_nil entry.close
52
- assert entry.closed?
53
- end
54
-
55
- def test_bytes_read
56
- assert_equal 0, @entry.bytes_read
57
-
58
- @entry.getc
59
-
60
- assert_equal 1, @entry.bytes_read
61
- end
62
-
63
- def test_size
64
- assert_equal @contents.size, @entry.size
65
- end
66
-
67
- def test_close
68
- @entry.close
69
-
70
- assert @entry.bytes_read
71
-
72
- e = assert_raise(IOError) { @entry.eof? }
73
- assert_equal "closed Gem::Package::TarReader::Entry", e.message
74
-
75
- e = assert_raise(IOError) { @entry.getc }
76
- assert_equal "closed Gem::Package::TarReader::Entry", e.message
77
-
78
- e = assert_raise(IOError) { @entry.pos }
79
- assert_equal "closed Gem::Package::TarReader::Entry", e.message
80
-
81
- e = assert_raise(IOError) { @entry.read }
82
- assert_equal "closed Gem::Package::TarReader::Entry", e.message
83
-
84
- e = assert_raise(IOError) { @entry.rewind }
85
- assert_equal "closed Gem::Package::TarReader::Entry", e.message
86
- end
87
-
88
- def test_closed_eh
89
- @entry.close
90
-
91
- assert @entry.closed?
92
- end
93
-
94
- def test_eof_eh
95
- @entry.read
96
-
97
- assert @entry.eof?
98
- end
99
-
100
- def test_full_name
101
- assert_equal "lib/foo", @entry.full_name
102
- end
103
-
104
- def test_full_name_null
105
- pend "jruby strips the null byte and does not think it's corrupt" if Gem.java_platform?
106
- @entry.header.prefix << "\000"
107
-
108
- e = assert_raise Gem::Package::TarInvalidError do
109
- @entry.full_name
110
- end
111
-
112
- assert_equal "tar is corrupt, name contains null byte", e.message
113
- end
114
-
115
- def test_getc
116
- assert_equal ?a, @entry.getc
117
- end
118
-
119
- def test_directory_eh
120
- assert_equal false, @entry.directory?
121
- dir_ent = util_dir_entry
122
- assert_equal true, dir_ent.directory?
123
- ensure
124
- close_util_entry(dir_ent) if dir_ent
125
- end
126
-
127
- def test_symlink_eh
128
- assert_equal false, @entry.symlink?
129
- symlink_ent = util_symlink_entry
130
- assert_equal true, symlink_ent.symlink?
131
- ensure
132
- close_util_entry(symlink_ent) if symlink_ent
133
- end
134
-
135
- def test_file_eh
136
- assert_equal true, @entry.file?
137
- dir_ent = util_dir_entry
138
- assert_equal false, dir_ent.file?
139
- ensure
140
- close_util_entry(dir_ent) if dir_ent
141
- end
142
-
143
- def test_pos
144
- assert_equal 0, @entry.pos
145
-
146
- @entry.getc
147
-
148
- assert_equal 1, @entry.pos
149
- end
150
-
151
- def test_read
152
- assert_equal @contents, @entry.read
153
- end
154
-
155
- def test_consecutive_read
156
- expected = StringIO.new(@contents)
157
- assert_equal expected.read, @entry.read
158
- assert_equal expected.read, @entry.read
159
- end
160
-
161
- def test_consecutive_read_bytes_past_eof
162
- expected = StringIO.new(@contents)
163
- assert_equal expected.read, @entry.read
164
- assert_equal expected.read(1), @entry.read(1)
165
- end
166
-
167
- def test_read_big
168
- assert_equal @contents, @entry.read(@contents.size * 2)
169
- end
170
-
171
- def test_read_small
172
- assert_equal @contents[0...100], @entry.read(100)
173
- end
174
-
175
- def test_read_remaining
176
- @entry.read(100)
177
- assert_equal @contents[100..-1], @entry.read
178
- end
179
-
180
- def test_readpartial
181
- assert_equal @contents[0...100], @entry.readpartial(100)
182
- end
183
-
184
- def test_readpartial_to_eof
185
- assert_equal @contents, @entry.readpartial(4096)
186
- assert @entry.eof?
187
- end
188
-
189
- def test_read_partial_buffer
190
- buffer = "".b
191
- @entry.readpartial(100, buffer)
192
- assert_equal @contents[0...100], buffer
193
- end
194
-
195
- def test_readpartial_past_eof
196
- @entry.readpartial(@contents.size)
197
- assert @entry.eof?
198
- assert_raise(EOFError) do
199
- @entry.readpartial(1)
200
- end
201
- end
202
-
203
- def test_read_corrupted_tar
204
- corrupt_tar = String.new
205
- corrupt_tar << tar_file_header("lib/foo", "", 0, 100, Time.now)
206
- corrupt_tar << tar_file_contents("")
207
- corrupt_entry = util_entry corrupt_tar
208
-
209
- assert_equal "", corrupt_entry.read(0)
210
- assert_equal "", corrupt_entry.read, "IO.read without len should return empty string (even though it's at an unpexpected EOF)"
211
-
212
- corrupt_entry.rewind
213
-
214
- assert_nil corrupt_entry.read(100), "IO.read with len should return nil as per IO.read docs"
215
- ensure
216
- close_util_entry(corrupt_entry) if corrupt_entry
217
- end
218
-
219
- def test_readpartial_corrupted_tar
220
- corrupt_tar = String.new
221
- corrupt_tar << tar_file_header("lib/foo", "", 0, 100, Time.now)
222
- corrupt_tar << tar_file_contents("")
223
-
224
- corrupt_entry = util_entry corrupt_tar
225
-
226
- assert_raise EOFError do
227
- corrupt_entry.readpartial(100)
228
- end
229
- ensure
230
- close_util_entry(corrupt_entry) if corrupt_entry
231
- end
232
-
233
- def test_rewind
234
- char = @entry.getc
235
-
236
- @entry.rewind
237
-
238
- assert_equal 0, @entry.pos
239
-
240
- assert_equal char, @entry.getc
241
- end
242
-
243
- def test_seek
244
- @entry.seek(50)
245
- assert_equal 50, @entry.pos
246
- assert_equal @contents[50..-1], @entry.read, "read remaining after seek"
247
- @entry.seek(-50, IO::SEEK_CUR)
248
- assert_equal @contents.size - 50, @entry.pos
249
- assert_equal @contents[-50..-1], @entry.read, "read after stepping back 50 from the end"
250
- @entry.seek(0, IO::SEEK_SET)
251
- assert_equal 0, @entry.pos
252
- assert_equal @contents, @entry.read, "read from beginning"
253
- @entry.seek(-10, IO::SEEK_END)
254
- assert_equal @contents.size - 10, @entry.pos
255
- assert_equal @contents[-10..-1], @entry.read, "read from end"
256
- end
257
-
258
- def test_read_zero
259
- expected = StringIO.new("")
260
- assert_equal expected.read(0), @entry.read(0)
261
- end
262
-
263
- def test_readpartial_zero
264
- expected = StringIO.new("")
265
- assert_equal expected.readpartial(0), @entry.readpartial(0)
266
- end
267
-
268
- def test_zero_byte_file_read
269
- zero_entry = util_entry(tar_file_header("foo", "", 0, 0, Time.now))
270
- expected = StringIO.new("")
271
- assert_equal expected.read, zero_entry.read
272
- end
273
-
274
- def test_zero_byte_file_readpartial
275
- zero_entry = util_entry(tar_file_header("foo", "", 0, 0, Time.now))
276
- expected = StringIO.new("")
277
- assert_equal expected.readpartial(0), zero_entry.readpartial(0)
278
- end
279
-
280
- def test_read_from_gzip_io
281
- tgz = util_gzip(@tar)
282
-
283
- Zlib::GzipReader.wrap StringIO.new(tgz) do |gzio|
284
- entry = util_entry(gzio)
285
- assert_equal @contents, entry.read
286
- entry.rewind
287
- assert_equal @contents, entry.read, "second read after rewind should read same contents"
288
- end
289
- end
290
-
291
- def test_read_from_gzip_io_with_non_zero_offset
292
- contents2 = ("0".."9").to_a.join * 100
293
- @tar << tar_file_header("lib/bar", "", 0, contents2.size, Time.now)
294
- @tar << tar_file_contents(contents2)
295
-
296
- tgz = util_gzip(@tar)
297
-
298
- Zlib::GzipReader.wrap StringIO.new(tgz) do |gzio|
299
- util_entry(gzio).close # skip the first entry so io.pos is not 0, preventing easy rewind
300
- entry = util_entry(gzio)
301
-
302
- assert_equal contents2, entry.read
303
- entry.rewind
304
- assert_equal contents2, entry.read, "second read after rewind should read same contents"
305
- end
306
- end
307
-
308
- def test_seek_in_gzip_io_with_non_zero_offset
309
- contents2 = ("0".."9").to_a.join * 100
310
- @tar << tar_file_header("lib/bar", "", 0, contents2.size, Time.now)
311
- @tar << tar_file_contents(contents2)
312
-
313
- tgz = util_gzip(@tar)
314
-
315
- Zlib::GzipReader.wrap StringIO.new(tgz) do |gzio|
316
- util_entry(gzio).close # skip the first entry so io.pos is not 0
317
- entry = util_entry(gzio)
318
-
319
- entry.seek(50)
320
- assert_equal 50, entry.pos
321
- assert_equal contents2[50..-1], entry.read, "read remaining after seek"
322
- entry.seek(-50, IO::SEEK_CUR)
323
- assert_equal contents2.size - 50, entry.pos
324
- assert_equal contents2[-50..-1], entry.read, "read after stepping back 50 from the end"
325
- entry.seek(0, IO::SEEK_SET)
326
- assert_equal 0, entry.pos
327
- assert_equal contents2, entry.read, "read from beginning"
328
- entry.seek(-10, IO::SEEK_END)
329
- assert_equal contents2.size - 10, entry.pos
330
- assert_equal contents2[-10..-1], entry.read, "read from end"
331
- assert_equal contents2.size, entry.pos
332
- end
333
- end
334
-
335
- def test_seek_in_gzip_io_corrupted
336
- @tar << tar_file_header("lib/bar", "", 0, 100, Time.now)
337
- @tar << tar_file_contents("")
338
-
339
- tgz = util_gzip(@tar)
340
-
341
- Zlib::GzipReader.wrap StringIO.new(tgz) do |gzio|
342
- util_entry(gzio).close # skip the first entry so io.pos is not 0
343
- entry = util_entry(gzio)
344
-
345
- assert_raise EOFError do
346
- entry.seek(50)
347
- end
348
- end
349
- end
350
- end
@@ -1,331 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "package/tar_test_case"
4
- require "rubygems/package/tar_writer"
5
-
6
- class TestGemPackageTarWriter < Gem::Package::TarTestCase
7
- def setup
8
- super
9
-
10
- # Setting `@default_source_date_epoch` to `nil` effectively resets the
11
- # value used for `Gem.source_date_epoch` whenever `$SOURCE_DATE_EPOCH`
12
- # is not set.
13
- Gem.instance_variable_set(:'@default_source_date_epoch', nil)
14
-
15
- @data = "abcde12345"
16
- @io = TempIO.new
17
- @tar_writer = Gem::Package::TarWriter.new @io
18
- @epoch = ENV["SOURCE_DATE_EPOCH"]
19
- ENV["SOURCE_DATE_EPOCH"] = nil
20
- end
21
-
22
- def teardown
23
- ENV["SOURCE_DATE_EPOCH"] = @epoch
24
- @tar_writer.close unless @tar_writer.closed?
25
- @io.close!
26
-
27
- super
28
- end
29
-
30
- def test_add_file
31
- Time.stub :now, Time.at(1_458_518_157) do
32
- @tar_writer.add_file "x", 0o644 do |f|
33
- f.write "a" * 10
34
- end
35
-
36
- assert_headers_equal(tar_file_header("x", "", 0o644, 10, Time.now),
37
- @io.string[0, 512])
38
- end
39
- assert_equal "aaaaaaaaaa#{"\0" * 502}", @io.string[512, 512]
40
- assert_equal 1024, @io.pos
41
- end
42
-
43
- def test_add_file_source_date_epoch
44
- ENV["SOURCE_DATE_EPOCH"] = "123456789"
45
- Time.stub :now, Time.at(1_458_518_157) do
46
- @tar_writer.mkdir "foo", 0o644
47
-
48
- assert_headers_equal tar_dir_header("foo", "", 0o644, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc),
49
- @io.string[0, 512]
50
- end
51
- end
52
-
53
- def test_add_symlink
54
- Time.stub :now, Time.at(1_458_518_157) do
55
- @tar_writer.add_symlink "x", "y", 0o644
56
-
57
- assert_headers_equal(tar_symlink_header("x", "", 0o644, Time.now, "y"),
58
- @io.string[0, 512])
59
- end
60
- assert_equal 512, @io.pos
61
- end
62
-
63
- def test_add_symlink_source_date_epoch
64
- ENV["SOURCE_DATE_EPOCH"] = "123456789"
65
- Time.stub :now, Time.at(1_458_518_157) do
66
- @tar_writer.add_symlink "x", "y", 0o644
67
-
68
- assert_headers_equal(tar_symlink_header("x", "", 0o644, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc, "y"),
69
- @io.string[0, 512])
70
- end
71
- end
72
-
73
- def test_add_file_digest
74
- digest_algorithms = Digest::SHA1.new, Digest::SHA512.new
75
-
76
- Time.stub :now, Time.at(1_458_518_157) do
77
- digests = @tar_writer.add_file_digest "x", 0o644, digest_algorithms do |io|
78
- io.write "a" * 10
79
- end
80
-
81
- assert_equal "3495ff69d34671d1e15b33a63c1379fdedd3a32a",
82
- digests["SHA1"].hexdigest
83
- assert_equal "4714870aff6c97ca09d135834fdb58a6389a50c1" \
84
- "1fef8ec4afef466fb60a23ac6b7a9c92658f14df" \
85
- "4993d6b40a4e4d8424196afc347e97640d68de61" \
86
- "e1cf14b0",
87
- digests["SHA512"].hexdigest
88
-
89
- assert_headers_equal(tar_file_header("x", "", 0o644, 10, Time.now),
90
- @io.string[0, 512])
91
- end
92
- assert_equal "aaaaaaaaaa#{"\0" * 502}", @io.string[512, 512]
93
- assert_equal 1024, @io.pos
94
- end
95
-
96
- def test_add_file_digest_multiple
97
- digest_algorithms = [Digest::SHA1.new, Digest::SHA512.new]
98
-
99
- Time.stub :now, Time.at(1_458_518_157) do
100
- digests = @tar_writer.add_file_digest "x", 0o644, digest_algorithms do |io|
101
- io.write "a" * 10
102
- end
103
-
104
- assert_equal "3495ff69d34671d1e15b33a63c1379fdedd3a32a",
105
- digests["SHA1"].hexdigest
106
- assert_equal "4714870aff6c97ca09d135834fdb58a6389a50c1" \
107
- "1fef8ec4afef466fb60a23ac6b7a9c92658f14df" \
108
- "4993d6b40a4e4d8424196afc347e97640d68de61" \
109
- "e1cf14b0",
110
- digests["SHA512"].hexdigest
111
-
112
- assert_headers_equal(tar_file_header("x", "", 0o644, 10, Time.now),
113
- @io.string[0, 512])
114
- end
115
- assert_equal "aaaaaaaaaa#{"\0" * 502}", @io.string[512, 512]
116
- assert_equal 1024, @io.pos
117
- end
118
-
119
- def test_add_file_signer
120
- pend "openssl is missing" unless Gem::HAVE_OPENSSL
121
-
122
- signer = Gem::Security::Signer.new PRIVATE_KEY, [PUBLIC_CERT]
123
-
124
- Time.stub :now, Time.at(1_458_518_157) do
125
- @tar_writer.add_file_signed "x", 0o644, signer do |io|
126
- io.write "a" * 10
127
- end
128
-
129
- assert_headers_equal(tar_file_header("x", "", 0o644, 10, Time.now),
130
- @io.string[0, 512])
131
-
132
- assert_equal "aaaaaaaaaa#{"\0" * 502}", @io.string[512, 512]
133
-
134
- digest = signer.digest_algorithm.new
135
- digest.update "a" * 10
136
-
137
- signature = signer.sign digest.digest
138
-
139
- assert_headers_equal(tar_file_header("x.sig", "", 0o444, signature.length,
140
- Time.now),
141
- @io.string[1024, 512])
142
- assert_equal "#{signature}#{"\0" * (512 - signature.length)}",
143
- @io.string[1536, 512]
144
-
145
- assert_equal 2048, @io.pos
146
- end
147
- end
148
-
149
- def test_add_file_signer_empty
150
- signer = Gem::Security::Signer.new nil, nil
151
-
152
- Time.stub :now, Time.at(1_458_518_157) do
153
- @tar_writer.add_file_signed "x", 0o644, signer do |io|
154
- io.write "a" * 10
155
- end
156
-
157
- assert_headers_equal(tar_file_header("x", "", 0o644, 10, Time.now),
158
- @io.string[0, 512])
159
- end
160
- assert_equal "aaaaaaaaaa#{"\0" * 502}", @io.string[512, 512]
161
-
162
- assert_equal 1024, @io.pos
163
- end
164
-
165
- def test_add_file_simple
166
- Time.stub :now, Time.at(1_458_518_157) do
167
- @tar_writer.add_file_simple "x", 0o644, 10 do |io|
168
- io.write "a" * 10
169
- end
170
-
171
- assert_headers_equal(tar_file_header("x", "", 0o644, 10, Time.now),
172
- @io.string[0, 512])
173
-
174
- assert_equal "aaaaaaaaaa#{"\0" * 502}", @io.string[512, 512]
175
- assert_equal 1024, @io.pos
176
- end
177
- end
178
-
179
- def test_add_file_simple_source_date_epoch
180
- ENV["SOURCE_DATE_EPOCH"] = "123456789"
181
- Time.stub :now, Time.at(1_458_518_157) do
182
- @tar_writer.add_file_simple "x", 0o644, 10 do |io|
183
- io.write "a" * 10
184
- end
185
-
186
- assert_headers_equal(tar_file_header("x", "", 0o644, 10, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc),
187
- @io.string[0, 512])
188
- end
189
- end
190
-
191
- def test_add_file_simple_padding
192
- Time.stub :now, Time.at(1_458_518_157) do
193
- @tar_writer.add_file_simple "x", 0, 100
194
-
195
- assert_headers_equal tar_file_header("x", "", 0, 100, Time.now),
196
- @io.string[0, 512]
197
- end
198
-
199
- assert_equal "\0" * 512, @io.string[512, 512]
200
- end
201
-
202
- def test_add_file_simple_data
203
- @tar_writer.add_file_simple("lib/foo/bar", 0, 10) {|f| f.write @data }
204
- @tar_writer.flush
205
-
206
- assert_equal @data + ("\0" * (512 - @data.size)),
207
- @io.string[512, 512]
208
- end
209
-
210
- def test_add_file_simple_size
211
- assert_raise Gem::Package::TarWriter::FileOverflow do
212
- @tar_writer.add_file_simple("lib/foo/bar", 0, 10) do |io|
213
- io.write "1" * 11
214
- end
215
- end
216
- end
217
-
218
- def test_close
219
- @tar_writer.close
220
-
221
- assert_equal "\0" * 1024, @io.string
222
-
223
- e = assert_raise IOError do
224
- @tar_writer.close
225
- end
226
- assert_equal "closed Gem::Package::TarWriter", e.message
227
-
228
- e = assert_raise IOError do
229
- @tar_writer.flush
230
- end
231
- assert_equal "closed Gem::Package::TarWriter", e.message
232
-
233
- e = assert_raise IOError do
234
- @tar_writer.add_file "x", 0
235
- end
236
- assert_equal "closed Gem::Package::TarWriter", e.message
237
-
238
- e = assert_raise IOError do
239
- @tar_writer.add_file_simple "x", 0, 0
240
- end
241
- assert_equal "closed Gem::Package::TarWriter", e.message
242
-
243
- e = assert_raise IOError do
244
- @tar_writer.mkdir "x", 0
245
- end
246
- assert_equal "closed Gem::Package::TarWriter", e.message
247
- end
248
-
249
- def test_mkdir
250
- Time.stub :now, Time.at(1_458_518_157) do
251
- @tar_writer.mkdir "foo", 0o644
252
-
253
- assert_headers_equal tar_dir_header("foo", "", 0o644, Time.now),
254
- @io.string[0, 512]
255
-
256
- assert_equal 512, @io.pos
257
- end
258
- end
259
-
260
- def test_mkdir_source_date_epoch
261
- ENV["SOURCE_DATE_EPOCH"] = "123456789"
262
- Time.stub :now, Time.at(1_458_518_157) do
263
- @tar_writer.mkdir "foo", 0o644
264
-
265
- assert_headers_equal tar_dir_header("foo", "", 0o644, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc),
266
- @io.string[0, 512]
267
- end
268
- end
269
-
270
- def test_split_name
271
- assert_equal ["b" * 100, "a" * 155],
272
- @tar_writer.split_name("#{"a" * 155}/#{"b" * 100}")
273
-
274
- assert_equal ["#{"qwer/" * 19}bla", "a" * 151],
275
- @tar_writer.split_name("#{"a" * 151}/#{"qwer/" * 19}bla")
276
- names = [
277
- ([""] + ["123456789"] * 9 + ["1234567890"]).join("/"), # 101 bytes (several pieces)
278
- (["123456789"] * 9 + ["1234567890"] + [""]).join("/"), # 101 bytes (several pieces)
279
- "/" * 99,
280
- "/" * 100,
281
- "/" * 101,
282
- "/" * 102,
283
- ]
284
- names.each do |name|
285
- newname, prefix = @tar_writer.split_name(name)
286
- assert(!(newname.empty?), "split_name() returned empty name")
287
- assert(newname.bytesize <= 100, "split_name() returned name longer than 100 bytes: '#{newname}' for '#{name}'")
288
- assert(prefix.bytesize <= 155, "split_name() returned prefix longer than 155 bytes: '#{prefix}' for '#{name}'")
289
- newname = [prefix, newname].join("/") unless prefix.empty?
290
- assert_equal name, newname
291
- end
292
- end
293
-
294
- def test_split_name_too_long_name
295
- name = File.join "a", "b" * 100
296
- assert_equal ["b" * 100, "a"], @tar_writer.split_name(name)
297
-
298
- name = File.join "a", "b" * 101
299
- exception = assert_raise Gem::Package::TooLongFileName do
300
- @tar_writer.split_name name
301
- end
302
- assert_includes exception.message, name
303
-
304
- # note, GNU tar 1.28 is unable to handle this case too,
305
- # tested with "tar --format=ustar -cPf /tmp/foo.tartar -- /aaaaaa....a"
306
- name = "/" + "a" * 100
307
- exception = assert_raise Gem::Package::TooLongFileName do
308
- @tar_writer.split_name name
309
- end
310
- assert_includes exception.message, name
311
- end
312
-
313
- def test_split_name_too_long_prefix
314
- name = File.join "a" * 155, "b"
315
- assert_equal ["b", "a" * 155], @tar_writer.split_name(name)
316
-
317
- name = File.join "a" * 156, "b"
318
- exception = assert_raise Gem::Package::TooLongFileName do
319
- @tar_writer.split_name name
320
- end
321
- assert_includes exception.message, name
322
- end
323
-
324
- def test_split_name_too_long_total
325
- name = "a" * 257
326
- exception = assert_raise Gem::Package::TooLongFileName do
327
- @tar_writer.split_name name
328
- end
329
- assert_includes exception.message, name
330
- end
331
- end