rubygems-update 2.6.1 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (801) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +5899 -0
  3. data/CODE_OF_CONDUCT.md +76 -35
  4. data/CONTRIBUTING.md +231 -0
  5. data/MAINTAINERS.txt +8 -0
  6. data/Manifest.txt +428 -216
  7. data/POLICIES.md +135 -0
  8. data/README.md +112 -0
  9. data/UPGRADING.md +15 -0
  10. data/bundler/CHANGELOG.md +4719 -0
  11. data/bundler/LICENSE.md +22 -0
  12. data/bundler/README.md +58 -0
  13. data/bundler/UPGRADING.md +222 -0
  14. data/bundler/bundler.gemspec +46 -0
  15. data/bundler/exe/bundle +29 -0
  16. data/bundler/exe/bundler +4 -0
  17. data/bundler/lib/bundler/.document +1 -0
  18. data/bundler/lib/bundler/build_metadata.rb +45 -0
  19. data/bundler/lib/bundler/capistrano.rb +22 -0
  20. data/bundler/lib/bundler/checksum.rb +245 -0
  21. data/bundler/lib/bundler/ci_detector.rb +75 -0
  22. data/bundler/lib/bundler/cli/add.rb +47 -0
  23. data/bundler/lib/bundler/cli/binstubs.rb +57 -0
  24. data/bundler/lib/bundler/cli/cache.rb +43 -0
  25. data/bundler/lib/bundler/cli/check.rb +40 -0
  26. data/bundler/lib/bundler/cli/clean.rb +25 -0
  27. data/bundler/lib/bundler/cli/common.rb +138 -0
  28. data/bundler/lib/bundler/cli/config.rb +204 -0
  29. data/bundler/lib/bundler/cli/console.rb +44 -0
  30. data/bundler/lib/bundler/cli/doctor.rb +157 -0
  31. data/bundler/lib/bundler/cli/exec.rb +88 -0
  32. data/bundler/lib/bundler/cli/fund.rb +36 -0
  33. data/bundler/lib/bundler/cli/gem.rb +471 -0
  34. data/bundler/lib/bundler/cli/info.rb +83 -0
  35. data/bundler/lib/bundler/cli/init.rb +51 -0
  36. data/bundler/lib/bundler/cli/inject.rb +60 -0
  37. data/bundler/lib/bundler/cli/install.rb +190 -0
  38. data/bundler/lib/bundler/cli/issue.rb +41 -0
  39. data/bundler/lib/bundler/cli/list.rb +66 -0
  40. data/bundler/lib/bundler/cli/lock.rb +73 -0
  41. data/bundler/lib/bundler/cli/open.rb +29 -0
  42. data/bundler/lib/bundler/cli/outdated.rb +297 -0
  43. data/bundler/lib/bundler/cli/platform.rb +48 -0
  44. data/bundler/lib/bundler/cli/plugin.rb +34 -0
  45. data/bundler/lib/bundler/cli/pristine.rb +60 -0
  46. data/bundler/lib/bundler/cli/remove.rb +17 -0
  47. data/bundler/lib/bundler/cli/show.rb +75 -0
  48. data/bundler/lib/bundler/cli/update.rb +123 -0
  49. data/bundler/lib/bundler/cli/viz.rb +31 -0
  50. data/bundler/lib/bundler/cli.rb +846 -0
  51. data/bundler/lib/bundler/compact_index_client/cache.rb +121 -0
  52. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  53. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +32 -0
  54. data/bundler/lib/bundler/compact_index_client/updater.rb +115 -0
  55. data/bundler/lib/bundler/compact_index_client.rb +126 -0
  56. data/bundler/lib/bundler/constants.rb +7 -0
  57. data/bundler/lib/bundler/current_ruby.rb +92 -0
  58. data/bundler/lib/bundler/definition.rb +1005 -0
  59. data/bundler/lib/bundler/dependency.rb +101 -0
  60. data/bundler/lib/bundler/deployment.rb +69 -0
  61. data/bundler/lib/bundler/deprecate.rb +44 -0
  62. data/bundler/lib/bundler/digest.rb +71 -0
  63. data/bundler/lib/bundler/dsl.rb +601 -0
  64. data/bundler/lib/bundler/endpoint_specification.rb +147 -0
  65. data/bundler/lib/bundler/env.rb +148 -0
  66. data/bundler/lib/bundler/environment_preserver.rb +86 -0
  67. data/bundler/lib/bundler/errors.rb +233 -0
  68. data/bundler/lib/bundler/feature_flag.rb +53 -0
  69. data/bundler/lib/bundler/fetcher/base.rb +52 -0
  70. data/bundler/lib/bundler/fetcher/compact_index.rb +129 -0
  71. data/bundler/lib/bundler/fetcher/dependency.rb +78 -0
  72. data/bundler/lib/bundler/fetcher/downloader.rb +91 -0
  73. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  74. data/bundler/lib/bundler/fetcher/index.rb +25 -0
  75. data/bundler/lib/bundler/fetcher.rb +324 -0
  76. data/bundler/lib/bundler/force_platform.rb +18 -0
  77. data/bundler/lib/bundler/friendly_errors.rb +126 -0
  78. data/bundler/lib/bundler/gem_helper.rb +237 -0
  79. data/bundler/lib/bundler/gem_helpers.rb +127 -0
  80. data/bundler/lib/bundler/gem_tasks.rb +7 -0
  81. data/bundler/lib/bundler/gem_version_promoter.rb +145 -0
  82. data/bundler/lib/bundler/graph.rb +152 -0
  83. data/bundler/lib/bundler/index.rb +205 -0
  84. data/bundler/lib/bundler/injector.rb +287 -0
  85. data/bundler/lib/bundler/inline.rb +73 -0
  86. data/bundler/lib/bundler/installer/gem_installer.rb +84 -0
  87. data/bundler/lib/bundler/installer/parallel_installer.rb +202 -0
  88. data/bundler/lib/bundler/installer/standalone.rb +116 -0
  89. data/bundler/lib/bundler/installer.rb +267 -0
  90. data/bundler/lib/bundler/lazy_specification.rb +170 -0
  91. data/bundler/lib/bundler/lockfile_generator.rb +104 -0
  92. data/bundler/lib/bundler/lockfile_parser.rb +289 -0
  93. data/bundler/lib/bundler/man/.document +1 -0
  94. data/bundler/lib/bundler/man/bundle-add.1 +59 -0
  95. data/bundler/lib/bundler/man/bundle-add.1.ronn +58 -0
  96. data/bundler/lib/bundler/man/bundle-binstubs.1 +30 -0
  97. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
  98. data/bundler/lib/bundler/man/bundle-cache.1 +40 -0
  99. data/bundler/lib/bundler/man/bundle-cache.1.ronn +79 -0
  100. data/bundler/lib/bundler/man/bundle-check.1 +22 -0
  101. data/bundler/lib/bundler/man/bundle-check.1.ronn +26 -0
  102. data/bundler/lib/bundler/man/bundle-clean.1 +17 -0
  103. data/bundler/lib/bundler/man/bundle-clean.1.ronn +18 -0
  104. data/bundler/lib/bundler/man/bundle-config.1 +321 -0
  105. data/bundler/lib/bundler/man/bundle-config.1.ronn +411 -0
  106. data/bundler/lib/bundler/man/bundle-console.1 +35 -0
  107. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  108. data/bundler/lib/bundler/man/bundle-doctor.1 +30 -0
  109. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +33 -0
  110. data/bundler/lib/bundler/man/bundle-exec.1 +104 -0
  111. data/bundler/lib/bundler/man/bundle-exec.1.ronn +151 -0
  112. data/bundler/lib/bundler/man/bundle-gem.1 +69 -0
  113. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  114. data/bundler/lib/bundler/man/bundle-help.1 +9 -0
  115. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  116. data/bundler/lib/bundler/man/bundle-info.1 +14 -0
  117. data/bundler/lib/bundler/man/bundle-info.1.ronn +17 -0
  118. data/bundler/lib/bundler/man/bundle-init.1 +20 -0
  119. data/bundler/lib/bundler/man/bundle-init.1.ronn +31 -0
  120. data/bundler/lib/bundler/man/bundle-inject.1 +23 -0
  121. data/bundler/lib/bundler/man/bundle-inject.1.ronn +24 -0
  122. data/bundler/lib/bundler/man/bundle-install.1 +215 -0
  123. data/bundler/lib/bundler/man/bundle-install.1.ronn +383 -0
  124. data/bundler/lib/bundler/man/bundle-list.1 +35 -0
  125. data/bundler/lib/bundler/man/bundle-list.1.ronn +33 -0
  126. data/bundler/lib/bundler/man/bundle-lock.1 +60 -0
  127. data/bundler/lib/bundler/man/bundle-lock.1.ronn +94 -0
  128. data/bundler/lib/bundler/man/bundle-open.1 +32 -0
  129. data/bundler/lib/bundler/man/bundle-open.1.ronn +27 -0
  130. data/bundler/lib/bundler/man/bundle-outdated.1 +100 -0
  131. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +106 -0
  132. data/bundler/lib/bundler/man/bundle-platform.1 +49 -0
  133. data/bundler/lib/bundler/man/bundle-platform.1.ronn +49 -0
  134. data/bundler/lib/bundler/man/bundle-plugin.1 +55 -0
  135. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  136. data/bundler/lib/bundler/man/bundle-pristine.1 +23 -0
  137. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  138. data/bundler/lib/bundler/man/bundle-remove.1 +21 -0
  139. data/bundler/lib/bundler/man/bundle-remove.1.ronn +23 -0
  140. data/bundler/lib/bundler/man/bundle-show.1 +16 -0
  141. data/bundler/lib/bundler/man/bundle-show.1.ronn +21 -0
  142. data/bundler/lib/bundler/man/bundle-update.1 +275 -0
  143. data/bundler/lib/bundler/man/bundle-update.1.ronn +351 -0
  144. data/bundler/lib/bundler/man/bundle-version.1 +22 -0
  145. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  146. data/bundler/lib/bundler/man/bundle-viz.1 +30 -0
  147. data/bundler/lib/bundler/man/bundle-viz.1.ronn +32 -0
  148. data/bundler/lib/bundler/man/bundle.1 +102 -0
  149. data/bundler/lib/bundler/man/bundle.1.ronn +116 -0
  150. data/bundler/lib/bundler/man/gemfile.5 +470 -0
  151. data/bundler/lib/bundler/man/gemfile.5.ronn +552 -0
  152. data/bundler/lib/bundler/man/index.txt +29 -0
  153. data/bundler/lib/bundler/match_metadata.rb +17 -0
  154. data/bundler/lib/bundler/match_platform.rb +23 -0
  155. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  156. data/bundler/lib/bundler/mirror.rb +221 -0
  157. data/bundler/lib/bundler/plugin/api/source.rb +321 -0
  158. data/bundler/lib/bundler/plugin/api.rb +81 -0
  159. data/bundler/lib/bundler/plugin/dsl.rb +53 -0
  160. data/bundler/lib/bundler/plugin/events.rb +61 -0
  161. data/bundler/lib/bundler/plugin/index.rb +193 -0
  162. data/bundler/lib/bundler/plugin/installer/git.rb +34 -0
  163. data/bundler/lib/bundler/plugin/installer/rubygems.rb +19 -0
  164. data/bundler/lib/bundler/plugin/installer.rb +112 -0
  165. data/bundler/lib/bundler/plugin/source_list.rb +31 -0
  166. data/bundler/lib/bundler/plugin.rb +359 -0
  167. data/bundler/lib/bundler/process_lock.rb +24 -0
  168. data/bundler/lib/bundler/remote_specification.rb +117 -0
  169. data/bundler/lib/bundler/resolver/base.rb +107 -0
  170. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  171. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  172. data/bundler/lib/bundler/resolver/package.rb +77 -0
  173. data/bundler/lib/bundler/resolver/root.rb +25 -0
  174. data/bundler/lib/bundler/resolver/spec_group.rb +79 -0
  175. data/bundler/lib/bundler/resolver.rb +462 -0
  176. data/bundler/lib/bundler/retry.rb +66 -0
  177. data/bundler/lib/bundler/ruby_dsl.rb +53 -0
  178. data/bundler/lib/bundler/ruby_version.rb +131 -0
  179. data/bundler/lib/bundler/rubygems_ext.rb +328 -0
  180. data/bundler/lib/bundler/rubygems_gem_installer.rb +137 -0
  181. data/bundler/lib/bundler/rubygems_integration.rb +493 -0
  182. data/bundler/lib/bundler/runtime.rb +307 -0
  183. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  184. data/bundler/lib/bundler/self_manager.rb +186 -0
  185. data/bundler/lib/bundler/settings/validator.rb +102 -0
  186. data/bundler/lib/bundler/settings.rb +588 -0
  187. data/bundler/lib/bundler/setup.rb +33 -0
  188. data/bundler/lib/bundler/shared_helpers.rb +380 -0
  189. data/bundler/lib/bundler/similarity_detector.rb +63 -0
  190. data/bundler/lib/bundler/source/gemspec.rb +18 -0
  191. data/bundler/lib/bundler/source/git/git_proxy.rb +455 -0
  192. data/bundler/lib/bundler/source/git.rb +380 -0
  193. data/bundler/lib/bundler/source/metadata.rb +62 -0
  194. data/bundler/lib/bundler/source/path/installer.rb +53 -0
  195. data/bundler/lib/bundler/source/path.rb +261 -0
  196. data/bundler/lib/bundler/source/rubygems/remote.rb +68 -0
  197. data/bundler/lib/bundler/source/rubygems.rb +516 -0
  198. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  199. data/bundler/lib/bundler/source.rb +116 -0
  200. data/bundler/lib/bundler/source_list.rb +227 -0
  201. data/bundler/lib/bundler/source_map.rb +71 -0
  202. data/bundler/lib/bundler/spec_set.rb +247 -0
  203. data/bundler/lib/bundler/stub_specification.rb +119 -0
  204. data/bundler/lib/bundler/templates/.document +1 -0
  205. data/bundler/lib/bundler/templates/Executable +27 -0
  206. data/bundler/lib/bundler/templates/Executable.bundler +109 -0
  207. data/bundler/lib/bundler/templates/Executable.standalone +14 -0
  208. data/bundler/lib/bundler/templates/Gemfile +5 -0
  209. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  210. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +84 -0
  211. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  212. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +26 -0
  213. data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  214. data/bundler/lib/bundler/templates/newgem/README.md.tt +45 -0
  215. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +67 -0
  216. data/bundler/lib/bundler/templates/newgem/bin/console.tt +11 -0
  217. data/bundler/lib/bundler/templates/newgem/bin/setup.tt +8 -0
  218. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  219. data/bundler/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  220. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  221. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  222. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  223. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  224. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  225. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  226. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  227. data/bundler/lib/bundler/templates/newgem/gitignore.tt +23 -0
  228. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  229. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
  230. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
  231. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +51 -0
  232. data/bundler/lib/bundler/templates/newgem/rspec.tt +3 -0
  233. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  234. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  235. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
  236. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
  237. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  238. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  239. data/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +13 -0
  240. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  241. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  242. data/bundler/lib/bundler/ui/rg_proxy.rb +19 -0
  243. data/bundler/lib/bundler/ui/shell.rb +165 -0
  244. data/bundler/lib/bundler/ui/silent.rb +85 -0
  245. data/bundler/lib/bundler/ui.rb +9 -0
  246. data/bundler/lib/bundler/uri_credentials_filter.rb +43 -0
  247. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  248. data/bundler/lib/bundler/vendor/.document +1 -0
  249. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  250. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  251. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  252. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  253. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +175 -0
  254. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  255. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +2694 -0
  256. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  257. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  258. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  259. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  260. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1073 -0
  261. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  262. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  263. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  264. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  265. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  266. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  267. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  268. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  269. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  270. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  271. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  272. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  273. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  274. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  275. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  276. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  277. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  278. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  279. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  280. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
  281. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
  282. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  283. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
  284. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
  285. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
  286. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
  287. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
  288. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
  289. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
  290. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
  291. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
  292. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  293. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  294. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  295. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  296. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +89 -0
  297. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
  298. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
  299. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +293 -0
  300. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  301. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
  302. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
  303. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
  304. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +115 -0
  305. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  306. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +84 -0
  307. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
  308. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  309. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  310. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  311. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  312. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
  313. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  314. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +663 -0
  315. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  316. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  317. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  318. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +853 -0
  319. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  320. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  321. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1588 -0
  322. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  323. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  324. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  325. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  326. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  327. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  328. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +183 -0
  329. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  330. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  331. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  332. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  333. data/bundler/lib/bundler/vendored_fileutils.rb +4 -0
  334. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  335. data/bundler/lib/bundler/vendored_persistent.rb +11 -0
  336. data/bundler/lib/bundler/vendored_pub_grub.rb +4 -0
  337. data/bundler/lib/bundler/vendored_thor.rb +8 -0
  338. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  339. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  340. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  341. data/bundler/lib/bundler/version.rb +13 -0
  342. data/bundler/lib/bundler/vlad.rb +17 -0
  343. data/bundler/lib/bundler/worker.rb +117 -0
  344. data/bundler/lib/bundler/yaml_serializer.rb +93 -0
  345. data/bundler/lib/bundler.rb +665 -0
  346. data/{test/rubygems/bogussources.rb → exe/gem} +5 -2
  347. data/exe/update_rubygems +38 -0
  348. data/hide_lib_for_update/note.txt +0 -4
  349. data/lib/rubygems/available_set.rb +12 -12
  350. data/lib/rubygems/basic_specification.rb +75 -58
  351. data/lib/rubygems/bundler_version_finder.rb +77 -0
  352. data/lib/rubygems/ci_detector.rb +75 -0
  353. data/lib/rubygems/command.rb +144 -71
  354. data/lib/rubygems/command_manager.rb +64 -27
  355. data/lib/rubygems/commands/build_command.rb +88 -17
  356. data/lib/rubygems/commands/cert_command.rb +131 -83
  357. data/lib/rubygems/commands/check_command.rb +30 -27
  358. data/lib/rubygems/commands/cleanup_command.rb +57 -40
  359. data/lib/rubygems/commands/contents_command.rb +37 -39
  360. data/lib/rubygems/commands/dependency_command.rb +53 -65
  361. data/lib/rubygems/commands/environment_command.rb +32 -16
  362. data/lib/rubygems/commands/exec_command.rb +249 -0
  363. data/lib/rubygems/commands/fetch_command.rb +36 -19
  364. data/lib/rubygems/commands/generate_index_command.rb +40 -74
  365. data/lib/rubygems/commands/help_command.rb +22 -22
  366. data/lib/rubygems/commands/info_command.rb +38 -0
  367. data/lib/rubygems/commands/install_command.rb +67 -143
  368. data/lib/rubygems/commands/list_command.rb +10 -9
  369. data/lib/rubygems/commands/lock_command.rb +12 -14
  370. data/lib/rubygems/commands/mirror_command.rb +4 -4
  371. data/lib/rubygems/commands/open_command.rb +28 -26
  372. data/lib/rubygems/commands/outdated_command.rb +6 -6
  373. data/lib/rubygems/commands/owner_command.rb +51 -27
  374. data/lib/rubygems/commands/pristine_command.rb +99 -71
  375. data/lib/rubygems/commands/push_command.rb +53 -46
  376. data/lib/rubygems/commands/query_command.rb +21 -328
  377. data/lib/rubygems/commands/rdoc_command.rb +33 -33
  378. data/lib/rubygems/commands/search_command.rb +9 -9
  379. data/lib/rubygems/commands/server_command.rb +15 -76
  380. data/lib/rubygems/commands/setup_command.rb +370 -186
  381. data/lib/rubygems/commands/signin_command.rb +34 -0
  382. data/lib/rubygems/commands/signout_command.rb +32 -0
  383. data/lib/rubygems/commands/sources_command.rb +57 -41
  384. data/lib/rubygems/commands/specification_command.rb +38 -28
  385. data/lib/rubygems/commands/stale_command.rb +6 -5
  386. data/lib/rubygems/commands/uninstall_command.rb +96 -62
  387. data/lib/rubygems/commands/unpack_command.rb +44 -53
  388. data/lib/rubygems/commands/update_command.rb +155 -99
  389. data/lib/rubygems/commands/which_command.rb +14 -17
  390. data/lib/rubygems/commands/yank_command.rb +28 -32
  391. data/lib/rubygems/compatibility.rb +13 -32
  392. data/lib/rubygems/config_file.rb +214 -119
  393. data/lib/rubygems/core_ext/kernel_gem.rb +10 -16
  394. data/lib/rubygems/core_ext/kernel_require.rb +92 -90
  395. data/lib/rubygems/core_ext/kernel_warn.rb +49 -0
  396. data/lib/rubygems/core_ext/tcpsocket_init.rb +54 -0
  397. data/lib/rubygems/defaults.rb +184 -54
  398. data/lib/rubygems/dependency.rb +75 -62
  399. data/lib/rubygems/dependency_installer.rb +74 -230
  400. data/lib/rubygems/dependency_list.rb +32 -33
  401. data/lib/rubygems/deprecate.rb +113 -17
  402. data/lib/rubygems/doctor.rb +31 -31
  403. data/lib/rubygems/errors.rb +51 -13
  404. data/lib/rubygems/exceptions.rb +65 -35
  405. data/lib/rubygems/ext/build_error.rb +3 -1
  406. data/lib/rubygems/ext/builder.rb +103 -77
  407. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  408. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  409. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  410. data/lib/rubygems/ext/configure_builder.rb +6 -9
  411. data/lib/rubygems/ext/ext_conf_builder.rb +40 -61
  412. data/lib/rubygems/ext/rake_builder.rb +18 -21
  413. data/lib/rubygems/ext.rb +8 -7
  414. data/lib/rubygems/gem_runner.rb +19 -21
  415. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  416. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  417. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  418. data/lib/rubygems/gemcutter_utilities.rb +246 -43
  419. data/lib/rubygems/install_default_message.rb +3 -3
  420. data/lib/rubygems/install_message.rb +3 -3
  421. data/lib/rubygems/install_update_options.rb +104 -98
  422. data/lib/rubygems/installer.rb +407 -225
  423. data/lib/rubygems/installer_uninstaller_utils.rb +27 -0
  424. data/lib/rubygems/local_remote_options.rb +29 -32
  425. data/lib/rubygems/name_tuple.rb +18 -23
  426. data/lib/rubygems/net/http.rb +3 -0
  427. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  428. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  429. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  430. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  431. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  432. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  433. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  434. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  435. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  436. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  437. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  438. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  439. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  440. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  441. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  442. data/lib/rubygems/openssl.rb +7 -0
  443. data/lib/rubygems/optparse/.document +1 -0
  444. data/lib/rubygems/optparse/COPYING +56 -0
  445. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  446. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  447. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  448. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  449. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  450. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  451. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  452. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  453. data/lib/rubygems/optparse/lib/optparse.rb +2330 -0
  454. data/lib/rubygems/optparse.rb +3 -0
  455. data/lib/rubygems/package/digest_io.rb +5 -7
  456. data/lib/rubygems/package/file_source.rb +6 -8
  457. data/lib/rubygems/package/io_source.rb +6 -4
  458. data/lib/rubygems/package/old.rb +19 -28
  459. data/lib/rubygems/package/source.rb +1 -1
  460. data/lib/rubygems/package/tar_header.rb +114 -93
  461. data/lib/rubygems/package/tar_reader/entry.rb +116 -22
  462. data/lib/rubygems/package/tar_reader.rb +18 -40
  463. data/lib/rubygems/package/tar_writer.rb +42 -56
  464. data/lib/rubygems/package.rb +245 -145
  465. data/lib/rubygems/package_task.rb +8 -14
  466. data/lib/rubygems/path_support.rb +21 -16
  467. data/lib/rubygems/platform.rb +135 -74
  468. data/lib/rubygems/psych_tree.rb +3 -2
  469. data/lib/rubygems/query_utils.rb +349 -0
  470. data/lib/rubygems/rdoc.rb +4 -326
  471. data/lib/rubygems/remote_fetcher.rb +99 -181
  472. data/lib/rubygems/request/connection_pools.rb +31 -24
  473. data/lib/rubygems/request/http_pool.rb +6 -7
  474. data/lib/rubygems/request/https_pool.rb +2 -3
  475. data/lib/rubygems/request.rb +103 -53
  476. data/lib/rubygems/request_set/gem_dependency_api.rb +182 -190
  477. data/lib/rubygems/request_set/lockfile/parser.rb +42 -52
  478. data/lib/rubygems/request_set/lockfile/tokenizer.rb +34 -24
  479. data/lib/rubygems/request_set/lockfile.rb +32 -35
  480. data/lib/rubygems/request_set.rb +115 -71
  481. data/lib/rubygems/requirement.rb +77 -68
  482. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  483. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  484. data/lib/rubygems/resolver/activation_request.rb +34 -61
  485. data/lib/rubygems/resolver/api_set/gem_parser.rb +24 -0
  486. data/lib/rubygems/resolver/api_set.rb +40 -32
  487. data/lib/rubygems/resolver/api_specification.rb +37 -18
  488. data/lib/rubygems/resolver/best_set.rb +15 -17
  489. data/lib/rubygems/resolver/composed_set.rb +9 -11
  490. data/lib/rubygems/resolver/conflict.rb +19 -33
  491. data/lib/rubygems/resolver/current_set.rb +2 -4
  492. data/lib/rubygems/resolver/dependency_request.rb +8 -9
  493. data/lib/rubygems/resolver/git_set.rb +8 -10
  494. data/lib/rubygems/resolver/git_specification.rb +11 -13
  495. data/lib/rubygems/resolver/index_set.rb +13 -15
  496. data/lib/rubygems/resolver/index_specification.rb +42 -11
  497. data/lib/rubygems/resolver/installed_specification.rb +9 -11
  498. data/lib/rubygems/resolver/installer_set.rb +87 -45
  499. data/lib/rubygems/resolver/local_specification.rb +5 -7
  500. data/lib/rubygems/resolver/lock_set.rb +13 -15
  501. data/lib/rubygems/resolver/lock_specification.rb +13 -15
  502. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  503. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  504. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +88 -0
  505. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  506. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  507. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  508. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  509. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  510. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  511. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  512. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  513. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +164 -0
  514. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +110 -146
  515. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +83 -9
  516. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  517. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  518. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  519. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +552 -172
  520. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  521. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +12 -6
  522. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  523. data/lib/rubygems/resolver/molinillo.rb +2 -1
  524. data/lib/rubygems/resolver/requirement_list.rb +2 -2
  525. data/lib/rubygems/resolver/set.rb +3 -5
  526. data/lib/rubygems/resolver/source_set.rb +6 -7
  527. data/lib/rubygems/resolver/spec_specification.rb +16 -4
  528. data/lib/rubygems/resolver/specification.rb +25 -10
  529. data/lib/rubygems/resolver/stats.rb +1 -0
  530. data/lib/rubygems/resolver/vendor_set.rb +6 -8
  531. data/lib/rubygems/resolver/vendor_specification.rb +6 -8
  532. data/lib/rubygems/resolver.rb +121 -72
  533. data/lib/rubygems/s3_uri_signer.rb +177 -0
  534. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  535. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  536. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  537. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  538. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  539. data/lib/rubygems/safe_marshal.rb +74 -0
  540. data/lib/rubygems/safe_yaml.rb +36 -0
  541. data/lib/rubygems/security/policies.rb +49 -51
  542. data/lib/rubygems/security/policy.rb +46 -53
  543. data/lib/rubygems/security/signer.rb +86 -29
  544. data/lib/rubygems/security/trust_dir.rb +22 -24
  545. data/lib/rubygems/security.rb +101 -82
  546. data/lib/rubygems/security_option.rb +43 -0
  547. data/lib/rubygems/shellwords.rb +3 -0
  548. data/lib/rubygems/source/git.rb +40 -42
  549. data/lib/rubygems/source/installed.rb +5 -9
  550. data/lib/rubygems/source/local.rb +30 -33
  551. data/lib/rubygems/source/lock.rb +10 -10
  552. data/lib/rubygems/source/specific_file.rb +7 -9
  553. data/lib/rubygems/source/vendor.rb +3 -7
  554. data/lib/rubygems/source.rb +78 -68
  555. data/lib/rubygems/source_list.rb +11 -15
  556. data/lib/rubygems/spec_fetcher.rb +71 -83
  557. data/lib/rubygems/specification.rb +833 -1115
  558. data/lib/rubygems/specification_policy.rb +538 -0
  559. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +21 -0
  560. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  561. data/lib/rubygems/stub_specification.rb +55 -57
  562. data/lib/rubygems/text.rb +39 -27
  563. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  564. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  565. data/lib/rubygems/timeout.rb +3 -0
  566. data/lib/rubygems/tsort/.document +1 -0
  567. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  568. data/lib/rubygems/tsort/lib/tsort.rb +455 -0
  569. data/lib/rubygems/tsort.rb +3 -0
  570. data/lib/rubygems/uninstaller.rb +150 -87
  571. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  572. data/lib/rubygems/update_suggestion.rb +56 -0
  573. data/lib/rubygems/uri.rb +126 -0
  574. data/lib/rubygems/uri_formatter.rb +4 -7
  575. data/lib/rubygems/user_interaction.rb +92 -146
  576. data/lib/rubygems/util/licenses.rb +712 -317
  577. data/lib/rubygems/util/list.rb +5 -2
  578. data/lib/rubygems/util.rb +58 -75
  579. data/lib/rubygems/validator.rb +26 -48
  580. data/lib/rubygems/version.rb +106 -56
  581. data/lib/rubygems/version_option.rb +22 -14
  582. data/lib/rubygems/yaml_serializer.rb +93 -0
  583. data/lib/rubygems.rb +427 -361
  584. data/rubygems-update.gemspec +38 -0
  585. data/setup.rb +13 -27
  586. metadata +500 -363
  587. data/.autotest +0 -71
  588. data/.document +0 -5
  589. data/.travis.yml +0 -46
  590. data/CONTRIBUTING.rdoc +0 -129
  591. data/CVE-2013-4287.txt +0 -35
  592. data/CVE-2013-4363.txt +0 -45
  593. data/CVE-2015-3900.txt +0 -40
  594. data/History.txt +0 -3105
  595. data/MAINTAINERS.md +0 -5
  596. data/POLICIES.rdoc +0 -61
  597. data/README.rdoc +0 -54
  598. data/Rakefile +0 -449
  599. data/UPGRADING.rdoc +0 -92
  600. data/appveyor.yml +0 -36
  601. data/bin/gem +0 -25
  602. data/bin/update_rubygems +0 -37
  603. data/lib/gauntlet_rubygems.rb +0 -51
  604. data/lib/rubygems/indexer.rb +0 -434
  605. data/lib/rubygems/installer_test_case.rb +0 -194
  606. data/lib/rubygems/mock_gem_ui.rb +0 -89
  607. data/lib/rubygems/package/tar_test_case.rb +0 -147
  608. data/lib/rubygems/psych_additions.rb +0 -10
  609. data/lib/rubygems/server.rb +0 -869
  610. data/lib/rubygems/source_local.rb +0 -6
  611. data/lib/rubygems/source_specific_file.rb +0 -5
  612. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  613. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
  614. data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  615. data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
  616. data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  617. data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  618. data/lib/rubygems/syck_hack.rb +0 -77
  619. data/lib/rubygems/test_case.rb +0 -1496
  620. data/lib/rubygems/test_utilities.rb +0 -384
  621. data/lib/ubygems.rb +0 -11
  622. data/test/rubygems/alternate_cert.pem +0 -18
  623. data/test/rubygems/alternate_cert_32.pem +0 -18
  624. data/test/rubygems/alternate_key.pem +0 -27
  625. data/test/rubygems/bad_rake.rb +0 -2
  626. data/test/rubygems/ca_cert.pem +0 -68
  627. data/test/rubygems/child_cert.pem +0 -18
  628. data/test/rubygems/child_cert_32.pem +0 -18
  629. data/test/rubygems/child_key.pem +0 -27
  630. data/test/rubygems/client.pem +0 -49
  631. data/test/rubygems/data/gem-private_key.pem +0 -27
  632. data/test/rubygems/data/gem-public_cert.pem +0 -20
  633. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  634. data/test/rubygems/encrypted_private_key.pem +0 -30
  635. data/test/rubygems/expired_cert.pem +0 -18
  636. data/test/rubygems/fake_certlib/openssl.rb +0 -8
  637. data/test/rubygems/fix_openssl_warnings.rb +0 -13
  638. data/test/rubygems/foo/discover.rb +0 -1
  639. data/test/rubygems/future_cert.pem +0 -18
  640. data/test/rubygems/future_cert_32.pem +0 -18
  641. data/test/rubygems/good_rake.rb +0 -2
  642. data/test/rubygems/grandchild_cert.pem +0 -18
  643. data/test/rubygems/grandchild_cert_32.pem +0 -18
  644. data/test/rubygems/grandchild_key.pem +0 -27
  645. data/test/rubygems/invalid_client.pem +0 -49
  646. data/test/rubygems/invalid_issuer_cert.pem +0 -18
  647. data/test/rubygems/invalid_issuer_cert_32.pem +0 -18
  648. data/test/rubygems/invalid_key.pem +0 -27
  649. data/test/rubygems/invalid_signer_cert.pem +0 -18
  650. data/test/rubygems/invalid_signer_cert_32.pem +0 -18
  651. data/test/rubygems/invalidchild_cert.pem +0 -18
  652. data/test/rubygems/invalidchild_cert_32.pem +0 -18
  653. data/test/rubygems/invalidchild_key.pem +0 -27
  654. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
  655. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
  656. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
  657. data/test/rubygems/private_key.pem +0 -27
  658. data/test/rubygems/public_cert.pem +0 -18
  659. data/test/rubygems/public_cert_32.pem +0 -18
  660. data/test/rubygems/public_key.pem +0 -9
  661. data/test/rubygems/rubygems/commands/crash_command.rb +0 -6
  662. data/test/rubygems/rubygems_plugin.rb +0 -22
  663. data/test/rubygems/sff/discover.rb +0 -1
  664. data/test/rubygems/simple_gem.rb +0 -67
  665. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  666. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  667. data/test/rubygems/ssl_cert.pem +0 -19
  668. data/test/rubygems/ssl_key.pem +0 -15
  669. data/test/rubygems/test_bundled_ca.rb +0 -59
  670. data/test/rubygems/test_config.rb +0 -24
  671. data/test/rubygems/test_deprecate.rb +0 -77
  672. data/test/rubygems/test_gem.rb +0 -1718
  673. data/test/rubygems/test_gem_available_set.rb +0 -130
  674. data/test/rubygems/test_gem_command.rb +0 -248
  675. data/test/rubygems/test_gem_command_manager.rb +0 -264
  676. data/test/rubygems/test_gem_commands_build_command.rb +0 -121
  677. data/test/rubygems/test_gem_commands_cert_command.rb +0 -671
  678. data/test/rubygems/test_gem_commands_check_command.rb +0 -69
  679. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -197
  680. data/test/rubygems/test_gem_commands_contents_command.rb +0 -240
  681. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -230
  682. data/test/rubygems/test_gem_commands_environment_command.rb +0 -154
  683. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -127
  684. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -51
  685. data/test/rubygems/test_gem_commands_help_command.rb +0 -75
  686. data/test/rubygems/test_gem_commands_install_command.rb +0 -1007
  687. data/test/rubygems/test_gem_commands_list_command.rb +0 -34
  688. data/test/rubygems/test_gem_commands_lock_command.rb +0 -69
  689. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  690. data/test/rubygems/test_gem_commands_open_command.rb +0 -70
  691. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -33
  692. data/test/rubygems/test_gem_commands_owner_command.rb +0 -205
  693. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -491
  694. data/test/rubygems/test_gem_commands_push_command.rb +0 -330
  695. data/test/rubygems/test_gem_commands_query_command.rb +0 -657
  696. data/test/rubygems/test_gem_commands_search_command.rb +0 -18
  697. data/test/rubygems/test_gem_commands_server_command.rb +0 -60
  698. data/test/rubygems/test_gem_commands_setup_command.rb +0 -136
  699. data/test/rubygems/test_gem_commands_sources_command.rb +0 -249
  700. data/test/rubygems/test_gem_commands_specification_command.rb +0 -251
  701. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  702. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -283
  703. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -209
  704. data/test/rubygems/test_gem_commands_update_command.rb +0 -514
  705. data/test/rubygems/test_gem_commands_which_command.rb +0 -87
  706. data/test/rubygems/test_gem_commands_yank_command.rb +0 -100
  707. data/test/rubygems/test_gem_config_file.rb +0 -491
  708. data/test/rubygems/test_gem_dependency.rb +0 -362
  709. data/test/rubygems/test_gem_dependency_installer.rb +0 -1235
  710. data/test/rubygems/test_gem_dependency_list.rb +0 -260
  711. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -29
  712. data/test/rubygems/test_gem_doctor.rb +0 -169
  713. data/test/rubygems/test_gem_ext_builder.rb +0 -341
  714. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -87
  715. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -87
  716. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -211
  717. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -65
  718. data/test/rubygems/test_gem_gem_runner.rb +0 -69
  719. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -235
  720. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -62
  721. data/test/rubygems/test_gem_indexer.rb +0 -367
  722. data/test/rubygems/test_gem_install_update_options.rb +0 -197
  723. data/test/rubygems/test_gem_installer.rb +0 -1552
  724. data/test/rubygems/test_gem_local_remote_options.rb +0 -134
  725. data/test/rubygems/test_gem_name_tuple.rb +0 -45
  726. data/test/rubygems/test_gem_package.rb +0 -876
  727. data/test/rubygems/test_gem_package_old.rb +0 -90
  728. data/test/rubygems/test_gem_package_tar_header.rb +0 -147
  729. data/test/rubygems/test_gem_package_tar_reader.rb +0 -90
  730. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -142
  731. data/test/rubygems/test_gem_package_tar_writer.rb +0 -264
  732. data/test/rubygems/test_gem_package_task.rb +0 -84
  733. data/test/rubygems/test_gem_path_support.rb +0 -121
  734. data/test/rubygems/test_gem_platform.rb +0 -308
  735. data/test/rubygems/test_gem_rdoc.rb +0 -270
  736. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1051
  737. data/test/rubygems/test_gem_request.rb +0 -363
  738. data/test/rubygems/test_gem_request_connection_pools.rb +0 -130
  739. data/test/rubygems/test_gem_request_set.rb +0 -595
  740. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -831
  741. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -470
  742. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -549
  743. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
  744. data/test/rubygems/test_gem_requirement.rb +0 -387
  745. data/test/rubygems/test_gem_resolver.rb +0 -715
  746. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -74
  747. data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
  748. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -145
  749. data/test/rubygems/test_gem_resolver_best_set.rb +0 -138
  750. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -46
  751. data/test/rubygems/test_gem_resolver_conflict.rb +0 -88
  752. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -85
  753. data/test/rubygems/test_gem_resolver_git_set.rb +0 -190
  754. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  755. data/test/rubygems/test_gem_resolver_index_set.rb +0 -90
  756. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -90
  757. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -50
  758. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -258
  759. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -46
  760. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -64
  761. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -100
  762. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -21
  763. data/test/rubygems/test_gem_resolver_specification.rb +0 -65
  764. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -84
  765. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -84
  766. data/test/rubygems/test_gem_security.rb +0 -307
  767. data/test/rubygems/test_gem_security_policy.rb +0 -541
  768. data/test/rubygems/test_gem_security_signer.rb +0 -209
  769. data/test/rubygems/test_gem_security_trust_dir.rb +0 -101
  770. data/test/rubygems/test_gem_server.rb +0 -409
  771. data/test/rubygems/test_gem_silent_ui.rb +0 -117
  772. data/test/rubygems/test_gem_source.rb +0 -242
  773. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -20
  774. data/test/rubygems/test_gem_source_git.rb +0 -309
  775. data/test/rubygems/test_gem_source_installed.rb +0 -37
  776. data/test/rubygems/test_gem_source_list.rb +0 -118
  777. data/test/rubygems/test_gem_source_local.rb +0 -107
  778. data/test/rubygems/test_gem_source_lock.rb +0 -115
  779. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  780. data/test/rubygems/test_gem_source_vendor.rb +0 -32
  781. data/test/rubygems/test_gem_spec_fetcher.rb +0 -311
  782. data/test/rubygems/test_gem_specification.rb +0 -3519
  783. data/test/rubygems/test_gem_stream_ui.rb +0 -239
  784. data/test/rubygems/test_gem_stub_specification.rb +0 -217
  785. data/test/rubygems/test_gem_text.rb +0 -77
  786. data/test/rubygems/test_gem_uninstaller.rb +0 -485
  787. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -33
  788. data/test/rubygems/test_gem_uri_formatter.rb +0 -29
  789. data/test/rubygems/test_gem_util.rb +0 -40
  790. data/test/rubygems/test_gem_validator.rb +0 -46
  791. data/test/rubygems/test_gem_version.rb +0 -222
  792. data/test/rubygems/test_gem_version_option.rb +0 -152
  793. data/test/rubygems/test_kernel.rb +0 -86
  794. data/test/rubygems/test_require.rb +0 -322
  795. data/test/rubygems/wrong_key_cert.pem +0 -18
  796. data/test/rubygems/wrong_key_cert_32.pem +0 -18
  797. data/util/CL2notes +0 -56
  798. data/util/create_certs.rb +0 -157
  799. data/util/create_encrypted_key.rb +0 -17
  800. data/util/generate_spdx_license_list.rb +0 -51
  801. data/util/update_bundled_ca_certificates.rb +0 -118
@@ -1,1051 +0,0 @@
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
11
-
12
- require 'rubygems/remote_fetcher'
13
- require 'rubygems/package'
14
- require 'minitest/mock'
15
-
16
- # = Testing Proxy Settings
17
- #
18
- # These tests check the proper proxy server settings by running two
19
- # web servers. The web server at http://localhost:#{SERVER_PORT}
20
- # represents the normal gem server and returns a gemspec with a rake
21
- # version of 0.4.11. The web server at http://localhost:#{PROXY_PORT}
22
- # represents the proxy server and returns a different dataset where
23
- # rake has version 0.4.2. This allows us to detect which server is
24
- # returning the data.
25
- #
26
- # Note that the proxy server is not a *real* proxy server. But our
27
- # software doesn't really care, as long as we hit the proxy URL when a
28
- # proxy is configured.
29
-
30
- class TestGemRemoteFetcher < Gem::TestCase
31
-
32
- include Gem::DefaultUserInteraction
33
-
34
- SERVER_DATA = <<-EOY
35
- --- !ruby/object:Gem::Cache
36
- gems:
37
- rake-0.4.11: !ruby/object:Gem::Specification
38
- rubygems_version: "0.7"
39
- specification_version: 1
40
- name: rake
41
- version: !ruby/object:Gem::Version
42
- version: 0.4.11
43
- date: 2004-11-12
44
- summary: Ruby based make-like utility.
45
- require_paths:
46
- - lib
47
- author: Jim Weirich
48
- email: jim@weirichhouse.org
49
- homepage: http://rake.rubyforge.org
50
- rubyforge_project: rake
51
- description: Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax.
52
- autorequire:
53
- default_executable: rake
54
- bindir: bin
55
- has_rdoc: true
56
- required_ruby_version: !ruby/object:Gem::Version::Requirement
57
- requirements:
58
- -
59
- - ">"
60
- - !ruby/object:Gem::Version
61
- version: 0.0.0
62
- version:
63
- platform: ruby
64
- files:
65
- - README
66
- test_files: []
67
- library_stubs:
68
- rdoc_options:
69
- extra_rdoc_files:
70
- executables:
71
- - rake
72
- extensions: []
73
- requirements: []
74
- dependencies: []
75
- EOY
76
-
77
- PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, '0.4.2')
78
-
79
- DIR = File.expand_path(File.dirname(__FILE__))
80
-
81
- # Generated via:
82
- # x = OpenSSL::PKey::DH.new(2048) # wait a while...
83
- # x.to_s => pem
84
- # x.priv_key.to_s => hex for OpenSSL::BN.new
85
- TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
86
- -----BEGIN DH PARAMETERS-----
87
- MIIBCAKCAQEA3Ze2EHSfYkZLUn557torAmjBgPsqzbodaRaGZtgK1gEU+9nNJaFV
88
- G1JKhmGUiEDyIW7idsBpe4sX/Wqjnp48Lr8IeI/SlEzLdoGpf05iRYXC8Cm9o8aM
89
- cfmVgoSEAo9YLBpzoji2jHkO7Q5IPt4zxbTdlmmGFLc/GO9q7LGHhC+rcMcNTGsM
90
- 49AnILNn49pq4Y72jSwdmvq4psHZwwFBbPwLdw6bLUDDCN90jfqvYt18muwUxDiN
91
- NP0fuvVAIB158VnQ0liHSwcl6+9vE1mL0Jo/qEXQxl0+UdKDjaGfTsn6HIrwTnmJ
92
- PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
93
- -----END DH PARAMETERS-----
94
- _end_of_pem_
95
-
96
- TEST_KEY_DH2048.priv_key = OpenSSL::BN.new("108911488509734781344423639" \
97
- "5585749502236089033416160524030987005037540379474123441273555416835" \
98
- "4725688238369352738266590757370603937618499698665047757588998555345" \
99
- "3446251978586372525530219375408331096098220027413238477359960428372" \
100
- "0195464393332338164504352015535549496585792320286513563739305843396" \
101
- "9294344974028713065472959376197728193162272314514335882399554394661" \
102
- "5306385003430991221886779612878793446851681835397455333989268503748" \
103
- "7862488679178398716189205737442996155432191656080664090596502674943" \
104
- "7902481557157485795980326766117882761941455140582265347052939604724" \
105
- "964857770053363840471912215799994973597613931991572884", 16)
106
-
107
- def setup
108
- @proxies = %w[https_proxy http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
109
- @old_proxies = @proxies.map {|k| ENV[k] }
110
- @proxies.each {|k| ENV[k] = nil }
111
-
112
- super
113
- self.class.start_servers
114
- self.class.enable_yaml = true
115
- self.class.enable_zip = false
116
-
117
- base_server_uri = "http://localhost:#{self.class.normal_server_port}"
118
- @proxy_uri = "http://localhost:#{self.class.proxy_server_port}"
119
-
120
- @server_uri = base_server_uri + "/yaml"
121
- @server_z_uri = base_server_uri + "/yaml.Z"
122
-
123
- # REFACTOR: copied from test_gem_dependency_installer.rb
124
- @gems_dir = File.join @tempdir, 'gems'
125
- @cache_dir = File.join @gemhome, "cache"
126
- FileUtils.mkdir @gems_dir
127
-
128
- # TODO: why does the remote fetcher need it written to disk?
129
- @a1, @a1_gem = util_gem 'a', '1' do |s| s.executables << 'a_bin' end
130
- @a1.loaded_from = File.join(@gemhome, 'specifications', @a1.full_name)
131
-
132
- Gem::RemoteFetcher.fetcher = nil
133
-
134
- @fetcher = Gem::RemoteFetcher.fetcher
135
- end
136
-
137
- def teardown
138
- @fetcher.close_all
139
- self.class.stop_servers
140
- super
141
- Gem.configuration[:http_proxy] = nil
142
- @proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
143
- end
144
-
145
- def test_self_fetcher
146
- fetcher = Gem::RemoteFetcher.fetcher
147
- refute_nil fetcher
148
- assert_kind_of Gem::RemoteFetcher, fetcher
149
- end
150
-
151
- def test_self_fetcher_with_proxy
152
- proxy_uri = 'http://proxy.example.com'
153
- Gem.configuration[:http_proxy] = proxy_uri
154
- Gem::RemoteFetcher.fetcher = nil
155
-
156
- fetcher = Gem::RemoteFetcher.fetcher
157
-
158
- refute_nil fetcher
159
- assert_kind_of Gem::RemoteFetcher, fetcher
160
- assert_equal proxy_uri, fetcher.instance_variable_get(:@proxy).to_s
161
- end
162
-
163
- def test_fetch_size_bad_uri
164
- fetcher = Gem::RemoteFetcher.new nil
165
- @fetcher = fetcher
166
-
167
- e = assert_raises ArgumentError do
168
- fetcher.fetch_size 'gems.example.com/yaml'
169
- end
170
-
171
- assert_equal 'uri scheme is invalid: nil', e.message
172
- end
173
-
174
- def test_fetch_size_socket_error
175
- fetcher = Gem::RemoteFetcher.new nil
176
- @fetcher = fetcher
177
- def fetcher.request(uri, request_class, last_modified = nil)
178
- raise SocketError, "tarded"
179
- end
180
-
181
- uri = 'http://gems.example.com/yaml'
182
- e = assert_raises Gem::RemoteFetcher::FetchError do
183
- fetcher.fetch_size uri
184
- end
185
-
186
- assert_equal "SocketError: tarded (#{uri})", e.message
187
- end
188
-
189
- def test_no_proxy
190
- use_ui @ui do
191
- assert_data_from_server @fetcher.fetch_path(@server_uri)
192
- assert_equal SERVER_DATA.size, @fetcher.fetch_size(@server_uri)
193
- end
194
- end
195
-
196
- def test_api_endpoint
197
- uri = URI.parse "http://example.com/foo"
198
- target = MiniTest::Mock.new
199
- target.expect :target, "gems.example.com"
200
-
201
- dns = MiniTest::Mock.new
202
- dns.expect :getresource, target, [String, Object]
203
-
204
- fetch = Gem::RemoteFetcher.new nil, dns
205
- assert_equal URI.parse("http://gems.example.com/foo"), fetch.api_endpoint(uri)
206
-
207
- target.verify
208
- dns.verify
209
- end
210
-
211
- def test_api_endpoint_ignores_trans_domain_values
212
- uri = URI.parse "http://gems.example.com/foo"
213
- target = MiniTest::Mock.new
214
- target.expect :target, "blah.com"
215
-
216
- dns = MiniTest::Mock.new
217
- dns.expect :getresource, target, [String, Object]
218
-
219
- fetch = Gem::RemoteFetcher.new nil, dns
220
- assert_equal URI.parse("http://gems.example.com/foo"), fetch.api_endpoint(uri)
221
-
222
- target.verify
223
- dns.verify
224
- end
225
-
226
- def test_api_endpoint_ignores_trans_domain_values_that_starts_with_original
227
- uri = URI.parse "http://example.com/foo"
228
- target = MiniTest::Mock.new
229
- target.expect :target, "example.combadguy.com"
230
-
231
- dns = MiniTest::Mock.new
232
- dns.expect :getresource, target, [String, Object]
233
-
234
- fetch = Gem::RemoteFetcher.new nil, dns
235
- assert_equal URI.parse("http://example.com/foo"), fetch.api_endpoint(uri)
236
-
237
- target.verify
238
- dns.verify
239
- end
240
-
241
- def test_api_endpoint_ignores_trans_domain_values_that_end_with_original
242
- uri = URI.parse "http://example.com/foo"
243
- target = MiniTest::Mock.new
244
- target.expect :target, "badexample.com"
245
-
246
- dns = MiniTest::Mock.new
247
- dns.expect :getresource, target, [String, Object]
248
-
249
- fetch = Gem::RemoteFetcher.new nil, dns
250
- assert_equal URI.parse("http://example.com/foo"), fetch.api_endpoint(uri)
251
-
252
- target.verify
253
- dns.verify
254
- end
255
-
256
- def test_api_endpoint_timeout_warning
257
- uri = URI.parse "http://gems.example.com/foo"
258
-
259
- dns = MiniTest::Mock.new
260
- def dns.getresource arg, *rest
261
- raise Resolv::ResolvError.new('timeout!')
262
- end
263
-
264
- fetch = Gem::RemoteFetcher.new nil, dns
265
- begin
266
- old_verbose, Gem.configuration.verbose = Gem.configuration.verbose, 1
267
- endpoint = use_ui @ui do
268
- fetch.api_endpoint(uri)
269
- end
270
- ensure
271
- Gem.configuration.verbose = old_verbose
272
- end
273
-
274
- assert_equal uri, endpoint
275
-
276
- assert_equal "Getting SRV record failed: timeout!\n", @ui.output
277
-
278
- dns.verify
279
- end
280
-
281
- def test_cache_update_path
282
- uri = URI 'http://example/file'
283
- path = File.join @tempdir, 'file'
284
-
285
- fetcher = util_fuck_with_fetcher 'hello'
286
-
287
- data = fetcher.cache_update_path uri, path
288
-
289
- assert_equal 'hello', data
290
-
291
- assert_equal 'hello', File.read(path)
292
- end
293
-
294
- def test_cache_update_path_no_update
295
- uri = URI 'http://example/file'
296
- path = File.join @tempdir, 'file'
297
-
298
- fetcher = util_fuck_with_fetcher 'hello'
299
-
300
- data = fetcher.cache_update_path uri, path, false
301
-
302
- assert_equal 'hello', data
303
-
304
- refute_path_exists path
305
- end
306
-
307
- def util_fuck_with_fetcher data, blow = false
308
- fetcher = Gem::RemoteFetcher.fetcher
309
- fetcher.instance_variable_set :@test_data, data
310
-
311
- unless blow then
312
- def fetcher.fetch_path arg, *rest
313
- @test_arg = arg
314
- @test_data
315
- end
316
- else
317
- def fetcher.fetch_path arg, *rest
318
- # OMG I'm such an ass
319
- class << self; remove_method :fetch_path; end
320
- def self.fetch_path arg, *rest
321
- @test_arg = arg
322
- @test_data
323
- end
324
-
325
- raise Gem::RemoteFetcher::FetchError.new("haha!", nil)
326
- end
327
- end
328
-
329
- fetcher
330
- end
331
-
332
- def test_download
333
- a1_data = nil
334
- File.open @a1_gem, 'rb' do |fp|
335
- a1_data = fp.read
336
- end
337
-
338
- fetcher = util_fuck_with_fetcher a1_data
339
-
340
- a1_cache_gem = @a1.cache_file
341
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://gems.example.com')
342
- assert_equal("http://gems.example.com/gems/a-1.gem",
343
- fetcher.instance_variable_get(:@test_arg).to_s)
344
- assert File.exist?(a1_cache_gem)
345
- end
346
-
347
- def test_download_with_auth
348
- a1_data = nil
349
- File.open @a1_gem, 'rb' do |fp|
350
- a1_data = fp.read
351
- end
352
-
353
- fetcher = util_fuck_with_fetcher a1_data
354
-
355
- a1_cache_gem = @a1.cache_file
356
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://user:password@gems.example.com')
357
- assert_equal("http://user:password@gems.example.com/gems/a-1.gem",
358
- fetcher.instance_variable_get(:@test_arg).to_s)
359
- assert File.exist?(a1_cache_gem)
360
- end
361
-
362
- def test_download_with_encoded_auth
363
- a1_data = nil
364
- File.open @a1_gem, 'rb' do |fp|
365
- a1_data = fp.read
366
- end
367
-
368
- fetcher = util_fuck_with_fetcher a1_data
369
-
370
- a1_cache_gem = @a1.cache_file
371
- assert_equal a1_cache_gem, fetcher.download(@a1, 'http://user:%25pas%25sword@gems.example.com')
372
- assert_equal("http://user:%25pas%25sword@gems.example.com/gems/a-1.gem",
373
- fetcher.instance_variable_get(:@test_arg).to_s)
374
- assert File.exist?(a1_cache_gem)
375
- end
376
-
377
- def test_download_cached
378
- FileUtils.mv @a1_gem, @cache_dir
379
-
380
- inst = Gem::RemoteFetcher.fetcher
381
-
382
- assert_equal @a1.cache_file, inst.download(@a1, 'http://gems.example.com')
383
- end
384
-
385
- def test_download_local
386
- FileUtils.mv @a1_gem, @tempdir
387
- local_path = File.join @tempdir, @a1.file_name
388
- inst = nil
389
-
390
- Dir.chdir @tempdir do
391
- inst = Gem::RemoteFetcher.fetcher
392
- end
393
-
394
- assert_equal @a1.cache_file, inst.download(@a1, local_path)
395
- end
396
-
397
- def test_download_local_space
398
- space_path = File.join @tempdir, 'space path'
399
- FileUtils.mkdir space_path
400
- FileUtils.mv @a1_gem, space_path
401
- local_path = File.join space_path, @a1.file_name
402
- inst = nil
403
-
404
- Dir.chdir @tempdir do
405
- inst = Gem::RemoteFetcher.fetcher
406
- end
407
-
408
- assert_equal @a1.cache_file, inst.download(@a1, local_path)
409
- end
410
-
411
- def test_download_install_dir
412
- a1_data = File.open @a1_gem, 'rb' do |fp|
413
- fp.read
414
- end
415
-
416
- fetcher = util_fuck_with_fetcher a1_data
417
-
418
- install_dir = File.join @tempdir, 'more_gems'
419
-
420
- a1_cache_gem = File.join install_dir, "cache", @a1.file_name
421
- FileUtils.mkdir_p(File.dirname(a1_cache_gem))
422
- actual = fetcher.download(@a1, 'http://gems.example.com', install_dir)
423
-
424
- assert_equal a1_cache_gem, actual
425
- assert_equal("http://gems.example.com/gems/a-1.gem",
426
- fetcher.instance_variable_get(:@test_arg).to_s)
427
-
428
- assert File.exist?(a1_cache_gem)
429
- end
430
-
431
- unless win_platform? # File.chmod doesn't work
432
- def test_download_local_read_only
433
- FileUtils.mv @a1_gem, @tempdir
434
- local_path = File.join @tempdir, @a1.file_name
435
- inst = nil
436
- FileUtils.chmod 0555, @a1.cache_dir
437
-
438
- Dir.chdir @tempdir do
439
- inst = Gem::RemoteFetcher.fetcher
440
- end
441
-
442
- assert_equal(File.join(@tempdir, @a1.file_name),
443
- inst.download(@a1, local_path))
444
- ensure
445
- FileUtils.chmod 0755, @a1.cache_dir
446
- end
447
-
448
- def test_download_read_only
449
- FileUtils.chmod 0555, @a1.cache_dir
450
- FileUtils.chmod 0555, @gemhome
451
-
452
- fetcher = util_fuck_with_fetcher File.read(@a1_gem)
453
- fetcher.download(@a1, 'http://gems.example.com')
454
- a1_cache_gem = File.join Gem.user_dir, "cache", @a1.file_name
455
- assert File.exist? a1_cache_gem
456
- ensure
457
- FileUtils.chmod 0755, @gemhome
458
- FileUtils.chmod 0755, @a1.cache_dir
459
- end
460
- end
461
-
462
- def test_download_platform_legacy
463
- original_platform = 'old-platform'
464
-
465
- e1, e1_gem = util_gem 'e', '1' do |s|
466
- s.platform = Gem::Platform::CURRENT
467
- s.instance_variable_set :@original_platform, original_platform
468
- end
469
- e1.loaded_from = File.join(@gemhome, 'specifications', e1.full_name)
470
-
471
- e1_data = nil
472
- File.open e1_gem, 'rb' do |fp|
473
- e1_data = fp.read
474
- end
475
-
476
- fetcher = util_fuck_with_fetcher e1_data, :blow_chunks
477
-
478
- e1_cache_gem = e1.cache_file
479
-
480
- assert_equal e1_cache_gem, fetcher.download(e1, 'http://gems.example.com')
481
-
482
- assert_equal("http://gems.example.com/gems/#{e1.original_name}.gem",
483
- fetcher.instance_variable_get(:@test_arg).to_s)
484
- assert File.exist?(e1_cache_gem)
485
- end
486
-
487
- def test_download_same_file
488
- FileUtils.mv @a1_gem, @tempdir
489
- local_path = File.join @tempdir, @a1.file_name
490
- inst = nil
491
-
492
- Dir.chdir @tempdir do
493
- inst = Gem::RemoteFetcher.fetcher
494
- end
495
-
496
- cache_path = @a1.cache_file
497
- FileUtils.mv local_path, cache_path
498
-
499
- gem = Gem::Package.new cache_path
500
-
501
- assert_equal cache_path, inst.download(gem.spec, cache_path)
502
- end
503
-
504
- def test_download_unsupported
505
- inst = Gem::RemoteFetcher.fetcher
506
-
507
- e = assert_raises ArgumentError do
508
- inst.download @a1, 'ftp://gems.rubyforge.org'
509
- end
510
-
511
- assert_equal 'unsupported URI scheme ftp', e.message
512
- end
513
-
514
- def test_download_to_cache
515
- @a2, @a2_gem = util_gem 'a', '2'
516
-
517
- util_setup_spec_fetcher @a1, @a2
518
- @fetcher.instance_variable_set :@a1, @a1
519
- @fetcher.instance_variable_set :@a2, @a2
520
- def @fetcher.fetch_path uri, mtime = nil, head = false
521
- case uri.request_uri
522
- when /#{@a1.spec_name}/ then
523
- Gem.deflate Marshal.dump @a1
524
- when /#{@a2.spec_name}/ then
525
- Gem.deflate Marshal.dump @a2
526
- else
527
- uri.to_s
528
- end
529
- end
530
-
531
- gem = Gem::RemoteFetcher.fetcher.download_to_cache dep 'a'
532
-
533
- assert_equal @a2.file_name, File.basename(gem)
534
- end
535
-
536
- def test_fetch_path_gzip
537
- fetcher = Gem::RemoteFetcher.new nil
538
- @fetcher = fetcher
539
-
540
- def fetcher.fetch_http(uri, mtime, head = nil)
541
- Gem.gzip 'foo'
542
- end
543
-
544
- assert_equal 'foo', fetcher.fetch_path(@uri + 'foo.gz')
545
- end
546
-
547
- def test_fetch_path_gzip_unmodified
548
- fetcher = Gem::RemoteFetcher.new nil
549
- @fetcher = fetcher
550
-
551
- def fetcher.fetch_http(uri, mtime, head = nil)
552
- nil
553
- end
554
-
555
- assert_equal nil, fetcher.fetch_path(@uri + 'foo.gz', Time.at(0))
556
- end
557
-
558
- def test_fetch_path_io_error
559
- fetcher = Gem::RemoteFetcher.new nil
560
- @fetcher = fetcher
561
-
562
- def fetcher.fetch_http(*)
563
- raise EOFError
564
- end
565
-
566
- url = 'http://example.com/uri'
567
-
568
- e = assert_raises Gem::RemoteFetcher::FetchError do
569
- fetcher.fetch_path url
570
- end
571
-
572
- assert_equal "EOFError: EOFError (#{url})", e.message
573
- assert_equal url, e.uri
574
- end
575
-
576
- def test_fetch_path_socket_error
577
- fetcher = Gem::RemoteFetcher.new nil
578
- @fetcher = fetcher
579
-
580
- def fetcher.fetch_http(uri, mtime, head = nil)
581
- raise SocketError
582
- end
583
-
584
- url = 'http://example.com/uri'
585
-
586
- e = assert_raises Gem::RemoteFetcher::FetchError do
587
- fetcher.fetch_path url
588
- end
589
-
590
- assert_equal "SocketError: SocketError (#{url})", e.message
591
- assert_equal url, e.uri
592
- end
593
-
594
- def test_fetch_path_system_call_error
595
- fetcher = Gem::RemoteFetcher.new nil
596
- @fetcher = fetcher
597
-
598
- def fetcher.fetch_http(uri, mtime = nil, head = nil)
599
- raise Errno::ECONNREFUSED, 'connect(2)'
600
- end
601
-
602
- url = 'http://example.com/uri'
603
-
604
- e = assert_raises Gem::RemoteFetcher::FetchError do
605
- fetcher.fetch_path url
606
- end
607
-
608
- assert_match %r|ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z|,
609
- e.message
610
- assert_equal url, e.uri
611
- end
612
-
613
- def test_fetch_path_unmodified
614
- fetcher = Gem::RemoteFetcher.new nil
615
- @fetcher = fetcher
616
-
617
- def fetcher.fetch_http(uri, mtime, head = nil)
618
- nil
619
- end
620
-
621
- assert_equal nil, fetcher.fetch_path(URI.parse(@gem_repo), Time.at(0))
622
- end
623
-
624
- def test_implicit_no_proxy
625
- use_ui @ui do
626
- ENV['http_proxy'] = 'http://fakeurl:12345'
627
- fetcher = Gem::RemoteFetcher.new :no_proxy
628
- @fetcher = fetcher
629
- assert_data_from_server fetcher.fetch_path(@server_uri)
630
- end
631
- end
632
-
633
- def test_implicit_proxy
634
- use_ui @ui do
635
- ENV['http_proxy'] = @proxy_uri
636
- fetcher = Gem::RemoteFetcher.new nil
637
- @fetcher = fetcher
638
- assert_data_from_proxy fetcher.fetch_path(@server_uri)
639
- end
640
- end
641
-
642
- def test_implicit_upper_case_proxy
643
- use_ui @ui do
644
- ENV['HTTP_PROXY'] = @proxy_uri
645
- fetcher = Gem::RemoteFetcher.new nil
646
- @fetcher = fetcher
647
- assert_data_from_proxy fetcher.fetch_path(@server_uri)
648
- end
649
- end
650
-
651
- def test_implicit_proxy_no_env
652
- use_ui @ui do
653
- fetcher = Gem::RemoteFetcher.new nil
654
- @fetcher = fetcher
655
- assert_data_from_server fetcher.fetch_path(@server_uri)
656
- end
657
- end
658
-
659
- def test_fetch_http
660
- fetcher = Gem::RemoteFetcher.new nil
661
- @fetcher = fetcher
662
- url = 'http://gems.example.com/redirect'
663
-
664
- def fetcher.request(uri, request_class, last_modified = nil)
665
- url = 'http://gems.example.com/redirect'
666
- unless defined? @requested then
667
- @requested = true
668
- res = Net::HTTPMovedPermanently.new nil, 301, nil
669
- res.add_field 'Location', url
670
- res
671
- else
672
- res = Net::HTTPOK.new nil, 200, nil
673
- def res.body() 'real_path' end
674
- res
675
- end
676
- end
677
-
678
- data = fetcher.fetch_http URI.parse(url)
679
-
680
- assert_equal 'real_path', data
681
- end
682
-
683
- def test_fetch_http_redirects
684
- fetcher = Gem::RemoteFetcher.new nil
685
- @fetcher = fetcher
686
- url = 'http://gems.example.com/redirect'
687
-
688
- def fetcher.request(uri, request_class, last_modified = nil)
689
- url = 'http://gems.example.com/redirect'
690
- res = Net::HTTPMovedPermanently.new nil, 301, nil
691
- res.add_field 'Location', url
692
- res
693
- end
694
-
695
- e = assert_raises Gem::RemoteFetcher::FetchError do
696
- fetcher.fetch_http URI.parse(url)
697
- end
698
-
699
- assert_equal "too many redirects (#{url})", e.message
700
- end
701
-
702
- def test_fetch_http_with_additional_headers
703
- ENV["http_proxy"] = @proxy_uri
704
- ENV["no_proxy"] = URI::parse(@server_uri).host
705
- fetcher = Gem::RemoteFetcher.new nil, nil, {"X-Captain" => "murphy"}
706
- @fetcher = fetcher
707
- assert_equal "murphy", fetcher.fetch_path(@server_uri)
708
- end
709
-
710
- def test_fetch_s3
711
- fetcher = Gem::RemoteFetcher.new nil
712
- @fetcher = fetcher
713
- url = 's3://testuser:testpass@my-bucket/gems/specs.4.8.gz'
714
- $fetched_uri = nil
715
-
716
- def fetcher.request(uri, request_class, last_modified = nil)
717
- $fetched_uri = uri
718
- res = Net::HTTPOK.new nil, 200, nil
719
- def res.body() 'success' end
720
- res
721
- end
722
-
723
- def fetcher.s3_expiration
724
- 1395098371
725
- end
726
-
727
- data = fetcher.fetch_s3 URI.parse(url)
728
-
729
- 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
730
- assert_equal 'success', data
731
- ensure
732
- $fetched_uri = nil
733
- end
734
-
735
- def test_fetch_s3_no_creds
736
- fetcher = Gem::RemoteFetcher.new nil
737
- @fetcher = fetcher
738
- url = 's3://my-bucket/gems/specs.4.8.gz'
739
- e = assert_raises Gem::RemoteFetcher::FetchError do
740
- fetcher.fetch_s3 URI.parse(url)
741
- end
742
-
743
- assert_match "credentials needed", e.message
744
- end
745
-
746
- def test_observe_no_proxy_env_single_host
747
- use_ui @ui do
748
- ENV["http_proxy"] = @proxy_uri
749
- ENV["no_proxy"] = URI::parse(@server_uri).host
750
- fetcher = Gem::RemoteFetcher.new nil
751
- @fetcher = fetcher
752
- assert_data_from_server fetcher.fetch_path(@server_uri)
753
- end
754
- end
755
-
756
- def test_observe_no_proxy_env_list
757
- use_ui @ui do
758
- ENV["http_proxy"] = @proxy_uri
759
- ENV["no_proxy"] = "fakeurl.com, #{URI::parse(@server_uri).host}"
760
- fetcher = Gem::RemoteFetcher.new nil
761
- @fetcher = fetcher
762
- assert_data_from_server fetcher.fetch_path(@server_uri)
763
- end
764
- end
765
-
766
- def test_request_block
767
- fetcher = Gem::RemoteFetcher.new nil
768
- @fetcher = fetcher
769
-
770
- assert_throws :block_called do
771
- fetcher.request URI('http://example'), Net::HTTP::Get do |req|
772
- assert_kind_of Net::HTTPGenericRequest, req
773
- throw :block_called
774
- end
775
- end
776
- end
777
-
778
- def test_yaml_error_on_size
779
- use_ui @ui do
780
- self.class.enable_yaml = false
781
- fetcher = Gem::RemoteFetcher.new nil
782
- @fetcher = fetcher
783
- assert_error { fetcher.size }
784
- end
785
- end
786
-
787
- def test_ssl_connection
788
- ssl_server = self.class.start_ssl_server
789
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
790
- with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
791
- fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
792
- end
793
- end
794
-
795
- def test_ssl_client_cert_auth_connection
796
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
797
-
798
- ssl_server = self.class.start_ssl_server({
799
- :SSLVerifyClient =>
800
- OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
801
-
802
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
803
- temp_client_cert = File.join(DIR, 'client.pem')
804
-
805
- with_configured_fetcher(
806
- ":ssl_ca_cert: #{temp_ca_cert}\n" +
807
- ":ssl_client_cert: #{temp_client_cert}\n") do |fetcher|
808
- fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
809
- end
810
- end
811
-
812
- def test_do_not_allow_invalid_client_cert_auth_connection
813
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
814
-
815
- ssl_server = self.class.start_ssl_server({
816
- :SSLVerifyClient =>
817
- OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
818
-
819
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
820
- temp_client_cert = File.join(DIR, 'invalid_client.pem')
821
-
822
- with_configured_fetcher(
823
- ":ssl_ca_cert: #{temp_ca_cert}\n" +
824
- ":ssl_client_cert: #{temp_client_cert}\n") do |fetcher|
825
- assert_raises Gem::RemoteFetcher::FetchError do
826
- fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
827
- end
828
- end
829
- end
830
-
831
- def test_do_not_allow_insecure_ssl_connection_by_default
832
- ssl_server = self.class.start_ssl_server
833
- with_configured_fetcher do |fetcher|
834
- assert_raises Gem::RemoteFetcher::FetchError do
835
- fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
836
- end
837
- end
838
- end
839
-
840
- def test_ssl_connection_allow_verify_none
841
- ssl_server = self.class.start_ssl_server
842
- with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher|
843
- fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
844
- end
845
- end
846
-
847
- def test_do_not_follow_insecure_redirect
848
- ssl_server = self.class.start_ssl_server
849
- temp_ca_cert = File.join(DIR, 'ca_cert.pem'),
850
- with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
851
- assert_raises Gem::RemoteFetcher::FetchError do
852
- fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri}")
853
- end
854
- end
855
- end
856
-
857
- def with_configured_fetcher(config_str = nil, &block)
858
- if config_str
859
- temp_conf = File.join @tempdir, '.gemrc'
860
- File.open temp_conf, 'w' do |fp|
861
- fp.puts config_str
862
- end
863
- Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
864
- end
865
- fetcher = Gem::RemoteFetcher.new
866
- yield fetcher
867
- ensure
868
- fetcher.close_all
869
- Gem.configuration = nil
870
- end
871
-
872
- def assert_error(exception_class=Exception)
873
- got_exception = false
874
-
875
- begin
876
- yield
877
- rescue exception_class
878
- got_exception = true
879
- end
880
-
881
- assert got_exception, "Expected exception conforming to #{exception_class}"
882
- end
883
-
884
- def assert_data_from_server(data)
885
- assert_match(/0\.4\.11/, data, "Data is not from server")
886
- end
887
-
888
- def assert_data_from_proxy(data)
889
- assert_match(/0\.4\.2/, data, "Data is not from proxy")
890
- end
891
-
892
- class NilLog < WEBrick::Log
893
- def log(level, data) #Do nothing
894
- end
895
- end
896
-
897
- class << self
898
- attr_reader :normal_server, :proxy_server
899
- attr_accessor :enable_zip, :enable_yaml
900
-
901
- def start_servers
902
- @normal_server ||= start_server(SERVER_DATA)
903
- @proxy_server ||= start_server(PROXY_DATA)
904
- @enable_yaml = true
905
- @enable_zip = false
906
- @ssl_server = nil
907
- @ssl_server_thread = nil
908
- end
909
-
910
- def stop_servers
911
- if @normal_server
912
- @normal_server.kill.join
913
- @normal_server = nil
914
- end
915
- if @proxy_server
916
- @proxy_server.kill.join
917
- @proxy_server = nil
918
- end
919
- if @ssl_server
920
- @ssl_server.stop
921
- @ssl_server = nil
922
- end
923
- if @ssl_server_thread
924
- @ssl_server_thread.kill.join
925
- @ssl_server_thread = nil
926
- end
927
- utils = WEBrick::Utils # TimeoutHandler is since 1.9
928
- utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
929
- end
930
-
931
- def normal_server_port
932
- @normal_server[:server].config[:Port]
933
- end
934
-
935
- def proxy_server_port
936
- @proxy_server[:server].config[:Port]
937
- end
938
-
939
- DIR = File.expand_path(File.dirname(__FILE__))
940
-
941
- def start_ssl_server(config = {})
942
- raise MiniTest::Skip, 'openssl not installed' unless
943
- defined?(OpenSSL::SSL)
944
-
945
- null_logger = NilLog.new
946
- server = WEBrick::HTTPServer.new({
947
- :Port => 0,
948
- :Logger => null_logger,
949
- :AccessLog => [],
950
- :SSLEnable => true,
951
- :SSLCACertificateFile => File.join(DIR, 'ca_cert.pem'),
952
- :SSLCertificate => cert('ssl_cert.pem'),
953
- :SSLPrivateKey => key('ssl_key.pem'),
954
- :SSLVerifyClient => nil,
955
- :SSLCertName => nil
956
- }.merge(config))
957
- server.mount_proc("/yaml") { |req, res|
958
- res.body = "--- true\n"
959
- }
960
- server.mount_proc("/insecure_redirect") { |req, res|
961
- res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
962
- }
963
- server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
964
- t = Thread.new do
965
- begin
966
- server.start
967
- rescue Exception => ex
968
- abort ex.message
969
- puts "ERROR during server thread: #{ex.message}"
970
- ensure
971
- server.shutdown
972
- end
973
- end
974
- while server.status != :Running
975
- sleep 0.1
976
- unless t.alive?
977
- t.join
978
- raise
979
- end
980
- end
981
- @ssl_server = server
982
- @ssl_server_thread = t
983
- server
984
- end
985
-
986
- private
987
-
988
- def start_server(data)
989
- null_logger = NilLog.new
990
- s = WEBrick::HTTPServer.new(
991
- :Port => 0,
992
- :DocumentRoot => nil,
993
- :Logger => null_logger,
994
- :AccessLog => null_logger
995
- )
996
- s.mount_proc("/kill") { |req, res| s.shutdown }
997
- s.mount_proc("/yaml") { |req, res|
998
- if req["X-Captain"]
999
- res.body = req["X-Captain"]
1000
- elsif @enable_yaml
1001
- res.body = data
1002
- res['Content-Type'] = 'text/plain'
1003
- res['content-length'] = data.size
1004
- else
1005
- res.status = "404"
1006
- res.body = "<h1>NOT FOUND</h1>"
1007
- res['Content-Type'] = 'text/html'
1008
- end
1009
- }
1010
- s.mount_proc("/yaml.Z") { |req, res|
1011
- if @enable_zip
1012
- res.body = Zlib::Deflate.deflate(data)
1013
- res['Content-Type'] = 'text/plain'
1014
- else
1015
- res.status = "404"
1016
- res.body = "<h1>NOT FOUND</h1>"
1017
- res['Content-Type'] = 'text/html'
1018
- end
1019
- }
1020
- th = Thread.new do
1021
- begin
1022
- s.start
1023
- rescue Exception => ex
1024
- abort "ERROR during server thread: #{ex.message}"
1025
- ensure
1026
- s.shutdown
1027
- end
1028
- end
1029
- th[:server] = s
1030
- th
1031
- end
1032
-
1033
- def cert(filename)
1034
- OpenSSL::X509::Certificate.new(File.read(File.join(DIR, filename)))
1035
- end
1036
-
1037
- def key(filename)
1038
- OpenSSL::PKey::RSA.new(File.read(File.join(DIR, filename)))
1039
- end
1040
- end
1041
-
1042
- def test_correct_for_windows_path
1043
- path = "/C:/WINDOWS/Temp/gems"
1044
- assert_equal "C:/WINDOWS/Temp/gems", @fetcher.correct_for_windows_path(path)
1045
-
1046
- path = "/home/skillet"
1047
- assert_equal "/home/skillet", @fetcher.correct_for_windows_path(path)
1048
- end
1049
-
1050
- end
1051
-