rubygems-update 3.0.3 → 3.4.7

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 (795) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5556 -0
  3. data/CODE_OF_CONDUCT.md +62 -24
  4. data/CONTRIBUTING.md +111 -21
  5. data/MAINTAINERS.txt +1 -6
  6. data/Manifest.txt +209 -101
  7. data/POLICIES.md +65 -22
  8. data/README.md +23 -15
  9. data/UPGRADING.md +5 -81
  10. data/bin/gem +2 -16
  11. data/bin/update_rubygems +5 -5
  12. data/bundler/CHANGELOG.md +2619 -1256
  13. data/bundler/LICENSE.md +18 -19
  14. data/bundler/README.md +11 -12
  15. data/bundler/UPGRADING.md +222 -0
  16. data/bundler/bundler.gemspec +13 -33
  17. data/bundler/exe/bundle +26 -11
  18. data/bundler/exe/bundler +1 -1
  19. data/bundler/lib/bundler/.document +1 -0
  20. data/bundler/lib/bundler/build_metadata.rb +5 -13
  21. data/bundler/lib/bundler/capistrano.rb +4 -4
  22. data/bundler/lib/bundler/cli/add.rb +28 -16
  23. data/bundler/lib/bundler/cli/binstubs.rb +11 -3
  24. data/bundler/lib/bundler/cli/cache.rb +24 -17
  25. data/bundler/lib/bundler/cli/check.rb +5 -3
  26. data/bundler/lib/bundler/cli/clean.rb +1 -1
  27. data/bundler/lib/bundler/cli/common.rb +41 -13
  28. data/bundler/lib/bundler/cli/config.rb +170 -86
  29. data/bundler/lib/bundler/cli/console.rb +3 -3
  30. data/bundler/lib/bundler/cli/doctor.rb +27 -10
  31. data/bundler/lib/bundler/cli/exec.rb +8 -25
  32. data/bundler/lib/bundler/cli/fund.rb +36 -0
  33. data/bundler/lib/bundler/cli/gem.rb +261 -48
  34. data/bundler/lib/bundler/cli/info.rb +52 -8
  35. data/bundler/lib/bundler/cli/init.rb +7 -3
  36. data/bundler/lib/bundler/cli/inject.rb +1 -1
  37. data/bundler/lib/bundler/cli/install.rb +38 -66
  38. data/bundler/lib/bundler/cli/issue.rb +8 -7
  39. data/bundler/lib/bundler/cli/list.rb +19 -11
  40. data/bundler/lib/bundler/cli/lock.rb +11 -4
  41. data/bundler/lib/bundler/cli/open.rb +14 -9
  42. data/bundler/lib/bundler/cli/outdated.rb +152 -121
  43. data/bundler/lib/bundler/cli/platform.rb +2 -2
  44. data/bundler/lib/bundler/cli/plugin.rb +19 -2
  45. data/bundler/lib/bundler/cli/pristine.rb +6 -1
  46. data/bundler/lib/bundler/cli/remove.rb +1 -2
  47. data/bundler/lib/bundler/cli/show.rb +3 -3
  48. data/bundler/lib/bundler/cli/update.rb +49 -18
  49. data/bundler/lib/bundler/cli/viz.rb +1 -1
  50. data/bundler/lib/bundler/cli.rb +269 -165
  51. data/bundler/lib/bundler/compact_index_client/cache.rb +7 -24
  52. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  53. data/bundler/lib/bundler/compact_index_client/updater.rb +58 -57
  54. data/bundler/lib/bundler/compact_index_client.rb +28 -18
  55. data/bundler/lib/bundler/constants.rb +1 -1
  56. data/bundler/lib/bundler/current_ruby.rb +26 -11
  57. data/bundler/lib/bundler/definition.rb +359 -441
  58. data/bundler/lib/bundler/dependency.rb +29 -71
  59. data/bundler/lib/bundler/deployment.rb +1 -1
  60. data/bundler/lib/bundler/digest.rb +71 -0
  61. data/bundler/lib/bundler/dsl.rb +84 -116
  62. data/bundler/lib/bundler/endpoint_specification.rb +20 -14
  63. data/bundler/lib/bundler/env.rb +10 -15
  64. data/bundler/lib/bundler/environment_preserver.rb +30 -3
  65. data/bundler/lib/bundler/errors.rb +31 -14
  66. data/bundler/lib/bundler/feature_flag.rb +13 -33
  67. data/bundler/lib/bundler/fetcher/base.rb +7 -9
  68. data/bundler/lib/bundler/fetcher/compact_index.rb +46 -39
  69. data/bundler/lib/bundler/fetcher/dependency.rb +2 -2
  70. data/bundler/lib/bundler/fetcher/downloader.rb +15 -12
  71. data/bundler/lib/bundler/fetcher/index.rb +4 -30
  72. data/bundler/lib/bundler/fetcher.rb +39 -41
  73. data/bundler/lib/bundler/force_platform.rb +18 -0
  74. data/bundler/lib/bundler/friendly_errors.rb +49 -54
  75. data/bundler/lib/bundler/gem_helper.rb +79 -43
  76. data/bundler/lib/bundler/gem_helpers.rb +44 -28
  77. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  78. data/bundler/lib/bundler/gem_version_promoter.rb +54 -99
  79. data/bundler/lib/bundler/graph.rb +5 -5
  80. data/bundler/lib/bundler/index.rb +14 -52
  81. data/bundler/lib/bundler/injector.rb +50 -16
  82. data/bundler/lib/bundler/inline.rb +28 -29
  83. data/bundler/lib/bundler/installer/gem_installer.rb +22 -23
  84. data/bundler/lib/bundler/installer/parallel_installer.rb +51 -51
  85. data/bundler/lib/bundler/installer/standalone.rb +62 -12
  86. data/bundler/lib/bundler/installer.rb +46 -97
  87. data/bundler/lib/bundler/lazy_specification.rb +88 -48
  88. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  89. data/bundler/lib/bundler/lockfile_parser.rb +30 -62
  90. data/bundler/{man → lib/bundler/man}/bundle-add.1 +29 -5
  91. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +22 -4
  92. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
  93. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  94. data/bundler/lib/bundler/man/bundle-cache.1 +61 -0
  95. data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +22 -15
  96. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  97. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +2 -2
  98. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  99. data/bundler/{man → lib/bundler/man}/bundle-config.1 +78 -60
  100. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +96 -85
  101. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  102. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  104. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +6 -6
  105. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +6 -6
  106. data/bundler/lib/bundler/man/bundle-gem.1 +105 -0
  107. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  108. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  109. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  110. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  111. data/bundler/{man → lib/bundler/man}/bundle-init.1 +6 -2
  112. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +3 -1
  113. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  114. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  115. data/bundler/{man → lib/bundler/man}/bundle-install.1 +42 -37
  116. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +42 -38
  117. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  118. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  119. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  120. data/bundler/{man → lib/bundler/man}/bundle-open.1 +22 -2
  121. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
  122. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
  123. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
  124. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  125. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  126. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  127. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  128. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  129. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  130. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  131. data/bundler/{man → lib/bundler/man}/bundle-update.1 +8 -8
  132. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +8 -7
  133. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  134. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  135. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  136. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  137. data/bundler/{man → lib/bundler/man}/bundle.1 +17 -12
  138. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
  139. data/bundler/lib/bundler/man/gemfile.5 +723 -0
  140. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +112 -95
  141. data/bundler/lib/bundler/man/index.txt +29 -0
  142. data/bundler/lib/bundler/match_metadata.rb +13 -0
  143. data/bundler/lib/bundler/match_platform.rb +1 -2
  144. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  145. data/bundler/lib/bundler/mirror.rb +10 -12
  146. data/bundler/lib/bundler/plugin/api/source.rb +29 -15
  147. data/bundler/lib/bundler/plugin/api.rb +1 -1
  148. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  149. data/bundler/lib/bundler/plugin/index.rb +31 -8
  150. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  151. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -9
  152. data/bundler/lib/bundler/plugin/installer.rb +35 -22
  153. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  154. data/bundler/lib/bundler/plugin.rb +102 -42
  155. data/bundler/lib/bundler/process_lock.rb +1 -1
  156. data/bundler/lib/bundler/remote_specification.rb +15 -8
  157. data/bundler/lib/bundler/resolver/base.rb +77 -0
  158. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  159. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  160. data/bundler/lib/bundler/resolver/package.rb +72 -0
  161. data/bundler/lib/bundler/resolver/root.rb +25 -0
  162. data/bundler/lib/bundler/resolver/spec_group.rb +49 -73
  163. data/bundler/lib/bundler/resolver.rb +343 -300
  164. data/bundler/lib/bundler/retry.rb +4 -4
  165. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  166. data/bundler/lib/bundler/ruby_version.rb +9 -37
  167. data/bundler/lib/bundler/rubygems_ext.rb +235 -92
  168. data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -21
  169. data/bundler/lib/bundler/rubygems_integration.rb +179 -515
  170. data/bundler/lib/bundler/runtime.rb +25 -40
  171. data/bundler/lib/bundler/self_manager.rb +168 -0
  172. data/bundler/lib/bundler/settings.rb +162 -118
  173. data/bundler/lib/bundler/setup.rb +11 -12
  174. data/bundler/lib/bundler/shared_helpers.rb +61 -102
  175. data/bundler/lib/bundler/similarity_detector.rb +3 -3
  176. data/bundler/lib/bundler/source/git/git_proxy.rb +257 -128
  177. data/bundler/lib/bundler/source/git.rb +84 -61
  178. data/bundler/lib/bundler/source/metadata.rb +9 -9
  179. data/bundler/lib/bundler/source/path/installer.rb +11 -32
  180. data/bundler/lib/bundler/source/path.rb +28 -17
  181. data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
  182. data/bundler/lib/bundler/source/rubygems.rb +171 -197
  183. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  184. data/bundler/lib/bundler/source.rb +30 -10
  185. data/bundler/lib/bundler/source_list.rb +112 -67
  186. data/bundler/lib/bundler/source_map.rb +71 -0
  187. data/bundler/lib/bundler/spec_set.rb +86 -72
  188. data/bundler/lib/bundler/stub_specification.rb +45 -37
  189. data/bundler/lib/bundler/templates/Executable +3 -5
  190. data/bundler/lib/bundler/templates/Executable.bundler +21 -17
  191. data/bundler/lib/bundler/templates/Executable.standalone +4 -4
  192. data/bundler/lib/bundler/templates/Gemfile +0 -2
  193. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  194. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  195. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  196. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +22 -2
  197. data/bundler/lib/bundler/templates/newgem/README.md.tt +13 -15
  198. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +33 -5
  199. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  200. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  201. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  202. data/bundler/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +2 -0
  203. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  204. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  205. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  206. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  207. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  208. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  209. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  210. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +36 -41
  211. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  212. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  213. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  214. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  215. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  216. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  217. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  218. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  219. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  220. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  221. data/bundler/lib/bundler/ui/shell.rb +39 -20
  222. data/bundler/lib/bundler/ui/silent.rb +21 -5
  223. data/bundler/lib/bundler/ui.rb +3 -3
  224. data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
  225. data/bundler/lib/bundler/vendor/.document +1 -0
  226. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  227. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  228. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  229. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  230. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  231. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  232. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1493 -425
  233. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  234. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  235. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  236. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  237. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  238. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  239. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  240. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  241. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  242. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +155 -0
  243. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  244. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  245. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  246. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  247. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  248. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  249. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  250. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  251. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  252. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -0
  253. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  254. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  255. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  256. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  257. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  258. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  259. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +25 -14
  260. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +20 -10
  261. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +34 -15
  262. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  263. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  264. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  265. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
  266. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  267. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  268. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  269. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  270. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  271. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  272. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  273. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  274. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +40 -6
  275. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  276. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  277. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  278. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +88 -13
  279. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  280. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  281. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
  282. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  283. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  284. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  285. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  286. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  287. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  288. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  289. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  290. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  291. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  292. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  293. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  294. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  295. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  296. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  297. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  298. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  299. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  300. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  301. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  302. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  303. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  304. data/bundler/lib/bundler/vendored_persistent.rb +2 -39
  305. data/bundler/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  306. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  307. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  308. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  309. data/bundler/lib/bundler/version.rb +5 -20
  310. data/bundler/lib/bundler/vlad.rb +2 -2
  311. data/bundler/lib/bundler/worker.rb +26 -15
  312. data/bundler/lib/bundler/yaml_serializer.rb +3 -4
  313. data/bundler/lib/bundler.rb +285 -183
  314. data/hide_lib_for_update/note.txt +0 -4
  315. data/lib/rubygems/available_set.rb +7 -8
  316. data/lib/rubygems/basic_specification.rb +44 -31
  317. data/lib/rubygems/bundler_version_finder.rb +28 -50
  318. data/lib/rubygems/command.rb +104 -46
  319. data/lib/rubygems/command_manager.rb +35 -16
  320. data/lib/rubygems/commands/build_command.rb +77 -26
  321. data/lib/rubygems/commands/cert_command.rb +78 -76
  322. data/lib/rubygems/commands/check_command.rb +20 -22
  323. data/lib/rubygems/commands/cleanup_command.rb +36 -32
  324. data/lib/rubygems/commands/contents_command.rb +16 -18
  325. data/lib/rubygems/commands/dependency_command.rb +39 -50
  326. data/lib/rubygems/commands/environment_command.rb +11 -13
  327. data/lib/rubygems/commands/fetch_command.rb +33 -16
  328. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  329. data/lib/rubygems/commands/help_command.rb +7 -7
  330. data/lib/rubygems/commands/info_command.rb +11 -6
  331. data/lib/rubygems/commands/install_command.rb +45 -79
  332. data/lib/rubygems/commands/list_command.rb +9 -8
  333. data/lib/rubygems/commands/lock_command.rb +7 -9
  334. data/lib/rubygems/commands/mirror_command.rb +3 -4
  335. data/lib/rubygems/commands/open_command.rb +11 -14
  336. data/lib/rubygems/commands/outdated_command.rb +5 -6
  337. data/lib/rubygems/commands/owner_command.rb +29 -22
  338. data/lib/rubygems/commands/pristine_command.rb +61 -51
  339. data/lib/rubygems/commands/push_command.rb +26 -63
  340. data/lib/rubygems/commands/query_command.rb +21 -337
  341. data/lib/rubygems/commands/rdoc_command.rb +26 -26
  342. data/lib/rubygems/commands/search_command.rb +8 -8
  343. data/lib/rubygems/commands/server_command.rb +16 -77
  344. data/lib/rubygems/commands/setup_command.rb +282 -241
  345. data/lib/rubygems/commands/signin_command.rb +9 -10
  346. data/lib/rubygems/commands/signout_command.rb +7 -9
  347. data/lib/rubygems/commands/sources_command.rb +42 -26
  348. data/lib/rubygems/commands/specification_command.rb +25 -20
  349. data/lib/rubygems/commands/stale_command.rb +3 -3
  350. data/lib/rubygems/commands/uninstall_command.rb +58 -49
  351. data/lib/rubygems/commands/unpack_command.rb +15 -44
  352. data/lib/rubygems/commands/update_command.rb +133 -81
  353. data/lib/rubygems/commands/which_command.rb +8 -11
  354. data/lib/rubygems/commands/yank_command.rb +22 -19
  355. data/lib/rubygems/compatibility.rb +7 -5
  356. data/lib/rubygems/config_file.rb +101 -47
  357. data/lib/rubygems/core_ext/kernel_gem.rb +8 -12
  358. data/lib/rubygems/core_ext/kernel_require.rb +124 -83
  359. data/lib/rubygems/core_ext/kernel_warn.rb +35 -30
  360. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  361. data/lib/rubygems/defaults.rb +131 -55
  362. data/lib/rubygems/dependency.rb +44 -27
  363. data/lib/rubygems/dependency_installer.rb +49 -205
  364. data/lib/rubygems/dependency_list.rb +24 -25
  365. data/lib/rubygems/deprecate.rb +106 -12
  366. data/lib/rubygems/doctor.rb +22 -22
  367. data/lib/rubygems/errors.rb +8 -14
  368. data/lib/rubygems/exceptions.rb +35 -33
  369. data/lib/rubygems/ext/build_error.rb +2 -0
  370. data/lib/rubygems/ext/builder.rb +71 -95
  371. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  372. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  373. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  374. data/lib/rubygems/ext/configure_builder.rb +5 -8
  375. data/lib/rubygems/ext/ext_conf_builder.rb +45 -65
  376. data/lib/rubygems/ext/rake_builder.rb +7 -10
  377. data/lib/rubygems/ext.rb +7 -6
  378. data/lib/rubygems/gem_runner.rb +15 -26
  379. data/lib/rubygems/gemcutter_utilities.rb +179 -54
  380. data/lib/rubygems/indexer.rb +38 -53
  381. data/lib/rubygems/install_default_message.rb +2 -2
  382. data/lib/rubygems/install_message.rb +2 -2
  383. data/lib/rubygems/install_update_options.rb +73 -64
  384. data/lib/rubygems/installer.rb +230 -173
  385. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  386. data/lib/rubygems/local_remote_options.rb +22 -24
  387. data/lib/rubygems/mock_gem_ui.rb +2 -5
  388. data/lib/rubygems/name_tuple.rb +10 -14
  389. data/lib/rubygems/openssl.rb +7 -0
  390. data/lib/rubygems/optparse/.document +1 -0
  391. data/lib/rubygems/optparse/COPYING +56 -0
  392. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  393. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  394. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  395. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  396. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  397. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  398. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  399. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  400. data/lib/rubygems/optparse/lib/optparse.rb +2308 -0
  401. data/lib/rubygems/optparse.rb +3 -0
  402. data/lib/rubygems/package/digest_io.rb +0 -2
  403. data/lib/rubygems/package/file_source.rb +2 -4
  404. data/lib/rubygems/package/io_source.rb +4 -2
  405. data/lib/rubygems/package/old.rb +9 -11
  406. data/lib/rubygems/package/tar_header.rb +73 -66
  407. data/lib/rubygems/package/tar_reader/entry.rb +8 -9
  408. data/lib/rubygems/package/tar_reader.rb +16 -13
  409. data/lib/rubygems/package/tar_writer.rb +12 -22
  410. data/lib/rubygems/package.rb +142 -125
  411. data/lib/rubygems/package_task.rb +5 -11
  412. data/lib/rubygems/path_support.rb +3 -8
  413. data/lib/rubygems/platform.rb +113 -73
  414. data/lib/rubygems/psych_tree.rb +1 -1
  415. data/lib/rubygems/query_utils.rb +351 -0
  416. data/lib/rubygems/rdoc.rb +4 -16
  417. data/lib/rubygems/remote_fetcher.rb +64 -136
  418. data/lib/rubygems/request/connection_pools.rb +7 -11
  419. data/lib/rubygems/request/http_pool.rb +2 -3
  420. data/lib/rubygems/request.rb +31 -32
  421. data/lib/rubygems/request_set/gem_dependency_api.rb +135 -136
  422. data/lib/rubygems/request_set/lockfile/parser.rb +28 -28
  423. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -5
  424. data/lib/rubygems/request_set/lockfile.rb +21 -20
  425. data/lib/rubygems/request_set.rb +30 -43
  426. data/lib/rubygems/requirement.rb +42 -64
  427. data/lib/rubygems/resolver/activation_request.rb +29 -53
  428. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  429. data/lib/rubygems/resolver/api_set.rb +33 -26
  430. data/lib/rubygems/resolver/api_specification.rb +30 -16
  431. data/lib/rubygems/resolver/best_set.rb +9 -11
  432. data/lib/rubygems/resolver/composed_set.rb +3 -5
  433. data/lib/rubygems/resolver/conflict.rb +12 -19
  434. data/lib/rubygems/resolver/current_set.rb +0 -2
  435. data/lib/rubygems/resolver/dependency_request.rb +3 -5
  436. data/lib/rubygems/resolver/git_set.rb +2 -4
  437. data/lib/rubygems/resolver/git_specification.rb +6 -8
  438. data/lib/rubygems/resolver/index_set.rb +4 -6
  439. data/lib/rubygems/resolver/index_specification.rb +38 -7
  440. data/lib/rubygems/resolver/installed_specification.rb +4 -6
  441. data/lib/rubygems/resolver/installer_set.rb +69 -27
  442. data/lib/rubygems/resolver/local_specification.rb +2 -4
  443. data/lib/rubygems/resolver/lock_set.rb +7 -9
  444. data/lib/rubygems/resolver/lock_specification.rb +6 -8
  445. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  446. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  447. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  448. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  449. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  450. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  451. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  452. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  453. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  454. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  455. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  456. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  457. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +42 -9
  458. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +82 -8
  459. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  460. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  461. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  462. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  463. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  464. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  465. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  466. data/lib/rubygems/resolver/molinillo.rb +1 -1
  467. data/lib/rubygems/resolver/requirement_list.rb +0 -1
  468. data/lib/rubygems/resolver/set.rb +0 -3
  469. data/lib/rubygems/resolver/source_set.rb +0 -2
  470. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  471. data/lib/rubygems/resolver/specification.rb +14 -3
  472. data/lib/rubygems/resolver/vendor_set.rb +1 -3
  473. data/lib/rubygems/resolver/vendor_specification.rb +3 -5
  474. data/lib/rubygems/resolver.rb +58 -54
  475. data/lib/rubygems/s3_uri_signer.rb +175 -0
  476. data/lib/rubygems/safe_yaml.rb +14 -16
  477. data/lib/rubygems/security/policies.rb +47 -47
  478. data/lib/rubygems/security/policy.rb +25 -29
  479. data/lib/rubygems/security/signer.rb +16 -18
  480. data/lib/rubygems/security/trust_dir.rb +5 -6
  481. data/lib/rubygems/security.rb +90 -69
  482. data/lib/rubygems/security_option.rb +7 -8
  483. data/lib/rubygems/source/git.rb +30 -30
  484. data/lib/rubygems/source/installed.rb +1 -3
  485. data/lib/rubygems/source/local.rb +4 -6
  486. data/lib/rubygems/source/lock.rb +0 -2
  487. data/lib/rubygems/source/specific_file.rb +1 -3
  488. data/lib/rubygems/source/vendor.rb +0 -2
  489. data/lib/rubygems/source.rb +50 -38
  490. data/lib/rubygems/source_list.rb +9 -13
  491. data/lib/rubygems/spec_fetcher.rb +52 -64
  492. data/lib/rubygems/specification.rb +432 -463
  493. data/lib/rubygems/specification_policy.rb +185 -87
  494. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  495. data/lib/rubygems/stub_specification.rb +24 -29
  496. data/lib/rubygems/text.rb +21 -21
  497. data/lib/rubygems/tsort/.document +1 -0
  498. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  499. data/lib/rubygems/tsort/lib/tsort.rb +452 -0
  500. data/lib/rubygems/tsort.rb +3 -0
  501. data/lib/rubygems/uninstaller.rb +110 -57
  502. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  503. data/lib/rubygems/update_suggestion.rb +69 -0
  504. data/lib/rubygems/uri.rb +126 -0
  505. data/lib/rubygems/uri_formatter.rb +2 -4
  506. data/lib/rubygems/user_interaction.rb +46 -49
  507. data/lib/rubygems/util/licenses.rb +511 -404
  508. data/lib/rubygems/util.rb +40 -56
  509. data/lib/rubygems/validator.rb +15 -37
  510. data/lib/rubygems/version.rb +48 -29
  511. data/lib/rubygems/version_option.rb +11 -5
  512. data/lib/rubygems.rb +305 -332
  513. data/rubygems-update.gemspec +6 -13
  514. data/setup.rb +11 -22
  515. data/test/rubygems/alternate_cert.pem +14 -14
  516. data/test/rubygems/alternate_cert_32.pem +15 -15
  517. data/test/rubygems/alternate_key.pem +25 -25
  518. data/test/rubygems/bundler_test_gem.rb +419 -0
  519. data/test/rubygems/ca_cert.pem +74 -65
  520. data/test/rubygems/child_cert.pem +15 -16
  521. data/test/rubygems/child_cert_32.pem +15 -16
  522. data/test/rubygems/child_key.pem +25 -25
  523. data/test/rubygems/client.pem +103 -45
  524. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  525. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  526. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  527. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  528. data/test/rubygems/encrypted_private_key.pem +26 -26
  529. data/test/rubygems/expired_cert.pem +15 -15
  530. data/test/rubygems/future_cert.pem +15 -15
  531. data/test/rubygems/future_cert_32.pem +15 -15
  532. data/test/rubygems/grandchild_cert.pem +15 -16
  533. data/test/rubygems/grandchild_cert_32.pem +15 -16
  534. data/test/rubygems/grandchild_key.pem +25 -25
  535. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +505 -507
  536. data/{lib → test}/rubygems/installer_test_case.rb +115 -53
  537. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  538. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  539. data/test/rubygems/invalid_key.pem +25 -25
  540. data/test/rubygems/invalid_signer_cert.pem +15 -15
  541. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  542. data/test/rubygems/invalidchild_cert.pem +15 -16
  543. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  544. data/test/rubygems/invalidchild_key.pem +25 -25
  545. data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
  546. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  547. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  548. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  549. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  550. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  551. data/test/rubygems/private_ec_key.pem +9 -0
  552. data/test/rubygems/private_key.pem +25 -25
  553. data/test/rubygems/public_cert.pem +16 -16
  554. data/test/rubygems/public_cert_32.pem +15 -15
  555. data/test/rubygems/public_key.pem +7 -7
  556. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  557. data/test/rubygems/rubygems_plugin.rb +2 -4
  558. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  559. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  560. data/test/rubygems/ssl_cert.pem +78 -17
  561. data/test/rubygems/ssl_key.pem +25 -13
  562. data/test/rubygems/test_bundled_ca.rb +44 -47
  563. data/test/rubygems/test_config.rb +5 -7
  564. data/test/rubygems/test_deprecate.rb +90 -10
  565. data/test/rubygems/test_exit.rb +17 -0
  566. data/test/rubygems/test_gem.rb +679 -885
  567. data/test/rubygems/test_gem_available_set.rb +24 -25
  568. data/test/rubygems/test_gem_bundler_version_finder.rb +42 -42
  569. data/test/rubygems/test_gem_command.rb +186 -39
  570. data/test/rubygems/test_gem_command_manager.rb +166 -36
  571. data/test/rubygems/test_gem_commands_build_command.rb +436 -52
  572. data/test/rubygems/test_gem_commands_cert_command.rb +193 -124
  573. data/test/rubygems/test_gem_commands_check_command.rb +9 -11
  574. data/test/rubygems/test_gem_commands_cleanup_command.rb +87 -62
  575. data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
  576. data/test/rubygems/test_gem_commands_dependency_command.rb +39 -41
  577. data/test/rubygems/test_gem_commands_environment_command.rb +60 -48
  578. data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
  579. data/test/rubygems/test_gem_commands_generate_index_command.rb +39 -9
  580. data/test/rubygems/test_gem_commands_help_command.rb +34 -19
  581. data/test/rubygems/test_gem_commands_info_command.rb +34 -9
  582. data/test/rubygems/test_gem_commands_install_command.rb +600 -173
  583. data/test/rubygems/test_gem_commands_list_command.rb +5 -7
  584. data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
  585. data/test/rubygems/test_gem_commands_mirror.rb +3 -4
  586. data/test/rubygems/test_gem_commands_open_command.rb +16 -19
  587. data/test/rubygems/test_gem_commands_outdated_command.rb +24 -7
  588. data/test/rubygems/test_gem_commands_owner_command.rb +183 -49
  589. data/test/rubygems/test_gem_commands_pristine_command.rb +222 -89
  590. data/test/rubygems/test_gem_commands_push_command.rb +178 -69
  591. data/test/rubygems/test_gem_commands_query_command.rb +114 -89
  592. data/test/rubygems/test_gem_commands_search_command.rb +2 -4
  593. data/test/rubygems/test_gem_commands_server_command.rb +6 -46
  594. data/test/rubygems/test_gem_commands_setup_command.rb +334 -157
  595. data/test/rubygems/test_gem_commands_signin_command.rb +187 -27
  596. data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
  597. data/test/rubygems/test_gem_commands_sources_command.rb +266 -33
  598. data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
  599. data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
  600. data/test/rubygems/test_gem_commands_uninstall_command.rb +230 -95
  601. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
  602. data/test/rubygems/test_gem_commands_update_command.rb +412 -102
  603. data/test/rubygems/test_gem_commands_which_command.rb +12 -14
  604. data/test/rubygems/test_gem_commands_yank_command.rb +107 -26
  605. data/test/rubygems/test_gem_config_file.rb +120 -96
  606. data/test/rubygems/test_gem_dependency.rb +94 -86
  607. data/test/rubygems/test_gem_dependency_installer.rb +305 -388
  608. data/test/rubygems/test_gem_dependency_list.rb +66 -61
  609. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
  610. data/test/rubygems/test_gem_doctor.rb +73 -47
  611. data/test/rubygems/test_gem_ext_builder.rb +116 -106
  612. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  613. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +8 -0
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +233 -0
  615. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
  616. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
  617. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +1 -0
  618. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  619. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +233 -0
  620. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  621. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  622. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
  623. data/test/rubygems/test_gem_ext_cargo_builder.rb +166 -0
  624. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  625. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
  626. data/test/rubygems/test_gem_ext_cmake_builder.rb +32 -37
  627. data/test/rubygems/test_gem_ext_configure_builder.rb +23 -31
  628. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +75 -79
  629. data/test/rubygems/test_gem_ext_rake_builder.rb +49 -30
  630. data/test/rubygems/test_gem_gem_runner.rb +52 -7
  631. data/test/rubygems/test_gem_gemcutter_utilities.rb +91 -76
  632. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
  633. data/test/rubygems/test_gem_indexer.rb +120 -105
  634. data/test/rubygems/test_gem_install_update_options.rb +57 -33
  635. data/test/rubygems/test_gem_installer.rb +1230 -644
  636. data/test/rubygems/test_gem_local_remote_options.rb +11 -13
  637. data/test/rubygems/test_gem_name_tuple.rb +4 -6
  638. data/test/rubygems/test_gem_package.rb +396 -266
  639. data/test/rubygems/test_gem_package_old.rb +57 -56
  640. data/test/rubygems/test_gem_package_tar_header.rb +108 -50
  641. data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
  642. data/test/rubygems/test_gem_package_tar_reader_entry.rb +77 -20
  643. data/test/rubygems/test_gem_package_tar_writer.rb +107 -101
  644. data/test/rubygems/test_gem_package_task.rb +58 -25
  645. data/test/rubygems/test_gem_path_support.rb +29 -29
  646. data/test/rubygems/test_gem_platform.rb +388 -199
  647. data/test/rubygems/test_gem_rdoc.rb +20 -155
  648. data/test/rubygems/test_gem_remote_fetcher.rb +474 -303
  649. data/test/rubygems/test_gem_request.rb +128 -85
  650. data/test/rubygems/test_gem_request_connection_pools.rb +32 -32
  651. data/test/rubygems/test_gem_request_set.rb +186 -110
  652. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +280 -261
  653. data/test/rubygems/test_gem_request_set_lockfile.rb +93 -94
  654. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -69
  655. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -136
  656. data/test/rubygems/test_gem_requirement.rb +140 -55
  657. data/test/rubygems/test_gem_resolver.rb +224 -115
  658. data/test/rubygems/test_gem_resolver_activation_request.rb +9 -40
  659. data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
  660. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
  661. data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
  662. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
  663. data/test/rubygems/test_gem_resolver_conflict.rb +12 -18
  664. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
  665. data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
  666. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -22
  667. data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
  668. data/test/rubygems/test_gem_resolver_index_specification.rb +21 -18
  669. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -8
  670. data/test/rubygems/test_gem_resolver_installer_set.rb +106 -44
  671. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
  672. data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
  673. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
  674. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
  675. data/test/rubygems/test_gem_resolver_specification.rb +8 -10
  676. data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
  677. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
  678. data/test/rubygems/test_gem_security.rb +109 -79
  679. data/test/rubygems/test_gem_security_policy.rb +102 -107
  680. data/test/rubygems/test_gem_security_signer.rb +51 -52
  681. data/test/rubygems/test_gem_security_trust_dir.rb +14 -16
  682. data/test/rubygems/test_gem_silent_ui.rb +47 -42
  683. data/test/rubygems/test_gem_source.rb +66 -51
  684. data/test/rubygems/test_gem_source_fetch_problem.rb +17 -8
  685. data/test/rubygems/test_gem_source_git.rb +74 -74
  686. data/test/rubygems/test_gem_source_installed.rb +16 -18
  687. data/test/rubygems/test_gem_source_list.rb +5 -5
  688. data/test/rubygems/test_gem_source_local.rb +15 -16
  689. data/test/rubygems/test_gem_source_lock.rb +31 -33
  690. data/test/rubygems/test_gem_source_specific_file.rb +18 -19
  691. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  692. data/test/rubygems/test_gem_source_vendor.rb +13 -15
  693. data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
  694. data/test/rubygems/test_gem_specification.rb +1051 -1071
  695. data/test/rubygems/test_gem_stream_ui.rb +25 -23
  696. data/test/rubygems/test_gem_stub_specification.rb +39 -56
  697. data/test/rubygems/test_gem_text.rb +8 -3
  698. data/test/rubygems/test_gem_uninstaller.rb +269 -100
  699. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
  700. data/test/rubygems/test_gem_update_suggestion.rb +208 -0
  701. data/test/rubygems/test_gem_uri.rb +39 -0
  702. data/test/rubygems/test_gem_uri_formatter.rb +14 -16
  703. data/test/rubygems/test_gem_util.rb +46 -34
  704. data/test/rubygems/test_gem_validator.rb +12 -15
  705. data/test/rubygems/test_gem_version.rb +49 -34
  706. data/test/rubygems/test_gem_version_option.rb +16 -18
  707. data/test/rubygems/test_kernel.rb +61 -53
  708. data/test/rubygems/test_project_sanity.rb +20 -0
  709. data/test/rubygems/test_remote_fetch_error.rb +7 -8
  710. data/test/rubygems/test_require.rb +415 -121
  711. data/test/rubygems/test_rubygems.rb +74 -0
  712. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +74 -50
  713. data/test/rubygems/wrong_key_cert.pem +15 -15
  714. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  715. data/test/test_changelog_generator.rb +17 -0
  716. metadata +218 -244
  717. data/.rubocop.yml +0 -66
  718. data/.travis.yml +0 -38
  719. data/History.txt +0 -3965
  720. data/Rakefile +0 -372
  721. data/appveyor.yml +0 -43
  722. data/bundler/CODE_OF_CONDUCT.md +0 -42
  723. data/bundler/CONTRIBUTING.md +0 -17
  724. data/bundler/exe/bundle_ruby +0 -60
  725. data/bundler/lib/bundler/cli/package.rb +0 -49
  726. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  727. data/bundler/lib/bundler/dep_proxy.rb +0 -48
  728. data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
  729. data/bundler/lib/bundler/gemdeps.rb +0 -29
  730. data/bundler/lib/bundler/psyched_yaml.rb +0 -37
  731. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  732. data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  733. data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  734. data/bundler/lib/bundler/templates/gems.rb +0 -8
  735. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  736. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -7
  737. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  738. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  739. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
  740. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  741. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  742. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  743. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  744. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  745. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  746. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  747. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  748. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
  749. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
  750. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  751. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  752. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
  753. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  754. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
  755. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  756. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  757. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
  758. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  759. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  760. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  761. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  762. data/bundler/lib/bundler/version_ranges.rb +0 -76
  763. data/bundler/man/bundle-gem.1 +0 -80
  764. data/bundler/man/bundle-gem.ronn +0 -78
  765. data/bundler/man/bundle-package.1 +0 -55
  766. data/lib/rubygems/psych_additions.rb +0 -10
  767. data/lib/rubygems/server.rb +0 -878
  768. data/lib/rubygems/source_local.rb +0 -7
  769. data/lib/rubygems/source_specific_file.rb +0 -6
  770. data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  771. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  772. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  773. data/lib/rubygems/syck_hack.rb +0 -77
  774. data/lib/ubygems.rb +0 -14
  775. data/test/rubygems/bogussources.rb +0 -9
  776. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  777. data/test/rubygems/test_gem_server.rb +0 -607
  778. data/util/CL2notes +0 -55
  779. data/util/ci +0 -77
  780. data/util/create_certs.rb +0 -171
  781. data/util/create_encrypted_key.rb +0 -16
  782. data/util/generate_spdx_license_list.rb +0 -61
  783. data/util/patch_with_prs.rb +0 -77
  784. data/util/rubocop +0 -8
  785. data/util/update_bundled_ca_certificates.rb +0 -139
  786. data/util/update_changelog.rb +0 -67
  787. /data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
  788. /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  789. /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  790. /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  791. /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  792. /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  793. /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  794. /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  795. /data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
@@ -1,21 +1,15 @@
1
1
  # frozen_string_literal: true
2
- require 'rubygems/test_case'
3
-
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
2
+ require_relative "helper"
3
+
4
+ require "webrick"
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
- require 'rubygems/remote_fetcher'
17
- require 'rubygems/package'
18
- require 'minitest/mock'
11
+ require "rubygems/remote_fetcher"
12
+ require "rubygems/package"
19
13
 
20
14
  # = Testing Proxy Settings
21
15
  #
@@ -32,7 +26,6 @@ require 'minitest/mock'
32
26
  # proxy is configured.
33
27
 
34
28
  class TestGemRemoteFetcher < Gem::TestCase
35
-
36
29
  include Gem::DefaultUserInteraction
37
30
 
38
31
  SERVER_DATA = <<-EOY.freeze
@@ -53,7 +46,6 @@ gems:
53
46
  homepage: http://rake.rubyforge.org
54
47
  description: Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax.
55
48
  autorequire:
56
- default_executable: rake
57
49
  bindir: bin
58
50
  has_rdoc: true
59
51
  required_ruby_version: !ruby/object:Gem::Version::Requirement
@@ -77,14 +69,12 @@ gems:
77
69
  dependencies: []
78
70
  EOY
79
71
 
80
- PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, '0.4.2')
81
-
82
- DIR = File.expand_path(File.dirname(__FILE__))
72
+ PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, "0.4.2")
83
73
 
84
74
  # Generated via:
85
75
  # x = OpenSSL::PKey::DH.new(2048) # wait a while...
86
76
  # x.to_s => pem
87
- TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
77
+ TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_END_OF_PEM_
88
78
  -----BEGIN DH PARAMETERS-----
89
79
  MIIBCAKCAQEA3Ze2EHSfYkZLUn557torAmjBgPsqzbodaRaGZtgK1gEU+9nNJaFV
90
80
  G1JKhmGUiEDyIW7idsBpe4sX/Wqjnp48Lr8IeI/SlEzLdoGpf05iRYXC8Cm9o8aM
@@ -93,7 +83,7 @@ cfmVgoSEAo9YLBpzoji2jHkO7Q5IPt4zxbTdlmmGFLc/GO9q7LGHhC+rcMcNTGsM
93
83
  NP0fuvVAIB158VnQ0liHSwcl6+9vE1mL0Jo/qEXQxl0+UdKDjaGfTsn6HIrwTnmJ
94
84
  PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
95
85
  -----END DH PARAMETERS-----
96
- _end_of_pem_
86
+ _END_OF_PEM_
97
87
 
98
88
  def setup
99
89
  @proxies = %w[https_proxy http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
@@ -101,24 +91,24 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
101
91
  @proxies.each {|k| ENV[k] = nil }
102
92
 
103
93
  super
104
- self.class.start_servers
105
- self.class.enable_yaml = true
106
- self.class.enable_zip = false
94
+ start_servers
95
+ self.enable_yaml = true
96
+ self.enable_zip = false
107
97
 
108
- base_server_uri = "http://localhost:#{self.class.normal_server_port}"
109
- @proxy_uri = "http://localhost:#{self.class.proxy_server_port}"
98
+ base_server_uri = "http://localhost:#{normal_server_port}"
99
+ @proxy_uri = "http://localhost:#{proxy_server_port}"
110
100
 
111
101
  @server_uri = base_server_uri + "/yaml"
112
102
  @server_z_uri = base_server_uri + "/yaml.Z"
113
103
 
114
- # REFACTOR: copied from test_gem_dependency_installer.rb
115
- @gems_dir = File.join @tempdir, 'gems'
116
104
  @cache_dir = File.join @gemhome, "cache"
117
- FileUtils.mkdir @gems_dir
118
105
 
119
106
  # TODO: why does the remote fetcher need it written to disk?
120
- @a1, @a1_gem = util_gem 'a', '1' do |s| s.executables << 'a_bin' end
121
- @a1.loaded_from = File.join(@gemhome, 'specifications', @a1.full_name)
107
+ @a1, @a1_gem = util_gem "a", "1" do |s|
108
+ s.executables << "a_bin"
109
+ end
110
+
111
+ @a1.loaded_from = File.join(@gemhome, "specifications", @a1.full_name)
122
112
 
123
113
  Gem::RemoteFetcher.fetcher = nil
124
114
  @stub_ui = Gem::MockGemUi.new
@@ -127,7 +117,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
127
117
 
128
118
  def teardown
129
119
  @fetcher.close_all
130
- self.class.stop_servers
120
+ stop_servers
131
121
  super
132
122
  Gem.configuration[:http_proxy] = nil
133
123
  @proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
@@ -140,7 +130,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
140
130
  end
141
131
 
142
132
  def test_self_fetcher_with_proxy
143
- proxy_uri = 'http://proxy.example.com'
133
+ proxy_uri = "http://proxy.example.com"
144
134
  Gem.configuration[:http_proxy] = proxy_uri
145
135
  Gem::RemoteFetcher.fetcher = nil
146
136
 
@@ -151,63 +141,64 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
151
141
  assert_equal proxy_uri, fetcher.instance_variable_get(:@proxy).to_s
152
142
  end
153
143
 
154
- def test_fetch_size_bad_uri
155
- fetcher = Gem::RemoteFetcher.new nil
156
- @fetcher = fetcher
157
-
158
- e = assert_raises ArgumentError do
159
- fetcher.fetch_size 'gems.example.com/yaml'
160
- end
161
-
162
- assert_equal 'uri scheme is invalid: nil', e.message
163
- end
164
-
165
- def test_fetch_size_socket_error
144
+ def test_fetch_path_bad_uri
166
145
  fetcher = Gem::RemoteFetcher.new nil
167
146
  @fetcher = fetcher
168
- def fetcher.request(uri, request_class, last_modified = nil)
169
- raise SocketError, "oops"
170
- end
171
147
 
172
- uri = 'http://gems.example.com/yaml'
173
- e = assert_raises Gem::RemoteFetcher::FetchError do
174
- fetcher.fetch_size uri
148
+ e = assert_raise ArgumentError do
149
+ @fetcher.fetch_path("gems.example.com/yaml", nil, true)
175
150
  end
176
151
 
177
- assert_equal "SocketError: oops (#{uri})", e.message
152
+ assert_equal "uri scheme is invalid: nil", e.message
178
153
  end
179
154
 
180
155
  def test_no_proxy
181
156
  use_ui @stub_ui do
182
157
  assert_data_from_server @fetcher.fetch_path(@server_uri)
183
- assert_equal SERVER_DATA.size, @fetcher.fetch_size(@server_uri)
158
+ response = @fetcher.fetch_path(@server_uri, nil, true)
159
+ assert_equal SERVER_DATA.size, response["content-length"].to_i
184
160
  end
185
161
  end
186
162
 
187
163
  def test_cache_update_path
188
- uri = URI 'http://example/file'
189
- path = File.join @tempdir, 'file'
164
+ uri = URI "http://example/file"
165
+ path = File.join @tempdir, "file"
190
166
 
191
- fetcher = util_fuck_with_fetcher 'hello'
167
+ fetcher = util_fuck_with_fetcher "hello"
192
168
 
193
169
  data = fetcher.cache_update_path uri, path
194
170
 
195
- assert_equal 'hello', data
171
+ assert_equal "hello", data
196
172
 
197
- assert_equal 'hello', File.read(path)
173
+ assert_equal "hello", File.read(path)
174
+ end
175
+
176
+ def test_cache_update_path_with_utf8_internal_encoding
177
+ with_internal_encoding("UTF-8") do
178
+ uri = URI "http://example/file"
179
+ path = File.join @tempdir, "file"
180
+ data = String.new("\xC8").force_encoding(Encoding::BINARY)
181
+
182
+ fetcher = util_fuck_with_fetcher data
183
+
184
+ written_data = fetcher.cache_update_path uri, path
185
+
186
+ assert_equal data, written_data
187
+ assert_equal data, File.binread(path)
188
+ end
198
189
  end
199
190
 
200
191
  def test_cache_update_path_no_update
201
- uri = URI 'http://example/file'
202
- path = File.join @tempdir, 'file'
192
+ uri = URI "http://example/file"
193
+ path = File.join @tempdir, "file"
203
194
 
204
- fetcher = util_fuck_with_fetcher 'hello'
195
+ fetcher = util_fuck_with_fetcher "hello"
205
196
 
206
197
  data = fetcher.cache_update_path uri, path, false
207
198
 
208
- assert_equal 'hello', data
199
+ assert_equal "hello", data
209
200
 
210
- refute_path_exists path
201
+ assert_path_not_exist path
211
202
  end
212
203
 
213
204
  def util_fuck_with_fetcher(data, blow = false)
@@ -228,7 +219,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
228
219
  @test_data
229
220
  end
230
221
 
231
- raise Gem::RemoteFetcher::FetchError.new("haha!", nil)
222
+ raise Gem::RemoteFetcher::FetchError.new("haha!", "")
232
223
  end
233
224
  end
234
225
 
@@ -237,14 +228,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
237
228
 
238
229
  def test_download
239
230
  a1_data = nil
240
- File.open @a1_gem, 'rb' do |fp|
231
+ File.open @a1_gem, "rb" do |fp|
241
232
  a1_data = fp.read
242
233
  end
243
234
 
244
235
  fetcher = util_fuck_with_fetcher a1_data
245
236
 
246
237
  a1_cache_gem = @a1.cache_file
247
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://gems.example.com')
238
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://gems.example.com")
248
239
  assert_equal("http://gems.example.com/gems/a-1.gem",
249
240
  fetcher.instance_variable_get(:@test_arg).to_s)
250
241
  assert File.exist?(a1_cache_gem)
@@ -252,29 +243,59 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
252
243
 
253
244
  def test_download_with_auth
254
245
  a1_data = nil
255
- File.open @a1_gem, 'rb' do |fp|
246
+ File.open @a1_gem, "rb" do |fp|
256
247
  a1_data = fp.read
257
248
  end
258
249
 
259
250
  fetcher = util_fuck_with_fetcher a1_data
260
251
 
261
252
  a1_cache_gem = @a1.cache_file
262
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://user:password@gems.example.com')
253
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:password@gems.example.com")
263
254
  assert_equal("http://user:password@gems.example.com/gems/a-1.gem",
264
255
  fetcher.instance_variable_get(:@test_arg).to_s)
265
256
  assert File.exist?(a1_cache_gem)
266
257
  end
267
258
 
259
+ def test_download_with_token
260
+ a1_data = nil
261
+ File.open @a1_gem, "rb" do |fp|
262
+ a1_data = fp.read
263
+ end
264
+
265
+ fetcher = util_fuck_with_fetcher a1_data
266
+
267
+ a1_cache_gem = @a1.cache_file
268
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://token@gems.example.com")
269
+ assert_equal("http://token@gems.example.com/gems/a-1.gem",
270
+ fetcher.instance_variable_get(:@test_arg).to_s)
271
+ assert File.exist?(a1_cache_gem)
272
+ end
273
+
274
+ def test_download_with_x_oauth_basic
275
+ a1_data = nil
276
+ File.open @a1_gem, "rb" do |fp|
277
+ a1_data = fp.read
278
+ end
279
+
280
+ fetcher = util_fuck_with_fetcher a1_data
281
+
282
+ a1_cache_gem = @a1.cache_file
283
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://token:x-oauth-basic@gems.example.com")
284
+ assert_equal("http://token:x-oauth-basic@gems.example.com/gems/a-1.gem",
285
+ fetcher.instance_variable_get(:@test_arg).to_s)
286
+ assert File.exist?(a1_cache_gem)
287
+ end
288
+
268
289
  def test_download_with_encoded_auth
269
290
  a1_data = nil
270
- File.open @a1_gem, 'rb' do |fp|
291
+ File.open @a1_gem, "rb" do |fp|
271
292
  a1_data = fp.read
272
293
  end
273
294
 
274
295
  fetcher = util_fuck_with_fetcher a1_data
275
296
 
276
297
  a1_cache_gem = @a1.cache_file
277
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://user:%25pas%25sword@gems.example.com')
298
+ assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:%25pas%25sword@gems.example.com")
278
299
  assert_equal("http://user:%25pas%25sword@gems.example.com/gems/a-1.gem",
279
300
  fetcher.instance_variable_get(:@test_arg).to_s)
280
301
  assert File.exist?(a1_cache_gem)
@@ -285,7 +306,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
285
306
 
286
307
  inst = Gem::RemoteFetcher.fetcher
287
308
 
288
- assert_equal @a1.cache_file, inst.download(@a1, 'http://gems.example.com')
309
+ assert_equal @a1.cache_file, inst.download(@a1, "http://gems.example.com")
289
310
  end
290
311
 
291
312
  def test_download_local
@@ -301,7 +322,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
301
322
  end
302
323
 
303
324
  def test_download_local_space
304
- space_path = File.join @tempdir, 'space path'
325
+ space_path = File.join @tempdir, "space path"
305
326
  FileUtils.mkdir space_path
306
327
  FileUtils.mv @a1_gem, space_path
307
328
  local_path = File.join space_path, @a1.file_name
@@ -315,17 +336,17 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
315
336
  end
316
337
 
317
338
  def test_download_install_dir
318
- a1_data = File.open @a1_gem, 'rb' do |fp|
339
+ a1_data = File.open @a1_gem, "rb" do |fp|
319
340
  fp.read
320
341
  end
321
342
 
322
343
  fetcher = util_fuck_with_fetcher a1_data
323
344
 
324
- install_dir = File.join @tempdir, 'more_gems'
345
+ install_dir = File.join @tempdir, "more_gems"
325
346
 
326
347
  a1_cache_gem = File.join install_dir, "cache", @a1.file_name
327
348
  FileUtils.mkdir_p(File.dirname(a1_cache_gem))
328
- actual = fetcher.download(@a1, 'http://gems.example.com', install_dir)
349
+ actual = fetcher.download(@a1, "http://gems.example.com", install_dir)
329
350
 
330
351
  assert_equal a1_cache_gem, actual
331
352
  assert_equal("http://gems.example.com/gems/a-1.gem",
@@ -340,6 +361,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
340
361
  local_path = File.join @tempdir, @a1.file_name
341
362
  inst = nil
342
363
  FileUtils.chmod 0555, @a1.cache_dir
364
+ FileUtils.mkdir_p File.join(Gem.user_dir, "cache") rescue nil
365
+ FileUtils.chmod 0555, File.join(Gem.user_dir, "cache")
343
366
 
344
367
  Dir.chdir @tempdir do
345
368
  inst = Gem::RemoteFetcher.fetcher
@@ -348,6 +371,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
348
371
  assert_equal(File.join(@tempdir, @a1.file_name),
349
372
  inst.download(@a1, local_path))
350
373
  ensure
374
+ FileUtils.chmod 0755, File.join(Gem.user_dir, "cache")
351
375
  FileUtils.chmod 0755, @a1.cache_dir
352
376
  end
353
377
 
@@ -356,7 +380,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
356
380
  FileUtils.chmod 0555, @gemhome
357
381
 
358
382
  fetcher = util_fuck_with_fetcher File.read(@a1_gem)
359
- fetcher.download(@a1, 'http://gems.example.com')
383
+ fetcher.download(@a1, "http://gems.example.com")
360
384
  a1_cache_gem = File.join Gem.user_dir, "cache", @a1.file_name
361
385
  assert File.exist? a1_cache_gem
362
386
  ensure
@@ -366,16 +390,16 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
366
390
  end
367
391
 
368
392
  def test_download_platform_legacy
369
- original_platform = 'old-platform'
393
+ original_platform = "old-platform"
370
394
 
371
- e1, e1_gem = util_gem 'e', '1' do |s|
395
+ e1, e1_gem = util_gem "e", "1" do |s|
372
396
  s.platform = Gem::Platform::CURRENT
373
397
  s.instance_variable_set :@original_platform, original_platform
374
398
  end
375
- e1.loaded_from = File.join(@gemhome, 'specifications', e1.full_name)
399
+ e1.loaded_from = File.join(@gemhome, "specifications", e1.full_name)
376
400
 
377
401
  e1_data = nil
378
- File.open e1_gem, 'rb' do |fp|
402
+ File.open e1_gem, "rb" do |fp|
379
403
  e1_data = fp.read
380
404
  end
381
405
 
@@ -383,7 +407,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
383
407
 
384
408
  e1_cache_gem = e1.cache_file
385
409
 
386
- assert_equal e1_cache_gem, fetcher.download(e1, 'http://gems.example.com')
410
+ assert_equal e1_cache_gem, fetcher.download(e1, "http://gems.example.com")
387
411
 
388
412
  assert_equal("http://gems.example.com/gems/#{e1.original_name}.gem",
389
413
  fetcher.instance_variable_get(:@test_arg).to_s)
@@ -410,15 +434,15 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
410
434
  def test_download_unsupported
411
435
  inst = Gem::RemoteFetcher.fetcher
412
436
 
413
- e = assert_raises ArgumentError do
414
- inst.download @a1, 'ftp://gems.rubyforge.org'
437
+ e = assert_raise ArgumentError do
438
+ inst.download @a1, "ftp://gems.rubyforge.org"
415
439
  end
416
440
 
417
- assert_equal 'unsupported URI scheme ftp', e.message
441
+ assert_equal "unsupported URI scheme ftp", e.message
418
442
  end
419
443
 
420
444
  def test_download_to_cache
421
- @a2, @a2_gem = util_gem 'a', '2'
445
+ @a2, @a2_gem = util_gem "a", "2"
422
446
 
423
447
  util_setup_spec_fetcher @a1, @a2
424
448
  @fetcher.instance_variable_set :@a1, @a1
@@ -434,7 +458,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
434
458
  end
435
459
  end
436
460
 
437
- gem = Gem::RemoteFetcher.fetcher.download_to_cache dep 'a'
461
+ gem = Gem::RemoteFetcher.fetcher.download_to_cache dep "a"
438
462
 
439
463
  assert_equal @a2.file_name, File.basename(gem)
440
464
  end
@@ -444,10 +468,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
444
468
  @fetcher = fetcher
445
469
 
446
470
  def fetcher.fetch_http(uri, mtime, head = nil)
447
- Gem::Util.gzip 'foo'
471
+ Gem::Util.gzip "foo"
448
472
  end
449
473
 
450
- assert_equal 'foo', fetcher.fetch_path(@uri + 'foo.gz')
474
+ assert_equal "foo", fetcher.fetch_path(@uri + "foo.gz")
451
475
  end
452
476
 
453
477
  def test_fetch_path_gzip_unmodified
@@ -458,7 +482,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
458
482
  nil
459
483
  end
460
484
 
461
- assert_nil fetcher.fetch_path(@uri + 'foo.gz', Time.at(0))
485
+ assert_nil fetcher.fetch_path(@uri + "foo.gz", Time.at(0))
462
486
  end
463
487
 
464
488
  def test_fetch_path_io_error
@@ -469,9 +493,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
469
493
  raise EOFError
470
494
  end
471
495
 
472
- url = 'http://example.com/uri'
496
+ url = "http://example.com/uri"
473
497
 
474
- e = assert_raises Gem::RemoteFetcher::FetchError do
498
+ e = assert_raise Gem::RemoteFetcher::FetchError do
475
499
  fetcher.fetch_path url
476
500
  end
477
501
 
@@ -487,9 +511,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
487
511
  raise SocketError
488
512
  end
489
513
 
490
- url = 'http://example.com/uri'
514
+ url = "http://example.com/uri"
491
515
 
492
- e = assert_raises Gem::RemoteFetcher::FetchError do
516
+ e = assert_raise Gem::RemoteFetcher::FetchError do
493
517
  fetcher.fetch_path url
494
518
  end
495
519
 
@@ -502,16 +526,54 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
502
526
  @fetcher = fetcher
503
527
 
504
528
  def fetcher.fetch_http(uri, mtime = nil, head = nil)
505
- raise Errno::ECONNREFUSED, 'connect(2)'
529
+ raise Errno::ECONNREFUSED, "connect(2)"
506
530
  end
507
531
 
508
- url = 'http://example.com/uri'
532
+ url = "http://example.com/uri"
509
533
 
510
- e = assert_raises Gem::RemoteFetcher::FetchError do
534
+ e = assert_raise Gem::RemoteFetcher::FetchError do
511
535
  fetcher.fetch_path url
512
536
  end
513
537
 
514
- assert_match %r|ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z|,
538
+ assert_match %r{ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z},
539
+ e.message
540
+ assert_equal url, e.uri
541
+ end
542
+
543
+ def test_fetch_path_timeout_error
544
+ fetcher = Gem::RemoteFetcher.new nil
545
+ @fetcher = fetcher
546
+
547
+ def fetcher.fetch_http(uri, mtime = nil, head = nil)
548
+ raise Timeout::Error, "timed out"
549
+ end
550
+
551
+ url = "http://example.com/uri"
552
+
553
+ e = assert_raise Gem::RemoteFetcher::FetchError do
554
+ fetcher.fetch_path url
555
+ end
556
+
557
+ assert_match %r{Timeout::Error: timed out \(#{Regexp.escape url}\)\z},
558
+ e.message
559
+ assert_equal url, e.uri
560
+ end
561
+
562
+ def test_fetch_path_getaddrinfo_error
563
+ fetcher = Gem::RemoteFetcher.new nil
564
+ @fetcher = fetcher
565
+
566
+ def fetcher.fetch_http(uri, mtime = nil, head = nil)
567
+ raise SocketError, "getaddrinfo: nodename nor servname provided"
568
+ end
569
+
570
+ url = "http://example.com/uri"
571
+
572
+ e = assert_raise Gem::RemoteFetcher::FetchError do
573
+ fetcher.fetch_path url
574
+ end
575
+
576
+ assert_match %r{SocketError: getaddrinfo: nodename nor servname provided \(#{Regexp.escape url}\)\z},
515
577
  e.message
516
578
  assert_equal url, e.uri
517
579
  end
@@ -524,9 +586,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
524
586
  raise OpenSSL::SSL::SSLError
525
587
  end
526
588
 
527
- url = 'http://example.com/uri'
589
+ url = "http://example.com/uri"
528
590
 
529
- e = assert_raises Gem::RemoteFetcher::FetchError do
591
+ e = assert_raise Gem::RemoteFetcher::FetchError do
530
592
  fetcher.fetch_path url
531
593
  end
532
594
 
@@ -547,7 +609,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
547
609
 
548
610
  def test_implicit_no_proxy
549
611
  use_ui @stub_ui do
550
- ENV['http_proxy'] = 'http://fakeurl:12345'
612
+ ENV["http_proxy"] = "http://fakeurl:12345"
551
613
  fetcher = Gem::RemoteFetcher.new :no_proxy
552
614
  @fetcher = fetcher
553
615
  assert_data_from_server fetcher.fetch_path(@server_uri)
@@ -556,7 +618,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
556
618
 
557
619
  def test_implicit_proxy
558
620
  use_ui @stub_ui do
559
- ENV['http_proxy'] = @proxy_uri
621
+ ENV["http_proxy"] = @proxy_uri
560
622
  fetcher = Gem::RemoteFetcher.new nil
561
623
  @fetcher = fetcher
562
624
  assert_data_from_proxy fetcher.fetch_path(@server_uri)
@@ -565,7 +627,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
565
627
 
566
628
  def test_implicit_upper_case_proxy
567
629
  use_ui @stub_ui do
568
- ENV['HTTP_PROXY'] = @proxy_uri
630
+ ENV["HTTP_PROXY"] = @proxy_uri
569
631
  fetcher = Gem::RemoteFetcher.new nil
570
632
  @fetcher = fetcher
571
633
  assert_data_from_proxy fetcher.fetch_path(@server_uri)
@@ -583,40 +645,40 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
583
645
  def test_fetch_http
584
646
  fetcher = Gem::RemoteFetcher.new nil
585
647
  @fetcher = fetcher
586
- url = 'http://gems.example.com/redirect'
648
+ url = "http://gems.example.com/redirect"
587
649
 
588
650
  def fetcher.request(uri, request_class, last_modified = nil)
589
- url = 'http://gems.example.com/redirect'
651
+ url = "http://gems.example.com/redirect"
590
652
  unless defined? @requested
591
653
  @requested = true
592
654
  res = Net::HTTPMovedPermanently.new nil, 301, nil
593
- res.add_field 'Location', url
655
+ res.add_field "Location", url
594
656
  res
595
657
  else
596
658
  res = Net::HTTPOK.new nil, 200, nil
597
- def res.body() 'real_path' end
659
+ def res.body() "real_path" end
598
660
  res
599
661
  end
600
662
  end
601
663
 
602
664
  data = fetcher.fetch_http URI.parse(url)
603
665
 
604
- assert_equal 'real_path', data
666
+ assert_equal "real_path", data
605
667
  end
606
668
 
607
669
  def test_fetch_http_redirects
608
670
  fetcher = Gem::RemoteFetcher.new nil
609
671
  @fetcher = fetcher
610
- url = 'http://gems.example.com/redirect'
672
+ url = "http://gems.example.com/redirect"
611
673
 
612
674
  def fetcher.request(uri, request_class, last_modified = nil)
613
- url = 'http://gems.example.com/redirect'
675
+ url = "http://gems.example.com/redirect"
614
676
  res = Net::HTTPMovedPermanently.new nil, 301, nil
615
- res.add_field 'Location', url
677
+ res.add_field "Location", url
616
678
  res
617
679
  end
618
680
 
619
- e = assert_raises Gem::RemoteFetcher::FetchError do
681
+ e = assert_raise Gem::RemoteFetcher::FetchError do
620
682
  fetcher.fetch_http URI.parse(url)
621
683
  end
622
684
 
@@ -626,14 +688,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
626
688
  def test_fetch_http_redirects_without_location
627
689
  fetcher = Gem::RemoteFetcher.new nil
628
690
  @fetcher = fetcher
629
- url = 'http://gems.example.com/redirect'
691
+ url = "http://gems.example.com/redirect"
630
692
 
631
693
  def fetcher.request(uri, request_class, last_modified = nil)
632
694
  res = Net::HTTPMovedPermanently.new nil, 301, nil
633
695
  res
634
696
  end
635
697
 
636
- e = assert_raises Gem::RemoteFetcher::FetchError do
698
+ e = assert_raise Gem::RemoteFetcher::FetchError do
637
699
  fetcher.fetch_http URI.parse(url)
638
700
  end
639
701
 
@@ -643,55 +705,182 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
643
705
  def test_fetch_http_with_additional_headers
644
706
  ENV["http_proxy"] = @proxy_uri
645
707
  ENV["no_proxy"] = URI::parse(@server_uri).host
646
- fetcher = Gem::RemoteFetcher.new nil, nil, {"X-Captain" => "murphy"}
708
+ fetcher = Gem::RemoteFetcher.new nil, nil, { "X-Captain" => "murphy" }
647
709
  @fetcher = fetcher
648
710
  assert_equal "murphy", fetcher.fetch_path(@server_uri)
649
711
  end
650
712
 
651
- def assert_fetch_s3(url)
713
+ def assert_fetch_s3(url, signature, token=nil, region="us-east-1", instance_profile_json=nil)
652
714
  fetcher = Gem::RemoteFetcher.new nil
653
715
  @fetcher = fetcher
654
716
  $fetched_uri = nil
717
+ $instance_profile = instance_profile_json
655
718
 
656
719
  def fetcher.request(uri, request_class, last_modified = nil)
657
720
  $fetched_uri = uri
658
721
  res = Net::HTTPOK.new nil, 200, nil
659
- def res.body() 'success' end
722
+ def res.body() "success" end
660
723
  res
661
724
  end
662
725
 
663
- def fetcher.s3_expiration
664
- 1395098371
726
+ def fetcher.s3_uri_signer(uri)
727
+ require "json"
728
+ s3_uri_signer = Gem::S3URISigner.new(uri)
729
+ def s3_uri_signer.ec2_metadata_credentials_json
730
+ JSON.parse($instance_profile)
731
+ end
732
+ # Running sign operation to make sure uri.query is not mutated
733
+ s3_uri_signer.sign
734
+ raise "URI query is not empty: #{uri.query}" unless uri.query.nil?
735
+ s3_uri_signer
665
736
  end
666
737
 
667
738
  data = fetcher.fetch_s3 URI.parse(url)
668
739
 
669
- assert_equal 'https://my-bucket.s3.amazonaws.com/gems/specs.4.8.gz?AWSAccessKeyId=testuser&Expires=1395098371&Signature=eUTr7NkpZEet%2BJySE%2BfH6qukroI%3D', $fetched_uri.to_s
670
- assert_equal 'success', data
740
+ assert_equal "https://my-bucket.s3.#{region}.amazonaws.com/gems/specs.4.8.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=testuser%2F20190624%2F#{region}%2Fs3%2Faws4_request&X-Amz-Date=20190624T050641Z&X-Amz-Expires=86400#{token ? "&X-Amz-Security-Token=" + token : ""}&X-Amz-SignedHeaders=host&X-Amz-Signature=#{signature}", $fetched_uri.to_s
741
+ assert_equal "success", data
671
742
  ensure
672
743
  $fetched_uri = nil
673
744
  end
674
745
 
675
746
  def test_fetch_s3_config_creds
676
747
  Gem.configuration[:s3_source] = {
677
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass'}
748
+ "my-bucket" => { :id => "testuser", :secret => "testpass" },
749
+ }
750
+ url = "s3://my-bucket/gems/specs.4.8.gz"
751
+ Time.stub :now, Time.at(1561353581) do
752
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
753
+ end
754
+ ensure
755
+ Gem.configuration[:s3_source] = nil
756
+ end
757
+
758
+ def test_fetch_s3_config_creds_with_region
759
+ Gem.configuration[:s3_source] = {
760
+ "my-bucket" => { :id => "testuser", :secret => "testpass", :region => "us-west-2" },
761
+ }
762
+ url = "s3://my-bucket/gems/specs.4.8.gz"
763
+ Time.stub :now, Time.at(1561353581) do
764
+ assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
765
+ end
766
+ ensure
767
+ Gem.configuration[:s3_source] = nil
768
+ end
769
+
770
+ def test_fetch_s3_config_creds_with_token
771
+ Gem.configuration[:s3_source] = {
772
+ "my-bucket" => { :id => "testuser", :secret => "testpass", :security_token => "testtoken" },
773
+ }
774
+ url = "s3://my-bucket/gems/specs.4.8.gz"
775
+ Time.stub :now, Time.at(1561353581) do
776
+ assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
777
+ end
778
+ ensure
779
+ Gem.configuration[:s3_source] = nil
780
+ end
781
+
782
+ def test_fetch_s3_env_creds
783
+ ENV["AWS_ACCESS_KEY_ID"] = "testuser"
784
+ ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
785
+ ENV["AWS_SESSION_TOKEN"] = nil
786
+ Gem.configuration[:s3_source] = {
787
+ "my-bucket" => { :provider => "env" },
788
+ }
789
+ url = "s3://my-bucket/gems/specs.4.8.gz"
790
+ Time.stub :now, Time.at(1561353581) do
791
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
792
+ end
793
+ ensure
794
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
795
+ Gem.configuration[:s3_source] = nil
796
+ end
797
+
798
+ def test_fetch_s3_env_creds_with_region
799
+ ENV["AWS_ACCESS_KEY_ID"] = "testuser"
800
+ ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
801
+ ENV["AWS_SESSION_TOKEN"] = nil
802
+ Gem.configuration[:s3_source] = {
803
+ "my-bucket" => { :provider => "env", :region => "us-west-2" },
678
804
  }
679
- url = 's3://my-bucket/gems/specs.4.8.gz'
680
- assert_fetch_s3 url
805
+ url = "s3://my-bucket/gems/specs.4.8.gz"
806
+ Time.stub :now, Time.at(1561353581) do
807
+ assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
808
+ end
681
809
  ensure
810
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
811
+ Gem.configuration[:s3_source] = nil
812
+ end
813
+
814
+ def test_fetch_s3_env_creds_with_token
815
+ ENV["AWS_ACCESS_KEY_ID"] = "testuser"
816
+ ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
817
+ ENV["AWS_SESSION_TOKEN"] = "testtoken"
818
+ Gem.configuration[:s3_source] = {
819
+ "my-bucket" => { :provider => "env" },
820
+ }
821
+ url = "s3://my-bucket/gems/specs.4.8.gz"
822
+ Time.stub :now, Time.at(1561353581) do
823
+ assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
824
+ end
825
+ ensure
826
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
682
827
  Gem.configuration[:s3_source] = nil
683
828
  end
684
829
 
685
830
  def test_fetch_s3_url_creds
686
- url = 's3://testuser:testpass@my-bucket/gems/specs.4.8.gz'
687
- assert_fetch_s3 url
831
+ url = "s3://testuser:testpass@my-bucket/gems/specs.4.8.gz"
832
+ Time.stub :now, Time.at(1561353581) do
833
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
834
+ end
835
+ end
836
+
837
+ def test_fetch_s3_instance_profile_creds
838
+ Gem.configuration[:s3_source] = {
839
+ "my-bucket" => { :provider => "instance_profile" },
840
+ }
841
+
842
+ url = "s3://my-bucket/gems/specs.4.8.gz"
843
+ Time.stub :now, Time.at(1561353581) do
844
+ assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b", nil, "us-east-1",
845
+ '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
846
+ end
847
+ ensure
848
+ Gem.configuration[:s3_source] = nil
849
+ end
850
+
851
+ def test_fetch_s3_instance_profile_creds_with_region
852
+ Gem.configuration[:s3_source] = {
853
+ "my-bucket" => { :provider => "instance_profile", :region => "us-west-2" },
854
+ }
855
+
856
+ url = "s3://my-bucket/gems/specs.4.8.gz"
857
+ Time.stub :now, Time.at(1561353581) do
858
+ assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2",
859
+ '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
860
+ end
861
+ ensure
862
+ Gem.configuration[:s3_source] = nil
863
+ end
864
+
865
+ def test_fetch_s3_instance_profile_creds_with_token
866
+ Gem.configuration[:s3_source] = {
867
+ "my-bucket" => { :provider => "instance_profile" },
868
+ }
869
+
870
+ url = "s3://my-bucket/gems/specs.4.8.gz"
871
+ Time.stub :now, Time.at(1561353581) do
872
+ assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken", "us-east-1",
873
+ '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass", "Token": "testtoken"}'
874
+ end
875
+ ensure
876
+ Gem.configuration[:s3_source] = nil
688
877
  end
689
878
 
690
879
  def refute_fetch_s3(url, expected_message)
691
880
  fetcher = Gem::RemoteFetcher.new nil
692
881
  @fetcher = fetcher
693
882
 
694
- e = assert_raises Gem::RemoteFetcher::FetchError do
883
+ e = assert_raise Gem::RemoteFetcher::FetchError do
695
884
  fetcher.fetch_s3 URI.parse(url)
696
885
  end
697
886
 
@@ -699,35 +888,35 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
699
888
  end
700
889
 
701
890
  def test_fetch_s3_no_source_key
702
- url = 's3://my-bucket/gems/specs.4.8.gz'
703
- refute_fetch_s3 url, 'no s3_source key exists in .gemrc'
891
+ url = "s3://my-bucket/gems/specs.4.8.gz"
892
+ refute_fetch_s3 url, "no s3_source key exists in .gemrc"
704
893
  end
705
894
 
706
895
  def test_fetch_s3_no_host
707
896
  Gem.configuration[:s3_source] = {
708
- 'my-bucket' => {:id => 'testuser', :secret => 'testpass'}
897
+ "my-bucket" => { :id => "testuser", :secret => "testpass" },
709
898
  }
710
899
 
711
- url = 's3://other-bucket/gems/specs.4.8.gz'
712
- refute_fetch_s3 url, 'no key for host other-bucket in s3_source in .gemrc'
900
+ url = "s3://other-bucket/gems/specs.4.8.gz"
901
+ refute_fetch_s3 url, "no key for host other-bucket in s3_source in .gemrc"
713
902
  ensure
714
903
  Gem.configuration[:s3_source] = nil
715
904
  end
716
905
 
717
906
  def test_fetch_s3_no_id
718
- Gem.configuration[:s3_source] = { 'my-bucket' => {:secret => 'testpass'} }
907
+ Gem.configuration[:s3_source] = { "my-bucket" => { :secret => "testpass" } }
719
908
 
720
- url = 's3://my-bucket/gems/specs.4.8.gz'
721
- refute_fetch_s3 url, 's3_source for my-bucket missing id or secret'
909
+ url = "s3://my-bucket/gems/specs.4.8.gz"
910
+ refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
722
911
  ensure
723
912
  Gem.configuration[:s3_source] = nil
724
913
  end
725
914
 
726
915
  def test_fetch_s3_no_secret
727
- Gem.configuration[:s3_source] = { 'my-bucket' => {:id => 'testuser'} }
916
+ Gem.configuration[:s3_source] = { "my-bucket" => { :id => "testuser" } }
728
917
 
729
- url = 's3://my-bucket/gems/specs.4.8.gz'
730
- refute_fetch_s3 url, 's3_source for my-bucket missing id or secret'
918
+ url = "s3://my-bucket/gems/specs.4.8.gz"
919
+ refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
731
920
  ensure
732
921
  Gem.configuration[:s3_source] = nil
733
922
  end
@@ -757,7 +946,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
757
946
  @fetcher = fetcher
758
947
 
759
948
  assert_throws :block_called do
760
- fetcher.request URI('http://example'), Net::HTTP::Get do |req|
949
+ fetcher.request URI("http://example"), Net::HTTP::Get do |req|
761
950
  assert_kind_of Net::HTTPGenericRequest, req
762
951
  throw :block_called
763
952
  end
@@ -766,7 +955,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
766
955
 
767
956
  def test_yaml_error_on_size
768
957
  use_ui @stub_ui do
769
- self.class.enable_yaml = false
958
+ self.enable_yaml = false
770
959
  fetcher = Gem::RemoteFetcher.new nil
771
960
  @fetcher = fetcher
772
961
  assert_error { fetcher.size }
@@ -774,22 +963,20 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
774
963
  end
775
964
 
776
965
  def test_ssl_connection
777
- ssl_server = self.class.start_ssl_server
778
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
966
+ ssl_server = start_ssl_server
967
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
779
968
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
780
969
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
781
970
  end
782
971
  end
783
972
 
784
973
  def test_ssl_client_cert_auth_connection
785
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
786
-
787
- ssl_server = self.class.start_ssl_server({
974
+ ssl_server = start_ssl_server({
788
975
  :SSLVerifyClient =>
789
- OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
976
+ OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
790
977
 
791
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
792
- temp_client_cert = File.join(DIR, 'client.pem')
978
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
979
+ temp_client_cert = File.join(__dir__, "client.pem")
793
980
 
794
981
  with_configured_fetcher(
795
982
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
@@ -799,48 +986,46 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
799
986
  end
800
987
 
801
988
  def test_do_not_allow_invalid_client_cert_auth_connection
802
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
803
-
804
- ssl_server = self.class.start_ssl_server({
989
+ ssl_server = start_ssl_server({
805
990
  :SSLVerifyClient =>
806
- OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
991
+ OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
807
992
 
808
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
809
- temp_client_cert = File.join(DIR, 'invalid_client.pem')
993
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
994
+ temp_client_cert = File.join(__dir__, "invalid_client.pem")
810
995
 
811
996
  with_configured_fetcher(
812
997
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
813
998
  ":ssl_client_cert: #{temp_client_cert}\n") do |fetcher|
814
- assert_raises Gem::RemoteFetcher::FetchError do
999
+ assert_raise Gem::RemoteFetcher::FetchError do
815
1000
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
816
1001
  end
817
1002
  end
818
1003
  end
819
1004
 
820
1005
  def test_do_not_allow_insecure_ssl_connection_by_default
821
- ssl_server = self.class.start_ssl_server
1006
+ ssl_server = start_ssl_server
822
1007
  with_configured_fetcher do |fetcher|
823
- assert_raises Gem::RemoteFetcher::FetchError do
1008
+ assert_raise Gem::RemoteFetcher::FetchError do
824
1009
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
825
1010
  end
826
1011
  end
827
1012
  end
828
1013
 
829
1014
  def test_ssl_connection_allow_verify_none
830
- ssl_server = self.class.start_ssl_server
1015
+ ssl_server = start_ssl_server
831
1016
  with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher|
832
1017
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
833
1018
  end
834
1019
  end
835
1020
 
836
1021
  def test_do_not_follow_insecure_redirect
837
- ssl_server = self.class.start_ssl_server
838
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
1022
+ ssl_server = start_ssl_server
1023
+ temp_ca_cert = File.join(__dir__, "ca_cert.pem")
839
1024
  expected_error_message =
840
1025
  "redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})"
841
1026
 
842
1027
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
843
- err = assert_raises Gem::RemoteFetcher::FetchError do
1028
+ err = assert_raise Gem::RemoteFetcher::FetchError do
844
1029
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri}")
845
1030
  end
846
1031
 
@@ -849,11 +1034,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
849
1034
  end
850
1035
 
851
1036
  def test_nil_ca_cert
852
- ssl_server = self.class.start_ssl_server
1037
+ ssl_server = start_ssl_server
853
1038
  temp_ca_cert = nil
854
1039
 
855
1040
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
856
- assert_raises Gem::RemoteFetcher::FetchError do
1041
+ assert_raise Gem::RemoteFetcher::FetchError do
857
1042
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}")
858
1043
  end
859
1044
  end
@@ -861,8 +1046,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
861
1046
 
862
1047
  def with_configured_fetcher(config_str = nil, &block)
863
1048
  if config_str
864
- temp_conf = File.join @tempdir, '.gemrc'
865
- File.open temp_conf, 'w' do |fp|
1049
+ temp_conf = File.join @tempdir, ".gemrc"
1050
+ File.open temp_conf, "w" do |fp|
866
1051
  fp.puts config_str
867
1052
  end
868
1053
  Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
@@ -899,157 +1084,143 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
899
1084
  end
900
1085
  end
901
1086
 
902
- class << self
903
- attr_reader :normal_server, :proxy_server
904
- attr_accessor :enable_zip, :enable_yaml
1087
+ private
1088
+
1089
+ attr_reader :normal_server, :proxy_server
1090
+ attr_accessor :enable_zip, :enable_yaml
1091
+
1092
+ def start_servers
1093
+ @normal_server ||= start_server(SERVER_DATA)
1094
+ @proxy_server ||= start_server(PROXY_DATA)
1095
+ @enable_yaml = true
1096
+ @enable_zip = false
1097
+ @ssl_server = nil
1098
+ @ssl_server_thread = nil
1099
+ end
905
1100
 
906
- def start_servers
907
- @normal_server ||= start_server(SERVER_DATA)
908
- @proxy_server ||= start_server(PROXY_DATA)
909
- @enable_yaml = true
910
- @enable_zip = false
1101
+ def stop_servers
1102
+ if @normal_server
1103
+ @normal_server.kill.join
1104
+ @normal_server = nil
1105
+ end
1106
+ if @proxy_server
1107
+ @proxy_server.kill.join
1108
+ @proxy_server = nil
1109
+ end
1110
+ if @ssl_server
1111
+ @ssl_server.stop
911
1112
  @ssl_server = nil
1113
+ end
1114
+ if @ssl_server_thread
1115
+ @ssl_server_thread.kill.join
912
1116
  @ssl_server_thread = nil
913
1117
  end
1118
+ utils = WEBrick::Utils # TimeoutHandler is since 1.9
1119
+ utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
1120
+ end
914
1121
 
915
- def stop_servers
916
- if @normal_server
917
- @normal_server.kill.join
918
- @normal_server = nil
919
- end
920
- if @proxy_server
921
- @proxy_server.kill.join
922
- @proxy_server = nil
923
- end
924
- if @ssl_server
925
- @ssl_server.stop
926
- @ssl_server = nil
927
- end
928
- if @ssl_server_thread
929
- @ssl_server_thread.kill.join
930
- @ssl_server_thread = nil
931
- end
932
- utils = WEBrick::Utils # TimeoutHandler is since 1.9
933
- utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
934
- end
935
-
936
- def normal_server_port
937
- @normal_server[:server].config[:Port]
938
- end
939
-
940
- def proxy_server_port
941
- @proxy_server[:server].config[:Port]
942
- end
943
-
944
- DIR = File.expand_path(File.dirname(__FILE__))
945
-
946
- def start_ssl_server(config = {})
947
- raise MiniTest::Skip, 'openssl not installed' unless
948
- defined?(OpenSSL::SSL)
949
-
950
- null_logger = NilLog.new
951
- server = WEBrick::HTTPServer.new({
952
- :Port => 0,
953
- :Logger => null_logger,
954
- :AccessLog => [],
955
- :SSLEnable => true,
956
- :SSLCACertificateFile => File.join(DIR, 'ca_cert.pem'),
957
- :SSLCertificate => cert('ssl_cert.pem'),
958
- :SSLPrivateKey => key('ssl_key.pem'),
959
- :SSLVerifyClient => nil,
960
- :SSLCertName => nil
961
- }.merge(config))
962
- server.mount_proc("/yaml") { |req, res|
963
- res.body = "--- true\n"
964
- }
965
- server.mount_proc("/insecure_redirect") { |req, res|
966
- res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
967
- }
968
- server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
969
- t = Thread.new do
970
- begin
971
- server.start
972
- rescue Exception => ex
973
- abort ex.message
974
- puts "ERROR during server thread: #{ex.message}"
975
- ensure
976
- server.shutdown
977
- end
978
- end
979
- while server.status != :Running
980
- sleep 0.1
981
- unless t.alive?
982
- t.join
983
- raise
984
- end
1122
+ def normal_server_port
1123
+ @normal_server[:server].config[:Port]
1124
+ end
1125
+
1126
+ def proxy_server_port
1127
+ @proxy_server[:server].config[:Port]
1128
+ end
1129
+
1130
+ def start_ssl_server(config = {})
1131
+ pend "starting this test server fails randomly on jruby" if Gem.java_platform?
1132
+
1133
+ null_logger = NilLog.new
1134
+ server = WEBrick::HTTPServer.new({
1135
+ :Port => 0,
1136
+ :Logger => null_logger,
1137
+ :AccessLog => [],
1138
+ :SSLEnable => true,
1139
+ :SSLCACertificateFile => File.join(__dir__, "ca_cert.pem"),
1140
+ :SSLCertificate => cert("ssl_cert.pem"),
1141
+ :SSLPrivateKey => key("ssl_key.pem"),
1142
+ :SSLVerifyClient => nil,
1143
+ :SSLCertName => nil,
1144
+ }.merge(config))
1145
+ server.mount_proc("/yaml") do |req, res|
1146
+ res.body = "--- true\n"
1147
+ end
1148
+ server.mount_proc("/insecure_redirect") do |req, res|
1149
+ res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query["to"])
1150
+ end
1151
+ server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
1152
+ t = Thread.new do
1153
+ begin
1154
+ server.start
1155
+ rescue Exception => ex
1156
+ puts "ERROR during server thread: #{ex.message}"
1157
+ raise
1158
+ ensure
1159
+ server.shutdown
985
1160
  end
986
- @ssl_server = server
987
- @ssl_server_thread = t
988
- server
989
- end
990
-
991
- private
992
-
993
- def start_server(data)
994
- null_logger = NilLog.new
995
- s = WEBrick::HTTPServer.new(
996
- :Port => 0,
997
- :DocumentRoot => nil,
998
- :Logger => null_logger,
999
- :AccessLog => null_logger
1000
- )
1001
- s.mount_proc("/kill") { |req, res| s.shutdown }
1002
- s.mount_proc("/yaml") { |req, res|
1003
- if req["X-Captain"]
1004
- res.body = req["X-Captain"]
1005
- elsif @enable_yaml
1006
- res.body = data
1007
- res['Content-Type'] = 'text/plain'
1008
- res['content-length'] = data.size
1009
- else
1010
- res.status = "404"
1011
- res.body = "<h1>NOT FOUND</h1>"
1012
- res['Content-Type'] = 'text/html'
1013
- end
1014
- }
1015
- s.mount_proc("/yaml.Z") { |req, res|
1016
- if @enable_zip
1017
- res.body = Zlib::Deflate.deflate(data)
1018
- res['Content-Type'] = 'text/plain'
1019
- else
1020
- res.status = "404"
1021
- res.body = "<h1>NOT FOUND</h1>"
1022
- res['Content-Type'] = 'text/html'
1023
- end
1024
- }
1025
- th = Thread.new do
1026
- begin
1027
- s.start
1028
- rescue Exception => ex
1029
- abort "ERROR during server thread: #{ex.message}"
1030
- ensure
1031
- s.shutdown
1032
- end
1161
+ end
1162
+ while server.status != :Running
1163
+ sleep 0.1
1164
+ unless t.alive?
1165
+ t.join
1166
+ raise
1033
1167
  end
1034
- th[:server] = s
1035
- th
1036
1168
  end
1169
+ @ssl_server = server
1170
+ @ssl_server_thread = t
1171
+ server
1172
+ end
1037
1173
 
1038
- def cert(filename)
1039
- OpenSSL::X509::Certificate.new(File.read(File.join(DIR, filename)))
1174
+ def start_server(data)
1175
+ null_logger = NilLog.new
1176
+ s = WEBrick::HTTPServer.new(
1177
+ :Port => 0,
1178
+ :DocumentRoot => nil,
1179
+ :Logger => null_logger,
1180
+ :AccessLog => null_logger
1181
+ )
1182
+ s.mount_proc("/kill") {|req, res| s.shutdown }
1183
+ s.mount_proc("/yaml") do |req, res|
1184
+ if req["X-Captain"]
1185
+ res.body = req["X-Captain"]
1186
+ elsif @enable_yaml
1187
+ res.body = data
1188
+ res["Content-Type"] = "text/plain"
1189
+ res["content-length"] = data.size
1190
+ else
1191
+ res.status = "404"
1192
+ res.body = "<h1>NOT FOUND</h1>"
1193
+ res["Content-Type"] = "text/html"
1194
+ end
1040
1195
  end
1041
-
1042
- def key(filename)
1043
- OpenSSL::PKey::RSA.new(File.read(File.join(DIR, filename)))
1196
+ s.mount_proc("/yaml.Z") do |req, res|
1197
+ if @enable_zip
1198
+ res.body = Zlib::Deflate.deflate(data)
1199
+ res["Content-Type"] = "text/plain"
1200
+ else
1201
+ res.status = "404"
1202
+ res.body = "<h1>NOT FOUND</h1>"
1203
+ res["Content-Type"] = "text/html"
1204
+ end
1205
+ end
1206
+ th = Thread.new do
1207
+ begin
1208
+ s.start
1209
+ rescue Exception => ex
1210
+ abort "ERROR during server thread: #{ex.message}"
1211
+ ensure
1212
+ s.shutdown
1213
+ end
1044
1214
  end
1215
+ th[:server] = s
1216
+ th
1045
1217
  end
1046
1218
 
1047
- def test_correct_for_windows_path
1048
- path = "/C:/WINDOWS/Temp/gems"
1049
- assert_equal "C:/WINDOWS/Temp/gems", @fetcher.correct_for_windows_path(path)
1050
-
1051
- path = "/home/skillet"
1052
- assert_equal "/home/skillet", @fetcher.correct_for_windows_path(path)
1219
+ def cert(filename)
1220
+ OpenSSL::X509::Certificate.new(File.read(File.join(__dir__, filename)))
1053
1221
  end
1054
1222
 
1055
- end if defined?(OpenSSL::SSL)
1223
+ def key(filename)
1224
+ OpenSSL::PKey::RSA.new(File.read(File.join(__dir__, filename)))
1225
+ end
1226
+ end if Gem::HAVE_OPENSSL