rubygems-update 3.1.2 → 3.2.6

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 (562) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +756 -489
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +25 -11
  5. data/Manifest.txt +75 -104
  6. data/POLICIES.md +6 -12
  7. data/README.md +5 -5
  8. data/Rakefile +64 -92
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1636 -1422
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +4 -4
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +32 -8
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +55 -21
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  20. data/bundler/lib/bundler/cli/cache.rb +1 -7
  21. data/bundler/lib/bundler/cli/clean.rb +1 -1
  22. data/bundler/lib/bundler/cli/common.rb +14 -0
  23. data/bundler/lib/bundler/cli/console.rb +1 -1
  24. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  25. data/bundler/lib/bundler/cli/exec.rb +4 -4
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +86 -11
  28. data/bundler/lib/bundler/cli/info.rb +15 -4
  29. data/bundler/lib/bundler/cli/init.rb +2 -2
  30. data/bundler/lib/bundler/cli/inject.rb +1 -1
  31. data/bundler/lib/bundler/cli/install.rb +16 -13
  32. data/bundler/lib/bundler/cli/issue.rb +2 -2
  33. data/bundler/lib/bundler/cli/list.rb +12 -10
  34. data/bundler/lib/bundler/cli/outdated.rb +87 -66
  35. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  36. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  37. data/bundler/lib/bundler/cli/show.rb +1 -1
  38. data/bundler/lib/bundler/cli/update.rb +3 -1
  39. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  41. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  42. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -13
  43. data/bundler/lib/bundler/definition.rb +66 -82
  44. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  45. data/bundler/lib/bundler/dependency.rb +3 -10
  46. data/bundler/lib/bundler/dsl.rb +5 -9
  47. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  48. data/bundler/lib/bundler/env.rb +1 -1
  49. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  50. data/bundler/lib/bundler/errors.rb +1 -0
  51. data/bundler/lib/bundler/feature_flag.rb +0 -3
  52. data/bundler/lib/bundler/fetcher.rb +4 -3
  53. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  54. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  55. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  56. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  57. data/bundler/lib/bundler/friendly_errors.rb +22 -13
  58. data/bundler/lib/bundler/gem_helper.rb +33 -19
  59. data/bundler/lib/bundler/gem_helpers.rb +36 -25
  60. data/bundler/lib/bundler/gem_version_promoter.rb +4 -4
  61. data/bundler/lib/bundler/graph.rb +1 -1
  62. data/bundler/lib/bundler/index.rb +6 -2
  63. data/bundler/lib/bundler/injector.rb +22 -4
  64. data/bundler/lib/bundler/inline.rb +2 -2
  65. data/bundler/lib/bundler/installer.rb +35 -32
  66. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  67. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  68. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  69. data/bundler/lib/bundler/lazy_specification.rb +35 -11
  70. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  71. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  72. data/bundler/lib/bundler/man/.document +1 -0
  73. data/bundler/{man → lib/bundler/man}/bundle-add.1 +1 -1
  74. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  75. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
  76. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  77. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +1 -1
  78. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  79. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  80. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  81. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  82. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  83. data/bundler/{man → lib/bundler/man}/bundle-config.1 +16 -25
  84. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  85. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  86. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  87. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +1 -1
  88. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  89. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +25 -3
  90. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  91. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  92. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  93. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  94. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  95. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +1 -1
  96. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  97. data/bundler/{man → lib/bundler/man}/bundle-install.1 +30 -3
  98. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  99. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  100. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  101. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  102. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  104. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  105. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
  106. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  107. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +1 -1
  108. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  109. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  110. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  111. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  112. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  113. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  114. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  115. data/bundler/{man → lib/bundler/man}/bundle-update.1 +1 -1
  116. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  117. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +1 -1
  118. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  119. data/bundler/{man → lib/bundler/man}/bundle.1 +1 -1
  120. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  121. data/bundler/{man → lib/bundler/man}/gemfile.5 +4 -4
  122. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  123. data/bundler/{man → lib/bundler/man}/index.txt +0 -0
  124. data/bundler/lib/bundler/mirror.rb +2 -2
  125. data/bundler/lib/bundler/plugin.rb +30 -5
  126. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  127. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  128. data/bundler/lib/bundler/plugin/index.rb +10 -1
  129. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  130. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  131. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  132. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  133. data/bundler/lib/bundler/remote_specification.rb +5 -2
  134. data/bundler/lib/bundler/resolver.rb +43 -19
  135. data/bundler/lib/bundler/resolver/spec_group.rb +39 -24
  136. data/bundler/lib/bundler/retry.rb +1 -1
  137. data/bundler/lib/bundler/ruby_version.rb +1 -1
  138. data/bundler/lib/bundler/rubygems_ext.rb +69 -9
  139. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  140. data/bundler/lib/bundler/rubygems_integration.rb +26 -61
  141. data/bundler/lib/bundler/runtime.rb +4 -14
  142. data/bundler/lib/bundler/settings.rb +49 -46
  143. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  144. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  145. data/bundler/lib/bundler/source.rb +1 -1
  146. data/bundler/lib/bundler/source/git.rb +23 -21
  147. data/bundler/lib/bundler/source/git/git_proxy.rb +82 -80
  148. data/bundler/lib/bundler/source/path.rb +7 -3
  149. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  150. data/bundler/lib/bundler/source/rubygems.rb +23 -17
  151. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  152. data/bundler/lib/bundler/source_list.rb +2 -2
  153. data/bundler/lib/bundler/spec_set.rb +8 -10
  154. data/bundler/lib/bundler/stub_specification.rb +17 -7
  155. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  156. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  157. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  158. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  159. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  160. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  161. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  162. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  163. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  164. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  165. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  166. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +15 -7
  167. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  168. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  169. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  170. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  171. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  172. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  173. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  174. data/bundler/lib/bundler/ui/shell.rb +5 -5
  175. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  176. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  177. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  178. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  179. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  180. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  181. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +48 -46
  182. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -208
  183. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  184. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  185. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  187. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  188. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  189. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  190. data/bundler/lib/bundler/version.rb +1 -1
  191. data/bundler/lib/bundler/worker.rb +1 -1
  192. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  193. data/lib/rubygems.rb +138 -187
  194. data/lib/rubygems/available_set.rb +4 -6
  195. data/lib/rubygems/basic_specification.rb +12 -10
  196. data/lib/rubygems/bundler_version_finder.rb +14 -9
  197. data/lib/rubygems/command.rb +17 -17
  198. data/lib/rubygems/command_manager.rb +5 -6
  199. data/lib/rubygems/commands/build_command.rb +40 -20
  200. data/lib/rubygems/commands/cert_command.rb +2 -10
  201. data/lib/rubygems/commands/check_command.rb +0 -2
  202. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  203. data/lib/rubygems/commands/contents_command.rb +4 -6
  204. data/lib/rubygems/commands/dependency_command.rb +6 -8
  205. data/lib/rubygems/commands/environment_command.rb +1 -3
  206. data/lib/rubygems/commands/fetch_command.rb +2 -4
  207. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  208. data/lib/rubygems/commands/help_command.rb +4 -4
  209. data/lib/rubygems/commands/info_command.rb +8 -5
  210. data/lib/rubygems/commands/install_command.rb +3 -5
  211. data/lib/rubygems/commands/list_command.rb +8 -7
  212. data/lib/rubygems/commands/lock_command.rb +1 -3
  213. data/lib/rubygems/commands/mirror_command.rb +0 -2
  214. data/lib/rubygems/commands/open_command.rb +0 -4
  215. data/lib/rubygems/commands/outdated_command.rb +0 -2
  216. data/lib/rubygems/commands/owner_command.rb +9 -4
  217. data/lib/rubygems/commands/pristine_command.rb +11 -5
  218. data/lib/rubygems/commands/push_command.rb +10 -47
  219. data/lib/rubygems/commands/query_command.rb +14 -344
  220. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  221. data/lib/rubygems/commands/search_command.rb +7 -7
  222. data/lib/rubygems/commands/server_command.rb +3 -1
  223. data/lib/rubygems/commands/setup_command.rb +101 -74
  224. data/lib/rubygems/commands/signin_command.rb +0 -2
  225. data/lib/rubygems/commands/signout_command.rb +0 -2
  226. data/lib/rubygems/commands/sources_command.rb +9 -7
  227. data/lib/rubygems/commands/specification_command.rb +8 -4
  228. data/lib/rubygems/commands/stale_command.rb +1 -3
  229. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  230. data/lib/rubygems/commands/unpack_command.rb +1 -3
  231. data/lib/rubygems/commands/update_command.rb +59 -14
  232. data/lib/rubygems/commands/which_command.rb +0 -2
  233. data/lib/rubygems/commands/yank_command.rb +4 -7
  234. data/lib/rubygems/config_file.rb +11 -4
  235. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  236. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  237. data/lib/rubygems/defaults.rb +101 -7
  238. data/lib/rubygems/dependency.rb +3 -8
  239. data/lib/rubygems/dependency_installer.rb +6 -78
  240. data/lib/rubygems/dependency_list.rb +7 -9
  241. data/lib/rubygems/deprecate.rb +46 -1
  242. data/lib/rubygems/doctor.rb +4 -4
  243. data/lib/rubygems/errors.rb +3 -14
  244. data/lib/rubygems/exceptions.rb +2 -33
  245. data/lib/rubygems/ext.rb +6 -6
  246. data/lib/rubygems/ext/build_error.rb +2 -0
  247. data/lib/rubygems/ext/builder.rb +21 -39
  248. data/lib/rubygems/ext/cmake_builder.rb +6 -9
  249. data/lib/rubygems/ext/configure_builder.rb +5 -8
  250. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  251. data/lib/rubygems/ext/rake_builder.rb +4 -6
  252. data/lib/rubygems/gem_runner.rb +3 -10
  253. data/lib/rubygems/gemcutter_utilities.rb +102 -21
  254. data/lib/rubygems/indexer.rb +1 -22
  255. data/lib/rubygems/install_update_options.rb +7 -7
  256. data/lib/rubygems/installer.rb +59 -80
  257. data/lib/rubygems/installer_test_case.rb +25 -11
  258. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  259. data/lib/rubygems/local_remote_options.rb +1 -1
  260. data/lib/rubygems/mock_gem_ui.rb +0 -6
  261. data/lib/rubygems/name_tuple.rb +3 -7
  262. data/lib/rubygems/openssl.rb +7 -0
  263. data/lib/rubygems/package.rb +14 -25
  264. data/lib/rubygems/package/digest_io.rb +0 -2
  265. data/lib/rubygems/package/file_source.rb +0 -2
  266. data/lib/rubygems/package/io_source.rb +0 -2
  267. data/lib/rubygems/package/old.rb +1 -3
  268. data/lib/rubygems/package/tar_header.rb +4 -6
  269. data/lib/rubygems/package/tar_reader.rb +0 -3
  270. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  271. data/lib/rubygems/package/tar_test_case.rb +2 -4
  272. data/lib/rubygems/package/tar_writer.rb +2 -12
  273. data/lib/rubygems/package_task.rb +1 -7
  274. data/lib/rubygems/path_support.rb +1 -3
  275. data/lib/rubygems/platform.rb +21 -16
  276. data/lib/rubygems/psych_tree.rb +0 -2
  277. data/lib/rubygems/query_utils.rb +353 -0
  278. data/lib/rubygems/rdoc.rb +0 -12
  279. data/lib/rubygems/remote_fetcher.rb +14 -29
  280. data/lib/rubygems/request.rb +4 -11
  281. data/lib/rubygems/request/connection_pools.rb +1 -5
  282. data/lib/rubygems/request/http_pool.rb +0 -2
  283. data/lib/rubygems/request/https_pool.rb +0 -2
  284. data/lib/rubygems/request_set.rb +7 -20
  285. data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
  286. data/lib/rubygems/request_set/lockfile.rb +8 -12
  287. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  288. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  289. data/lib/rubygems/requirement.rb +21 -22
  290. data/lib/rubygems/resolver.rb +14 -12
  291. data/lib/rubygems/resolver/activation_request.rb +9 -3
  292. data/lib/rubygems/resolver/api_set.rb +31 -24
  293. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  294. data/lib/rubygems/resolver/api_specification.rb +24 -10
  295. data/lib/rubygems/resolver/best_set.rb +2 -4
  296. data/lib/rubygems/resolver/composed_set.rb +3 -5
  297. data/lib/rubygems/resolver/conflict.rb +2 -4
  298. data/lib/rubygems/resolver/current_set.rb +0 -2
  299. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  300. data/lib/rubygems/resolver/git_set.rb +0 -2
  301. data/lib/rubygems/resolver/git_specification.rb +0 -2
  302. data/lib/rubygems/resolver/index_set.rb +1 -3
  303. data/lib/rubygems/resolver/index_specification.rb +29 -2
  304. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  305. data/lib/rubygems/resolver/installer_set.rb +60 -13
  306. data/lib/rubygems/resolver/local_specification.rb +0 -2
  307. data/lib/rubygems/resolver/lock_set.rb +2 -4
  308. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  327. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  328. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  329. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  330. data/lib/rubygems/resolver/set.rb +0 -2
  331. data/lib/rubygems/resolver/source_set.rb +0 -2
  332. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  333. data/lib/rubygems/resolver/specification.rb +13 -3
  334. data/lib/rubygems/resolver/stats.rb +0 -2
  335. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  336. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  337. data/lib/rubygems/s3_uri_signer.rb +2 -8
  338. data/lib/rubygems/safe_yaml.rb +4 -4
  339. data/lib/rubygems/security.rb +27 -34
  340. data/lib/rubygems/security/policy.rb +4 -8
  341. data/lib/rubygems/security/signer.rb +5 -7
  342. data/lib/rubygems/security/trust_dir.rb +1 -3
  343. data/lib/rubygems/server.rb +16 -13
  344. data/lib/rubygems/source.rb +23 -12
  345. data/lib/rubygems/source/git.rb +7 -8
  346. data/lib/rubygems/source/installed.rb +0 -2
  347. data/lib/rubygems/source/local.rb +2 -4
  348. data/lib/rubygems/source/lock.rb +0 -2
  349. data/lib/rubygems/source/specific_file.rb +0 -2
  350. data/lib/rubygems/source/vendor.rb +0 -2
  351. data/lib/rubygems/source_list.rb +4 -7
  352. data/lib/rubygems/spec_fetcher.rb +19 -18
  353. data/lib/rubygems/specification.rb +122 -131
  354. data/lib/rubygems/specification_policy.rb +88 -30
  355. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  356. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  357. data/lib/rubygems/stub_specification.rb +1 -5
  358. data/lib/rubygems/syck_hack.rb +0 -2
  359. data/lib/rubygems/test_case.rb +120 -134
  360. data/lib/rubygems/test_utilities.rb +12 -19
  361. data/lib/rubygems/uninstaller.rb +35 -16
  362. data/lib/rubygems/uri_formatter.rb +2 -3
  363. data/lib/rubygems/uri_parser.rb +0 -2
  364. data/lib/rubygems/user_interaction.rb +1 -26
  365. data/lib/rubygems/util.rb +15 -3
  366. data/lib/rubygems/util/licenses.rb +4 -6
  367. data/lib/rubygems/util/list.rb +0 -2
  368. data/lib/rubygems/validator.rb +1 -3
  369. data/lib/rubygems/version.rb +5 -7
  370. data/lib/rubygems/version_option.rb +6 -0
  371. data/rubygems-update.gemspec +3 -3
  372. data/setup.rb +2 -7
  373. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  374. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  375. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  376. data/test/rubygems/rubygems_plugin.rb +0 -2
  377. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  378. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  379. data/test/rubygems/test_bundled_ca.rb +42 -45
  380. data/test/rubygems/test_config.rb +0 -2
  381. data/test/rubygems/test_deprecate.rb +40 -7
  382. data/test/rubygems/test_gem.rb +156 -99
  383. data/test/rubygems/test_gem_available_set.rb +3 -5
  384. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  385. data/test/rubygems/test_gem_command.rb +24 -7
  386. data/test/rubygems/test_gem_command_manager.rb +36 -5
  387. data/test/rubygems/test_gem_commands_build_command.rb +250 -15
  388. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  389. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  390. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  391. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  392. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  393. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  394. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  395. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  396. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  397. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  398. data/test/rubygems/test_gem_commands_install_command.rb +163 -34
  399. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  400. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  401. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  402. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  403. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  404. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  405. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  406. data/test/rubygems/test_gem_commands_push_command.rb +77 -9
  407. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  408. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  409. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  410. data/test/rubygems/test_gem_commands_setup_command.rb +160 -135
  411. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  412. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  413. data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
  414. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  415. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  416. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  417. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  418. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  419. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  420. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  421. data/test/rubygems/test_gem_config_file.rb +7 -12
  422. data/test/rubygems/test_gem_dependency.rb +0 -2
  423. data/test/rubygems/test_gem_dependency_installer.rb +116 -239
  424. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  425. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  426. data/test/rubygems/test_gem_doctor.rb +28 -2
  427. data/test/rubygems/test_gem_ext_builder.rb +50 -47
  428. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -25
  429. data/test/rubygems/test_gem_ext_configure_builder.rb +6 -22
  430. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  431. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -24
  432. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  433. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  434. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  435. data/test/rubygems/test_gem_indexer.rb +9 -15
  436. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  437. data/test/rubygems/test_gem_installer.rb +258 -115
  438. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  439. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  440. data/test/rubygems/test_gem_package.rb +41 -39
  441. data/test/rubygems/test_gem_package_old.rb +4 -6
  442. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  443. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  444. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  445. data/test/rubygems/test_gem_package_tar_writer.rb +9 -6
  446. data/test/rubygems/test_gem_package_task.rb +46 -13
  447. data/test/rubygems/test_gem_path_support.rb +0 -2
  448. data/test/rubygems/test_gem_platform.rb +71 -6
  449. data/test/rubygems/test_gem_rdoc.rb +0 -2
  450. data/test/rubygems/test_gem_remote_fetcher.rb +169 -212
  451. data/test/rubygems/test_gem_request.rb +13 -17
  452. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  453. data/test/rubygems/test_gem_request_set.rb +72 -22
  454. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  455. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  456. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  457. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  458. data/test/rubygems/test_gem_requirement.rb +43 -3
  459. data/test/rubygems/test_gem_resolver.rb +6 -8
  460. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  461. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  462. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  463. data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
  464. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  466. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  467. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  468. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  470. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  471. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  472. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  473. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  475. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  476. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  477. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  478. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  479. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  480. data/test/rubygems/test_gem_security.rb +22 -24
  481. data/test/rubygems/test_gem_security_policy.rb +7 -12
  482. data/test/rubygems/test_gem_security_signer.rb +10 -12
  483. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  484. data/test/rubygems/test_gem_server.rb +10 -14
  485. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  486. data/test/rubygems/test_gem_source.rb +19 -18
  487. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  488. data/test/rubygems/test_gem_source_git.rb +12 -13
  489. data/test/rubygems/test_gem_source_installed.rb +7 -9
  490. data/test/rubygems/test_gem_source_list.rb +1 -2
  491. data/test/rubygems/test_gem_source_local.rb +8 -10
  492. data/test/rubygems/test_gem_source_lock.rb +10 -12
  493. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  494. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  495. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  496. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  497. data/test/rubygems/test_gem_specification.rb +188 -131
  498. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  499. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  500. data/test/rubygems/test_gem_text.rb +1 -3
  501. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  502. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  503. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  504. data/test/rubygems/test_gem_util.rb +7 -7
  505. data/test/rubygems/test_gem_validator.rb +1 -3
  506. data/test/rubygems/test_gem_version.rb +1 -3
  507. data/test/rubygems/test_gem_version_option.rb +1 -3
  508. data/test/rubygems/test_kernel.rb +25 -10
  509. data/test/rubygems/test_project_sanity.rb +7 -2
  510. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  511. data/test/rubygems/test_require.rb +291 -56
  512. data/test/test_changelog_generator.rb +17 -0
  513. metadata +79 -133
  514. data/.bundle/config +0 -2
  515. data/.rubocop.yml +0 -91
  516. data/Gemfile +0 -8
  517. data/Gemfile.lock +0 -43
  518. data/bundler/CODE_OF_CONDUCT.md +0 -136
  519. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  520. data/bundler/man/bundle-add.1.txt +0 -58
  521. data/bundler/man/bundle-binstubs.1.txt +0 -48
  522. data/bundler/man/bundle-cache.1.txt +0 -78
  523. data/bundler/man/bundle-check.1.txt +0 -33
  524. data/bundler/man/bundle-clean.1.txt +0 -26
  525. data/bundler/man/bundle-config.1.txt +0 -528
  526. data/bundler/man/bundle-doctor.1.txt +0 -44
  527. data/bundler/man/bundle-exec.1.txt +0 -178
  528. data/bundler/man/bundle-gem.1.txt +0 -91
  529. data/bundler/man/bundle-info.1.txt +0 -21
  530. data/bundler/man/bundle-init.1.txt +0 -34
  531. data/bundler/man/bundle-inject.1.txt +0 -32
  532. data/bundler/man/bundle-install.1.txt +0 -401
  533. data/bundler/man/bundle-list.1.txt +0 -43
  534. data/bundler/man/bundle-lock.1.txt +0 -93
  535. data/bundler/man/bundle-open.1.txt +0 -29
  536. data/bundler/man/bundle-outdated.1.txt +0 -131
  537. data/bundler/man/bundle-platform.1.txt +0 -57
  538. data/bundler/man/bundle-pristine.1.txt +0 -44
  539. data/bundler/man/bundle-remove.1.txt +0 -34
  540. data/bundler/man/bundle-show.1.txt +0 -27
  541. data/bundler/man/bundle-update.1.txt +0 -390
  542. data/bundler/man/bundle-viz.1.txt +0 -39
  543. data/bundler/man/bundle.1.txt +0 -116
  544. data/bundler/man/gemfile.5.txt +0 -649
  545. data/lib/rubygems/source_local.rb +0 -7
  546. data/lib/rubygems/source_specific_file.rb +0 -6
  547. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  548. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  549. data/lib/ubygems.rb +0 -14
  550. data/tmp/.keep +0 -0
  551. data/util/CL2notes +0 -55
  552. data/util/bisect +0 -10
  553. data/util/ci.sh +0 -62
  554. data/util/cops/deprecations.rb +0 -52
  555. data/util/create_certs.rb +0 -171
  556. data/util/create_certs.sh +0 -27
  557. data/util/create_encrypted_key.rb +0 -16
  558. data/util/generate_spdx_license_list.rb +0 -63
  559. data/util/patch_with_prs.rb +0 -77
  560. data/util/rubocop +0 -8
  561. data/util/update_bundled_ca_certificates.rb +0 -139
  562. data/util/update_changelog.rb +0 -67
@@ -4,7 +4,6 @@ require 'rubygems'
4
4
  require 'fileutils'
5
5
 
6
6
  class TestGemPathSupport < Gem::TestCase
7
-
8
7
  def setup
9
8
  super
10
9
 
@@ -140,5 +139,4 @@ class TestGemPathSupport < Gem::TestCase
140
139
  assert_equal dir, ps.home
141
140
  assert_equal [dir, not_existing], ps.path
142
141
  end
143
-
144
142
  end
@@ -4,7 +4,6 @@ require 'rubygems/platform'
4
4
  require 'rbconfig'
5
5
 
6
6
  class TestGemPlatform < Gem::TestCase
7
-
8
7
  def test_self_local
9
8
  util_set_arch 'i686-darwin8.10.1'
10
9
 
@@ -12,10 +11,69 @@ class TestGemPlatform < Gem::TestCase
12
11
  end
13
12
 
14
13
  def test_self_match
15
- assert Gem::Platform.match(nil), 'nil == ruby'
16
- assert Gem::Platform.match(Gem::Platform.local), 'exact match'
17
- assert Gem::Platform.match(Gem::Platform.local.to_s), '=~ match'
18
- assert Gem::Platform.match(Gem::Platform::RUBY), 'ruby'
14
+ Gem::Deprecate.skip_during do
15
+ assert Gem::Platform.match(nil), 'nil == ruby'
16
+ assert Gem::Platform.match(Gem::Platform.local), 'exact match'
17
+ assert Gem::Platform.match(Gem::Platform.local.to_s), '=~ match'
18
+ assert Gem::Platform.match(Gem::Platform::RUBY), 'ruby'
19
+ end
20
+ end
21
+
22
+ def test_self_match_gem?
23
+ assert Gem::Platform.match_gem?(nil, 'json'), 'nil == ruby'
24
+ assert Gem::Platform.match_gem?(Gem::Platform.local, 'json'), 'exact match'
25
+ assert Gem::Platform.match_gem?(Gem::Platform.local.to_s, 'json'), '=~ match'
26
+ assert Gem::Platform.match_gem?(Gem::Platform::RUBY, 'json'), 'ruby'
27
+ end
28
+
29
+ def test_self_match_spec?
30
+ make_spec = -> platform do
31
+ util_spec 'mygem-for-platform-match_spec', '1' do |s|
32
+ s.platform = platform
33
+ end
34
+ end
35
+
36
+ assert Gem::Platform.match_spec?(make_spec.call(nil)), 'nil == ruby'
37
+ assert Gem::Platform.match_spec?(make_spec.call(Gem::Platform.local)), 'exact match'
38
+ assert Gem::Platform.match_spec?(make_spec.call(Gem::Platform.local.to_s)), '=~ match'
39
+ assert Gem::Platform.match_spec?(make_spec.call(Gem::Platform::RUBY)), 'ruby'
40
+ end
41
+
42
+ def test_self_match_spec_with_match_gem_override
43
+ make_spec = -> name, platform do
44
+ util_spec name, '1' do |s|
45
+ s.platform = platform
46
+ end
47
+ end
48
+
49
+ class << Gem::Platform
50
+ alias_method :original_match_gem?, :match_gem?
51
+ def match_gem?(platform, gem_name)
52
+ # e.g., sassc and libv8 are such gems, their native extensions do not use the Ruby C API
53
+ if gem_name == 'gem-with-ruby-impl-independent-precompiled-ext'
54
+ match_platforms?(platform, [Gem::Platform::RUBY, Gem::Platform.local])
55
+ else
56
+ match_platforms?(platform, Gem.platforms)
57
+ end
58
+ end
59
+ end
60
+
61
+ platforms = Gem.platforms
62
+ Gem.platforms = [Gem::Platform::RUBY]
63
+ begin
64
+ assert_equal true, Gem::Platform.match_spec?(make_spec.call('mygem', Gem::Platform::RUBY))
65
+ assert_equal false, Gem::Platform.match_spec?(make_spec.call('mygem', Gem::Platform.local))
66
+
67
+ name = 'gem-with-ruby-impl-independent-precompiled-ext'
68
+ assert_equal true, Gem::Platform.match_spec?(make_spec.call(name, Gem::Platform.local))
69
+ ensure
70
+ Gem.platforms = platforms
71
+ class << Gem::Platform
72
+ remove_method :match_gem?
73
+ alias_method :match_gem?, :original_match_gem? # rubocop:disable Lint/DuplicateMethods
74
+ remove_method :original_match_gem?
75
+ end
76
+ end
19
77
  end
20
78
 
21
79
  def test_self_new
@@ -298,6 +356,14 @@ class TestGemPlatform < Gem::TestCase
298
356
  assert_local_match 'sparc-solaris2.8-mq5.3'
299
357
  end
300
358
 
359
+ def test_inspect
360
+ result = Gem::Platform.new("universal-java11").inspect
361
+
362
+ assert_equal 1, result.scan(/@cpu=/).size
363
+ assert_equal 1, result.scan(/@os=/).size
364
+ assert_equal 1, result.scan(/@version=/).size
365
+ end
366
+
301
367
  def assert_local_match(name)
302
368
  assert_match Gem::Platform.local, name
303
369
  end
@@ -305,5 +371,4 @@ class TestGemPlatform < Gem::TestCase
305
371
  def refute_local_match(name)
306
372
  refute_match Gem::Platform.local, name
307
373
  end
308
-
309
374
  end
@@ -4,7 +4,6 @@ require 'rubygems/test_case'
4
4
  require 'rubygems/rdoc'
5
5
 
6
6
  class TestGemRDoc < Gem::TestCase
7
-
8
7
  Gem::RDoc.load_rdoc
9
8
 
10
9
  def setup
@@ -134,5 +133,4 @@ class TestGemRDoc < Gem::TestCase
134
133
  FileUtils.rm_r @a.doc_dir
135
134
  end
136
135
  end
137
-
138
136
  end
@@ -2,15 +2,10 @@
2
2
  require 'rubygems/test_case'
3
3
 
4
4
  require 'webrick'
5
- begin
6
- require 'webrick/https'
7
- rescue LoadError => e
8
- raise unless (e.respond_to?(:path) && e.path == 'openssl') ||
9
- e.message =~ / -- openssl$/
10
- end
5
+ require 'webrick/https' if Gem::HAVE_OPENSSL
11
6
 
12
- unless defined?(OpenSSL::SSL)
13
- warn 'Skipping Gem::Request tests. openssl not found.'
7
+ unless Gem::HAVE_OPENSSL
8
+ warn 'Skipping Gem::RemoteFetcher tests. openssl not found.'
14
9
  end
15
10
 
16
11
  require 'rubygems/remote_fetcher'
@@ -32,7 +27,6 @@ require 'minitest/mock'
32
27
  # proxy is configured.
33
28
 
34
29
  class TestGemRemoteFetcher < Gem::TestCase
35
-
36
30
  include Gem::DefaultUserInteraction
37
31
 
38
32
  SERVER_DATA = <<-EOY.freeze
@@ -78,12 +72,10 @@ gems:
78
72
 
79
73
  PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, '0.4.2')
80
74
 
81
- DIR = File.expand_path(File.dirname(__FILE__))
82
-
83
75
  # Generated via:
84
76
  # x = OpenSSL::PKey::DH.new(2048) # wait a while...
85
77
  # x.to_s => pem
86
- TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
78
+ TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_END_OF_PEM_
87
79
  -----BEGIN DH PARAMETERS-----
88
80
  MIIBCAKCAQEA3Ze2EHSfYkZLUn557torAmjBgPsqzbodaRaGZtgK1gEU+9nNJaFV
89
81
  G1JKhmGUiEDyIW7idsBpe4sX/Wqjnp48Lr8IeI/SlEzLdoGpf05iRYXC8Cm9o8aM
@@ -92,7 +84,7 @@ cfmVgoSEAo9YLBpzoji2jHkO7Q5IPt4zxbTdlmmGFLc/GO9q7LGHhC+rcMcNTGsM
92
84
  NP0fuvVAIB158VnQ0liHSwcl6+9vE1mL0Jo/qEXQxl0+UdKDjaGfTsn6HIrwTnmJ
93
85
  PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
94
86
  -----END DH PARAMETERS-----
95
- _end_of_pem_
87
+ _END_OF_PEM_
96
88
 
97
89
  def setup
98
90
  @proxies = %w[https_proxy http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
@@ -100,20 +92,17 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
100
92
  @proxies.each {|k| ENV[k] = nil }
101
93
 
102
94
  super
103
- self.class.start_servers
104
- self.class.enable_yaml = true
105
- self.class.enable_zip = false
95
+ start_servers
96
+ self.enable_yaml = true
97
+ self.enable_zip = false
106
98
 
107
- base_server_uri = "http://localhost:#{self.class.normal_server_port}"
108
- @proxy_uri = "http://localhost:#{self.class.proxy_server_port}"
99
+ base_server_uri = "http://localhost:#{normal_server_port}"
100
+ @proxy_uri = "http://localhost:#{proxy_server_port}"
109
101
 
110
102
  @server_uri = base_server_uri + "/yaml"
111
103
  @server_z_uri = base_server_uri + "/yaml.Z"
112
104
 
113
- # REFACTOR: copied from test_gem_dependency_installer.rb
114
- @gems_dir = File.join @tempdir, 'gems'
115
105
  @cache_dir = File.join @gemhome, "cache"
116
- FileUtils.mkdir @gems_dir
117
106
 
118
107
  # TODO: why does the remote fetcher need it written to disk?
119
108
  @a1, @a1_gem = util_gem 'a', '1' do |s|
@@ -129,7 +118,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
129
118
 
130
119
  def teardown
131
120
  @fetcher.close_all
132
- self.class.stop_servers
121
+ stop_servers
133
122
  super
134
123
  Gem.configuration[:http_proxy] = nil
135
124
  @proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
@@ -153,42 +142,22 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
153
142
  assert_equal proxy_uri, fetcher.instance_variable_get(:@proxy).to_s
154
143
  end
155
144
 
156
- def test_fetch_size_bad_uri
145
+ def test_fetch_path_bad_uri
157
146
  fetcher = Gem::RemoteFetcher.new nil
158
147
  @fetcher = fetcher
159
148
 
160
149
  e = assert_raises ArgumentError do
161
- Gem::Deprecate.skip_during do
162
- fetcher.fetch_size 'gems.example.com/yaml'
163
- end
150
+ @fetcher.fetch_path("gems.example.com/yaml", nil, true)
164
151
  end
165
152
 
166
153
  assert_equal 'uri scheme is invalid: nil', e.message
167
154
  end
168
155
 
169
- def test_fetch_size_socket_error
170
- fetcher = Gem::RemoteFetcher.new nil
171
- @fetcher = fetcher
172
- def fetcher.request(uri, request_class, last_modified = nil)
173
- raise SocketError, "oops"
174
- end
175
-
176
- uri = 'http://gems.example.com/yaml'
177
- e = assert_raises Gem::RemoteFetcher::FetchError do
178
- Gem::Deprecate.skip_during do
179
- fetcher.fetch_size uri
180
- end
181
- end
182
-
183
- assert_equal "SocketError: oops (#{uri})", e.message
184
- end
185
-
186
156
  def test_no_proxy
187
157
  use_ui @stub_ui do
188
158
  assert_data_from_server @fetcher.fetch_path(@server_uri)
189
- Gem::Deprecate.skip_during do
190
- assert_equal SERVER_DATA.size, @fetcher.fetch_size(@server_uri)
191
- end
159
+ response = @fetcher.fetch_path(@server_uri, nil, true)
160
+ assert_equal SERVER_DATA.size, response['content-length'].to_i
192
161
  end
193
162
  end
194
163
 
@@ -236,7 +205,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
236
205
  @test_data
237
206
  end
238
207
 
239
- raise Gem::RemoteFetcher::FetchError.new("haha!", nil)
208
+ raise Gem::RemoteFetcher::FetchError.new("haha!", '')
240
209
  end
241
210
  end
242
211
 
@@ -348,6 +317,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
348
317
  local_path = File.join @tempdir, @a1.file_name
349
318
  inst = nil
350
319
  FileUtils.chmod 0555, @a1.cache_dir
320
+ FileUtils.mkdir_p File.join(Gem.user_dir, "cache") rescue nil
321
+ FileUtils.chmod 0555, File.join(Gem.user_dir, "cache")
351
322
 
352
323
  Dir.chdir @tempdir do
353
324
  inst = Gem::RemoteFetcher.fetcher
@@ -356,6 +327,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
356
327
  assert_equal(File.join(@tempdir, @a1.file_name),
357
328
  inst.download(@a1, local_path))
358
329
  ensure
330
+ FileUtils.chmod 0755, File.join(Gem.user_dir, "cache")
359
331
  FileUtils.chmod 0755, @a1.cache_dir
360
332
  end
361
333
 
@@ -519,7 +491,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
519
491
  fetcher.fetch_path url
520
492
  end
521
493
 
522
- assert_match %r|ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z|,
494
+ assert_match %r{ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z},
523
495
  e.message
524
496
  assert_equal url, e.uri
525
497
  end
@@ -691,7 +663,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
691
663
 
692
664
  def test_fetch_s3_config_creds
693
665
  Gem.configuration[:s3_source] = {
694
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass'}
666
+ 'my-bucket' => {:id => 'testuser', :secret => 'testpass'},
695
667
  }
696
668
  url = 's3://my-bucket/gems/specs.4.8.gz'
697
669
  Time.stub :now, Time.at(1561353581) do
@@ -703,7 +675,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
703
675
 
704
676
  def test_fetch_s3_config_creds_with_region
705
677
  Gem.configuration[:s3_source] = {
706
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass', :region => 'us-west-2'}
678
+ 'my-bucket' => {:id => 'testuser', :secret => 'testpass', :region => 'us-west-2'},
707
679
  }
708
680
  url = 's3://my-bucket/gems/specs.4.8.gz'
709
681
  Time.stub :now, Time.at(1561353581) do
@@ -715,7 +687,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
715
687
 
716
688
  def test_fetch_s3_config_creds_with_token
717
689
  Gem.configuration[:s3_source] = {
718
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass', :security_token => 'testtoken'}
690
+ 'my-bucket' => {:id => 'testuser', :secret => 'testpass', :security_token => 'testtoken'},
719
691
  }
720
692
  url = 's3://my-bucket/gems/specs.4.8.gz'
721
693
  Time.stub :now, Time.at(1561353581) do
@@ -730,14 +702,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
730
702
  ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
731
703
  ENV['AWS_SESSION_TOKEN'] = nil
732
704
  Gem.configuration[:s3_source] = {
733
- 'my-bucket' => {:provider => 'env'}
705
+ 'my-bucket' => {:provider => 'env'},
734
706
  }
735
707
  url = 's3://my-bucket/gems/specs.4.8.gz'
736
708
  Time.stub :now, Time.at(1561353581) do
737
709
  assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
738
710
  end
739
711
  ensure
740
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
712
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS') }
741
713
  Gem.configuration[:s3_source] = nil
742
714
  end
743
715
 
@@ -746,14 +718,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
746
718
  ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
747
719
  ENV['AWS_SESSION_TOKEN'] = nil
748
720
  Gem.configuration[:s3_source] = {
749
- 'my-bucket' => {:provider => 'env', :region => 'us-west-2'}
721
+ 'my-bucket' => {:provider => 'env', :region => 'us-west-2'},
750
722
  }
751
723
  url = 's3://my-bucket/gems/specs.4.8.gz'
752
724
  Time.stub :now, Time.at(1561353581) do
753
725
  assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2'
754
726
  end
755
727
  ensure
756
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
728
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS') }
757
729
  Gem.configuration[:s3_source] = nil
758
730
  end
759
731
 
@@ -762,14 +734,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
762
734
  ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
763
735
  ENV['AWS_SESSION_TOKEN'] = 'testtoken'
764
736
  Gem.configuration[:s3_source] = {
765
- 'my-bucket' => {:provider => 'env'}
737
+ 'my-bucket' => {:provider => 'env'},
766
738
  }
767
739
  url = 's3://my-bucket/gems/specs.4.8.gz'
768
740
  Time.stub :now, Time.at(1561353581) do
769
741
  assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken'
770
742
  end
771
743
  ensure
772
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
744
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS') }
773
745
  Gem.configuration[:s3_source] = nil
774
746
  end
775
747
 
@@ -782,7 +754,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
782
754
 
783
755
  def test_fetch_s3_instance_profile_creds
784
756
  Gem.configuration[:s3_source] = {
785
- 'my-bucket' => {:provider => 'instance_profile'}
757
+ 'my-bucket' => {:provider => 'instance_profile'},
786
758
  }
787
759
 
788
760
  url = 's3://my-bucket/gems/specs.4.8.gz'
@@ -796,7 +768,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
796
768
 
797
769
  def test_fetch_s3_instance_profile_creds_with_region
798
770
  Gem.configuration[:s3_source] = {
799
- 'my-bucket' => {:provider => 'instance_profile', :region => 'us-west-2'}
771
+ 'my-bucket' => {:provider => 'instance_profile', :region => 'us-west-2'},
800
772
  }
801
773
 
802
774
  url = 's3://my-bucket/gems/specs.4.8.gz'
@@ -810,7 +782,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
810
782
 
811
783
  def test_fetch_s3_instance_profile_creds_with_token
812
784
  Gem.configuration[:s3_source] = {
813
- 'my-bucket' => {:provider => 'instance_profile'}
785
+ 'my-bucket' => {:provider => 'instance_profile'},
814
786
  }
815
787
 
816
788
  url = 's3://my-bucket/gems/specs.4.8.gz'
@@ -840,7 +812,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
840
812
 
841
813
  def test_fetch_s3_no_host
842
814
  Gem.configuration[:s3_source] = {
843
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass'}
815
+ 'my-bucket' => {:id => 'testuser', :secret => 'testpass'},
844
816
  }
845
817
 
846
818
  url = 's3://other-bucket/gems/specs.4.8.gz'
@@ -901,7 +873,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
901
873
 
902
874
  def test_yaml_error_on_size
903
875
  use_ui @stub_ui do
904
- self.class.enable_yaml = false
876
+ self.enable_yaml = false
905
877
  fetcher = Gem::RemoteFetcher.new nil
906
878
  @fetcher = fetcher
907
879
  assert_error { fetcher.size }
@@ -909,23 +881,20 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
909
881
  end
910
882
 
911
883
  def test_ssl_connection
912
- ssl_server = self.class.start_ssl_server
913
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
884
+ ssl_server = start_ssl_server
885
+ temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
914
886
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
915
887
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
916
888
  end
917
889
  end
918
890
 
919
891
  def test_ssl_client_cert_auth_connection
920
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
921
- skip 'openssl in jruby fails' if java_platform?
922
-
923
- ssl_server = self.class.start_ssl_server({
892
+ ssl_server = start_ssl_server({
924
893
  :SSLVerifyClient =>
925
894
  OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
926
895
 
927
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
928
- temp_client_cert = File.join(DIR, 'client.pem')
896
+ temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
897
+ temp_client_cert = File.join(__dir__, 'client.pem')
929
898
 
930
899
  with_configured_fetcher(
931
900
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
@@ -935,14 +904,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
935
904
  end
936
905
 
937
906
  def test_do_not_allow_invalid_client_cert_auth_connection
938
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
939
-
940
- ssl_server = self.class.start_ssl_server({
907
+ ssl_server = start_ssl_server({
941
908
  :SSLVerifyClient =>
942
909
  OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
943
910
 
944
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
945
- temp_client_cert = File.join(DIR, 'invalid_client.pem')
911
+ temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
912
+ temp_client_cert = File.join(__dir__, 'invalid_client.pem')
946
913
 
947
914
  with_configured_fetcher(
948
915
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
@@ -954,7 +921,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
954
921
  end
955
922
 
956
923
  def test_do_not_allow_insecure_ssl_connection_by_default
957
- ssl_server = self.class.start_ssl_server
924
+ ssl_server = start_ssl_server
958
925
  with_configured_fetcher do |fetcher|
959
926
  assert_raises Gem::RemoteFetcher::FetchError do
960
927
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
@@ -963,15 +930,15 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
963
930
  end
964
931
 
965
932
  def test_ssl_connection_allow_verify_none
966
- ssl_server = self.class.start_ssl_server
933
+ ssl_server = start_ssl_server
967
934
  with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher|
968
935
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
969
936
  end
970
937
  end
971
938
 
972
939
  def test_do_not_follow_insecure_redirect
973
- ssl_server = self.class.start_ssl_server
974
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
940
+ ssl_server = start_ssl_server
941
+ temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
975
942
  expected_error_message =
976
943
  "redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})"
977
944
 
@@ -985,7 +952,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
985
952
  end
986
953
 
987
954
  def test_nil_ca_cert
988
- ssl_server = self.class.start_ssl_server
955
+ ssl_server = start_ssl_server
989
956
  temp_ca_cert = nil
990
957
 
991
958
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
@@ -1031,157 +998,147 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1031
998
  end
1032
999
 
1033
1000
  class NilLog < WEBrick::Log
1034
-
1035
1001
  def log(level, data) #Do nothing
1036
1002
  end
1037
-
1038
1003
  end
1039
1004
 
1040
- class << self
1005
+ private
1041
1006
 
1042
- attr_reader :normal_server, :proxy_server
1043
- attr_accessor :enable_zip, :enable_yaml
1007
+ attr_reader :normal_server, :proxy_server
1008
+ attr_accessor :enable_zip, :enable_yaml
1044
1009
 
1045
- def start_servers
1046
- @normal_server ||= start_server(SERVER_DATA)
1047
- @proxy_server ||= start_server(PROXY_DATA)
1048
- @enable_yaml = true
1049
- @enable_zip = false
1050
- @ssl_server = nil
1051
- @ssl_server_thread = nil
1052
- end
1010
+ def start_servers
1011
+ @normal_server ||= start_server(SERVER_DATA)
1012
+ @proxy_server ||= start_server(PROXY_DATA)
1013
+ @enable_yaml = true
1014
+ @enable_zip = false
1015
+ @ssl_server = nil
1016
+ @ssl_server_thread = nil
1017
+ end
1053
1018
 
1054
- def stop_servers
1055
- if @normal_server
1056
- @normal_server.kill.join
1057
- @normal_server = nil
1058
- end
1059
- if @proxy_server
1060
- @proxy_server.kill.join
1061
- @proxy_server = nil
1062
- end
1063
- if @ssl_server
1064
- @ssl_server.stop
1065
- @ssl_server = nil
1066
- end
1067
- if @ssl_server_thread
1068
- @ssl_server_thread.kill.join
1069
- @ssl_server_thread = nil
1070
- end
1071
- utils = WEBrick::Utils # TimeoutHandler is since 1.9
1072
- utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
1019
+ def stop_servers
1020
+ if @normal_server
1021
+ @normal_server.kill.join
1022
+ @normal_server = nil
1073
1023
  end
1074
-
1075
- def normal_server_port
1076
- @normal_server[:server].config[:Port]
1024
+ if @proxy_server
1025
+ @proxy_server.kill.join
1026
+ @proxy_server = nil
1077
1027
  end
1078
-
1079
- def proxy_server_port
1080
- @proxy_server[:server].config[:Port]
1028
+ if @ssl_server
1029
+ @ssl_server.stop
1030
+ @ssl_server = nil
1031
+ end
1032
+ if @ssl_server_thread
1033
+ @ssl_server_thread.kill.join
1034
+ @ssl_server_thread = nil
1081
1035
  end
1036
+ utils = WEBrick::Utils # TimeoutHandler is since 1.9
1037
+ utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
1038
+ end
1082
1039
 
1083
- DIR = File.expand_path(File.dirname(__FILE__))
1040
+ def normal_server_port
1041
+ @normal_server[:server].config[:Port]
1042
+ end
1084
1043
 
1085
- def start_ssl_server(config = {})
1086
- raise MiniTest::Skip, 'openssl not installed' unless
1087
- defined?(OpenSSL::SSL)
1044
+ def proxy_server_port
1045
+ @proxy_server[:server].config[:Port]
1046
+ end
1088
1047
 
1089
- null_logger = NilLog.new
1090
- server = WEBrick::HTTPServer.new({
1091
- :Port => 0,
1092
- :Logger => null_logger,
1093
- :AccessLog => [],
1094
- :SSLEnable => true,
1095
- :SSLCACertificateFile => File.join(DIR, 'ca_cert.pem'),
1096
- :SSLCertificate => cert('ssl_cert.pem'),
1097
- :SSLPrivateKey => key('ssl_key.pem'),
1098
- :SSLVerifyClient => nil,
1099
- :SSLCertName => nil
1100
- }.merge(config))
1101
- server.mount_proc("/yaml") do |req, res|
1102
- res.body = "--- true\n"
1103
- end
1104
- server.mount_proc("/insecure_redirect") do |req, res|
1105
- res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
1106
- end
1107
- server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
1108
- t = Thread.new do
1109
- begin
1110
- server.start
1111
- rescue Exception => ex
1112
- abort ex.message
1113
- puts "ERROR during server thread: #{ex.message}"
1114
- ensure
1115
- server.shutdown
1116
- end
1117
- end
1118
- while server.status != :Running
1119
- sleep 0.1
1120
- unless t.alive?
1121
- t.join
1122
- raise
1123
- end
1124
- end
1125
- @ssl_server = server
1126
- @ssl_server_thread = t
1127
- server
1128
- end
1129
-
1130
- private
1131
-
1132
- def start_server(data)
1133
- null_logger = NilLog.new
1134
- s = WEBrick::HTTPServer.new(
1135
- :Port => 0,
1136
- :DocumentRoot => nil,
1137
- :Logger => null_logger,
1138
- :AccessLog => null_logger
1139
- )
1140
- s.mount_proc("/kill") { |req, res| s.shutdown }
1141
- s.mount_proc("/yaml") do |req, res|
1142
- if req["X-Captain"]
1143
- res.body = req["X-Captain"]
1144
- elsif @enable_yaml
1145
- res.body = data
1146
- res['Content-Type'] = 'text/plain'
1147
- res['content-length'] = data.size
1148
- else
1149
- res.status = "404"
1150
- res.body = "<h1>NOT FOUND</h1>"
1151
- res['Content-Type'] = 'text/html'
1152
- end
1048
+ def start_ssl_server(config = {})
1049
+ skip "starting this test server fails randomly on jruby" if Gem.java_platform?
1050
+
1051
+ null_logger = NilLog.new
1052
+ server = WEBrick::HTTPServer.new({
1053
+ :Port => 0,
1054
+ :Logger => null_logger,
1055
+ :AccessLog => [],
1056
+ :SSLEnable => true,
1057
+ :SSLCACertificateFile => File.join(__dir__, 'ca_cert.pem'),
1058
+ :SSLCertificate => cert('ssl_cert.pem'),
1059
+ :SSLPrivateKey => key('ssl_key.pem'),
1060
+ :SSLVerifyClient => nil,
1061
+ :SSLCertName => nil,
1062
+ }.merge(config))
1063
+ server.mount_proc("/yaml") do |req, res|
1064
+ res.body = "--- true\n"
1065
+ end
1066
+ server.mount_proc("/insecure_redirect") do |req, res|
1067
+ res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
1068
+ end
1069
+ server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
1070
+ t = Thread.new do
1071
+ begin
1072
+ server.start
1073
+ rescue Exception => ex
1074
+ puts "ERROR during server thread: #{ex.message}"
1075
+ raise
1076
+ ensure
1077
+ server.shutdown
1153
1078
  end
1154
- s.mount_proc("/yaml.Z") do |req, res|
1155
- if @enable_zip
1156
- res.body = Zlib::Deflate.deflate(data)
1157
- res['Content-Type'] = 'text/plain'
1158
- else
1159
- res.status = "404"
1160
- res.body = "<h1>NOT FOUND</h1>"
1161
- res['Content-Type'] = 'text/html'
1162
- end
1079
+ end
1080
+ while server.status != :Running
1081
+ sleep 0.1
1082
+ unless t.alive?
1083
+ t.join
1084
+ raise
1163
1085
  end
1164
- th = Thread.new do
1165
- begin
1166
- s.start
1167
- rescue Exception => ex
1168
- abort "ERROR during server thread: #{ex.message}"
1169
- ensure
1170
- s.shutdown
1171
- end
1086
+ end
1087
+ @ssl_server = server
1088
+ @ssl_server_thread = t
1089
+ server
1090
+ end
1091
+
1092
+ def start_server(data)
1093
+ null_logger = NilLog.new
1094
+ s = WEBrick::HTTPServer.new(
1095
+ :Port => 0,
1096
+ :DocumentRoot => nil,
1097
+ :Logger => null_logger,
1098
+ :AccessLog => null_logger
1099
+ )
1100
+ s.mount_proc("/kill") {|req, res| s.shutdown }
1101
+ s.mount_proc("/yaml") do |req, res|
1102
+ if req["X-Captain"]
1103
+ res.body = req["X-Captain"]
1104
+ elsif @enable_yaml
1105
+ res.body = data
1106
+ res['Content-Type'] = 'text/plain'
1107
+ res['content-length'] = data.size
1108
+ else
1109
+ res.status = "404"
1110
+ res.body = "<h1>NOT FOUND</h1>"
1111
+ res['Content-Type'] = 'text/html'
1172
1112
  end
1173
- th[:server] = s
1174
- th
1175
1113
  end
1176
-
1177
- def cert(filename)
1178
- OpenSSL::X509::Certificate.new(File.read(File.join(DIR, filename)))
1114
+ s.mount_proc("/yaml.Z") do |req, res|
1115
+ if @enable_zip
1116
+ res.body = Zlib::Deflate.deflate(data)
1117
+ res['Content-Type'] = 'text/plain'
1118
+ else
1119
+ res.status = "404"
1120
+ res.body = "<h1>NOT FOUND</h1>"
1121
+ res['Content-Type'] = 'text/html'
1122
+ end
1179
1123
  end
1180
-
1181
- def key(filename)
1182
- OpenSSL::PKey::RSA.new(File.read(File.join(DIR, filename)))
1124
+ th = Thread.new do
1125
+ begin
1126
+ s.start
1127
+ rescue Exception => ex
1128
+ abort "ERROR during server thread: #{ex.message}"
1129
+ ensure
1130
+ s.shutdown
1131
+ end
1183
1132
  end
1133
+ th[:server] = s
1134
+ th
1135
+ end
1184
1136
 
1137
+ def cert(filename)
1138
+ OpenSSL::X509::Certificate.new(File.read(File.join(__dir__, filename)))
1185
1139
  end
1186
1140
 
1187
- end if defined?(OpenSSL::SSL)
1141
+ def key(filename)
1142
+ OpenSSL::PKey::RSA.new(File.read(File.join(__dir__, filename)))
1143
+ end
1144
+ end if Gem::HAVE_OPENSSL